Created
May 23, 2022 04:55
-
-
Save wellington1993/2dea9994b52dc2a217c1a078ae1e1382 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
!function(e){var r={};function s(n){if(r[n])return r[n].exports;var a=r[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,s),a.l=!0,a.exports}s.m=e,s.c=r,s.d=function(e,r,n){s.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:n})},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,r){if(1&r&&(e=s(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(s.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var a in e)s.d(n,a,function(r){return e[r]}.bind(null,a));return n},s.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(r,"a",r),r},s.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},s.p="",s(s.s=249)}({249:function(e,r,s){var n=s(65),a=n.extension.getURL("injected.js"),t=document.createElement("script");t.setAttribute("defer","defer"),t.setAttribute("type","text/javascript"),t.setAttribute("src",a),document.documentElement.appendChild(t),t.parentNode.removeChild(t),n.runtime.onMessage.addListener((function(e){"injected"===e.to&&postMessage({from:"content",proxyFrom:e.from,to:e.to,action:e.action,payload:e.payload||{}},"*")})),window.addEventListener("message",(function(e){"injected"===e.data.from?e.data.action&&n.runtime.sendMessage({from:"content",proxyFrom:e.data.from,to:e.data.to,action:e.data.action,payload:e.data.payload}):"popup"===e.data.from||e.data.from}))},65:function(e,r,s){var n,a,t;a=[e],void 0===(t="function"==typeof(n=function(e){"use strict";if("undefined"==typeof browser||Object.getPrototypeOf(browser)!==Object.prototype){const r="The message port closed before a response was received.",s="Returning a Promise is the preferred way to send a reply from an onMessage/onMessageExternal listener, as the sendResponse will be removed from the specs (See https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage)",n=()=>{const e={alarms:{clear:{minArgs:0,maxArgs:1},clearAll:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getAll:{minArgs:0,maxArgs:0}},bookmarks:{create:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},getChildren:{minArgs:1,maxArgs:1},getRecent:{minArgs:1,maxArgs:1},getSubTree:{minArgs:1,maxArgs:1},getTree:{minArgs:0,maxArgs:0},move:{minArgs:2,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeTree:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}},browserAction:{disable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},enable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},getBadgeBackgroundColor:{minArgs:1,maxArgs:1},getBadgeText:{minArgs:1,maxArgs:1},getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},openPopup:{minArgs:0,maxArgs:0},setBadgeBackgroundColor:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setBadgeText:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},browsingData:{remove:{minArgs:2,maxArgs:2},removeCache:{minArgs:1,maxArgs:1},removeCookies:{minArgs:1,maxArgs:1},removeDownloads:{minArgs:1,maxArgs:1},removeFormData:{minArgs:1,maxArgs:1},removeHistory:{minArgs:1,maxArgs:1},removeLocalStorage:{minArgs:1,maxArgs:1},removePasswords:{minArgs:1,maxArgs:1},removePluginData:{minArgs:1,maxArgs:1},settings:{minArgs:0,maxArgs:0}},commands:{getAll:{minArgs:0,maxArgs:0}},contextMenus:{remove:{minArgs:1,maxArgs:1},removeAll:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},cookies:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:1,maxArgs:1},getAllCookieStores:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},devtools:{inspectedWindow:{eval:{minArgs:1,maxArgs:2}},panels:{create:{minArgs:3,maxArgs:3,singleCallbackArg:!0}}},downloads:{cancel:{minArgs:1,maxArgs:1},download:{minArgs:1,maxArgs:1},erase:{minArgs:1,maxArgs:1},getFileIcon:{minArgs:1,maxArgs:2},open:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},pause:{minArgs:1,maxArgs:1},removeFile:{minArgs:1,maxArgs:1},resume:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},extension:{isAllowedFileSchemeAccess:{minArgs:0,maxArgs:0},isAllowedIncognitoAccess:{minArgs:0,maxArgs:0}},history:{addUrl:{minArgs:1,maxArgs:1},deleteAll:{minArgs:0,maxArgs:0},deleteRange:{minArgs:1,maxArgs:1},deleteUrl:{minArgs:1,maxArgs:1},getVisits:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1}},i18n:{detectLanguage:{minArgs:1,maxArgs:1},getAcceptLanguages:{minArgs:0,maxArgs:0}},identity:{launchWebAuthFlow:{minArgs:1,maxArgs:1}},idle:{queryState:{minArgs:1,maxArgs:1}},management:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},getSelf:{minArgs:0,maxArgs:0},setEnabled:{minArgs:2,maxArgs:2},uninstallSelf:{minArgs:0,maxArgs:1}},notifications:{clear:{minArgs:1,maxArgs:1},create:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:0},getPermissionLevel:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},pageAction:{getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},hide:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},permissions:{contains:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},request:{minArgs:1,maxArgs:1}},runtime:{getBackgroundPage:{minArgs:0,maxArgs:0},getBrowserInfo:{minArgs:0,maxArgs:0},getPlatformInfo:{minArgs:0,maxArgs:0},openOptionsPage:{minArgs:0,maxArgs:0},requestUpdateCheck:{minArgs:0,maxArgs:0},sendMessage:{minArgs:1,maxArgs:3},sendNativeMessage:{minArgs:2,maxArgs:2},setUninstallURL:{minArgs:1,maxArgs:1}},sessions:{getDevices:{minArgs:0,maxArgs:1},getRecentlyClosed:{minArgs:0,maxArgs:1},restore:{minArgs:0,maxArgs:1}},storage:{local:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},managed:{get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1}},sync:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}}},tabs:{captureVisibleTab:{minArgs:0,maxArgs:2},create:{minArgs:1,maxArgs:1},detectLanguage:{minArgs:0,maxArgs:1},discard:{minArgs:0,maxArgs:1},duplicate:{minArgs:1,maxArgs:1},executeScript:{minArgs:1,maxArgs:2},get:{minArgs:1,maxArgs:1},getCurrent:{minArgs:0,maxArgs:0},getZoom:{minArgs:0,maxArgs:1},getZoomSettings:{minArgs:0,maxArgs:1},highlight:{minArgs:1,maxArgs:1},insertCSS:{minArgs:1,maxArgs:2},move:{minArgs:2,maxArgs:2},query:{minArgs:1,maxArgs:1},reload:{minArgs:0,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeCSS:{minArgs:1,maxArgs:2},sendMessage:{minArgs:2,maxArgs:3},setZoom:{minArgs:1,maxArgs:2},setZoomSettings:{minArgs:1,maxArgs:2},update:{minArgs:1,maxArgs:2}},topSites:{get:{minArgs:0,maxArgs:0}},webNavigation:{getAllFrames:{minArgs:1,maxArgs:1},getFrame:{minArgs:1,maxArgs:1}},webRequest:{handlerBehaviorChanged:{minArgs:0,maxArgs:0}},windows:{create:{minArgs:0,maxArgs:1},get:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:1},getCurrent:{minArgs:0,maxArgs:1},getLastFocused:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}}};if(0===Object.keys(e).length)throw new Error("api-metadata.json has not been included in browser-polyfill");class n extends WeakMap{constructor(e,r){super(r),this.createItem=e}get(e){return this.has(e)||this.set(e,this.createItem(e)),super.get(e)}}const a=(e,r)=>(...s)=>{chrome.runtime.lastError?e.reject(chrome.runtime.lastError):r.singleCallbackArg||s.length<=1?e.resolve(s[0]):e.resolve(s)},t=e=>1==e?"argument":"arguments",g=(e,r,s)=>new Proxy(r,{apply:(r,n,a)=>s.call(n,e,...a)});let m=Function.call.bind(Object.prototype.hasOwnProperty);const o=(e,r={},s={})=>{let n=Object.create(null),i={has:(r,s)=>s in e||s in n,get(i,A,l){if(A in n)return n[A];if(!(A in e))return;let c=e[A];if("function"==typeof c)if("function"==typeof r[A])c=g(e,e[A],r[A]);else if(m(s,A)){let r=((e,r)=>function(s,...n){if(n.length<r.minArgs)throw new Error(`Expected at least ${r.minArgs} ${t(r.minArgs)} for ${e}(), got ${n.length}`);if(n.length>r.maxArgs)throw new Error(`Expected at most ${r.maxArgs} ${t(r.maxArgs)} for ${e}(), got ${n.length}`);return new Promise((t,g)=>{if(r.fallbackToNoCallback)try{s[e](...n,a({resolve:t,reject:g},r))}catch(a){console.warn(e+" API method doesn't seem to support the callback parameter, falling back to call it without a callback: ",a),s[e](...n),r.fallbackToNoCallback=!1,r.noCallback=!0,t()}else r.noCallback?(s[e](...n),t()):s[e](...n,a({resolve:t,reject:g},r))})})(A,s[A]);c=g(e,e[A],r)}else c=c.bind(e);else{if("object"!=typeof c||null===c||!m(r,A)&&!m(s,A))return Object.defineProperty(n,A,{configurable:!0,enumerable:!0,get:()=>e[A],set(r){e[A]=r}}),c;c=o(c,r[A],s[A])}return n[A]=c,c},set:(r,s,a,t)=>(s in n?n[s]=a:e[s]=a,!0),defineProperty:(e,r,s)=>Reflect.defineProperty(n,r,s),deleteProperty:(e,r)=>Reflect.deleteProperty(n,r)},A=Object.create(e);return new Proxy(A,i)},i=e=>({addListener(r,s,...n){r.addListener(e.get(s),...n)},hasListener:(r,s)=>r.hasListener(e.get(s)),removeListener(r,s){r.removeListener(e.get(s))}});let A=!1;const l=new n(e=>"function"!=typeof e?e:function(r,n,a){let t,g,m=!1,o=new Promise(e=>{t=function(r){A||(console.warn(s,(new Error).stack),A=!0),m=!0,e(r)}});try{g=e(r,n,t)}catch(e){g=Promise.reject(e)}const i=!0!==g&&(l=g)&&"object"==typeof l&&"function"==typeof l.then;var l;if(!0!==g&&!i&&!m)return!1;const c=e=>{e.then(e=>{a(e)},e=>{let r;r=e&&(e instanceof Error||"string"==typeof e.message)?e.message:"An unexpected error occurred",a({__mozWebExtensionPolyfillReject__:!0,message:r})}).catch(e=>{console.error("Failed to send onMessage rejected reply",e)})};return c(i?g:o),!0}),c=({reject:e,resolve:s},n)=>{chrome.runtime.lastError?chrome.runtime.lastError.message===r?s():e(chrome.runtime.lastError):n&&n.__mozWebExtensionPolyfillReject__?e(new Error(n.message)):s(n)},x=(e,r,s,...n)=>{if(n.length<r.minArgs)throw new Error(`Expected at least ${r.minArgs} ${t(r.minArgs)} for ${e}(), got ${n.length}`);if(n.length>r.maxArgs)throw new Error(`Expected at most ${r.maxArgs} ${t(r.maxArgs)} for ${e}(), got ${n.length}`);return new Promise((e,r)=>{const a=c.bind(null,{resolve:e,reject:r});n.push(a),s.sendMessage(...n)})},d={runtime:{onMessage:i(l),onMessageExternal:i(l),sendMessage:x.bind(null,"sendMessage",{minArgs:1,maxArgs:3})},tabs:{sendMessage:x.bind(null,"sendMessage",{minArgs:2,maxArgs:3})}},u={clear:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}};return e.privacy={network:{networkPredictionEnabled:u,webRTCIPHandlingPolicy:u},services:{passwordSavingEnabled:u},websites:{hyperlinkAuditingEnabled:u,referrersEnabled:u}},o(chrome,d,e)};e.exports=n()}else e.exports=browser})?n.apply(r,a):n)||(e.exports=t)}}); | |
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vY29udGVudC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3dlYmV4dGVuc2lvbi1wb2x5ZmlsbC9kaXN0L2Jyb3dzZXItcG9seWZpbGwuanMiXSwibmFtZXMiOlsiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImV4cG9ydHMiLCJtb2R1bGUiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJicm93c2VyIiwicmVxdWlyZSIsImNvbnRlbnQiLCJleHRlbnNpb24iLCJnZXRVUkwiLCJzY3JpcHQiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJkb2N1bWVudEVsZW1lbnQiLCJhcHBlbmRDaGlsZCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInJ1bnRpbWUiLCJvbk1lc3NhZ2UiLCJhZGRMaXN0ZW5lciIsIm1lc3NhZ2UiLCJ0byIsInBvc3RNZXNzYWdlIiwiZnJvbSIsInByb3h5RnJvbSIsImFjdGlvbiIsInBheWxvYWQiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJkYXRhIiwic2VuZE1lc3NhZ2UiLCJnZXRQcm90b3R5cGVPZiIsIkNIUk9NRV9TRU5EX01FU1NBR0VfQ0FMTEJBQ0tfTk9fUkVTUE9OU0VfTUVTU0FHRSIsIlNFTkRfUkVTUE9OU0VfREVQUkVDQVRJT05fV0FSTklORyIsIndyYXBBUElzIiwiYXBpTWV0YWRhdGEiLCJrZXlzIiwibGVuZ3RoIiwiRXJyb3IiLCJEZWZhdWx0V2Vha01hcCIsIldlYWtNYXAiLCJjcmVhdGVJdGVtIiwiaXRlbXMiLCJzdXBlciIsInRoaXMiLCJoYXMiLCJzZXQiLCJtYWtlQ2FsbGJhY2siLCJwcm9taXNlIiwibWV0YWRhdGEiLCJjYWxsYmFja0FyZ3MiLCJjaHJvbWUiLCJsYXN0RXJyb3IiLCJyZWplY3QiLCJzaW5nbGVDYWxsYmFja0FyZyIsInJlc29sdmUiLCJwbHVyYWxpemVBcmd1bWVudHMiLCJudW1BcmdzIiwid3JhcE1ldGhvZCIsInRhcmdldCIsIm1ldGhvZCIsIndyYXBwZXIiLCJQcm94eSIsImFwcGx5IiwidGFyZ2V0TWV0aG9kIiwidGhpc09iaiIsImFyZ3MiLCJGdW5jdGlvbiIsIndyYXBPYmplY3QiLCJ3cmFwcGVycyIsImNhY2hlIiwiaGFuZGxlcnMiLCJwcm94eVRhcmdldCIsInByb3AiLCJyZWNlaXZlciIsIm1pbkFyZ3MiLCJtYXhBcmdzIiwiUHJvbWlzZSIsImZhbGxiYWNrVG9Ob0NhbGxiYWNrIiwiY2JFcnJvciIsImNvbnNvbGUiLCJ3YXJuIiwibm9DYWxsYmFjayIsIndyYXBBc3luY0Z1bmN0aW9uIiwiY29uZmlndXJhYmxlIiwiZGVzYyIsIlJlZmxlY3QiLCJkZWxldGVQcm9wZXJ0eSIsIndyYXBFdmVudCIsIndyYXBwZXJNYXAiLCJsaXN0ZW5lciIsImhhc0xpc3RlbmVyIiwicmVtb3ZlTGlzdGVuZXIiLCJsb2dnZWRTZW5kUmVzcG9uc2VEZXByZWNhdGlvbldhcm5pbmciLCJvbk1lc3NhZ2VXcmFwcGVycyIsInNlbmRlciIsInNlbmRSZXNwb25zZSIsIndyYXBwZWRTZW5kUmVzcG9uc2UiLCJyZXN1bHQiLCJkaWRDYWxsU2VuZFJlc3BvbnNlIiwic2VuZFJlc3BvbnNlUHJvbWlzZSIsInJlc3BvbnNlIiwic3RhY2siLCJlcnIiLCJpc1Jlc3VsdFRoZW5hYmxlIiwidGhlbiIsInNlbmRQcm9taXNlZFJlc3VsdCIsIm1zZyIsImVycm9yIiwiX19tb3pXZWJFeHRlbnNpb25Qb2x5ZmlsbFJlamVjdF9fIiwiY2F0Y2giLCJ3cmFwcGVkU2VuZE1lc3NhZ2VDYWxsYmFjayIsInJlcGx5Iiwid3JhcHBlZFNlbmRNZXNzYWdlIiwiYXBpTmFtZXNwYWNlT2JqIiwid3JhcHBlZENiIiwicHVzaCIsInN0YXRpY1dyYXBwZXJzIiwib25NZXNzYWdlRXh0ZXJuYWwiLCJ0YWJzIiwic2V0dGluZ01ldGFkYXRhIiwiY2xlYXIiLCJwcml2YWN5IiwibmV0d29yayIsIm5ldHdvcmtQcmVkaWN0aW9uRW5hYmxlZCIsIndlYlJUQ0lQSGFuZGxpbmdQb2xpY3kiLCJzZXJ2aWNlcyIsInBhc3N3b3JkU2F2aW5nRW5hYmxlZCIsIndlYnNpdGVzIiwiaHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkIiwicmVmZXJyZXJzRW5hYmxlZCJdLCJtYXBwaW5ncyI6ImFBQ0UsSUFBSUEsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVUMsUUFHbkMsSUFBSUMsRUFBU0osRUFBaUJFLEdBQVksQ0FDekNHLEVBQUdILEVBQ0hJLEdBQUcsRUFDSEgsUUFBUyxJQVVWLE9BTkFJLEVBQVFMLEdBQVVNLEtBQUtKLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNGLEdBRy9ERyxFQUFPRSxHQUFJLEVBR0pGLEVBQU9ELFFBS2ZGLEVBQW9CUSxFQUFJRixFQUd4Qk4sRUFBb0JTLEVBQUlWLEVBR3hCQyxFQUFvQlUsRUFBSSxTQUFTUixFQUFTUyxFQUFNQyxHQUMzQ1osRUFBb0JhLEVBQUVYLEVBQVNTLElBQ2xDRyxPQUFPQyxlQUFlYixFQUFTUyxFQUFNLENBQUVLLFlBQVksRUFBTUMsSUFBS0wsS0FLaEVaLEVBQW9Ca0IsRUFBSSxTQUFTaEIsR0FDWCxvQkFBWGlCLFFBQTBCQSxPQUFPQyxhQUMxQ04sT0FBT0MsZUFBZWIsRUFBU2lCLE9BQU9DLFlBQWEsQ0FBRUMsTUFBTyxXQUU3RFAsT0FBT0MsZUFBZWIsRUFBUyxhQUFjLENBQUVtQixPQUFPLEtBUXZEckIsRUFBb0JzQixFQUFJLFNBQVNELEVBQU9FLEdBRXZDLEdBRFUsRUFBUEEsSUFBVUYsRUFBUXJCLEVBQW9CcUIsSUFDL0IsRUFBUEUsRUFBVSxPQUFPRixFQUNwQixHQUFXLEVBQVBFLEdBQThCLGlCQUFWRixHQUFzQkEsR0FBU0EsRUFBTUcsV0FBWSxPQUFPSCxFQUNoRixJQUFJSSxFQUFLWCxPQUFPWSxPQUFPLE1BR3ZCLEdBRkExQixFQUFvQmtCLEVBQUVPLEdBQ3RCWCxPQUFPQyxlQUFlVSxFQUFJLFVBQVcsQ0FBRVQsWUFBWSxFQUFNSyxNQUFPQSxJQUN0RCxFQUFQRSxHQUE0QixpQkFBVEYsRUFBbUIsSUFBSSxJQUFJTSxLQUFPTixFQUFPckIsRUFBb0JVLEVBQUVlLEVBQUlFLEVBQUssU0FBU0EsR0FBTyxPQUFPTixFQUFNTSxJQUFRQyxLQUFLLEtBQU1ELElBQzlJLE9BQU9GLEdBSVJ6QixFQUFvQjZCLEVBQUksU0FBUzFCLEdBQ2hDLElBQUlTLEVBQVNULEdBQVVBLEVBQU9xQixXQUM3QixXQUF3QixPQUFPckIsRUFBZ0IsU0FDL0MsV0FBOEIsT0FBT0EsR0FFdEMsT0FEQUgsRUFBb0JVLEVBQUVFLEVBQVEsSUFBS0EsR0FDNUJBLEdBSVJaLEVBQW9CYSxFQUFJLFNBQVNpQixFQUFRQyxHQUFZLE9BQU9qQixPQUFPa0IsVUFBVUMsZUFBZTFCLEtBQUt1QixFQUFRQyxJQUd6Ry9CLEVBQW9Ca0MsRUFBSSxHQUlqQmxDLEVBQW9CQSxFQUFvQm1DLEVBQUksSyxzQkNsRnJELElBQU1DLEVBQVVDLEVBQVEsSUFJbEJDLEVBQVVGLEVBQVFHLFVBQVVDLE9BQU8sZUFDbkNDLEVBQVNDLFNBQVNDLGNBQWMsVUFDdENGLEVBQU9HLGFBQWEsUUFBUyxTQUM3QkgsRUFBT0csYUFBYSxPQUFRLG1CQUM1QkgsRUFBT0csYUFBYSxNQUFPTixHQUUzQkksU0FBU0csZ0JBQWdCQyxZQUFZTCxHQUNyQ0EsRUFBT00sV0FBV0MsWUFBWVAsR0FJOUJMLEVBQVFhLFFBQVFDLFVBQVVDLGFBRTFCLFNBQWdDQyxHQUNYLGFBQWZBLEVBQVFDLElBRVZDLFlBQVksQ0FDVkMsS0FBTSxVQUNOQyxVQUFXSixFQUFRRyxLQUNuQkYsR0FBSUQsRUFBUUMsR0FDWkksT0FBUUwsRUFBUUssT0FDaEJDLFFBQVNOLEVBQVFNLFNBQVcsSUFDM0IsUUFLUEMsT0FBT0MsaUJBQWlCLFdBQVcsU0FBVUMsR0FDbkIsYUFBcEJBLEVBQU1DLEtBQUtQLEtBQ1RNLEVBQU1DLEtBQUtMLFFBQ2JyQixFQUFRYSxRQUFRYyxZQUFZLENBQzFCUixLQUFNLFVBQ05DLFVBQVdLLEVBQU1DLEtBQUtQLEtBQ3RCRixHQUFJUSxFQUFNQyxLQUFLVCxHQUNmSSxPQUFRSSxFQUFNQyxLQUFLTCxPQUNuQkMsUUFBU0csRUFBTUMsS0FBS0osVUFHSyxVQUFwQkcsRUFBTUMsS0FBS1AsTUFFWE0sRUFBTUMsS0FBS1AsUyxtQkM1Q3hCLFVBRUksRUFBZ0MsQ0FBQyxRQUFrQiwwQkFBUCxFQVV2QyxTQUFVcEQsR0FPakIsYUFFQSxHQUF1QixvQkFBWmlDLFNBQTJCdEIsT0FBT2tELGVBQWU1QixXQUFhdEIsT0FBT2tCLFVBQVcsQ0FDekYsTUFBTWlDLEVBQW1ELDBEQUNuREMsRUFBb0MseVBBT3BDQyxFQUFXLEtBSWYsTUFBTUMsRUFBYyxDQUNsQixPQUFVLENBQ1IsTUFBUyxDQUNQLFFBQVcsRUFDWCxRQUFXLEdBRWIsU0FBWSxDQUNWLFFBQVcsRUFDWCxRQUFXLEdBRWIsSUFBTyxDQUNMLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLElBR2YsVUFBYSxDQUNYLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxHQUViLElBQU8sQ0FDTCxRQUFXLEVBQ1gsUUFBVyxHQUViLFlBQWUsQ0FDYixRQUFXLEVBQ1gsUUFBVyxHQUViLFVBQWEsQ0FDWCxRQUFXLEVBQ1gsUUFBVyxHQUViLFdBQWMsQ0FDWixRQUFXLEVBQ1gsUUFBVyxHQUViLFFBQVcsQ0FDVCxRQUFXLEVBQ1gsUUFBVyxHQUViLEtBQVEsQ0FDTixRQUFXLEVBQ1gsUUFBVyxHQUViLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxHQUViLFdBQWMsQ0FDWixRQUFXLEVBQ1gsUUFBVyxHQUViLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxHQUViLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxJQUdmLGNBQWlCLENBQ2YsUUFBVyxDQUNULFFBQVcsRUFDWCxRQUFXLEVBQ1gsc0JBQXdCLEdBRTFCLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxFQUNYLHNCQUF3QixHQUUxQix3QkFBMkIsQ0FDekIsUUFBVyxFQUNYLFFBQVcsR0FFYixhQUFnQixDQUNkLFFBQVcsRUFDWCxRQUFXLEdBRWIsU0FBWSxDQUNWLFFBQVcsRUFDWCxRQUFXLEdBRWIsU0FBWSxDQUNWLFFBQVcsRUFDWCxRQUFXLEdBRWIsVUFBYSxDQUNYLFFBQVcsRUFDWCxRQUFXLEdBRWIsd0JBQTJCLENBQ3pCLFFBQVcsRUFDWCxRQUFXLEVBQ1gsc0JBQXdCLEdBRTFCLGFBQWdCLENBQ2QsUUFBVyxFQUNYLFFBQVcsRUFDWCxzQkFBd0IsR0FFMUIsUUFBVyxDQUNULFFBQVcsRUFDWCxRQUFXLEdBRWIsU0FBWSxDQUNWLFFBQVcsRUFDWCxRQUFXLEVBQ1gsc0JBQXdCLEdBRTFCLFNBQVksQ0FDVixRQUFXLEVBQ1gsUUFBVyxFQUNYLHNCQUF3QixJQUc1QixhQUFnQixDQUNkLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxHQUViLFlBQWUsQ0FDYixRQUFXLEVBQ1gsUUFBVyxHQUViLGNBQWlCLENBQ2YsUUFBVyxFQUNYLFFBQVcsR0FFYixnQkFBbUIsQ0FDakIsUUFBVyxFQUNYLFFBQVcsR0FFYixlQUFrQixDQUNoQixRQUFXLEVBQ1gsUUFBVyxHQUViLGNBQWlCLENBQ2YsUUFBVyxFQUNYLFFBQVcsR0FFYixtQkFBc0IsQ0FDcEIsUUFBVyxFQUNYLFFBQVcsR0FFYixnQkFBbUIsQ0FDakIsUUFBVyxFQUNYLFFBQVcsR0FFYixpQkFBb0IsQ0FDbEIsUUFBVyxFQUNYLFFBQVcsR0FFYixTQUFZLENBQ1YsUUFBVyxFQUNYLFFBQVcsSUFHZixTQUFZLENBQ1YsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLElBR2YsYUFBZ0IsQ0FDZCxPQUFVLENBQ1IsUUFBVyxFQUNYLFFBQVcsR0FFYixVQUFhLENBQ1gsUUFBVyxFQUNYLFFBQVcsR0FFYixPQUFVLENBQ1IsUUFBVyxFQUNYLFFBQVcsSUFHZixRQUFXLENBQ1QsSUFBTyxDQUNMLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsbUJBQXNCLENBQ3BCLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsSUFBTyxDQUNMLFFBQVcsRUFDWCxRQUFXLElBR2YsU0FBWSxDQUNWLGdCQUFtQixDQUNqQixLQUFRLENBQ04sUUFBVyxFQUNYLFFBQVcsSUFHZixPQUFVLENBQ1IsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEVBQ1gsbUJBQXFCLEtBSTNCLFVBQWEsQ0FDWCxPQUFVLENBQ1IsUUFBVyxFQUNYLFFBQVcsR0FFYixTQUFZLENBQ1YsUUFBVyxFQUNYLFFBQVcsR0FFYixNQUFTLENBQ1AsUUFBVyxFQUNYLFFBQVcsR0FFYixZQUFlLENBQ2IsUUFBVyxFQUNYLFFBQVcsR0FFYixLQUFRLENBQ04sUUFBVyxFQUNYLFFBQVcsRUFDWCxzQkFBd0IsR0FFMUIsTUFBUyxDQUNQLFFBQVcsRUFDWCxRQUFXLEdBRWIsV0FBYyxDQUNaLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsS0FBUSxDQUNOLFFBQVcsRUFDWCxRQUFXLEVBQ1gsc0JBQXdCLElBRzVCLFVBQWEsQ0FDWCwwQkFBNkIsQ0FDM0IsUUFBVyxFQUNYLFFBQVcsR0FFYix5QkFBNEIsQ0FDMUIsUUFBVyxFQUNYLFFBQVcsSUFHZixRQUFXLENBQ1QsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsVUFBYSxDQUNYLFFBQVcsRUFDWCxRQUFXLEdBRWIsWUFBZSxDQUNiLFFBQVcsRUFDWCxRQUFXLEdBRWIsVUFBYSxDQUNYLFFBQVcsRUFDWCxRQUFXLEdBRWIsVUFBYSxDQUNYLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLElBR2YsS0FBUSxDQUNOLGVBQWtCLENBQ2hCLFFBQVcsRUFDWCxRQUFXLEdBRWIsbUJBQXNCLENBQ3BCLFFBQVcsRUFDWCxRQUFXLElBR2YsU0FBWSxDQUNWLGtCQUFxQixDQUNuQixRQUFXLEVBQ1gsUUFBVyxJQUdmLEtBQVEsQ0FDTixXQUFjLENBQ1osUUFBVyxFQUNYLFFBQVcsSUFHZixXQUFjLENBQ1osSUFBTyxDQUNMLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsUUFBVyxDQUNULFFBQVcsRUFDWCxRQUFXLEdBRWIsV0FBYyxDQUNaLFFBQVcsRUFDWCxRQUFXLEdBRWIsY0FBaUIsQ0FDZixRQUFXLEVBQ1gsUUFBVyxJQUdmLGNBQWlCLENBQ2YsTUFBUyxDQUNQLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsbUJBQXNCLENBQ3BCLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLElBR2YsV0FBYyxDQUNaLFNBQVksQ0FDVixRQUFXLEVBQ1gsUUFBVyxHQUViLFNBQVksQ0FDVixRQUFXLEVBQ1gsUUFBVyxHQUViLEtBQVEsQ0FDTixRQUFXLEVBQ1gsUUFBVyxFQUNYLHNCQUF3QixHQUUxQixRQUFXLENBQ1QsUUFBVyxFQUNYLFFBQVcsR0FFYixTQUFZLENBQ1YsUUFBVyxFQUNYLFFBQVcsRUFDWCxzQkFBd0IsR0FFMUIsU0FBWSxDQUNWLFFBQVcsRUFDWCxRQUFXLEVBQ1gsc0JBQXdCLEdBRTFCLEtBQVEsQ0FDTixRQUFXLEVBQ1gsUUFBVyxFQUNYLHNCQUF3QixJQUc1QixZQUFlLENBQ2IsU0FBWSxDQUNWLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsUUFBVyxDQUNULFFBQVcsRUFDWCxRQUFXLElBR2YsUUFBVyxDQUNULGtCQUFxQixDQUNuQixRQUFXLEVBQ1gsUUFBVyxHQUViLGVBQWtCLENBQ2hCLFFBQVcsRUFDWCxRQUFXLEdBRWIsZ0JBQW1CLENBQ2pCLFFBQVcsRUFDWCxRQUFXLEdBRWIsZ0JBQW1CLENBQ2pCLFFBQVcsRUFDWCxRQUFXLEdBRWIsbUJBQXNCLENBQ3BCLFFBQVcsRUFDWCxRQUFXLEdBRWIsWUFBZSxDQUNiLFFBQVcsRUFDWCxRQUFXLEdBRWIsa0JBQXFCLENBQ25CLFFBQVcsRUFDWCxRQUFXLEdBRWIsZ0JBQW1CLENBQ2pCLFFBQVcsRUFDWCxRQUFXLElBR2YsU0FBWSxDQUNWLFdBQWMsQ0FDWixRQUFXLEVBQ1gsUUFBVyxHQUViLGtCQUFxQixDQUNuQixRQUFXLEVBQ1gsUUFBVyxHQUViLFFBQVcsQ0FDVCxRQUFXLEVBQ1gsUUFBVyxJQUdmLFFBQVcsQ0FDVCxNQUFTLENBQ1AsTUFBUyxDQUNQLFFBQVcsRUFDWCxRQUFXLEdBRWIsSUFBTyxDQUNMLFFBQVcsRUFDWCxRQUFXLEdBRWIsY0FBaUIsQ0FDZixRQUFXLEVBQ1gsUUFBVyxHQUViLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxHQUViLElBQU8sQ0FDTCxRQUFXLEVBQ1gsUUFBVyxJQUdmLFFBQVcsQ0FDVCxJQUFPLENBQ0wsUUFBVyxFQUNYLFFBQVcsR0FFYixjQUFpQixDQUNmLFFBQVcsRUFDWCxRQUFXLElBR2YsS0FBUSxDQUNOLE1BQVMsQ0FDUCxRQUFXLEVBQ1gsUUFBVyxHQUViLElBQU8sQ0FDTCxRQUFXLEVBQ1gsUUFBVyxHQUViLGNBQWlCLENBQ2YsUUFBVyxFQUNYLFFBQVcsR0FFYixPQUFVLENBQ1IsUUFBVyxFQUNYLFFBQVcsR0FFYixJQUFPLENBQ0wsUUFBVyxFQUNYLFFBQVcsS0FJakIsS0FBUSxDQUNOLGtCQUFxQixDQUNuQixRQUFXLEVBQ1gsUUFBVyxHQUViLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxHQUViLGVBQWtCLENBQ2hCLFFBQVcsRUFDWCxRQUFXLEdBRWIsUUFBVyxDQUNULFFBQVcsRUFDWCxRQUFXLEdBRWIsVUFBYSxDQUNYLFFBQVcsRUFDWCxRQUFXLEdBRWIsY0FBaUIsQ0FDZixRQUFXLEVBQ1gsUUFBVyxHQUViLElBQU8sQ0FDTCxRQUFXLEVBQ1gsUUFBVyxHQUViLFdBQWMsQ0FDWixRQUFXLEVBQ1gsUUFBVyxHQUViLFFBQVcsQ0FDVCxRQUFXLEVBQ1gsUUFBVyxHQUViLGdCQUFtQixDQUNqQixRQUFXLEVBQ1gsUUFBVyxHQUViLFVBQWEsQ0FDWCxRQUFXLEVBQ1gsUUFBVyxHQUViLFVBQWEsQ0FDWCxRQUFXLEVBQ1gsUUFBVyxHQUViLEtBQVEsQ0FDTixRQUFXLEVBQ1gsUUFBVyxHQUViLE1BQVMsQ0FDUCxRQUFXLEVBQ1gsUUFBVyxHQUViLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxHQUViLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxHQUViLFVBQWEsQ0FDWCxRQUFXLEVBQ1gsUUFBVyxHQUViLFlBQWUsQ0FDYixRQUFXLEVBQ1gsUUFBVyxHQUViLFFBQVcsQ0FDVCxRQUFXLEVBQ1gsUUFBVyxHQUViLGdCQUFtQixDQUNqQixRQUFXLEVBQ1gsUUFBVyxHQUViLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxJQUdmLFNBQVksQ0FDVixJQUFPLENBQ0wsUUFBVyxFQUNYLFFBQVcsSUFHZixjQUFpQixDQUNmLGFBQWdCLENBQ2QsUUFBVyxFQUNYLFFBQVcsR0FFYixTQUFZLENBQ1YsUUFBVyxFQUNYLFFBQVcsSUFHZixXQUFjLENBQ1osdUJBQTBCLENBQ3hCLFFBQVcsRUFDWCxRQUFXLElBR2YsUUFBVyxDQUNULE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxHQUViLElBQU8sQ0FDTCxRQUFXLEVBQ1gsUUFBVyxHQUViLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxHQUViLFdBQWMsQ0FDWixRQUFXLEVBQ1gsUUFBVyxHQUViLGVBQWtCLENBQ2hCLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEtBS2pCLEdBQXdDLElBQXBDdEQsT0FBT3VELEtBQUtELEdBQWFFLE9BQzNCLE1BQU0sSUFBSUMsTUFBTSwrREFhbEIsTUFBTUMsVUFBdUJDLFFBQzNCLFlBQVlDLEVBQVlDLEdBQ3RCQyxNQUFNRCxHQUNORSxLQUFLSCxXQUFhQSxFQUdwQixJQUFJL0MsR0FLRixPQUpLa0QsS0FBS0MsSUFBSW5ELElBQ1prRCxLQUFLRSxJQUFJcEQsRUFBS2tELEtBQUtILFdBQVcvQyxJQUd6QmlELE1BQU0zRCxJQUFJVSxJQVdyQixNQStCTXFELEVBQWUsQ0FBQ0MsRUFBU0MsSUFDdEIsSUFBSUMsS0FDTEMsT0FBT25DLFFBQVFvQyxVQUNqQkosRUFBUUssT0FBT0YsT0FBT25DLFFBQVFvQyxXQUNyQkgsRUFBU0ssbUJBQXFCSixFQUFhYixRQUFVLEVBQzlEVyxFQUFRTyxRQUFRTCxFQUFhLElBRTdCRixFQUFRTyxRQUFRTCxJQUtoQk0sRUFBcUJDLEdBQXNCLEdBQVhBLEVBQWUsV0FBYSxZQWtGNURDLEVBQWEsQ0FBQ0MsRUFBUUMsRUFBUUMsSUFDM0IsSUFBSUMsTUFBTUYsRUFBUSxDQUN2QkcsTUFBSyxDQUFDQyxFQUFjQyxFQUFTQyxJQUNwQkwsRUFBUXZGLEtBQUsyRixFQUFTTixLQUFXTyxLQUs5QyxJQUFJbEUsRUFBaUJtRSxTQUFTN0YsS0FBS3FCLEtBQUtkLE9BQU9rQixVQUFVQyxnQkF5QnpELE1BQU1vRSxFQUFhLENBQUNULEVBQVFVLEVBQVcsR0FBSXBCLEVBQVcsTUFDcEQsSUFBSXFCLEVBQVF6RixPQUFPWSxPQUFPLE1BQ3RCOEUsRUFBVyxDQUNiMUIsSUFBRyxDQUFDMkIsRUFBYUMsSUFDUkEsS0FBUWQsR0FBVWMsS0FBUUgsRUFHbkMsSUFBSUUsRUFBYUMsRUFBTUMsR0FDckIsR0FBSUQsS0FBUUgsRUFDVixPQUFPQSxFQUFNRyxHQUdmLEtBQU1BLEtBQVFkLEdBQ1osT0FHRixJQUFJdkUsRUFBUXVFLEVBQU9jLEdBRW5CLEdBQXFCLG1CQUFWckYsRUFJVCxHQUE4QixtQkFBbkJpRixFQUFTSSxHQUVsQnJGLEVBQVFzRSxFQUFXQyxFQUFRQSxFQUFPYyxHQUFPSixFQUFTSSxTQUM3QyxHQUFJekUsRUFBZWlELEVBQVV3QixHQUFPLENBR3pDLElBQUlaLEVBdkhZLEVBQUNuRixFQUFNdUUsSUFDeEIsU0FBOEJVLEtBQVdPLEdBQzlDLEdBQUlBLEVBQUs3QixPQUFTWSxFQUFTMEIsUUFDekIsTUFBTSxJQUFJckMsTUFBTSxxQkFBcUJXLEVBQVMwQixXQUFXbkIsRUFBbUJQLEVBQVMwQixnQkFBZ0JqRyxZQUFld0YsRUFBSzdCLFVBRzNILEdBQUk2QixFQUFLN0IsT0FBU1ksRUFBUzJCLFFBQ3pCLE1BQU0sSUFBSXRDLE1BQU0sb0JBQW9CVyxFQUFTMkIsV0FBV3BCLEVBQW1CUCxFQUFTMkIsZ0JBQWdCbEcsWUFBZXdGLEVBQUs3QixVQUcxSCxPQUFPLElBQUl3QyxRQUFRLENBQUN0QixFQUFTRixLQUMzQixHQUFJSixFQUFTNkIscUJBSVgsSUFDRW5CLEVBQU9qRixNQUFTd0YsRUFBTW5CLEVBQWEsQ0FBRVEsVUFBU0YsVUFBVUosSUFDeEQsTUFBTzhCLEdBQ1BDLFFBQVFDLEtBQVF2RyxFQUFILDJHQUF3SHFHLEdBRXJJcEIsRUFBT2pGLE1BQVN3RixHQUloQmpCLEVBQVM2QixzQkFBdUIsRUFDaEM3QixFQUFTaUMsWUFBYSxFQUV0QjNCLFNBRU9OLEVBQVNpQyxZQUNsQnZCLEVBQU9qRixNQUFTd0YsR0FDaEJYLEtBRUFJLEVBQU9qRixNQUFTd0YsRUFBTW5CLEVBQWEsQ0FBRVEsVUFBU0YsVUFBVUosT0FzRnhDa0MsQ0FBa0JWLEVBQU14QixFQUFTd0IsSUFDL0NyRixFQUFRc0UsRUFBV0MsRUFBUUEsRUFBT2MsR0FBT1osUUFJekN6RSxFQUFRQSxFQUFNTyxLQUFLZ0UsT0FFaEIsSUFBcUIsaUJBQVZ2RSxHQUFnQyxPQUFWQSxJQUFtQlksRUFBZXFFLEVBQVVJLEtBQVN6RSxFQUFlaUQsRUFBVXdCLEdBbUJwSCxPQVhBNUYsT0FBT0MsZUFBZXdGLEVBQU9HLEVBQU0sQ0FDakNXLGNBQWMsRUFDZHJHLFlBQVksRUFDWkMsSUFBRyxJQUNNMkUsRUFBT2MsR0FFaEIsSUFBSXJGLEdBQ0Z1RSxFQUFPYyxHQUFRckYsS0FJWkEsRUFmUEEsRUFBUWdGLEVBQVdoRixFQUFPaUYsRUFBU0ksR0FBT3hCLEVBQVN3QixJQW1CckQsT0FEQUgsRUFBTUcsR0FBUXJGLEVBQ1BBLEdBR1QwRCxJQUFHLENBQUMwQixFQUFhQyxFQUFNckYsRUFBT3NGLEtBQ3hCRCxLQUFRSCxFQUNWQSxFQUFNRyxHQUFRckYsRUFFZHVFLEVBQU9jLEdBQVFyRixHQUVWLEdBR1ROLGVBQWMsQ0FBQzBGLEVBQWFDLEVBQU1ZLElBQ3pCQyxRQUFReEcsZUFBZXdGLEVBQU9HLEVBQU1ZLEdBRzdDRSxlQUFjLENBQUNmLEVBQWFDLElBQ25CYSxRQUFRQyxlQUFlakIsRUFBT0csSUFjckNELEVBQWMzRixPQUFPWSxPQUFPa0UsR0FDaEMsT0FBTyxJQUFJRyxNQUFNVSxFQUFhRCxJQW1CMUJpQixFQUFZQyxJQUFjLENBQzlCLFlBQVk5QixFQUFRK0IsS0FBYXhCLEdBQy9CUCxFQUFPekMsWUFBWXVFLEVBQVd6RyxJQUFJMEcsTUFBY3hCLElBR2xEeUIsWUFBVyxDQUFDaEMsRUFBUStCLElBQ1gvQixFQUFPZ0MsWUFBWUYsRUFBV3pHLElBQUkwRyxJQUczQyxlQUFlL0IsRUFBUStCLEdBQ3JCL0IsRUFBT2lDLGVBQWVILEVBQVd6RyxJQUFJMEcsT0FLekMsSUFBSUcsR0FBdUMsRUFFM0MsTUFBTUMsRUFBb0IsSUFBSXZELEVBQWVtRCxHQUNuQixtQkFBYkEsRUFDRkEsRUFvQkYsU0FBbUJ2RSxFQUFTNEUsRUFBUUMsR0FDekMsSUFFSUMsRUFZQUMsRUFkQUMsR0FBc0IsRUFHdEJDLEVBQXNCLElBQUl2QixRQUFRdEIsSUFDcEMwQyxFQUFzQixTQUFVSSxHQUN6QlIsSUFDSGIsUUFBUUMsS0FBS2hELEdBQW1DLElBQUlLLE9BQVFnRSxPQUM1RFQsR0FBdUMsR0FFekNNLEdBQXNCLEVBQ3RCNUMsRUFBUThDLE1BS1osSUFDRUgsRUFBU1IsRUFBU3ZFLEVBQVM0RSxFQUFRRSxHQUNuQyxNQUFPTSxHQUNQTCxFQUFTckIsUUFBUXhCLE9BQU9rRCxHQUcxQixNQUFNQyxHQUE4QixJQUFYTixJQXhVVjlHLEVBd1V3QzhHLElBdlV4QixpQkFBVjlHLEdBQTRDLG1CQUFmQSxFQUFNcUgsS0FEekNySCxNQTZVZixJQUFlLElBQVg4RyxJQUFvQk0sSUFBcUJMLEVBQzNDLE9BQU8sRUFPVCxNQUFNTyxFQUFxQjFELElBQ3pCQSxFQUFReUQsS0FBS0UsSUFFWFgsRUFBYVcsSUFDWkMsSUFHRCxJQUFJekYsRUFFRkEsRUFERXlGLElBQVVBLGFBQWlCdEUsT0FBa0MsaUJBQWxCc0UsRUFBTXpGLFNBQ3pDeUYsRUFBTXpGLFFBRU4sK0JBR1o2RSxFQUFhLENBQ1hhLG1DQUFtQyxFQUNuQzFGLGNBRUQyRixNQUFNUCxJQUVQdkIsUUFBUTRCLE1BQU0sMENBQTJDTCxNQWM3RCxPQU5FRyxFQURFRixFQUNpQk4sRUFFQUUsSUFJZCxJQUlMVyxFQUE2QixFQUFHMUQsU0FBUUUsV0FBV3lELEtBQ25EN0QsT0FBT25DLFFBQVFvQyxVQUliRCxPQUFPbkMsUUFBUW9DLFVBQVVqQyxVQUFZYSxFQUN2Q3VCLElBRUFGLEVBQU9GLE9BQU9uQyxRQUFRb0MsV0FFZjRELEdBQVNBLEVBQU1ILGtDQUd4QnhELEVBQU8sSUFBSWYsTUFBTTBFLEVBQU03RixVQUV2Qm9DLEVBQVF5RCxJQUlOQyxFQUFxQixDQUFDdkksRUFBTXVFLEVBQVVpRSxLQUFvQmhELEtBQzlELEdBQUlBLEVBQUs3QixPQUFTWSxFQUFTMEIsUUFDekIsTUFBTSxJQUFJckMsTUFBTSxxQkFBcUJXLEVBQVMwQixXQUFXbkIsRUFBbUJQLEVBQVMwQixnQkFBZ0JqRyxZQUFld0YsRUFBSzdCLFVBRzNILEdBQUk2QixFQUFLN0IsT0FBU1ksRUFBUzJCLFFBQ3pCLE1BQU0sSUFBSXRDLE1BQU0sb0JBQW9CVyxFQUFTMkIsV0FBV3BCLEVBQW1CUCxFQUFTMkIsZ0JBQWdCbEcsWUFBZXdGLEVBQUs3QixVQUcxSCxPQUFPLElBQUl3QyxRQUFRLENBQUN0QixFQUFTRixLQUMzQixNQUFNOEQsRUFBWUosRUFBMkJwSCxLQUFLLEtBQU0sQ0FBRTRELFVBQVNGLFdBQ25FYSxFQUFLa0QsS0FBS0QsR0FDVkQsRUFBZ0JwRixlQUFlb0MsTUFJN0JtRCxFQUFpQixDQUNyQnJHLFFBQVMsQ0FDUEMsVUFBV3VFLEVBQVVNLEdBQ3JCd0Isa0JBQW1COUIsRUFBVU0sR0FDN0JoRSxZQUFhbUYsRUFBbUJ0SCxLQUFLLEtBQU0sY0FBZSxDQUFFZ0YsUUFBUyxFQUFHQyxRQUFTLEtBRW5GMkMsS0FBTSxDQUNKekYsWUFBYW1GLEVBQW1CdEgsS0FBSyxLQUFNLGNBQWUsQ0FBRWdGLFFBQVMsRUFBR0MsUUFBUyxNQUcvRTRDLEVBQWtCLENBQ3RCQyxNQUFPLENBQUU5QyxRQUFTLEVBQUdDLFFBQVMsR0FDOUI1RixJQUFLLENBQUUyRixRQUFTLEVBQUdDLFFBQVMsR0FDNUI5QixJQUFLLENBQUU2QixRQUFTLEVBQUdDLFFBQVMsSUFnQjlCLE9BZEF6QyxFQUFZdUYsUUFBVSxDQUNwQkMsUUFBUyxDQUNQQyx5QkFBMEJKLEVBQzFCSyx1QkFBd0JMLEdBRTFCTSxTQUFVLENBQ1JDLHNCQUF1QlAsR0FFekJRLFNBQVUsQ0FDUkMseUJBQTBCVCxFQUMxQlUsaUJBQWtCVixJQUlmcEQsRUFBV2pCLE9BQVFrRSxFQUFnQmxGLElBSzVDakUsRUFBT0QsUUFBVWlFLFNBRWpCaEUsRUFBT0QsUUFBVWtDLFVBNXBDa0MiLCJmaWxlIjoiY29udGVudC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAyNDkpO1xuIiwiY29uc3QgYnJvd3NlciA9IHJlcXVpcmUoJ3dlYmV4dGVuc2lvbi1wb2x5ZmlsbCcpXG5cbi8vIGluamVjdGluZyB0aGUgc2NyaXB0XG5cbmNvbnN0IGNvbnRlbnQgPSBicm93c2VyLmV4dGVuc2lvbi5nZXRVUkwoJ2luamVjdGVkLmpzJylcbmNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpXG5zY3JpcHQuc2V0QXR0cmlidXRlKCdkZWZlcicsICdkZWZlcicpXG5zY3JpcHQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvamF2YXNjcmlwdCcpXG5zY3JpcHQuc2V0QXR0cmlidXRlKCdzcmMnLCBjb250ZW50KVxuLy8gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpXG5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoc2NyaXB0KVxuc2NyaXB0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NyaXB0KVxuXG4vLyBjb250ZW50IHNjcmlwdCBsb2dpY1xuXG5icm93c2VyLnJ1bnRpbWUub25NZXNzYWdlLmFkZExpc3RlbmVyKG1lc3NhZ2VGcm9tQmFja2dyb3VuZClcblxuZnVuY3Rpb24gbWVzc2FnZUZyb21CYWNrZ3JvdW5kIChtZXNzYWdlKSB7XG4gIGlmIChtZXNzYWdlLnRvID09PSAnaW5qZWN0ZWQnKSB7XG4gICAgLy8gcHJveHkgbWVzc2FnZSB0byBpbmplY3RlZFxuICAgIHBvc3RNZXNzYWdlKHtcbiAgICAgIGZyb206ICdjb250ZW50JyxcbiAgICAgIHByb3h5RnJvbTogbWVzc2FnZS5mcm9tLFxuICAgICAgdG86IG1lc3NhZ2UudG8sXG4gICAgICBhY3Rpb246IG1lc3NhZ2UuYWN0aW9uLFxuICAgICAgcGF5bG9hZDogbWVzc2FnZS5wYXlsb2FkIHx8IHt9XG4gICAgfSwgJyonKVxuICB9XG59XG5cbi8vIGxpc3RlbiB0byBtZXNzYWdlcyBmcm9tIGluamVjdGVkIHNjcmlwdFxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgaWYgKGV2ZW50LmRhdGEuZnJvbSA9PT0gJ2luamVjdGVkJykge1xuICAgIGlmIChldmVudC5kYXRhLmFjdGlvbikge1xuICAgICAgYnJvd3Nlci5ydW50aW1lLnNlbmRNZXNzYWdlKHtcbiAgICAgICAgZnJvbTogJ2NvbnRlbnQnLFxuICAgICAgICBwcm94eUZyb206IGV2ZW50LmRhdGEuZnJvbSxcbiAgICAgICAgdG86IGV2ZW50LmRhdGEudG8sXG4gICAgICAgIGFjdGlvbjogZXZlbnQuZGF0YS5hY3Rpb24sXG4gICAgICAgIHBheWxvYWQ6IGV2ZW50LmRhdGEucGF5bG9hZFxuICAgICAgfSlcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXZlbnQuZGF0YS5mcm9tID09PSAncG9wdXAnKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ21lc3NhZ2UgZnJvbSBwb3B1cCcsIGV2ZW50LmRhdGEpXG4gIH0gZWxzZSBpZiAoZXZlbnQuZGF0YS5mcm9tICE9PSAnY29udGVudCcpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnc29tZSBvdGhlciBtZXNzYWdlJywgZXZlbnQuZGF0YSlcbiAgfVxufSlcbiIsIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShcIndlYmV4dGVuc2lvbi1wb2x5ZmlsbFwiLCBbXCJtb2R1bGVcIl0sIGZhY3RvcnkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgZmFjdG9yeShtb2R1bGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBtb2QgPSB7XG4gICAgICBleHBvcnRzOiB7fVxuICAgIH07XG4gICAgZmFjdG9yeShtb2QpO1xuICAgIGdsb2JhbC5icm93c2VyID0gbW9kLmV4cG9ydHM7XG4gIH1cbn0pKHRoaXMsIGZ1bmN0aW9uIChtb2R1bGUpIHtcbiAgLyogd2ViZXh0ZW5zaW9uLXBvbHlmaWxsIC0gdjAuMy4xIC0gVHVlIEF1ZyAyMSAyMDE4IDEwOjA5OjM0ICovXG4gIC8qIC0qLSBNb2RlOiBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGpzLWluZGVudC1sZXZlbDogMiAtKi0gKi9cbiAgLyogdmltOiBzZXQgc3RzPTIgc3c9MiBldCB0dz04MDogKi9cbiAgLyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpY1xuICAgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzXG4gICAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovXG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIGlmICh0eXBlb2YgYnJvd3NlciA9PT0gXCJ1bmRlZmluZWRcIiB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYnJvd3NlcikgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBjb25zdCBDSFJPTUVfU0VORF9NRVNTQUdFX0NBTExCQUNLX05PX1JFU1BPTlNFX01FU1NBR0UgPSBcIlRoZSBtZXNzYWdlIHBvcnQgY2xvc2VkIGJlZm9yZSBhIHJlc3BvbnNlIHdhcyByZWNlaXZlZC5cIjtcbiAgICBjb25zdCBTRU5EX1JFU1BPTlNFX0RFUFJFQ0FUSU9OX1dBUk5JTkcgPSBcIlJldHVybmluZyBhIFByb21pc2UgaXMgdGhlIHByZWZlcnJlZCB3YXkgdG8gc2VuZCBhIHJlcGx5IGZyb20gYW4gb25NZXNzYWdlL29uTWVzc2FnZUV4dGVybmFsIGxpc3RlbmVyLCBhcyB0aGUgc2VuZFJlc3BvbnNlIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzcGVjcyAoU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvTW96aWxsYS9BZGQtb25zL1dlYkV4dGVuc2lvbnMvQVBJL3J1bnRpbWUvb25NZXNzYWdlKVwiO1xuXG4gICAgLy8gV3JhcHBpbmcgdGhlIGJ1bGsgb2YgdGhpcyBwb2x5ZmlsbCBpbiBhIG9uZS10aW1lLXVzZSBmdW5jdGlvbiBpcyBhIG1pbm9yXG4gICAgLy8gb3B0aW1pemF0aW9uIGZvciBGaXJlZm94LiBTaW5jZSBTcGlkZXJtb25rZXkgZG9lcyBub3QgZnVsbHkgcGFyc2UgdGhlXG4gICAgLy8gY29udGVudHMgb2YgYSBmdW5jdGlvbiB1bnRpbCB0aGUgZmlyc3QgdGltZSBpdCdzIGNhbGxlZCwgYW5kIHNpbmNlIGl0IHdpbGxcbiAgICAvLyBuZXZlciBhY3R1YWxseSBuZWVkIHRvIGJlIGNhbGxlZCwgdGhpcyBhbGxvd3MgdGhlIHBvbHlmaWxsIHRvIGJlIGluY2x1ZGVkXG4gICAgLy8gaW4gRmlyZWZveCBuZWFybHkgZm9yIGZyZWUuXG4gICAgY29uc3Qgd3JhcEFQSXMgPSAoKSA9PiB7XG4gICAgICAvLyBOT1RFOiBhcGlNZXRhZGF0YSBpcyBhc3NvY2lhdGVkIHRvIHRoZSBjb250ZW50IG9mIHRoZSBhcGktbWV0YWRhdGEuanNvbiBmaWxlXG4gICAgICAvLyBhdCBidWlsZCB0aW1lIGJ5IHJlcGxhY2luZyB0aGUgZm9sbG93aW5nIFwiaW5jbHVkZVwiIHdpdGggdGhlIGNvbnRlbnQgb2YgdGhlXG4gICAgICAvLyBKU09OIGZpbGUuXG4gICAgICBjb25zdCBhcGlNZXRhZGF0YSA9IHtcbiAgICAgICAgXCJhbGFybXNcIjoge1xuICAgICAgICAgIFwiY2xlYXJcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjbGVhckFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImJvb2ttYXJrc1wiOiB7XG4gICAgICAgICAgXCJjcmVhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRDaGlsZHJlblwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFJlY2VudFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFN1YlRyZWVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRUcmVlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVRyZWVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWFyY2hcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJicm93c2VyQWN0aW9uXCI6IHtcbiAgICAgICAgICBcImRpc2FibGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJlbmFibGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRCYWRnZUJhY2tncm91bmRDb2xvclwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEJhZGdlVGV4dFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFBvcHVwXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0VGl0bGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJvcGVuUG9wdXBcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRCYWRnZUJhY2tncm91bmRDb2xvclwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldEJhZGdlVGV4dFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldEljb25cIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRQb3B1cFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFRpdGxlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYnJvd3NpbmdEYXRhXCI6IHtcbiAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZUNhY2hlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlQ29va2llc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZURvd25sb2Fkc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZUZvcm1EYXRhXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlSGlzdG9yeVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZUxvY2FsU3RvcmFnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVBhc3N3b3Jkc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVBsdWdpbkRhdGFcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXR0aW5nc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImNvbW1hbmRzXCI6IHtcbiAgICAgICAgICBcImdldEFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImNvbnRleHRNZW51c1wiOiB7XG4gICAgICAgICAgXCJyZW1vdmVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVBbGxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJjb29raWVzXCI6IHtcbiAgICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEFsbENvb2tpZVN0b3Jlc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImRldnRvb2xzXCI6IHtcbiAgICAgICAgICBcImluc3BlY3RlZFdpbmRvd1wiOiB7XG4gICAgICAgICAgICBcImV2YWxcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFuZWxzXCI6IHtcbiAgICAgICAgICAgIFwiY3JlYXRlXCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDMsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAzLFxuICAgICAgICAgICAgICBcInNpbmdsZUNhbGxiYWNrQXJnXCI6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiZG93bmxvYWRzXCI6IHtcbiAgICAgICAgICBcImNhbmNlbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRvd25sb2FkXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZXJhc2VcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRGaWxlSWNvblwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm9wZW5cIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXVzZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZUZpbGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXN1bWVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWFyY2hcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzaG93XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiZXh0ZW5zaW9uXCI6IHtcbiAgICAgICAgICBcImlzQWxsb3dlZEZpbGVTY2hlbWVBY2Nlc3NcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpc0FsbG93ZWRJbmNvZ25pdG9BY2Nlc3NcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJoaXN0b3J5XCI6IHtcbiAgICAgICAgICBcImFkZFVybFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRlbGV0ZUFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRlbGV0ZVJhbmdlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZGVsZXRlVXJsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0VmlzaXRzXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VhcmNoXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaTE4blwiOiB7XG4gICAgICAgICAgXCJkZXRlY3RMYW5ndWFnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEFjY2VwdExhbmd1YWdlc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImlkZW50aXR5XCI6IHtcbiAgICAgICAgICBcImxhdW5jaFdlYkF1dGhGbG93XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaWRsZVwiOiB7XG4gICAgICAgICAgXCJxdWVyeVN0YXRlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWFuYWdlbWVudFwiOiB7XG4gICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRBbGxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRTZWxmXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2V0RW5hYmxlZFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVuaW5zdGFsbFNlbGZcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJub3RpZmljYXRpb25zXCI6IHtcbiAgICAgICAgICBcImNsZWFyXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY3JlYXRlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0QWxsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0UGVybWlzc2lvbkxldmVsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXBkYXRlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAyLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicGFnZUFjdGlvblwiOiB7XG4gICAgICAgICAgXCJnZXRQb3B1cFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFRpdGxlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaGlkZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldEljb25cIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRQb3B1cFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFRpdGxlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2hvd1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInBlcm1pc3Npb25zXCI6IHtcbiAgICAgICAgICBcImNvbnRhaW5zXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0QWxsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVxdWVzdFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInJ1bnRpbWVcIjoge1xuICAgICAgICAgIFwiZ2V0QmFja2dyb3VuZFBhZ2VcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRCcm93c2VySW5mb1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFBsYXRmb3JtSW5mb1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm9wZW5PcHRpb25zUGFnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlcXVlc3RVcGRhdGVDaGVja1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlbmRNZXNzYWdlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDNcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VuZE5hdGl2ZU1lc3NhZ2VcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRVbmluc3RhbGxVUkxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZXNzaW9uc1wiOiB7XG4gICAgICAgICAgXCJnZXREZXZpY2VzXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0UmVjZW50bHlDbG9zZWRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXN0b3JlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic3RvcmFnZVwiOiB7XG4gICAgICAgICAgXCJsb2NhbFwiOiB7XG4gICAgICAgICAgICBcImNsZWFyXCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImdldEJ5dGVzSW5Vc2VcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwic2V0XCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1hbmFnZWRcIjoge1xuICAgICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImdldEJ5dGVzSW5Vc2VcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3luY1wiOiB7XG4gICAgICAgICAgICBcImNsZWFyXCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImdldEJ5dGVzSW5Vc2VcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwic2V0XCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInRhYnNcIjoge1xuICAgICAgICAgIFwiY2FwdHVyZVZpc2libGVUYWJcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjcmVhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkZXRlY3RMYW5ndWFnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRpc2NhcmRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkdXBsaWNhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJleGVjdXRlU2NyaXB0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0Q3VycmVudFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFpvb21cIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRab29tU2V0dGluZ3NcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJoaWdobGlnaHRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpbnNlcnRDU1NcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtb3ZlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAyLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicXVlcnlcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWxvYWRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVDU1NcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZW5kTWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFpvb21cIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRab29tU2V0dGluZ3NcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJ0b3BTaXRlc1wiOiB7XG4gICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWJOYXZpZ2F0aW9uXCI6IHtcbiAgICAgICAgICBcImdldEFsbEZyYW1lc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEZyYW1lXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwid2ViUmVxdWVzdFwiOiB7XG4gICAgICAgICAgXCJoYW5kbGVyQmVoYXZpb3JDaGFuZ2VkXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwid2luZG93c1wiOiB7XG4gICAgICAgICAgXCJjcmVhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRBbGxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRDdXJyZW50XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0TGFzdEZvY3VzZWRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgaWYgKE9iamVjdC5rZXlzKGFwaU1ldGFkYXRhKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXBpLW1ldGFkYXRhLmpzb24gaGFzIG5vdCBiZWVuIGluY2x1ZGVkIGluIGJyb3dzZXItcG9seWZpbGxcIik7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogQSBXZWFrTWFwIHN1YmNsYXNzIHdoaWNoIGNyZWF0ZXMgYW5kIHN0b3JlcyBhIHZhbHVlIGZvciBhbnkga2V5IHdoaWNoIGRvZXNcbiAgICAgICAqIG5vdCBleGlzdCB3aGVuIGFjY2Vzc2VkLCBidXQgYmVoYXZlcyBleGFjdGx5IGFzIGFuIG9yZGluYXJ5IFdlYWtNYXBcbiAgICAgICAqIG90aGVyd2lzZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjcmVhdGVJdGVtXG4gICAgICAgKiAgICAgICAgQSBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBpbiBvcmRlciB0byBjcmVhdGUgdGhlIHZhbHVlIGZvciBhbnlcbiAgICAgICAqICAgICAgICBrZXkgd2hpY2ggZG9lcyBub3QgZXhpc3QsIHRoZSBmaXJzdCB0aW1lIGl0IGlzIGFjY2Vzc2VkLiBUaGVcbiAgICAgICAqICAgICAgICBmdW5jdGlvbiByZWNlaXZlcywgYXMgaXRzIG9ubHkgYXJndW1lbnQsIHRoZSBrZXkgYmVpbmcgY3JlYXRlZC5cbiAgICAgICAqL1xuICAgICAgY2xhc3MgRGVmYXVsdFdlYWtNYXAgZXh0ZW5kcyBXZWFrTWFwIHtcbiAgICAgICAgY29uc3RydWN0b3IoY3JlYXRlSXRlbSwgaXRlbXMgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdXBlcihpdGVtcyk7XG4gICAgICAgICAgdGhpcy5jcmVhdGVJdGVtID0gY3JlYXRlSXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldChrZXkpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGtleSwgdGhpcy5jcmVhdGVJdGVtKGtleSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdXBlci5nZXQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGFuIG9iamVjdCB3aXRoIGEgYHRoZW5gIG1ldGhvZCwgYW5kIGNhblxuICAgICAgICogdGhlcmVmb3JlIGJlIGFzc3VtZWQgdG8gYmVoYXZlIGFzIGEgUHJvbWlzZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0LlxuICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHRoZW5hYmxlLlxuICAgICAgICovXG4gICAgICBjb25zdCBpc1RoZW5hYmxlID0gdmFsdWUgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSBcImZ1bmN0aW9uXCI7XG4gICAgICB9O1xuXG4gICAgICAvKipcbiAgICAgICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBmdW5jdGlvbiB3aGljaCwgd2hlbiBjYWxsZWQsIHdpbGwgcmVzb2x2ZSBvciByZWplY3RcbiAgICAgICAqIHRoZSBnaXZlbiBwcm9taXNlIGJhc2VkIG9uIGhvdyBpdCBpcyBjYWxsZWQ6XG4gICAgICAgKlxuICAgICAgICogLSBJZiwgd2hlbiBjYWxsZWQsIGBjaHJvbWUucnVudGltZS5sYXN0RXJyb3JgIGNvbnRhaW5zIGEgbm9uLW51bGwgb2JqZWN0LFxuICAgICAgICogICB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCB3aXRoIHRoYXQgdmFsdWUuXG4gICAgICAgKiAtIElmIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBleGFjdGx5IG9uZSBhcmd1bWVudCwgdGhlIHByb21pc2UgaXNcbiAgICAgICAqICAgcmVzb2x2ZWQgdG8gdGhhdCB2YWx1ZS5cbiAgICAgICAqIC0gT3RoZXJ3aXNlLCB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCB0byBhbiBhcnJheSBjb250YWluaW5nIGFsbCBvZiB0aGVcbiAgICAgICAqICAgZnVuY3Rpb24ncyBhcmd1bWVudHMuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtvYmplY3R9IHByb21pc2VcbiAgICAgICAqICAgICAgICBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzb2x1dGlvbiBhbmQgcmVqZWN0aW9uIGZ1bmN0aW9ucyBvZiBhXG4gICAgICAgKiAgICAgICAgcHJvbWlzZS5cbiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHByb21pc2UucmVzb2x2ZVxuICAgICAgICogICAgICAgIFRoZSBwcm9taXNlJ3MgcmVzb2x1dGlvbiBmdW5jdGlvbi5cbiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHByb21pc2UucmVqZWN0aW9uXG4gICAgICAgKiAgICAgICAgVGhlIHByb21pc2UncyByZWplY3Rpb24gZnVuY3Rpb24uXG4gICAgICAgKiBAcGFyYW0ge29iamVjdH0gbWV0YWRhdGFcbiAgICAgICAqICAgICAgICBNZXRhZGF0YSBhYm91dCB0aGUgd3JhcHBlZCBtZXRob2Qgd2hpY2ggaGFzIGNyZWF0ZWQgdGhlIGNhbGxiYWNrLlxuICAgICAgICogQHBhcmFtIHtpbnRlZ2VyfSBtZXRhZGF0YS5tYXhSZXNvbHZlZEFyZ3NcbiAgICAgICAqICAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIHdoaWNoIG1heSBiZSBwYXNzZWQgdG8gdGhlXG4gICAgICAgKiAgICAgICAgY2FsbGJhY2sgY3JlYXRlZCBieSB0aGUgd3JhcHBlZCBhc3luYyBmdW5jdGlvbi5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gICAgICAgKiAgICAgICAgVGhlIGdlbmVyYXRlZCBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICAgICAqL1xuICAgICAgY29uc3QgbWFrZUNhbGxiYWNrID0gKHByb21pc2UsIG1ldGFkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiAoLi4uY2FsbGJhY2tBcmdzKSA9PiB7XG4gICAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikge1xuICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLnNpbmdsZUNhbGxiYWNrQXJnIHx8IGNhbGxiYWNrQXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKGNhbGxiYWNrQXJnc1swXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb21pc2UucmVzb2x2ZShjYWxsYmFja0FyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBsdXJhbGl6ZUFyZ3VtZW50cyA9IG51bUFyZ3MgPT4gbnVtQXJncyA9PSAxID8gXCJhcmd1bWVudFwiIDogXCJhcmd1bWVudHNcIjtcblxuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGEgd3JhcHBlciBmdW5jdGlvbiBmb3IgYSBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgbWV0YWRhdGEuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgICAqICAgICAgICBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHdoaWNoIGlzIGJlaW5nIHdyYXBwZWQuXG4gICAgICAgKiBAcGFyYW0ge29iamVjdH0gbWV0YWRhdGFcbiAgICAgICAqICAgICAgICBNZXRhZGF0YSBhYm91dCB0aGUgbWV0aG9kIGJlaW5nIHdyYXBwZWQuXG4gICAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IG1ldGFkYXRhLm1pbkFyZ3NcbiAgICAgICAqICAgICAgICBUaGUgbWluaW11bSBudW1iZXIgb2YgYXJndW1lbnRzIHdoaWNoIG11c3QgYmUgcGFzc2VkIHRvIHRoZVxuICAgICAgICogICAgICAgIGZ1bmN0aW9uLiBJZiBjYWxsZWQgd2l0aCBmZXdlciB0aGFuIHRoaXMgbnVtYmVyIG9mIGFyZ3VtZW50cywgdGhlXG4gICAgICAgKiAgICAgICAgd3JhcHBlciB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbi5cbiAgICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gbWV0YWRhdGEubWF4QXJnc1xuICAgICAgICogICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMgd2hpY2ggbWF5IGJlIHBhc3NlZCB0byB0aGVcbiAgICAgICAqICAgICAgICBmdW5jdGlvbi4gSWYgY2FsbGVkIHdpdGggbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIGFyZ3VtZW50cywgdGhlXG4gICAgICAgKiAgICAgICAgd3JhcHBlciB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbi5cbiAgICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gbWV0YWRhdGEubWF4UmVzb2x2ZWRBcmdzXG4gICAgICAgKiAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyB3aGljaCBtYXkgYmUgcGFzc2VkIHRvIHRoZVxuICAgICAgICogICAgICAgIGNhbGxiYWNrIGNyZWF0ZWQgYnkgdGhlIHdyYXBwZWQgYXN5bmMgZnVuY3Rpb24uXG4gICAgICAgKlxuICAgICAgICogQHJldHVybnMge2Z1bmN0aW9uKG9iamVjdCwgLi4uKil9XG4gICAgICAgKiAgICAgICBUaGUgZ2VuZXJhdGVkIHdyYXBwZXIgZnVuY3Rpb24uXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IHdyYXBBc3luY0Z1bmN0aW9uID0gKG5hbWUsIG1ldGFkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBhc3luY0Z1bmN0aW9uV3JhcHBlcih0YXJnZXQsIC4uLmFyZ3MpIHtcbiAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPCBtZXRhZGF0YS5taW5BcmdzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0ICR7bWV0YWRhdGEubWluQXJnc30gJHtwbHVyYWxpemVBcmd1bWVudHMobWV0YWRhdGEubWluQXJncyl9IGZvciAke25hbWV9KCksIGdvdCAke2FyZ3MubGVuZ3RofWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IG1ldGFkYXRhLm1heEFyZ3MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXQgbW9zdCAke21ldGFkYXRhLm1heEFyZ3N9ICR7cGx1cmFsaXplQXJndW1lbnRzKG1ldGFkYXRhLm1heEFyZ3MpfSBmb3IgJHtuYW1lfSgpLCBnb3QgJHthcmdzLmxlbmd0aH1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLmZhbGxiYWNrVG9Ob0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgQVBJIG1ldGhvZCBoYXMgY3VycmVudGx5IG5vIGNhbGxiYWNrIG9uIENocm9tZSwgYnV0IGl0IHJldHVybiBhIHByb21pc2Ugb24gRmlyZWZveCxcbiAgICAgICAgICAgICAgLy8gYW5kIHNvIHRoZSBwb2x5ZmlsbCB3aWxsIHRyeSB0byBjYWxsIGl0IHdpdGggYSBjYWxsYmFjayBmaXJzdCwgYW5kIGl0IHdpbGwgZmFsbGJhY2tcbiAgICAgICAgICAgICAgLy8gdG8gbm90IHBhc3NpbmcgdGhlIGNhbGxiYWNrIGlmIHRoZSBmaXJzdCBjYWxsIGZhaWxzLlxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtuYW1lXSguLi5hcmdzLCBtYWtlQ2FsbGJhY2soeyByZXNvbHZlLCByZWplY3QgfSwgbWV0YWRhdGEpKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoY2JFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgJHtuYW1lfSBBUEkgbWV0aG9kIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHRoZSBjYWxsYmFjayBwYXJhbWV0ZXIsIGAgKyBcImZhbGxpbmcgYmFjayB0byBjYWxsIGl0IHdpdGhvdXQgYSBjYWxsYmFjazogXCIsIGNiRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdKC4uLmFyZ3MpO1xuXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBBUEkgbWV0aG9kIG1ldGFkYXRhLCBzbyB0aGF0IHRoZSBuZXh0IEFQSSBjYWxscyB3aWxsIG5vdCB0cnkgdG9cbiAgICAgICAgICAgICAgICAvLyB1c2UgdGhlIHVuc3VwcG9ydGVkIGNhbGxiYWNrIGFueW1vcmUuXG4gICAgICAgICAgICAgICAgbWV0YWRhdGEuZmFsbGJhY2tUb05vQ2FsbGJhY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YS5ub0NhbGxiYWNrID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRhZGF0YS5ub0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIHRhcmdldFtuYW1lXSguLi5hcmdzKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdKC4uLmFyZ3MsIG1ha2VDYWxsYmFjayh7IHJlc29sdmUsIHJlamVjdCB9LCBtZXRhZGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfTtcblxuICAgICAgLyoqXG4gICAgICAgKiBXcmFwcyBhbiBleGlzdGluZyBtZXRob2Qgb2YgdGhlIHRhcmdldCBvYmplY3QsIHNvIHRoYXQgY2FsbHMgdG8gaXQgYXJlXG4gICAgICAgKiBpbnRlcmNlcHRlZCBieSB0aGUgZ2l2ZW4gd3JhcHBlciBmdW5jdGlvbi4gVGhlIHdyYXBwZXIgZnVuY3Rpb24gcmVjZWl2ZXMsXG4gICAgICAgKiBhcyBpdHMgZmlyc3QgYXJndW1lbnQsIHRoZSBvcmlnaW5hbCBgdGFyZ2V0YCBvYmplY3QsIGZvbGxvd2VkIGJ5IGVhY2ggb2ZcbiAgICAgICAqIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBvcmlnaW5hbCBtZXRob2QuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtvYmplY3R9IHRhcmdldFxuICAgICAgICogICAgICAgIFRoZSBvcmlnaW5hbCB0YXJnZXQgb2JqZWN0IHRoYXQgdGhlIHdyYXBwZWQgbWV0aG9kIGJlbG9uZ3MgdG8uXG4gICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXRob2RcbiAgICAgICAqICAgICAgICBUaGUgbWV0aG9kIGJlaW5nIHdyYXBwZWQuIFRoaXMgaXMgdXNlZCBhcyB0aGUgdGFyZ2V0IG9mIHRoZSBQcm94eVxuICAgICAgICogICAgICAgIG9iamVjdCB3aGljaCBpcyBjcmVhdGVkIHRvIHdyYXAgdGhlIG1ldGhvZC5cbiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHdyYXBwZXJcbiAgICAgICAqICAgICAgICBUaGUgd3JhcHBlciBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgaW4gcGxhY2Ugb2YgYSBkaXJlY3QgaW52b2NhdGlvblxuICAgICAgICogICAgICAgIG9mIHRoZSB3cmFwcGVkIG1ldGhvZC5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJucyB7UHJveHk8ZnVuY3Rpb24+fVxuICAgICAgICogICAgICAgIEEgUHJveHkgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gbWV0aG9kLCB3aGljaCBpbnZva2VzIHRoZSBnaXZlbiB3cmFwcGVyXG4gICAgICAgKiAgICAgICAgbWV0aG9kIGluIGl0cyBwbGFjZS5cbiAgICAgICAqL1xuICAgICAgY29uc3Qgd3JhcE1ldGhvZCA9ICh0YXJnZXQsIG1ldGhvZCwgd3JhcHBlcikgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb3h5KG1ldGhvZCwge1xuICAgICAgICAgIGFwcGx5KHRhcmdldE1ldGhvZCwgdGhpc09iaiwgYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXIuY2FsbCh0aGlzT2JqLCB0YXJnZXQsIC4uLmFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBsZXQgaGFzT3duUHJvcGVydHkgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogV3JhcHMgYW4gb2JqZWN0IGluIGEgUHJveHkgd2hpY2ggaW50ZXJjZXB0cyBhbmQgd3JhcHMgY2VydGFpbiBtZXRob2RzXG4gICAgICAgKiBiYXNlZCBvbiB0aGUgZ2l2ZW4gYHdyYXBwZXJzYCBhbmQgYG1ldGFkYXRhYCBvYmplY3RzLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0YXJnZXRcbiAgICAgICAqICAgICAgICBUaGUgdGFyZ2V0IG9iamVjdCB0byB3cmFwLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbd3JhcHBlcnMgPSB7fV1cbiAgICAgICAqICAgICAgICBBbiBvYmplY3QgdHJlZSBjb250YWluaW5nIHdyYXBwZXIgZnVuY3Rpb25zIGZvciBzcGVjaWFsIGNhc2VzLiBBbnlcbiAgICAgICAqICAgICAgICBmdW5jdGlvbiBwcmVzZW50IGluIHRoaXMgb2JqZWN0IHRyZWUgaXMgY2FsbGVkIGluIHBsYWNlIG9mIHRoZVxuICAgICAgICogICAgICAgIG1ldGhvZCBpbiB0aGUgc2FtZSBsb2NhdGlvbiBpbiB0aGUgYHRhcmdldGAgb2JqZWN0IHRyZWUuIFRoZXNlXG4gICAgICAgKiAgICAgICAgd3JhcHBlciBtZXRob2RzIGFyZSBpbnZva2VkIGFzIGRlc2NyaWJlZCBpbiB7QHNlZSB3cmFwTWV0aG9kfS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge29iamVjdH0gW21ldGFkYXRhID0ge31dXG4gICAgICAgKiAgICAgICAgQW4gb2JqZWN0IHRyZWUgY29udGFpbmluZyBtZXRhZGF0YSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVcbiAgICAgICAqICAgICAgICBQcm9taXNlLWJhc2VkIHdyYXBwZXIgZnVuY3Rpb25zIGZvciBhc3luY2hyb25vdXMuIEFueSBmdW5jdGlvbiBpblxuICAgICAgICogICAgICAgIHRoZSBgdGFyZ2V0YCBvYmplY3QgdHJlZSB3aGljaCBoYXMgYSBjb3JyZXNwb25kaW5nIG1ldGFkYXRhIG9iamVjdFxuICAgICAgICogICAgICAgIGluIHRoZSBzYW1lIGxvY2F0aW9uIGluIHRoZSBgbWV0YWRhdGFgIHRyZWUgaXMgcmVwbGFjZWQgd2l0aCBhblxuICAgICAgICogICAgICAgIGF1dG9tYXRpY2FsbHktZ2VuZXJhdGVkIHdyYXBwZXIgZnVuY3Rpb24sIGFzIGRlc2NyaWJlZCBpblxuICAgICAgICogICAgICAgIHtAc2VlIHdyYXBBc3luY0Z1bmN0aW9ufVxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm5zIHtQcm94eTxvYmplY3Q+fVxuICAgICAgICovXG4gICAgICBjb25zdCB3cmFwT2JqZWN0ID0gKHRhcmdldCwgd3JhcHBlcnMgPSB7fSwgbWV0YWRhdGEgPSB7fSkgPT4ge1xuICAgICAgICBsZXQgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBsZXQgaGFuZGxlcnMgPSB7XG4gICAgICAgICAgaGFzKHByb3h5VGFyZ2V0LCBwcm9wKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvcCBpbiB0YXJnZXQgfHwgcHJvcCBpbiBjYWNoZTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZ2V0KHByb3h5VGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xuICAgICAgICAgICAgaWYgKHByb3AgaW4gY2FjaGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlW3Byb3BdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIShwcm9wIGluIHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHZhbHVlID0gdGFyZ2V0W3Byb3BdO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG1ldGhvZCBvbiB0aGUgdW5kZXJseWluZyBvYmplY3QuIENoZWNrIGlmIHdlIG5lZWQgdG8gZG9cbiAgICAgICAgICAgICAgLy8gYW55IHdyYXBwaW5nLlxuXG4gICAgICAgICAgICAgIGlmICh0eXBlb2Ygd3JhcHBlcnNbcHJvcF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBzcGVjaWFsLWNhc2Ugd3JhcHBlciBmb3IgdGhpcyBtZXRob2QuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB3cmFwTWV0aG9kKHRhcmdldCwgdGFyZ2V0W3Byb3BdLCB3cmFwcGVyc1twcm9wXSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzT3duUHJvcGVydHkobWV0YWRhdGEsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCB3ZSBoYXZlIG1ldGFkYXRhIGZvci4gQ3JlYXRlIGFcbiAgICAgICAgICAgICAgICAvLyBQcm9taXNlIHdyYXBwZXIgZm9yIGl0LlxuICAgICAgICAgICAgICAgIGxldCB3cmFwcGVyID0gd3JhcEFzeW5jRnVuY3Rpb24ocHJvcCwgbWV0YWRhdGFbcHJvcF0pO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gd3JhcE1ldGhvZCh0YXJnZXQsIHRhcmdldFtwcm9wXSwgd3JhcHBlcik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG1ldGhvZCB0aGF0IHdlIGRvbid0IGtub3cgb3IgY2FyZSBhYm91dC4gUmV0dXJuIHRoZVxuICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsIG1ldGhvZCwgYm91bmQgdG8gdGhlIHVuZGVybHlpbmcgb2JqZWN0LlxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuYmluZCh0YXJnZXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAoaGFzT3duUHJvcGVydHkod3JhcHBlcnMsIHByb3ApIHx8IGhhc093blByb3BlcnR5KG1ldGFkYXRhLCBwcm9wKSkpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBvYmplY3QgdGhhdCB3ZSBuZWVkIHRvIGRvIHNvbWUgd3JhcHBpbmcgZm9yIHRoZSBjaGlsZHJlblxuICAgICAgICAgICAgICAvLyBvZi4gQ3JlYXRlIGEgc3ViLW9iamVjdCB3cmFwcGVyIGZvciBpdCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBjaGlsZFxuICAgICAgICAgICAgICAvLyBtZXRhZGF0YS5cbiAgICAgICAgICAgICAgdmFsdWUgPSB3cmFwT2JqZWN0KHZhbHVlLCB3cmFwcGVyc1twcm9wXSwgbWV0YWRhdGFbcHJvcF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnkgd3JhcHBpbmcgZm9yIHRoaXMgcHJvcGVydHksXG4gICAgICAgICAgICAgIC8vIHNvIGp1c3QgZm9yd2FyZCBhbGwgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIG9iamVjdC5cbiAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNhY2hlLCBwcm9wLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhY2hlW3Byb3BdID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIHNldChwcm94eVRhcmdldCwgcHJvcCwgdmFsdWUsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICBpZiAocHJvcCBpbiBjYWNoZSkge1xuICAgICAgICAgICAgICBjYWNoZVtwcm9wXSA9IHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZGVmaW5lUHJvcGVydHkocHJveHlUYXJnZXQsIHByb3AsIGRlc2MpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmRlZmluZVByb3BlcnR5KGNhY2hlLCBwcm9wLCBkZXNjKTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZGVsZXRlUHJvcGVydHkocHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KGNhY2hlLCBwcm9wKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUGVyIGNvbnRyYWN0IG9mIHRoZSBQcm94eSBBUEksIHRoZSBcImdldFwiIHByb3h5IGhhbmRsZXIgbXVzdCByZXR1cm4gdGhlXG4gICAgICAgIC8vIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSB0YXJnZXQgaWYgdGhhdCB2YWx1ZSBpcyBkZWNsYXJlZCByZWFkLW9ubHkgYW5kXG4gICAgICAgIC8vIG5vbi1jb25maWd1cmFibGUuIEZvciB0aGlzIHJlYXNvbiwgd2UgY3JlYXRlIGFuIG9iamVjdCB3aXRoIHRoZVxuICAgICAgICAvLyBwcm90b3R5cGUgc2V0IHRvIGB0YXJnZXRgIGluc3RlYWQgb2YgdXNpbmcgYHRhcmdldGAgZGlyZWN0bHkuXG4gICAgICAgIC8vIE90aGVyd2lzZSB3ZSBjYW5ub3QgcmV0dXJuIGEgY3VzdG9tIG9iamVjdCBmb3IgQVBJcyB0aGF0XG4gICAgICAgIC8vIGFyZSBkZWNsYXJlZCByZWFkLW9ubHkgYW5kIG5vbi1jb25maWd1cmFibGUsIHN1Y2ggYXMgYGNocm9tZS5kZXZ0b29sc2AuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoZSBwcm94eSBoYW5kbGVycyB0aGVtc2VsdmVzIHdpbGwgc3RpbGwgdXNlIHRoZSBvcmlnaW5hbCBgdGFyZ2V0YFxuICAgICAgICAvLyBpbnN0ZWFkIG9mIHRoZSBgcHJveHlUYXJnZXRgLCBzbyB0aGF0IHRoZSBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGFyZVxuICAgICAgICAvLyBkZXJlZmVyZW5jZWQgdmlhIHRoZSBvcmlnaW5hbCB0YXJnZXRzLlxuICAgICAgICBsZXQgcHJveHlUYXJnZXQgPSBPYmplY3QuY3JlYXRlKHRhcmdldCk7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkocHJveHlUYXJnZXQsIGhhbmRsZXJzKTtcbiAgICAgIH07XG5cbiAgICAgIC8qKlxuICAgICAgICogQ3JlYXRlcyBhIHNldCBvZiB3cmFwcGVyIGZ1bmN0aW9ucyBmb3IgYW4gZXZlbnQgb2JqZWN0LCB3aGljaCBoYW5kbGVzXG4gICAgICAgKiB3cmFwcGluZyBvZiBsaXN0ZW5lciBmdW5jdGlvbnMgdGhhdCB0aG9zZSBtZXNzYWdlcyBhcmUgcGFzc2VkLlxuICAgICAgICpcbiAgICAgICAqIEEgc2luZ2xlIHdyYXBwZXIgaXMgY3JlYXRlZCBmb3IgZWFjaCBsaXN0ZW5lciBmdW5jdGlvbiwgYW5kIHN0b3JlZCBpbiBhXG4gICAgICAgKiBtYXAuIFN1YnNlcXVlbnQgY2FsbHMgdG8gYGFkZExpc3RlbmVyYCwgYGhhc0xpc3RlbmVyYCwgb3IgYHJlbW92ZUxpc3RlbmVyYFxuICAgICAgICogcmV0cmlldmUgdGhlIG9yaWdpbmFsIHdyYXBwZXIsIHNvIHRoYXQgIGF0dGVtcHRzIHRvIHJlbW92ZSBhXG4gICAgICAgKiBwcmV2aW91c2x5LWFkZGVkIGxpc3RlbmVyIHdvcmsgYXMgZXhwZWN0ZWQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtEZWZhdWx0V2Vha01hcDxmdW5jdGlvbiwgZnVuY3Rpb24+fSB3cmFwcGVyTWFwXG4gICAgICAgKiAgICAgICAgQSBEZWZhdWx0V2Vha01hcCBvYmplY3Qgd2hpY2ggd2lsbCBjcmVhdGUgdGhlIGFwcHJvcHJpYXRlIHdyYXBwZXJcbiAgICAgICAqICAgICAgICBmb3IgYSBnaXZlbiBsaXN0ZW5lciBmdW5jdGlvbiB3aGVuIG9uZSBkb2VzIG5vdCBleGlzdCwgYW5kIHJldHJpZXZlXG4gICAgICAgKiAgICAgICAgYW4gZXhpc3Rpbmcgb25lIHdoZW4gaXQgZG9lcy5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgICAgICovXG4gICAgICBjb25zdCB3cmFwRXZlbnQgPSB3cmFwcGVyTWFwID0+ICh7XG4gICAgICAgIGFkZExpc3RlbmVyKHRhcmdldCwgbGlzdGVuZXIsIC4uLmFyZ3MpIHtcbiAgICAgICAgICB0YXJnZXQuYWRkTGlzdGVuZXIod3JhcHBlck1hcC5nZXQobGlzdGVuZXIpLCAuLi5hcmdzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBoYXNMaXN0ZW5lcih0YXJnZXQsIGxpc3RlbmVyKSB7XG4gICAgICAgICAgcmV0dXJuIHRhcmdldC5oYXNMaXN0ZW5lcih3cmFwcGVyTWFwLmdldChsaXN0ZW5lcikpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlbW92ZUxpc3RlbmVyKHRhcmdldCwgbGlzdGVuZXIpIHtcbiAgICAgICAgICB0YXJnZXQucmVtb3ZlTGlzdGVuZXIod3JhcHBlck1hcC5nZXQobGlzdGVuZXIpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEtlZXAgdHJhY2sgaWYgdGhlIGRlcHJlY2F0aW9uIHdhcm5pbmcgaGFzIGJlZW4gbG9nZ2VkIGF0IGxlYXN0IG9uY2UuXG4gICAgICBsZXQgbG9nZ2VkU2VuZFJlc3BvbnNlRGVwcmVjYXRpb25XYXJuaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IG9uTWVzc2FnZVdyYXBwZXJzID0gbmV3IERlZmF1bHRXZWFrTWFwKGxpc3RlbmVyID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgcmV0dXJuIGxpc3RlbmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdyYXBzIGEgbWVzc2FnZSBsaXN0ZW5lciBmdW5jdGlvbiBzbyB0aGF0IGl0IG1heSBzZW5kIHJlc3BvbnNlcyBiYXNlZCBvblxuICAgICAgICAgKiBpdHMgcmV0dXJuIHZhbHVlLCByYXRoZXIgdGhhbiBieSByZXR1cm5pbmcgYSBzZW50aW5lbCB2YWx1ZSBhbmQgY2FsbGluZyBhXG4gICAgICAgICAqIGNhbGxiYWNrLiBJZiB0aGUgbGlzdGVuZXIgZnVuY3Rpb24gcmV0dXJucyBhIFByb21pc2UsIHRoZSByZXNwb25zZSBpc1xuICAgICAgICAgKiBzZW50IHdoZW4gdGhlIHByb21pc2UgZWl0aGVyIHJlc29sdmVzIG9yIHJlamVjdHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gbWVzc2FnZVxuICAgICAgICAgKiAgICAgICAgVGhlIG1lc3NhZ2Ugc2VudCBieSB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjaGFubmVsLlxuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gc2VuZGVyXG4gICAgICAgICAqICAgICAgICBEZXRhaWxzIGFib3V0IHRoZSBzZW5kZXIgb2YgdGhlIG1lc3NhZ2UuXG4gICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKil9IHNlbmRSZXNwb25zZVxuICAgICAgICAgKiAgICAgICAgQSBjYWxsYmFjayB3aGljaCwgd2hlbiBjYWxsZWQgd2l0aCBhbiBhcmJpdHJhcnkgYXJndW1lbnQsIHNlbmRzXG4gICAgICAgICAqICAgICAgICB0aGF0IHZhbHVlIGFzIGEgcmVzcG9uc2UuXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAgICAgKiAgICAgICAgVHJ1ZSBpZiB0aGUgd3JhcHBlZCBsaXN0ZW5lciByZXR1cm5lZCBhIFByb21pc2UsIHdoaWNoIHdpbGwgbGF0ZXJcbiAgICAgICAgICogICAgICAgIHlpZWxkIGEgcmVzcG9uc2UuIEZhbHNlIG90aGVyd2lzZS5cbiAgICAgICAgICovXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBvbk1lc3NhZ2UobWVzc2FnZSwgc2VuZGVyLCBzZW5kUmVzcG9uc2UpIHtcbiAgICAgICAgICBsZXQgZGlkQ2FsbFNlbmRSZXNwb25zZSA9IGZhbHNlO1xuXG4gICAgICAgICAgbGV0IHdyYXBwZWRTZW5kUmVzcG9uc2U7XG4gICAgICAgICAgbGV0IHNlbmRSZXNwb25zZVByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIHdyYXBwZWRTZW5kUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgaWYgKCFsb2dnZWRTZW5kUmVzcG9uc2VEZXByZWNhdGlvbldhcm5pbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oU0VORF9SRVNQT05TRV9ERVBSRUNBVElPTl9XQVJOSU5HLCBuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgICAgICAgICAgICAgbG9nZ2VkU2VuZFJlc3BvbnNlRGVwcmVjYXRpb25XYXJuaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkaWRDYWxsU2VuZFJlc3BvbnNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbGlzdGVuZXIobWVzc2FnZSwgc2VuZGVyLCB3cmFwcGVkU2VuZFJlc3BvbnNlKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFByb21pc2UucmVqZWN0KGVycik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaXNSZXN1bHRUaGVuYWJsZSA9IHJlc3VsdCAhPT0gdHJ1ZSAmJiBpc1RoZW5hYmxlKHJlc3VsdCk7XG5cbiAgICAgICAgICAvLyBJZiB0aGUgbGlzdGVuZXIgZGlkbid0IHJldHVybmVkIHRydWUgb3IgYSBQcm9taXNlLCBvciBjYWxsZWRcbiAgICAgICAgICAvLyB3cmFwcGVkU2VuZFJlc3BvbnNlIHN5bmNocm9ub3VzbHksIHdlIGNhbiBleGl0IGVhcmxpZXJcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoZXJlIHdpbGwgYmUgbm8gcmVzcG9uc2Ugc2VudCBmcm9tIHRoaXMgbGlzdGVuZXIuXG4gICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSAmJiAhaXNSZXN1bHRUaGVuYWJsZSAmJiAhZGlkQ2FsbFNlbmRSZXNwb25zZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEEgc21hbGwgaGVscGVyIHRvIHNlbmQgdGhlIG1lc3NhZ2UgaWYgdGhlIHByb21pc2UgcmVzb2x2ZXNcbiAgICAgICAgICAvLyBhbmQgYW4gZXJyb3IgaWYgdGhlIHByb21pc2UgcmVqZWN0cyAoYSB3cmFwcGVkIHNlbmRNZXNzYWdlIGhhc1xuICAgICAgICAgIC8vIHRvIHRyYW5zbGF0ZSB0aGUgbWVzc2FnZSBpbnRvIGEgcmVzb2x2ZWQgcHJvbWlzZSBvciBhIHJlamVjdGVkXG4gICAgICAgICAgLy8gcHJvbWlzZSkuXG4gICAgICAgICAgY29uc3Qgc2VuZFByb21pc2VkUmVzdWx0ID0gcHJvbWlzZSA9PiB7XG4gICAgICAgICAgICBwcm9taXNlLnRoZW4obXNnID0+IHtcbiAgICAgICAgICAgICAgLy8gc2VuZCB0aGUgbWVzc2FnZSB2YWx1ZS5cbiAgICAgICAgICAgICAgc2VuZFJlc3BvbnNlKG1zZyk7XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgIC8vIFNlbmQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlcnJvciBpZiB0aGUgcmVqZWN0ZWQgdmFsdWVcbiAgICAgICAgICAgICAgLy8gaXMgYW4gaW5zdGFuY2Ugb2YgZXJyb3IsIG9yIHRoZSBvYmplY3QgaXRzZWxmIG90aGVyd2lzZS5cbiAgICAgICAgICAgICAgbGV0IG1lc3NhZ2U7XG4gICAgICAgICAgICAgIGlmIChlcnJvciAmJiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciB8fCB0eXBlb2YgZXJyb3IubWVzc2FnZSA9PT0gXCJzdHJpbmdcIikpIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gXCJBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkXCI7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzZW5kUmVzcG9uc2Uoe1xuICAgICAgICAgICAgICAgIF9fbW96V2ViRXh0ZW5zaW9uUG9seWZpbGxSZWplY3RfXzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgLy8gUHJpbnQgYW4gZXJyb3Igb24gdGhlIGNvbnNvbGUgaWYgdW5hYmxlIHRvIHNlbmQgdGhlIHJlc3BvbnNlLlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHNlbmQgb25NZXNzYWdlIHJlamVjdGVkIHJlcGx5XCIsIGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gSWYgdGhlIGxpc3RlbmVyIHJldHVybmVkIGEgUHJvbWlzZSwgc2VuZCB0aGUgcmVzb2x2ZWQgdmFsdWUgYXMgYVxuICAgICAgICAgIC8vIHJlc3VsdCwgb3RoZXJ3aXNlIHdhaXQgdGhlIHByb21pc2UgcmVsYXRlZCB0byB0aGUgd3JhcHBlZFNlbmRSZXNwb25zZVxuICAgICAgICAgIC8vIGNhbGxiYWNrIHRvIHJlc29sdmUgYW5kIHNlbmQgaXQgYXMgYSByZXNwb25zZS5cbiAgICAgICAgICBpZiAoaXNSZXN1bHRUaGVuYWJsZSkge1xuICAgICAgICAgICAgc2VuZFByb21pc2VkUmVzdWx0KHJlc3VsdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbmRQcm9taXNlZFJlc3VsdChzZW5kUmVzcG9uc2VQcm9taXNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBMZXQgQ2hyb21lIGtub3cgdGhhdCB0aGUgbGlzdGVuZXIgaXMgcmVwbHlpbmcuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgd3JhcHBlZFNlbmRNZXNzYWdlQ2FsbGJhY2sgPSAoeyByZWplY3QsIHJlc29sdmUgfSwgcmVwbHkpID0+IHtcbiAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikge1xuICAgICAgICAgIC8vIERldGVjdCB3aGVuIG5vbmUgb2YgdGhlIGxpc3RlbmVycyByZXBsaWVkIHRvIHRoZSBzZW5kTWVzc2FnZSBjYWxsIGFuZCByZXNvbHZlXG4gICAgICAgICAgLy8gdGhlIHByb21pc2UgdG8gdW5kZWZpbmVkIGFzIGluIEZpcmVmb3guXG4gICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3dlYmV4dGVuc2lvbi1wb2x5ZmlsbC9pc3N1ZXMvMTMwXG4gICAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvci5tZXNzYWdlID09PSBDSFJPTUVfU0VORF9NRVNTQUdFX0NBTExCQUNLX05PX1JFU1BPTlNFX01FU1NBR0UpIHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlcGx5ICYmIHJlcGx5Ll9fbW96V2ViRXh0ZW5zaW9uUG9seWZpbGxSZWplY3RfXykge1xuICAgICAgICAgIC8vIENvbnZlcnQgYmFjayB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXJyb3IgaW50b1xuICAgICAgICAgIC8vIGFuIEVycm9yIGluc3RhbmNlLlxuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IocmVwbHkubWVzc2FnZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUocmVwbHkpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB3cmFwcGVkU2VuZE1lc3NhZ2UgPSAobmFtZSwgbWV0YWRhdGEsIGFwaU5hbWVzcGFjZU9iaiwgLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCBtZXRhZGF0YS5taW5BcmdzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCAke21ldGFkYXRhLm1pbkFyZ3N9ICR7cGx1cmFsaXplQXJndW1lbnRzKG1ldGFkYXRhLm1pbkFyZ3MpfSBmb3IgJHtuYW1lfSgpLCBnb3QgJHthcmdzLmxlbmd0aH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IG1ldGFkYXRhLm1heEFyZ3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGF0IG1vc3QgJHttZXRhZGF0YS5tYXhBcmdzfSAke3BsdXJhbGl6ZUFyZ3VtZW50cyhtZXRhZGF0YS5tYXhBcmdzKX0gZm9yICR7bmFtZX0oKSwgZ290ICR7YXJncy5sZW5ndGh9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHdyYXBwZWRDYiA9IHdyYXBwZWRTZW5kTWVzc2FnZUNhbGxiYWNrLmJpbmQobnVsbCwgeyByZXNvbHZlLCByZWplY3QgfSk7XG4gICAgICAgICAgYXJncy5wdXNoKHdyYXBwZWRDYik7XG4gICAgICAgICAgYXBpTmFtZXNwYWNlT2JqLnNlbmRNZXNzYWdlKC4uLmFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHN0YXRpY1dyYXBwZXJzID0ge1xuICAgICAgICBydW50aW1lOiB7XG4gICAgICAgICAgb25NZXNzYWdlOiB3cmFwRXZlbnQob25NZXNzYWdlV3JhcHBlcnMpLFxuICAgICAgICAgIG9uTWVzc2FnZUV4dGVybmFsOiB3cmFwRXZlbnQob25NZXNzYWdlV3JhcHBlcnMpLFxuICAgICAgICAgIHNlbmRNZXNzYWdlOiB3cmFwcGVkU2VuZE1lc3NhZ2UuYmluZChudWxsLCBcInNlbmRNZXNzYWdlXCIsIHsgbWluQXJnczogMSwgbWF4QXJnczogMyB9KVxuICAgICAgICB9LFxuICAgICAgICB0YWJzOiB7XG4gICAgICAgICAgc2VuZE1lc3NhZ2U6IHdyYXBwZWRTZW5kTWVzc2FnZS5iaW5kKG51bGwsIFwic2VuZE1lc3NhZ2VcIiwgeyBtaW5BcmdzOiAyLCBtYXhBcmdzOiAzIH0pXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBzZXR0aW5nTWV0YWRhdGEgPSB7XG4gICAgICAgIGNsZWFyOiB7IG1pbkFyZ3M6IDEsIG1heEFyZ3M6IDEgfSxcbiAgICAgICAgZ2V0OiB7IG1pbkFyZ3M6IDEsIG1heEFyZ3M6IDEgfSxcbiAgICAgICAgc2V0OiB7IG1pbkFyZ3M6IDEsIG1heEFyZ3M6IDEgfVxuICAgICAgfTtcbiAgICAgIGFwaU1ldGFkYXRhLnByaXZhY3kgPSB7XG4gICAgICAgIG5ldHdvcms6IHtcbiAgICAgICAgICBuZXR3b3JrUHJlZGljdGlvbkVuYWJsZWQ6IHNldHRpbmdNZXRhZGF0YSxcbiAgICAgICAgICB3ZWJSVENJUEhhbmRsaW5nUG9saWN5OiBzZXR0aW5nTWV0YWRhdGFcbiAgICAgICAgfSxcbiAgICAgICAgc2VydmljZXM6IHtcbiAgICAgICAgICBwYXNzd29yZFNhdmluZ0VuYWJsZWQ6IHNldHRpbmdNZXRhZGF0YVxuICAgICAgICB9LFxuICAgICAgICB3ZWJzaXRlczoge1xuICAgICAgICAgIGh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZDogc2V0dGluZ01ldGFkYXRhLFxuICAgICAgICAgIHJlZmVycmVyc0VuYWJsZWQ6IHNldHRpbmdNZXRhZGF0YVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gd3JhcE9iamVjdChjaHJvbWUsIHN0YXRpY1dyYXBwZXJzLCBhcGlNZXRhZGF0YSk7XG4gICAgfTtcblxuICAgIC8vIFRoZSBidWlsZCBwcm9jZXNzIGFkZHMgYSBVTUQgd3JhcHBlciBhcm91bmQgdGhpcyBmaWxlLCB3aGljaCBtYWtlcyB0aGVcbiAgICAvLyBgbW9kdWxlYCB2YXJpYWJsZSBhdmFpbGFibGUuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSB3cmFwQVBJcygpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBicm93c2VyOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gIH1cbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnJvd3Nlci1wb2x5ZmlsbC5qcy5tYXBcbiJdLCJzb3VyY2VSb290IjoiIn0= | |
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./content.js","webpack:///../node_modules/webextension-polyfill/dist/browser-polyfill.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","browser","require","content","extension","getURL","script","document","createElement","setAttribute","documentElement","appendChild","parentNode","removeChild","runtime","onMessage","addListener","message","to","postMessage","from","proxyFrom","action","payload","window","addEventListener","event","data","sendMessage","getPrototypeOf","CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE","SEND_RESPONSE_DEPRECATION_WARNING","wrapAPIs","apiMetadata","keys","length","Error","DefaultWeakMap","WeakMap","createItem","items","super","this","has","set","makeCallback","promise","metadata","callbackArgs","chrome","lastError","reject","singleCallbackArg","resolve","pluralizeArguments","numArgs","wrapMethod","target","method","wrapper","Proxy","apply","targetMethod","thisObj","args","Function","wrapObject","wrappers","cache","handlers","proxyTarget","prop","receiver","minArgs","maxArgs","Promise","fallbackToNoCallback","cbError","console","warn","noCallback","wrapAsyncFunction","configurable","desc","Reflect","deleteProperty","wrapEvent","wrapperMap","listener","hasListener","removeListener","loggedSendResponseDeprecationWarning","onMessageWrappers","sender","sendResponse","wrappedSendResponse","result","didCallSendResponse","sendResponsePromise","response","stack","err","isResultThenable","then","sendPromisedResult","msg","error","__mozWebExtensionPolyfillReject__","catch","wrappedSendMessageCallback","reply","wrappedSendMessage","apiNamespaceObj","wrappedCb","push","staticWrappers","onMessageExternal","tabs","settingMetadata","clear","privacy","network","networkPredictionEnabled","webRTCIPHandlingPolicy","services","passwordSavingEnabled","websites","hyperlinkAuditingEnabled","referrersEnabled"],"mappings":"aACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QAKfF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,K,sBClFrD,IAAMC,EAAUC,EAAQ,IAIlBC,EAAUF,EAAQG,UAAUC,OAAO,eACnCC,EAASC,SAASC,cAAc,UACtCF,EAAOG,aAAa,QAAS,SAC7BH,EAAOG,aAAa,OAAQ,mBAC5BH,EAAOG,aAAa,MAAON,GAE3BI,SAASG,gBAAgBC,YAAYL,GACrCA,EAAOM,WAAWC,YAAYP,GAI9BL,EAAQa,QAAQC,UAAUC,aAE1B,SAAgCC,GACX,aAAfA,EAAQC,IAEVC,YAAY,CACVC,KAAM,UACNC,UAAWJ,EAAQG,KACnBF,GAAID,EAAQC,GACZI,OAAQL,EAAQK,OAChBC,QAASN,EAAQM,SAAW,IAC3B,QAKPC,OAAOC,iBAAiB,WAAW,SAAUC,GACnB,aAApBA,EAAMC,KAAKP,KACTM,EAAMC,KAAKL,QACbrB,EAAQa,QAAQc,YAAY,CAC1BR,KAAM,UACNC,UAAWK,EAAMC,KAAKP,KACtBF,GAAIQ,EAAMC,KAAKT,GACfI,OAAQI,EAAMC,KAAKL,OACnBC,QAASG,EAAMC,KAAKJ,UAGK,UAApBG,EAAMC,KAAKP,MAEXM,EAAMC,KAAKP,S,mBC5CxB,UAEI,EAAgC,CAAC,QAAkB,0BAAP,EAUvC,SAAUpD,GAOjB,aAEA,GAAuB,oBAAZiC,SAA2BtB,OAAOkD,eAAe5B,WAAatB,OAAOkB,UAAW,CACzF,MAAMiC,EAAmD,0DACnDC,EAAoC,yPAOpCC,EAAW,KAIf,MAAMC,EAAc,CAClB,OAAU,CACR,MAAS,CACP,QAAW,EACX,QAAW,GAEb,SAAY,CACV,QAAW,EACX,QAAW,GAEb,IAAO,CACL,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,IAGf,UAAa,CACX,OAAU,CACR,QAAW,EACX,QAAW,GAEb,IAAO,CACL,QAAW,EACX,QAAW,GAEb,YAAe,CACb,QAAW,EACX,QAAW,GAEb,UAAa,CACX,QAAW,EACX,QAAW,GAEb,WAAc,CACZ,QAAW,EACX,QAAW,GAEb,QAAW,CACT,QAAW,EACX,QAAW,GAEb,KAAQ,CACN,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,WAAc,CACZ,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,IAGf,cAAiB,CACf,QAAW,CACT,QAAW,EACX,QAAW,EACX,sBAAwB,GAE1B,OAAU,CACR,QAAW,EACX,QAAW,EACX,sBAAwB,GAE1B,wBAA2B,CACzB,QAAW,EACX,QAAW,GAEb,aAAgB,CACd,QAAW,EACX,QAAW,GAEb,SAAY,CACV,QAAW,EACX,QAAW,GAEb,SAAY,CACV,QAAW,EACX,QAAW,GAEb,UAAa,CACX,QAAW,EACX,QAAW,GAEb,wBAA2B,CACzB,QAAW,EACX,QAAW,EACX,sBAAwB,GAE1B,aAAgB,CACd,QAAW,EACX,QAAW,EACX,sBAAwB,GAE1B,QAAW,CACT,QAAW,EACX,QAAW,GAEb,SAAY,CACV,QAAW,EACX,QAAW,EACX,sBAAwB,GAE1B,SAAY,CACV,QAAW,EACX,QAAW,EACX,sBAAwB,IAG5B,aAAgB,CACd,OAAU,CACR,QAAW,EACX,QAAW,GAEb,YAAe,CACb,QAAW,EACX,QAAW,GAEb,cAAiB,CACf,QAAW,EACX,QAAW,GAEb,gBAAmB,CACjB,QAAW,EACX,QAAW,GAEb,eAAkB,CAChB,QAAW,EACX,QAAW,GAEb,cAAiB,CACf,QAAW,EACX,QAAW,GAEb,mBAAsB,CACpB,QAAW,EACX,QAAW,GAEb,gBAAmB,CACjB,QAAW,EACX,QAAW,GAEb,iBAAoB,CAClB,QAAW,EACX,QAAW,GAEb,SAAY,CACV,QAAW,EACX,QAAW,IAGf,SAAY,CACV,OAAU,CACR,QAAW,EACX,QAAW,IAGf,aAAgB,CACd,OAAU,CACR,QAAW,EACX,QAAW,GAEb,UAAa,CACX,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,IAGf,QAAW,CACT,IAAO,CACL,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,mBAAsB,CACpB,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,IAAO,CACL,QAAW,EACX,QAAW,IAGf,SAAY,CACV,gBAAmB,CACjB,KAAQ,CACN,QAAW,EACX,QAAW,IAGf,OAAU,CACR,OAAU,CACR,QAAW,EACX,QAAW,EACX,mBAAqB,KAI3B,UAAa,CACX,OAAU,CACR,QAAW,EACX,QAAW,GAEb,SAAY,CACV,QAAW,EACX,QAAW,GAEb,MAAS,CACP,QAAW,EACX,QAAW,GAEb,YAAe,CACb,QAAW,EACX,QAAW,GAEb,KAAQ,CACN,QAAW,EACX,QAAW,EACX,sBAAwB,GAE1B,MAAS,CACP,QAAW,EACX,QAAW,GAEb,WAAc,CACZ,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,KAAQ,CACN,QAAW,EACX,QAAW,EACX,sBAAwB,IAG5B,UAAa,CACX,0BAA6B,CAC3B,QAAW,EACX,QAAW,GAEb,yBAA4B,CAC1B,QAAW,EACX,QAAW,IAGf,QAAW,CACT,OAAU,CACR,QAAW,EACX,QAAW,GAEb,UAAa,CACX,QAAW,EACX,QAAW,GAEb,YAAe,CACb,QAAW,EACX,QAAW,GAEb,UAAa,CACX,QAAW,EACX,QAAW,GAEb,UAAa,CACX,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,IAGf,KAAQ,CACN,eAAkB,CAChB,QAAW,EACX,QAAW,GAEb,mBAAsB,CACpB,QAAW,EACX,QAAW,IAGf,SAAY,CACV,kBAAqB,CACnB,QAAW,EACX,QAAW,IAGf,KAAQ,CACN,WAAc,CACZ,QAAW,EACX,QAAW,IAGf,WAAc,CACZ,IAAO,CACL,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,QAAW,CACT,QAAW,EACX,QAAW,GAEb,WAAc,CACZ,QAAW,EACX,QAAW,GAEb,cAAiB,CACf,QAAW,EACX,QAAW,IAGf,cAAiB,CACf,MAAS,CACP,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,mBAAsB,CACpB,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,IAGf,WAAc,CACZ,SAAY,CACV,QAAW,EACX,QAAW,GAEb,SAAY,CACV,QAAW,EACX,QAAW,GAEb,KAAQ,CACN,QAAW,EACX,QAAW,EACX,sBAAwB,GAE1B,QAAW,CACT,QAAW,EACX,QAAW,GAEb,SAAY,CACV,QAAW,EACX,QAAW,EACX,sBAAwB,GAE1B,SAAY,CACV,QAAW,EACX,QAAW,EACX,sBAAwB,GAE1B,KAAQ,CACN,QAAW,EACX,QAAW,EACX,sBAAwB,IAG5B,YAAe,CACb,SAAY,CACV,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,QAAW,CACT,QAAW,EACX,QAAW,IAGf,QAAW,CACT,kBAAqB,CACnB,QAAW,EACX,QAAW,GAEb,eAAkB,CAChB,QAAW,EACX,QAAW,GAEb,gBAAmB,CACjB,QAAW,EACX,QAAW,GAEb,gBAAmB,CACjB,QAAW,EACX,QAAW,GAEb,mBAAsB,CACpB,QAAW,EACX,QAAW,GAEb,YAAe,CACb,QAAW,EACX,QAAW,GAEb,kBAAqB,CACnB,QAAW,EACX,QAAW,GAEb,gBAAmB,CACjB,QAAW,EACX,QAAW,IAGf,SAAY,CACV,WAAc,CACZ,QAAW,EACX,QAAW,GAEb,kBAAqB,CACnB,QAAW,EACX,QAAW,GAEb,QAAW,CACT,QAAW,EACX,QAAW,IAGf,QAAW,CACT,MAAS,CACP,MAAS,CACP,QAAW,EACX,QAAW,GAEb,IAAO,CACL,QAAW,EACX,QAAW,GAEb,cAAiB,CACf,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,IAAO,CACL,QAAW,EACX,QAAW,IAGf,QAAW,CACT,IAAO,CACL,QAAW,EACX,QAAW,GAEb,cAAiB,CACf,QAAW,EACX,QAAW,IAGf,KAAQ,CACN,MAAS,CACP,QAAW,EACX,QAAW,GAEb,IAAO,CACL,QAAW,EACX,QAAW,GAEb,cAAiB,CACf,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,IAAO,CACL,QAAW,EACX,QAAW,KAIjB,KAAQ,CACN,kBAAqB,CACnB,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,eAAkB,CAChB,QAAW,EACX,QAAW,GAEb,QAAW,CACT,QAAW,EACX,QAAW,GAEb,UAAa,CACX,QAAW,EACX,QAAW,GAEb,cAAiB,CACf,QAAW,EACX,QAAW,GAEb,IAAO,CACL,QAAW,EACX,QAAW,GAEb,WAAc,CACZ,QAAW,EACX,QAAW,GAEb,QAAW,CACT,QAAW,EACX,QAAW,GAEb,gBAAmB,CACjB,QAAW,EACX,QAAW,GAEb,UAAa,CACX,QAAW,EACX,QAAW,GAEb,UAAa,CACX,QAAW,EACX,QAAW,GAEb,KAAQ,CACN,QAAW,EACX,QAAW,GAEb,MAAS,CACP,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,UAAa,CACX,QAAW,EACX,QAAW,GAEb,YAAe,CACb,QAAW,EACX,QAAW,GAEb,QAAW,CACT,QAAW,EACX,QAAW,GAEb,gBAAmB,CACjB,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,IAGf,SAAY,CACV,IAAO,CACL,QAAW,EACX,QAAW,IAGf,cAAiB,CACf,aAAgB,CACd,QAAW,EACX,QAAW,GAEb,SAAY,CACV,QAAW,EACX,QAAW,IAGf,WAAc,CACZ,uBAA0B,CACxB,QAAW,EACX,QAAW,IAGf,QAAW,CACT,OAAU,CACR,QAAW,EACX,QAAW,GAEb,IAAO,CACL,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,WAAc,CACZ,QAAW,EACX,QAAW,GAEb,eAAkB,CAChB,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,KAKjB,GAAwC,IAApCtD,OAAOuD,KAAKD,GAAaE,OAC3B,MAAM,IAAIC,MAAM,+DAalB,MAAMC,UAAuBC,QAC3B,YAAYC,EAAYC,GACtBC,MAAMD,GACNE,KAAKH,WAAaA,EAGpB,IAAI/C,GAKF,OAJKkD,KAAKC,IAAInD,IACZkD,KAAKE,IAAIpD,EAAKkD,KAAKH,WAAW/C,IAGzBiD,MAAM3D,IAAIU,IAWrB,MA+BMqD,EAAe,CAACC,EAASC,IACtB,IAAIC,KACLC,OAAOnC,QAAQoC,UACjBJ,EAAQK,OAAOF,OAAOnC,QAAQoC,WACrBH,EAASK,mBAAqBJ,EAAab,QAAU,EAC9DW,EAAQO,QAAQL,EAAa,IAE7BF,EAAQO,QAAQL,IAKhBM,EAAqBC,GAAsB,GAAXA,EAAe,WAAa,YAkF5DC,EAAa,CAACC,EAAQC,EAAQC,IAC3B,IAAIC,MAAMF,EAAQ,CACvBG,MAAK,CAACC,EAAcC,EAASC,IACpBL,EAAQvF,KAAK2F,EAASN,KAAWO,KAK9C,IAAIlE,EAAiBmE,SAAS7F,KAAKqB,KAAKd,OAAOkB,UAAUC,gBAyBzD,MAAMoE,EAAa,CAACT,EAAQU,EAAW,GAAIpB,EAAW,MACpD,IAAIqB,EAAQzF,OAAOY,OAAO,MACtB8E,EAAW,CACb1B,IAAG,CAAC2B,EAAaC,IACRA,KAAQd,GAAUc,KAAQH,EAGnC,IAAIE,EAAaC,EAAMC,GACrB,GAAID,KAAQH,EACV,OAAOA,EAAMG,GAGf,KAAMA,KAAQd,GACZ,OAGF,IAAIvE,EAAQuE,EAAOc,GAEnB,GAAqB,mBAAVrF,EAIT,GAA8B,mBAAnBiF,EAASI,GAElBrF,EAAQsE,EAAWC,EAAQA,EAAOc,GAAOJ,EAASI,SAC7C,GAAIzE,EAAeiD,EAAUwB,GAAO,CAGzC,IAAIZ,EAvHY,EAACnF,EAAMuE,IACxB,SAA8BU,KAAWO,GAC9C,GAAIA,EAAK7B,OAASY,EAAS0B,QACzB,MAAM,IAAIrC,MAAM,qBAAqBW,EAAS0B,WAAWnB,EAAmBP,EAAS0B,gBAAgBjG,YAAewF,EAAK7B,UAG3H,GAAI6B,EAAK7B,OAASY,EAAS2B,QACzB,MAAM,IAAItC,MAAM,oBAAoBW,EAAS2B,WAAWpB,EAAmBP,EAAS2B,gBAAgBlG,YAAewF,EAAK7B,UAG1H,OAAO,IAAIwC,QAAQ,CAACtB,EAASF,KAC3B,GAAIJ,EAAS6B,qBAIX,IACEnB,EAAOjF,MAASwF,EAAMnB,EAAa,CAAEQ,UAASF,UAAUJ,IACxD,MAAO8B,GACPC,QAAQC,KAAQvG,EAAH,2GAAwHqG,GAErIpB,EAAOjF,MAASwF,GAIhBjB,EAAS6B,sBAAuB,EAChC7B,EAASiC,YAAa,EAEtB3B,SAEON,EAASiC,YAClBvB,EAAOjF,MAASwF,GAChBX,KAEAI,EAAOjF,MAASwF,EAAMnB,EAAa,CAAEQ,UAASF,UAAUJ,OAsFxCkC,CAAkBV,EAAMxB,EAASwB,IAC/CrF,EAAQsE,EAAWC,EAAQA,EAAOc,GAAOZ,QAIzCzE,EAAQA,EAAMO,KAAKgE,OAEhB,IAAqB,iBAAVvE,GAAgC,OAAVA,IAAmBY,EAAeqE,EAAUI,KAASzE,EAAeiD,EAAUwB,GAmBpH,OAXA5F,OAAOC,eAAewF,EAAOG,EAAM,CACjCW,cAAc,EACdrG,YAAY,EACZC,IAAG,IACM2E,EAAOc,GAEhB,IAAIrF,GACFuE,EAAOc,GAAQrF,KAIZA,EAfPA,EAAQgF,EAAWhF,EAAOiF,EAASI,GAAOxB,EAASwB,IAmBrD,OADAH,EAAMG,GAAQrF,EACPA,GAGT0D,IAAG,CAAC0B,EAAaC,EAAMrF,EAAOsF,KACxBD,KAAQH,EACVA,EAAMG,GAAQrF,EAEduE,EAAOc,GAAQrF,GAEV,GAGTN,eAAc,CAAC0F,EAAaC,EAAMY,IACzBC,QAAQxG,eAAewF,EAAOG,EAAMY,GAG7CE,eAAc,CAACf,EAAaC,IACnBa,QAAQC,eAAejB,EAAOG,IAcrCD,EAAc3F,OAAOY,OAAOkE,GAChC,OAAO,IAAIG,MAAMU,EAAaD,IAmB1BiB,EAAYC,IAAc,CAC9B,YAAY9B,EAAQ+B,KAAaxB,GAC/BP,EAAOzC,YAAYuE,EAAWzG,IAAI0G,MAAcxB,IAGlDyB,YAAW,CAAChC,EAAQ+B,IACX/B,EAAOgC,YAAYF,EAAWzG,IAAI0G,IAG3C,eAAe/B,EAAQ+B,GACrB/B,EAAOiC,eAAeH,EAAWzG,IAAI0G,OAKzC,IAAIG,GAAuC,EAE3C,MAAMC,EAAoB,IAAIvD,EAAemD,GACnB,mBAAbA,EACFA,EAoBF,SAAmBvE,EAAS4E,EAAQC,GACzC,IAEIC,EAYAC,EAdAC,GAAsB,EAGtBC,EAAsB,IAAIvB,QAAQtB,IACpC0C,EAAsB,SAAUI,GACzBR,IACHb,QAAQC,KAAKhD,GAAmC,IAAIK,OAAQgE,OAC5DT,GAAuC,GAEzCM,GAAsB,EACtB5C,EAAQ8C,MAKZ,IACEH,EAASR,EAASvE,EAAS4E,EAAQE,GACnC,MAAOM,GACPL,EAASrB,QAAQxB,OAAOkD,GAG1B,MAAMC,GAA8B,IAAXN,IAxUV9G,EAwUwC8G,IAvUxB,iBAAV9G,GAA4C,mBAAfA,EAAMqH,KADzCrH,MA6Uf,IAAe,IAAX8G,IAAoBM,IAAqBL,EAC3C,OAAO,EAOT,MAAMO,EAAqB1D,IACzBA,EAAQyD,KAAKE,IAEXX,EAAaW,IACZC,IAGD,IAAIzF,EAEFA,EADEyF,IAAUA,aAAiBtE,OAAkC,iBAAlBsE,EAAMzF,SACzCyF,EAAMzF,QAEN,+BAGZ6E,EAAa,CACXa,mCAAmC,EACnC1F,cAED2F,MAAMP,IAEPvB,QAAQ4B,MAAM,0CAA2CL,MAc7D,OANEG,EADEF,EACiBN,EAEAE,IAId,IAILW,EAA6B,EAAG1D,SAAQE,WAAWyD,KACnD7D,OAAOnC,QAAQoC,UAIbD,OAAOnC,QAAQoC,UAAUjC,UAAYa,EACvCuB,IAEAF,EAAOF,OAAOnC,QAAQoC,WAEf4D,GAASA,EAAMH,kCAGxBxD,EAAO,IAAIf,MAAM0E,EAAM7F,UAEvBoC,EAAQyD,IAINC,EAAqB,CAACvI,EAAMuE,EAAUiE,KAAoBhD,KAC9D,GAAIA,EAAK7B,OAASY,EAAS0B,QACzB,MAAM,IAAIrC,MAAM,qBAAqBW,EAAS0B,WAAWnB,EAAmBP,EAAS0B,gBAAgBjG,YAAewF,EAAK7B,UAG3H,GAAI6B,EAAK7B,OAASY,EAAS2B,QACzB,MAAM,IAAItC,MAAM,oBAAoBW,EAAS2B,WAAWpB,EAAmBP,EAAS2B,gBAAgBlG,YAAewF,EAAK7B,UAG1H,OAAO,IAAIwC,QAAQ,CAACtB,EAASF,KAC3B,MAAM8D,EAAYJ,EAA2BpH,KAAK,KAAM,CAAE4D,UAASF,WACnEa,EAAKkD,KAAKD,GACVD,EAAgBpF,eAAeoC,MAI7BmD,EAAiB,CACrBrG,QAAS,CACPC,UAAWuE,EAAUM,GACrBwB,kBAAmB9B,EAAUM,GAC7BhE,YAAamF,EAAmBtH,KAAK,KAAM,cAAe,CAAEgF,QAAS,EAAGC,QAAS,KAEnF2C,KAAM,CACJzF,YAAamF,EAAmBtH,KAAK,KAAM,cAAe,CAAEgF,QAAS,EAAGC,QAAS,MAG/E4C,EAAkB,CACtBC,MAAO,CAAE9C,QAAS,EAAGC,QAAS,GAC9B5F,IAAK,CAAE2F,QAAS,EAAGC,QAAS,GAC5B9B,IAAK,CAAE6B,QAAS,EAAGC,QAAS,IAgB9B,OAdAzC,EAAYuF,QAAU,CACpBC,QAAS,CACPC,yBAA0BJ,EAC1BK,uBAAwBL,GAE1BM,SAAU,CACRC,sBAAuBP,GAEzBQ,SAAU,CACRC,yBAA0BT,EAC1BU,iBAAkBV,IAIfpD,EAAWjB,OAAQkE,EAAgBlF,IAK5CjE,EAAOD,QAAUiE,SAEjBhE,EAAOD,QAAUkC,UA5pCkC","file":"content.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 249);\n","const browser = require('webextension-polyfill')\n\n// injecting the script\n\nconst content = browser.extension.getURL('injected.js')\nconst script = document.createElement('script')\nscript.setAttribute('defer', 'defer')\nscript.setAttribute('type', 'text/javascript')\nscript.setAttribute('src', content)\n// document.body.appendChild(script)\ndocument.documentElement.appendChild(script)\nscript.parentNode.removeChild(script)\n\n// content script logic\n\nbrowser.runtime.onMessage.addListener(messageFromBackground)\n\nfunction messageFromBackground (message) {\n if (message.to === 'injected') {\n // proxy message to injected\n postMessage({\n from: 'content',\n proxyFrom: message.from,\n to: message.to,\n action: message.action,\n payload: message.payload || {}\n }, '*')\n }\n}\n\n// listen to messages from injected script\nwindow.addEventListener('message', function (event) {\n if (event.data.from === 'injected') {\n if (event.data.action) {\n browser.runtime.sendMessage({\n from: 'content',\n proxyFrom: event.data.from,\n to: event.data.to,\n action: event.data.action,\n payload: event.data.payload\n })\n }\n } else if (event.data.from === 'popup') {\n // console.log('message from popup', event.data)\n } else if (event.data.from !== 'content') {\n // console.log('some other message', event.data)\n }\n})\n","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(\"webextension-polyfill\", [\"module\"], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module);\n } else {\n var mod = {\n exports: {}\n };\n factory(mod);\n global.browser = mod.exports;\n }\n})(this, function (module) {\n /* webextension-polyfill - v0.3.1 - Tue Aug 21 2018 10:09:34 */\n /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */\n /* vim: set sts=2 sw=2 et tw=80: */\n /* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n \"use strict\";\n\n if (typeof browser === \"undefined\" || Object.getPrototypeOf(browser) !== Object.prototype) {\n const CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE = \"The message port closed before a response was received.\";\n const SEND_RESPONSE_DEPRECATION_WARNING = \"Returning a Promise is the preferred way to send a reply from an onMessage/onMessageExternal listener, as the sendResponse will be removed from the specs (See https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage)\";\n\n // Wrapping the bulk of this polyfill in a one-time-use function is a minor\n // optimization for Firefox. Since Spidermonkey does not fully parse the\n // contents of a function until the first time it's called, and since it will\n // never actually need to be called, this allows the polyfill to be included\n // in Firefox nearly for free.\n const wrapAPIs = () => {\n // NOTE: apiMetadata is associated to the content of the api-metadata.json file\n // at build time by replacing the following \"include\" with the content of the\n // JSON file.\n const apiMetadata = {\n \"alarms\": {\n \"clear\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"clearAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"get\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"bookmarks\": {\n \"create\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"get\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getChildren\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getRecent\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getSubTree\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getTree\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"move\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeTree\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"search\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"update\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n }\n },\n \"browserAction\": {\n \"disable\": {\n \"minArgs\": 0,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"enable\": {\n \"minArgs\": 0,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"getBadgeBackgroundColor\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getBadgeText\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getPopup\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getTitle\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"openPopup\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"setBadgeBackgroundColor\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"setBadgeText\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"setIcon\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"setPopup\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"setTitle\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n }\n },\n \"browsingData\": {\n \"remove\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n },\n \"removeCache\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeCookies\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeDownloads\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeFormData\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeHistory\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeLocalStorage\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removePasswords\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removePluginData\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"settings\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"commands\": {\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"contextMenus\": {\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"update\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n }\n },\n \"cookies\": {\n \"get\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getAll\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getAllCookieStores\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"set\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"devtools\": {\n \"inspectedWindow\": {\n \"eval\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n }\n },\n \"panels\": {\n \"create\": {\n \"minArgs\": 3,\n \"maxArgs\": 3,\n \"singleCallbackArg\": true\n }\n }\n },\n \"downloads\": {\n \"cancel\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"download\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"erase\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getFileIcon\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"open\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"pause\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeFile\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"resume\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"search\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"show\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n }\n },\n \"extension\": {\n \"isAllowedFileSchemeAccess\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"isAllowedIncognitoAccess\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"history\": {\n \"addUrl\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"deleteAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"deleteRange\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"deleteUrl\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getVisits\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"search\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"i18n\": {\n \"detectLanguage\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getAcceptLanguages\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"identity\": {\n \"launchWebAuthFlow\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"idle\": {\n \"queryState\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"management\": {\n \"get\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"getSelf\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"setEnabled\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n },\n \"uninstallSelf\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n }\n },\n \"notifications\": {\n \"clear\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"create\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"getPermissionLevel\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"update\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n }\n },\n \"pageAction\": {\n \"getPopup\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getTitle\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"hide\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"setIcon\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"setPopup\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"setTitle\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"show\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n }\n },\n \"permissions\": {\n \"contains\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"request\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"runtime\": {\n \"getBackgroundPage\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"getBrowserInfo\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"getPlatformInfo\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"openOptionsPage\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"requestUpdateCheck\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"sendMessage\": {\n \"minArgs\": 1,\n \"maxArgs\": 3\n },\n \"sendNativeMessage\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n },\n \"setUninstallURL\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"sessions\": {\n \"getDevices\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getRecentlyClosed\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"restore\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n }\n },\n \"storage\": {\n \"local\": {\n \"clear\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"get\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getBytesInUse\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"set\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"managed\": {\n \"get\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getBytesInUse\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n }\n },\n \"sync\": {\n \"clear\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"get\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getBytesInUse\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"set\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n }\n },\n \"tabs\": {\n \"captureVisibleTab\": {\n \"minArgs\": 0,\n \"maxArgs\": 2\n },\n \"create\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"detectLanguage\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"discard\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"duplicate\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"executeScript\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"get\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getCurrent\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"getZoom\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getZoomSettings\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"highlight\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"insertCSS\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"move\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n },\n \"query\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"reload\": {\n \"minArgs\": 0,\n \"maxArgs\": 2\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeCSS\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"sendMessage\": {\n \"minArgs\": 2,\n \"maxArgs\": 3\n },\n \"setZoom\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"setZoomSettings\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"update\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n }\n },\n \"topSites\": {\n \"get\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"webNavigation\": {\n \"getAllFrames\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getFrame\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"webRequest\": {\n \"handlerBehaviorChanged\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"windows\": {\n \"create\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"get\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getCurrent\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getLastFocused\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"update\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n }\n }\n };\n\n if (Object.keys(apiMetadata).length === 0) {\n throw new Error(\"api-metadata.json has not been included in browser-polyfill\");\n }\n\n /**\n * A WeakMap subclass which creates and stores a value for any key which does\n * not exist when accessed, but behaves exactly as an ordinary WeakMap\n * otherwise.\n *\n * @param {function} createItem\n * A function which will be called in order to create the value for any\n * key which does not exist, the first time it is accessed. The\n * function receives, as its only argument, the key being created.\n */\n class DefaultWeakMap extends WeakMap {\n constructor(createItem, items = undefined) {\n super(items);\n this.createItem = createItem;\n }\n\n get(key) {\n if (!this.has(key)) {\n this.set(key, this.createItem(key));\n }\n\n return super.get(key);\n }\n }\n\n /**\n * Returns true if the given object is an object with a `then` method, and can\n * therefore be assumed to behave as a Promise.\n *\n * @param {*} value The value to test.\n * @returns {boolean} True if the value is thenable.\n */\n const isThenable = value => {\n return value && typeof value === \"object\" && typeof value.then === \"function\";\n };\n\n /**\n * Creates and returns a function which, when called, will resolve or reject\n * the given promise based on how it is called:\n *\n * - If, when called, `chrome.runtime.lastError` contains a non-null object,\n * the promise is rejected with that value.\n * - If the function is called with exactly one argument, the promise is\n * resolved to that value.\n * - Otherwise, the promise is resolved to an array containing all of the\n * function's arguments.\n *\n * @param {object} promise\n * An object containing the resolution and rejection functions of a\n * promise.\n * @param {function} promise.resolve\n * The promise's resolution function.\n * @param {function} promise.rejection\n * The promise's rejection function.\n * @param {object} metadata\n * Metadata about the wrapped method which has created the callback.\n * @param {integer} metadata.maxResolvedArgs\n * The maximum number of arguments which may be passed to the\n * callback created by the wrapped async function.\n *\n * @returns {function}\n * The generated callback function.\n */\n const makeCallback = (promise, metadata) => {\n return (...callbackArgs) => {\n if (chrome.runtime.lastError) {\n promise.reject(chrome.runtime.lastError);\n } else if (metadata.singleCallbackArg || callbackArgs.length <= 1) {\n promise.resolve(callbackArgs[0]);\n } else {\n promise.resolve(callbackArgs);\n }\n };\n };\n\n const pluralizeArguments = numArgs => numArgs == 1 ? \"argument\" : \"arguments\";\n\n /**\n * Creates a wrapper function for a method with the given name and metadata.\n *\n * @param {string} name\n * The name of the method which is being wrapped.\n * @param {object} metadata\n * Metadata about the method being wrapped.\n * @param {integer} metadata.minArgs\n * The minimum number of arguments which must be passed to the\n * function. If called with fewer than this number of arguments, the\n * wrapper will raise an exception.\n * @param {integer} metadata.maxArgs\n * The maximum number of arguments which may be passed to the\n * function. If called with more than this number of arguments, the\n * wrapper will raise an exception.\n * @param {integer} metadata.maxResolvedArgs\n * The maximum number of arguments which may be passed to the\n * callback created by the wrapped async function.\n *\n * @returns {function(object, ...*)}\n * The generated wrapper function.\n */\n const wrapAsyncFunction = (name, metadata) => {\n return function asyncFunctionWrapper(target, ...args) {\n if (args.length < metadata.minArgs) {\n throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`);\n }\n\n if (args.length > metadata.maxArgs) {\n throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`);\n }\n\n return new Promise((resolve, reject) => {\n if (metadata.fallbackToNoCallback) {\n // This API method has currently no callback on Chrome, but it return a promise on Firefox,\n // and so the polyfill will try to call it with a callback first, and it will fallback\n // to not passing the callback if the first call fails.\n try {\n target[name](...args, makeCallback({ resolve, reject }, metadata));\n } catch (cbError) {\n console.warn(`${name} API method doesn't seem to support the callback parameter, ` + \"falling back to call it without a callback: \", cbError);\n\n target[name](...args);\n\n // Update the API method metadata, so that the next API calls will not try to\n // use the unsupported callback anymore.\n metadata.fallbackToNoCallback = false;\n metadata.noCallback = true;\n\n resolve();\n }\n } else if (metadata.noCallback) {\n target[name](...args);\n resolve();\n } else {\n target[name](...args, makeCallback({ resolve, reject }, metadata));\n }\n });\n };\n };\n\n /**\n * Wraps an existing method of the target object, so that calls to it are\n * intercepted by the given wrapper function. The wrapper function receives,\n * as its first argument, the original `target` object, followed by each of\n * the arguments passed to the original method.\n *\n * @param {object} target\n * The original target object that the wrapped method belongs to.\n * @param {function} method\n * The method being wrapped. This is used as the target of the Proxy\n * object which is created to wrap the method.\n * @param {function} wrapper\n * The wrapper function which is called in place of a direct invocation\n * of the wrapped method.\n *\n * @returns {Proxy<function>}\n * A Proxy object for the given method, which invokes the given wrapper\n * method in its place.\n */\n const wrapMethod = (target, method, wrapper) => {\n return new Proxy(method, {\n apply(targetMethod, thisObj, args) {\n return wrapper.call(thisObj, target, ...args);\n }\n });\n };\n\n let hasOwnProperty = Function.call.bind(Object.prototype.hasOwnProperty);\n\n /**\n * Wraps an object in a Proxy which intercepts and wraps certain methods\n * based on the given `wrappers` and `metadata` objects.\n *\n * @param {object} target\n * The target object to wrap.\n *\n * @param {object} [wrappers = {}]\n * An object tree containing wrapper functions for special cases. Any\n * function present in this object tree is called in place of the\n * method in the same location in the `target` object tree. These\n * wrapper methods are invoked as described in {@see wrapMethod}.\n *\n * @param {object} [metadata = {}]\n * An object tree containing metadata used to automatically generate\n * Promise-based wrapper functions for asynchronous. Any function in\n * the `target` object tree which has a corresponding metadata object\n * in the same location in the `metadata` tree is replaced with an\n * automatically-generated wrapper function, as described in\n * {@see wrapAsyncFunction}\n *\n * @returns {Proxy<object>}\n */\n const wrapObject = (target, wrappers = {}, metadata = {}) => {\n let cache = Object.create(null);\n let handlers = {\n has(proxyTarget, prop) {\n return prop in target || prop in cache;\n },\n\n get(proxyTarget, prop, receiver) {\n if (prop in cache) {\n return cache[prop];\n }\n\n if (!(prop in target)) {\n return undefined;\n }\n\n let value = target[prop];\n\n if (typeof value === \"function\") {\n // This is a method on the underlying object. Check if we need to do\n // any wrapping.\n\n if (typeof wrappers[prop] === \"function\") {\n // We have a special-case wrapper for this method.\n value = wrapMethod(target, target[prop], wrappers[prop]);\n } else if (hasOwnProperty(metadata, prop)) {\n // This is an async method that we have metadata for. Create a\n // Promise wrapper for it.\n let wrapper = wrapAsyncFunction(prop, metadata[prop]);\n value = wrapMethod(target, target[prop], wrapper);\n } else {\n // This is a method that we don't know or care about. Return the\n // original method, bound to the underlying object.\n value = value.bind(target);\n }\n } else if (typeof value === \"object\" && value !== null && (hasOwnProperty(wrappers, prop) || hasOwnProperty(metadata, prop))) {\n // This is an object that we need to do some wrapping for the children\n // of. Create a sub-object wrapper for it with the appropriate child\n // metadata.\n value = wrapObject(value, wrappers[prop], metadata[prop]);\n } else {\n // We don't need to do any wrapping for this property,\n // so just forward all access to the underlying object.\n Object.defineProperty(cache, prop, {\n configurable: true,\n enumerable: true,\n get() {\n return target[prop];\n },\n set(value) {\n target[prop] = value;\n }\n });\n\n return value;\n }\n\n cache[prop] = value;\n return value;\n },\n\n set(proxyTarget, prop, value, receiver) {\n if (prop in cache) {\n cache[prop] = value;\n } else {\n target[prop] = value;\n }\n return true;\n },\n\n defineProperty(proxyTarget, prop, desc) {\n return Reflect.defineProperty(cache, prop, desc);\n },\n\n deleteProperty(proxyTarget, prop) {\n return Reflect.deleteProperty(cache, prop);\n }\n };\n\n // Per contract of the Proxy API, the \"get\" proxy handler must return the\n // original value of the target if that value is declared read-only and\n // non-configurable. For this reason, we create an object with the\n // prototype set to `target` instead of using `target` directly.\n // Otherwise we cannot return a custom object for APIs that\n // are declared read-only and non-configurable, such as `chrome.devtools`.\n //\n // The proxy handlers themselves will still use the original `target`\n // instead of the `proxyTarget`, so that the methods and properties are\n // dereferenced via the original targets.\n let proxyTarget = Object.create(target);\n return new Proxy(proxyTarget, handlers);\n };\n\n /**\n * Creates a set of wrapper functions for an event object, which handles\n * wrapping of listener functions that those messages are passed.\n *\n * A single wrapper is created for each listener function, and stored in a\n * map. Subsequent calls to `addListener`, `hasListener`, or `removeListener`\n * retrieve the original wrapper, so that attempts to remove a\n * previously-added listener work as expected.\n *\n * @param {DefaultWeakMap<function, function>} wrapperMap\n * A DefaultWeakMap object which will create the appropriate wrapper\n * for a given listener function when one does not exist, and retrieve\n * an existing one when it does.\n *\n * @returns {object}\n */\n const wrapEvent = wrapperMap => ({\n addListener(target, listener, ...args) {\n target.addListener(wrapperMap.get(listener), ...args);\n },\n\n hasListener(target, listener) {\n return target.hasListener(wrapperMap.get(listener));\n },\n\n removeListener(target, listener) {\n target.removeListener(wrapperMap.get(listener));\n }\n });\n\n // Keep track if the deprecation warning has been logged at least once.\n let loggedSendResponseDeprecationWarning = false;\n\n const onMessageWrappers = new DefaultWeakMap(listener => {\n if (typeof listener !== \"function\") {\n return listener;\n }\n\n /**\n * Wraps a message listener function so that it may send responses based on\n * its return value, rather than by returning a sentinel value and calling a\n * callback. If the listener function returns a Promise, the response is\n * sent when the promise either resolves or rejects.\n *\n * @param {*} message\n * The message sent by the other end of the channel.\n * @param {object} sender\n * Details about the sender of the message.\n * @param {function(*)} sendResponse\n * A callback which, when called with an arbitrary argument, sends\n * that value as a response.\n * @returns {boolean}\n * True if the wrapped listener returned a Promise, which will later\n * yield a response. False otherwise.\n */\n return function onMessage(message, sender, sendResponse) {\n let didCallSendResponse = false;\n\n let wrappedSendResponse;\n let sendResponsePromise = new Promise(resolve => {\n wrappedSendResponse = function (response) {\n if (!loggedSendResponseDeprecationWarning) {\n console.warn(SEND_RESPONSE_DEPRECATION_WARNING, new Error().stack);\n loggedSendResponseDeprecationWarning = true;\n }\n didCallSendResponse = true;\n resolve(response);\n };\n });\n\n let result;\n try {\n result = listener(message, sender, wrappedSendResponse);\n } catch (err) {\n result = Promise.reject(err);\n }\n\n const isResultThenable = result !== true && isThenable(result);\n\n // If the listener didn't returned true or a Promise, or called\n // wrappedSendResponse synchronously, we can exit earlier\n // because there will be no response sent from this listener.\n if (result !== true && !isResultThenable && !didCallSendResponse) {\n return false;\n }\n\n // A small helper to send the message if the promise resolves\n // and an error if the promise rejects (a wrapped sendMessage has\n // to translate the message into a resolved promise or a rejected\n // promise).\n const sendPromisedResult = promise => {\n promise.then(msg => {\n // send the message value.\n sendResponse(msg);\n }, error => {\n // Send a JSON representation of the error if the rejected value\n // is an instance of error, or the object itself otherwise.\n let message;\n if (error && (error instanceof Error || typeof error.message === \"string\")) {\n message = error.message;\n } else {\n message = \"An unexpected error occurred\";\n }\n\n sendResponse({\n __mozWebExtensionPolyfillReject__: true,\n message\n });\n }).catch(err => {\n // Print an error on the console if unable to send the response.\n console.error(\"Failed to send onMessage rejected reply\", err);\n });\n };\n\n // If the listener returned a Promise, send the resolved value as a\n // result, otherwise wait the promise related to the wrappedSendResponse\n // callback to resolve and send it as a response.\n if (isResultThenable) {\n sendPromisedResult(result);\n } else {\n sendPromisedResult(sendResponsePromise);\n }\n\n // Let Chrome know that the listener is replying.\n return true;\n };\n });\n\n const wrappedSendMessageCallback = ({ reject, resolve }, reply) => {\n if (chrome.runtime.lastError) {\n // Detect when none of the listeners replied to the sendMessage call and resolve\n // the promise to undefined as in Firefox.\n // See https://github.com/mozilla/webextension-polyfill/issues/130\n if (chrome.runtime.lastError.message === CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE) {\n resolve();\n } else {\n reject(chrome.runtime.lastError);\n }\n } else if (reply && reply.__mozWebExtensionPolyfillReject__) {\n // Convert back the JSON representation of the error into\n // an Error instance.\n reject(new Error(reply.message));\n } else {\n resolve(reply);\n }\n };\n\n const wrappedSendMessage = (name, metadata, apiNamespaceObj, ...args) => {\n if (args.length < metadata.minArgs) {\n throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`);\n }\n\n if (args.length > metadata.maxArgs) {\n throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`);\n }\n\n return new Promise((resolve, reject) => {\n const wrappedCb = wrappedSendMessageCallback.bind(null, { resolve, reject });\n args.push(wrappedCb);\n apiNamespaceObj.sendMessage(...args);\n });\n };\n\n const staticWrappers = {\n runtime: {\n onMessage: wrapEvent(onMessageWrappers),\n onMessageExternal: wrapEvent(onMessageWrappers),\n sendMessage: wrappedSendMessage.bind(null, \"sendMessage\", { minArgs: 1, maxArgs: 3 })\n },\n tabs: {\n sendMessage: wrappedSendMessage.bind(null, \"sendMessage\", { minArgs: 2, maxArgs: 3 })\n }\n };\n const settingMetadata = {\n clear: { minArgs: 1, maxArgs: 1 },\n get: { minArgs: 1, maxArgs: 1 },\n set: { minArgs: 1, maxArgs: 1 }\n };\n apiMetadata.privacy = {\n network: {\n networkPredictionEnabled: settingMetadata,\n webRTCIPHandlingPolicy: settingMetadata\n },\n services: {\n passwordSavingEnabled: settingMetadata\n },\n websites: {\n hyperlinkAuditingEnabled: settingMetadata,\n referrersEnabled: settingMetadata\n }\n };\n\n return wrapObject(chrome, staticWrappers, apiMetadata);\n };\n\n // The build process adds a UMD wrapper around this file, which makes the\n // `module` variable available.\n module.exports = wrapAPIs(); // eslint-disable-line no-undef\n } else {\n module.exports = browser; // eslint-disable-line no-undef\n }\n});\n//# sourceMappingURL=browser-polyfill.js.map\n"],"sourceRoot":""} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict' | |
/* eslint-env browser */ | |
/* globals chrome, Wappalyzer, Utils */ | |
const { | |
setTechnologies, | |
setCategories, | |
analyze, | |
analyzeManyToMany, | |
resolve, | |
getTechnology, | |
} = Wappalyzer | |
const { agent, promisify, getOption, setOption, open, globEscape } = Utils | |
const expiry = 1000 * 60 * 60 * 24 | |
const hostnameIgnoreList = | |
/\b((local|dev(elop(ment)?)?|sandbox|stag(e|ing)?|preprod|production|preview|test(ing)?|[^a-z]demo(shop)?|cache)[.-]|dev\d|localhost|((wappalyzer|google|bing|baidu|microsoft|duckduckgo|facebook|adobe|twitter|reddit|yahoo|wikipedia|amazon|amazonaws|youtube|stackoverflow|github|stackexchange|w3schools|twitch)\.)|(live|office|herokuapp|shopifypreview)\.com|\.local|\.test|\.netlify\.app|web\.archive\.org|zoom\.us|^([0-9.]+|[\d.]+)$|^([a-f0-9:]+:+)+[a-f0-9]+$)/ | |
const xhrDebounce = [] | |
let xhrAnalyzed = {} | |
const scriptsPending = [] | |
function getRequiredTechnologies(name, categoryId) { | |
return name | |
? Wappalyzer.requires.find(({ name: _name }) => _name === name).technologies | |
: categoryId | |
? Wappalyzer.categoryRequires.find( | |
({ categoryId: _categoryId }) => _categoryId === categoryId | |
).technologies | |
: undefined | |
} | |
const Driver = { | |
lastPing: Date.now(), | |
/** | |
* Initialise driver | |
*/ | |
async init() { | |
await Driver.loadTechnologies() | |
const hostnameCache = await getOption('hostnames', {}) | |
Driver.cache = { | |
hostnames: Object.keys(hostnameCache).reduce( | |
(cache, hostname) => ({ | |
...cache, | |
[hostname]: { | |
...hostnameCache[hostname], | |
detections: hostnameCache[hostname].detections.map( | |
({ | |
technology: name, | |
pattern: { regex, confidence }, | |
version, | |
}) => ({ | |
technology: getTechnology(name, true), | |
pattern: { | |
regex: new RegExp(regex, 'i'), | |
confidence, | |
}, | |
version, | |
}) | |
), | |
}, | |
}), | |
{} | |
), | |
tabs: {}, | |
robots: await getOption('robots', {}), | |
ads: [], | |
} | |
chrome.browserAction.setBadgeBackgroundColor({ color: '#6B39BD' }, () => {}) | |
chrome.webRequest.onCompleted.addListener( | |
Driver.onWebRequestComplete, | |
{ urls: ['http://*/*', 'https://*/*'], types: ['main_frame'] }, | |
['responseHeaders'] | |
) | |
chrome.webRequest.onCompleted.addListener(Driver.onScriptRequestComplete, { | |
urls: ['http://*/*', 'https://*/*'], | |
types: ['script'], | |
}) | |
chrome.webRequest.onCompleted.addListener(Driver.onXhrRequestComplete, { | |
urls: ['http://*/*', 'https://*/*'], | |
types: ['xmlhttprequest'], | |
}) | |
chrome.tabs.onRemoved.addListener((id) => delete Driver.cache.tabs[id]) | |
chrome.tabs.onUpdated.addListener(async (id, { status, url }) => { | |
if (status === 'complete') { | |
;({ url } = await promisify(chrome.tabs, 'get', id)) | |
} | |
if (url) { | |
const { hostname } = new URL(url) | |
const cache = Driver.cache.hostnames[hostname] | |
Driver.cache.tabs[id] = cache ? resolve(cache.detections) : [] | |
await Driver.setIcon(url, Driver.cache.tabs[id]) | |
} | |
}) | |
// Enable messaging between scripts | |
chrome.runtime.onMessage.addListener(Driver.onMessage) | |
const { version } = chrome.runtime.getManifest() | |
const previous = await getOption('version') | |
const upgradeMessage = await getOption('upgradeMessage', true) | |
if (previous === null) { | |
open( | |
'https://www.wappalyzer.com/installed/?utm_source=installed&utm_medium=extension&utm_campaign=wappalyzer' | |
) | |
} else if (version !== previous && upgradeMessage) { | |
open( | |
`https://www.wappalyzer.com/upgraded/?utm_source=upgraded&utm_medium=extension&utm_campaign=wappalyzer`, | |
false | |
) | |
} | |
await setOption('version', version) | |
}, | |
/** | |
* Log debug messages to the console | |
* @param {String} message | |
* @param {String} source | |
* @param {String} type | |
*/ | |
log(message, source = 'driver', type = 'log') { | |
// eslint-disable-next-line no-console | |
console[type](message) | |
}, | |
/** | |
* Log errors to the console | |
* @param {String} error | |
* @param {String} source | |
*/ | |
error(error, source = 'driver') { | |
Driver.log(error, source, 'error') | |
}, | |
/** | |
* Load technologies and categories into memory | |
*/ | |
async loadTechnologies() { | |
try { | |
const categories = await ( | |
await fetch(chrome.runtime.getURL('categories.json')) | |
).json() | |
let technologies = {} | |
for (const index of Array(27).keys()) { | |
const character = index ? String.fromCharCode(index + 96) : '_' | |
technologies = { | |
...technologies, | |
...(await ( | |
await fetch(chrome.runtime.getURL(`technologies/${character}.json`)) | |
).json()), | |
} | |
} | |
setTechnologies(technologies) | |
setCategories(categories) | |
} catch (error) { | |
Driver.error(error) | |
} | |
}, | |
/** | |
* Get all categories | |
*/ | |
getCategories() { | |
return Wappalyzer.categories | |
}, | |
/** | |
* Perform a HTTP POST request | |
* @param {String} url | |
* @param {String} body | |
*/ | |
post(url, body) { | |
try { | |
return fetch(url, { | |
method: 'POST', | |
body: JSON.stringify(body), | |
headers: { | |
'Content-Type': 'application/json', | |
}, | |
}) | |
} catch (error) { | |
throw new Error(error.message || error.toString()) | |
} | |
}, | |
/** | |
* Wrapper for analyze | |
*/ | |
analyze(...args) { | |
return analyze(...args) | |
}, | |
/** | |
* Analyse JavaScript variables | |
* @param {String} url | |
* @param {Array} js | |
*/ | |
analyzeJs(url, js, requires, categoryRequires) { | |
const technologies = | |
getRequiredTechnologies(requires, categoryRequires) || | |
Wappalyzer.technologies | |
return Driver.onDetect( | |
url, | |
js | |
.map(({ name, chain, value }) => { | |
return analyzeManyToMany( | |
technologies.find(({ name: _name }) => name === _name), | |
'js', | |
{ [chain]: [value] } | |
) | |
}) | |
.flat() | |
) | |
}, | |
/** | |
* Analyse DOM nodes | |
* @param {String} url | |
* @param {Array} dom | |
*/ | |
analyzeDom(url, dom, requires, categoryRequires) { | |
const technologies = | |
getRequiredTechnologies(requires, categoryRequires) || | |
Wappalyzer.technologies | |
return Driver.onDetect( | |
url, | |
dom | |
.map( | |
( | |
{ name, selector, exists, text, property, attribute, value }, | |
index | |
) => { | |
const technology = technologies.find( | |
({ name: _name }) => name === _name | |
) | |
if (typeof exists !== 'undefined') { | |
return analyzeManyToMany(technology, 'dom.exists', { | |
[selector]: [''], | |
}) | |
} | |
if (typeof text !== 'undefined') { | |
return analyzeManyToMany(technology, 'dom.text', { | |
[selector]: [text], | |
}) | |
} | |
if (typeof property !== 'undefined') { | |
return analyzeManyToMany( | |
technology, | |
`dom.properties.${property}`, | |
{ | |
[selector]: [value], | |
} | |
) | |
} | |
if (typeof attribute !== 'undefined') { | |
return analyzeManyToMany( | |
technology, | |
`dom.attributes.${attribute}`, | |
{ | |
[selector]: [value], | |
} | |
) | |
} | |
} | |
) | |
.flat() | |
) | |
}, | |
/** | |
* Force a technology detection by URL and technology name | |
* @param {String} url | |
* @param {String} name | |
*/ | |
detectTechnology(url, name) { | |
const technology = getTechnology(name) | |
return Driver.onDetect(url, [ | |
{ technology, pattern: { regex: '', confidence: 100 }, version: '' }, | |
]) | |
}, | |
/** | |
* Enable scripts to call Driver functions through messaging | |
* @param {Object} message | |
* @param {Object} sender | |
* @param {Function} callback | |
*/ | |
onMessage({ source, func, args }, sender, callback) { | |
if (!func) { | |
return | |
} | |
if (func !== 'log') { | |
Driver.log({ source, func, args }) | |
} | |
if (!Driver[func]) { | |
Driver.error(new Error(`Method does not exist: Driver.${func}`)) | |
return | |
} | |
Promise.resolve(Driver[func].call(Driver[func], ...(args || []))) | |
.then(callback) | |
.catch(Driver.error) | |
return !!callback | |
}, | |
async content(url, func, args) { | |
const [tab] = await promisify(chrome.tabs, 'query', { | |
url: globEscape(url), | |
}) | |
if (!tab) { | |
return | |
} | |
if (tab.status !== 'complete') { | |
throw new Error(`Tab ${tab.id} not ready for sendMessage: ${tab.status}`) | |
} | |
return new Promise((resolve, reject) => { | |
chrome.tabs.sendMessage( | |
tab.id, | |
{ | |
source: 'driver.js', | |
func, | |
args: args ? (Array.isArray(args) ? args : [args]) : [], | |
}, | |
(response) => { | |
chrome.runtime.lastError | |
? func === 'error' | |
? resolve() | |
: Driver.error( | |
new Error( | |
`${ | |
chrome.runtime.lastError.message | |
}: Driver.${func}(${JSON.stringify(args)})` | |
) | |
) | |
: resolve(response) | |
} | |
) | |
}) | |
}, | |
/** | |
* Analyse response headers | |
* @param {Object} request | |
*/ | |
async onWebRequestComplete(request) { | |
if (request.responseHeaders) { | |
if (await Driver.isDisabledDomain(request.url)) { | |
return | |
} | |
const headers = {} | |
try { | |
await new Promise((resolve) => setTimeout(resolve, 500)) | |
const [tab] = await promisify(chrome.tabs, 'query', { | |
url: globEscape(request.url), | |
}) | |
if (tab) { | |
request.responseHeaders.forEach((header) => { | |
const name = header.name.toLowerCase() | |
headers[name] = headers[name] || [] | |
headers[name].push( | |
(header.value || header.binaryValue || '').toString() | |
) | |
}) | |
Driver.onDetect(request.url, analyze({ headers })).catch(Driver.error) | |
} | |
} catch (error) { | |
Driver.error(error) | |
} | |
} | |
}, | |
/** | |
* Analyse scripts | |
* @param {Object} request | |
*/ | |
async onScriptRequestComplete(request) { | |
if (await Driver.isDisabledDomain(request.url)) { | |
return | |
} | |
if (scriptsPending.includes(request.url)) { | |
scriptsPending.splice(scriptsPending.indexOf(request.url), 1) | |
} else if (request.statusCode === 200) { | |
scriptsPending.push(request.url) | |
const response = await fetch(request.url) | |
const scripts = await response.text() | |
Driver.onDetect(request.documentUrl, analyze({ scripts })).catch( | |
Driver.error | |
) | |
} | |
}, | |
/** | |
* Analyse XHR request hostnames | |
* @param {Object} request | |
*/ | |
async onXhrRequestComplete(request) { | |
if (await Driver.isDisabledDomain(request.url)) { | |
return | |
} | |
let hostname | |
let originHostname | |
try { | |
;({ hostname } = new URL(request.url)) | |
;({ hostname: originHostname } = new URL(request.originUrl)) | |
} catch (error) { | |
return | |
} | |
if (!xhrDebounce.includes(hostname)) { | |
xhrDebounce.push(hostname) | |
setTimeout(() => { | |
xhrDebounce.splice(xhrDebounce.indexOf(hostname), 1) | |
xhrAnalyzed[originHostname] = xhrAnalyzed[originHostname] || [] | |
if (!xhrAnalyzed[originHostname].includes(hostname)) { | |
xhrAnalyzed[originHostname].push(hostname) | |
if (Object.keys(xhrAnalyzed).length > 500) { | |
xhrAnalyzed = {} | |
} | |
Driver.onDetect( | |
request.originUrl || request.initiator, | |
analyze({ xhr: hostname }) | |
).catch(Driver.error) | |
} | |
}, 1000) | |
} | |
}, | |
/** | |
* Process return values from content.js | |
* @param {String} url | |
* @param {Object} items | |
* @param {String} language | |
*/ | |
async onContentLoad(url, items, language, requires, categoryRequires) { | |
try { | |
items.cookies = items.cookies || {} | |
// | |
;( | |
await promisify(chrome.cookies, 'getAll', { | |
url, | |
}) | |
).forEach( | |
({ name, value }) => (items.cookies[name.toLowerCase()] = [value]) | |
) | |
const technologies = getRequiredTechnologies(requires, categoryRequires) | |
await Driver.onDetect( | |
url, | |
analyze({ url, ...items }, technologies), | |
language, | |
true | |
) | |
} catch (error) { | |
Driver.error(error) | |
} | |
}, | |
/** | |
* Get all technologies | |
*/ | |
getTechnologies() { | |
return Wappalyzer.technologies | |
}, | |
/** | |
* Check if Wappalyzer has been disabled for the domain | |
*/ | |
async isDisabledDomain(url) { | |
try { | |
const { hostname } = new URL(url) | |
return (await getOption('disabledDomains', [])).includes(hostname) | |
} catch (error) { | |
return false | |
} | |
}, | |
/** | |
* Callback for detections | |
* @param {String} url | |
* @param {Array} detections | |
* @param {String} language | |
* @param {Boolean} incrementHits | |
*/ | |
async onDetect( | |
url, | |
detections = [], | |
language, | |
incrementHits = false, | |
analyzeRequires = true | |
) { | |
if (!url || !detections.length) { | |
return | |
} | |
url = url.split('#')[0] | |
const { hostname } = new URL(url) | |
// Cache detections | |
const cache = (Driver.cache.hostnames[hostname] = Driver.cache.hostnames[ | |
hostname | |
] || { | |
detections: [], | |
hits: incrementHits ? 0 : 1, | |
https: url.startsWith('https://'), | |
}) | |
cache.dateTime = Date.now() | |
// Remove duplicates | |
cache.detections = cache.detections | |
.concat(detections) | |
.filter(({ technology }) => technology) | |
.filter( | |
({ technology: { name }, pattern: { regex } }, index, detections) => | |
detections.findIndex( | |
({ technology: { name: _name }, pattern: { regex: _regex } }) => | |
name === _name && | |
(!regex || regex.toString() === _regex.toString()) | |
) === index | |
) | |
.map((detection) => { | |
if ( | |
detections.find( | |
({ technology: { slug } }) => slug === detection.technology.slug | |
) | |
) { | |
detection.lastUrl = url | |
} | |
return detection | |
}) | |
cache.hits += incrementHits ? 1 : 0 | |
cache.language = cache.language || language | |
// Expire cache | |
Driver.cache.hostnames = Object.keys(Driver.cache.hostnames).reduce( | |
(hostnames, hostname) => { | |
const cache = Driver.cache.hostnames[hostname] | |
if (cache.dateTime > Date.now() - expiry) { | |
hostnames[hostname] = cache | |
} | |
return hostnames | |
}, | |
{} | |
) | |
await setOption( | |
'hostnames', | |
Object.keys(Driver.cache.hostnames).reduce( | |
(hostnames, hostname) => ({ | |
...hostnames, | |
[hostname]: { | |
...cache, | |
detections: Driver.cache.hostnames[hostname].detections | |
.filter(({ technology }) => technology) | |
.map( | |
({ | |
technology: { name: technology }, | |
pattern: { regex, confidence }, | |
version, | |
lastUrl, | |
}) => ({ | |
technology, | |
pattern: { | |
regex: regex.source, | |
confidence, | |
}, | |
version, | |
lastUrl, | |
}) | |
), | |
}, | |
}), | |
{} | |
) | |
) | |
const resolved = resolve(cache.detections).map((detection) => { | |
detection.cached = detection.lastUrl !== url | |
delete detection.lastUrl | |
return detection | |
}) | |
const requires = [ | |
...Wappalyzer.requires.filter(({ name }) => | |
resolved.some(({ name: _name }) => _name === name) | |
), | |
...Wappalyzer.categoryRequires.filter(({ categoryId }) => | |
resolved.some(({ categories }) => | |
categories.some(({ id }) => id === categoryId) | |
) | |
), | |
] | |
Driver.content(url, 'analyzeRequires', [url, requires]) | |
await Driver.setIcon(url, resolved) | |
if (url) { | |
let tabs = [] | |
try { | |
tabs = await promisify(chrome.tabs, 'query', { | |
url: globEscape(url), | |
}) | |
} catch (error) { | |
// Continue | |
} | |
tabs.forEach(({ id }) => (Driver.cache.tabs[id] = resolved)) | |
} | |
Driver.log({ hostname, technologies: resolved }) | |
await Driver.ping() | |
}, | |
/** | |
* Callback for onAd listener | |
* @param {Object} ad | |
*/ | |
onAd(ad) { | |
Driver.cache.ads.push(ad) | |
}, | |
/** | |
* Update the extension icon | |
* @param {String} url | |
* @param {Object} technologies | |
*/ | |
async setIcon(url, technologies = []) { | |
if (await Driver.isDisabledDomain(url)) { | |
technologies = [] | |
} | |
const dynamicIcon = await getOption('dynamicIcon', false) | |
const showCached = await getOption('showCached', true) | |
const badge = await getOption('badge', true) | |
let icon = 'default.svg' | |
const _technologies = technologies.filter( | |
({ slug, cached }) => | |
slug !== 'cart-functionality' && (showCached || cached === false) | |
) | |
if (dynamicIcon) { | |
const pinnedCategory = parseInt(await getOption('pinnedCategory'), 10) | |
const pinned = _technologies.find(({ categories }) => | |
categories.some(({ id }) => id === pinnedCategory) | |
) | |
;({ icon } = pinned || _technologies[0] || { icon }) | |
} | |
if (!url) { | |
return | |
} | |
let tabs = [] | |
try { | |
tabs = await promisify(chrome.tabs, 'query', { | |
url: globEscape(url), | |
}) | |
} catch (error) { | |
// Continue | |
} | |
tabs.forEach(({ id: tabId }) => { | |
chrome.browserAction.setBadgeText( | |
{ | |
tabId, | |
text: | |
badge && _technologies.length | |
? _technologies.length.toString() | |
: '', | |
}, | |
() => {} | |
) | |
chrome.browserAction.setIcon( | |
{ | |
tabId, | |
path: chrome.runtime.getURL( | |
`../images/icons/${ | |
/\.svg$/i.test(icon) | |
? `converted/${icon.replace(/\.svg$/, '.png')}` | |
: icon | |
}` | |
), | |
}, | |
() => {} | |
) | |
}) | |
}, | |
/** | |
* Get the detected technologies for the current tab | |
*/ | |
async getDetections() { | |
const tab = await promisify(chrome.tabs, 'query', { | |
active: true, | |
currentWindow: true, | |
}) | |
if (!tab) { | |
return | |
} | |
const [{ id, url }] = tab | |
if (await Driver.isDisabledDomain(url)) { | |
await Driver.setIcon(url, []) | |
return | |
} | |
const showCached = await getOption('showCached', true) | |
const resolved = (Driver.cache.tabs[id] || []).filter( | |
({ cached }) => showCached || cached === false | |
) | |
await Driver.setIcon(url, resolved) | |
return resolved | |
}, | |
/** | |
* Fetch the website's robots.txt rules | |
* @param {String} hostname | |
* @param {Boolean} secure | |
*/ | |
async getRobots(hostname, secure = false) { | |
if ( | |
!(await getOption('tracking', true)) || | |
hostnameIgnoreList.test(hostname) | |
) { | |
return [] | |
} | |
if (typeof Driver.cache.robots[hostname] !== 'undefined') { | |
return Driver.cache.robots[hostname] | |
} | |
try { | |
Driver.cache.robots[hostname] = await Promise.race([ | |
// eslint-disable-next-line no-async-promise-executor | |
new Promise(async (resolve) => { | |
const response = await fetch( | |
`http${secure ? 's' : ''}://${hostname}/robots.txt`, | |
{ | |
redirect: 'follow', | |
mode: 'no-cors', | |
} | |
) | |
if (!response.ok) { | |
Driver.error(new Error(response.statusText)) | |
resolve('') | |
} | |
let agent | |
resolve( | |
(await response.text()).split('\n').reduce((disallows, line) => { | |
let matches = /^User-agent:\s*(.+)$/i.exec(line.trim()) | |
if (matches) { | |
agent = matches[1].toLowerCase() | |
} else if (agent === '*' || agent === 'wappalyzer') { | |
matches = /^Disallow:\s*(.+)$/i.exec(line.trim()) | |
if (matches) { | |
disallows.push(matches[1]) | |
} | |
} | |
return disallows | |
}, []) | |
) | |
}), | |
new Promise((resolve) => setTimeout(() => resolve(''), 5000)), | |
]) | |
Driver.cache.robots = Object.keys(Driver.cache.robots) | |
.slice(-50) | |
.reduce( | |
(cache, hostname) => ({ | |
...cache, | |
[hostname]: Driver.cache.robots[hostname], | |
}), | |
{} | |
) | |
await setOption('robots', Driver.cache.robots) | |
return Driver.cache.robots[hostname] | |
} catch (error) { | |
Driver.error(error) | |
} | |
}, | |
/** | |
* Check if the website allows indexing of a URL | |
* @param {String} href | |
*/ | |
async checkRobots(href) { | |
const url = new URL(href) | |
if (url.protocol !== 'http:' && url.protocol !== 'https:') { | |
throw new Error('Invalid protocol') | |
} | |
const robots = await Driver.getRobots( | |
url.hostname, | |
url.protocol === 'https:' | |
) | |
if (robots.some((disallowed) => url.pathname.indexOf(disallowed) === 0)) { | |
throw new Error('Disallowed') | |
} | |
}, | |
/** | |
* Clear caches | |
*/ | |
async clearCache() { | |
Driver.cache.hostnames = {} | |
Driver.cache.tabs = {} | |
xhrAnalyzed = {} | |
await setOption('hostnames', {}) | |
}, | |
/** | |
* Anonymously send identified technologies to wappalyzer.com | |
* This function can be disabled in the extension settings | |
*/ | |
async ping() { | |
const tracking = await getOption('tracking', true) | |
const termsAccepted = | |
agent === 'chrome' || (await getOption('termsAccepted', false)) | |
if (tracking && termsAccepted) { | |
const urls = Object.keys(Driver.cache.hostnames).reduce( | |
(urls, hostname) => { | |
// eslint-disable-next-line standard/computed-property-even-spacing | |
const { language, detections, hits, https } = | |
Driver.cache.hostnames[hostname] | |
const url = `http${https ? 's' : ''}://${hostname}` | |
if (!hostnameIgnoreList.test(hostname) && hits >= 3) { | |
urls[url] = urls[url] || { | |
technologies: resolve(detections).reduce( | |
(technologies, { name, confidence, version }) => { | |
if (confidence === 100) { | |
technologies[name] = { | |
version, | |
hits, | |
} | |
} | |
return technologies | |
}, | |
{} | |
), | |
meta: { | |
language, | |
}, | |
} | |
} | |
return urls | |
}, | |
{} | |
) | |
const count = Object.keys(urls).length | |
if (count && (count >= 25 || Driver.lastPing < Date.now() - expiry)) { | |
await Driver.post('https://api.wappalyzer.com/v2/ping/', { | |
version: chrome.runtime.getManifest().version, | |
urls, | |
}) | |
await setOption('hostnames', (Driver.cache.hostnames = {})) | |
Driver.lastPing = Date.now() | |
} | |
if (Driver.cache.ads.length > 25) { | |
await Driver.post('https://ad.wappalyzer.com/log/wp/', Driver.cache.ads) | |
Driver.cache.ads = [] | |
} | |
} | |
}, | |
} | |
Driver.init() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ | |
/* vim: set sts=2 sw=2 et tw=80: */ | |
/* This Source Code Form is subject to the terms of the Mozilla Public | |
* License, v. 2.0. If a copy of the MPL was not distributed with this | |
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | |
"use strict"; | |
/** | |
* This module contains utilities and base classes for logic which is | |
* common between the parent and child process, and in particular | |
* between ExtensionParent.jsm and ExtensionChild.jsm. | |
*/ | |
/* exported ExtensionCommon */ | |
var EXPORTED_SYMBOLS = ["ExtensionCommon"]; | |
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); | |
const { XPCOMUtils } = ChromeUtils.import( | |
"resource://gre/modules/XPCOMUtils.jsm" | |
); | |
XPCOMUtils.defineLazyGlobalGetters(this, ["fetch"]); | |
XPCOMUtils.defineLazyModuleGetters(this, { | |
ConsoleAPI: "resource://gre/modules/Console.jsm", | |
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.jsm", | |
Schemas: "resource://gre/modules/Schemas.jsm", | |
SchemaRoot: "resource://gre/modules/Schemas.jsm", | |
}); | |
XPCOMUtils.defineLazyServiceGetter( | |
this, | |
"styleSheetService", | |
"@mozilla.org/content/style-sheet-service;1", | |
"nsIStyleSheetService" | |
); | |
const { ExtensionUtils } = ChromeUtils.import( | |
"resource://gre/modules/ExtensionUtils.jsm" | |
); | |
var { | |
DefaultMap, | |
DefaultWeakMap, | |
ExtensionError, | |
filterStack, | |
getInnerWindowID, | |
getUniqueId, | |
} = ExtensionUtils; | |
function getConsole() { | |
return new ConsoleAPI({ | |
maxLogLevelPref: "extensions.webextensions.log.level", | |
prefix: "WebExtensions", | |
}); | |
} | |
XPCOMUtils.defineLazyGetter(this, "console", getConsole); | |
var ExtensionCommon; | |
// Run a function and report exceptions. | |
function runSafeSyncWithoutClone(f, ...args) { | |
try { | |
return f(...args); | |
} catch (e) { | |
dump( | |
`Extension error: ${e} ${e.fileName} ${ | |
e.lineNumber | |
}\n[[Exception stack\n${filterStack(e)}Current stack\n${filterStack( | |
Error() | |
)}]]\n` | |
); | |
Cu.reportError(e); | |
} | |
} | |
// Return true if the given value is an instance of the given | |
// native type. | |
function instanceOf(value, type) { | |
return ( | |
value && | |
typeof value === "object" && | |
ChromeUtils.getClassName(value) === type | |
); | |
} | |
/** | |
* Convert any of several different representations of a date/time to a Date object. | |
* Accepts several formats: | |
* a Date object, an ISO8601 string, or a number of milliseconds since the epoch as | |
* either a number or a string. | |
* | |
* @param {Date|string|number} date | |
* The date to convert. | |
* @returns {Date} | |
* A Date object | |
*/ | |
function normalizeTime(date) { | |
// Of all the formats we accept the "number of milliseconds since the epoch as a string" | |
// is an outlier, everything else can just be passed directly to the Date constructor. | |
return new Date( | |
typeof date == "string" && /^\d+$/.test(date) ? parseInt(date, 10) : date | |
); | |
} | |
function withHandlingUserInput(window, callable) { | |
let handle = window.windowUtils.setHandlingUserInput(true); | |
try { | |
return callable(); | |
} finally { | |
handle.destruct(); | |
} | |
} | |
/** | |
* Defines a lazy getter for the given property on the given object. The | |
* first time the property is accessed, the return value of the getter | |
* is defined on the current `this` object with the given property name. | |
* Importantly, this means that a lazy getter defined on an object | |
* prototype will be invoked separately for each object instance that | |
* it's accessed on. | |
* | |
* @param {object} object | |
* The prototype object on which to define the getter. | |
* @param {string|Symbol} prop | |
* The property name for which to define the getter. | |
* @param {function} getter | |
* The function to call in order to generate the final property | |
* value. | |
*/ | |
function defineLazyGetter(object, prop, getter) { | |
let redefine = (obj, value) => { | |
Object.defineProperty(obj, prop, { | |
enumerable: true, | |
configurable: true, | |
writable: true, | |
value, | |
}); | |
return value; | |
}; | |
Object.defineProperty(object, prop, { | |
enumerable: true, | |
configurable: true, | |
get() { | |
return redefine(this, getter.call(this)); | |
}, | |
set(value) { | |
redefine(this, value); | |
}, | |
}); | |
} | |
function checkLoadURL(url, principal, options) { | |
let ssm = Services.scriptSecurityManager; | |
let flags = ssm.STANDARD; | |
if (!options.allowScript) { | |
flags |= ssm.DISALLOW_SCRIPT; | |
} | |
if (!options.allowInheritsPrincipal) { | |
flags |= ssm.DISALLOW_INHERIT_PRINCIPAL; | |
} | |
if (options.dontReportErrors) { | |
flags |= ssm.DONT_REPORT_ERRORS; | |
} | |
try { | |
ssm.checkLoadURIWithPrincipal(principal, Services.io.newURI(url), flags); | |
} catch (e) { | |
return false; | |
} | |
return true; | |
} | |
function makeWidgetId(id) { | |
id = id.toLowerCase(); | |
// FIXME: This allows for collisions. | |
return id.replace(/[^a-z0-9_-]/g, "_"); | |
} | |
function isDeadOrRemote(obj) { | |
return Cu.isDeadWrapper(obj) || Cu.isRemoteProxy(obj); | |
} | |
/** | |
* A sentinel class to indicate that an array of values should be | |
* treated as an array when used as a promise resolution value, but as a | |
* spread expression (...args) when passed to a callback. | |
*/ | |
class SpreadArgs extends Array { | |
constructor(args) { | |
super(); | |
this.push(...args); | |
} | |
} | |
/** | |
* Like SpreadArgs, but also indicates that the array values already | |
* belong to the target compartment, and should not be cloned before | |
* being passed. | |
* | |
* The `unwrappedValues` property contains an Array object which belongs | |
* to the target compartment, and contains the same unwrapped values | |
* passed the NoCloneSpreadArgs constructor. | |
*/ | |
class NoCloneSpreadArgs { | |
constructor(args) { | |
this.unwrappedValues = args; | |
} | |
[Symbol.iterator]() { | |
return this.unwrappedValues[Symbol.iterator](); | |
} | |
} | |
const LISTENERS = Symbol("listeners"); | |
const ONCE_MAP = Symbol("onceMap"); | |
class EventEmitter { | |
constructor() { | |
this[LISTENERS] = new Map(); | |
this[ONCE_MAP] = new WeakMap(); | |
} | |
/** | |
* Checks whether there is some listener for the given event. | |
* | |
* @param {string} event | |
* The name of the event to listen for. | |
* @returns {boolean} | |
*/ | |
has(event) { | |
return this[LISTENERS].has(event); | |
} | |
/** | |
* Adds the given function as a listener for the given event. | |
* | |
* The listener function may optionally return a Promise which | |
* resolves when it has completed all operations which event | |
* dispatchers may need to block on. | |
* | |
* @param {string} event | |
* The name of the event to listen for. | |
* @param {function(string, ...any)} listener | |
* The listener to call when events are emitted. | |
*/ | |
on(event, listener) { | |
let listeners = this[LISTENERS].get(event); | |
if (!listeners) { | |
listeners = new Set(); | |
this[LISTENERS].set(event, listeners); | |
} | |
listeners.add(listener); | |
} | |
/** | |
* Removes the given function as a listener for the given event. | |
* | |
* @param {string} event | |
* The name of the event to stop listening for. | |
* @param {function(string, ...any)} listener | |
* The listener function to remove. | |
*/ | |
off(event, listener) { | |
let set = this[LISTENERS].get(event); | |
if (set) { | |
set.delete(listener); | |
set.delete(this[ONCE_MAP].get(listener)); | |
if (!set.size) { | |
this[LISTENERS].delete(event); | |
} | |
} | |
} | |
/** | |
* Adds the given function as a listener for the given event once. | |
* | |
* @param {string} event | |
* The name of the event to listen for. | |
* @param {function(string, ...any)} listener | |
* The listener to call when events are emitted. | |
*/ | |
once(event, listener) { | |
let wrapper = (...args) => { | |
this.off(event, wrapper); | |
this[ONCE_MAP].delete(listener); | |
return listener(...args); | |
}; | |
this[ONCE_MAP].set(listener, wrapper); | |
this.on(event, wrapper); | |
} | |
/** | |
* Triggers all listeners for the given event. If any listeners return | |
* a value, returns a promise which resolves when all returned | |
* promises have resolved. Otherwise, returns undefined. | |
* | |
* @param {string} event | |
* The name of the event to emit. | |
* @param {any} args | |
* Arbitrary arguments to pass to the listener functions, after | |
* the event name. | |
* @returns {Promise?} | |
*/ | |
emit(event, ...args) { | |
let listeners = this[LISTENERS].get(event); | |
if (listeners) { | |
let promises = []; | |
for (let listener of listeners) { | |
try { | |
let result = listener(event, ...args); | |
if (result !== undefined) { | |
promises.push(result); | |
} | |
} catch (e) { | |
Cu.reportError(e); | |
} | |
} | |
if (promises.length) { | |
return Promise.all(promises); | |
} | |
} | |
} | |
} | |
/** | |
* Base class for WebExtension APIs. Each API creates a new class | |
* that inherits from this class, the derived class is instantiated | |
* once for each extension that uses the API. | |
*/ | |
class ExtensionAPI extends EventEmitter { | |
constructor(extension) { | |
super(); | |
this.extension = extension; | |
extension.once("shutdown", (what, isAppShutdown) => { | |
if (this.onShutdown) { | |
this.onShutdown(isAppShutdown); | |
} | |
this.extension = null; | |
}); | |
} | |
destroy() {} | |
onManifestEntry(entry) {} | |
getAPI(context) { | |
throw new Error("Not Implemented"); | |
} | |
} | |
/** | |
* Subclass to add APIs commonly used with persistent events. | |
* If a namespace uses events, it should use this subclass. | |
* | |
* this.apiNamespace = class extends ExtensionAPIPersistent {}; | |
*/ | |
class ExtensionAPIPersistent extends ExtensionAPI { | |
/** | |
* Check for event entry. | |
* | |
* @param {string} event The event name e.g. onStateChanged | |
* @returns {boolean} | |
*/ | |
hasEventRegistrar(event) { | |
return ( | |
this.PERSISTENT_EVENTS && Object.hasOwn(this.PERSISTENT_EVENTS, event) | |
); | |
} | |
/** | |
* Get the event registration fuction | |
* | |
* @param {string} event The event name e.g. onStateChanged | |
* @returns {Function} register is used to start the listener | |
* register returns an object containing | |
* a convert and unregister function. | |
*/ | |
getEventRegistrar(event) { | |
if (this.hasEventRegistrar(event)) { | |
return this.PERSISTENT_EVENTS[event].bind(this); | |
} | |
} | |
/** | |
* Used when instantiating an EventManager instance to register the listener. | |
* | |
* @param {Object} options Options used for event registration | |
* @param {BaseContext} options.context Extension Context passed when creating an EventManager instance. | |
* @param {string} options.event The eAPI vent name. | |
* @param {Function} options.fire The function passed to the listener to fire the event. | |
* @param {Array<any>} params An optional array of parameters received along with the | |
* addListener request. | |
* @returns {Function} The unregister function used in the EventManager. | |
*/ | |
registerEventListener(options, params) { | |
const apiRegistar = this.getEventRegistrar(options.event); | |
return apiRegistar?.(options, params).unregister; | |
} | |
/** | |
* Used to prime a listener for when the background script is not running. | |
* | |
* @param {string} event The event name e.g. onStateChanged or captiveURL.onChange. | |
* @param {Function} fire The function passed to the listener to fire the event. | |
* @param {Array} params Params passed to the event listener. | |
* @param {boolean} isInStartup unused here but passed for subclass use. | |
* @returns {Object} the unregister and convert functions used in the EventManager. | |
*/ | |
primeListener(event, fire, params, isInStartup) { | |
const apiRegistar = this.getEventRegistrar(event); | |
return apiRegistar?.({ fire, isInStartup }, params); | |
} | |
} | |
/** | |
* A wrapper around a window that returns the window iff the inner window | |
* matches the inner window at the construction of this wrapper. | |
* | |
* This wrapper should not be used after the inner window is destroyed. | |
**/ | |
class InnerWindowReference { | |
constructor(contentWindow, innerWindowID) { | |
this.contentWindow = contentWindow; | |
this.innerWindowID = innerWindowID; | |
this.needWindowIDCheck = false; | |
contentWindow.addEventListener( | |
"pagehide", | |
this, | |
{ mozSystemGroup: true }, | |
false | |
); | |
contentWindow.addEventListener( | |
"pageshow", | |
this, | |
{ mozSystemGroup: true }, | |
false | |
); | |
} | |
get() { | |
// If the pagehide event has fired, the inner window ID needs to be checked, | |
// in case the window ref is dereferenced in a pageshow listener (before our | |
// pageshow listener was dispatched) or during the unload event. | |
if ( | |
!this.needWindowIDCheck || | |
(!isDeadOrRemote(this.contentWindow) && | |
getInnerWindowID(this.contentWindow) === this.innerWindowID) | |
) { | |
return this.contentWindow; | |
} | |
return null; | |
} | |
invalidate() { | |
// If invalidate() is called while the inner window is in the bfcache, then | |
// we are unable to remove the event listener, and handleEvent will be | |
// called once more if the page is revived from the bfcache. | |
if (this.contentWindow && !isDeadOrRemote(this.contentWindow)) { | |
this.contentWindow.removeEventListener("pagehide", this, { | |
mozSystemGroup: true, | |
}); | |
this.contentWindow.removeEventListener("pageshow", this, { | |
mozSystemGroup: true, | |
}); | |
} | |
this.contentWindow = null; | |
this.needWindowIDCheck = false; | |
} | |
handleEvent(event) { | |
if (this.contentWindow) { | |
this.needWindowIDCheck = event.type === "pagehide"; | |
} else { | |
// Remove listener when restoring from the bfcache - see invalidate(). | |
event.currentTarget.removeEventListener("pagehide", this, { | |
mozSystemGroup: true, | |
}); | |
event.currentTarget.removeEventListener("pageshow", this, { | |
mozSystemGroup: true, | |
}); | |
} | |
} | |
} | |
/** | |
* This class contains the information we have about an individual | |
* extension. It is never instantiated directly, instead subclasses | |
* for each type of process extend this class and add members that are | |
* relevant for that process. | |
* @abstract | |
*/ | |
class BaseContext { | |
constructor(envType, extension) { | |
this.envType = envType; | |
this.onClose = new Set(); | |
this.checkedLastError = false; | |
this._lastError = null; | |
this.contextId = getUniqueId(); | |
this.unloaded = false; | |
this.extension = extension; | |
this.manifestVersion = extension.manifestVersion; | |
this.jsonSandbox = null; | |
this.active = true; | |
this.incognito = null; | |
this.messageManager = null; | |
this.contentWindow = null; | |
this.innerWindowID = 0; | |
// These two properties are assigned in ContentScriptContextChild subclass | |
// to keep a copy of the content script sandbox Error and Promise globals | |
// (which are used by the WebExtensions internals) before any extension | |
// content script code had any chance to redefine them. | |
this.cloneScopeError = null; | |
this.cloneScopePromise = null; | |
} | |
get Error() { | |
// Return the copy stored in the context instance (when the context is an instance of | |
// ContentScriptContextChild or the global from extension page window otherwise). | |
return this.cloneScopeError || this.cloneScope.Error; | |
} | |
get Promise() { | |
// Return the copy stored in the context instance (when the context is an instance of | |
// ContentScriptContextChild or the global from extension page window otherwise). | |
return this.cloneScopePromise || this.cloneScope.Promise; | |
} | |
get privateBrowsingAllowed() { | |
return this.extension.privateBrowsingAllowed; | |
} | |
/** | |
* Whether the extension context is using the WebIDL bindings for the | |
* WebExtensions APIs. | |
* To be overridden in subclasses (e.g. WorkerContextChild) and to be | |
* optionally used in ExtensionAPI classes to customize the behavior of the | |
* API when the calls to the extension API are originated from the WebIDL | |
* bindings. | |
*/ | |
get useWebIDLBindings() { | |
return false; | |
} | |
canAccessWindow(window) { | |
return this.extension.canAccessWindow(window); | |
} | |
canAccessContainer(userContextId) { | |
return this.extension.canAccessContainer(userContextId); | |
} | |
/** | |
* Opens a conduit linked to this context, populating related address fields. | |
* Only available in child contexts with an associated contentWindow. | |
* @param {object} subject | |
* @param {ConduitAddress} address | |
* @returns {PointConduit} | |
*/ | |
openConduit(subject, address) { | |
let wgc = this.contentWindow.windowGlobalChild; | |
let conduit = wgc.getActor("Conduits").openConduit(subject, { | |
id: subject.id || getUniqueId(), | |
extensionId: this.extension.id, | |
envType: this.envType, | |
...address, | |
}); | |
this.callOnClose(conduit); | |
conduit.setCloseCallback(() => { | |
this.forgetOnClose(conduit); | |
}); | |
return conduit; | |
} | |
setContentWindow(contentWindow) { | |
if (!this.canAccessWindow(contentWindow)) { | |
throw new Error( | |
"BaseContext attempted to load when extension is not allowed due to incognito settings." | |
); | |
} | |
this.innerWindowID = getInnerWindowID(contentWindow); | |
this.messageManager = contentWindow.docShell.messageManager; | |
if (this.incognito == null) { | |
this.incognito = PrivateBrowsingUtils.isContentWindowPrivate( | |
contentWindow | |
); | |
} | |
let windowRef = new InnerWindowReference(contentWindow, this.innerWindowID); | |
Object.defineProperty(this, "active", { | |
configurable: true, | |
enumerable: true, | |
get: () => windowRef.get() !== null, | |
}); | |
Object.defineProperty(this, "contentWindow", { | |
configurable: true, | |
enumerable: true, | |
get: () => windowRef.get(), | |
}); | |
this.callOnClose({ | |
close: () => { | |
// Allow other "close" handlers to use these properties, until the next tick. | |
Promise.resolve().then(() => { | |
windowRef.invalidate(); | |
windowRef = null; | |
Object.defineProperty(this, "contentWindow", { value: null }); | |
Object.defineProperty(this, "active", { value: false }); | |
}); | |
}, | |
}); | |
} | |
// All child contexts must implement logActivity. This is handled if the child | |
// context subclasses ExtensionBaseContextChild. ProxyContextParent overrides | |
// this with a noop for parent contexts. | |
logActivity(type, name, data) { | |
throw new Error(`Not implemented for ${this.envType}`); | |
} | |
get cloneScope() { | |
throw new Error("Not implemented"); | |
} | |
get principal() { | |
throw new Error("Not implemented"); | |
} | |
runSafe(callback, ...args) { | |
return this.applySafe(callback, args); | |
} | |
runSafeWithoutClone(callback, ...args) { | |
return this.applySafeWithoutClone(callback, args); | |
} | |
applySafe(callback, args, caller) { | |
if (this.unloaded) { | |
Cu.reportError("context.runSafe called after context unloaded", caller); | |
} else if (!this.active) { | |
Cu.reportError( | |
"context.runSafe called while context is inactive", | |
caller | |
); | |
} else { | |
try { | |
let { cloneScope } = this; | |
args = args.map(arg => Cu.cloneInto(arg, cloneScope)); | |
} catch (e) { | |
Cu.reportError(e); | |
dump( | |
`runSafe failure: cloning into ${ | |
this.cloneScope | |
}: ${e}\n\n${filterStack(Error())}` | |
); | |
} | |
return this.applySafeWithoutClone(callback, args, caller); | |
} | |
} | |
applySafeWithoutClone(callback, args, caller) { | |
if (this.unloaded) { | |
Cu.reportError( | |
"context.runSafeWithoutClone called after context unloaded", | |
caller | |
); | |
} else if (!this.active) { | |
Cu.reportError( | |
"context.runSafeWithoutClone called while context is inactive", | |
caller | |
); | |
} else { | |
try { | |
return Reflect.apply(callback, null, args); | |
} catch (e) { | |
dump( | |
`Extension error: ${e} ${e.fileName} ${ | |
e.lineNumber | |
}\n[[Exception stack\n${filterStack(e)}Current stack\n${filterStack( | |
Error() | |
)}]]\n` | |
); | |
Cu.reportError(e); | |
} | |
} | |
} | |
checkLoadURL(url, options = {}) { | |
// As an optimization, f the URL starts with the extension's base URL, | |
// don't do any further checks. It's always allowed to load it. | |
if (url.startsWith(this.extension.baseURL)) { | |
return true; | |
} | |
return checkLoadURL(url, this.principal, options); | |
} | |
/** | |
* Safely call JSON.stringify() on an object that comes from an | |
* extension. | |
* | |
* @param {array<any>} args Arguments for JSON.stringify() | |
* @returns {string} The stringified representation of obj | |
*/ | |
jsonStringify(...args) { | |
if (!this.jsonSandbox) { | |
this.jsonSandbox = Cu.Sandbox(this.principal, { | |
sameZoneAs: this.cloneScope, | |
wantXrays: false, | |
}); | |
} | |
return Cu.waiveXrays(this.jsonSandbox.JSON).stringify(...args); | |
} | |
callOnClose(obj) { | |
this.onClose.add(obj); | |
} | |
forgetOnClose(obj) { | |
this.onClose.delete(obj); | |
} | |
get lastError() { | |
this.checkedLastError = true; | |
return this._lastError; | |
} | |
set lastError(val) { | |
this.checkedLastError = false; | |
this._lastError = val; | |
} | |
/** | |
* Normalizes the given error object for use by the target scope. If | |
* the target is an error object which belongs to that scope, it is | |
* returned as-is. If it is an ordinary object with a `message` | |
* property, it is converted into an error belonging to the target | |
* scope. If it is an Error object which does *not* belong to the | |
* clone scope, it is reported, and converted to an unexpected | |
* exception error. | |
* | |
* @param {Error|object} error | |
* @param {SavedFrame?} [caller] | |
* @returns {Error} | |
*/ | |
normalizeError(error, caller) { | |
if (error instanceof this.Error) { | |
return error; | |
} | |
let message, fileName; | |
if (error && typeof error === "object") { | |
const isPlain = ChromeUtils.getClassName(error) === "Object"; | |
if (isPlain && error.mozWebExtLocation) { | |
caller = error.mozWebExtLocation; | |
} | |
if (isPlain && caller && (error.mozWebExtLocation || !error.fileName)) { | |
caller = Cu.cloneInto(caller, this.cloneScope); | |
return ChromeUtils.createError(error.message, caller); | |
} | |
if ( | |
isPlain || | |
error instanceof ExtensionError || | |
this.principal.subsumes(Cu.getObjectPrincipal(error)) | |
) { | |
message = error.message; | |
fileName = error.fileName; | |
} | |
} | |
if (!message) { | |
Cu.reportError(error); | |
message = "An unexpected error occurred"; | |
} | |
return new this.Error(message, fileName); | |
} | |
/** | |
* Sets the value of `.lastError` to `error`, calls the given | |
* callback, and reports an error if the value has not been checked | |
* when the callback returns. | |
* | |
* @param {object} error An object with a `message` property. May | |
* optionally be an `Error` object belonging to the target scope. | |
* @param {SavedFrame?} caller | |
* The optional caller frame which triggered this callback, to be used | |
* in error reporting. | |
* @param {function} callback The callback to call. | |
* @returns {*} The return value of callback. | |
*/ | |
withLastError(error, caller, callback) { | |
this.lastError = this.normalizeError(error); | |
try { | |
return callback(); | |
} finally { | |
if (!this.checkedLastError) { | |
Cu.reportError(`Unchecked lastError value: ${this.lastError}`, caller); | |
} | |
this.lastError = null; | |
} | |
} | |
/** | |
* Captures the most recent stack frame which belongs to the extension. | |
* | |
* @returns {SavedFrame?} | |
*/ | |
getCaller() { | |
return ChromeUtils.getCallerLocation(this.principal); | |
} | |
/** | |
* Wraps the given promise so it can be safely returned to extension | |
* code in this context. | |
* | |
* If `callback` is provided, however, it is used as a completion | |
* function for the promise, and no promise is returned. In this case, | |
* the callback is called when the promise resolves or rejects. In the | |
* latter case, `lastError` is set to the rejection value, and the | |
* callback function must check `browser.runtime.lastError` or | |
* `extension.runtime.lastError` in order to prevent it being reported | |
* to the console. | |
* | |
* @param {Promise} promise The promise with which to wrap the | |
* callback. May resolve to a `SpreadArgs` instance, in which case | |
* each element will be used as a separate argument. | |
* | |
* Unless the promise object belongs to the cloneScope global, its | |
* resolution value is cloned into cloneScope prior to calling the | |
* `callback` function or resolving the wrapped promise. | |
* | |
* @param {function} [callback] The callback function to wrap | |
* | |
* @returns {Promise|undefined} If callback is null, a promise object | |
* belonging to the target scope. Otherwise, undefined. | |
*/ | |
wrapPromise(promise, callback = null) { | |
let caller = this.getCaller(); | |
let applySafe = this.applySafe.bind(this); | |
if (Cu.getGlobalForObject(promise) === this.cloneScope) { | |
applySafe = this.applySafeWithoutClone.bind(this); | |
} | |
if (callback) { | |
promise.then( | |
args => { | |
if (this.unloaded) { | |
Cu.reportError(`Promise resolved after context unloaded\n`, caller); | |
} else if (!this.active) { | |
Cu.reportError( | |
`Promise resolved while context is inactive\n`, | |
caller | |
); | |
} else if (args instanceof NoCloneSpreadArgs) { | |
this.applySafeWithoutClone(callback, args.unwrappedValues, caller); | |
} else if (args instanceof SpreadArgs) { | |
applySafe(callback, args, caller); | |
} else { | |
applySafe(callback, [args], caller); | |
} | |
}, | |
error => { | |
this.withLastError(error, caller, () => { | |
if (this.unloaded) { | |
Cu.reportError( | |
`Promise rejected after context unloaded\n`, | |
caller | |
); | |
} else if (!this.active) { | |
Cu.reportError( | |
`Promise rejected while context is inactive\n`, | |
caller | |
); | |
} else { | |
this.applySafeWithoutClone(callback, [], caller); | |
} | |
}); | |
} | |
); | |
} else { | |
return new this.Promise((resolve, reject) => { | |
promise.then( | |
value => { | |
if (this.unloaded) { | |
Cu.reportError( | |
`Promise resolved after context unloaded\n`, | |
caller | |
); | |
} else if (!this.active) { | |
Cu.reportError( | |
`Promise resolved while context is inactive\n`, | |
caller | |
); | |
} else if (value instanceof NoCloneSpreadArgs) { | |
let values = value.unwrappedValues; | |
this.applySafeWithoutClone( | |
resolve, | |
values.length == 1 ? [values[0]] : [values], | |
caller | |
); | |
} else if (value instanceof SpreadArgs) { | |
applySafe(resolve, value.length == 1 ? value : [value], caller); | |
} else { | |
applySafe(resolve, [value], caller); | |
} | |
}, | |
value => { | |
if (this.unloaded) { | |
Cu.reportError( | |
`Promise rejected after context unloaded: ${value && | |
value.message}\n`, | |
caller | |
); | |
} else if (!this.active) { | |
Cu.reportError( | |
`Promise rejected while context is inactive: ${value && | |
value.message}\n`, | |
caller | |
); | |
} else { | |
this.applySafeWithoutClone( | |
reject, | |
[this.normalizeError(value, caller)], | |
caller | |
); | |
} | |
} | |
); | |
}); | |
} | |
} | |
unload() { | |
this.unloaded = true; | |
for (let obj of this.onClose) { | |
obj.close(); | |
} | |
this.onClose.clear(); | |
} | |
/** | |
* A simple proxy for unload(), for use with callOnClose(). | |
*/ | |
close() { | |
this.unload(); | |
} | |
} | |
/** | |
* An object that runs the implementation of a schema API. Instantiations of | |
* this interfaces are used by Schemas.jsm. | |
* | |
* @interface | |
*/ | |
class SchemaAPIInterface { | |
/** | |
* Calls this as a function that returns its return value. | |
* | |
* @abstract | |
* @param {Array} args The parameters for the function. | |
* @returns {*} The return value of the invoked function. | |
*/ | |
callFunction(args) { | |
throw new Error("Not implemented"); | |
} | |
/** | |
* Calls this as a function and ignores its return value. | |
* | |
* @abstract | |
* @param {Array} args The parameters for the function. | |
*/ | |
callFunctionNoReturn(args) { | |
throw new Error("Not implemented"); | |
} | |
/** | |
* Calls this as a function that completes asynchronously. | |
* | |
* @abstract | |
* @param {Array} args The parameters for the function. | |
* @param {function(*)} [callback] The callback to be called when the function | |
* completes. | |
* @param {boolean} [requireUserInput=false] If true, the function should | |
* fail if the browser is not currently handling user input. | |
* @returns {Promise|undefined} Must be void if `callback` is set, and a | |
* promise otherwise. The promise is resolved when the function completes. | |
*/ | |
callAsyncFunction(args, callback, requireUserInput = false) { | |
throw new Error("Not implemented"); | |
} | |
/** | |
* Retrieves the value of this as a property. | |
* | |
* @abstract | |
* @returns {*} The value of the property. | |
*/ | |
getProperty() { | |
throw new Error("Not implemented"); | |
} | |
/** | |
* Assigns the value to this as property. | |
* | |
* @abstract | |
* @param {string} value The new value of the property. | |
*/ | |
setProperty(value) { | |
throw new Error("Not implemented"); | |
} | |
/** | |
* Registers a `listener` to this as an event. | |
* | |
* @abstract | |
* @param {function} listener The callback to be called when the event fires. | |
* @param {Array} args Extra parameters for EventManager.addListener. | |
* @see EventManager.addListener | |
*/ | |
addListener(listener, args) { | |
throw new Error("Not implemented"); | |
} | |
/** | |
* Checks whether `listener` is listening to this as an event. | |
* | |
* @abstract | |
* @param {function} listener The event listener. | |
* @returns {boolean} Whether `listener` is registered with this as an event. | |
* @see EventManager.hasListener | |
*/ | |
hasListener(listener) { | |
throw new Error("Not implemented"); | |
} | |
/** | |
* Unregisters `listener` from this as an event. | |
* | |
* @abstract | |
* @param {function} listener The event listener. | |
* @see EventManager.removeListener | |
*/ | |
removeListener(listener) { | |
throw new Error("Not implemented"); | |
} | |
/** | |
* Revokes the implementation object, and prevents any further method | |
* calls from having external effects. | |
* | |
* @abstract | |
*/ | |
revoke() { | |
throw new Error("Not implemented"); | |
} | |
} | |
/** | |
* An object that runs a locally implemented API. | |
*/ | |
class LocalAPIImplementation extends SchemaAPIInterface { | |
/** | |
* Constructs an implementation of the `name` method or property of `pathObj`. | |
* | |
* @param {object} pathObj The object containing the member with name `name`. | |
* @param {string} name The name of the implemented member. | |
* @param {BaseContext} context The context in which the schema is injected. | |
*/ | |
constructor(pathObj, name, context) { | |
super(); | |
this.pathObj = pathObj; | |
this.name = name; | |
this.context = context; | |
} | |
revoke() { | |
if (this.pathObj[this.name][Schemas.REVOKE]) { | |
this.pathObj[this.name][Schemas.REVOKE](); | |
} | |
this.pathObj = null; | |
this.name = null; | |
this.context = null; | |
} | |
callFunction(args) { | |
try { | |
return this.pathObj[this.name](...args); | |
} catch (e) { | |
throw this.context.normalizeError(e); | |
} | |
} | |
callFunctionNoReturn(args) { | |
try { | |
this.pathObj[this.name](...args); | |
} catch (e) { | |
throw this.context.normalizeError(e); | |
} | |
} | |
callAsyncFunction(args, callback, requireUserInput) { | |
let promise; | |
try { | |
if (requireUserInput) { | |
if (!this.context.contentWindow.windowUtils.isHandlingUserInput) { | |
throw new ExtensionError( | |
`${this.name} may only be called from a user input handler` | |
); | |
} | |
} | |
promise = this.pathObj[this.name](...args) || Promise.resolve(); | |
} catch (e) { | |
promise = Promise.reject(e); | |
} | |
return this.context.wrapPromise(promise, callback); | |
} | |
getProperty() { | |
return this.pathObj[this.name]; | |
} | |
setProperty(value) { | |
this.pathObj[this.name] = value; | |
} | |
addListener(listener, args) { | |
try { | |
this.pathObj[this.name].addListener.call(null, listener, ...args); | |
} catch (e) { | |
throw this.context.normalizeError(e); | |
} | |
} | |
hasListener(listener) { | |
return this.pathObj[this.name].hasListener.call(null, listener); | |
} | |
removeListener(listener) { | |
this.pathObj[this.name].removeListener.call(null, listener); | |
} | |
} | |
// Recursively copy properties from source to dest. | |
function deepCopy(dest, source) { | |
for (let prop in source) { | |
let desc = Object.getOwnPropertyDescriptor(source, prop); | |
if (typeof desc.value == "object") { | |
if (!(prop in dest)) { | |
dest[prop] = {}; | |
} | |
deepCopy(dest[prop], source[prop]); | |
} else { | |
Object.defineProperty(dest, prop, desc); | |
} | |
} | |
} | |
function getChild(map, key) { | |
let child = map.children.get(key); | |
if (!child) { | |
child = { | |
modules: new Set(), | |
children: new Map(), | |
}; | |
map.children.set(key, child); | |
} | |
return child; | |
} | |
function getPath(map, path) { | |
for (let key of path) { | |
map = getChild(map, key); | |
} | |
return map; | |
} | |
function mergePaths(dest, source) { | |
for (let name of source.modules) { | |
dest.modules.add(name); | |
} | |
for (let [name, child] of source.children.entries()) { | |
mergePaths(getChild(dest, name), child); | |
} | |
} | |
/** | |
* Manages loading and accessing a set of APIs for a specific extension | |
* context. | |
* | |
* @param {BaseContext} context | |
* The context to manage APIs for. | |
* @param {SchemaAPIManager} apiManager | |
* The API manager holding the APIs to manage. | |
* @param {object} root | |
* The root object into which APIs will be injected. | |
*/ | |
class CanOfAPIs { | |
constructor(context, apiManager, root) { | |
this.context = context; | |
this.scopeName = context.envType; | |
this.apiManager = apiManager; | |
this.root = root; | |
this.apiPaths = new Map(); | |
this.apis = new Map(); | |
} | |
/** | |
* Synchronously loads and initializes an ExtensionAPI instance. | |
* | |
* @param {string} name | |
* The name of the API to load. | |
*/ | |
loadAPI(name) { | |
if (this.apis.has(name)) { | |
return; | |
} | |
let { extension } = this.context; | |
let api = this.apiManager.getAPI(name, extension, this.scopeName); | |
if (!api) { | |
return; | |
} | |
this.apis.set(name, api); | |
deepCopy(this.root, api.getAPI(this.context)); | |
} | |
/** | |
* Asynchronously loads and initializes an ExtensionAPI instance. | |
* | |
* @param {string} name | |
* The name of the API to load. | |
*/ | |
async asyncLoadAPI(name) { | |
if (this.apis.has(name)) { | |
return; | |
} | |
let { extension } = this.context; | |
if (!Schemas.checkPermissions(name, extension)) { | |
return; | |
} | |
let api = await this.apiManager.asyncGetAPI( | |
name, | |
extension, | |
this.scopeName | |
); | |
// Check again, because async; | |
if (this.apis.has(name)) { | |
return; | |
} | |
this.apis.set(name, api); | |
deepCopy(this.root, api.getAPI(this.context)); | |
} | |
/** | |
* Finds the API at the given path from the root object, and | |
* synchronously loads the API that implements it if it has not | |
* already been loaded. | |
* | |
* @param {string} path | |
* The "."-separated path to find. | |
* @returns {*} | |
*/ | |
findAPIPath(path) { | |
if (this.apiPaths.has(path)) { | |
return this.apiPaths.get(path); | |
} | |
let obj = this.root; | |
let modules = this.apiManager.modulePaths; | |
let parts = path.split("."); | |
for (let [i, key] of parts.entries()) { | |
if (!obj) { | |
return; | |
} | |
modules = getChild(modules, key); | |
for (let name of modules.modules) { | |
if (!this.apis.has(name)) { | |
this.loadAPI(name); | |
} | |
} | |
if (!(key in obj) && i < parts.length - 1) { | |
obj[key] = {}; | |
} | |
obj = obj[key]; | |
} | |
this.apiPaths.set(path, obj); | |
return obj; | |
} | |
/** | |
* Finds the API at the given path from the root object, and | |
* asynchronously loads the API that implements it if it has not | |
* already been loaded. | |
* | |
* @param {string} path | |
* The "."-separated path to find. | |
* @returns {Promise<*>} | |
*/ | |
async asyncFindAPIPath(path) { | |
if (this.apiPaths.has(path)) { | |
return this.apiPaths.get(path); | |
} | |
let obj = this.root; | |
let modules = this.apiManager.modulePaths; | |
let parts = path.split("."); | |
for (let [i, key] of parts.entries()) { | |
if (!obj) { | |
return; | |
} | |
modules = getChild(modules, key); | |
for (let name of modules.modules) { | |
if (!this.apis.has(name)) { | |
await this.asyncLoadAPI(name); | |
} | |
} | |
if (!(key in obj) && i < parts.length - 1) { | |
obj[key] = {}; | |
} | |
if (typeof obj[key] === "function") { | |
obj = obj[key].bind(obj); | |
} else { | |
obj = obj[key]; | |
} | |
} | |
this.apiPaths.set(path, obj); | |
return obj; | |
} | |
} | |
/** | |
* @class APIModule | |
* @abstract | |
* | |
* @property {string} url | |
* The URL of the script which contains the module's | |
* implementation. This script must define a global property | |
* matching the modules name, which must be a class constructor | |
* which inherits from {@link ExtensionAPI}. | |
* | |
* @property {string} schema | |
* The URL of the JSON schema which describes the module's API. | |
* | |
* @property {Array<string>} scopes | |
* The list of scope names into which the API may be loaded. | |
* | |
* @property {Array<string>} manifest | |
* The list of top-level manifest properties which will trigger | |
* the module to be loaded, and its `onManifestEntry` method to be | |
* called. | |
* | |
* @property {Array<string>} events | |
* The list events which will trigger the module to be loaded, and | |
* its appropriate event handler method to be called. Currently | |
* only accepts "startup". | |
* | |
* @property {Array<string>} permissions | |
* An optional list of permissions, any of which must be present | |
* in order for the module to load. | |
* | |
* @property {Array<Array<string>>} paths | |
* A list of paths from the root API object which, when accessed, | |
* will cause the API module to be instantiated and injected. | |
*/ | |
/** | |
* This object loads the ext-*.js scripts that define the extension API. | |
* | |
* This class instance is shared with the scripts that it loads, so that the | |
* ext-*.js scripts and the instantiator can communicate with each other. | |
*/ | |
class SchemaAPIManager extends EventEmitter { | |
/** | |
* @param {string} processType | |
* "main" - The main, one and only chrome browser process. | |
* "addon" - An addon process. | |
* "content" - A content process. | |
* "devtools" - A devtools process. | |
* @param {SchemaRoot} schema | |
*/ | |
constructor(processType, schema) { | |
super(); | |
this.processType = processType; | |
this.global = null; | |
if (schema) { | |
this.schema = schema; | |
} | |
this.modules = new Map(); | |
this.modulePaths = { children: new Map(), modules: new Set() }; | |
this.manifestKeys = new Map(); | |
this.eventModules = new DefaultMap(() => new Set()); | |
this.settingsModules = new Set(); | |
this._modulesJSONLoaded = false; | |
this.schemaURLs = new Map(); | |
this.apis = new DefaultWeakMap(() => new Map()); | |
this._scriptScopes = []; | |
} | |
onStartup(extension) { | |
let promises = []; | |
for (let apiName of this.eventModules.get("startup")) { | |
promises.push( | |
extension.apiManager.asyncGetAPI(apiName, extension).then(api => { | |
if (api) { | |
api.onStartup(); | |
} | |
}) | |
); | |
} | |
return Promise.all(promises); | |
} | |
async loadModuleJSON(urls) { | |
let promises = urls.map(url => fetch(url).then(resp => resp.json())); | |
return this.initModuleJSON(await Promise.all(promises)); | |
} | |
initModuleJSON(blobs) { | |
for (let json of blobs) { | |
this.registerModules(json); | |
} | |
this._modulesJSONLoaded = true; | |
return new StructuredCloneHolder({ | |
modules: this.modules, | |
modulePaths: this.modulePaths, | |
manifestKeys: this.manifestKeys, | |
eventModules: this.eventModules, | |
settingsModules: this.settingsModules, | |
schemaURLs: this.schemaURLs, | |
}); | |
} | |
initModuleData(moduleData) { | |
if (!this._modulesJSONLoaded) { | |
let data = moduleData.deserialize({}, true); | |
this.modules = data.modules; | |
this.modulePaths = data.modulePaths; | |
this.manifestKeys = data.manifestKeys; | |
this.eventModules = new DefaultMap(() => new Set(), data.eventModules); | |
this.settingsModules = new Set(data.settingsModules); | |
this.schemaURLs = data.schemaURLs; | |
} | |
this._modulesJSONLoaded = true; | |
} | |
/** | |
* Registers a set of ExtensionAPI modules to be lazily loaded and | |
* managed by this manager. | |
* | |
* @param {object} obj | |
* An object containing property for eacy API module to be | |
* registered. Each value should be an object implementing the | |
* APIModule interface. | |
*/ | |
registerModules(obj) { | |
for (let [name, details] of Object.entries(obj)) { | |
details.namespaceName = name; | |
if (this.modules.has(name)) { | |
throw new Error(`Module '${name}' already registered`); | |
} | |
this.modules.set(name, details); | |
if (details.schema) { | |
let content = | |
details.scopes && | |
(details.scopes.includes("content_parent") || | |
details.scopes.includes("content_child")); | |
this.schemaURLs.set(details.schema, { content }); | |
} | |
for (let event of details.events || []) { | |
this.eventModules.get(event).add(name); | |
} | |
if (details.settings) { | |
this.settingsModules.add(name); | |
} | |
for (let key of details.manifest || []) { | |
if (this.manifestKeys.has(key)) { | |
throw new Error( | |
`Manifest key '${key}' already registered by '${this.manifestKeys.get( | |
key | |
)}'` | |
); | |
} | |
this.manifestKeys.set(key, name); | |
} | |
for (let path of details.paths || []) { | |
getPath(this.modulePaths, path).modules.add(name); | |
} | |
} | |
} | |
/** | |
* Emits an `onManifestEntry` event for the top-level manifest entry | |
* on all relevant {@link ExtensionAPI} instances for the given | |
* extension. | |
* | |
* The API modules will be synchronously loaded if they have not been | |
* loaded already. | |
* | |
* @param {Extension} extension | |
* The extension for which to emit the events. | |
* @param {string} entry | |
* The name of the top-level manifest entry. | |
* | |
* @returns {*} | |
*/ | |
emitManifestEntry(extension, entry) { | |
let apiName = this.manifestKeys.get(entry); | |
if (apiName) { | |
let api = extension.apiManager.getAPI(apiName, extension); | |
return api.onManifestEntry(entry); | |
} | |
} | |
/** | |
* Emits an `onManifestEntry` event for the top-level manifest entry | |
* on all relevant {@link ExtensionAPI} instances for the given | |
* extension. | |
* | |
* The API modules will be asynchronously loaded if they have not been | |
* loaded already. | |
* | |
* @param {Extension} extension | |
* The extension for which to emit the events. | |
* @param {string} entry | |
* The name of the top-level manifest entry. | |
* | |
* @returns {Promise<*>} | |
*/ | |
async asyncEmitManifestEntry(extension, entry) { | |
let apiName = this.manifestKeys.get(entry); | |
if (apiName) { | |
let api = await extension.apiManager.asyncGetAPI(apiName, extension); | |
return api.onManifestEntry(entry); | |
} | |
} | |
/** | |
* Returns the {@link ExtensionAPI} instance for the given API module, | |
* for the given extension, in the given scope, synchronously loading | |
* and instantiating it if necessary. | |
* | |
* @param {string} name | |
* The name of the API module to load. | |
* @param {Extension} extension | |
* The extension for which to load the API. | |
* @param {string} [scope = null] | |
* The scope type for which to retrieve the API, or null if not | |
* being retrieved for a particular scope. | |
* | |
* @returns {ExtensionAPI?} | |
*/ | |
getAPI(name, extension, scope = null) { | |
if (!this._checkGetAPI(name, extension, scope)) { | |
return; | |
} | |
let apis = this.apis.get(extension); | |
if (apis.has(name)) { | |
return apis.get(name); | |
} | |
let module = this.loadModule(name); | |
let api = new module(extension); | |
apis.set(name, api); | |
return api; | |
} | |
/** | |
* Returns the {@link ExtensionAPI} instance for the given API module, | |
* for the given extension, in the given scope, asynchronously loading | |
* and instantiating it if necessary. | |
* | |
* @param {string} name | |
* The name of the API module to load. | |
* @param {Extension} extension | |
* The extension for which to load the API. | |
* @param {string} [scope = null] | |
* The scope type for which to retrieve the API, or null if not | |
* being retrieved for a particular scope. | |
* | |
* @returns {Promise<ExtensionAPI>?} | |
*/ | |
async asyncGetAPI(name, extension, scope = null) { | |
if (!this._checkGetAPI(name, extension, scope)) { | |
return; | |
} | |
let apis = this.apis.get(extension); | |
if (apis.has(name)) { | |
return apis.get(name); | |
} | |
let module = await this.asyncLoadModule(name); | |
// Check again, because async. | |
if (apis.has(name)) { | |
return apis.get(name); | |
} | |
let api = new module(extension); | |
apis.set(name, api); | |
return api; | |
} | |
/** | |
* Synchronously loads an API module, if not already loaded, and | |
* returns its ExtensionAPI constructor. | |
* | |
* @param {string} name | |
* The name of the module to load. | |
* | |
* @returns {class} | |
*/ | |
loadModule(name) { | |
let module = this.modules.get(name); | |
if (module.loaded) { | |
return this.global[name]; | |
} | |
this._checkLoadModule(module, name); | |
this.initGlobal(); | |
Services.scriptloader.loadSubScript(module.url, this.global); | |
module.loaded = true; | |
return this.global[name]; | |
} | |
/** | |
* aSynchronously loads an API module, if not already loaded, and | |
* returns its ExtensionAPI constructor. | |
* | |
* @param {string} name | |
* The name of the module to load. | |
* | |
* @returns {Promise<class>} | |
*/ | |
asyncLoadModule(name) { | |
let module = this.modules.get(name); | |
if (module.loaded) { | |
return Promise.resolve(this.global[name]); | |
} | |
if (module.asyncLoaded) { | |
return module.asyncLoaded; | |
} | |
this._checkLoadModule(module, name); | |
module.asyncLoaded = ChromeUtils.compileScript(module.url).then(script => { | |
this.initGlobal(); | |
script.executeInGlobal(this.global); | |
module.loaded = true; | |
return this.global[name]; | |
}); | |
return module.asyncLoaded; | |
} | |
asyncLoadSettingsModules() { | |
return Promise.all( | |
Array.from(this.settingsModules).map(apiName => | |
this.asyncLoadModule(apiName) | |
) | |
); | |
} | |
getModule(name) { | |
return this.modules.get(name); | |
} | |
/** | |
* Checks whether the given API module may be loaded for the given | |
* extension, in the given scope. | |
* | |
* @param {string} name | |
* The name of the API module to check. | |
* @param {Extension} extension | |
* The extension for which to check the API. | |
* @param {string} [scope = null] | |
* The scope type for which to check the API, or null if not | |
* being checked for a particular scope. | |
* | |
* @returns {boolean} | |
* Whether the module may be loaded. | |
*/ | |
_checkGetAPI(name, extension, scope = null) { | |
let module = this.getModule(name); | |
if ( | |
module.permissions && | |
!module.permissions.some(perm => extension.hasPermission(perm)) | |
) { | |
return false; | |
} | |
if (!scope) { | |
return true; | |
} | |
if (!module.scopes.includes(scope)) { | |
return false; | |
} | |
if (!Schemas.checkPermissions(module.namespaceName, extension)) { | |
return false; | |
} | |
return true; | |
} | |
_checkLoadModule(module, name) { | |
if (!module) { | |
throw new Error(`Module '${name}' does not exist`); | |
} | |
if (module.asyncLoaded) { | |
throw new Error(`Module '${name}' currently being lazily loaded`); | |
} | |
if (this.global && this.global[name]) { | |
throw new Error( | |
`Module '${name}' conflicts with existing global property` | |
); | |
} | |
} | |
/** | |
* Create a global object that is used as the shared global for all ext-*.js | |
* scripts that are loaded via `loadScript`. | |
* | |
* @returns {object} A sandbox that is used as the global by `loadScript`. | |
*/ | |
_createExtGlobal() { | |
let global = Cu.Sandbox( | |
Services.scriptSecurityManager.getSystemPrincipal(), | |
{ | |
wantXrays: false, | |
wantGlobalProperties: ["ChromeUtils"], | |
sandboxName: `Namespace of ext-*.js scripts for ${this.processType} (from: resource://gre/modules/ExtensionCommon.jsm)`, | |
} | |
); | |
Object.assign(global, { | |
Cc, | |
ChromeWorker, | |
Ci, | |
Cr, | |
Cu, | |
ExtensionAPI, | |
ExtensionAPIPersistent, | |
ExtensionCommon, | |
MatchGlob, | |
MatchPattern, | |
MatchPatternSet, | |
Services, | |
StructuredCloneHolder, | |
WebExtensionPolicy, | |
XPCOMUtils, | |
extensions: this, | |
global, | |
}); | |
ChromeUtils.import("resource://gre/modules/AppConstants.jsm", global); | |
XPCOMUtils.defineLazyGetter(global, "console", getConsole); | |
XPCOMUtils.defineLazyModuleGetters(global, { | |
ExtensionUtils: "resource://gre/modules/ExtensionUtils.jsm", | |
XPCOMUtils: "resource://gre/modules/XPCOMUtils.jsm", | |
}); | |
return global; | |
} | |
initGlobal() { | |
if (!this.global) { | |
this.global = this._createExtGlobal(); | |
} | |
} | |
/** | |
* Load an ext-*.js script. The script runs in its own scope, if it wishes to | |
* share state with another script it can assign to the `global` variable. If | |
* it wishes to communicate with this API manager, use `extensions`. | |
* | |
* @param {string} scriptUrl The URL of the ext-*.js script. | |
*/ | |
loadScript(scriptUrl) { | |
// Create the object in the context of the sandbox so that the script runs | |
// in the sandbox's context instead of here. | |
let scope = Cu.createObjectIn(this.global); | |
Services.scriptloader.loadSubScript(scriptUrl, scope); | |
// Save the scope to avoid it being garbage collected. | |
this._scriptScopes.push(scope); | |
} | |
} | |
class LazyAPIManager extends SchemaAPIManager { | |
constructor(processType, moduleData, schemaURLs) { | |
super(processType); | |
this.initialized = false; | |
this.initModuleData(moduleData); | |
this.schemaURLs = schemaURLs; | |
} | |
} | |
defineLazyGetter(LazyAPIManager.prototype, "schema", function() { | |
let root = new SchemaRoot(Schemas.rootSchema, this.schemaURLs); | |
root.parseSchemas(); | |
return root; | |
}); | |
class MultiAPIManager extends SchemaAPIManager { | |
constructor(processType, children) { | |
super(processType); | |
this.initialized = false; | |
this.children = children; | |
} | |
async lazyInit() { | |
if (!this.initialized) { | |
this.initialized = true; | |
for (let child of this.children) { | |
if (child.lazyInit) { | |
let res = child.lazyInit(); | |
if (res && typeof res.then === "function") { | |
await res; | |
} | |
} | |
mergePaths(this.modulePaths, child.modulePaths); | |
} | |
} | |
} | |
onStartup(extension) { | |
return Promise.all(this.children.map(child => child.onStartup(extension))); | |
} | |
getModule(name) { | |
for (let child of this.children) { | |
if (child.modules.has(name)) { | |
return child.modules.get(name); | |
} | |
} | |
} | |
loadModule(name) { | |
for (let child of this.children) { | |
if (child.modules.has(name)) { | |
return child.loadModule(name); | |
} | |
} | |
} | |
asyncLoadModule(name) { | |
for (let child of this.children) { | |
if (child.modules.has(name)) { | |
return child.asyncLoadModule(name); | |
} | |
} | |
} | |
} | |
defineLazyGetter(MultiAPIManager.prototype, "schema", function() { | |
let bases = this.children.map(child => child.schema); | |
// All API manager schema roots should derive from the global schema root, | |
// so it doesn't need its own entry. | |
if (bases[bases.length - 1] === Schemas) { | |
bases.pop(); | |
} | |
if (bases.length === 1) { | |
bases = bases[0]; | |
} | |
return new SchemaRoot(bases, new Map()); | |
}); | |
function LocaleData(data) { | |
this.defaultLocale = data.defaultLocale; | |
this.selectedLocale = data.selectedLocale; | |
this.locales = data.locales || new Map(); | |
this.warnedMissingKeys = new Set(); | |
// Map(locale-name -> Map(message-key -> localized-string)) | |
// | |
// Contains a key for each loaded locale, each of which is a | |
// Map of message keys to their localized strings. | |
this.messages = data.messages || new Map(); | |
if (data.builtinMessages) { | |
this.messages.set(this.BUILTIN, data.builtinMessages); | |
} | |
} | |
LocaleData.prototype = { | |
// Representation of the object to send to content processes. This | |
// should include anything the content process might need. | |
serialize() { | |
return { | |
defaultLocale: this.defaultLocale, | |
selectedLocale: this.selectedLocale, | |
messages: this.messages, | |
locales: this.locales, | |
}; | |
}, | |
BUILTIN: "@@BUILTIN_MESSAGES", | |
has(locale) { | |
return this.messages.has(locale); | |
}, | |
// https://developer.chrome.com/extensions/i18n | |
localizeMessage(message, substitutions = [], options = {}) { | |
let defaultOptions = { | |
defaultValue: "", | |
cloneScope: null, | |
}; | |
let locales = this.availableLocales; | |
if (options.locale) { | |
locales = new Set( | |
[this.BUILTIN, options.locale, this.defaultLocale].filter(locale => | |
this.messages.has(locale) | |
) | |
); | |
} | |
options = Object.assign(defaultOptions, options); | |
// Message names are case-insensitive, so normalize them to lower-case. | |
message = message.toLowerCase(); | |
for (let locale of locales) { | |
let messages = this.messages.get(locale); | |
if (messages.has(message)) { | |
let str = messages.get(message); | |
if (!str.includes("$")) { | |
return str; | |
} | |
if (!Array.isArray(substitutions)) { | |
substitutions = [substitutions]; | |
} | |
let replacer = (matched, index, dollarSigns) => { | |
if (index) { | |
// This is not quite Chrome-compatible. Chrome consumes any number | |
// of digits following the $, but only accepts 9 substitutions. We | |
// accept any number of substitutions. | |
index = parseInt(index, 10) - 1; | |
return index in substitutions ? substitutions[index] : ""; | |
} | |
// For any series of contiguous `$`s, the first is dropped, and | |
// the rest remain in the output string. | |
return dollarSigns; | |
}; | |
return str.replace(/\$(?:([1-9]\d*)|(\$+))/g, replacer); | |
} | |
} | |
// Check for certain pre-defined messages. | |
if (message == "@@ui_locale") { | |
return this.uiLocale; | |
} else if (message.startsWith("@@bidi_")) { | |
let rtl = Services.locale.isAppLocaleRTL; | |
if (message == "@@bidi_dir") { | |
return rtl ? "rtl" : "ltr"; | |
} else if (message == "@@bidi_reversed_dir") { | |
return rtl ? "ltr" : "rtl"; | |
} else if (message == "@@bidi_start_edge") { | |
return rtl ? "right" : "left"; | |
} else if (message == "@@bidi_end_edge") { | |
return rtl ? "left" : "right"; | |
} | |
} | |
if (!this.warnedMissingKeys.has(message)) { | |
let error = `Unknown localization message ${message}`; | |
if (options.cloneScope) { | |
error = new options.cloneScope.Error(error); | |
} | |
Cu.reportError(error); | |
this.warnedMissingKeys.add(message); | |
} | |
return options.defaultValue; | |
}, | |
// Localize a string, replacing all |__MSG_(.*)__| tokens with the | |
// matching string from the current locale, as determined by | |
// |this.selectedLocale|. | |
// | |
// This may not be called before calling either |initLocale| or | |
// |initAllLocales|. | |
localize(str, locale = this.selectedLocale) { | |
if (!str) { | |
return str; | |
} | |
return str.replace(/__MSG_([A-Za-z0-9@_]+?)__/g, (matched, message) => { | |
return this.localizeMessage(message, [], { | |
locale, | |
defaultValue: matched, | |
}); | |
}); | |
}, | |
// Validates the contents of a locale JSON file, normalizes the | |
// messages into a Map of message key -> localized string pairs. | |
addLocale(locale, messages, extension) { | |
let result = new Map(); | |
let isPlainObject = obj => | |
obj && | |
typeof obj === "object" && | |
ChromeUtils.getClassName(obj) === "Object"; | |
// Chrome does not document the semantics of its localization | |
// system very well. It handles replacements by pre-processing | |
// messages, replacing |$[a-zA-Z0-9@_]+$| tokens with the value of their | |
// replacements. Later, it processes the resulting string for | |
// |$[0-9]| replacements. | |
// | |
// Again, it does not document this, but it accepts any number | |
// of sequential |$|s, and replaces them with that number minus | |
// 1. It also accepts |$| followed by any number of sequential | |
// digits, but refuses to process a localized string which | |
// provides more than 9 substitutions. | |
if (!isPlainObject(messages)) { | |
extension.packagingError(`Invalid locale data for ${locale}`); | |
return result; | |
} | |
for (let key of Object.keys(messages)) { | |
let msg = messages[key]; | |
if (!isPlainObject(msg) || typeof msg.message != "string") { | |
extension.packagingError( | |
`Invalid locale message data for ${locale}, message ${JSON.stringify( | |
key | |
)}` | |
); | |
continue; | |
} | |
// Substitutions are case-insensitive, so normalize all of their names | |
// to lower-case. | |
let placeholders = new Map(); | |
if ("placeholders" in msg && isPlainObject(msg.placeholders)) { | |
for (let key of Object.keys(msg.placeholders)) { | |
placeholders.set(key.toLowerCase(), msg.placeholders[key]); | |
} | |
} | |
let replacer = (match, name) => { | |
let replacement = placeholders.get(name.toLowerCase()); | |
if (isPlainObject(replacement) && "content" in replacement) { | |
return replacement.content; | |
} | |
return ""; | |
}; | |
let value = msg.message.replace(/\$([A-Za-z0-9@_]+)\$/g, replacer); | |
// Message names are also case-insensitive, so normalize them to lower-case. | |
result.set(key.toLowerCase(), value); | |
} | |
this.messages.set(locale, result); | |
return result; | |
}, | |
get acceptLanguages() { | |
let result = Services.prefs.getComplexValue( | |
"intl.accept_languages", | |
Ci.nsIPrefLocalizedString | |
).data; | |
return result.split(/\s*,\s*/g); | |
}, | |
get uiLocale() { | |
return Services.locale.appLocaleAsBCP47; | |
}, | |
}; | |
defineLazyGetter(LocaleData.prototype, "availableLocales", function() { | |
return new Set( | |
[this.BUILTIN, this.selectedLocale, this.defaultLocale].filter(locale => | |
this.messages.has(locale) | |
) | |
); | |
}); | |
/** | |
* This is a generic class for managing event listeners. | |
* | |
* @example | |
* new EventManager({ | |
* context, | |
* name: "api.subAPI", | |
* register: fire => { | |
* let listener = (...) => { | |
* // Fire any listeners registered with addListener. | |
* fire.async(arg1, arg2); | |
* }; | |
* // Register the listener. | |
* SomehowRegisterListener(listener); | |
* return () => { | |
* // Return a way to unregister the listener. | |
* SomehowUnregisterListener(listener); | |
* }; | |
* } | |
* }).api() | |
* | |
* The result is an object with addListener, removeListener, and | |
* hasListener methods. `context` is an add-on scope (either an | |
* ExtensionContext in the chrome process or ExtensionContext in a | |
* content process). | |
*/ | |
class EventManager { | |
/* | |
* A persistent event must provide module and name. Additionally the | |
* module must implement primeListeners in the ExtensionAPI class. | |
* | |
* A startup blocking event must also add the startupBlocking flag in | |
* ext-toolkit.json or ext-browser.json. | |
* | |
* Listeners synchronously added from a background extension context | |
* will be persisted, for a persistent background script only the | |
* "startup blocking" events will be persisted. | |
* | |
* EventManager instances created in a child process can't persist any listener. | |
* | |
* @param {object} params | |
* Parameters that control this EventManager. | |
* @param {BaseContext} params.context | |
* An object representing the extension instance using this event. | |
* @param {string} params.module | |
* The API module name, required for persistent events. | |
* @param {string} params.event | |
* The API event name, required for persistent events. | |
* @param {ExtensionAPI} params.extensionApi | |
* The API intance. If the API uses the ExtensionAPIPersistent class, some simplification is | |
* possible by passing the api (self or this) and the internal register function will be used. | |
* @param {string} [params.name] | |
* A name used only for debugging. If not provided, name is built from module and event. | |
* @param {functon} params.register | |
* A function called whenever a new listener is added. | |
* @param {boolean} [params.inputHandling=false] | |
* If true, the "handling user input" flag is set while handlers | |
* for this event are executing. | |
*/ | |
constructor(params) { | |
let { | |
context, | |
module, | |
event, | |
name, | |
register, | |
extensionApi, | |
inputHandling = false, | |
resetIdleOnEvent = true, | |
} = params; | |
this.context = context; | |
this.module = module; | |
this.event = event; | |
this.name = name; | |
this.register = register; | |
this.inputHandling = inputHandling; | |
this.resetIdleOnEvent = resetIdleOnEvent; | |
if (!name) { | |
this.name = `${module}.${event}`; | |
} | |
if (!this.register && extensionApi instanceof ExtensionAPIPersistent) { | |
this.register = (fire, ...params) => { | |
return extensionApi.registerEventListener( | |
{ context, event, fire }, | |
params | |
); | |
}; | |
} | |
if (!this.register) { | |
throw new Error( | |
`EventManager requires register method for ${this.name}.` | |
); | |
} | |
this.canPersistEvents = | |
module && | |
event && | |
["background", "background_worker"].includes(this.context.viewType) && | |
this.context.envType == "addon_parent"; | |
if (this.canPersistEvents) { | |
let { extension } = context; | |
if (extension.persistentBackground) { | |
// Persistent backgrounds will only persist startup blocking APIs. | |
let api_module = extension.apiManager.getModule(this.module); | |
if (!api_module?.startupBlocking) { | |
this.canPersistEvents = false; | |
} | |
} else { | |
// Event pages will persist all APIs that implement primeListener. | |
// The api is already loaded so this does not have performance effect. | |
let api = extension.apiManager.getAPI( | |
this.module, | |
extension, | |
"addon_parent" | |
); | |
// If the api doesn't implement primeListener we do not persist the events. | |
if (!api?.primeListener) { | |
this.canPersistEvents = false; | |
} | |
} | |
} | |
this.unregister = new Map(); | |
this.remove = new Map(); | |
} | |
/* | |
* Information about listeners to persistent events is associated with | |
* the extension to which they belong. Any extension thas has such | |
* listeners has a property called `persistentListeners` that is a | |
* 3-level Map. The first 2 keys are the module name (e.g., webRequest) | |
* and the name of the event within the module (e.g., onBeforeRequest). | |
* The third level of the map is used to track multiple listeners for | |
* the same event, these listeners are distinguished by the extra arguments | |
* passed to addListener(). For quick lookups, the key to the third Map | |
* is the result of calling uneval() on the array of extra arguments. | |
* | |
* The value stored in the Map is a plain object with a property called | |
* `params` that is the original (ie, not uneval()ed) extra arguments to | |
* addListener(). For a primed listener (i.e., the stub listener created | |
* during browser startup before the extension background page is started, | |
* the object also has a `primed` property that holds the things needed | |
* to handle events during startup and eventually connect the listener | |
* with a callback registered from the extension. | |
* | |
* @param {Extension} extension | |
* @returns {boolean} True if the extension had any persistent listeners. | |
*/ | |
static _initPersistentListeners(extension) { | |
if (extension.persistentListeners) { | |
return !!extension.persistentListeners.size; | |
} | |
let listeners = new DefaultMap(() => new DefaultMap(() => new Map())); | |
extension.persistentListeners = listeners; | |
let persistentListeners = extension.startupData?.persistentListeners; | |
if (!persistentListeners) { | |
return false; | |
} | |
let found = false; | |
for (let [module, entry] of Object.entries(persistentListeners)) { | |
for (let [event, paramlists] of Object.entries(entry)) { | |
for (let paramlist of paramlists) { | |
let key = uneval(paramlist); | |
listeners | |
.get(module) | |
.get(event) | |
.set(key, { params: paramlist }); | |
found = true; | |
} | |
} | |
} | |
return found; | |
} | |
// Extract just the information needed at startup for all persistent | |
// listeners, and arrange for it to be saved. This should be called | |
// whenever the set of persistent listeners for an extension changes. | |
static _writePersistentListeners(extension) { | |
let startupListeners = {}; | |
for (let [module, moduleEntry] of extension.persistentListeners) { | |
startupListeners[module] = {}; | |
for (let [event, eventEntry] of moduleEntry) { | |
startupListeners[module][event] = Array.from( | |
eventEntry.values(), | |
listener => listener.params | |
); | |
} | |
} | |
extension.startupData.persistentListeners = startupListeners; | |
extension.saveStartupData(); | |
} | |
// Set up "primed" event listeners for any saved event listeners | |
// in an extension's startup data. | |
// This function is only called during browser startup, it stores details | |
// about all primed listeners in the extension's persistentListeners Map. | |
static primeListeners(extension, isInStartup = false) { | |
if (!EventManager._initPersistentListeners(extension)) { | |
return; | |
} | |
for (let [module, moduleEntry] of extension.persistentListeners) { | |
// If we're in startup, we only want to continue attempting to prime a | |
// subset of events that should be startup blocking. | |
if (isInStartup) { | |
let api_module = extension.apiManager.getModule(module); | |
if (!api_module.startupBlocking) { | |
continue; | |
} | |
} | |
let api = extension.apiManager.getAPI(module, extension, "addon_parent"); | |
// If an extension is upgraded and a permission, such as webRequest, is | |
// removed, we will have been called but the API is no longer available. | |
if (!api?.primeListener) { | |
// The runtime module no longer implements primed listeners, drop them. | |
extension.persistentListeners.delete(module); | |
EventManager._writePersistentListeners(extension); | |
continue; | |
} | |
for (let [event, listeners] of moduleEntry) { | |
for (let [key, listener] of listeners) { | |
let primed = { pendingEvents: [] }; | |
let fireEvent = (...args) => | |
new Promise((resolve, reject) => { | |
if (!listener.primed) { | |
reject( | |
new Error( | |
`primed listener ${module}.${event} not re-registered` | |
) | |
); | |
return; | |
} | |
primed.pendingEvents.push({ args, resolve, reject }); | |
extension.emit("background-script-event"); | |
}); | |
let fire = { | |
wakeup: () => extension.wakeupBackground(), | |
sync: fireEvent, | |
async: fireEvent, | |
// fire.async for ProxyContextParent is already not cloning. | |
raw: fireEvent, | |
}; | |
try { | |
let handler = api.primeListener( | |
event, | |
fire, | |
listener.params, | |
isInStartup | |
); | |
if (handler) { | |
listener.primed = primed; | |
Object.assign(primed, handler); | |
} | |
} catch (e) { | |
Cu.reportError( | |
`Error priming listener ${module}.${event}: ${e} :: ${e.stack}` | |
); | |
// Force this listener to be cleared. | |
listener.error = true; | |
} | |
// If an attempt to prime a listener failed, ensure it is cleared now. | |
// If a module is a startup blocking module, not all listeners may | |
// get primed during early startup. For that reason, we don't clear | |
// persisted listeners during early startup. At the end of background | |
// execution any listeners that were not renewed will be cleared. | |
if (listener.error || (!isInStartup && !listener.primed)) { | |
EventManager.clearPersistentListener(extension, module, event, key); | |
} | |
} | |
} | |
} | |
} | |
/** | |
* This is called as a result of background script startup-finished and shutdown. | |
* | |
* After startup, it removes any remaining primed listeners. These exist if the | |
* listener was not renewed during startup. In this case the persisted listener | |
* data is also removed. | |
* | |
* During shutdown, care should be taken to set clearPersistent to false. | |
* persisted listener data should NOT be cleared during shutdown. | |
* | |
* @param {Extension} extension | |
* @param {boolean} clearPersistent whether the persisted listener data should be cleared. | |
*/ | |
static clearPrimedListeners(extension, clearPersistent = true) { | |
if (!extension.persistentListeners) { | |
return; | |
} | |
for (let [module, moduleEntry] of extension.persistentListeners) { | |
for (let [event, listeners] of moduleEntry) { | |
for (let [key, listener] of listeners) { | |
let { primed, added } = listener; | |
// When a primed listener is added or renewed during initial | |
// background execution we set an added flag. If it was primed | |
// when added, primed is set to null. | |
if (added) { | |
continue; | |
} | |
if (primed) { | |
// When a primed listener was not renewed, primed will still be truthy. | |
// These need to be cleared on shutdown (important for event pages), but | |
// we only clear the persisted listener data after the startup of a background. | |
// Release any pending events and unregister the primed handler. | |
listener.primed = null; | |
for (let evt of primed.pendingEvents) { | |
evt.reject(new Error("listener not re-registered")); | |
} | |
primed.unregister(); | |
} | |
// Clear any persisted events that were not renewed, should typically | |
// only be done at the end of the background page load. | |
if (clearPersistent) { | |
EventManager.clearPersistentListener(extension, module, event, key); | |
} | |
} | |
} | |
} | |
} | |
// Record the fact that there is a listener for the given event in | |
// the given extension. `args` is an Array containing any extra | |
// arguments that were passed to addListener(). | |
static savePersistentListener(extension, module, event, args = []) { | |
EventManager._initPersistentListeners(extension); | |
let key = uneval(args); | |
extension.persistentListeners | |
.get(module) | |
.get(event) | |
// when writing, only args are written, other properties are dropped | |
.set(key, { params: args, added: true }); | |
EventManager._writePersistentListeners(extension); | |
} | |
// Remove the record for the given event listener from the extension's | |
// startup data. `key` must be a string, the result of calling uneval() | |
// on the array of extra arguments originally passed to addListener(). | |
static clearPersistentListener(extension, module, event, key = uneval([])) { | |
let listeners = extension.persistentListeners.get(module).get(event); | |
listeners.delete(key); | |
if (listeners.size == 0) { | |
let moduleEntry = extension.persistentListeners.get(module); | |
moduleEntry.delete(event); | |
if (moduleEntry.size == 0) { | |
extension.persistentListeners.delete(module); | |
} | |
} | |
EventManager._writePersistentListeners(extension); | |
} | |
addListener(callback, ...args) { | |
if (this.unregister.has(callback)) { | |
return; | |
} | |
this.context.logActivity("api_call", `${this.name}.addListener`, { args }); | |
let shouldFire = () => { | |
if (this.context.unloaded) { | |
dump(`${this.name} event fired after context unloaded.\n`); | |
} else if (!this.context.active) { | |
dump(`${this.name} event fired while context is inactive.\n`); | |
} else if (this.unregister.has(callback)) { | |
return true; | |
} | |
return false; | |
}; | |
let { extension } = this.context; | |
const resetIdle = () => { | |
if (this.resetIdleOnEvent) { | |
extension?.emit("background-script-reset-idle"); | |
} | |
}; | |
let fire = { | |
// Bug 1754866 fire.sync doesn't match documentation. | |
sync: (...args) => { | |
if (shouldFire()) { | |
resetIdle(); | |
let result = this.context.applySafe(callback, args); | |
this.context.logActivity("api_event", this.name, { args, result }); | |
return result; | |
} | |
}, | |
async: (...args) => { | |
return Promise.resolve().then(() => { | |
if (shouldFire()) { | |
resetIdle(); | |
let result = this.context.applySafe(callback, args); | |
this.context.logActivity("api_event", this.name, { args, result }); | |
return result; | |
} | |
}); | |
}, | |
raw: (...args) => { | |
if (!shouldFire()) { | |
throw new Error("Called raw() on unloaded/inactive context"); | |
} | |
resetIdle(); | |
let result = Reflect.apply(callback, null, args); | |
this.context.logActivity("api_event", this.name, { args, result }); | |
return result; | |
}, | |
asyncWithoutClone: (...args) => { | |
return Promise.resolve().then(() => { | |
if (shouldFire()) { | |
resetIdle(); | |
let result = this.context.applySafeWithoutClone(callback, args); | |
this.context.logActivity("api_event", this.name, { args, result }); | |
return result; | |
} | |
}); | |
}, | |
}; | |
let { module, event } = this; | |
let unregister = null; | |
let recordStartupData = false; | |
// If this is a persistent event, check for a listener that was already | |
// created during startup. If there is one, use it and don't create a | |
// new one. | |
if (this.canPersistEvents) { | |
// Once a background is started, listenerPromises is set to null. At | |
// that point, we stop recording startup data. | |
recordStartupData = !!this.context.listenerPromises; | |
let key = uneval(args); | |
EventManager._initPersistentListeners(extension); | |
let listener = extension.persistentListeners | |
.get(module) | |
.get(event) | |
.get(key); | |
if (listener) { | |
// During startup only a subset of persisted listeners are primed. As | |
// well, each API determines whether to prime a specific listener. | |
let { primed } = listener; | |
if (primed) { | |
listener.primed = null; | |
primed.convert(fire, this.context); | |
unregister = primed.unregister; | |
for (let evt of primed.pendingEvents) { | |
evt.resolve(fire.async(...evt.args)); | |
} | |
} | |
listener.added = true; | |
recordStartupData = false; | |
this.remove.set(callback, () => { | |
EventManager.clearPersistentListener( | |
extension, | |
module, | |
event, | |
uneval(args) | |
); | |
}); | |
} | |
} | |
if (!unregister) { | |
unregister = this.register(fire, ...args); | |
} | |
this.unregister.set(callback, unregister); | |
this.context.callOnClose(this); | |
// If this is a new listener for a persistent event, record | |
// the details for subsequent startups. | |
if (recordStartupData) { | |
EventManager.savePersistentListener(extension, module, event, args); | |
this.remove.set(callback, () => { | |
EventManager.clearPersistentListener( | |
extension, | |
module, | |
event, | |
uneval(args) | |
); | |
}); | |
} | |
} | |
removeListener(callback, clearPersistentListener = true) { | |
if (!this.unregister.has(callback)) { | |
return; | |
} | |
this.context.logActivity("api_call", `${this.name}.removeListener`, { | |
args: [], | |
}); | |
let unregister = this.unregister.get(callback); | |
this.unregister.delete(callback); | |
try { | |
unregister(); | |
} catch (e) { | |
Cu.reportError(e); | |
} | |
if (clearPersistentListener && this.remove.has(callback)) { | |
let cleanup = this.remove.get(callback); | |
this.remove.delete(callback); | |
cleanup(); | |
} | |
if (this.unregister.size == 0) { | |
this.context.forgetOnClose(this); | |
} | |
} | |
hasListener(callback) { | |
return this.unregister.has(callback); | |
} | |
revoke() { | |
for (let callback of this.unregister.keys()) { | |
this.removeListener(callback, false); | |
} | |
} | |
close() { | |
this.revoke(); | |
} | |
api() { | |
return { | |
addListener: (...args) => this.addListener(...args), | |
removeListener: (...args) => this.removeListener(...args), | |
hasListener: (...args) => this.hasListener(...args), | |
setUserInput: this.inputHandling, | |
[Schemas.REVOKE]: () => this.revoke(), | |
}; | |
} | |
} | |
// Simple API for event listeners where events never fire. | |
function ignoreEvent(context, name) { | |
return { | |
addListener: function(callback) { | |
let id = context.extension.id; | |
let frame = Components.stack.caller; | |
let msg = `In add-on ${id}, attempting to use listener "${name}", which is unimplemented.`; | |
let scriptError = Cc["@mozilla.org/scripterror;1"].createInstance( | |
Ci.nsIScriptError | |
); | |
scriptError.init( | |
msg, | |
frame.filename, | |
null, | |
frame.lineNumber, | |
frame.columnNumber, | |
Ci.nsIScriptError.warningFlag, | |
"content javascript" | |
); | |
Services.console.logMessage(scriptError); | |
}, | |
removeListener: function(callback) {}, | |
hasListener: function(callback) {}, | |
}; | |
} | |
const stylesheetMap = new DefaultMap(url => { | |
let uri = Services.io.newURI(url); | |
return styleSheetService.preloadSheet(uri, styleSheetService.AGENT_SHEET); | |
}); | |
ExtensionCommon = { | |
BaseContext, | |
CanOfAPIs, | |
EventManager, | |
ExtensionAPI, | |
EventEmitter, | |
LocalAPIImplementation, | |
LocaleData, | |
NoCloneSpreadArgs, | |
SchemaAPIInterface, | |
SchemaAPIManager, | |
SpreadArgs, | |
checkLoadURL, | |
defineLazyGetter, | |
getConsole, | |
ignoreEvent, | |
instanceOf, | |
makeWidgetId, | |
normalizeTime, | |
runSafeSyncWithoutClone, | |
stylesheetMap, | |
withHandlingUserInput, | |
MultiAPIManager, | |
LazyAPIManager, | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Zimbra Collaboration Suite Web Client | |
* Copyright (C) 2004-2017 Synacor, Inc. | |
* https://www.zimbra.com/license | |
*/ | |
if(AjxPackage.define("NewWindow_1")){if(AjxPackage.define("ajax.core.AjxCore")){AjxCore=function(){}; | |
AjxCore._objectIds=[null]; | |
AjxCore.assignId=function(a){var c=AjxCore._objectIds.length; | |
AjxCore._objectIds[c]=a; | |
return c | |
}; | |
AjxCore.unassignId=function(a){AjxCore._objectIds[a]=null | |
}; | |
AjxCore.objectWithId=function(a){return AjxCore._objectIds[a] | |
}; | |
AjxCore.addListener=function(d,a,c){d=AjxCore._getEventSource(d); | |
var e=AjxCore._getListenerStruct(d,a,true); | |
e.list[e.list.length]=c | |
}; | |
AjxCore.setEventHandler=function(d,a,c){d=AjxCore._getEventSource(d); | |
var e=AjxCore._getListenerStruct(d,a,true); | |
e.single=c | |
}; | |
AjxCore.removeListener=function(f,c,e){f=AjxCore._getEventSource(f); | |
var g=AjxCore._getListenerStruct(f,c); | |
if(g){var h=g.list; | |
var a=h.length; | |
for(var d=0; | |
d<a; | |
d++){if(h[d]==e){h[d]=null | |
}}}}; | |
AjxCore.removeAllListeners=function(e,c){e=AjxCore._getEventSource(e); | |
var f=AjxCore._getListenerStruct(e,c); | |
if(f){var g=f.list; | |
var a=g.length; | |
for(var d=0; | |
d<a; | |
d++){g[d]=null | |
}}AjxCore.unassignId(f.id) | |
}; | |
AjxCore.notifyListeners=function(d,a,c){d=AjxCore._getEventSource(d); | |
var e=AjxCore._getListenerStruct(d,a); | |
if(e){d[a](c) | |
}}; | |
AjxCore._getEventSource=function(a){if(typeof(a)=="string"){a=document.getElementById(a) | |
}return a | |
}; | |
AjxCore.getListenerStruct=function(c,a){return AjxCore._getListenerStruct(c,a) | |
}; | |
AjxCore._getListenerStruct=function(d,a,c){var e=null; | |
if(d[a]){var f=d[a]._lsListenerStructId; | |
e=AjxCore.objectWithId(f) | |
}else{if(c){e=AjxCore._setupListener(d,a) | |
}}return e | |
}; | |
AjxCore._setupListener=function(d,a,f){var e=new Object(); | |
e.list=new Array(); | |
e.single=null; | |
var f=e.id=AjxCore.assignId(e); | |
var c=AjxCore._createListenerClosure(f); | |
d[a]=c; | |
d[a]._lsListenerStructId=f; | |
return e | |
}; | |
AjxCore._createListenerClosure=function(id){var closure=function(arg1){var listenerStruct=AjxCore.objectWithId(id); | |
var listenerList=listenerStruct.list; | |
var len=listenerList.length; | |
for(var i=0; | |
i<len; | |
i++){var callback=listenerList[i]; | |
if(callback){if(typeof(callback)=="string"){eval(callback) | |
}else{if(callback.handleEvent){callback.handleEvent(arg1,this) | |
}else{callback(arg1,this) | |
}}}}if(listenerStruct.single){var callback=listenerStruct.single; | |
if(typeof(callback)=="string"){eval(callback) | |
}else{return callback.handleEvent?callback.handleEvent(arg1,this):callback(arg1,this) | |
}}}; | |
return closure | |
}; | |
AjxCore.addOnloadListener=function(a){if(window.onload&&(!window.onload._lsListenerStructId)){var c=window.onload; | |
window.onload=null; | |
AjxCore.addListener(window,"onload",c) | |
}AjxCore.addListener(window,"onload",a) | |
}; | |
AjxCore.addOnunloadListener=function(a){if(window.onunload&&(!window.onunload._lsListenerStructId)){var c=window.onunload; | |
window.onunload=null; | |
AjxCore.addListener(window,"onunload",c) | |
}AjxCore.addListener(window,"onunload",a) | |
} | |
}if(AjxPackage.define("ajax.debug.AjxDebug")){AjxDebug=function(a){if(arguments.length==0){a={} | |
}else{if(typeof arguments[0]=="number"){a={level:arguments[0],name:arguments[1],showTime:arguments[2]} | |
}}this._showTime=a.showTime; | |
this._target=a.target||AjxDebug.TGT_WINDOW; | |
this._showTiming=false; | |
this._startTimePt=this._lastTimePt=0; | |
this._dbgWindowInited=false; | |
this._msgQueue=[]; | |
this._isPrevWinOpen=false; | |
this.setDebugLevel(a.level) | |
}; | |
AjxDebug.prototype.toString=function(){return"AjxDebug" | |
}; | |
AjxDebug.prototype.isAjxDebug=true; | |
AjxDebug.NONE=0; | |
AjxDebug.DBG1=1; | |
AjxDebug.DBG2=2; | |
AjxDebug.DBG3=3; | |
AjxDebug.TGT_WINDOW="window"; | |
AjxDebug.TGT_CONSOLE="console"; | |
AjxDebug.BUFFER={}; | |
AjxDebug.BUFFER_MAX={}; | |
AjxDebug.DEFAULT_TYPE="debug"; | |
AjxDebug.RPC="rpc"; | |
AjxDebug.NOTIFY="notify"; | |
AjxDebug.EXCEPTION="exception"; | |
AjxDebug.CALENDAR="calendar"; | |
AjxDebug.REPLY="reply"; | |
AjxDebug.SCROLL="scroll"; | |
AjxDebug.BAD_JSON="bad_json"; | |
AjxDebug.PREFS="prefs"; | |
AjxDebug.PROGRESS="progress"; | |
AjxDebug.REMINDER="reminder"; | |
AjxDebug.OFFLINE="offline"; | |
AjxDebug.TAG_ICON="tagIcon"; | |
AjxDebug.DATA_URI="dataUri"; | |
AjxDebug.MSG_DISPLAY="msgDisplay"; | |
AjxDebug.ZIMLET="zimlet"; | |
AjxDebug.KEYBOARD="kbnav"; | |
AjxDebug.FOCUS="focus"; | |
AjxDebug.FOCUS1="focus1"; | |
AjxDebug.ACCESSIBILITY="a11y"; | |
AjxDebug.DRAFT="draft"; | |
AjxDebug.BUFFER_MAX[AjxDebug.DEFAULT_TYPE]=0; | |
AjxDebug.BUFFER_MAX[AjxDebug.RPC]=200; | |
AjxDebug.BUFFER_MAX[AjxDebug.NOTIFY]=400; | |
AjxDebug.BUFFER_MAX[AjxDebug.EXCEPTION]=100; | |
AjxDebug.BUFFER_MAX[AjxDebug.CALENDAR]=400; | |
AjxDebug.BUFFER_MAX[AjxDebug.REPLY]=400; | |
AjxDebug.BUFFER_MAX[AjxDebug.SCROLL]=100; | |
AjxDebug.BUFFER_MAX[AjxDebug.BAD_JSON]=200; | |
AjxDebug.BUFFER_MAX[AjxDebug.PREFS]=200; | |
AjxDebug.BUFFER_MAX[AjxDebug.REMINDER]=200; | |
AjxDebug.BUFFER_MAX[AjxDebug.OFFLINE]=400; | |
AjxDebug.BUFFER_MAX[AjxDebug.TAG_ICON]=200; | |
AjxDebug.BUFFER_MAX[AjxDebug.PROGRESS]=200; | |
AjxDebug.BUFFER_MAX[AjxDebug.DATA_URI]=200; | |
AjxDebug.BUFFER_MAX[AjxDebug.MSG_DISPLAY]=200; | |
AjxDebug.BUFFER_MAX[AjxDebug.ZIMLET]=200; | |
AjxDebug.BUFFER_MAX[AjxDebug.KEYBOARD]=null; | |
AjxDebug.BUFFER_MAX[AjxDebug.FOCUS]=null; | |
AjxDebug.BUFFER_MAX[AjxDebug.ACCESSIBILITY]=null; | |
AjxDebug.BUFFER_MAX[AjxDebug.DRAFT]=200; | |
AjxDebug.MAX_OUT=25000; | |
AjxDebug._CONTENT_FRAME_ID="AjxDebug_CF"; | |
AjxDebug._LINK_FRAME_ID="AjxDebug_LF"; | |
AjxDebug._BOTTOM_FRAME_ID="AjxDebug_BFI"; | |
AjxDebug._BOTTOM_FRAME_NAME="AjxDebug_BFN"; | |
AjxDebug.prototype.setTitle=function(a){if(this._document&&!AjxEnv.isIE){this._document.title=a | |
}}; | |
AjxDebug.prototype.setDebugLevel=function(a){this._level=parseInt(a)||a; | |
this._enable(this._level!=AjxDebug.NONE) | |
}; | |
AjxDebug.prototype.getDebugLevel=function(){return this._level | |
}; | |
AjxDebug.prototype.println=function(g,f,e){if(!this._isWriteable()){return | |
}try{var a=this._handleArgs(arguments); | |
if(!a){return | |
}f=a.args.join(""); | |
var d=(this._target!=AjxDebug.TGT_CONSOLE)?"<br>":""; | |
this._add({msg:this._timestamp()+f+d,linkName:a.linkName,level:g}) | |
}catch(c){}}; | |
AjxDebug.prototype.isDisabled=function(){return !this._enabled | |
}; | |
AjxDebug.prototype.dumpObj=function(f,d,c,e){if(!this._isWriteable()){return | |
}var a=this._handleArgs(arguments); | |
if(!a){return | |
}d=a.args[0]; | |
if(!d){return | |
}c=a.args[1]; | |
this._add({obj:d,linkName:a.linkName,showFuncs:c,level:f}) | |
}; | |
AjxDebug.prototype.printRaw=function(e,d,c){if(!this._isWriteable()){return | |
}var a=this._handleArgs(arguments); | |
if(!a){return | |
}this._add({obj:a.args[0],isRaw:true,linkName:a.linkName,level:e}) | |
}; | |
AjxDebug.prototype.printXML=function(e,d,c){if(!this._isWriteable()){return | |
}var a=this._handleArgs(arguments); | |
if(!a){return | |
}d=a.args[0]; | |
if(!d){return | |
}if(d.length>AjxDebug.MAX_OUT){this.printRaw(d); | |
return | |
}this._add({obj:d,isXml:true,linkName:a.linkName,level:e}) | |
}; | |
AjxDebug.prototype.display=function(e,d,c){if(!this._isWriteable()){return | |
}var a=this._handleArgs(arguments); | |
if(!a){return | |
}d=a.args[0]; | |
d=d.replace(/\r?\n/g,"[crlf]"); | |
d=d.replace(/ /g,"[space]"); | |
d=d.replace(/\t/g,"[tab]"); | |
this.printRaw(e,d,c) | |
}; | |
AjxDebug.prototype.showTiming=function(c,f){this._showTiming=c; | |
if(c){this._enable(true) | |
}var d=c?"on":"off"; | |
var e="Turning timing info "+d; | |
if(f){e=e+": "+f | |
}var a=new DebugMessage({msg:e}); | |
this._addMessage(a); | |
this._startTimePt=this._lastTimePt=new Date().getTime() | |
}; | |
AjxDebug.prototype.timePt=function(i,d){if(!this._showTiming||!this._isWriteable()){return | |
}if(d){this._startTimePt=this._lastTimePt=new Date().getTime() | |
}var f=new Date().getTime(); | |
var a=f-this._startTimePt; | |
var c=f-this._lastTimePt; | |
this._lastTimePt=f; | |
var e=d?"<br/>":""; | |
i=i?" "+i:""; | |
var h=[e,"[",a," / ",c,"]",i].join(""); | |
var g="<div>"+h+"</div>"; | |
this._addMessage(new DebugMessage({msg:g})); | |
return c | |
}; | |
AjxDebug.prototype.getContentFrame=function(){if(this._contentFrame){return this._contentFrame | |
}if(this._debugWindow&&this._debugWindow.document){return this._debugWindow.document.getElementById(AjxDebug._CONTENT_FRAME_ID) | |
}return null | |
}; | |
AjxDebug.prototype.getLinkFrame=function(a){if(this._linkFrame){return this._linkFrame | |
}if(this._debugWindow&&this._debugWindow.document){return this._debugWindow.document.getElementById(AjxDebug._LINK_FRAME_ID) | |
}if(!a){this._openDebugWindow(); | |
return this.getLinkFrame(true) | |
}return null | |
}; | |
AjxDebug.prototype._enable=function(a){this._enabled=a; | |
if(this._target==AjxDebug.TGT_WINDOW){if(a){if(!this._dbgName){this._dbgName="AjxDebugWin_"+location.hostname.replace(/\./g,"_") | |
}if(this._debugWindow==null||this._debugWindow.closed){this._openDebugWindow() | |
}}else{if(this._debugWindow){this._debugWindow.close(); | |
this._debugWindow=null | |
}}}}; | |
AjxDebug.prototype._isWriteable=function(){if(this.isDisabled()){return false | |
}if(this._target==AjxDebug.TGT_WINDOW){try{return(!this._isPaused&&this._debugWindow&&!this._debugWindow.closed) | |
}catch(a){return false | |
}}return true | |
}; | |
AjxDebug.prototype._getHtmlForObject=function(f,g){g=g||{}; | |
var d=[]; | |
var c=0; | |
if(f===undefined){d[c++]="<span>Undefined</span>" | |
}else{if(f===null){d[c++]="<span>NULL</span>" | |
}else{if(AjxUtil.isBoolean(f)){d[c++]="<span>"+f+"</span>" | |
}else{if(AjxUtil.isNumber(f)){d[c++]="<span>"+f+"</span>" | |
}else{if(g.isRaw){d[c++]=this._timestamp(); | |
d[c++]="<textarea rows='25' style='width:100%' readonly='true'>"; | |
d[c++]=f; | |
d[c++]="</textarea><p></p>" | |
}else{if(g.isXml){var a=new AjxDebugXmlDocument; | |
var e=a.create(); | |
if(e&&("loadXML" in e)){e.loadXML(f); | |
d[c++]="<div style='border-width:2px; border-style:inset; width:100%; height:300px; overflow:auto'>"; | |
d[c++]=this._createXmlTree(e,0,{authToken:true}); | |
d[c++]="</div>" | |
}else{d[c++]="<span>Unable to create XmlDocument to show XML</span>" | |
}}else{d[c++]="<div style='border-width:2px; border-style:inset; width:100%; height:300px; overflow:auto'><pre>"; | |
d[c++]=this._dump(f,true,g.showFuncs,{ZmAppCtxt:true,authToken:true}); | |
d[c++]="</div></pre>" | |
}}}}}}return d.join("") | |
}; | |
AjxDebug.prototype._dump=function(e,d,a,c){return AjxStringUtil.prettyPrint(e,d,a,c) | |
}; | |
AjxDebug.prototype._handleArgs=function(f){if(this._level==AjxDebug.NONE||this._showTiming||f.length==0){return | |
}var a=new Array(f.length); | |
for(var d=0; | |
d<f.length; | |
d++){a[d]=f[d] | |
}var k={args:null,linkName:null}; | |
var h=a.length; | |
if(a.length>1){var j=a[a.length-1]; | |
if(j&&j.indexOf&&(j.indexOf("DebugWarn")!=-1||((j.indexOf(" ")==-1)&&(/Request|Response$/.test(j))))){k.linkName=j; | |
a.pop() | |
}}var g=null; | |
var c=a[0]; | |
var e=(typeof c=="number"||((h>1)&&c.length<=8&&/^[a-z0-9]+$/.test(c))); | |
if(e){g=c; | |
a.shift() | |
}if(g&&(AjxDebug.BUFFER_MAX[g]==null)){if(typeof this._level=="number"){if(typeof g!="number"||(g>this._level)){return | |
}}else{if(g!=this._level){return | |
}}}k.args=a; | |
return k | |
}; | |
AjxDebug.prototype._openDebugWindow=function(e){var c=AjxEnv.isIE?"_blank":this._dbgName; | |
this._debugWindow=window.open("",c,"width=600,height=400,resizable=yes,scrollbars=yes"); | |
if(this._debugWindow==null){this._enabled=false; | |
return | |
}this._enabled=true; | |
this._isPrevWinOpen=this._debugWindow.debug; | |
this._debugWindow.debug=true; | |
try{this._document=this._debugWindow.document; | |
this.setTitle("Debug"); | |
if(!this._isPrevWinOpen){this._document.write("<html>","<head>","<script>","function blank() {return [","'<html><head><style type=\"text/css\">',","'P, TD, DIV, SPAN, SELECT, INPUT, TEXTAREA, BUTTON {',","'font-family: Tahoma, Arial, Helvetica, sans-serif;',","'font-size:11px;}',","'.Content {display:block;margin:0.25em 0em;}',","'.Link {cursor: pointer;color:blue;text-decoration:underline;white-space:nowrap;width:100%;}',","'.DebugWarn {color:red;font-weight:bold;}',","'.Run {color:black; background-color:red;width:100%;font-size:18px;font-weight:bold;}',","'.RunLink {display:block;color:black;background-color:red;font-weight:bold;white-space:nowrap;width:100%;}',","'</style></head><body></body></html>'].join(\"\");}","<\/script>","</head>","<frameset cols='125, *'>","<frameset rows='*,40'>","<frame name='",AjxDebug._LINK_FRAME_ID,"' id='",AjxDebug._LINK_FRAME_ID,"' src='javascript:parent.parent.blank();'>","<frame name='",AjxDebug._BOTTOM_FRAME_NAME,"' id='",AjxDebug._BOTTOM_FRAME_ID,"' src='javascript:parent.parent.blank();' scrolling=no frameborder=0>","</frameset>","<frame name='",AjxDebug._CONTENT_FRAME_ID,"' id='",AjxDebug._CONTENT_FRAME_ID,"' src='javascript:parent.blank();'>","</frameset>","</html>"); | |
this._document.close(); | |
var a=new AjxTimedAction(this,AjxDebug.prototype._finishInitWindow); | |
AjxTimedAction.scheduleAction(a,2500) | |
}else{this._finishInitWindow(); | |
this._contentFrame=this._document.getElementById(AjxDebug._CONTENT_FRAME_ID); | |
this._linkFrame=this._document.getElementById(AjxDebug._LINK_FRAME_ID); | |
this._createLinkNContent("RunLink","NEW RUN","Run","NEW RUN"); | |
this._attachHandlers(); | |
this._dbgWindowInited=true; | |
this._showMessages() | |
}}catch(d){if(this._debugWindow){this._debugWindow.close() | |
}this._openDebugWindow(true) | |
}}; | |
AjxDebug.prototype._finishInitWindow=function(){try{this._contentFrame=this._debugWindow.document.getElementById(AjxDebug._CONTENT_FRAME_ID); | |
this._linkFrame=this._debugWindow.document.getElementById(AjxDebug._LINK_FRAME_ID); | |
var f=this._debugWindow.document.getElementById(AjxDebug._BOTTOM_FRAME_ID); | |
var e=f.contentWindow.document; | |
var d=[]; | |
var c=0; | |
d[c++]="<table><tr><td><button id='"; | |
d[c++]=AjxDebug._BOTTOM_FRAME_ID; | |
d[c++]="_clear'>Clear</button></td><td><button id='"; | |
d[c++]=AjxDebug._BOTTOM_FRAME_ID; | |
d[c++]="_pause'>Pause</button></td></tr></table>"; | |
if(e.body){e.body.innerHTML=d.join("") | |
}}catch(a){}if(e){this._clearBtn=e.getElementById(AjxDebug._BOTTOM_FRAME_ID+"_clear"); | |
this._pauseBtn=e.getElementById(AjxDebug._BOTTOM_FRAME_ID+"_pause") | |
}this._attachHandlers(); | |
this._dbgWindowInited=true; | |
this._showMessages() | |
}; | |
AjxDebug.prototype._attachHandlers=function(){var a=AjxCallback.simpleClosure(this._unloadHandler,this); | |
if(this._debugWindow.attachEvent){this._unloadHandler=a; | |
this._debugWindow.attachEvent("onunload",a) | |
}else{this._debugWindow.onunload=a | |
}if(this._clearBtn){this._clearBtn.onclick=AjxCallback.simpleClosure(this._clear,this) | |
}if(this._pauseBtn){this._pauseBtn.onclick=AjxCallback.simpleClosure(this._pause,this) | |
}}; | |
AjxDebug.prototype._scrollToBottom=function(){var c=this.getContentFrame(); | |
var a=c?c.contentWindow.document.body:null; | |
var e=this.getLinkFrame(); | |
var d=e?e.contentWindow.document.body:null; | |
if(a&&d){a.scrollTop=a.scrollHeight; | |
d.scrollTop=d.scrollHeight | |
}}; | |
AjxDebug.prototype._timestamp=function(){return this._showTime?this._getTimeStamp()+": ":"" | |
}; | |
AjxDebug.prototype.setShowTimestamps=function(a){this._showTime=a | |
}; | |
AjxDebug.prototype._createXmlTree=function(e,d,a){if(e==null){return"" | |
}var j=""; | |
var h; | |
switch(e.nodeType){case 1:j+="<div style='color: blue; padding-left: 16px;'><<span style='color: DarkRed;'>"+e.nodeName+"</span>"; | |
if(a&&a[e.nodeName]){return j+"/></div>" | |
}var k=e.attributes; | |
h=k.length; | |
for(var f=0; | |
f<h; | |
f++){j+=this._createXmlAttribute(k[f]) | |
}if(!e.hasChildNodes()){return j+"/></div>" | |
}j+="><br />"; | |
var g=e.childNodes; | |
h=g.length; | |
for(var f=0; | |
f<h; | |
f++){j+=this._createXmlTree(g[f],d+3,a) | |
}j+="</<span style='color: DarkRed;'>"+e.nodeName+"</span>></div>"; | |
break; | |
case 9:var g=e.childNodes; | |
h=g.length; | |
for(var f=0; | |
f<h; | |
f++){j+=this._createXmlTree(g[f],d,a) | |
}break; | |
case 3:if(!/^\s*$/.test(e.nodeValue)){var c=e.nodeValue.replace(/</g,"<").replace(/>/g,">"); | |
j+="<span style='color: WindowText; padding-left: 16px;'>"+c+"</span><br />" | |
}break; | |
case 7:j+="<?"+e.nodeName; | |
var k=e.attributes; | |
h=k.length; | |
for(var f=0; | |
f<h; | |
f++){j+=this._createXmlAttribute(k[f]) | |
}j+="?><br />"; | |
break; | |
case 4:j="<div style=''><![CDATA[<span style='color: WindowText; font-family: \"Courier New\"; white-space: pre; display: block; border-left: 1px solid Gray; padding-left: 16px;'>"+e.nodeValue+"</span>]]></div>"; | |
break; | |
case 8:j="<div style='color: blue; padding-left: 16px;'><!--<span style='white-space: pre; font-family: \"Courier New\"; color: Gray; display: block;'>"+e.nodeValue+"</span>--></div>"; | |
break; | |
case 10:j="<div style='color: blue; padding-left: 16px'><!DOCTYPE "+e.name; | |
if(e.publicId){j+=' PUBLIC "'+e.publicId+'"'; | |
if(e.systemId){j+=' "'+e.systemId+'"' | |
}}else{if(e.systemId){j+=' SYSTEM "'+e.systemId+'"' | |
}}j+="></div>"; | |
break; | |
default:this._inspect(e) | |
}return j | |
}; | |
AjxDebug.prototype._createXmlAttribute=function(c){return[" <span style='color: red'>",c.nodeName,"</span><span style='color: blue'>=\"",c.nodeValue,'"</span>'].join("") | |
}; | |
AjxDebug.prototype._inspect=function(c){var d=""; | |
for(var a in c){d+="obj."+a+" = "+c[a]+"\n" | |
}window.alert(d) | |
}; | |
AjxDebug.prototype._add=function(a){a.extraHtml=a.obj&&this._getHtmlForObject(a.obj,a); | |
this._addMessage(new DebugMessage(a)) | |
}; | |
AjxDebug.prototype._addMessage=function(a){this._msgQueue.push(a); | |
this._showMessages() | |
}; | |
AjxDebug.prototype._showMessages=function(){switch(this._target){case AjxDebug.TGT_WINDOW:this._showMessagesInWindow(); | |
break; | |
case AjxDebug.TGT_CONSOLE:this._showMessagesInConsole() | |
}this._addMessagesToBuffer(); | |
this._msgQueue=[] | |
}; | |
AjxDebug.prototype._showMessagesInWindow=function(){if(!this._dbgWindowInited){return | |
}try{if(this._msgQueue.length>0){var a=this.getContentFrame(); | |
var e=this.getLinkFrame(); | |
if(!a||!e){return | |
}var l=a.contentWindow.document; | |
var h=e.contentWindow.document; | |
var c=new Date(); | |
for(var f=0,g=this._msgQueue.length; | |
f<g; | |
++f){var d=this._msgQueue[f]; | |
var m=d.linkName; | |
var k=[d.message,d.extraHtml].join(""); | |
this._createLinkNContent("Link",m,"Content",k,c) | |
}}this._scrollToBottom() | |
}catch(j){}}; | |
AjxDebug.prototype._addMessagesToBuffer=function(){var d=(this._target==AjxDebug.TGT_CONSOLE)?"<br>":""; | |
for(var c=0,a=this._msgQueue.length; | |
c<a; | |
++c){var e=this._msgQueue[c]; | |
AjxDebug._addMessageToBuffer(e.type,e.message+e.extraHtml+d) | |
}}; | |
AjxDebug._addMessageToBuffer=function(d,e){d=d||AjxDebug.DEFAULT_TYPE; | |
var a=AjxDebug.BUFFER_MAX[d]; | |
if(a>0){var c=AjxDebug.BUFFER[d]=AjxDebug.BUFFER[d]||[]; | |
while(c.length>=a){c.shift() | |
}c.push(e) | |
}}; | |
AjxDebug.prototype._showMessagesInConsole=function(){if(!window.console){return | |
}var c=new Date(); | |
for(var d=0,a=this._msgQueue.length; | |
d<a; | |
++d){var e=this._msgQueue[d]; | |
if(window.console&&window.console.log){window.console.log(AjxStringUtil.stripTags(e.message+e.extraHtml)) | |
}}}; | |
AjxDebug.prototype._getTimeStamp=function(a){if(!AjxDebug._timestampFormatter){AjxDebug._timestampFormatter=new AjxDateFormat("HH:mm:ss.SSS") | |
}a=a||new Date(); | |
return AjxStringUtil.htmlEncode(AjxDebug._timestampFormatter.format(a),true) | |
}; | |
AjxDebug.prototype._createLinkNContent=function(h,n,e,j,d){var f=this.getLinkFrame(); | |
if(!f){return | |
}d=d||new Date(); | |
var g=["[",this._getTimeStamp(d),"]"].join(""); | |
var c="Lnk_"+d.getTime(); | |
if(n){var i=f.contentWindow.document; | |
var m=i.createElement("DIV"); | |
m.className=h; | |
m.innerHTML=[n,g].join(" - "); | |
m._targetId=c; | |
m._dbg=this; | |
m.onclick=AjxDebug._linkClicked; | |
var l=i.body; | |
l.appendChild(m) | |
}var k=this.getContentFrame().contentWindow.document; | |
var a=k.createElement("DIV"); | |
a.className=e; | |
a.id=c; | |
a.innerHTML=j; | |
k.body.appendChild(a); | |
this._scrollToBottom() | |
}; | |
AjxDebug._linkClicked=function(){var c=this._dbg.getContentFrame(); | |
var a=c.contentWindow.document.getElementById(this._targetId); | |
var d=0; | |
while(a){d+=a.offsetTop; | |
a=a.offsetParent | |
}c.contentWindow.scrollTo(0,d) | |
}; | |
AjxDebug.prototype._clear=function(){this.getContentFrame().contentWindow.document.body.innerHTML=""; | |
this.getLinkFrame().contentWindow.document.body.innerHTML="" | |
}; | |
AjxDebug.prototype._pause=function(){this._isPaused=!this._isPaused; | |
this._pauseBtn.innerHTML=this._isPaused?"Resume":"Pause" | |
}; | |
AjxDebug.prototype._unloadHandler=function(){if(!this._debugWindow){return | |
}if(this._debugWindow.detachEvent){this._debugWindow.detachEvent("onunload",this._unloadHandler) | |
}else{this._debugWindow.onunload=null | |
}}; | |
AjxDebug.println=function(a,c){AjxDebug._addMessageToBuffer(a,c+"<br>") | |
}; | |
AjxDebug.dumpObj=function(a,c){AjxDebug._addMessageToBuffer(a,"<pre>"+AjxStringUtil.prettyPrint(c,true)+"</pre>") | |
}; | |
AjxDebug.logSoapMessage=function(f){if(f.methodNameStr=="NoOpRequest"||f.methodNameStr=="NoOpResponse"){return | |
}var c=AjxDebug._getTimeStamp(); | |
var e=["<b>",f.methodNameStr,f.asyncMode?"":" (SYNCHRONOUS)"," - ",c,"</b>"].join(""); | |
for(var a in AjxDebug.BUFFER){if(a==AjxDebug.DEFAULT_TYPE){continue | |
}AjxDebug.println(a,e) | |
}if(window.DBG){var d=f.methodNameStr; | |
if(!f.asyncMode){d="<span class='DebugWarn'>SYNCHRONOUS </span>"+d | |
}window.DBG.println(window.DBG._level,e,d) | |
}}; | |
AjxDebug._getTimeStamp=function(a){return AjxDebug.prototype._getTimeStamp.apply(null,arguments) | |
}; | |
AjxDebug.getDebugLog=function(c){c=c||AjxDebug.DEFAULT_TYPE; | |
var a=AjxDebug.BUFFER[c]; | |
return a?a.join(""):"" | |
}; | |
DebugMessage=function(a){a=a||{}; | |
this.message=a.msg||""; | |
this.type=a.type||null; | |
this.category=a.category||""; | |
this.time=a.time||(new Date().getTime()); | |
this.extraHtml=a.extraHtml||""; | |
this.linkName=a.linkName; | |
this.type=(a.level&&typeof(a.level)=="string")?a.level:AjxDebug.DEFAULT_TYPE | |
} | |
}if(AjxPackage.define("ajax.util.AjxUtil")){AjxUtil=function(){}; | |
AjxUtil.FLOAT_RE=/^[+\-]?((\d+(\.\d*)?)|((\d*\.)?\d+))([eE][+\-]?\d+)?$/; | |
AjxUtil.NOTFLOAT_RE=/[^\d\.]/; | |
AjxUtil.NOTINT_RE=/[^0-9]+/; | |
AjxUtil.LIFETIME_FIELD=/^([0-9])+([dhms]|ms)?$/; | |
AjxUtil.INT_RE=/^\-?(0|[1-9]\d*)$/; | |
AjxUtil.isSpecified=function(a){return((a!==void 0)&&(a!==null)) | |
}; | |
AjxUtil.isUndefined=function(a){return(a===void 0) | |
}; | |
AjxUtil.isNull=function(a){return(a===null) | |
}; | |
AjxUtil.isBoolean=function(a){return(typeof(a)==="boolean") | |
}; | |
AjxUtil.isString=function(a){return(typeof(a)==="string") | |
}; | |
AjxUtil.isNumber=function(a){return(typeof(a)==="number") | |
}; | |
AjxUtil.isObject=function(a){return((typeof(a)==="object")&&(a!==null)) | |
}; | |
AjxUtil.isArray=function(a){return AjxUtil.isInstance(a,Array) | |
}; | |
AjxUtil.isArrayLike=function(a){return typeof a!=="string"&&typeof a.length==="number" | |
}; | |
AjxUtil.isFunction=function(a){return(typeof(a)==="function") | |
}; | |
AjxUtil.isDate=function(a){return AjxUtil.isInstance(a,Date) | |
}; | |
AjxUtil.isLifeTime=function(a){return AjxUtil.LIFETIME_FIELD.test(a) | |
}; | |
AjxUtil.isNumeric=function(a){return(!isNaN(parseFloat(a))&&AjxUtil.FLOAT_RE.test(a)&&!AjxUtil.NOTFLOAT_RE.test(a)) | |
}; | |
AjxUtil.isInt=function(a){return AjxUtil.INT_RE.test(a) | |
}; | |
AjxUtil.isPositiveInt=function(a){return AjxUtil.isInt(a)&&parseInt(a,10)>0 | |
}; | |
AjxUtil.isLong=AjxUtil.isInt; | |
AjxUtil.isNonNegativeLong=function(a){return AjxUtil.isLong(a)&&parseInt(a,10)>=0 | |
}; | |
AjxUtil.isEmpty=function(a){return(AjxUtil.isNull(a)||AjxUtil.isUndefined(a)||(a==="")||(AjxUtil.isArray(a)&&(a.length==0))) | |
}; | |
AjxUtil.IPv4_ADDRESS_RE=/^\d{1,3}(\.\d{1,3}){3}(\.\d{1,3}\.\d{1,3})?$/; | |
AjxUtil.IPv4_ADDRESS_WITH_PORT_RE=/^\d{1,3}(\.\d{1,3}){3}(\.\d{1,3}\.\d{1,3})?:\d{1,5}$/; | |
AjxUtil.IPv6_ADDRESS_RE=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|(?:%[-\w.~]+)?$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})(?:%[-\w.~]+)?$/i; | |
AjxUtil.IPv6_ADDRESS_WITH_PORT_RE=new RegExp(AjxUtil.IPv6_ADDRESS_RE.source.replace("^","^\\[").replace("$","\\]:\\d{1,5}$"),"i"); | |
AjxUtil.SUBNET_RE=/^\d{1,3}(\.\d{1,3}){3}(\.\d{1,3}\.\d{1,3})?\/\d{1,2}$/; | |
AjxUtil.DOMAIN_NAME_SHORT_RE=/^[A-Za-z0-9\-]{2,}$/; | |
AjxUtil.DOMAIN_NAME_FULL_RE=/^[A-Za-z0-9\-]{1,}(\.[A-Za-z0-9\-]{2,}){1,}$/; | |
AjxUtil.HOST_NAME_RE=/^[A-Za-z0-9\-]{2,}(\.[A-Za-z0-9\-]{1,})*(\.[A-Za-z0-9\-]{2,})*$/; | |
AjxUtil.HOST_NAME_WITH_PORT_RE=/^[A-Za-z0-9\-]{2,}(\.[A-Za-z0-9\-]{2,})*:([0-9])+$/; | |
AjxUtil.EMAIL_SHORT_RE=/^[^@\s]+$/; | |
AjxUtil.EMAIL_FULL_RE=/^[^@\s]+@[A-Za-z0-9\-]{2,}(\.[A-Za-z0-9\-]{2,})+$/; | |
AjxUtil.FULL_URL_RE=/^[A-Za-z0-9]{2,}:\/\/[A-Za-z0-9\-]+(\.[A-Za-z0-9\-]+)*(:([0-9])+)?(\/[\w\.\|\^\*\[\]\{\}\(\)\-<>~,'#_;@:!%]+)*(\/)?(\?[\w\.\|\^\*\+\[\]\{\}\(\)\-<>~,'#_;@:!%&=]*)?$/; | |
AjxUtil.IP_FULL_URL_RE=/^[A-Za-z0-9]{2,}:\/\/\d{1,3}(\.\d{1,3}){3}(\.\d{1,3}\.\d{1,3})?(:([0-9])+)?(\/[\w\.\|\^\*\[\]\{\}\(\)\-<>~,'#_;@:!%]+)*(\/)?(\?[\w\.\|\^\*\+\[\]\{\}\(\)\-<>~,'#_;@:!%&=]*)?$/; | |
AjxUtil.SHORT_URL_RE=/^[A-Za-z0-9]{2,}:\/\/[A-Za-z0-9\-]+(\.[A-Za-z0-9\-]+)*(:([0-9])+)?$/; | |
AjxUtil.IP_SHORT_URL_RE=/^[A-Za-z0-9]{2,}:\/\/\d{1,3}(\.\d{1,3}){3}(\.\d{1,3}\.\d{1,3})?(:([0-9])+)?$/; | |
AjxUtil.isHostName=function(a){return AjxUtil.HOST_NAME_RE.test(a) | |
}; | |
AjxUtil.isDomainName=function(c,a){return a?AjxUtil.DOMAIN_NAME_SHORT_RE.test(c):AjxUtil.DOMAIN_NAME_FULL_RE.test(c) | |
}; | |
AjxUtil.isEmailAddress=function(c,a){return a?AjxUtil.EMAIL_SHORT_RE.test(c):AjxUtil.EMAIL_FULL_RE.test(c) | |
}; | |
AjxUtil.isValidEmailNonReg=function(a){return((a.indexOf("@")>0)&&(a.lastIndexOf("@")==a.indexOf("@"))&&(a.indexOf(".@")<0)) | |
}; | |
AjxUtil.isHash=function(a){var c=a&&a.toString?a.toString():Object.prototype.toString.call(a); | |
return AjxUtil.isObject(a)&&c==="[object Object]" | |
}; | |
AjxUtil.SIZE_GIGABYTES="GB"; | |
AjxUtil.SIZE_MEGABYTES="MB"; | |
AjxUtil.SIZE_KILOBYTES="KB"; | |
AjxUtil.SIZE_BYTES="B"; | |
AjxUtil.formatSize=function(f,e,g){if(e==null){e=true | |
}if(g==null){g=20 | |
}var c=AjxMsg.sizeBytes; | |
var d=AjxMsg.SIZE_BYTES; | |
if(f>=1073741824){c=AjxMsg.sizeGigaBytes; | |
d=AjxUtil.SIZE_GIGABYTES | |
}else{if(f>=1048576){c=AjxMsg.sizeMegaBytes; | |
d=AjxUtil.SIZE_MEGABYTES | |
}else{if(f>1023){c=AjxMsg.sizeKiloBytes; | |
d=AjxUtil.SIZE_KILOBYTES | |
}}}var a=AjxUtil.formatSizeForUnits(f,d,e,g); | |
return AjxMessageFormat.format(AjxMsg.formatSizeAndUnits,[a,c]) | |
}; | |
AjxUtil.formatSizeForUnits=function(f,d,c,h){if(d==null){d=AjxUtil.SIZE_BYTES | |
}if(c==null){c=true | |
}if(h==null){h=20 | |
}switch(d){case AjxUtil.SIZE_GIGABYTES:f/=1073741824; | |
break; | |
case AjxUtil.SIZE_MEGABYTES:f/=1048576; | |
break; | |
case AjxUtil.SIZE_KILOBYTES:f/=1024; | |
break | |
}var a=I18nMsg.numberSeparatorDecimal!=""?I18nMsg.numberSeparatorDecimal:"."; | |
var g=I18nMsg.formatNumber.replace(/\..*$/,""); | |
g=g.replace(/,/,""); | |
if(!c&&h){g=g+=a; | |
for(var e=0; | |
e<h; | |
e++){g+="#" | |
}}return AjxNumberFormat.format(g,f) | |
}; | |
AjxUtil.parseSize=function(c,e){if(typeof c!=_STRING_){c=c.toString() | |
}var f=parseFloat(c.replace(/^\s*/,"")); | |
var d=/[GMK]?B$/i; | |
var a=d.exec(c); | |
if(a){e=a[0].toUpperCase() | |
}switch(e){case AjxUtil.SIZE_GIGABYTES:f*=1073741824; | |
break; | |
case AjxUtil.SIZE_MEGABYTES:f*=1048576; | |
break; | |
case AjxUtil.SIZE_KILOBYTES:f*=1024; | |
break | |
}return f | |
}; | |
AjxUtil.isInstance=function(a,c){return !!(a&&a.constructor&&(a.constructor===c)) | |
}; | |
AjxUtil.assert=function(a,c){if(!a&&AjxUtil.onassert){AjxUtil.onassert(c) | |
}}; | |
AjxUtil.onassert=function(a){var k=new Object(); | |
k.message=a; | |
var l=new Array(); | |
if(AjxEnv.isIE){var d=arguments.callee.caller; | |
var f=0; | |
while(d&&f++<20){l[l.length]=d; | |
d=d.caller | |
}}else{try{var d=arguments.callee.caller; | |
while(d){l[l.length]=d; | |
if(l.length>2){break | |
}d=d.caller | |
}}catch(j){}}k.stack=l; | |
var h=""; | |
var c=170; | |
for(var f=1; | |
f<l.length; | |
f++){if(f>1){h+="\n" | |
}if(f<11){var g=l[f].toString(); | |
if(g.length>c){g=g.substr(0,c)+"..."; | |
g=g.replace(/\n/g,"") | |
}h+=f+": "+g | |
}else{h+="("+(l.length-11)+" frames follow)"; | |
break | |
}}alert("assertion:\n\n"+a+"\n\n---- Call Stack ---\n"+h); | |
throw k | |
}; | |
AjxUtil.ELEMENT_NODE=1; | |
AjxUtil.TEXT_NODE=3; | |
AjxUtil.DOCUMENT_NODE=9; | |
AjxUtil.getInnerText=function(a){if(AjxEnv.isIE){return a.innerText | |
}function c(f){if(f){if(f.nodeType==3){return f.data | |
}if(f.nodeType==1){if(/^br$/i.test(f.tagName)){return"\r\n" | |
}var e=""; | |
for(var d=f.firstChild; | |
d; | |
d=d.nextSibling){e+=c(d) | |
}return e | |
}}return"" | |
}return c(a) | |
}; | |
AjxUtil.createProxy=function(d,h){var f; | |
var c=function(){}; | |
c.prototype=d; | |
if(d instanceof Array){f=new Array(); | |
var e=d.length; | |
for(var a=0; | |
a<e; | |
a++){f[a]=d[a] | |
}}else{f=new c | |
}if(h){for(var g in d){if(typeof d[g]=="object"&&d[g]!==null){f[g]=AjxUtil.createProxy(d[g],h-1) | |
}}}f._object_=d; | |
return f | |
}; | |
AjxUtil.unProxy=function(c){var a=c&&c._object_; | |
if(a){for(var d in c){if(c.hasOwnProperty(d)&&d!="_object_"){a[d]=c[d] | |
}}return a | |
}return null | |
}; | |
AjxUtil.collapseList=function(d){var c=[]; | |
for(var a=0; | |
a<d.length; | |
a++){if(d[a]){c.push(d[a]) | |
}}return c | |
}; | |
AjxUtil.arrayAsHash=function(h,e){h=AjxUtil.toArray(h); | |
var g={}; | |
var d=typeof e=="function"&&e; | |
var f=e||true; | |
for(var c=0; | |
c<h.length; | |
c++){var a=h[c]; | |
g[a]=d?d(a,g,c,h):f | |
}return g | |
}; | |
AjxUtil.arrayAdd=function(d,c,a){d=d||[]; | |
if(a==null||a<0||a>=d.length){d.push(c) | |
}else{d.splice(a,0,c) | |
}}; | |
AjxUtil.arrayRemove=function(d,c){if(d){for(var a=0; | |
a<d.length; | |
a++){if(d[a]==c){d.splice(a,1); | |
return true | |
}}}return false | |
}; | |
AjxUtil.indexOf=function(f,c,a){if(f){for(var d=0; | |
d<f.length; | |
d++){var e=f[d]; | |
if((a&&e===c)||(!a&&e==c)){return d | |
}}}return -1 | |
}; | |
AjxUtil.arrayContains=function(d,c,a){return AjxUtil.indexOf(d,c,a)!=-1 | |
}; | |
AjxUtil.keys=function(c,a){var d=[]; | |
for(var e in c){if(a&&!a(e,c)){continue | |
}d.push(e) | |
}return d | |
}; | |
AjxUtil.values=function(d,c){var a=[]; | |
for(var e in d){if(c&&!c(e,d)){continue | |
}a.push(d[e]) | |
}return a | |
}; | |
AjxUtil.valueHash=function(g,d){var e=Object.prototype.hasOwnProperty.bind(g); | |
var f={}; | |
for(var c in g){var a=g[c]; | |
if(!e(c)||(d&&!d(c,g))){continue | |
}f[a]=c | |
}return f | |
}; | |
AjxUtil.backMap=AjxUtil.valueHash; | |
AjxUtil.foreach=function(f,e){if(!e||!f){return | |
}if(AjxUtil.isArrayLike(f)){var g=f; | |
for(var c=0; | |
c<g.length; | |
c++){e(g[c],c) | |
}}else{var d=Object.prototype.hasOwnProperty.bind(f); | |
for(var a in f){if(d(a)){e(f[a],a) | |
}}}}; | |
AjxUtil.map=function(e,d){if(!e){return[] | |
}var a=new Array(e.length); | |
for(var c=0; | |
c<e.length; | |
c++){a[c]=d?d(e[c],c):e[c] | |
}return a | |
}; | |
AjxUtil.uniq=function(d){if(!d){return[] | |
}var a={}; | |
for(var c=0; | |
c<d.length; | |
c++){a[d[c]]=true | |
}return AjxUtil.keys(a) | |
}; | |
AjxUtil.dedup=function(f,c){if(!f){return[] | |
}if(!c){c=function(g){return g | |
} | |
}var a={}; | |
for(var e=0; | |
e<f.length; | |
e++){var d=c(f[e]); | |
if(d!==undefined&&a[d]){f.splice(e,1); | |
e-=1 | |
}a[d]=true | |
}}; | |
AjxUtil.concat=function(c){var d=[]; | |
for(var a=0; | |
a<arguments.length; | |
a++){d.push.apply(d,arguments[a]) | |
}return d | |
}; | |
AjxUtil.union=function(a){var c=[]; | |
return AjxUtil.uniq(c.concat.apply(c,arguments)) | |
}; | |
AjxUtil.intersection=function(c){var e=AjxUtil.concat.apply(this,arguments); | |
var a=AjxUtil.arrayAsHash(e,AjxUtil.__intersection_count); | |
for(var d in a){if(a[d]==1){delete a[d] | |
}}return AjxUtil.keys(a) | |
}; | |
AjxUtil.__intersection_count=function(c,d,a,e){return d[c]!=null?d[c]+1:1 | |
}; | |
AjxUtil.complement=function(e,c){var d=AjxUtil.arrayAsHash(e); | |
var a=AjxUtil.arrayAsHash(c); | |
for(var f in a){if(f in d){delete a[f] | |
}}return AjxUtil.keys(a) | |
}; | |
AjxUtil.filter=function(f,d,c){var a=[]; | |
if(f==null){return a | |
}var e=Array.prototype.filter; | |
if(e&&f.filter===e){return f.filter(d,c) | |
}AjxUtil.foreach(f,function(h,g){if(d.call(c,h,g)){a.push(h) | |
}}); | |
return a | |
}; | |
AjxUtil.getFirstElement=function(f,e,d,c){for(var g=f.firstChild; | |
g; | |
g=g.nextSibling){if(g.nodeType!=AjxUtil.ELEMENT_NODE){continue | |
}if(e&&g.nodeName!=e){continue | |
}if(d){var a=g.getAttributeNode(d); | |
if(a.nodeName!=d){continue | |
}if(c&&a.nodeValue!=c){continue | |
}}return g | |
}return null | |
}; | |
AjxUtil.formatUrl=function(g){g=g||{}; | |
var d=[]; | |
var e=0; | |
if(!g.relative){var f=g.protocol||location.protocol; | |
if(f.indexOf(":")==-1){f=f+":" | |
}d[e++]=f; | |
d[e++]="//"; | |
d[e++]=g.host||location.hostname; | |
var c=Number(g.port||location.port); | |
if(c&&((f==ZmSetting.PROTO_HTTP&&c!=ZmSetting.HTTP_DEFAULT_PORT)||(f==ZmSetting.PROTO_HTTPS&&c!=ZmSetting.HTTPS_DEFAULT_PORT))){d[e++]=":"; | |
d[e++]=c | |
}}d[e++]=g.path||location.pathname; | |
var a=""; | |
if(g.qsArgs){a=AjxStringUtil.queryStringSet(g.qsArgs,g.qsReset) | |
}else{a=g.qsReset?"":location.search | |
}d[e++]=a; | |
return d.join("") | |
}; | |
AjxUtil.byNumber=function(d,c){return Number(d)-Number(c) | |
}; | |
AjxUtil.byStringProp=function(e,d,c){return d[e].localeCompare(c[e]) | |
}; | |
AjxUtil.arraySize=function(c){var d=0; | |
for(var f in c){if(c.hasOwnProperty(f)){d++ | |
}}return d | |
}; | |
AjxUtil.mergeArrays=function(j,f,a){if(!a){a=AjxUtil.__mergeArrays_orderfunc | |
}var k=[]; | |
var e=j.length; | |
for(var c=0; | |
c<e; | |
c++){k.push(j[c]) | |
}var g=[]; | |
var d=f.length; | |
for(var c=0; | |
c<d; | |
c++){g.push(f[c]) | |
}var h=[]; | |
while(k.length>0&&g.length>0){if(a(k[0],h[h.length-1])==0){k.shift(); | |
continue | |
}if(a(g[0],h[h.length-1])==0){g.shift(); | |
continue | |
}if(a(k[0],g[0])<0){h.push(k.shift()) | |
}else{if(a(k[0],g[0])==0){h.push(k.shift()); | |
g.shift() | |
}else{h.push(g.shift()) | |
}}}while(k.length>0){if(a(k[0],h[h.length-1])==0){k.shift(); | |
continue | |
}h.push(k.shift()) | |
}while(g.length>0){if(a(g[0],h[h.length-1])==0){g.shift(); | |
continue | |
}h.push(g.shift()) | |
}return h | |
}; | |
AjxUtil.__mergeArrays_orderfunc=function(c,a){if(c>a){return 1 | |
}if(c<a){return -1 | |
}if(c==a){return 0 | |
}}; | |
AjxUtil.arraySubtract=function(j,f,a){if(!a){a=function(l,i){if(l>i){return 1 | |
}if(l<i){return -1 | |
}if(l==i){return 0 | |
}} | |
}var k=[]; | |
var e=j.length; | |
for(var c=0; | |
c<e; | |
c++){k.push(j[c]) | |
}var g=[]; | |
var d=f.length; | |
for(var c=0; | |
c<d; | |
c++){g.push(f[c]) | |
}g.sort(a); | |
k.sort(a); | |
var h=[]; | |
while(k.length>0&&g.length>0){if(a(k[0],g[0])==0){k.shift(); | |
g.shift(); | |
continue | |
}if(a(k[0],g[0])<0){h.push(k.shift()); | |
continue | |
}if(a(k[0],g[0])>0){g.shift(); | |
continue | |
}}while(k.length>0){h.push(k.shift()) | |
}return h | |
}; | |
AjxUtil.arraySubstract=AjxUtil.arraySubtract; | |
AjxUtil.getHashKeys=function(d){var c=[]; | |
for(var a in d){c.push(a) | |
}c.sort(); | |
return c | |
}; | |
AjxUtil.arrayCompare=function(c,a){if((!c||!a)&&(c!=a)){return false | |
}if(c.length!=a.length){return false | |
}for(var d=0; | |
d<c.length; | |
d++){if(c[d]!=a[d]){return false | |
}}return true | |
}; | |
AjxUtil.hashCompare=function(h,g){var d=AjxUtil.getHashKeys(h); | |
var c=AjxUtil.getHashKeys(g); | |
if(!AjxUtil.arrayCompare(d,c)){return false | |
}for(var f=0,a=d.length; | |
f<a; | |
f++){var e=d[f]; | |
if(h[e]!=g[e]){return false | |
}}return true | |
}; | |
AjxUtil.hashCopy=function(e,d,a){d=d&&AjxUtil.arrayAsHash(d); | |
a=a&&AjxUtil.arrayAsHash(a); | |
var f={}; | |
for(var c in e){if((!d||!d[c])&&(!a||a[c])){f[c]=e[c] | |
}}return f | |
}; | |
AjxUtil.hashUpdate=function(g,f,c,e,a){e=e&&AjxUtil.arrayAsHash(e); | |
a=a&&AjxUtil.arrayAsHash(a); | |
for(var d in f){if((c||!(d in g))&&(!e||!e[d])&&(!a||a[d])){g[d]=f[d] | |
}}}; | |
AjxUtil.isArray1=function(a){return !!(a&&(a.length!=null)&&a.splice&&a.slice) | |
}; | |
AjxUtil.toArray=function(a){if(!a){return[] | |
}else{if(AjxUtil.isArray1(a)){return a | |
}else{if(AjxUtil.isArrayLike(a)){return Array.prototype.slice.call(a) | |
}else{if(a.isAjxVector){return a.getArray() | |
}else{return[a] | |
}}}}}; | |
AjxUtil.get=function(a){for(var c=1; | |
a&&c<arguments.length; | |
c++){a=a[arguments[c]] | |
}return a | |
}; | |
AjxUtil.convertToEntities=function(g){var a=""; | |
var f=0; | |
if(!g||!(f=g.length)){return g | |
}for(var e=0; | |
e<f; | |
e++){var c=g.charCodeAt(e); | |
if((c>127)||(c==34)){var d=c.toString(10); | |
while(d.length<4){d="0"+d | |
}a+="&#"+d+";" | |
}else{a+=g.charAt(e) | |
}}return a | |
}; | |
AjxUtil.getClassAttr=function(c){var a=[]; | |
if(c&&c.length>0){c=AjxUtil.uniq(c); | |
return["class='",c.join(" "),"'"].join("") | |
}return"" | |
}; | |
AjxUtil.dataURItoBlob=function(g){if(!(g&&typeof window.atob==="function"&&typeof window.Blob==="function")){return | |
}var k=g.split(","); | |
if(k.length===2){if(k[0].indexOf("base64")===-1){return | |
}try{var f=window.atob(k[1]) | |
}catch(j){return | |
}if(!f){return | |
}var d=k[0].split(":"); | |
if(!d[1]){return | |
}d=d[1].split(";")[0]; | |
if(d){var a=f.length,l=new ArrayBuffer(a),c=new Uint8Array(l); | |
for(var h=0; | |
h<a; | |
h++){c[h]=f.charCodeAt(h) | |
}return new Blob([l],{type:d}) | |
}}}; | |
AjxUtil.reduce=function(d,c,a){return Array.prototype.reduce.call(d,c,a) | |
}; | |
AjxUtil.getBrightness=function(c){var e,d,a; | |
if(c&&c.length===7&&c.indexOf("#")===0){c=c.substr(1) | |
}else{return null | |
}e=parseInt(c.substr(0,2),16); | |
d=parseInt(c.substr(2,2),16); | |
a=parseInt(c.substr(4,2),16); | |
return Math.sqrt(e*e*0.299+d*d*0.587+a*a*0.114) | |
}; | |
AjxUtil.getForegroundColor=function(a){var c=AjxUtil.getBrightness(a); | |
return(c!=null&&c<130)?"white":"black" | |
}; | |
AjxUtil.htmlEncode=function(a){if(AjxUtil.isArray(a)){a=a.map(function(c){return AjxStringUtil.htmlEncode(c) | |
}) | |
}else{if(AjxUtil.isString(a)){a=AjxStringUtil.htmlEncode(a) | |
}}return a | |
}; | |
AjxUtil.htmlDecode=function(a){if(AjxUtil.isArray(a)){a=a.map(function(c){return AjxStringUtil.htmlDecode(c) | |
}) | |
}else{if(AjxUtil.isString(a)){a=AjxStringUtil.htmlDecode(a) | |
}}return a | |
} | |
}if(AjxPackage.define("ajax.core.AjxException")){AjxException=function(d,c,e,a){if(arguments.length==0){return | |
}this.msg=d; | |
this.code=c; | |
this.method=e; | |
this.detail=a | |
}; | |
AjxException.prototype.toString=function(){return"AjxException" | |
}; | |
AjxException.prototype.dump=function(){return"AjxException: msg="+this.msg+" code="+this.code+" method="+this.method+" detail="+this.detail | |
}; | |
AjxException.INVALIDPARENT="AjxException.INVALIDPARENT"; | |
AjxException.INVALID_OP="AjxException.INVALID_OP"; | |
AjxException.INTERNAL_ERROR="AjxException.INTERNAL_ERROR"; | |
AjxException.INVALID_PARAM="AjxException.INVALID_PARAM"; | |
AjxException.UNIMPLEMENTED_METHOD="AjxException.UNIMPLEMENTED_METHOD"; | |
AjxException.NETWORK_ERROR="AjxException.NETWORK_ERROR"; | |
AjxException.OUT_OF_RPC_CACHE="AjxException.OUT_OF_RPC_CACHE"; | |
AjxException.UNSUPPORTED="AjxException.UNSUPPORTED"; | |
AjxException.UNKNOWN_ERROR="AjxException.UNKNOWN_ERROR"; | |
AjxException.CANCELED="AjxException.CANCELED"; | |
AjxException.defaultScriptErrorHandler=function(a){alert(a) | |
}; | |
AjxException.setScriptErrorHandler=function(a){AjxException.scriptErrorHandler=a | |
}; | |
AjxException.reportScriptError=function(a){if(AjxException.reportScriptErrors&&AjxException.scriptErrorHandler&&!(a instanceof AjxException)){AjxException.scriptErrorHandler(a) | |
}throw a | |
}; | |
AjxException.reportScriptErrors=false; | |
AjxException.scriptErrorHandler=AjxException.defaultScriptErrorHandler | |
}if(AjxPackage.define("ajax.util.AjxCookie")){AjxCookie=function(){}; | |
AjxCookie.prototype.toString=function(){return"AjxCookie" | |
}; | |
AjxCookie.getCookie=function(k,c){var l=c+"="; | |
var e=l.length; | |
var h=k.cookie.length; | |
var d=k.cookie; | |
var g=0; | |
while(g<h){var f=g+e; | |
if(d.substring(g,f)==l){var a=d.indexOf(";",f); | |
if(a==-1){a=d.length | |
}return unescape(d.substring(f,a)) | |
}g=d.indexOf(" ",g)+1; | |
if(g==0){break | |
}}return null | |
}; | |
AjxCookie.setCookie=function(h,c,e,a,g,d,f){h.cookie=c+"="+escape(e)+((a)?"; expires="+a.toGMTString():"")+((g)?"; path="+g:"")+((d)?"; domain="+d:"")+((f)?"; secure":"") | |
}; | |
AjxCookie.deleteCookie=function(e,a,d,c){e.cookie=a+"="+((d)?"; path="+d:"")+((c)?"; domain="+c:"")+"; expires=Fri, 31 Dec 1999 23:59:59 GMT" | |
}; | |
AjxCookie.areCookiesEnabled=function(e){var a="ZM_COOKIE_TEST"; | |
var d="Zimbra"; | |
AjxCookie.setCookie(e,a,d); | |
var c=AjxCookie.getCookie(e,a); | |
AjxCookie.deleteCookie(e,a); | |
return c==d | |
} | |
}if(AjxPackage.define("ajax.soap.AjxSoapException")){AjxSoapException=function(d,c,e,a){AjxException.call(this,d,c,e,a) | |
}; | |
AjxSoapException.prototype.toString=function(){return"AjxSoapException" | |
}; | |
AjxSoapException.prototype=new AjxException; | |
AjxSoapException.prototype.constructor=AjxSoapException; | |
AjxSoapException.INTERNAL_ERROR="INTERNAL_ERROR"; | |
AjxSoapException.INVALID_PDU="INVALID_PDU"; | |
AjxSoapException.ELEMENT_EXISTS="ELEMENT_EXISTS" | |
}if(AjxPackage.define("ajax.soap.AjxSoapFault")){AjxSoapFault=function(c){if(arguments.length==0){return | |
}var h=c.prefix; | |
var g=h+":Code"; | |
var f=h+":Reason"; | |
var d=h+":Detail"; | |
var j=c.childNodes.length; | |
for(var e=0; | |
e<j; | |
e++){var a=c.childNodes[e]; | |
if(a.nodeName==g){var k=a.firstChild.firstChild.nodeValue; | |
if(k==(h+":VersionMismatch")){this.faultCode=AjxSoapFault.VERSION_MISMATCH | |
}else{if(k==(h+":MustUnderstand")){this.faultCode=AjxSoapFault.MUST_UNDERSTAND | |
}else{if(k==(h+":DataEncodingUnknown")){this.faultCode=AjxSoapFault.DATA_ENCODING_UNKNOWN | |
}else{if(k==(h+":Sender")){this.faultCode=AjxSoapFault.SENDER | |
}else{if(k==(h+":Receiver")){this.faultCode=AjxSoapFault.RECEIVER | |
}else{this.faultCode=AjxSoapFault.UNKNOWN | |
}}}}}}else{if(a.nodeName==f){this.reason=a.firstChild.firstChild.nodeValue | |
}else{if(a.nodeName==d){this.errorCode=a.firstChild.firstChild.firstChild.nodeValue | |
}}}}}; | |
AjxSoapFault.prototype.toString=function(){return"AjxSoapFault" | |
}; | |
AjxSoapFault.SENDER=-1; | |
AjxSoapFault.RECEIVER=-2; | |
AjxSoapFault.VERSION_MISMATCH=-3; | |
AjxSoapFault.MUST_UNDERSTAND=-4; | |
AjxSoapFault.DATA_ENCODING_UNKNOWN=-5; | |
AjxSoapFault.UNKNOWN=-6 | |
}if(AjxPackage.define("ajax.soap.AjxSoapDoc")){AjxSoapDoc=function(){this._soapURI=AjxSoapDoc._SOAP_URI | |
}; | |
AjxSoapDoc.prototype.isAjxSoapDoc=true; | |
AjxSoapDoc.prototype.toString=function(){return"AjxSoapDoc" | |
}; | |
AjxSoapDoc._SOAP_URI="http://www.w3.org/2003/05/soap-envelope"; | |
AjxSoapDoc._XMLNS_URI="http://www.w3.org/2000/xmlns"; | |
AjxSoapDoc.create=function(a,e,j,i){var h=new AjxSoapDoc(); | |
h._xmlDoc=AjxXmlDoc.create(); | |
var g=h._xmlDoc.getDoc(); | |
if(!i){i=AjxSoapDoc._SOAP_URI | |
}h._soapURI=i; | |
var c=g.createElementNS&&!AjxEnv.isSafari; | |
var f=c?g.createElementNS(i,"soap:Envelope"):g.createElement("soap:Envelope"); | |
if(!c){f.setAttribute("xmlns:soap",i) | |
}g.appendChild(f); | |
var k=c?g.createElementNS(i,"soap:Body"):g.createElement("soap:Body"); | |
f.appendChild(k); | |
h._methodEl=e&&c?g.createElementNS(e,a):g.createElement(a); | |
if(e!=null&&!c){if(j==null){h._methodEl.setAttribute("xmlns",e) | |
}else{h._methodEl.setAttribute("xmlns:"+j,e) | |
}}k.appendChild(h._methodEl); | |
return h | |
}; | |
AjxSoapDoc.createFromDom=function(c){var a=new AjxSoapDoc(); | |
a._xmlDoc=AjxXmlDoc.createFromDom(c); | |
a._methodEl=a._check(a._xmlDoc); | |
return a | |
}; | |
AjxSoapDoc.createFromXml=function(a){var c=new AjxSoapDoc(); | |
c._xmlDoc=AjxXmlDoc.createFromXml(a); | |
c._methodEl=c._check(c._xmlDoc); | |
return c | |
}; | |
AjxSoapDoc.element2FaultObj=function(c){var a=c.firstChild; | |
if(!AjxEnv.isSafari){if(a!=null&&a.namespaceURI!=AjxSoapDoc._SOAP_URI||a.nodeName!=(c.prefix+":Fault")){return null | |
}}else{if(a!=null&&a.nodeName!=(c.prefix+":Fault")){return null | |
}}return new AjxSoapFault(a) | |
}; | |
AjxSoapDoc.prototype.setMethodAttribute=function(a,c){this._methodEl.setAttribute(a,c) | |
}; | |
AjxSoapDoc.prototype.set=function(c,l,m,f){var k=this.getDoc(); | |
var a=k.createElementNS&&!AjxEnv.isSafari; | |
var d=c?(f&&a?k.createElementNS(f,c):k.createElement(c)):k.createDocumentFragment(); | |
if((f!==undefined)&&(f!==null)&&!a){d.setAttribute("xmlns",f) | |
}if(l!=null){if(typeof l=="object"){for(var h in l){var e=l[h]; | |
if(h.charAt(0)=="!"){d.setAttribute(h.substr(1),e) | |
}else{if(e instanceof Array){for(var g=0; | |
g<e.length; | |
++g){this.set(h,e[g],d) | |
}}else{this.set(h,e,d) | |
}}}}else{d.appendChild(k.createTextNode(l)) | |
}}if(!m){m=this._methodEl | |
}return m.appendChild(d) | |
}; | |
AjxSoapDoc.prototype.getMethod=function(){return this._methodEl | |
}; | |
AjxSoapDoc.prototype.createHeaderElement=function(){var e=this._xmlDoc.getDoc(); | |
var c=e.firstChild; | |
var f=this.getHeader(); | |
if(f!=null){throw new AjxSoapException("SOAP header already exists",AjxSoapException.ELEMENT_EXISTS,"AjxSoapDoc.prototype.createHeaderElement") | |
}var a=e.createElementNS&&!AjxEnv.isSafari; | |
f=a?e.createElementNS(this._soapURI,"soap:Header"):e.createElement("soap:Header"); | |
c.insertBefore(f,c.firstChild); | |
return f | |
}; | |
AjxSoapDoc.prototype.getHeader=function(){var c=this._xmlDoc.getDoc(); | |
var a=!c.getElementsByTagNameNS?(c.getElementsByTagName(c.firstChild.prefix+":Header")):(c.getElementsByTagNameNS(this._soapURI,"Header")); | |
return a?a[0]:null | |
}; | |
AjxSoapDoc.prototype.getBody=function(){var c=this._xmlDoc.getDoc(); | |
var a=!c.getElementsByTagNameNS?(c.getElementsByTagName(c.firstChild.prefix+":Body")):(c.getElementsByTagNameNS(this._soapURI,"Body")); | |
return a?a[0]:null | |
}; | |
AjxSoapDoc.prototype.getByTagName=function(d){if(d.indexOf(":")==-1){d="soap:"+d | |
}var c=this.getDoc().getElementsByTagName(d); | |
if(c.length==1){return c[0] | |
}else{if(c.length>0){return c | |
}else{return null | |
}}}; | |
AjxSoapDoc.prototype.ensureHeader=function(){return(this.getHeader()||this.createHeaderElement()) | |
}; | |
AjxSoapDoc.prototype.getDoc=function(){return this._xmlDoc.getDoc() | |
}; | |
AjxSoapDoc.prototype.adoptNode=function(c){if(AjxEnv.isFirefox3up||!AjxEnv.isFirefox){try{var d=this.getDoc(); | |
if(d.adoptNode){return d.adoptNode(c,true) | |
}}catch(a){}}return c.parentNode.removeChild(c) | |
}; | |
AjxSoapDoc.prototype.getXml=function(){return this._xmlDoc.getXml() | |
}; | |
AjxSoapDoc.prototype._check=function(c){var d=c.getDoc(); | |
if(d.childNodes.length!=1){throw new AjxSoapException("Invalid SOAP PDU",AjxSoapException.INVALID_PDU,"AjxSoapDoc.createFromXml:1") | |
}var a=d.firstChild; | |
if(!AjxEnv.isSafari){if(a.namespaceURI!=AjxSoapDoc._SOAP_URI||a.nodeName!=(a.prefix+":Envelope")||(a.childNodes.length<1||a.childNodes.length>2)){throw new AjxSoapException("Invalid SOAP PDU",AjxSoapException.INVALID_PDU,"AjxSoapDoc.createFromXml:2") | |
}}else{if(a.nodeName!=(a.prefix+":Envelope")){throw new AjxSoapException("Invalid SOAP PDU",AjxSoapException.INVALID_PDU,"AjxSoapDoc.createFromXml:2") | |
}}} | |
}if(AjxPackage.define("ajax.net.AjxRpcRequest")){AjxRpcRequest=function(a){if(!AjxRpcRequest.__inited){AjxRpcRequest.__init() | |
}this.id=a; | |
this.__httpReq=AjxRpcRequest.__msxmlVers?(new ActiveXObject(AjxRpcRequest.__msxmlVers)):(new XMLHttpRequest()) | |
}; | |
AjxRpcRequest.prototype.isAjxRpcRequest=true; | |
AjxRpcRequest.prototype.toString=function(){return"AjxRpcRequest" | |
}; | |
AjxRpcRequest.TIMEDOUT=-1000; | |
AjxRpcRequest.HTTP_GET="get"; | |
AjxRpcRequest.HTTP_POST="post"; | |
AjxRpcRequest.HTTP_PUT="put"; | |
AjxRpcRequest.HTTP_DELETE="delete"; | |
AjxRpcRequest.__inited=false; | |
AjxRpcRequest.__msxmlVers=null; | |
AjxRpcRequest.prototype.invoke=function(f,e,j,m,a,k){var c=(m!=null); | |
this.methodName=e||""; | |
var d=AjxRpcRequest.HTTP_POST; | |
if(a){d=a===true?AjxRpcRequest.HTTP_GET:a | |
}if(window.csrfToken&&(d===AjxRpcRequest.HTTP_POST||d===AjxRpcRequest.HTTP_PUT||d===AjxRpcRequest.HTTP_DELETE)){j=j||{}; | |
j["X-Zimbra-Csrf-Token"]=window.csrfToken | |
}this.__httpReq.open(d,e,c); | |
if(c){if(k){var g=new AjxTimedAction(this,this.__handleTimeout,[m]); | |
m._timedActionId=AjxTimedAction.scheduleAction(g,k) | |
}var l=this; | |
this.__httpReq.onreadystatechange=function(i){if(window.AjxRpcRequest){AjxRpcRequest.__handleResponse(l,m) | |
}} | |
}else{this.__httpReq.onreadystatechange=function(i){} | |
}if(j){for(var h in j){if(j.hasOwnProperty(h)){this.__httpReq.setRequestHeader(h,j[h]) | |
}}}AjxDebug.println(AjxDebug.RPC,AjxDebug._getTimeStamp()+" RPC send: "+this.id); | |
this.__httpReq.send(f); | |
if(c){return this.id | |
}else{if(this.__httpReq.status==200||this.__httpReq.status==201){return{text:this.__httpReq.responseText,xml:this.__httpReq.responseXML,success:true} | |
}else{return{text:this.__httpReq.responseText,xml:this.__httpReq.responseXML,success:false,status:this.__httpReq.status} | |
}}}; | |
AjxRpcRequest.prototype.cancel=function(){AjxRpc.freeRpcCtxt(this); | |
if(AjxEnv.isFirefox3_5up){this.__httpReq.onreadystatechange=function(){} | |
}this.__httpReq.abort() | |
}; | |
AjxRpcRequest.prototype.__handleTimeout=function(a){this.cancel(); | |
a.run({text:null,xml:null,success:false,status:AjxRpcRequest.TIMEDOUT}) | |
}; | |
AjxRpcRequest.__handleResponse=function(d,e){try{if(!d||!d.__httpReq){d.cancel(); | |
AjxDebug.println(AjxDebug.RPC,AjxDebug._getTimeStamp()+" Async RPC request: Lost request object!!!"); | |
e.run({text:null,xml:null,success:false,status:500}); | |
AjxRpc.freeRpcCtxt(d); | |
return | |
}if(d.__httpReq.readyState==4){if(e._timedActionId!==null){AjxTimedAction.cancelAction(e._timedActionId) | |
}var a=500; | |
try{a=d.__httpReq.status | |
}catch(c){}if(a==200||a==201){e.run({text:d.__httpReq.responseText,xml:d.__httpReq.responseXML,success:true,reqId:d.id}) | |
}else{e.run({text:d.__httpReq.responseText,xml:d.__httpReq.responseXML,success:false,status:a,reqId:d.id}) | |
}AjxRpc.freeRpcCtxt(d) | |
}}catch(c){if(window.AjxException){AjxException.reportScriptError(c) | |
}}}; | |
AjxRpcRequest.__init=function(){if(!window.XMLHttpRequest&&window.ActiveXObject){var c=["MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"]; | |
for(var e=0; | |
e<c.length; | |
e++){try{var a=new ActiveXObject(c[e]); | |
AjxRpcRequest.__msxmlVers=c[e]; | |
break | |
}catch(d){}}if(!AjxRpcRequest.__msxmlVers){throw new AjxException("MSXML not installed",AjxException.INTERNAL_ERROR,"AjxRpc._init") | |
}}AjxRpcRequest.__inited=true | |
} | |
}if(AjxPackage.define("ajax.net.AjxRpc")){AjxRpc=function(){}; | |
AjxRpc.__rpcCache=[]; | |
AjxRpc.__rpcOutstanding={}; | |
AjxRpc.__RPC_CACHE_MAX=50; | |
AjxRpc.__RPC_ID=0; | |
AjxRpc.__RPC_IN_USE=0; | |
AjxRpc.__RPC_HIGH_WATER=0; | |
AjxRpc.__RPC_REAP_AGE=300000; | |
AjxRpc.__RPC_REAP_INTERVAL=1800000; | |
AjxRpc.invoke=function(e,d,h,l,a,k){var c=(l!=null); | |
var g=AjxRpc.__getFreeRpcCtxt(); | |
try{var f=g.invoke(e,d,h,l,a,k) | |
}catch(i){var j=new AjxException(); | |
j.method="AjxRpc.prototype._invoke"; | |
if(i instanceof Error){j.detail=i.message; | |
j.code=AjxException.NETWORK_ERROR; | |
j.msg="Network error" | |
}else{if(i.code==101){j.detail=i.message; | |
j.code=AjxException.NETWORK_ERROR; | |
j.msg="Network error" | |
}else{j.detail=i.toString(); | |
j.code=AjxException.UNKNOWN_ERROR; | |
j.msg="Unknown Error" | |
}}AjxRpc.freeRpcCtxt(g); | |
throw j | |
}if(!c){AjxRpc.freeRpcCtxt(g) | |
}return f | |
}; | |
AjxRpc.freeRpcCtxt=function(a){if(AjxRpc.__rpcOutstanding[a.id]){AjxDebug.println(AjxDebug.RPC,AjxDebug._getTimeStamp()+" --- freeing rpcCtxt "+a.id); | |
AjxRpc.__rpcCache.push(a); | |
delete AjxRpc.__rpcOutstanding[a.id]; | |
AjxRpc.__RPC_IN_USE-- | |
}}; | |
AjxRpc.removeRpcCtxt=function(a){AjxDebug.println(AjxDebug.RPC,AjxDebug._getTimeStamp()+" REMOVE rpcCtxt "+a.id); | |
if(AjxRpc.__rpcOutstanding[a.id]){delete AjxRpc.__rpcOutstanding[a.id]; | |
AjxRpc.__RPC_IN_USE-- | |
}AjxUtil.arrayRemove(AjxRpc.__rpcCache,a) | |
}; | |
AjxRpc.getRpcRequestById=function(a){return(AjxRpc.__rpcOutstanding[a]) | |
}; | |
AjxRpc.__getFreeRpcCtxt=function(){var a; | |
if(AjxRpc.__rpcCache.length>0){a=AjxRpc.__rpcCache.pop(); | |
AjxDebug.println(AjxDebug.RPC,AjxDebug._getTimeStamp()+" reusing RPC ID "+a.id) | |
}else{if(AjxRpc.__RPC_IN_USE<AjxRpc.__RPC_CACHE_MAX){var f="__RpcCtxt_"+AjxRpc.__RPC_ID; | |
a=new AjxRpcRequest(f); | |
AjxRpc.__RPC_ID++; | |
AjxDebug.println(AjxDebug.RPC,AjxDebug._getTimeStamp()+" Created RPC "+f) | |
}else{a=AjxRpc.__reap(); | |
if(!a){var e=[]; | |
for(var c in AjxRpc.__rpcOutstanding){var a=AjxRpc.__rpcOutstanding[c]; | |
e.push(a.methodName) | |
}var d=e.join("<br>")+"<br>"; | |
AjxDebug.println(AjxDebug.RPC,AjxDebug._getTimeStamp()+" Out of RPC cache!!! Outstanding requests: "+d); | |
throw new AjxException("Out of RPC cache",AjxException.OUT_OF_RPC_CACHE,"AjxRpc.__getFreeRpcCtxt",d) | |
}}}AjxRpc.__rpcOutstanding[a.id]=a; | |
AjxRpc.__RPC_IN_USE++; | |
if(AjxRpc.__RPC_IN_USE>AjxRpc.__RPC_HIGH_WATER){AjxRpc.__RPC_HIGH_WATER=AjxRpc.__RPC_IN_USE; | |
AjxDebug.println(AjxDebug.RPC,AjxDebug._getTimeStamp()+" High water mark: "+AjxRpc.__RPC_HIGH_WATER) | |
}a.timestamp=(new Date()).getTime(); | |
return a | |
}; | |
AjxRpc.__reap=function(d){var a; | |
var e=(new Date()).getTime(); | |
AjxDebug.println(AjxDebug.RPC,AjxDebug._getTimeStamp()+" Running RPC context reaper"); | |
for(var c in AjxRpc.__rpcOutstanding){a=AjxRpc.__rpcOutstanding[c]; | |
if((a.timestamp+AjxRpc.__RPC_REAP_AGE)<e){AjxDebug.println(AjxDebug.RPC,AjxDebug._getTimeStamp()+" AjxRpc.__reap: cleared RPC context "+a.id); | |
a.cancel(); | |
delete AjxRpc.__rpcOutstanding[c]; | |
AjxRpc.__RPC_IN_USE--; | |
if(!d){return a | |
}}}return null | |
}; | |
window.setInterval(AjxRpc.__reap.bind(null,true),AjxRpc.__RPC_REAP_INTERVAL) | |
}if(AjxPackage.define("ajax.net.AjxPost")){AjxPost=function(a){this._callback=null; | |
this._iframeId=a | |
}; | |
AjxPost._reqIds=0; | |
AjxPost._outStandingRequests=new Object(); | |
AjxPost.SC_CONTINUE=100; | |
AjxPost.SC_OK=200; | |
AjxPost.SC_ACCEPTED=202; | |
AjxPost.SC_NO_CONTENT=204; | |
AjxPost.SC_BAD_REQUEST=400; | |
AjxPost.SC_UNAUTHORIZED=401; | |
AjxPost.SC_REQUEST_TIMEOUT=408; | |
AjxPost.SC_CONFLICT=409; | |
AjxPost.SC_REQUEST_ENTITY_TOO_LARGE=413; | |
AjxPost.SC_INTERNAL_SERVER_ERROR=500; | |
AjxPost.SC_BAD_GATEWAY=502; | |
AjxPost.SC_SERVICE_UNAVAILABLE=503; | |
AjxPost.prototype.execute=function(k,a,j){var l=a.getElementsByTagName("input"); | |
var e=new Array(); | |
for(var d=0; | |
d<l.length; | |
d++){var m=l[d]; | |
if(m.type=="file"){e.push(m); | |
continue | |
}if(m.name&&m.name.match(/^filename\d+$/)){m.parentNode.removeChild(m); | |
d--; | |
continue | |
}}if(window.csrfToken){this._addHiddenField(e[0],"csrfToken",window.csrfToken) | |
}this._addHiddenFileNames(e); | |
a.target=this._iframeId; | |
this._callback=k; | |
var h=new AjxPostRequest(a); | |
var c=new AjxTimedAction(this,this._onFailure,[h.id]); | |
var g=j?j:5000; | |
AjxPost._outStandingRequests[h.id]=h; | |
try{h.send(c,g) | |
}catch(f){if(AjxEnv.isIE){if(f.number==-2147024891){throw new AjxException(ZmMsg.uploadErrorAccessDenied,f.number) | |
}}throw f | |
}}; | |
AjxPost.prototype._addHiddenFileNames=function(c){var a=0; | |
for(var e=0; | |
e<c.length; | |
e++){var h=c[e]; | |
if(h.files&&h.files.length>1){var g=h.files,l=[]; | |
for(var d=0; | |
d<g.length; | |
d++){var k=g[d]; | |
l.push(k.name||k.fileName) | |
}this._addHiddenFileName(c[e],l.join("\n"),++a) | |
}else{this._addHiddenFileName(c[e],c[e].value,++a) | |
}}}; | |
AjxPost.prototype._addHiddenFileName=function(a,d,c){this._addHiddenField(a,"filename"+(c),d) | |
}; | |
AjxPost.prototype._addHiddenField=function(e,d,c){var a=document.createElement("input"); | |
a.type="hidden"; | |
a.name=d; | |
a.value=c; | |
e.parentNode.insertBefore(a,e) | |
}; | |
AjxPost.prototype._onFailure=function(c){var a=AjxPost._outStandingRequests[c]; | |
a.cancel(); | |
delete AjxPost._outStandingRequests[c]; | |
if(this._callback){this._callback.run([404]); | |
this._callback=null | |
}}; | |
AjxPost.prototype.loaded=function(a,d,e){var c=AjxPost._outStandingRequests[d]; | |
if(c&&!c.hasBeenCancelled()){c.cancelTimeout() | |
}delete AjxPost._outStandingRequests[d]; | |
if(this._callback){this._callback.run(a,e); | |
this._callback=null | |
}}; | |
AjxPostRequest=function(c){this.id=AjxPost._reqIds++; | |
this._cancelled=false; | |
this._form=c; | |
var a=c.elements.namedItem("requestId"); | |
if(!a){a=c.ownerDocument.createElement("input"); | |
a.type="hidden"; | |
a.name="requestId" | |
}a.value=this.id; | |
c.appendChild(a) | |
}; | |
AjxPostRequest.prototype.send=function(c,a){this._form.submit() | |
}; | |
AjxPostRequest.prototype.hasBeenCancelled=function(){return this._cancelled | |
}; | |
AjxPostRequest.prototype.cancelTimeout=function(){AjxTimedAction.cancelAction(this._timeoutId) | |
}; | |
AjxPostRequest.prototype.cancel=function(){this._cancelled=true | |
} | |
}if(AjxPackage.define("ajax.util.AjxVector")){AjxVector=function(a){this._array=a||[] | |
}; | |
AjxVector.prototype.isAjxVector=true; | |
AjxVector.prototype.toString=function(f,d){if(d!==true){return this._array.join(f) | |
}var e=new Array(); | |
for(var g=0; | |
g<this._array.length; | |
g++){var c=this._array[g]; | |
if(c!=undefined&&c!=null&&c!=""){e.push(c) | |
}}return e.join(f) | |
}; | |
AjxVector.fromArray=function(c){var a=new AjxVector(); | |
if(AjxUtil.isArray1(c)){a._array=c | |
}return a | |
}; | |
AjxVector.prototype.size=function(){return this._array.length | |
}; | |
AjxVector.prototype.add=function(d,a,c){if(c&&this.contains(d)){return | |
}AjxUtil.arrayAdd(this._array,d,a) | |
}; | |
AjxVector.prototype.addList=function(d){if(!d){return | |
}if(d.length){this._array=this._array.concat(d) | |
}else{if(d.size&&d.size()){if(AjxEnv.isIE&&(!(d._array instanceof Array))){var c=[]; | |
for(var a=0; | |
a<d._array.length; | |
a++){c.push(d._array[a]) | |
}d._array=c | |
}this._array=this._array.concat(d._array) | |
}}}; | |
AjxVector.prototype.remove=function(a){return AjxUtil.arrayRemove(this._array,a) | |
}; | |
AjxVector.prototype.removeAt=function(c){if(c>=this._array.length||c<0){return null | |
}var d=this._array.splice(c,1); | |
var a=null; | |
if(d){a=d[0] | |
}return a | |
}; | |
AjxVector.prototype.removeAll=function(){for(var a=0; | |
a<this._array.length; | |
a++){this._array[a]=null | |
}this._array.length=0 | |
}; | |
AjxVector.prototype.removeLast=function(){return this._array.length>0?this._array.pop():null | |
}; | |
AjxVector.prototype.reverse=function(){this._array.reverse() | |
}; | |
AjxVector.prototype.replace=function(d,c){var a=this._array[d]; | |
this._array[d]=c; | |
return a | |
}; | |
AjxVector.prototype.replaceObject=function(d,a){for(var c=0; | |
c<this._array.length; | |
c++){if(this._array[c]==d){this._array[c]=a; | |
return d | |
}}return null | |
}; | |
AjxVector.prototype.indexOf=function(d,c){if(d==null){return -1 | |
}d=c?c.call(d):d; | |
for(var a=0; | |
a<this._array.length; | |
a++){var f=this._array[a],e=c?c.call(f):f; | |
if(e===d){return a | |
}}return -1 | |
}; | |
AjxVector.prototype.indexOfLike=AjxVector.prototype.indexOf; | |
AjxVector.prototype.lastIndexOf=function(d,c){if(d==null){return -1 | |
}d=c?c.call(d):d; | |
for(var a=this._array.length-1; | |
a>=0; | |
a--){var f=this._array[a],e=c?c.call(f):f; | |
if(f===d){return a | |
}}return -1 | |
}; | |
AjxVector.prototype.lastIndexOfLike=AjxVector.prototype.lastIndexOf; | |
AjxVector.prototype.lastIndexOfLike=function(e,d){var c=d.call(e); | |
for(var a=this._array.length-1; | |
a>=0; | |
a--){var f=d.call(this._array[a]); | |
if(f==c){return a | |
}}return -1 | |
}; | |
AjxVector.prototype.clone=function(){var a=new AjxVector(); | |
a.addList(this); | |
return a | |
}; | |
AjxVector.prototype.contains=function(a){return AjxUtil.arrayContains(this._array,a) | |
}; | |
AjxVector.prototype.containsLike=function(e,d){var c=d.call(e); | |
for(var a=0; | |
a<this._array.length; | |
a++){var f=d.call(this._array[a]); | |
if(f==c){return true | |
}}return false | |
}; | |
AjxVector.prototype.get=function(a){return a>=this._array.length||a<0?null:this._array[a] | |
}; | |
AjxVector.prototype.getArray=function(){return this._array | |
}; | |
AjxVector.prototype.getLast=function(){return this._array.length==0?null:this._array[this._array.length-1] | |
}; | |
AjxVector.prototype.getNext=function(c){var a=this.indexOf(c); | |
if(a==-1){return null | |
}return this.get(++a) | |
}; | |
AjxVector.prototype.getPrev=function(c){var a=this.indexOf(c); | |
if(a==-1){return null | |
}return this.get(--a) | |
}; | |
AjxVector.prototype.sort=function(a){if(!a){a=AjxVector._defaultArrayComparator | |
}this._array.sort(a) | |
}; | |
AjxVector.prototype.binarySearch=function(g,h){if(!h){h=AjxVector._defaultArrayComparator | |
}var d=0; | |
var a=this._array; | |
var e=a.length-1; | |
while(true){if(e<d){return -1 | |
}var f=Math.floor((d+e)/2); | |
var c=h(g,a[f]); | |
if(c<0){e=f-1 | |
}else{if(c>0){d=f+1 | |
}else{return f | |
}}}}; | |
AjxVector.prototype.merge=function(f,e){if(f<0){return | |
}var g=e instanceof AjxVector?e.getArray():e; | |
var a=this._array.length<(f+g.length)?this._array.length:f+g.length; | |
if(f<this._array.length){var d=0; | |
for(var c=f; | |
c<a; | |
c++){this._array[c]=g[d++] | |
}if(d<g.length){this._array=this._array.concat(g.slice(d)) | |
}}else{this._array=this._array.concat(g) | |
}}; | |
AjxVector._defaultArrayComparator=function(d,c){return d<c?-1:(d>c?1:0) | |
}; | |
AjxVector.prototype.foreach=function(e,g){var a=this.size(),c=0,d; | |
if(typeof e=="function"){while(--a>=0){e.call(g,this.get(c),c++) | |
}}else{while(--a>=0){d=this.get(c++); | |
if(d!=null){d[e].call(d) | |
}}}}; | |
AjxVector.prototype.map=function(g,h){var c=[],d=this.size(),e; | |
if(typeof g=="function"){while(--d>=0){c[d]=g.call(h,this.get(d),d) | |
}}else{if(g instanceof AjxCallback){while(--d>=0){c[d]=g.run(this.get(d),d) | |
}}else{while(--d>=0){e=this.get(d); | |
if(e!=null){if(typeof e[g]=="function"){c.unshift(e[g].call(e)) | |
}else{c.unshift(e[g]) | |
}}}}}return AjxVector.fromArray(c) | |
}; | |
AjxVector.prototype.filter=function(c,a){return AjxVector.fromArray(AjxUtil.filter(this._array,c,a)) | |
}; | |
AjxVector.prototype.join=function(a){return this._array.join(a) | |
}; | |
AjxVector.prototype.some=function(a,c){return this._array.some(a,c) | |
}; | |
AjxVector.prototype.sub=function(h,j){var d=[],c=this.size(),e=0,g; | |
while(--c>=0){g=this.get(e++); | |
if(!h.call(j,g,e)){d.push(g) | |
}}return AjxVector.fromArray(d) | |
}; | |
AjxVector.prototype.slice=function(c,a){return AjxVector.fromArray(this._array.slice(c,a)) | |
} | |
}if(AjxPackage.define("ajax.util.AjxStringUtil")){AjxStringUtil=function(){}; | |
AjxStringUtil.TRIM_RE=/^\s+|\s+$/g; | |
AjxStringUtil.COMPRESS_RE=/\s+/g; | |
AjxStringUtil.ELLIPSIS=" ... "; | |
AjxStringUtil.ELLIPSIS_NO_SPACE="..."; | |
AjxStringUtil.LIST_SEP=", "; | |
AjxStringUtil.CRLF="\r\n"; | |
AjxStringUtil.CRLF2="\r\n\r\n"; | |
AjxStringUtil.CRLF_HTML="<br>"; | |
AjxStringUtil.CRLF2_HTML="<div><br></div><div><br></div>"; | |
AjxStringUtil.IMG_SRC_CID_REGEX=/<img([^>]*)\ssrc=["']cid:/gi; | |
AjxStringUtil.makeString=function(a){return a?String(a):"" | |
}; | |
AjxStringUtil.capitalize=function(a){return a&&a.length>0?a.charAt(0).toUpperCase()+a.substr(1).toLowerCase():"" | |
}; | |
AjxStringUtil.capitalizeFirstLetter=function(a){return a&&a.length>0?a.charAt(0).toUpperCase()+a.substr(1):"" | |
}; | |
AjxStringUtil.capitalizeWords=function(a){return a?AjxUtil.map(a.split(/\s+/g),AjxStringUtil.capitalizeFirstLetter).join(" "):"" | |
}; | |
AjxStringUtil.toMixed=function(g,a,e){if(!g||(typeof g!="string")){return"" | |
}a=a||/\s+/; | |
var d=g.split(a); | |
var f=[]; | |
f.push(e?d[0].toLowerCase():d[0].substring(0,1).toUpperCase()+d[0].substring(1).toLowerCase()); | |
for(var c=1; | |
c<d.length; | |
c++){f.push(d[c].substring(0,1).toUpperCase()+d[c].substring(1).toLowerCase()) | |
}return f.join("") | |
}; | |
AjxStringUtil.fromMixed=function(c,a){a=["$1",a||" ","$2"].join(""); | |
return AjxStringUtil.trim(c.replace(/([a-z])([A-Z]+)/g,a)) | |
}; | |
AjxStringUtil.trim=function(f,a,e){if(!f){return"" | |
}var d=AjxStringUtil.TRIM_RE; | |
var c=AjxStringUtil.COMPRESS_RE; | |
if(e){d=new RegExp("^"+e+"+|"+e+"+$","g"); | |
c=new RegExp(e+"+","g") | |
}else{e=" " | |
}f=f.replace(d,""); | |
if(a){f=f.replace(c,e) | |
}return f | |
}; | |
AjxStringUtil.repeat=function(e,a){var d=""; | |
for(var c=0; | |
c<a; | |
c++){d+=e | |
}return d | |
}; | |
AjxStringUtil.getUnitsFromSizeString=function(c){var d="px"; | |
if(typeof(c)=="string"){var a=Number(parseInt(c,10)).toString(); | |
if(c.length>a.length){d=c.substr(a.length,(c.length-a.length)); | |
if(!(d=="em"||d=="ex"||d=="px"||d=="in"||d=="cm"==d=="mm"||d=="pt"||d=="pc"||d=="%")){d="px" | |
}}}return d | |
}; | |
AjxStringUtil.split=function(m,f){if(!m){return[] | |
}var h=0; | |
f=f?f:","; | |
var o=new Object(); | |
if(typeof f=="string"){o[f]=1 | |
}else{for(h=0; | |
h<f.length; | |
h++){o[f[h]]=1 | |
}}var a=false; | |
var e=0; | |
var d=0; | |
var n; | |
var k=[]; | |
var g=0; | |
for(h=0; | |
h<m.length; | |
h++){var l=m.charAt(h); | |
if(l=='"'){a=!a | |
}else{if(l=="("){e++ | |
}else{if(l==")"){e-- | |
}else{if(o[l]){if(!a&&!e){n=m.substring(d,h); | |
k[g++]=n; | |
d=h+1 | |
}}}}}}n=m.substring(d,m.length); | |
k[g++]=n; | |
return k | |
}; | |
AjxStringUtil.SPACE_WORD_RE=new RegExp("\\s*\\S+","g"); | |
AjxStringUtil.splitKeepLeadingWhitespace=function(c){var d=[],a; | |
while(a=AjxStringUtil.SPACE_WORD_RE.exec(c)){d.push(a[0]) | |
}return d | |
}; | |
AjxStringUtil.WRAP_LENGTH=80; | |
AjxStringUtil.HDR_WRAP_LENGTH=120; | |
AjxStringUtil.MAX_HTMLNODE_COUNT=250; | |
AjxStringUtil.HTML_QUOTE_COLOR="#1010FF"; | |
AjxStringUtil.HTML_QUOTE_STYLE="color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"; | |
AjxStringUtil.HTML_QUOTE_PREFIX_PRE='<blockquote style="border-left:2px solid '+AjxStringUtil.HTML_QUOTE_COLOR+";margin-left:5px;padding-left:5px;"+AjxStringUtil.HTML_QUOTE_STYLE+'">'; | |
AjxStringUtil.HTML_QUOTE_PREFIX_POST="</blockquote>"; | |
AjxStringUtil.HTML_QUOTE_NONPREFIX_PRE='<div style="'+AjxStringUtil.HTML_QUOTE_STYLE+'">'; | |
AjxStringUtil.HTML_QUOTE_NONPREFIX_POST="</div><br/>"; | |
AjxStringUtil.wordWrap=function(G){if(!(G&&G.text)){return"" | |
}var q=G.text; | |
var r=G.before||""; | |
var c=G.after||""; | |
var d=G.isFlowed; | |
if(G.htmlMode){r=G.before||(G.prefix?AjxStringUtil.HTML_QUOTE_PREFIX_PRE:AjxStringUtil.HTML_QUOTE_NONPREFIX_PRE); | |
c=G.after||(G.prefix?AjxStringUtil.HTML_QUOTE_PREFIX_POST:AjxStringUtil.HTML_QUOTE_NONPREFIX_POST); | |
return[r,q,c].join("") | |
}var A=G.len||(G.isHeaders?AjxStringUtil.HDR_WRAP_LENGTH:AjxStringUtil.WRAP_LENGTH); | |
var H=G.prefix||""; | |
var g="\n"; | |
var a=q.split(AjxStringUtil.SPLIT_RE); | |
var t=[]; | |
for(var x=0,F=a.length; | |
x<F; | |
x++){var o=a[x]; | |
var v=o.match(/^([\s>\|]+)/); | |
var y=v?v[1]:""; | |
if(y){o=o.substr(y.length) | |
}if(AjxStringUtil._NON_WHITESPACE.test(o)){var j=AjxStringUtil.splitKeepLeadingWhitespace(o); | |
if(j&&j[0]&&j[0].length){var u=AjxStringUtil.MSG_SEP_RE.test(o)||AjxStringUtil.COLON_RE.test(o)||AjxStringUtil.HDR_RE.test(o)||G.isHeaders||AjxStringUtil.SIG_RE.test(o); | |
var s=G.preserveReturns; | |
if(d){var v=o.match(/( +)$/); | |
if(v){j[j.length-1]+=v[1]; | |
s=false | |
}else{s=true | |
}}for(var n=0,p=j.length; | |
n<p; | |
n++){t.push({w:j[n],prefix:y,mustStart:(n===0)&&u,mustEnd:(n===p-1)&&s}) | |
}}}else{t.push({para:true,prefix:y}) | |
}}var k="",f=0,j=[],h=null; | |
for(var z=0,B=t.length; | |
z<B; | |
z++){var C=t[z]; | |
var n=C.w,y=C.prefix; | |
var e=!H?"":h?H:H+" "; | |
var D=(h===null)?0:h.length; | |
D=0; | |
var E=e+(h||""); | |
if(C.para){if(j.length){k+=E+j.join("").replace(/^ +/,"")+g | |
}if(z<t.length-1){h=y; | |
e=!H?"":h?H:H+" "; | |
E=e+(h||""); | |
k+=E+g | |
}j=[]; | |
f=0; | |
h=null | |
}else{if((D+f+n.length<=A)&&(y===h||h===null)&&!C.mustStart){j.push(n); | |
f+=n.length; | |
h=y; | |
if(C.mustEnd&&t[z+1]){t[z+1].mustStart=true | |
}}else{if(j.length){k+=E+j.join("").replace(/^ +/,"")+g | |
}j=[n]; | |
f=n.length; | |
h=y; | |
if(C.mustEnd&&t[z+1]){t[z+1].mustStart=true | |
}}}}if(j.length){var e=!H?"":j[0].prefix?H:H+" "; | |
var E=e+(h||""); | |
k+=E+j.join("").replace(/^ /,"")+g | |
}return[r,k,c].join("") | |
}; | |
AjxStringUtil.quoteText=function(e){if(!(e&&e.text)){return"" | |
}var j=e.text; | |
var i=e.before||"",a=e.after||""; | |
if(e.htmlMode||!e.pre){return[i,j,a].join("") | |
}var g=e.len||80; | |
var d=e.pre||""; | |
var h="\n"; | |
j=AjxStringUtil.trim(j); | |
j=j.replace(/\n\r/g,h); | |
var n=j.split(h); | |
var m=[]; | |
for(var c=0,f=n.length; | |
c<f; | |
c++){var k=AjxStringUtil.trim(n[c]); | |
m.push(d+k+h) | |
}return i+m.join("")+a | |
}; | |
AjxStringUtil.SHIFT_CHAR={48:")",49:"!",50:"@",51:"#",52:"$",53:"%",54:"^",55:"&",56:"*",57:"(",59:":",186:":",187:"+",188:"<",189:"_",190:">",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'}; | |
AjxStringUtil.shiftChar=function(a,c){return c?AjxStringUtil.SHIFT_CHAR[a]||String.fromCharCode(a):String.fromCharCode(a) | |
}; | |
AjxStringUtil.diffPoint=function(e,d){if(!(e&&d)){return 0 | |
}var a=Math.min(e.length,d.length); | |
var c=0; | |
while(c<a&&(e.charAt(c)==d.charAt(c))){c++ | |
}return c | |
}; | |
AjxStringUtil.resolve=function(c,a){return AjxMessageFormat.format(c,a) | |
}; | |
AjxStringUtil.urlEncode=function(c){if(!c){return"" | |
}var a=window.encodeURL||window.encodeURI; | |
return a(c) | |
}; | |
AjxStringUtil.urlComponentEncode=function(c){if(!c){return"" | |
}var a=window.encodeURLComponent||window.encodeURIComponent; | |
return a(c) | |
}; | |
AjxStringUtil.urlDecode=function(d){if(!d){return"" | |
}var a=window.decodeURL||window.decodeURI; | |
try{return a(d) | |
}catch(c){return"" | |
}}; | |
AjxStringUtil.urlComponentDecode=function(f){if(!f){return"" | |
}var c=window.decodeURLComponent||window.decodeURIComponent; | |
var a; | |
try{a=c(f) | |
}catch(d){a=unescape(f) | |
}return a||f | |
}; | |
AjxStringUtil.ENCODE_MAP={">":">","<":"<","&":"&"}; | |
AjxStringUtil.htmlEncode=function(c,a){if(!c){return"" | |
}if(typeof(c)!="string"){c=c.toString?c.toString():"" | |
}if(!AjxEnv.isSafari||AjxEnv.isSafariNightly){if(a){return c.replace(/[<>&]/g,function(d){return AjxStringUtil.ENCODE_MAP[d] | |
}).replace(/ /g," ") | |
}else{return c.replace(/[<>&]/g,function(d){return AjxStringUtil.ENCODE_MAP[d] | |
}) | |
}}else{if(a){return c.replace(/[&]/g,"&").replace(/ /g," ").replace(/[<]/g,"<").replace(/[>]/g,">") | |
}else{return c.replace(/[&]/g,"&").replace(/[<]/g,"<").replace(/[>]/g,">") | |
}}}; | |
AjxStringUtil.encodeQuotes=function(a){return a.replace(/"/g,""").replace(/'/g,"'") | |
}; | |
AjxStringUtil.htmlDecode=function(c,a){if(a){c=c.replace(/ /g," ") | |
}return c.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">") | |
}; | |
AjxStringUtil.__jsEscapeChar=function(d){var a=d.charCodeAt(0).toString(16); | |
if(a.length==1){return"\\u000"+a | |
}else{if(a.length==2){return"\\u00"+a | |
}else{if(a.length==3){return"\\u0"+a | |
}else{if(a.length==4){return"\\u"+a | |
}}}}DBG.println(AjxDebug.NONE,"unexpected condition in AjxStringUtil.__jsEscapeChar -- code point 0x"+a+" doesn't fit in 16 bits") | |
}; | |
AjxStringUtil.jsEncode=function(a){return a.replace(/[^\u0020-\u007e]/g,AjxStringUtil.__jsEscapeChar) | |
}; | |
AjxStringUtil.stripTags=function(c,a){if(typeof c!=="string"){return"" | |
}if(a){c=c.replace(/(<(\w+)[^>]*>).*(<\/\2[^>]*>)/,"$1$3") | |
}return c.replace(/<\/?[^>]+>/gi,"") | |
}; | |
AjxStringUtil.convertToHtml=function(j,d,c,h){c=c||"<blockquote>"; | |
h=h||"</blockquote>"; | |
if(!j){return"" | |
}j=AjxStringUtil.htmlEncode(j); | |
if(d){var e=/^(>|>|\|\s+)/; | |
var l=j.split(/\r?\n/); | |
var a=0; | |
for(var f=0; | |
f<l.length; | |
f++){var k=l[f]; | |
if(k.length>0){var g=0; | |
while(k.match(e)){k=k.replace(e,""); | |
g++ | |
}while(g>a){k=c+k; | |
a++ | |
}while(g<a){l[f-1]=l[f-1]+h; | |
a-- | |
}}l[f]=k | |
}while(a>0){l.push(h); | |
a-- | |
}j=l.join("\n") | |
}j=j.replace(/ /mg," ").replace(/^ /mg," ").replace(/\t/mg," ").replace(/\r?\n/mg,"<br>"); | |
return j | |
}; | |
AjxStringUtil.SPACE_ENCODE_MAP={" ":" ",">":">","<":"<","&":"&","\n":"<br>"}; | |
AjxStringUtil.htmlEncodeSpace=function(a){if(!a){return"" | |
}return a.replace(/[&]/g,"&").replace(/ /g," ").replace(/[<]/g,"<").replace(/[>]/g,">") | |
}; | |
AjxStringUtil.htmlRubyEncode=function(a,c){if(a&&c){return["<ruby>","<rb>",AjxStringUtil.htmlEncode(a),"</rb> ","<rp>(</rp><rt>",AjxStringUtil.htmlEncode(c),"</rt><rp>)</rp>","</ruby>"].join("") | |
}return AjxStringUtil.htmlEncode(a||c||"") | |
}; | |
AjxStringUtil.nl2br=function(a){if(!a){return"" | |
}return a.replace(/^ /mg," ").replace(/\t/mg,"<span style='white-space:pre'>\t</span>").replace(/\n/g,"<br>") | |
}; | |
AjxStringUtil.xmlEncode=function(a){if(a){a=""+a; | |
return a.replace(/&/g,"&").replace(/</g,"<") | |
}return"" | |
}; | |
AjxStringUtil.xmlDecode=function(a){return a?a.replace(/&/g,"&").replace(/</g,"<"):"" | |
}; | |
AjxStringUtil.xmlAttrEncode=function(a){return a?a.replace(/&/g,"&").replace(/</g,"<").replace(/\x22/g,""").replace(/\x27/g,"'"):"" | |
}; | |
AjxStringUtil.xmlAttrDecode=function(a){return a?a.replace(/&/g,"&").replace(/</g,"<").replace(/"/g,'"').replace(/'/g,"'"):"" | |
}; | |
AjxStringUtil.__RE_META={" ":" ","\n":"\\n","\r":"\\r","\t":"\\t"}; | |
AjxStringUtil.__reMetaEscape=function(c,a){return AjxStringUtil.__RE_META[a]||"\\"+a | |
}; | |
AjxStringUtil.regExEscape=function(a){return a.replace(/(\W)/g,AjxStringUtil.__reMetaEscape) | |
}; | |
AjxStringUtil._calcDIV=null; | |
AjxStringUtil.calcDIV=function(){if(AjxStringUtil._calcDIV==null){AjxStringUtil._calcDIV=document.createElement("div"); | |
AjxStringUtil._calcDIV.style.zIndex=0; | |
AjxStringUtil._calcDIV.style.position=DwtControl.ABSOLUTE_STYLE; | |
AjxStringUtil._calcDIV.style.visibility="hidden"; | |
document.body.appendChild(AjxStringUtil._calcDIV) | |
}return AjxStringUtil._calcDIV | |
}; | |
AjxStringUtil.clip=function(a,g,f){var e=AjxStringUtil.calcDIV(); | |
if(arguments.length==3){e.className=f | |
}e.innerHTML=a; | |
if(e.offsetWidth<=g){return a | |
}for(var d=a.length-1; | |
d>0; | |
d--){var c=a.substr(0,d); | |
e.innerHTML=c+AjxStringUtil.ELLIPSIS; | |
if(e.offsetWidth<=g){return c+AjxStringUtil.ELLIPSIS | |
}}return a | |
}; | |
AjxStringUtil.clipByLength=function(d,c){var a=d.length; | |
return(a<=c)?d:[d.substr(0,c/2),"...",d.substring(a-((c/2)-3),a)].join("") | |
}; | |
AjxStringUtil.wrap=function(g,h,i){var n=AjxStringUtil.calcDIV(); | |
if(arguments.length==3){n.className=i | |
}var j=""; | |
var f=""; | |
var a=g.split("/n"); | |
for(var e=0; | |
e<a.length; | |
e++){if(e!=0){j+=f+"<br>"; | |
f="" | |
}htmlRows=a[e].split("<br>"); | |
for(var l=0; | |
l<htmlRows.length; | |
l++){if(l!=0){j+=f+"<br>"; | |
f="" | |
}words=htmlRows[l].split(" "); | |
var m=0; | |
while(m<words.length){n.innerHTML=f+" "+words[m]; | |
var d=n.offsetWidth; | |
if(d>h){n.innerHTML=words[m]; | |
d=d-n.offsetWidth; | |
if((d>=h)||(n.offsetWidth<=h)){j+=f+"<br>"; | |
f="" | |
}else{var k=true; | |
var c=0; | |
while(k){c++; | |
n.innerHTML=f+" "+words[m].substring(0,c); | |
k=(n.offsetWidth<=h) | |
}c--; | |
j+=f+words[m].substring(0,c)+"<br>"; | |
words[m]=words[m].substr(c); | |
f="" | |
}}else{f+=" "+words[m]; | |
m++ | |
}}}}j+=f; | |
return j | |
}; | |
AjxStringUtil.MSG_SEP_RE=new RegExp("^\\s*--+\\s*("+AjxMsg.origMsg+"|"+AjxMsg.forwardedMessage+")\\s*--+","i"); | |
AjxStringUtil.SIG_RE=/^(- ?-+)|(__+)\r?$/; | |
AjxStringUtil.SPLIT_RE=/\r\n|\r|\n/; | |
AjxStringUtil.HDR_RE=/^\s*\w+:/; | |
AjxStringUtil.COLON_RE=/\S+:$/; | |
AjxStringUtil._NO_LIST=0; | |
AjxStringUtil._ORDERED_LIST=1; | |
AjxStringUtil._UNORDERED_LIST=2; | |
AjxStringUtil._INDENT=" "; | |
AjxStringUtil._NON_WHITESPACE=/\S+/; | |
AjxStringUtil._LF=/\n/; | |
AjxStringUtil.convertHtml2Text=function(e,g,f){if(!e){return"" | |
}if(g&&AjxUtil.isFunction(g._before)){e=g._before(e) | |
}if(typeof e=="string"){var h=document.createElement("SPAN"); | |
h.innerHTML=e; | |
e=h | |
}var i=[]; | |
var d=0; | |
var c={}; | |
AjxStringUtil._traverse(e,i,d,AjxStringUtil._NO_LIST,0,0,c,g,f); | |
var a=i.join(""); | |
if(g&&AjxUtil.isFunction(g._after)){a=g._after(a) | |
}return a | |
}; | |
AjxStringUtil._traverse=function(a,p,m,k,h,f,g,l,n){var j=a.nodeName.toLowerCase(); | |
var q=null; | |
if(l&&l[j]){q=l[j](a,g) | |
}if(q!=null){p[m++]=q | |
}else{if(j=="#text"){if(a.nodeValue.search(AjxStringUtil._NON_WHITESPACE)!=-1){if(g.lastNode=="ol"||g.lastNode=="ul"){p[m++]="\n" | |
}if(g.isPreformatted){p[m++]=AjxStringUtil.trim(a.nodeValue)+" " | |
}else{p[m++]=AjxStringUtil.trim(a.nodeValue.replace(AjxStringUtil._LF," "),true)+" " | |
}}}else{if(j=="p"){p[m++]=n?"\n":"\n\n" | |
}else{if(j==="a"){if(a.href){p[m++]="[ "; | |
p[m++]=a.href; | |
if(a.textContent){p[m++]=" | "; | |
p[m++]=a.textContent | |
}p[m++]=" ] "; | |
return m | |
}}else{if(k==AjxStringUtil._NO_LIST&&(j=="br"||j=="hr")){p[m++]="\n" | |
}else{if(j=="ol"||j=="ul"){p[m++]="\n"; | |
if(a.parentNode.nodeName.toLowerCase()!="li"&&g.lastNode!="br"&&g.lastNode!="hr"){p[m++]="\n" | |
}k=(j=="ol")?AjxStringUtil._ORDERED_LIST:AjxStringUtil._UNORDERED_LIST; | |
h++; | |
f=0 | |
}else{if(j=="li"){for(var d=0; | |
d<h; | |
d++){p[m++]=AjxStringUtil._INDENT | |
}if(k==AjxStringUtil._ORDERED_LIST){p[m++]=f+". " | |
}else{p[m++]="\u002A " | |
}}else{if(j=="tr"&&a.parentNode.firstChild!=a){p[m++]="\n" | |
}else{if(j=="td"&&a.parentNode.firstChild!=a){p[m++]="\t" | |
}else{if(j=="div"||j=="address"){if(m&&p[m-1]!=="\n"){p[m++]="\n" | |
}}else{if(j=="blockquote"){p[m++]="\n\n" | |
}else{if(j=="pre"){if(m&&p[m-1]!=="\n"){p[m++]="\n" | |
}g.isPreformatted=true | |
}else{if(j=="#comment"||j=="script"||j=="select"||j=="style"){return m | |
}}}}}}}}}}}}}var o=a.childNodes; | |
var e=o.length; | |
for(var d=0; | |
d<e; | |
d++){var c=o[d]; | |
if(c.nodeType==1&&c.tagName.toLowerCase()=="li"){f++ | |
}m=AjxStringUtil._traverse(c,p,m,k,h,f,g,l,n) | |
}if(l&&l["/"+j]){p[m++]=l["/"+j](a) | |
}if(j=="h1"||j=="h2"||j=="h3"||j=="h4"||j=="h5"||j=="h6"||j=="div"||j=="address"){if(m&&p[m-1]!=="\n"){p[m++]="\n" | |
}g.list=false | |
}else{if(j=="pre"){if(m&&p[m-1]!=="\n"){p[m++]="\n" | |
}g.isPreformatted=false | |
}else{if(j=="li"){if(!g.list){p[m++]="\n" | |
}g.list=false | |
}else{if(j=="ol"||j=="ul"){g.list=true | |
}else{if(j!="#text"){g.list=false | |
}}}}}g.lastNode=j; | |
return m | |
}; | |
AjxStringUtil.queryStringSet=function(j,l){var k=l?"":location.search; | |
if(k.indexOf("?")==0){k=k.substr(1) | |
}var h=k.split("&"); | |
var d={}; | |
for(var e=0; | |
e<h.length; | |
e++){var g=h[e].split("="); | |
d[g[0]]=g[1] | |
}for(var a in j){d[a]=j[a] | |
}var c=[]; | |
var e=0; | |
for(var a in d){if(a){c[e++]=[a,d[a]].join("=") | |
}}return"?"+c.join("&") | |
}; | |
AjxStringUtil.queryStringRemove=function(a,d){a=a?a:""; | |
if(a.indexOf("?")==0){a=a.substr(1) | |
}var f=a.split("&"); | |
var c=[]; | |
for(var e=0; | |
e<f.length; | |
e++){if(f[e].indexOf(d)!=0){c.push(f[e]) | |
}}return"?"+c.join("&") | |
}; | |
AjxStringUtil.getAsString=function(a){return !a?"":(typeof(a)=="object")?a.toString():a | |
}; | |
AjxStringUtil.isWhitespace=function(a){return(a.charCodeAt(0)<=32) | |
}; | |
AjxStringUtil.isDigit=function(c){var a=c.charCodeAt(0); | |
return(a>=48&&a<=57) | |
}; | |
AjxStringUtil.compareRight=function(f,d){var g=0; | |
var i=0; | |
var h=0; | |
var e; | |
var c; | |
for(; | |
(i<f.length||h<d.length); | |
i++,h++){e=f.charAt(i); | |
c=d.charAt(h); | |
if(!AjxStringUtil.isDigit(e)&&!AjxStringUtil.isDigit(c)){return g | |
}else{if(!AjxStringUtil.isDigit(e)){return -1 | |
}else{if(!AjxStringUtil.isDigit(c)){return +1 | |
}else{if(e<c){if(g==0){g=-1 | |
}}else{if(e>c){if(g==0){g=+1 | |
}}}}}}}}; | |
AjxStringUtil.natCompare=function(j,i){var h=0,f=0; | |
var d=0,c=0; | |
var g,e; | |
while(h<j.length||f<i.length){d=c=0; | |
g=j.charAt(h); | |
e=i.charAt(f); | |
while(AjxStringUtil.isWhitespace(g)||g=="0"){d=(g=="0")?(d+1):0; | |
g=j.charAt(++h) | |
}while(AjxStringUtil.isWhitespace(e)||e=="0"){c=(e=="0")?(c+1):0; | |
e=i.charAt(++f) | |
}if(AjxStringUtil.isDigit(g)&&AjxStringUtil.isDigit(e)){var k=AjxStringUtil.compareRight(j.substring(h),i.substring(f)); | |
if(k&&k!=0){return k | |
}}if(g==0&&e==0){return d-c | |
}if(g<e){return -1 | |
}else{if(g>e){return +1 | |
}}++h; | |
++f | |
}}; | |
AjxStringUtil.clipFile=function(f,a){var c=f.lastIndexOf("."); | |
if(c<=0){c=f.length | |
}if(c<=a){return f | |
}var e=f.slice(0,c); | |
var d=f.slice(c); | |
return[e.slice(0,a/2),AjxMsg.ellipsis,e.slice(-Math.ceil(a/2)+AjxMsg.ellipsis.length),d].join("") | |
}; | |
AjxStringUtil.URL_PARSE_RE=new RegExp("^(?:([^:/?#.]+):)?(?://)?(([^:/?#]*)(?::(\\d*))?)?((/(?:[^?#](?![^?#/]*\\.[^?#/.]+(?:[\\?#]|$)))*/?)?([^?#/]*))?(?:\\?([^#]*))?(?:#(.*))?"); | |
AjxStringUtil.parseURL=function(d){var f=["source","protocol","authority","domain","port","path","directoryPath","fileName","query","anchor"]; | |
var e=AjxStringUtil.URL_PARSE_RE.exec(d); | |
var c={}; | |
for(var a=0; | |
a<f.length; | |
a++){c[f[a]]=(e[a]?e[a]:"") | |
}if(c.directoryPath.length>0){c.directoryPath=c.directoryPath.replace(/\/?$/,"/") | |
}return c | |
}; | |
AjxStringUtil.parseMailtoLink=function(d){var c={}; | |
if(!d){return c | |
}if(d.toLowerCase().indexOf("mailto:")===-1){c.to=d; | |
return c | |
}var a=d.match(/\bsubject=([^&]+)/i); | |
c.subject=a?decodeURIComponent(a[1]):null; | |
a=d.match(/\bto\:([^&]+)/); | |
if(!a){a=d.match(/\bmailto\:([^\?]+)/i) | |
}c.to=a?decodeURIComponent(a[1]):null; | |
a=d.match(/\bbody=([^&]+)/i); | |
c.body=a?decodeURIComponent(a[1]):null; | |
return c | |
}; | |
AjxStringUtil.parseQueryString=function(f){var j=f||(""+window.location); | |
var k=j.indexOf("?"); | |
var g=(k===-1)?j:j.substring(k+1); | |
g=g.replace(/#.*$/,""); | |
var e=g.split("&"); | |
var a={},c,l,h; | |
for(var d=0; | |
d<e.length; | |
d++){c=e[d].split("="); | |
l=decodeURIComponent(c[0]),h=c[1]?decodeURIComponent(c[1]):true; | |
a[l]=h | |
}return a | |
}; | |
AjxStringUtil.prettyPrint=function(e,d,a,c){AjxStringUtil._visited=new AjxVector(); | |
var f=AjxStringUtil._prettyPrint(e,d,a,c); | |
AjxStringUtil._visited=null; | |
return f | |
}; | |
AjxStringUtil._visited=null; | |
AjxStringUtil._prettyPrint=function(h,c,s,d){var m=0; | |
var e=false; | |
var n=false; | |
if(arguments.length>4){m=arguments[4]; | |
e=arguments[5]; | |
n=arguments[6] | |
}if(AjxUtil.isObject(h)){var q=h.toString?h.toString():""; | |
if(d&&q&&d[q]){return"["+q+"]" | |
}if(AjxStringUtil._visited.contains(h)){return"[visited object]" | |
}else{AjxStringUtil._visited.add(h) | |
}}var g=AjxStringUtil.repeat(" ",m); | |
var j=""; | |
if(h===undefined){j+="[undefined]" | |
}else{if(h===null){j+="[null]" | |
}else{if(AjxUtil.isBoolean(h)){j+=h?"true":"false" | |
}else{if(AjxUtil.isString(h)){j+='"'+AjxStringUtil._escapeForHTML(h)+'"' | |
}else{if(AjxUtil.isNumber(h)){j+=h | |
}else{if(AjxUtil.isObject(h)){var f=AjxUtil.isArray(h)||AjxUtil.isArray1(h); | |
if(n){j+=f?"[Array]":h.toString() | |
}else{n=!c; | |
var k=new Array(); | |
for(var o in h){if(h.hasOwnProperty(o)){k.push(o) | |
}}if(f){k.sort(function(u,i){return u-i | |
}) | |
}else{k.sort() | |
}if(e){j+=f?"[":"{" | |
}var p=k.length; | |
for(var o=0; | |
o<p; | |
o++){var t=k[o]; | |
var r=h[t]; | |
var l=null; | |
if(r==window||r==document||(!AjxEnv.isIE&&r instanceof Node)){l=r.toString() | |
}if((typeof(r)=="function")){if(s){l="[function]" | |
}else{continue | |
}}if(o>0){j+="," | |
}j+="\n"+g; | |
var a; | |
if(f){a="// ["+t+"]:\n"+g | |
}else{a=t+": " | |
}if(d&&d[t]){j+=a+"["+t+"]" | |
}else{if(l!=null){j+=a+l | |
}else{j+=a+AjxStringUtil._prettyPrint(r,c,s,d,m+2,true,n) | |
}}}if(o>0){j+="\n"+AjxStringUtil.repeat(" ",m-1) | |
}if(e){j+=f?"]":"}" | |
}}}}}}}}return j | |
}; | |
AjxStringUtil._escapeForHTML=function(c){if(typeof(c)!="string"){return c | |
}var a=c; | |
a=a.replace(/\&/g,"&"); | |
a=a.replace(/\</g,"<"); | |
a=a.replace(/\>/g,">"); | |
a=a.replace(/\"/g,"""); | |
a=a.replace(/\xA0/g," "); | |
return a | |
}; | |
AjxStringUtil._testSpan=null; | |
AjxStringUtil._testSpanBold=null; | |
AjxStringUtil.WIDTH={}; | |
AjxStringUtil.WIDTH_BOLD={}; | |
AjxStringUtil.MAX_CACHE=1000; | |
AjxStringUtil._cacheSize=0; | |
AjxStringUtil.getWidth=function(f,e,j){if(!AjxStringUtil._testSpan){var d=AjxStringUtil._testSpan=document.createElement("SPAN"); | |
var c=AjxStringUtil._testSpanBold=document.createElement("SPAN"); | |
d.style.position=c.style.position=Dwt.ABSOLUTE_STYLE; | |
var k=DwtShell.getShell(window).getHtmlElement(); | |
k.appendChild(d); | |
k.appendChild(c); | |
Dwt.setLocation(d,Dwt.LOC_NOWHERE,Dwt.LOC_NOWHERE); | |
Dwt.setLocation(c,Dwt.LOC_NOWHERE,Dwt.LOC_NOWHERE); | |
c.style.fontWeight="bold" | |
}if(AjxUtil.isString(j)){j=DwtCssStyle.asPixelCount(j) | |
}var g=""+(j||0); | |
var a=e?AjxStringUtil.WIDTH_BOLD:AjxStringUtil.WIDTH; | |
if(a[f]&&a[f][g]){return a[f][g] | |
}if(AjxStringUtil._cacheSize>=AjxStringUtil.MAX_CACHE){AjxStringUtil.WIDTH={}; | |
AjxStringUtil.WIDTH_BOLD={}; | |
AjxStringUtil._cacheSize=0 | |
}var i=e?AjxStringUtil._testSpanBold:AjxStringUtil._testSpan; | |
i.innerHTML=f; | |
i.style.fontSize=j?(j+"px"):null; | |
if(!a[f]){a[f]={} | |
}var h=a[f][g]=Dwt.getSize(i).x; | |
AjxStringUtil._cacheSize++; | |
return h | |
}; | |
AjxStringUtil.fitString=function(f,c){var d=AjxStringUtil.getWidth(f); | |
if(d<c){return f | |
}var a=AjxStringUtil.ELLIPSIS_NO_SPACE,e=AjxStringUtil.getWidth(a); | |
while(f.length>0){if(AjxStringUtil.getWidth(f)+e<c){return f+a | |
}else{f=f.substring(0,f.length-1) | |
}}return"" | |
}; | |
AjxStringUtil.fixCrossDomainReference=function(c,e,d){var g=AjxStringUtil.parseURL(c); | |
if(g.authority==window.location.host){return c | |
}if((e&&c.indexOf(e)>=0)||!e){if(d){c=g.path | |
}else{var f=g.protocol+"://"+g.authority; | |
var a=window.location.protocol+"//"+window.location.host; | |
c=c.replace(f,a) | |
}}return c | |
}; | |
AjxStringUtil._dummyDiv=document.createElement("DIV"); | |
AjxStringUtil.htmlPlatformIndependent=function(c){var d=AjxStringUtil._dummyDiv; | |
d.innerHTML=c; | |
var a=d.innerHTML; | |
d.innerHTML=""; | |
return a | |
}; | |
AjxStringUtil.equalsHtmlPlatformIndependent=function(c,a){return AjxStringUtil.htmlPlatformIndependent(c)==AjxStringUtil.htmlPlatformIndependent(a) | |
}; | |
AjxStringUtil.ORIG_UNKNOWN="UNKNOWN"; | |
AjxStringUtil.ORIG_QUOTED="QUOTED"; | |
AjxStringUtil.ORIG_SEP_STRONG="SEP_STRONG"; | |
AjxStringUtil.ORIG_SEP_WEAK="SEP_WEAK"; | |
AjxStringUtil.ORIG_WROTE_STRONG="WROTE_STRONG"; | |
AjxStringUtil.ORIG_WROTE_WEAK="WROTE_WEAK"; | |
AjxStringUtil.ORIG_HEADER="HEADER"; | |
AjxStringUtil.ORIG_LINE="LINE"; | |
AjxStringUtil.ORIG_SIG_SEP="SIG_SEP"; | |
AjxStringUtil.MSG_REGEXES=[{type:AjxStringUtil.ORIG_QUOTED,regex:/^\s*(>|\|)/},{type:AjxStringUtil.ORIG_SEP_STRONG,regex:new RegExp("^\\s*--+\\s*("+AjxMsg.origMsg+"|"+AjxMsg.forwardedMessage+"|"+AjxMsg.origAppt+")\\s*--+\\s*$","i")},{type:AjxStringUtil.ORIG_SEP_STRONG,regex:new RegExp("^"+AjxMsg.forwardedMessage1+"$","i")},{type:AjxStringUtil.ORIG_HEADER,regex:new RegExp("^\\s*("+[AjxMsg.from,AjxMsg.to,AjxMsg.subject,AjxMsg.date,AjxMsg.sent,AjxMsg.cc].join("|")+")")},{type:AjxStringUtil.ORIG_LINE,regex:/^\s*_{5,}\s*$/}]; | |
AjxStringUtil.HTML_SEP_ID="zwchr"; | |
AjxStringUtil.ORIG_EMAIL_RE=/[^@\s]+@[A-Za-z0-9\-]{2,}(\.[A-Za-z0-9\-]{2,})+/; | |
AjxStringUtil.ORIG_DATE_RE=/\d+\s*(\/|\-|, )20\d\d/; | |
AjxStringUtil.ORIG_INTRO_RE=new RegExp("^(-{2,}|"+AjxMsg.on+"\\s+)","i"); | |
AjxStringUtil._writeToTestIframeDoc=function(c){var d; | |
if(!AjxStringUtil.__curIframeId){d=document.createElement("IFRAME"); | |
AjxStringUtil.__curIframeId=d.id=Dwt.getNextId(); | |
d.setAttribute("aria-hidden",true); | |
document.body.appendChild(d); | |
Dwt.setPosition(d,Dwt.ABSOLUTE_STYLE); | |
Dwt.setLocation(d,Dwt.LOC_NOWHERE,Dwt.LOC_NOWHERE) | |
}else{d=document.getElementById(AjxStringUtil.__curIframeId) | |
}var a=Dwt.getIframeDoc(d); | |
c=c&&c.replace(AjxStringUtil.IMG_SRC_CID_REGEX,'<img $1 pnsrc="cid:'); | |
a.open(); | |
a.write(c); | |
a.close(); | |
return a.childNodes[0] | |
}; | |
AjxStringUtil._removeTestIframeDoc=function(){if(AjxEnv.isFirefox){var a=document.getElementById(AjxStringUtil.__curIframeId); | |
if(a){a.parentNode.removeChild(a) | |
}AjxStringUtil.__curIframeId=null | |
}}; | |
AjxStringUtil.getOriginalContent=function(p,o){if(!p){return"" | |
}if(o){return AjxStringUtil._getOriginalHtmlContent(p) | |
}var r=[]; | |
var a=p.split(AjxStringUtil.SPLIT_RE); | |
var e,n=[],g={},h,t,q=false; | |
for(var v=0; | |
v<a.length; | |
v++){var m=a[v]; | |
var w=AjxStringUtil.trim(m); | |
if(!AjxStringUtil._NON_WHITESPACE.test(w)){n.push(m); | |
continue | |
}if((w.indexOf("| DO NOT REPLY")===0)&&(a[v+2].indexOf("bugzilla")!==-1)){q=true | |
}var d=AjxStringUtil._getLineType(w); | |
if(d===AjxStringUtil.ORIG_QUOTED){d=q?AjxStringUtil.ORIG_UNKNOWN:d | |
}else{q=false | |
}var z=a[v+1]; | |
var h=false; | |
if(z&&(d===AjxStringUtil.ORIG_UNKNOWN)&&AjxStringUtil.ORIG_INTRO_RE.test(w)&&z.match(/\w+:$/)){w=[w,z].join(" "); | |
d=AjxStringUtil._getLineType(w); | |
h=true | |
}if(d===AjxStringUtil.ORIG_LINE){var u=v+1; | |
z=a[u]; | |
while(!AjxStringUtil._NON_WHITESPACE.test(z)&&u<a.length){z=a[++u] | |
}var s=z&&AjxStringUtil._getLineType(z); | |
if(s===AjxStringUtil.ORIG_HEADER){d=AjxStringUtil.ORIG_HEADER | |
}else{d=AjxStringUtil.ORIG_UNKNOWN | |
}}if(e){if(e!==d){r.push({type:e,block:n}); | |
t=(e===AjxStringUtil.ORIG_UNKNOWN)?n:t; | |
g[e]=g[e]?g[e]+1:1; | |
n=[]; | |
e=d | |
}}else{e=d | |
}if(h&&(d===AjxStringUtil.ORIG_WROTE_WEAK||d===AjxStringUtil.ORIG_WROTE_STRONG)){n.push(m); | |
n.push(z); | |
v++; | |
h=false | |
}else{n.push(m) | |
}}if(n.length){r.push({type:e,block:n}); | |
t=(e===AjxStringUtil.ORIG_UNKNOWN)?n:t; | |
g[e]=g[e]?g[e]+1:1 | |
}var f=r[0],y=r[1]; | |
if(f&&f.type===AjxStringUtil.ORIG_UNKNOWN&&y&&(y.type===AjxStringUtil.ORIG_HEADER||y.type===AjxStringUtil.ORIG_WROTE_STRONG)){var A=AjxStringUtil._getTextFromBlock(f.block); | |
if(A){var x=r[2]; | |
if(x&&x.type===AjxStringUtil.ORIG_UNKNOWN){var c=AjxStringUtil._getTextFromBlock(x.block); | |
if(c&&c.indexOf(ZmItem.NOTES_SEPARATOR)!==-1){return A+c | |
}}return A | |
}}var A=AjxStringUtil._checkInlineWrote(g,r,false); | |
if(A){return A | |
}if(g[AjxStringUtil.ORIG_UNKNOWN]===1&&g[AjxStringUtil.ORIG_QUOTED]>0){var A=AjxStringUtil._getTextFromBlock(t); | |
if(A){return A | |
}}if(g[AjxStringUtil.ORIG_SEP_STRONG]>0){var k=[]; | |
for(var v=0; | |
v<r.length; | |
v++){var l=r[v]; | |
if(l.type===AjxStringUtil.ORIG_SEP_STRONG){break | |
}k=k.concat(l.block) | |
}var A=AjxStringUtil._getTextFromBlock(k); | |
if(A){return A | |
}}return p | |
}; | |
AjxStringUtil._getLineType=function(f){var g=AjxStringUtil.ORIG_UNKNOWN; | |
for(var d=0; | |
d<AjxStringUtil.MSG_REGEXES.length; | |
d++){var e=AjxStringUtil.MSG_REGEXES[d]; | |
var h=e.regex; | |
if(h.test(f.toLowerCase())){if(e.type==AjxStringUtil.ORIG_QUOTED&&/^\s*\|.*\|\s*$/.test(f)){continue | |
}g=e.type; | |
break | |
}}if(g===AjxStringUtil.ORIG_UNKNOWN){var c=f.match(/(\w+):$/); | |
var a=c&&c[1]&&c[1].toLowerCase(); | |
if(a){var i=0; | |
i=i+(a===AjxMsg.wrote)?5:(a===AjxMsg.changed)?0:2; | |
if(AjxStringUtil.ORIG_EMAIL_RE.test(f)){i+=4 | |
}if(AjxStringUtil.ORIG_DATE_RE.test(f)){i+=3 | |
}var k=new RegExp("^(--|"+AjxMsg.on+")","i"); | |
if(AjxStringUtil.ORIG_INTRO_RE.test(f)){i+=1 | |
}if(i>=7){g=AjxStringUtil.ORIG_WROTE_STRONG | |
}else{if(i>=5){g=AjxStringUtil.ORIG_WROTE_WEAK | |
}}}}return g | |
}; | |
AjxStringUtil._getTextFromBlock=function(c){if(!(c&&c.length)){return null | |
}var a=c.join("\n")+"\n"; | |
a=a.replace(/\s+$/,"\n"); | |
return(AjxStringUtil._NON_WHITESPACE.test(a))?a:null | |
}; | |
AjxStringUtil.SCRIPT_REGEX=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi; | |
AjxStringUtil.IGNORE_NODE_LIST=["#comment","br","script","select","style"]; | |
AjxStringUtil.IGNORE_NODE=AjxUtil.arrayAsHash(AjxStringUtil.IGNORE_NODE_LIST); | |
AjxStringUtil._getOriginalHtmlContent=function(m){var g=AjxStringUtil._writeToTestIframeDoc(m); | |
while(AjxStringUtil.SCRIPT_REGEX.test(m)){m=m.replace(AjxStringUtil.SCRIPT_REGEX,"") | |
}var n=false,u=[]; | |
AjxStringUtil._flatten(g,u); | |
var h=u.length,t,q=[],f={},c,p,a,e,d,l; | |
for(t=0; | |
t<h; | |
t++){c=u[t]; | |
if(c.nodeType===AjxUtil.ELEMENT_NODE){c.normalize() | |
}a=c.nodeName.toLowerCase(); | |
e=AjxStringUtil._checkNode(u[t]); | |
if(e===AjxStringUtil.ORIG_UNKNOWN&&c.nodeName==="#text"&&(AjxStringUtil.ORIG_DATE_RE.test(c.nodeValue)||AjxStringUtil.ORIG_INTRO_RE.test(c.nodeValue))){var r=c.nodeValue; | |
for(var s=1; | |
s<10; | |
s++){var o=u[t+s]; | |
if(o&&o.nodeName==="#text"){r+=o.nodeValue; | |
if(/:$/.test(r)){e=AjxStringUtil._getLineType(AjxStringUtil.trim(r)); | |
if(e===AjxStringUtil.ORIG_WROTE_STRONG){t=t+s; | |
break | |
}}}}}if(e!==null){q.push({type:e,node:c,nodeName:a}); | |
f[e]=f[e]?f[e]+1:1; | |
if(e===AjxStringUtil.ORIG_SEP_STRONG||e===AjxStringUtil.ORIG_WROTE_STRONG){l=c; | |
n=true; | |
break | |
}if(e===AjxStringUtil.ORIG_HEADER&&d===AjxStringUtil.ORIG_LINE){l=p; | |
n=true; | |
break | |
}p=c; | |
d=e | |
}}if(l){AjxStringUtil._prune(l,true) | |
}var k=n&&g.textContent?"<html>"+g.innerHTML+"</html>":m; | |
AjxStringUtil._removeTestIframeDoc(); | |
return k | |
}; | |
AjxStringUtil._flatten=function(d,e){var f=d&&d.nodeName.toLowerCase(); | |
if(AjxStringUtil.IGNORE_NODE[f]){return | |
}e.push(d); | |
var c=d.childNodes||[]; | |
for(var a=0; | |
a<c.length; | |
a++){this._flatten(c[a],e) | |
}}; | |
AjxStringUtil._prune=function(c,a){var d=c&&c.parentNode; | |
while(d&&d.lastChild&&d.lastChild!==c){d.removeChild(d.lastChild) | |
}if(a&&d&&d.lastChild===c){d.removeChild(d.lastChild) | |
}var e=d&&d.nodeName.toLowerCase(); | |
if(d&&e!=="body"&&e!=="html"){AjxStringUtil._prune(d,false) | |
}}; | |
AjxStringUtil._checkNode=function(c){if(!c){return null | |
}var f=c.nodeName.toLowerCase(); | |
var a=null; | |
if(f==="#text"){var d=AjxStringUtil.trim(c.nodeValue); | |
if(AjxStringUtil._NON_WHITESPACE.test(d)){a=AjxStringUtil._getLineType(d) | |
}}else{if(f==="hr"){if(c.id===AjxStringUtil.HTML_SEP_ID||(c.size==="2"&&c.width==="100%"&&c.align==="center")){a=AjxStringUtil.ORIG_SEP_STRONG | |
}else{a=AjxStringUtil.ORIG_LINE | |
}}else{if(f==="pre"){a=AjxStringUtil._checkNodeContent(c) | |
}else{if(f==="div"){if(c.className==="OutlookMessageHeader"||c.className==="gmail_quote"){a=AjxStringUtil.ORIG_SEP_STRONG | |
}else{if(c.style.borderTop){var e=DwtCssStyle.getComputedStyleObject(c); | |
if(e&&e.borderTopWidth&&parseInt(e.borderTopWidth)===1&&e.borderTopColor){a=AjxStringUtil.ORIG_SEP_STRONG | |
}}}a=a||AjxStringUtil._checkNodeContent(c) | |
}else{if(f==="span"){a=a||AjxStringUtil._checkNodeContent(c) | |
}else{if(f==="img"){a=AjxStringUtil.ORIG_UNKNOWN | |
}else{if(f==="blockquote"){a=AjxStringUtil.ORIG_QUOTED | |
}}}}}}}return a | |
}; | |
AjxStringUtil._checkNodeContent=function(d){var c=d.textContent||""; | |
if(!AjxStringUtil._NON_WHITESPACE.test(c)||c.length>200){return null | |
}var a=AjxStringUtil._getLineType(c); | |
return(a===AjxStringUtil.ORIG_SEP_STRONG||a===AjxStringUtil.ORIG_WROTE_STRONG)?a:null | |
}; | |
AjxStringUtil.checkForCleanHtml=function(d,f,g){var h=AjxStringUtil._writeToTestIframeDoc(d); | |
var c={allowedTags:AjxUtil.arrayAsHash(f),untrustedAttrs:g||[]}; | |
AjxStringUtil._traverseCleanHtml(h,c); | |
var a="<html>"+h.innerHTML+"</html>"; | |
var e=Math.max(h.scrollWidth,h.lastChild.scrollWidth); | |
AjxStringUtil._removeTestIframeDoc(); | |
return{html:a,width:e,useIframe:c.fail} | |
}; | |
AjxStringUtil._traverseCleanHtml=function(e,m){var c=true; | |
var o=e.nodeName.toLowerCase(); | |
if(o==="style"&&e.innerHTML==="p { margin: 0; }"){e.doDelete=true | |
}else{if(o==="title"&&!e.innerHTML){}else{if(m.allowedTags[o]){if(e.style){var d=e.style&&e.style.cssText; | |
if(d!==""){d=d.toLowerCase(); | |
if(!AjxStringUtil._checkStyle(d)){c=false | |
}e.style.cssText=AjxStringUtil._fixStyle(d) | |
}}if(e.removeAttribute&&e.attributes&&e.attributes.length){for(var g=0; | |
g<m.untrustedAttrs.length; | |
g++){if(e.hasAttribute(m.untrustedAttrs[g])){c=false | |
}}for(var g=0,p=e.attributes,f=p.length; | |
g<f; | |
g++){var k=p.item(g); | |
if(!k){continue | |
}var n=k.nodeName&&k.nodeName.toLowerCase(); | |
if(n&&n.indexOf("on")===0){e.removeAttribute(n); | |
continue | |
}var h=k.nodeValue&&String(k.nodeValue); | |
if(h){h=h.toLowerCase(); | |
if(o==="table"&&(n==="cellpadding"||n==="cellspacing"||n==="border")&&h!=="0"){c=false | |
}}}}}else{c=false | |
}}}for(var g=0,j=e.childNodes.length; | |
g<j; | |
g++){var a=e.childNodes[g]; | |
AjxStringUtil._traverseCleanHtml(a,m) | |
}for(var g=e.childNodes.length-1; | |
g>=0; | |
g--){var a=e.childNodes[g]; | |
if(a.doDelete){e.removeChild(a) | |
}}if(!c){m.fail=true | |
}}; | |
AjxStringUtil._checkStyle=function(a){if(a.match(/\bposition\s*:\s*absolute[^;]*;?/)){return false | |
}if(a.match(/\bfont-[^;]*;?/)){return false | |
}return true | |
}; | |
AjxStringUtil._fixStyle=function(a){a=a.replace(/\bmargin-?(top|left|right|bottom)?\s*:[^;]*-\d+[^;]*;?/gi,""); | |
a=a.replace(/\bpadding-?(top|left|right|bottom)?\s*:[^;]*-\d+[^;]*;?/gi,""); | |
a=a.replace(/\bposition\s*:\s*(absolute|fixed)[^;]*;?/,""); | |
return a | |
}; | |
AjxStringUtil._checkInlineWrote=function(h,f){if(h[AjxStringUtil.ORIG_WROTE_STRONG]>0){var l,d=false,a={}; | |
for(var g=0; | |
g<f.length; | |
g++){var m=f[g],j=m.type; | |
if(j===AjxStringUtil.ORIG_WROTE_STRONG){d=true | |
}else{if(j===AjxStringUtil.ORIG_UNKNOWN&&!d){if(l){return null | |
}else{l=m.block | |
}}else{if(d){a[j]=true | |
}}}}var k=(a[AjxStringUtil.ORIG_UNKNOWN]&&a[AjxStringUtil.ORIG_QUOTED]); | |
var c=(h[AjxStringUtil.ORIG_UNKNOWN]===2&&f[f.length-1].type===AjxStringUtil.ORIG_UNKNOWN); | |
if(l&&(!k||c)){var e=AjxStringUtil._getTextFromBlock(l); | |
if(e){return e | |
}}}}; | |
AjxStringUtil.trimHtml=function(e){if(!e){return"" | |
}var d=e; | |
d=d.replace(AjxStringUtil.DOC_TAG_REGEX,""); | |
d=d.replace(/<div><br ?\/?><\/div>/gi,"<br>"); | |
var c=0; | |
while(d.length!==c&&(/^<br ?\/?>/i.test(d)||/<br ?\/?>$/i.test(d))){c=d.length; | |
d=d.replace(/^<br ?\/?>/i,"").replace(/<br ?\/?>$/i,"") | |
}var a=d&&d.match(/((<br ?\/?>)+)((<\/\w+>)+)$/i); | |
if(a&&a.length){var f=new RegExp(a[1]+a[3]+"$","i"); | |
d=d.replace(f,a[3]) | |
}d=d.replace(/(<div><\/div>)+/gi,""); | |
return AjxStringUtil.trim(d) | |
}; | |
AjxStringUtil.DOC_TAG_REGEX=/<\/?(html|head|body)>/gi; | |
AjxStringUtil.defangHtmlContent=function(f){var k=AjxStringUtil._writeToTestIframeDoc(f); | |
var j=k.getElementsByTagName("img"); | |
if(j&&j.length){var a; | |
var h; | |
var d; | |
for(var e=0; | |
e<j.length; | |
e++){a=j[e]; | |
h=a.getAttribute("dfsrc"); | |
if(h&&(h!=="#")){a.setAttribute("src",h) | |
}else{d=a.getAttribute("pnsrc"); | |
if(d&&(d!=="#")){a.setAttribute("src",d) | |
}}a.removeAttribute("dfsrc") | |
}}var g=""; | |
var c=k.childNodes; | |
for(var e=0; | |
e<c.length; | |
e++){if(c[e].tagName&&(c[e].tagName.toLowerCase()==="body")){g=c[e].innerHTML; | |
break | |
}}AjxStringUtil._removeTestIframeDoc(); | |
return g | |
} | |
}if(AjxPackage.define("ajax.xml.AjxXmlDoc")){AjxXmlDoc=function(){if(!AjxXmlDoc._inited){AjxXmlDoc._init() | |
}}; | |
AjxXmlDoc.prototype.isAjxXmlDoc=true; | |
AjxXmlDoc.prototype.toString=function(){return"AjxXmlDoc" | |
}; | |
AjxXmlDoc.INVALID_CHARS_RE=/[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uD800-\uDFFF\uFFFE-\uFFFF]/g; | |
AjxXmlDoc.REC_AVOID_CHARS_RE=/[\u007F-\u0084\u0086-\u009F\uFDD0-\uFDDF]/g; | |
AjxXmlDoc._inited=false; | |
AjxXmlDoc._msxmlVers=null; | |
AjxXmlDoc._useDOM=Boolean(document.implementation&&document.implementation.createDocument); | |
AjxXmlDoc._useActiveX=!AjxXmlDoc._useDOM&&Boolean(window.ActiveXObject); | |
AjxXmlDoc.create=function(){var c=new AjxXmlDoc(); | |
var a=null; | |
if(AjxXmlDoc._useActiveX){a=new ActiveXObject(AjxXmlDoc._msxmlVers); | |
a.async=true; | |
if(AjxXmlDoc._msxmlVers=="MSXML2.DOMDocument.4.0"){a.setProperty("SelectionLanguage","XPath"); | |
a.setProperty("SelectionNamespaces","xmlns:zimbra='urn:zimbra' xmlns:mail='urn:zimbraMail' xmlns:account='urn:zimbraAccount'") | |
}}else{if(AjxXmlDoc._useDOM){a=document.implementation.createDocument("","",null) | |
}else{throw new AjxException("Unable to create new Doc",AjxException.INTERNAL_ERROR,"AjxXmlDoc.create") | |
}}c._doc=a; | |
return c | |
}; | |
AjxXmlDoc.createFromDom=function(c){var a=new AjxXmlDoc(); | |
a._doc=c; | |
return a | |
}; | |
AjxXmlDoc.createFromXml=function(a){var c=AjxXmlDoc.create(); | |
c.loadFromString(a); | |
return c | |
}; | |
AjxXmlDoc.replaceInvalidChars=function(a){AjxXmlDoc.INVALID_CHARS_RE.lastIndex=0; | |
return a.replace(AjxXmlDoc.INVALID_CHARS_RE,"?") | |
}; | |
AjxXmlDoc.getXml=function(d){if(!d){return"" | |
}var c=d.xml; | |
if(!c){var a=new XMLSerializer(); | |
c=a.serializeToString(d) | |
}return AjxXmlDoc.replaceInvalidChars(c) | |
}; | |
AjxXmlDoc.prototype.getDoc=function(){return this._doc | |
}; | |
AjxXmlDoc.prototype.loadFromString=function(c){var a=this._doc; | |
a.loadXML(c); | |
if(AjxXmlDoc._useActiveX){if(a.parseError.errorCode!=0){throw new AjxException(a.parseError.reason,AjxException.INVALID_PARAM,"AjxXmlDoc.loadFromString") | |
}}}; | |
AjxXmlDoc.prototype.loadFromUrl=function(a){if(AjxEnv.isChrome||AjxEnv.isSafari){var c=new window.XMLHttpRequest(); | |
c.open("GET",a,false); | |
c.send(null); | |
var d=c.responseXML; | |
this._doc=d | |
}else{this._doc.load(a) | |
}}; | |
AjxXmlDoc.prototype.toJSObject=function(d,c,a){_node=function(){this.__msh_content="" | |
}; | |
_node.prototype.toString=function(){return this.__msh_content | |
}; | |
rec=function(j,k){var g={},h,l; | |
for(j=j.firstChild; | |
j; | |
j=j.nextSibling){if(j.nodeType==1){h=j.tagName; | |
if(d){h=h.replace(/^.*?:/,"") | |
}if(c){h=h.toLowerCase() | |
}l=new _node(); | |
if(g[h]){if(g[h]==1){k[h]=[k[h]]; | |
g[h]=2 | |
}k[h].push(l) | |
}else{k[h]=l; | |
g[h]=1 | |
}if(a){if(j.attributes&&j.attributes.length){for(var f=0; | |
f<j.attributes.length; | |
f++){attr=j.attributes[f]; | |
l[attr.name]=AjxUtil.isNumeric(attr.value)?attr.value:String(attr.value) | |
}}}rec(j,l) | |
}else{if(j.nodeType==3){k.__msh_content+=j.nodeValue | |
}}}}; | |
var e=new _node(); | |
rec(this._doc.documentElement,e); | |
return e | |
}; | |
AjxXmlDoc.prototype.getElementsByTagNameNS=function(c,a){var d=this.getDoc(); | |
return !d.getElementsByTagNameNS?d.getElementsByTagName(c+":"+a):d.getElementsByTagNameNS(c,a) | |
}; | |
AjxXmlDoc.prototype.getFirstElementByTagNameNS=function(c,a){return this.getElementsByTagNameNS(c,a)[0] | |
}; | |
AjxXmlDoc.prototype.getElementsByTagName=function(a){var c=this.getDoc(); | |
return c.getElementsByTagName(a) | |
}; | |
AjxXmlDoc._init=function(){if(AjxXmlDoc._useActiveX){var a=["MSXML4.DOMDocument","MSXML3.DOMDocument","MSXML2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","MSXML.DOMDocument","Microsoft.XmlDom"]; | |
for(var d=0; | |
d<a.length; | |
d++){try{new ActiveXObject(a[d]); | |
AjxXmlDoc._msxmlVers=a[d]; | |
break | |
}catch(c){}}if(!AjxXmlDoc._msxmlVers){throw new AjxException("MSXML not installed",AjxException.INTERNAL_ERROR,"AjxXmlDoc._init") | |
}}else{if(!Document.prototype.loadXML){Document.prototype.loadXML=function(k){var j=new DOMParser(); | |
var f=j.parseFromString(k,"text/xml"); | |
while(this.hasChildNodes()){this.removeChild(this.lastChild) | |
}var e=f.childNodes.length; | |
for(var g=0; | |
g<e; | |
g++){var h=this.importNode(f.childNodes[g],true); | |
this.appendChild(h) | |
}}; | |
if(AjxEnv.isNav){_NodeGetXml=function(){var e=new XMLSerializer(); | |
return e.serializeToString(this) | |
}; | |
Node.prototype.__defineGetter__("xml",_NodeGetXml) | |
}}}AjxXmlDoc._inited=true | |
}; | |
AjxXmlDoc.prototype.set=function(a,e,c){var f=this._doc.createElement(a); | |
if(e!=null){var d=this._doc.createTextNode(""); | |
f.appendChild(d); | |
d.nodeValue=e | |
}if(c==null){this.root.appendChild(f) | |
}else{c.appendChild(f) | |
}return f | |
}; | |
AjxXmlDoc.prototype.getXml=function(){return AjxXmlDoc.getXml(this.getDoc()) | |
}; | |
AjxXmlDoc.prototype.getDocXml=AjxXmlDoc.prototype.getXml; | |
AjxXmlDoc.createRoot=function(e){var a=AjxXmlDoc.create(); | |
var c=a.getDoc(); | |
a.root=c.createElement(e); | |
c.appendChild(a.root); | |
return a | |
}; | |
AjxXmlDoc.createElement=function(c,f){var a=AjxXmlDoc.create(); | |
var g=a.getDoc(); | |
a.root=g.createElement(c); | |
if(f!=null){var e=g.createTextNode(""); | |
a.root.appendChild(e); | |
e.nodeValue=f | |
}g.appendChild(a.root); | |
return a | |
}; | |
AjxXmlDoc.prototype.appendChild=function(a){if(this._doc!=a._doc&&(AjxEnv.isChrome||AjxEnv.isSafari)){this.root.appendChild(this.getDoc().importNode(a.root,true)) | |
}else{this.root.appendChild(a.root) | |
}} | |
}if(AjxPackage.define("ajax.core.AjxImg")){AjxImg=function(){}; | |
AjxImg.prototype=new Object; | |
AjxImg.prototype.constructor=null; | |
AjxImg._VIEWPORT_ID="AjxImg_VP"; | |
AjxImg.DISABLED=true; | |
AjxImg.RE_COLOR=/^(.*?),color=(.*)$/; | |
AjxImg.setImage=function(j,o,p,h,d,r){if(!j){return | |
}d=d||[]; | |
var n=o; | |
var e,c=o&&o.match(AjxImg.RE_COLOR); | |
if(c){o=c&&c[1]; | |
e=c&&c[2] | |
}var l=AjxImg.getClassForImage(o,h); | |
if(p){d.push(l); | |
j.className=d.join(" "); | |
return | |
}var a=j.firstChild&&j.firstChild.id; | |
var q=l+"Overlay"; | |
var k=l+"Mask"; | |
if(e&&window.AjxImgData&&AjxImgData[q]&&AjxImgData[k]){e=(e.match(/^\d$/)?ZmOrganizer.COLOR_VALUES[e]:e)||ZmOrganizer.COLOR_VALUES[ZmOrganizer.ORG_DEFAULT_COLOR]; | |
j.innerHTML=AjxImg.getImageHtml({imageName:n,attrStr:a?"id='"+a+"'":null,altText:r,disabled:h}); | |
return | |
}if(j.firstChild==null||j.firstChild.nodeName.toLowerCase()!="div"){var g=[],f=0; | |
g[f++]="<div "; | |
if(a){g[f++]=" id='"; | |
g[f++]=a; | |
g[f++]="' " | |
}if(l){d.push(l) | |
}g[f++]=AjxUtil.getClassAttr(d); | |
g[f++]=">"; | |
if(r){g[f++]="<div class='ScreenReaderOnly'>"; | |
g[f++]=AjxStringUtil.htmlEncode(r); | |
g[f++]="</div>" | |
}g[f++]="</div>"; | |
j.innerHTML=g.join(""); | |
return | |
}if(l){d.push(l) | |
}j.firstChild.className=d.join(" ") | |
}; | |
AjxImg.setDisabledImage=function(d,e,a,c){return AjxImg.setImage(d,e,a,true,c) | |
}; | |
AjxImg.getClassForImage=function(d,c){var a=d?"Img"+d:""; | |
if(c){a+=" ZDisabledImage" | |
}return a | |
}; | |
AjxImg.getImageClass=function(a){return a.firstChild?a.firstChild.className:a.className | |
}; | |
AjxImg.getImageElement=function(a){return a.firstChild?a.firstChild:a | |
}; | |
AjxImg.getParentElement=function(a){return a.parentNode | |
}; | |
AjxImg.GET_IMAGE_HTML_PARAMS=["imageName","styles","attrStr","wrapInTable","disabled","classes","altText"]; | |
AjxImg.getImageHtml=function(){var C=Dwt.getParams(arguments,AjxImg.GET_IMAGE_HTML_PARAMS); | |
var y=C.imageName; | |
var h=C.styles||""; | |
var k=h?" style='"+h+"'":""; | |
var n=C.attrStr?" "+C.attrStr:""; | |
var e=C.disabled; | |
var B=C.classes||[]; | |
var f=C.altText; | |
var p=C.wrapInTable?"<table style='display:inline' cellpadding=0 cellspacing=0 border=0><tr><td align=center valign=bottom>":""; | |
var i=""; | |
var w=C.wrapInTable?"</td></tr></table>":""; | |
if(y){var u,r=y.match(AjxImg.RE_COLOR); | |
if(r){y=r&&r[1]; | |
u=r&&r[2] | |
}var c=AjxImg.getClassForImage(y,e); | |
var A=c+"Overlay"; | |
var l=c+"Mask"; | |
if(u&&window.AjxImgData&&AjxImgData[A]&&AjxImgData[l]){u=(u.match(/^\d$/)?ZmOrganizer.COLOR_VALUES[u]:u)||ZmOrganizer.COLOR_VALUES[ZmOrganizer.ORG_DEFAULT_COLOR]; | |
var z=AjxImgData[A],v=AjxImgData[l]; | |
if(f){n+=" alt='"+AjxStringUtil.encodeQuotes(f)+"'" | |
}if(!z[u]){var q=z.w,o=z.h; | |
var d=document.createElement("CANVAS"); | |
d.width=q; | |
d.height=o; | |
var s=d.getContext("2d"); | |
s.save(); | |
s.clearRect(0,0,q,o); | |
s.save(); | |
var t=n; | |
if(!t){t=Dwt.getNextId("CANVAS_IMG_"); | |
n=" id='"+t+"'" | |
}else{var g=n.match(/id=[\"\']([^\"\']+)[\"\']+/); | |
if(g&&g.length>1){t=g[1] | |
}AjxDebug.println(AjxDebug.TAG_ICON,"imgId = "+t) | |
}var a=document.getElementById(l); | |
var x=document.getElementById(A); | |
if(!a.complete||!x.complete){AjxDebug.println(AjxDebug.TAG_ICON,"mask status = "+a.complete+" for "+t); | |
AjxDebug.println(AjxDebug.TAG_ICON,"overlay status = "+x.complete+" for "+t); | |
var j=new Image(); | |
j.onload=function(){AjxDebug.println(AjxDebug.TAG_ICON,"mask image loaded"); | |
var m=new Image(); | |
m.onload=function(){AjxImg._drawCanvasImage(s,j,m,v,z,u,q,o); | |
AjxDebug.println(AjxDebug.TAG_ICON,"overlay image loaded"); | |
var D=document.getElementById(t); | |
if(D){AjxDebug.println(AjxDebug.TAG_ICON,"element found for id = "+t); | |
D.src=d.toDataURL(); | |
z[u]=d.toDataURL() | |
}else{AjxDebug.println(AjxDebug.TAG_ICON,"no element found for id = "+t) | |
}}; | |
m.src=document.getElementById(A).src | |
}; | |
j.src=document.getElementById(l).src | |
}else{AjxImg._drawCanvasImage(s,a,x,v,z,u,q,o); | |
z[u]=d.toDataURL() | |
}}i=["<img src='",z[u],"'"," border=0 ",AjxUtil.getClassAttr(B),k,n,">"].join("") | |
}else{B.push("Img"+y); | |
i=["<div ",AjxUtil.getClassAttr(B),k,n,">"]; | |
if(f){i.push("<span class='ScreenReaderOnly'>",AjxStringUtil.htmlEncode(f),"</span>") | |
}i.push("</div>"); | |
i=i.join("") | |
}}else{i=["<div",k,n,">"]; | |
if(f){i.push("<span class='ScreenReaderOnly'>",AjxStringUtil.htmlEncode(f),"</span>") | |
}i.push("</div>"); | |
i=i.join("") | |
}return p||w?[p,i,w].join(""):i | |
}; | |
AjxImg.getImageSpanHtml=function(f,g,c,d,a){a=a||"inlineIcon"; | |
var e=["<span style='white-space:nowrap'>","<span class='",a,"'>",AjxImg.getImageHtml(f,g,c),(d||""),"</span>","</span>"]; | |
return e.join("") | |
}; | |
AjxImg._drawCanvasImage=function(d,h,i,c,f,e,g,a){d.drawImage(h,c.l,c.t); | |
d.globalCompositeOperation="source-out"; | |
d.fillStyle=e; | |
d.fillRect(0,0,g,a); | |
d.restore(); | |
d.drawImage(i,f.l,f.t); | |
d.restore() | |
} | |
}if(AjxPackage.define("ajax.core.AjxColor")){AjxColor=function(d,c,a){if(arguments.length==0){return | |
}this.r=d; | |
this.g=c; | |
this.b=a | |
}; | |
AjxColor.prototype.toString=function(){return AjxColor.color(this.r,this.g,this.b) | |
}; | |
AjxColor.components=function(c){var a=AjxColor.__RE.exec(c); | |
return a?[parseInt(a[1],16),parseInt(a[2],16),parseInt(a[3],16)]:null | |
}; | |
AjxColor.color=function(d,c,a){return["#",AjxColor.__pad(Number(Math.round(d)).toString(16),2),AjxColor.__pad(Number(Math.round(c)).toString(16),2),AjxColor.__pad(Number(Math.round(a)).toString(16),2)].join("") | |
}; | |
AjxColor.lighten=function(a,d){var c=AjxColor.components(a); | |
return c?AjxColor.color(AjxColor.__lighten(c[0],d),AjxColor.__lighten(c[1],d),AjxColor.__lighten(c[2],d)):"" | |
}; | |
AjxColor.darken=function(a,d){var c=AjxColor.components(a); | |
return c?AjxColor.color(AjxColor.__darken(c[0],d),AjxColor.__darken(c[1],d),AjxColor.__darken(c[2],d)):"" | |
}; | |
AjxColor.deepen=function(a,d){var g=AjxColor.components(a); | |
var c=0; | |
for(var e=1; | |
e<g.length; | |
e++){if(g[e]>g[c]){c=e | |
}}for(var e=0; | |
e<g.length; | |
e++){var f=g[c]?(g[e]/g[c]):1; | |
g[e]=Math.floor(g[e]*f*(d||1)) | |
}return AjxColor.color(g[0],g[1],g[2]) | |
}; | |
AjxColor.__RE=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i; | |
AjxColor.__pad=function(f,d,e){if(!e){e="0" | |
}var c=String(f); | |
for(var a=c.length; | |
a<d; | |
a++){c=e+c | |
}return c | |
}; | |
AjxColor.__lighten=function(a,c){return Math.max(0,Math.min(255,a+(255-a)*c)) | |
}; | |
AjxColor.__darken=function(a,c){return Math.max(0,Math.min(255,a+(1-a)*c)) | |
} | |
}if(AjxPackage.define("ajax.events.AjxEvent")){AjxEvent=function(){this.data=null | |
}; | |
AjxEvent.HISTORY="HISTORY"; | |
AjxEvent.prototype.toString=function(){return"AjxEvent" | |
} | |
}if(AjxPackage.define("ajax.events.AjxEventMgr")){AjxEventMgr=function(){this._listeners=new Object() | |
}; | |
AjxEventMgr.prototype.toString=function(){return"AjxEventMgr" | |
}; | |
AjxEventMgr.prototype.addListener=function(c,d,a){var e=this._listeners[c]; | |
if(e==null){e=this._listeners[c]=new AjxVector() | |
}if(!e.contains(d)){if(this._notifyingListeners){e=this._listeners[c]=e.clone() | |
}e.add(d,a); | |
return true | |
}return false | |
}; | |
AjxEventMgr.prototype.notifyListeners=function(f,h){this._notifyingListeners=true; | |
var k=this._listeners[f]; | |
if(k!=null){var d=k.getArray(); | |
var g=k.size(); | |
var j=null; | |
var l=null; | |
for(var e=0; | |
e<g; | |
e++){l=d[e]; | |
if(!(l&&((l instanceof AjxListener)||(typeof l=="function")))){continue | |
}j=l.handleEvent?l.handleEvent(h):l(h); | |
if(j===false){break | |
}}}this._notifyingListeners=false; | |
return j | |
}; | |
AjxEventMgr.prototype.isListenerRegistered=function(a){var c=this._listeners[a]; | |
return(c!=null&&c.size()>0) | |
}; | |
AjxEventMgr.prototype.removeListener=function(a,c){var d=this._listeners[a]; | |
if(d!=null){if(this._notifyingListeners){d=this._listeners[a]=d.clone() | |
}d.remove(c); | |
return true | |
}return false | |
}; | |
AjxEventMgr.prototype.removeAll=function(a){var c=this._listeners[a]; | |
if(c!=null){if(this._notifyingListeners){c=this._listeners[a]=c.clone() | |
}c.removeAll(); | |
return true | |
}return false | |
}; | |
AjxEventMgr.prototype.clearAllEvents=function(){var c=this._listeners; | |
for(var a in c){this.removeAll(a) | |
}} | |
}if(AjxPackage.define("ajax.util.AjxTimedAction")){AjxTimedAction=function(d,c,a){AjxCallback.call(this,d,c,a); | |
this._tid=-1; | |
this._id=-1; | |
this._runResult=null | |
}; | |
AjxTimedAction.prototype=new AjxCallback(); | |
AjxTimedAction.prototype.constructor=AjxTimedAction; | |
AjxTimedAction.MAX_TIMEOUT=20*24*60*60*1000; | |
AjxTimedAction.prototype.toString=function(){return"AjxTimedAction" | |
}; | |
AjxTimedAction.prototype.getRunResult=function(){return this._runResult | |
}; | |
AjxTimedAction._pendingActions={}; | |
AjxTimedAction._nextActionId=1; | |
AjxTimedAction.scheduleAction=function(d,c){if(!d){return | |
}if(d._tid&&d._tid!=-1){AjxTimedAction.cancelAction(d._id) | |
}c=c||0; | |
if(c>AjxTimedAction.MAX_TIMEOUT){if(window.DBG){}c=AjxTimedAction.MAX_TIMEOUT | |
}var e=d._id=AjxTimedAction._nextActionId++; | |
AjxTimedAction._pendingActions[e]=d; | |
var a="AjxTimedAction._exec("+e+")"; | |
d._tid=window.setTimeout(a,c); | |
return d._id | |
}; | |
AjxTimedAction.cancelAction=function(c){var a=AjxTimedAction._pendingActions[c]; | |
if(a){window.clearTimeout(a._tid); | |
delete AjxTimedAction._pendingActions[c]; | |
delete a._tid | |
}}; | |
AjxTimedAction._exec=function(d){try{var c=AjxTimedAction._pendingActions[d]; | |
if(c){delete AjxTimedAction._pendingActions[d]; | |
delete c._tid; | |
c._runResult=c.run() | |
}}catch(a){AjxException.reportScriptError(a) | |
}} | |
}if(AjxPackage.define("ajax.net.AjxInclude")){AjxInclude=function(e,g,f,d){var c=document.getElementsByTagName("head")[0]; | |
function a(h){if(AjxEnv.isIE&&h&&!/loaded|complete/.test(h.readyState)){return | |
}if(h){h[AjxInclude.eventName]=null | |
}window.status=""; | |
if(e.length>0){var i=e.shift(); | |
var k=typeof i=="string"?i:i.src; | |
var m=k; | |
if(!/^((https?|ftps?):\x2f\x2f|\x2f)/.test(k)){if(g){k=g+k | |
}if(cacheKillerVersion){k+="?v="+cacheKillerVersion | |
}}else{if(d&&k.indexOf("/")!=0){k=d+AjxStringUtil.urlEncode(k) | |
}}var h=document.createElement("script"); | |
var j=AjxCallback.simpleClosure(a,null,h); | |
if(h.attachEvent){h.attachEvent("onreadystatechange",j); | |
h.attachEvent("onerror",j) | |
}else{if(h.addEventListener){h.addEventListener("load",j,true); | |
h.addEventListener("error",j,true) | |
}}h.type="text/javascript"; | |
h.src=k; | |
window.status="Loading script: "+m; | |
var l=null; | |
if(i.id){h.id=i.id; | |
l=document.getElementById(i.id) | |
}if(l){l.parentNode.replaceChild(h,l) | |
}else{c.appendChild(h) | |
}}else{if(e.length==0){h=null; | |
c=null; | |
if(f){f.run() | |
}}}}a(null) | |
} | |
}if(AjxPackage.define("ajax.events.AjxListener")){AjxListener=function(c,d,a){AjxCallback.call(this,c,d,a) | |
}; | |
AjxListener.prototype=new AjxCallback(); | |
AjxListener.prototype.constructor=AjxListener; | |
AjxListener.prototype.isAjxListener=true; | |
AjxListener.prototype.toString=function(){return"AjxListener" | |
}; | |
AjxListener.prototype.handleEvent=function(a){return this.run(a) | |
} | |
}if(AjxPackage.define("ajax.util.AjxText")){AjxFormat=function(a){if(arguments.length==0){return | |
}this._pattern=a; | |
this._segments=[] | |
}; | |
AjxFormat.prototype.toString=function(){var c=[]; | |
c.push('pattern="',this._pattern,'"'); | |
if(this._segments.length>0){c.push(", segments={ "); | |
for(var a=0; | |
a<this._segments.length; | |
a++){if(a>0){c.push(", ") | |
}c.push(String(this._segments[a])) | |
}c.push(" }") | |
}return c.join("") | |
}; | |
AjxFormat.initialize=function(){AjxDateFormat.initialize(); | |
AjxNumberFormat.initialize() | |
}; | |
AjxFormat.prototype.format=function(a){var d=[]; | |
for(var c=0; | |
c<this._segments.length; | |
c++){d.push(this._segments[c].format(a)) | |
}return d.join("") | |
}; | |
AjxFormat.prototype.parse=function(e){var c=this._createParseObject(); | |
var a=0; | |
for(var d=0; | |
d<this._segments.length; | |
d++){var f=this._segments[d]; | |
a=f.parse(c,e,a) | |
}if(a<e.length){throw new AjxFormat.ParsingException(this,null,"input too long") | |
}return c | |
}; | |
AjxFormat.prototype.getSegments=function(){return this._segments | |
}; | |
AjxFormat.prototype.toPattern=function(){return this._pattern | |
}; | |
AjxFormat.prototype.clone=function(){return new this.constructor(this._pattern) | |
}; | |
AjxFormat.prototype._createParseObject=function(a){throw new AjxFormat.ParsingException(this,null,"not implemented") | |
}; | |
AjxFormat._zeroPad=function(f,g,d,h){f=typeof f=="string"?f:String(f); | |
if(f.length>=g){return f | |
}d=d||"0"; | |
var c=[]; | |
for(var e=f.length; | |
e<g; | |
e++){c.push(d) | |
}c[h?"unshift":"push"](f); | |
return c.join("") | |
}; | |
AjxFormat.FormatException=function(c,a){this._format=c; | |
this._message=a | |
}; | |
AjxFormat.FormatException.prototype.toString=function(){return this._message | |
}; | |
AjxFormat.FormattingException=function(d,c,a){AjxFormat.FormatException.call(this,d,a); | |
this._segment=c | |
}; | |
AjxFormat.FormattingException.prototype=new AjxFormat.FormatException; | |
AjxFormat.FormattingException.prototype.constructor=AjxFormat.FormattingException; | |
AjxFormat.ParsingException=function(d,c,a){AjxFormat.FormatException.call(this,d,a); | |
this._segment=c | |
}; | |
AjxFormat.ParsingException.prototype=new AjxFormat.FormatException; | |
AjxFormat.ParsingException.prototype.constructor=AjxFormat.ParsingException; | |
AjxFormat.Segment=function(c,a){if(arguments.length==0){return | |
}this._parent=c; | |
this._s=a | |
}; | |
AjxFormat.Segment.prototype.toString=function(){return'segment: "'+this._s+'"' | |
}; | |
AjxFormat.Segment.prototype.format=function(a){return this._s | |
}; | |
AjxFormat.Segment.prototype.parse=function(d,c,a){throw new AjxFormat.ParsingException(this._parent,this,"not implemented") | |
}; | |
AjxFormat.Segment.prototype.getFormat=function(){return this._parent | |
}; | |
AjxFormat.Segment.prototype.toSubPattern=function(){return this._s | |
}; | |
AjxFormat.Segment.prototype._getFixedLength=function(){var a; | |
if(this._index+1<this._parent._segments.length){var c=this._parent._segments[this._index+1]; | |
if(!(c instanceof AjxFormat.TextSegment)){a=this._s.length | |
}}return a | |
}; | |
AjxFormat.Segment._parseLiteral=function(e,d,a){if(d.length-a<e.length){throw new AjxFormat.ParsingException(this._parent,this,"input too short") | |
}for(var c=0; | |
c<e.length; | |
c++){if(e.charAt(c)!=d.charAt(a+c)){throw new AjxFormat.ParsingException(this._parent,this,"input doesn't match") | |
}}return a+e.length | |
}; | |
AjxFormat.Segment._parseLiterals=function(c,h,m,a,p,j){for(var g=0; | |
g<a.length; | |
g++){try{var n=a[g]; | |
var d=AjxFormat.Segment._parseLiteral(n,p,j); | |
if(h){var l=c||window; | |
if(typeof h=="function"){h.call(l,g+m) | |
}else{l[h]=g+m | |
}}return d | |
}catch(k){}}return -1 | |
}; | |
AjxFormat.Segment._parseInt=function(c,e,p,q,g,a,m){var h=a||q.length-g; | |
var l=g; | |
for(var d=0; | |
d<h; | |
d++){if(!q.charAt(g++).match(/\d/)){g--; | |
break | |
}}var k=g; | |
if(l==k){throw new AjxFormat.ParsingException(this._parent,this,"number not present") | |
}if(a&&k-l!=a){throw new AjxFormat.ParsingException(this._parent,this,"number too short") | |
}var n=parseInt(q.substring(l,k),m||10); | |
if(e){var j=c||window; | |
if(typeof e=="function"){e.call(j,n+p) | |
}else{j[e]=n+p | |
}}return k | |
}; | |
AjxDateFormat=function(h){if(arguments.length==0){return | |
}AjxFormat.call(this,h); | |
if(h==null){return | |
}if(typeof h=="number"){switch(h){case AjxDateFormat.SHORT:h=I18nMsg.formatDateShort; | |
break; | |
case AjxDateFormat.MEDIUM:h=I18nMsg.formatDateMedium; | |
break; | |
case AjxDateFormat.LONG:h=I18nMsg.formatDateLong; | |
break; | |
case AjxDateFormat.FULL:h=I18nMsg.formatDateFull; | |
break; | |
case AjxDateFormat.NUMBER:h=I18nMsg.formatDateNumber; | |
break | |
}}for(var e=0; | |
e<h.length; | |
e++){var k=h.charAt(e); | |
if(k=="'"){var d=e+1; | |
for(e++; | |
e<h.length; | |
e++){var k=h.charAt(e); | |
if(k=="'"){if(e+1<h.length&&h.charAt(e+1)=="'"){h=h.substr(0,e)+h.substr(e+1) | |
}else{break | |
}}}var a=e; | |
var g=new AjxFormat.TextSegment(this,h.substring(d,a)); | |
this._segments.push(g); | |
continue | |
}var d=e; | |
while(e<h.length){k=h.charAt(e); | |
if(AjxDateFormat._META_CHARS.indexOf(k)!=-1||k=="'"){break | |
}e++ | |
}var a=e; | |
if(d!=a){var g=new AjxFormat.TextSegment(this,h.substring(d,a)); | |
this._segments.push(g); | |
e--; | |
continue | |
}var d=e; | |
while(++e<h.length){if(h.charAt(e)!=k){break | |
}}var a=e--; | |
var f=a-d; | |
var j=h.substr(d,f); | |
var g=null; | |
switch(k){case"G":g=new AjxDateFormat.EraSegment(this,j); | |
break; | |
case"y":g=new AjxDateFormat.YearSegment(this,j); | |
break; | |
case"M":g=new AjxDateFormat.MonthSegment(this,j); | |
break; | |
case"w":g=new AjxDateFormat.WeekSegment(this,j); | |
break; | |
case"W":g=new AjxDateFormat.WeekSegment(this,j); | |
break; | |
case"D":g=new AjxDateFormat.DaySegment(this,j); | |
break; | |
case"d":g=new AjxDateFormat.DaySegment(this,j); | |
break; | |
case"F":g=new AjxDateFormat.WeekdaySegment(this,j); | |
break; | |
case"E":g=new AjxDateFormat.WeekdaySegment(this,j); | |
break; | |
case"a":g=new AjxDateFormat.AmPmSegment(this,j); | |
break; | |
case"H":g=new AjxDateFormat.HourSegment(this,j); | |
break; | |
case"k":g=new AjxDateFormat.HourSegment(this,j); | |
break; | |
case"K":g=new AjxDateFormat.HourSegment(this,j); | |
break; | |
case"h":g=new AjxDateFormat.HourSegment(this,j); | |
break; | |
case"m":g=new AjxDateFormat.MinuteSegment(this,j); | |
break; | |
case"s":g=new AjxDateFormat.SecondSegment(this,j); | |
break; | |
case"S":g=new AjxDateFormat.SecondSegment(this,j); | |
break; | |
case"z":g=new AjxDateFormat.TimezoneSegment(this,j); | |
break; | |
case"Z":g=new AjxDateFormat.TimezoneSegment(this,j); | |
break | |
}if(g!=null){g._index=this._segments.length; | |
this._segments.push(g) | |
}}}; | |
AjxDateFormat.prototype=new AjxFormat; | |
AjxDateFormat.prototype.constructor=AjxDateFormat; | |
AjxDateFormat.prototype.toString=function(){return"[AjxDateFormat: "+AjxFormat.prototype.toString.call(this)+"]" | |
}; | |
AjxDateFormat.SHORT=0; | |
AjxDateFormat.MEDIUM=1; | |
AjxDateFormat.LONG=2; | |
AjxDateFormat.FULL=3; | |
AjxDateFormat.DEFAULT=AjxDateFormat.MEDIUM; | |
AjxDateFormat._META_CHARS="GyMwWDdFEaHkKhmsSzZ"; | |
AjxDateFormat.NUMBER=4; | |
AjxDateFormat.getDateInstance=function(a){a=a!=null?a:AjxDateFormat.DEFAULT; | |
if(!AjxDateFormat._DATE_FORMATTERS[a]){AjxDateFormat._DATE_FORMATTERS[a]=new AjxDateFormat(AjxDateFormat._dateFormats[a]) | |
}return AjxDateFormat._DATE_FORMATTERS[a] | |
}; | |
AjxDateFormat.getTimeInstance=function(a){a=a!=null?a:AjxDateFormat.DEFAULT; | |
if(!AjxDateFormat._TIME_FORMATTERS[a]){AjxDateFormat._TIME_FORMATTERS[a]=new AjxDateFormat(AjxDateFormat._timeFormats[a]) | |
}return AjxDateFormat._TIME_FORMATTERS[a] | |
}; | |
AjxDateFormat.getDateTimeInstance=function(a,c){a=a!=null?a:AjxDateFormat.DEFAULT; | |
c=c!=null?c:AjxDateFormat.DEFAULT; | |
var e=a*10+c; | |
if(!AjxDateFormat._DATETIME_FORMATTERS[e]){var f=I18nMsg.formatDateTime; | |
var g=[AjxDateFormat._dateFormats[a],AjxDateFormat._timeFormats[c]]; | |
var d=AjxMessageFormat.format(f,g); | |
AjxDateFormat._DATETIME_FORMATTERS[e]=new AjxDateFormat(d) | |
}return AjxDateFormat._DATETIME_FORMATTERS[e] | |
}; | |
AjxDateFormat.format=function(c,a){return new AjxDateFormat(c).format(a) | |
}; | |
AjxDateFormat.parse=function(c,a){return new AjxDateFormat(c).parse(a) | |
}; | |
AjxDateFormat.initialize=function(){AjxDateFormat._dateFormats=[I18nMsg.formatDateShort,I18nMsg.formatDateMedium,I18nMsg.formatDateLong,I18nMsg.formatDateFull,I18nMsg.formatDateNumber]; | |
AjxDateFormat._timeFormats=[I18nMsg.formatTimeShort,I18nMsg.formatTimeMedium,I18nMsg.formatTimeLong,I18nMsg.formatTimeFull]; | |
AjxDateFormat._timeParsers=[]; | |
for(var c=1,a; | |
a=I18nMsg["parseTime"+c]; | |
c++){AjxDateFormat._timeParsers.push(new RegExp(a,"i")) | |
}AjxDateFormat._DATE_FORMATTERS={}; | |
AjxDateFormat._TIME_FORMATTERS={}; | |
AjxDateFormat._DATETIME_FORMATTERS={}; | |
AjxDateFormat.MonthSegment.initialize(); | |
AjxDateFormat.WeekdaySegment.initialize() | |
}; | |
AjxDateFormat.parseTime=function(h){for(var g=0; | |
g<AjxDateFormat._timeParsers.length; | |
g++){var a=AjxDateFormat._timeParsers[g].exec(h); | |
if(a){var d=parseInt(a[1],10)||0; | |
var f=parseInt(a[2],10)||0; | |
var e=a[3]; | |
if(e){var c=I18nMsg.parseTimePMChars; | |
if(d==12){d=0 | |
}if(c.indexOf(e)!=-1){d+=12 | |
}}if(d<24&&f<60){date=new Date(); | |
date.setHours(d); | |
date.setMinutes(f); | |
date.setSeconds(0); | |
return date | |
}}}}; | |
AjxDateFormat.prototype.parse=function(f){var d=null; | |
try{d=AjxFormat.prototype.parse.call(this,f); | |
var c=new Date(0,0,2,0,0,0,0); | |
if(d.year!=null){c.setFullYear(d.year) | |
}if(d.month!=null){c.setMonth(d.month) | |
}c.setDate(1); | |
if(d.dayofmonth!=null){c.setDate(d.dayofmonth) | |
}else{if(d.dayofyear!=null){c.setMonth(0,d.dayofyear) | |
}}if(d.hours!=null){c.setHours(d.hours) | |
}if(d.minutes!=null){c.setMinutes(d.minutes) | |
}if(d.seconds!=null){c.setSeconds(d.seconds) | |
}if(d.milliseconds!=null){c.setMilliseconds(d.milliseconds) | |
}if(d.ampm!=null){var a=c.getHours(); | |
if(a==12&&d.ampm==0){a=0 | |
}else{if(a!=12&&d.ampm==1){a+=12 | |
}}c.setHours(a) | |
}if(d.timezone!=null){c.setMinutes(c.getMinutes()-d.timezone) | |
}if(isNaN(c.getTime())){return null | |
}d=c | |
}catch(g){}return d | |
}; | |
AjxDateFormat.prototype._createParseObject=function(){return{year:null,month:null,dayofmonth:null,dayofyear:null,hours:null,minutes:null,seconds:null,milliseconds:null,ampm:null,era:null,timezone:null} | |
}; | |
AjxFormat.TextSegment=function(c,a){if(arguments.length==0){return | |
}AjxFormat.Segment.call(this,c,a) | |
}; | |
AjxFormat.TextSegment.prototype=new AjxFormat.Segment; | |
AjxFormat.TextSegment.prototype.constructor=AjxFormat.TextSegment; | |
AjxFormat.TextSegment.prototype.toString=function(){return'text: "'+this._s+'"' | |
}; | |
AjxFormat.TextSegment.prototype.parse=function(d,c,a){return AjxFormat.Segment._parseLiteral(this._s,c,a) | |
}; | |
AjxDateFormat.DateSegment=function(c,a){if(arguments.length==0){return | |
}AjxFormat.Segment.call(this,c,a) | |
}; | |
AjxDateFormat.DateSegment.prototype=new AjxFormat.Segment; | |
AjxDateFormat.DateSegment.prototype.constructor=AjxDateFormat.DateSegment; | |
AjxDateFormat.EraSegment=function(c,a){if(arguments.length==0){return | |
}AjxDateFormat.DateSegment.call(this,c,a) | |
}; | |
AjxDateFormat.EraSegment.prototype=new AjxDateFormat.DateSegment; | |
AjxDateFormat.EraSegment.prototype.constructor=AjxDateFormat.EraSegment; | |
AjxDateFormat.EraSegment.prototype.toString=function(){return'dateEra: "'+this._s+'"' | |
}; | |
AjxDateFormat.EraSegment.prototype.format=function(a){return I18nMsg.eraAD | |
}; | |
AjxDateFormat.YearSegment=function(c,a){if(arguments.length==0){return | |
}AjxDateFormat.DateSegment.call(this,c,a) | |
}; | |
AjxDateFormat.YearSegment.prototype=new AjxDateFormat.DateSegment; | |
AjxDateFormat.YearSegment.prototype.constructor=AjxDateFormat.YearSegment; | |
AjxDateFormat.YearSegment.prototype.toString=function(){return'dateYear: "'+this._s+'"' | |
}; | |
AjxDateFormat.YearSegment.prototype.format=function(a){var c=String(a.getFullYear()); | |
return this._s.length<4?c.substr(c.length-2):AjxFormat._zeroPad(c,this._s.length) | |
}; | |
AjxDateFormat.YearSegment.prototype.parse=function(d,j,f){var a=this._getFixedLength(); | |
var c=AjxFormat.Segment._parseInt(d,"year",0,j,f,a); | |
if(c-f==2){if(!AjxDateFormat._2digitStartYear){AjxDateFormat._2digitStartYear=parseInt(AjxMsg.dateParsing2DigitStartYear) | |
}var h=AjxDateFormat._2digitStartYear; | |
var i=parseInt(j.substr(f,2),10); | |
var e=(Math.floor(h/100)+(i<(h%100)?1:0))*100; | |
var g=e+i; | |
d.year=g | |
}return c | |
}; | |
AjxDateFormat.MonthSegment=function(c,a){if(arguments.length==0){return | |
}AjxDateFormat.DateSegment.call(this,c,a) | |
}; | |
AjxDateFormat.MonthSegment.prototype=new AjxDateFormat.DateSegment; | |
AjxDateFormat.MonthSegment.prototype.constructor=AjxDateFormat.MonthSegment; | |
AjxDateFormat.MonthSegment.prototype.toString=function(){return'dateMonth: "'+this._s+'"' | |
}; | |
AjxDateFormat.MonthSegment.initialize=function(){AjxDateFormat.MonthSegment.MONTHS={}; | |
AjxDateFormat.MonthSegment.MONTHS[AjxDateFormat.SHORT]=[AjxMsg.monthJanShort,AjxMsg.monthFebShort,AjxMsg.monthMarShort,AjxMsg.monthAprShort,AjxMsg.monthMayShort,AjxMsg.monthJunShort,AjxMsg.monthJulShort,AjxMsg.monthAugShort,AjxMsg.monthSepShort,AjxMsg.monthOctShort,AjxMsg.monthNovShort,AjxMsg.monthDecShort]; | |
AjxDateFormat.MonthSegment.MONTHS[AjxDateFormat.MEDIUM]=[I18nMsg.monthJanMedium,I18nMsg.monthFebMedium,I18nMsg.monthMarMedium,I18nMsg.monthAprMedium,I18nMsg.monthMayMedium,I18nMsg.monthJunMedium,I18nMsg.monthJulMedium,I18nMsg.monthAugMedium,I18nMsg.monthSepMedium,I18nMsg.monthOctMedium,I18nMsg.monthNovMedium,I18nMsg.monthDecMedium]; | |
AjxDateFormat.MonthSegment.MONTHS[AjxDateFormat.LONG]=[I18nMsg.monthJanLong,I18nMsg.monthFebLong,I18nMsg.monthMarLong,I18nMsg.monthAprLong,I18nMsg.monthMayLong,I18nMsg.monthJunLong,I18nMsg.monthJulLong,I18nMsg.monthAugLong,I18nMsg.monthSepLong,I18nMsg.monthOctLong,I18nMsg.monthNovLong,I18nMsg.monthDecLong] | |
}; | |
AjxDateFormat.MonthSegment.prototype.format=function(a){var c=a.getMonth(); | |
switch(this._s.length){case 1:return String(c+1); | |
case 2:return AjxFormat._zeroPad(c+1,2); | |
case 3:return AjxDateFormat.MonthSegment.MONTHS[AjxDateFormat.MEDIUM][c]; | |
case 5:return AjxDateFormat.MonthSegment.MONTHS[AjxDateFormat.SHORT][c] | |
}return AjxDateFormat.MonthSegment.MONTHS[AjxDateFormat.LONG][c] | |
}; | |
AjxDateFormat.MonthSegment.prototype.parse=function(d,f,c){var a; | |
switch(this._s.length){case 3:a=AjxDateFormat.MonthSegment.MONTHS[AjxDateFormat.MEDIUM]; | |
case 4:a=a||AjxDateFormat.MonthSegment.MONTHS[AjxDateFormat.LONG]; | |
case 5:a=a||AjxDateFormat.MonthSegment.MONTHS[AjxDateFormat.SHORT]; | |
var e=AjxFormat.Segment._parseLiterals(d,"month",0,a,f,c); | |
if(e==-1){throw new AjxFormat.ParsingException(this._parent,this,"no match") | |
}return e | |
}var g=this._getFixedLength(); | |
return AjxFormat.Segment._parseInt(d,"month",-1,f,c,g) | |
}; | |
AjxDateFormat.WeekSegment=function(c,a){if(arguments.length==0){return | |
}AjxDateFormat.DateSegment.call(this,c,a) | |
}; | |
AjxDateFormat.WeekSegment.prototype=new AjxDateFormat.DateSegment; | |
AjxDateFormat.WeekSegment.prototype.constructor=AjxDateFormat.WeekSegment; | |
AjxDateFormat.WeekSegment.prototype.toString=function(){return'weekMonth: "'+this._s+'"' | |
}; | |
AjxDateFormat.WeekSegment.prototype.format=function(c){var e=c.getYear(); | |
var g=c.getMonth(); | |
var a=c.getDate(); | |
var h=/w/.test(this._s); | |
var f=new Date(e,h?0:g,1); | |
var d=0; | |
while(true){d++; | |
if(f.getMonth()>g||(f.getMonth()==g&&f.getDate()>=a)){break | |
}f.setDate(f.getDate()+7) | |
}return AjxFormat._zeroPad(d,this._s.length) | |
}; | |
AjxDateFormat.WeekSegment.prototype.parse=function(c,d,a){var e=this._getFixedLength(); | |
return AjxFormat.Segment._parseInt(null,null,0,d,a,e) | |
}; | |
AjxDateFormat.DaySegment=function(c,a){if(arguments.length==0){return | |
}AjxDateFormat.DateSegment.call(this,c,a) | |
}; | |
AjxDateFormat.DaySegment.prototype=new AjxDateFormat.DateSegment; | |
AjxDateFormat.DaySegment.prototype.constructor=AjxDateFormat.DaySegment; | |
AjxDateFormat.DaySegment.prototype.toString=function(){return'dateDay: "'+this._s+'"' | |
}; | |
AjxDateFormat.DaySegment.prototype.format=function(c){var f=c.getMonth(); | |
var a=c.getDate(); | |
if(/D/.test(this._s)&&f>0){var d=c.getYear(); | |
do{var e=new Date(d,f,1); | |
e.setDate(0); | |
a+=e.getDate(); | |
f-- | |
}while(f>0) | |
}return AjxFormat._zeroPad(a,this._s.length) | |
}; | |
AjxDateFormat.DaySegment.prototype.parse=function(c,f,a){var g=this._getFixedLength(); | |
var e=function(h){if(h>AjxDateUtil.MAX_DAYS_PER_MONTH){throw new AjxFormat.ParsingException(this._parent,this,"number too long") | |
}else{c.dayofmonth=h | |
}}; | |
var d=/D/.test(this._s)?"dayofyear":e; | |
return AjxFormat.Segment._parseInt(c,d,0,f,a,g) | |
}; | |
AjxDateFormat.WeekdaySegment=function(c,a){if(arguments.length==0){return | |
}AjxDateFormat.DateSegment.call(this,c,a) | |
}; | |
AjxDateFormat.WeekdaySegment.prototype=new AjxDateFormat.DateSegment; | |
AjxDateFormat.WeekdaySegment.prototype.constructor=AjxDateFormat.WeekdaySegment; | |
AjxDateFormat.DaySegment.prototype.toString=function(){return'dateDay: "'+this._s+'"' | |
}; | |
AjxDateFormat.WeekdaySegment.initialize=function(){AjxDateFormat.WeekdaySegment.WEEKDAYS={}; | |
AjxDateFormat.WeekdaySegment.WEEKDAYS[AjxDateFormat.SHORT]=[AjxMsg.weekdaySunShort,AjxMsg.weekdayMonShort,AjxMsg.weekdayTueShort,AjxMsg.weekdayWedShort,AjxMsg.weekdayThuShort,AjxMsg.weekdayFriShort,AjxMsg.weekdaySatShort]; | |
AjxDateFormat.WeekdaySegment.WEEKDAYS[AjxDateFormat.MEDIUM]=[I18nMsg.weekdaySunMedium,I18nMsg.weekdayMonMedium,I18nMsg.weekdayTueMedium,I18nMsg.weekdayWedMedium,I18nMsg.weekdayThuMedium,I18nMsg.weekdayFriMedium,I18nMsg.weekdaySatMedium]; | |
AjxDateFormat.WeekdaySegment.WEEKDAYS[AjxDateFormat.LONG]=[I18nMsg.weekdaySunLong,I18nMsg.weekdayMonLong,I18nMsg.weekdayTueLong,I18nMsg.weekdayWedLong,I18nMsg.weekdayThuLong,I18nMsg.weekdayFriLong,I18nMsg.weekdaySatLong] | |
}; | |
AjxDateFormat.WeekdaySegment.prototype.format=function(a){var d=a.getDay(); | |
if(/E/.test(this._s)){var c; | |
switch(this._s.length){case 4:c=AjxDateFormat.LONG; | |
break; | |
case 5:c=AjxDateFormat.SHORT; | |
break; | |
default:c=AjxDateFormat.MEDIUM | |
}return AjxDateFormat.WeekdaySegment.WEEKDAYS[c][d] | |
}return AjxFormat._zeroPad(d,this._s.length) | |
}; | |
AjxDateFormat.WeekdaySegment.prototype.parse=function(d,f,c){var a; | |
switch(this._s.length){case 3:a=AjxDateFormat.WeekdaySegment.WEEKDAYS[AjxDateFormat.MEDIUM]; | |
case 4:a=a||AjxDateFormat.WeekdaySegment.WEEKDAYS[AjxDateFormat.LONG]; | |
case 5:a=a||AjxDateFormat.WeekdaySegment.WEEKDAYS[AjxDateFormat.SHORT]; | |
var e=AjxFormat.Segment._parseLiterals(null,null,0,a,f,c); | |
if(e==-1){throw new AjxFormat.ParsingException(this._parent,this,"no match") | |
}return e | |
}var g=this._getFixedLength(); | |
return AjxFormat.Segment._parseInt(null,null,0,f,c,g) | |
}; | |
AjxDateFormat.TimeSegment=function(c,a){if(arguments.length==0){return | |
}AjxFormat.Segment.call(this,c,a) | |
}; | |
AjxDateFormat.TimeSegment.prototype=new AjxFormat.Segment; | |
AjxDateFormat.TimeSegment.prototype.constructor=AjxDateFormat.TimeSegment; | |
AjxDateFormat.HourSegment=function(c,a){if(arguments.length==0){return | |
}AjxFormat.Segment.call(this,c,a) | |
}; | |
AjxDateFormat.HourSegment.prototype=new AjxDateFormat.TimeSegment; | |
AjxDateFormat.HourSegment.prototype.constructor=AjxDateFormat.HourSegment; | |
AjxDateFormat.HourSegment.prototype.toString=function(){return'timeHour: "'+this._s+'"' | |
}; | |
AjxDateFormat.HourSegment.prototype.format=function(c){var a=c.getHours(); | |
if(a>12&&/[hK]/.test(this._s)){a-=12 | |
}else{if(a==0&&/[h]/.test(this._s)){a=12 | |
}else{if(a===12&&/K/.test(this._s)){a=0 | |
}else{if(a===0&&/k/.test(this._s)){a=24 | |
}}}}return AjxFormat._zeroPad(a,this._s.length) | |
}; | |
AjxDateFormat.HourSegment.prototype.parse=function(c,d,a){var e=this._getFixedLength(); | |
return AjxFormat.Segment._parseInt(c,"hours",0,d,a,e) | |
}; | |
AjxDateFormat.MinuteSegment=function(c,a){if(arguments.length==0){return | |
}AjxFormat.Segment.call(this,c,a) | |
}; | |
AjxDateFormat.MinuteSegment.prototype=new AjxDateFormat.TimeSegment; | |
AjxDateFormat.MinuteSegment.prototype.constructor=AjxDateFormat.MinuteSegment; | |
AjxDateFormat.MinuteSegment.prototype.toString=function(){return'timeMinute: "'+this._s+'"' | |
}; | |
AjxDateFormat.MinuteSegment.prototype.format=function(a){var c=a.getMinutes(); | |
return AjxFormat._zeroPad(c,this._s.length) | |
}; | |
AjxDateFormat.MinuteSegment.prototype.parse=function(c,d,a){var e=this._getFixedLength(); | |
return AjxFormat.Segment._parseInt(c,"minutes",0,d,a,e) | |
}; | |
AjxDateFormat.SecondSegment=function(c,a){if(arguments.length==0){return | |
}AjxFormat.Segment.call(this,c,a) | |
}; | |
AjxDateFormat.SecondSegment.prototype=new AjxDateFormat.TimeSegment; | |
AjxDateFormat.SecondSegment.prototype.constructor=AjxDateFormat.SecondSegment; | |
AjxDateFormat.SecondSegment.prototype.toString=function(){return'timeSecond: "'+this._s+'"' | |
}; | |
AjxDateFormat.SecondSegment.prototype.format=function(a){var c=/s/.test(this._s)?a.getSeconds():a.getMilliseconds(); | |
return AjxFormat._zeroPad(c,this._s.length) | |
}; | |
AjxDateFormat.SecondSegment.prototype.parse=function(d,f,c){var a=/s/.test(this._s); | |
var e=a?"seconds":"milliseconds"; | |
var g=a?this._getFixedLength():0; | |
return AjxFormat.Segment._parseInt(d,e,0,f,c,g) | |
}; | |
AjxDateFormat.AmPmSegment=function(c,a){if(arguments.length==0){return | |
}AjxFormat.Segment.call(this,c,a) | |
}; | |
AjxDateFormat.AmPmSegment.prototype=new AjxDateFormat.TimeSegment; | |
AjxDateFormat.AmPmSegment.prototype.constructor=AjxDateFormat.AmPmSegment; | |
AjxDateFormat.AmPmSegment.prototype.toString=function(){return'timeAmPm: "'+this._s+'"' | |
}; | |
AjxDateFormat.AmPmSegment.prototype.format=function(c){var a=c.getHours(); | |
return a<12?I18nMsg.periodAm:I18nMsg.periodPm | |
}; | |
AjxDateFormat.AmPmSegment.prototype.parse=function(c,e,a){var f=[I18nMsg.periodAm.toLowerCase(),I18nMsg.periodPm.toLowerCase(),I18nMsg.periodAm.toUpperCase(),I18nMsg.periodPm.toUpperCase()]; | |
var d=AjxFormat.Segment._parseLiterals(c,"ampm",0,f,e,a); | |
if(d==-1){throw new AjxFormat.ParsingException(this._parent,this,"no match") | |
}c.ampm=c.ampm%2; | |
return d | |
}; | |
AjxDateFormat.TimezoneSegment=function(c,a){if(arguments.length==0){return | |
}AjxFormat.Segment.call(this,c,a) | |
}; | |
AjxDateFormat.TimezoneSegment.prototype=new AjxDateFormat.TimeSegment; | |
AjxDateFormat.TimezoneSegment.prototype.constructor=AjxDateFormat.TimezoneSegment; | |
AjxDateFormat.TimezoneSegment.prototype.toString=function(){return'timeTimezone: "'+this._s+'"' | |
}; | |
AjxDateFormat.TimezoneSegment.prototype.format=function(c){var a=c.timezone||AjxTimezone.DEFAULT; | |
if(/Z/.test(this._s)){return AjxTimezone.getShortName(a) | |
}return this._s.length<4?AjxTimezone.getMediumName(a):AjxTimezone.getLongName(a) | |
}; | |
AjxMessageFormat=function(h){if(arguments.length==0){return | |
}AjxFormat.call(this,h); | |
if(h==null){return | |
}for(var d=0; | |
d<h.length; | |
d++){var j=h.charAt(d); | |
if(j=="'"){if(d+1<h.length&&h.charAt(d+1)=="'"){var e=new AjxFormat.TextSegment(this,"'"); | |
this._segments.push(e); | |
d++; | |
continue | |
}var k=d+1; | |
for(d++; | |
d<h.length; | |
d++){var j=h.charAt(d); | |
if(j=="'"){if(d+1<h.length&&h.charAt(d+1)=="'"){h=h.substr(0,d)+h.substr(d+1) | |
}else{break | |
}}}var g=d; | |
var e=new AjxFormat.TextSegment(this,h.substring(k,g)); | |
this._segments.push(e); | |
continue | |
}var k=d; | |
while(d<h.length){j=h.charAt(d); | |
if(j=="{"||j=="'"){break | |
}d++ | |
}var g=d; | |
if(k!=g){var e=new AjxFormat.TextSegment(this,h.substring(k,g)); | |
this._segments.push(e); | |
d--; | |
continue | |
}var k=d+1; | |
var a=0; | |
while(++d<h.length){var j=h.charAt(d); | |
if(j=="{"){a++ | |
}else{if(j=="}"){if(a==0){break | |
}a-- | |
}}}var g=d; | |
var f=g-k; | |
var l=h.substr(k,f); | |
var e=new AjxMessageFormat.MessageSegment(this,l); | |
if(e!=null){this._segments.push(e) | |
}}}; | |
AjxMessageFormat.prototype=new AjxFormat; | |
AjxMessageFormat.prototype.constructor=AjxMessageFormat; | |
AjxMessageFormat.prototype.toString=function(){return"[AjxMessageFormat: "+AjxFormat.prototype.toString.call(this)+"]" | |
}; | |
AjxMessageFormat.format=function(a,c){return new AjxMessageFormat(a).format(c) | |
}; | |
AjxMessageFormat.prototype.format=function(a){if(!(a instanceof Array)){a=[a] | |
}return AjxFormat.prototype.format.call(this,a) | |
}; | |
AjxMessageFormat.prototype.getFormats=function(){var a=[]; | |
for(var c=0; | |
c<this._segments.length; | |
c++){var d=this._segments[c]; | |
if(d instanceof AjxMessageFormat.MessageSegment){a.push(d.getSegmentFormat()) | |
}}return a | |
}; | |
AjxMessageFormat.prototype.getFormatsByArgumentIndex=function(){var a=[]; | |
for(var c=0; | |
c<this._segments.length; | |
c++){var d=this._segments[c]; | |
if(d instanceof AjxMessageFormat.MessageSegment){a[d.getIndex()]=d.getSegmentFormat() | |
}}return a | |
}; | |
AjxMessageFormat.MessageSegment=function(e,a){if(arguments.length==0){return | |
}AjxFormat.Segment.call(this,e,a); | |
var d=AjxMessageFormat.MessageSegment._split(a,","); | |
this._index=Number(d[0]); | |
this._type=d[1]||"string"; | |
this._style=d[2]; | |
if(this._type=="list"){this._isList=true; | |
this._type=d[2]||"string"; | |
this._style=d[3] | |
}switch(this._type){case"number":switch(this._style){case"integer":this._formatter=AjxNumberFormat.getIntegerInstance(); | |
break; | |
case"currency":this._formatter=AjxNumberFormat.getCurrencyInstance(); | |
break; | |
case"percent":this._formatter=AjxNumberFormat.getPercentInstance(); | |
break; | |
default:this._formatter=this._style==null?AjxNumberFormat.getInstance():new AjxNumberFormat(this._style) | |
}break; | |
case"date":case"time":var c=this._type=="date"?AjxDateFormat.getDateInstance:AjxDateFormat.getTimeInstance; | |
switch(this._style){case"short":this._formatter=c(AjxDateFormat.SHORT); | |
break; | |
case"medium":this._formatter=c(AjxDateFormat.MEDIUM); | |
break; | |
case"long":this._formatter=c(AjxDateFormat.LONG); | |
break; | |
case"full":this._formatter=c(AjxDateFormat.FULL); | |
break; | |
default:this._formatter=this._style==null?c(AjxDateFormat.DEFAULT):new AjxDateFormat(this._style) | |
}break; | |
case"choice":this._formatter=new AjxChoiceFormat(this._style); | |
break | |
}if(this._isList){this._formatter=new AjxListFormat(this._formatter) | |
}}; | |
AjxMessageFormat.MessageSegment.prototype=new AjxFormat.Segment; | |
AjxMessageFormat.MessageSegment.prototype.constructor=AjxMessageFormat.MessageSegment; | |
AjxMessageFormat.MessageSegment.prototype.toString=function(){var c=['message: "',this._s,'", index: ',this._index]; | |
if(this._isList){c.push(", list: ",this._isList) | |
}if(this._type){c.push(", type: ",this._type) | |
}if(this._style){c.push(", style: ",this._style) | |
}if(this._formatter){c.push(", formatter: ",this._formatter.toString()) | |
}return c.join("") | |
}; | |
AjxMessageFormat.MessageSegment.prototype._isList=false; | |
AjxMessageFormat.MessageSegment.prototype.format=function(c){var a=c[this._index]; | |
if(this._formatter instanceof AjxChoiceFormat){return this._formatter.format(c,this._index) | |
}return this._formatter?this._formatter.format(a):String(a) | |
}; | |
AjxMessageFormat.MessageSegment.prototype.getIndex=function(){return this._index | |
}; | |
AjxMessageFormat.MessageSegment.prototype.getType=function(){return this._type | |
}; | |
AjxMessageFormat.MessageSegment.prototype.getStyle=function(){return this._style | |
}; | |
AjxMessageFormat.MessageSegment.prototype.getSegmentFormat=function(){return this._formatter | |
}; | |
AjxMessageFormat.MessageSegment._split=function(f,a){var g=[]; | |
var e=0; | |
var d; | |
var h=0; | |
for(d=0; | |
d<f.length; | |
d++){var i=f.charAt(d); | |
if(i=="{"){h++ | |
}else{if(i=="}"){h-- | |
}else{if(i==a&&h==0){g.push(f.substring(e,d)); | |
e=d+1 | |
}}}}if(d>e){g.push(f.substring(e,d)) | |
}return g | |
}; | |
AjxNumberFormat=function(r,s){if(arguments.length==0){return | |
}AjxFormat.call(this,r); | |
if(!r){return | |
}var c=r.split(/;/); | |
var r=c[0]; | |
var p=0; | |
var n=this.__parseStatic(r,p); | |
p=n.offset; | |
var g=n.text!=""; | |
if(g){this._segments.push(new AjxFormat.TextSegment(this,n.text)) | |
}var h=p; | |
while(p<r.length&&AjxNumberFormat._META_CHARS.indexOf(r.charAt(p))!=-1){p++ | |
}var f=p; | |
var a=r.substring(h,f); | |
var t=a.indexOf("E"); | |
var l=t!=-1?a.substring(t+1):null; | |
if(l){a=a.substring(0,t); | |
this._showExponent=true | |
}var m=a.indexOf(I18nMsg.numberSeparatorDecimal!=""?I18nMsg.numberSeparatorDecimal:"."); | |
var u=m!=-1?a.substring(0,m):a; | |
if(u){var v=u.lastIndexOf(I18nMsg.numberSeparatorGrouping!=""?I18nMsg.numberSeparatorGrouping:","); | |
if(v!=-1){this._groupingOffset=u.length-v-1 | |
}u=u.replace(/[^#0]/g,""); | |
var k=u.indexOf("0"); | |
if(k!=-1){this._minIntDigits=u.length-k | |
}this._maxIntDigits=u.length | |
}var q=m!=-1?a.substring(m+1):null; | |
if(q){var k=q.lastIndexOf("0"); | |
if(k!=-1){this._minFracDigits=k+1 | |
}this._maxFracDigits=q.replace(/[^#0]/g,"").length | |
}this._segments.push(new AjxNumberFormat.NumberSegment(this,a)); | |
var n=this.__parseStatic(r,p); | |
p=n.offset; | |
if(n.text!=""){this._segments.push(new AjxFormat.TextSegment(this,n.text)) | |
}if(s){return | |
}if(c.length>1){var r=c[1]; | |
this._negativeFormatter=new AjxNumberFormat(r,true) | |
}else{var o=new AjxNumberFormat(""); | |
o._segments=o._segments.concat(this._segments); | |
var j=g?1:0; | |
var d=new AjxFormat.TextSegment(o,I18nMsg.numberSignMinus); | |
o._segments.splice(j,0,d); | |
this._negativeFormatter=o | |
}}; | |
AjxNumberFormat.prototype=new AjxFormat; | |
AjxNumberFormat.prototype.constructor=AjxNumberFormat; | |
AjxNumberFormat.prototype.toString=function(){var a=["[AjxNumberFormat: ","formatter=",AjxFormat.prototype.toString.call(this)]; | |
if(this._negativeFormatter){a.push(", negativeFormatter=",this._negativeFormatter.toString()) | |
}a.push("]"); | |
return a.join("") | |
}; | |
AjxNumberFormat._NUMBER="number"; | |
AjxNumberFormat._INTEGER="integer"; | |
AjxNumberFormat._CURRENCY="currency"; | |
AjxNumberFormat._PERCENT="percent"; | |
AjxNumberFormat._META_CHARS="0#.,E"; | |
AjxNumberFormat.prototype._groupingOffset=Number.MAX_VALUE; | |
AjxNumberFormat.prototype._minIntDigits=1; | |
AjxNumberFormat.prototype._isCurrency=false; | |
AjxNumberFormat.prototype._isPercent=false; | |
AjxNumberFormat.prototype._isPerMille=false; | |
AjxNumberFormat.prototype._showExponent=false; | |
AjxNumberFormat.getInstance=function(){if(!AjxNumberFormat._FORMATTERS[AjxNumberFormat._NUMBER]){AjxNumberFormat._FORMATTERS[AjxNumberFormat._NUMBER]=new AjxNumberFormat(I18nMsg.formatNumber) | |
}return AjxNumberFormat._FORMATTERS[AjxNumberFormat._NUMBER] | |
}; | |
AjxNumberFormat.getNumberInstance=AjxNumberFormat.getInstance; | |
AjxNumberFormat.getCurrencyInstance=function(){if(!AjxNumberFormat._FORMATTERS[AjxNumberFormat._CURRENCY]){AjxNumberFormat._FORMATTERS[AjxNumberFormat._CURRENCY]=new AjxNumberFormat(I18nMsg.formatNumberCurrency) | |
}return AjxNumberFormat._FORMATTERS[AjxNumberFormat._CURRENCY] | |
}; | |
AjxNumberFormat.getIntegerInstance=function(){if(!AjxNumberFormat._FORMATTERS[AjxNumberFormat._INTEGER]){AjxNumberFormat._FORMATTERS[AjxNumberFormat._INTEGER]=new AjxNumberFormat(I18nMsg.formatNumberInteger) | |
}return AjxNumberFormat._FORMATTERS[AjxNumberFormat._INTEGER] | |
}; | |
AjxNumberFormat.getPercentInstance=function(){if(!AjxNumberFormat._FORMATTERS[AjxNumberFormat._PERCENT]){AjxNumberFormat._FORMATTERS[AjxNumberFormat._PERCENT]=new AjxNumberFormat(I18nMsg.formatNumberPercent) | |
}return AjxNumberFormat._FORMATTERS[AjxNumberFormat._PERCENT] | |
}; | |
AjxNumberFormat.format=function(c,a){return new AjxNumberFormat(c).format(a) | |
}; | |
AjxNumberFormat.initialize=function(){AjxNumberFormat._FORMATTERS={} | |
}; | |
AjxNumberFormat.prototype.format=function(a){if(a<0&&this._negativeFormatter){return this._negativeFormatter.format(a) | |
}return AjxFormat.prototype.format.call(this,a) | |
}; | |
AjxNumberFormat.prototype.__parseStatic=function(e,d){var f=[]; | |
while(d<e.length){var h=e.charAt(d++); | |
if(AjxNumberFormat._META_CHARS.indexOf(h)!=-1){d--; | |
break | |
}switch(h){case"'":var g=d; | |
while(d<e.length&&e.charAt(d++)!="'"){}var a=d; | |
h=a-g==0?"'":e.substring(g,a); | |
break; | |
case"%":h=I18nMsg.numberSignPercent; | |
this._isPercent=true; | |
break; | |
case"\u2030":h=I18nMsg.numberSignPerMill; | |
this._isPerMille=true; | |
break; | |
case"\u00a4":h=e.charAt(d)=="\u00a4"?I18nMsg.currencyCode:I18nMsg.currencySymbol; | |
this._isCurrency=true; | |
break | |
}f.push(h) | |
}return{text:f.join(""),offset:d} | |
}; | |
AjxNumberFormat.NumberSegment=function(c,a){if(arguments.length==0){return | |
}AjxFormat.Segment.call(this,c,a) | |
}; | |
AjxNumberFormat.NumberSegment.prototype=new AjxFormat.Segment; | |
AjxNumberFormat.NumberSegment.prototype.constructor=AjxNumberFormat.NumberSegment; | |
AjxNumberFormat.NumberSegment.prototype.toString=function(){return'number: "'+this._s+'"' | |
}; | |
AjxNumberFormat.NumberSegment.prototype.format=function(c){if(isNaN(c)){return I18nMsg.numberNaN | |
}if(c===Number.NEGATIVE_INFINITY||c===Number.POSITIVE_INFINITY){return I18nMsg.numberInfinity | |
}if(typeof c!="number"){c=Number(c) | |
}c=Math.abs(c); | |
if(this._parent._isPercent){c*=100 | |
}else{if(this._parent._isPerMille){c*=1000 | |
}}var a=this._parent._showExponent?c.toExponential(this._parent._maxFracDigits).toUpperCase().replace(/E\+/,"E"):c.toFixed(this._parent._maxFracDigits||0); | |
a=this._normalize(a); | |
return a | |
}; | |
AjxNumberFormat.NumberSegment.prototype._normalize=function(g){var e=g.split(/[\.Ee]/); | |
var h=e.shift(); | |
if(h.length<this._parent._minIntDigits){h=AjxFormat._zeroPad(h,this._parent._minIntDigits,I18nMsg.numberZero) | |
}if(h.length>this._parent._groupingOffset){var d=[]; | |
var f=h.length-this._parent._groupingOffset; | |
while(f>0){d.unshift(h.substr(f,this._parent._groupingOffset)); | |
d.unshift(I18nMsg.numberSeparatorGrouping); | |
f-=this._parent._groupingOffset | |
}d.unshift(h.substring(0,f+this._parent._groupingOffset)); | |
h=d.join("") | |
}var j="0"; | |
var k; | |
if(g.match(/\./)){j=e.shift() | |
}else{if(g.match(/\e/)||g.match(/\E/)){k=e.shift() | |
}}j=j.replace(/0+$/,""); | |
if(j.length<this._parent._minFracDigits){j=AjxFormat._zeroPad(j,this._parent._minFracDigits,I18nMsg.numberZero,true) | |
}var d=[h]; | |
if(j.length>0){var c=this._parent._isCurrency?I18nMsg.numberSeparatorMoneyDecimal:I18nMsg.numberSeparatorDecimal; | |
d.push(c,j) | |
}if(k){d.push("E",k.replace(/^\+/,"")) | |
}return d.join("") | |
}; | |
AjxChoiceFormat=function(g){if(arguments.length==0){return | |
}AjxFormat.call(this,g); | |
if(g==null){return | |
}var k=g.split("|"); | |
if(arguments.length==1){this._limits=new Array(k.length); | |
this._lessThan=new Array(k.length); | |
this._formats=new Array(k.length); | |
var h=new RegExp("^([^#<\u2264]+)([#<\u2264])(.*)$"); | |
for(var d=0; | |
d<k.length; | |
d++){var c=k[d]; | |
var e=h.exec(c); | |
var a=e[1]; | |
var f=e[2]; | |
var j=e[3]; | |
if(a=="\u221E"){this._limits[d]=Number.POSITIVE_INFINITY | |
}else{if(a=="-\u221E"){this._limits[d]=Number.NEGATIVE_INFINITY | |
}else{this._limits[d]=parseFloat(a) | |
}}this._lessThan[d]=f=="#"||f=="\u2264"; | |
this._formats[d]=new AjxMessageFormat(j) | |
}}else{this._limits=arguments[0]; | |
this._lessThan=new Array(arguments[0].length); | |
this._formats=arguments[1]; | |
this._pattern=[]; | |
for(var d=0; | |
d<this._formats.length; | |
d++){if(d>0){this._pattern.push("|") | |
}this._pattern.push(this._limits[d],"#",this._formats[d]); | |
this._lessThan[d]=false; | |
this._formats[d]=new AjxMessageFormat(this._formats[d]) | |
}this._pattern=this._pattern.join("") | |
}}; | |
AjxChoiceFormat.prototype=new AjxFormat; | |
AjxChoiceFormat.prototype.constructor=AjxChoiceFormat; | |
AjxChoiceFormat.prototype.toString=function(){return["[AjxChoiceFormat: ","limits={ ",this._limits.join(", ")," }, ","formats={ ",this._formats.join(", ")," }, ","lessThan={ ",this._lessThan.join(", ")," }]"].join("") | |
}; | |
AjxChoiceFormat.prototype.getLimits=function(){return this._limits | |
}; | |
AjxChoiceFormat.prototype.getFormats=function(){return this._formats | |
}; | |
AjxChoiceFormat.prototype.format=function(c,f){var e=c instanceof Array?c[f]:c; | |
var k; | |
if(isNaN(e)||e<this._limits[0]){k=this._formats[0] | |
}else{for(var d=0; | |
d<this._limits.length-1; | |
d++){var j=this._limits[d]; | |
var h=this._limits[d+1]; | |
var l=e>=j; | |
var g=this._lessThan[d+1]?e<h:e<=h; | |
if(l&&g){k=this._formats[d]; | |
break | |
}}if(!k){k=this._formats[this._formats.length-1] | |
}}return k.format(c) | |
}; | |
AjxListFormat=function(c,e,d,a){AjxFormat.call(this,c?c.toPattern():""); | |
this._formatter=c; | |
this._separator=e||AjxMsg.listSeparator; | |
this._lastSeparator=d||AjxMsg.listSeparatorLast; | |
this._twoSeparator=a||AjxMsg.listSeparatorTwo | |
}; | |
AjxListFormat.prototype=new AjxFormat; | |
AjxListFormat.prototype.constructor=AjxListFormat; | |
AjxListFormat.prototype.format=function(f){f=f instanceof Array?f:[f]; | |
var e=[]; | |
var a=f.length; | |
for(var c=0; | |
c<a; | |
c++){if(c>0){e.push((c<a-1)?this._separator:(a==2)?this._twoSeparator:this._lastSeparator) | |
}var d=f[c]; | |
e.push(this._formatter?this._formatter.format(d):String(d)) | |
}return e.join("") | |
}; | |
AjxFormat.initialize() | |
}if(AjxPackage.define("ajax.util.AjxEmailAddress")){AjxEmailAddress=function(c,f,d,e,g,a){this.address=c; | |
this.name=this._setName(d); | |
this.dispName=e; | |
this.type=f||AjxEmailAddress.TO; | |
this.isGroup=g; | |
this.canExpand=a | |
}; | |
AjxEmailAddress.prototype.isAjxEmailAddress=true; | |
AjxEmailAddress.customInvalidEmailPats=[]; | |
AjxEmailAddress.FROM="FROM"; | |
AjxEmailAddress.TO="TO"; | |
AjxEmailAddress.CC="CC"; | |
AjxEmailAddress.BCC="BCC"; | |
AjxEmailAddress.REPLY_TO="REPLY_TO"; | |
AjxEmailAddress.SENDER="SENDER"; | |
AjxEmailAddress.READ_RECEIPT="READ_RECEIPT"; | |
AjxEmailAddress.RESENT_FROM="RESENT_FROM"; | |
AjxEmailAddress.TYPE_STRING={}; | |
AjxEmailAddress.TYPE_STRING[AjxEmailAddress.FROM]="from"; | |
AjxEmailAddress.TYPE_STRING[AjxEmailAddress.TO]="to"; | |
AjxEmailAddress.TYPE_STRING[AjxEmailAddress.CC]="cc"; | |
AjxEmailAddress.TYPE_STRING[AjxEmailAddress.BCC]="bcc"; | |
AjxEmailAddress.TYPE_STRING[AjxEmailAddress.REPLY_TO]="replyTo"; | |
AjxEmailAddress.TYPE_STRING[AjxEmailAddress.SENDER]="sender"; | |
AjxEmailAddress.TYPE_STRING[AjxEmailAddress.READ_RECEIPT]="readReceipt"; | |
AjxEmailAddress.TYPE_STRING[AjxEmailAddress.RESENT_FROM]="resentFrom"; | |
AjxEmailAddress.fromSoapType={}; | |
AjxEmailAddress.fromSoapType.f=AjxEmailAddress.FROM; | |
AjxEmailAddress.fromSoapType.t=AjxEmailAddress.TO; | |
AjxEmailAddress.fromSoapType.c=AjxEmailAddress.CC; | |
AjxEmailAddress.fromSoapType.b=AjxEmailAddress.BCC; | |
AjxEmailAddress.fromSoapType.r=AjxEmailAddress.REPLY_TO; | |
AjxEmailAddress.fromSoapType.s=AjxEmailAddress.SENDER; | |
AjxEmailAddress.fromSoapType.n=AjxEmailAddress.READ_RECEIPT; | |
AjxEmailAddress.fromSoapType.rf=AjxEmailAddress.RESENT_FROM; | |
AjxEmailAddress.toSoapType={}; | |
AjxEmailAddress.toSoapType[AjxEmailAddress.FROM]="f"; | |
AjxEmailAddress.toSoapType[AjxEmailAddress.TO]="t"; | |
AjxEmailAddress.toSoapType[AjxEmailAddress.CC]="c"; | |
AjxEmailAddress.toSoapType[AjxEmailAddress.BCC]="b"; | |
AjxEmailAddress.toSoapType[AjxEmailAddress.REPLY_TO]="r"; | |
AjxEmailAddress.toSoapType[AjxEmailAddress.SENDER]="s"; | |
AjxEmailAddress.toSoapType[AjxEmailAddress.READ_RECEIPT]="n"; | |
AjxEmailAddress.SEPARATOR="; "; | |
AjxEmailAddress.DELIMS=[";",",","\n"," "]; | |
AjxEmailAddress.IS_DELIM=AjxUtil.arrayAsHash(AjxEmailAddress.DELIMS); | |
AjxEmailAddress.addrAnglePat=/(\s*<(((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*"(([^\\"])|(\\([^\x0A\x0D])))+"\s*))\@((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*\[(\s*(([^\[\]\\])|(\\([^\x0A\x0D])))+)*\s*\]\s*)))>\s*)$/; | |
AjxEmailAddress.addrOnlyPat=/^((((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*"(([^\\"])|(\\([^\x0A\x0D])))+"\s*))\@((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*\[(\s*(([^\[\]\\])|(\\([^\x0A\x0D])))+)*\s*\]\s*))))$/; | |
AjxEmailAddress.addrAngleQuotePat=/(\s*<'(((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*"(([^\\"])|(\\([^\x0A\x0D])))+"\s*))\@((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*\[(\s*(([^\[\]\\])|(\\([^\x0A\x0D])))+)*\s*\]\s*)))'>\s*)/; | |
AjxEmailAddress.addrPat=/(((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*"(([^\\"])|(\\([^\x0A\x0D])))+"\s*))\@((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*\[(\s*(([^\[\]\\])|(\\([^\x0A\x0D])))+)*\s*\]\s*)))/; | |
AjxEmailAddress.addrPat1=/(^|"|\s)(((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*"(([^\\"])|(\\([^\x0A\x0D])))+"\s*))\@((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*\[(\s*(([^\[\]\\])|(\\([^\x0A\x0D])))+)*\s*\]\s*)))/; | |
AjxEmailAddress.accountPat=/^([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)$/; | |
AjxEmailAddress.commentPat=/\((.*)\)/g; | |
AjxEmailAddress.phrasePat=/(((\s*[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\"\s]+\s*)|(\s*"(([^\\"])|(\\([^\x0A\x0D])))+"\s*))+)/; | |
AjxEmailAddress.boundAddrPat=/(\s*<?(((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*"(([^\\"])|(\\([^\x0A\x0D])))+"\s*))\@((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*\[(\s*(([^\[\]\\])|(\\([^\x0A\x0D])))+)*\s*\]\s*)))>?\s*)$/; | |
AjxEmailAddress.validateAddress=function(a){a=AjxStringUtil.trim(a); | |
return AjxEmailAddress._prelimCheck(a)&&AjxEmailAddress.addrOnlyPat.test(a) | |
}; | |
AjxEmailAddress.parse=function(g){var h,c; | |
var g=AjxStringUtil.trim(g); | |
var e=AjxEmailAddress._prelimCheck(g); | |
if(!(e&&g.match(AjxEmailAddress.addrPat))){return null | |
}var f=g.match(AjxEmailAddress.addrAngleQuotePat)||g.match(AjxEmailAddress.addrAnglePat); | |
if(f&&f.length){h=f[2]; | |
g=g.replace(AjxEmailAddress.addrAnglePat,"") | |
}else{f=g.match(AjxEmailAddress.addrPat1); | |
if(f&&f.length){if(f[1]==='"'){return null | |
}var a=g.match(AjxEmailAddress.addrPat); | |
h=a&&a.length&&a[0]?AjxStringUtil.trim(a[0]):f[0]; | |
g=g.replace(AjxEmailAddress.addrPat,"") | |
}}if(!h||!AjxEmailAddress.validateAddress(h)){return null | |
}for(var d=0; | |
d<AjxEmailAddress.customInvalidEmailPats.length; | |
d++){if(AjxEmailAddress.customInvalidEmailPats[d].test(h)){return null | |
}}if(g){c=AjxStringUtil.trim(g); | |
c=c.replace(/\\"/g,"""); | |
c=AjxStringUtil.trim(c,null,'"'); | |
c=c.replace(/"/g,'"') | |
}return new AjxEmailAddress(h,null,c) | |
}; | |
AjxEmailAddress.parseEmailString=function(d,m,n){var f=new AjxVector(); | |
var c=new AjxVector(); | |
var o=new AjxVector(); | |
var j=AjxEmailAddress.split(d); | |
for(var h=0; | |
h<j.length; | |
h++){var k=AjxStringUtil.trim(j[h]); | |
if(k){var l=AjxEmailAddress.parse(k); | |
if(!l&&!n){var p=k; | |
var g=p.match(AjxEmailAddress.addrAnglePat); | |
if(g&&g.length){var a=p.replace(AjxEmailAddress.addrAnglePat,""); | |
var e=['"',a,'" ',g[0]].join(""); | |
l=AjxEmailAddress.parse(e); | |
if(l){l.name=a | |
}}}if(l){l.type=m; | |
f.add(l); | |
o.add(l) | |
}else{c.add(k); | |
o.add(new AjxEmailAddress(k)) | |
}}}return{good:f,bad:c,all:o} | |
}; | |
AjxEmailAddress.getValidAddresses=function(c,d,a){return AjxEmailAddress.parseEmailString(c,d,a).good | |
}; | |
AjxEmailAddress.isValid=function(a){return AjxEmailAddress.parse(a)!=null | |
}; | |
AjxEmailAddress._prelimCheck=function(d){var a=d.indexOf("@"); | |
var c=d.lastIndexOf("."); | |
return((a!=-1)&&(c!=-1)&&(c>a)&&(c!=d.length-1)) | |
}; | |
AjxEmailAddress.split=function(q){q=AjxStringUtil.trim(q); | |
var p=[]; | |
var r=0,n=0; | |
var s="",g=""; | |
var h=false; | |
while(r<q.length){var d=q.charAt(r); | |
if((d=='"'||d=="(")&&s!="\\"){h=true; | |
g=d; | |
n=r; | |
r++; | |
while(h&&r<q.length){var d=q.charAt(r); | |
if(((g=='"'&&d=='"')||(g=="("&&d==")"))&&(s!="\\")){p.push({start:n,end:r}); | |
h=false | |
}r++; | |
s=d | |
}}else{r++ | |
}s=d | |
}if(p.length){AjxEmailAddress.IS_DELIM[" "]=false | |
}n=0; | |
var m=[]; | |
while(n<q.length){var c=q.substring(n,q.length); | |
r=0; | |
var f=c.length; | |
while((f==c.length)&&(r<c.length)){var d=c.charAt(r); | |
if(AjxEmailAddress.IS_DELIM[d]){var e=false; | |
if(d!="\n"){for(var k=0; | |
k<p.length; | |
k++){var l=p[k]; | |
var a=n+r; | |
e=(a>=l.start&&a<=l.end); | |
if(e){break | |
}}}if(!e){var j=true; | |
var o=c.substring(0,r); | |
if(d==","||d==" "){j=o.match(AjxEmailAddress.boundAddrPat) | |
}if(j){m.push(AjxStringUtil.trim(o)); | |
f=r; | |
n+=o.length+1 | |
}}d=q.charAt(n); | |
while((n<q.length)&&AjxEmailAddress.IS_DELIM[d]){n++; | |
d=q.charAt(n) | |
}r++ | |
}else{r++ | |
}}if(f==c.length){m.push(AjxStringUtil.trim(c)); | |
n+=c.length+1 | |
}}AjxEmailAddress.IS_DELIM[" "]=true; | |
return m | |
}; | |
AjxEmailAddress.prototype.toString=function(d,e){if(this.name){var c=this.name; | |
if(!d&&!e){c=c.replace(/\\+"/g,'"'); | |
c=c.replace(/"/g,'\\"') | |
}var a=(d||e)?[c]:['"',c,'"']; | |
if(this.address&&!d){a.push(" <",this.address,">") | |
}return a.join("") | |
}else{return this.address | |
}}; | |
AjxEmailAddress.prototype.getAddress=function(){return this.address | |
}; | |
AjxEmailAddress.prototype.setAddress=function(a){this.address=a | |
}; | |
AjxEmailAddress.prototype.getType=function(){return this.type | |
}; | |
AjxEmailAddress.prototype.setType=function(a){this.type=a | |
}; | |
AjxEmailAddress.prototype.getTypeAsString=function(){return AjxEmailAddress.TYPE_STRING[this.type] | |
}; | |
AjxEmailAddress.prototype.getName=function(){return this.name | |
}; | |
AjxEmailAddress.prototype.getDispName=function(){return this.dispName | |
}; | |
AjxEmailAddress.prototype.getText=function(){return this.getName()||this.getDispName()||this.getAddress() | |
}; | |
AjxEmailAddress.prototype.clone=function(){var a=new AjxEmailAddress(this.address,this.type,this.name,this.dispName,this.isGroup,this.canExpand); | |
a.icon=this.icon; | |
return a | |
}; | |
AjxEmailAddress.copy=function(a){var c=new AjxEmailAddress(a.address,a.type,a.name,a.dispName,a.isGroup,a.canExpand); | |
c.icon=a.icon; | |
return c | |
}; | |
AjxEmailAddress.prototype._setName=function(a){if(!a){return"" | |
}if(a&&a.charAt(0)=="'"&&a.charAt(a.length-1)=="'"){a=a.substring(1,a.length-1) | |
}return a | |
}; | |
AjxEmailAddress.sortCompareByAddress=function(e,d){var c=e.getAddress()||""; | |
var f=d.getAddress()||""; | |
if(c.toLowerCase()>f.toLowerCase()){return 1 | |
}if(c.toLowerCase()<f.toLowerCase()){return -1 | |
}return 0 | |
}; | |
AjxEmailAddress.dedup=function(d){var e=[],c={}; | |
if(d&&d.length){for(var a=0; | |
a<d.length; | |
a++){var f=d[a]; | |
if(!c[f.address]){e.push(f) | |
}c[f.address]=true | |
}}return e | |
} | |
}if(AjxPackage.define("ajax.util.AjxTimezone")){AjxTimezone=function(){}; | |
AjxTimezone.convertTimezone=function(c,a,f){if(a==f){return c | |
}var e=AjxTimezone.getOffset(f,c); | |
var d=AjxTimezone.getOffset(a,c); | |
return new Date(c.getTime()+(e-d)*60*1000) | |
}; | |
AjxTimezone.getTransition=function(e,d){var c=[d||new Date().getFullYear(),e.mon,1]; | |
if(e.mday){c[2]=e.mday | |
}else{if(e.wkday){var a=new Date(d,e.mon-1,1,e.hour,e.min,e.sec); | |
if(e.week==-1){var g=new Date(new Date(a.getTime()).setMonth(e.mon,0)); | |
var f=g.getDate(); | |
var i=g.getDay()+1; | |
var h=i>=e.wkday?i-e.wkday:7-e.wkday-i; | |
c[2]=f-h | |
}else{var i=a.getDay()+1; | |
var h=e.wkday==i?1:0; | |
c[2]=e.wkday+7*(e.week-h)-i+1 | |
}}}return c | |
}; | |
AjxTimezone.createMDayTransition=function(a,d){if(a instanceof Date){d=d!=null?d:a.getTimezoneOffset(); | |
a=[a.getFullYear(),a.getMonth()+1,a.getDate(),a.getHours(),a.getMinutes(),a.getSeconds()] | |
}var c={offset:d,trans:a}; | |
return AjxTimezone.addMDayTransition(c) | |
}; | |
AjxTimezone.addMDayTransition=function(c){var a=c.trans; | |
c.mon=a[1]; | |
c.mday=a[2]; | |
c.hour=a[3]; | |
c.min=a[4]; | |
c.sec=a[5]; | |
return c | |
}; | |
AjxTimezone.createWkDayTransition=function(a,d){if(a instanceof Date){d=d!=null?d:a.getTimezoneOffset(); | |
a=[a.getFullYear(),a.getMonth()+1,a.getDate(),a.getHours(),a.getMinutes(),a.getSeconds()] | |
}var c={offset:d,trans:a}; | |
return AjxTimezone.addWkDayTransition(c) | |
}; | |
AjxTimezone.addWkDayTransition=function(f){var d=f.trans; | |
var e=d[1]; | |
var i=d[2]; | |
var c=Math.floor((i-1)/7); | |
var a=new Date(d[0],d[1]-1,d[2],12,0,0); | |
var h=new Date(new Date(a.getTime()).setMonth(e-1,0)).getDate(); | |
var g=h-i<7; | |
f.mon=e; | |
f.week=g?-1:c+1; | |
f.wkday=a.getDay()+1; | |
f.hour=d[3]; | |
f.min=d[4]; | |
f.sec=d[5]; | |
return f | |
}; | |
AjxTimezone.createTransitionDate=function(e){var a=new Date(AjxTimezoneData.TRANSITION_YEAR,e.mon-1,1,12,0,0); | |
if(e.mday){a.setDate(e.mday) | |
}else{if(e.week==-1){a.setMonth(a.getMonth()+1,0); | |
for(var d=0; | |
d<7; | |
d++){if(a.getDay()+1==e.wkday){break | |
}a.setDate(a.getDate()-1) | |
}}else{for(var d=0; | |
d<7; | |
d++){if(a.getDay()+1==e.wkday){break | |
}a.setDate(a.getDate()+1) | |
}a.setDate(a.getDate()+7*(e.week-1)) | |
}}var c=[a.getFullYear(),a.getMonth()+1,a.getDate()]; | |
return c | |
}; | |
AjxTimezone.getZonePreferences=function(){if(AjxTimezone._PREF_ZONE_DISPLAY){var d=AjxTimezone._PREF_ZONE_DISPLAY.length; | |
var c=AjxTimezone.STANDARD_RULES.length+AjxTimezone.DAYLIGHT_RULES.length; | |
if(d!=c){AjxTimezone._PREF_ZONE_DISPLAY=null | |
}}if(!AjxTimezone._PREF_ZONE_DISPLAY){AjxTimezone._PREF_ZONE_DISPLAY=[]; | |
AjxTimezone.getAbbreviatedZoneChoices(); | |
for(var a=0; | |
a<AjxTimezone._ABBR_ZONE_OPTIONS.length; | |
a++){AjxTimezone._PREF_ZONE_DISPLAY.push(AjxTimezone._ABBR_ZONE_OPTIONS[a].displayValue) | |
}}return AjxTimezone._PREF_ZONE_DISPLAY | |
}; | |
AjxTimezone.getZonePreferencesOptions=function(){if(AjxTimezone._PREF_ZONE_OPTIONS){var d=AjxTimezone._PREF_ZONE_OPTIONS.length; | |
var c=AjxTimezone.STANDARD_RULES.length+AjxTimezone.DAYLIGHT_RULES.length; | |
if(d!=c){AjxTimezone._PREF_ZONE_OPTIONS=null | |
}}if(!AjxTimezone._PREF_ZONE_OPTIONS){AjxTimezone._PREF_ZONE_OPTIONS=[]; | |
AjxTimezone.getAbbreviatedZoneChoices(); | |
for(var a=0; | |
a<AjxTimezone._ABBR_ZONE_OPTIONS.length; | |
a++){AjxTimezone._PREF_ZONE_OPTIONS.push(AjxTimezone._ABBR_ZONE_OPTIONS[a].value) | |
}}return AjxTimezone._PREF_ZONE_OPTIONS | |
}; | |
AjxTimezone.getServerId=function(a){return AjxTimezone._CLIENT2SERVER[a]||a | |
}; | |
AjxTimezone.getClientId=function(a){return AjxTimezone._SERVER2CLIENT[a]||a | |
}; | |
AjxTimezone.getShortName=function(c){var d=AjxTimezone.getRule(c); | |
if(d&&d.shortName){return d.shortName | |
}var a=["GMT",AjxTimezone._SHORT_NAMES[c]].join(""); | |
if(d){d.shortName=a | |
}return a | |
}; | |
AjxTimezone.getMediumName=function(a){var d=AjxTimezone.getRule(a); | |
if(d&&d.mediumName){return d.mediumName | |
}var c=TzMsg[a]||["(",AjxTimezone.getShortName(a),") ",a].join(""); | |
if(d){d.mediumName=c | |
}return c | |
}; | |
AjxTimezone.getLongName=AjxTimezone.getMediumName; | |
AjxTimezone.addRule=function(d){var c=d.serverId; | |
var a=d.clientId; | |
AjxTimezone._CLIENT2SERVER[a]=c; | |
AjxTimezone._SERVER2CLIENT[c]=a; | |
AjxTimezone._SHORT_NAMES[a]=AjxTimezone._generateShortName(d.standard.offset); | |
AjxTimezone._CLIENT2RULE[a]=d; | |
var e=d.daylight?AjxTimezone.DAYLIGHT_RULES:AjxTimezone.STANDARD_RULES; | |
e.push(d) | |
}; | |
AjxTimezone.getRule=function(a,e){var m=AjxTimezone._CLIENT2RULE[a]; | |
if(!m){a=AjxTimezone._SERVER2CLIENT[a]; | |
m=AjxTimezone._CLIENT2RULE[a] | |
}if(!m&&e){var l=["standard","daylight"]; | |
var n=e.daylight?AjxTimezone.DAYLIGHT_RULES:AjxTimezone.STANDARD_RULES; | |
for(var g=0; | |
g<n.length; | |
g++){m=n[g]; | |
var o=true; | |
for(var f=0; | |
f<l.length; | |
f++){var c=l[f]; | |
var h=m[c]; | |
if(!h){continue | |
}var k=false; | |
for(var d in e[c]){if(e[c][d]!=h[d]){o=false; | |
k=true; | |
break | |
}}if(k){break | |
}}if(o){return m | |
}}return null | |
}return m | |
}; | |
AjxTimezone.getOffset=function(a,f){var n=AjxTimezone.getRule(a||AjxTimezone.DEFAULT); | |
if(n&&n.daylight){var l=f.getFullYear(); | |
var h=n.standard,c=n.daylight; | |
var k=AjxTimezone.getTransition(h,l); | |
var p=AjxTimezone.getTransition(c,l); | |
var j=f.getMonth()+1,m=f.getDate(); | |
var g=k[1],o=k[2]; | |
var i=p[1],e=p[2]; | |
var d=false; | |
if(i<g){d=j>i&&j<g; | |
d=d||(j==i&&m>=e); | |
d=d||(j==g&&m<o) | |
}else{d=j<g||j>i; | |
d=d||(j==i&&m>=e); | |
d=d||(j==g&&m<o) | |
}return d?c.offset:h.offset | |
}return n?n.standard.offset:-(new Date().getTimezoneOffset()) | |
}; | |
AjxTimezone.guessMachineTimezone=function(){return AjxTimezone._guessMachineTimezone().clientId | |
}; | |
AjxTimezone.getAbbreviatedZoneChoices=function(){if(AjxTimezone._ABBR_ZONE_OPTIONS){var f=AjxTimezone._ABBR_ZONE_OPTIONS.length; | |
var e=AjxTimezone.STANDARD_RULES.length+AjxTimezone.DAYLIGHT_RULES.length; | |
if(f!=e){AjxTimezone._ABBR_ZONE_OPTIONS=null | |
}}if(!AjxTimezone._ABBR_ZONE_OPTIONS){AjxTimezone._ABBR_ZONE_OPTIONS=[]; | |
for(var a in AjxTimezone._CLIENT2SERVER){var g=AjxTimezone._CLIENT2RULE[a]; | |
var c=g.serverId; | |
var d={displayValue:AjxTimezone.getMediumName(a),value:c,standard:g.standard,serverId:c,clientId:a}; | |
AjxTimezone._ABBR_ZONE_OPTIONS.push(d) | |
}AjxTimezone._ABBR_ZONE_OPTIONS.sort(AjxTimezone._BY_OFFSET) | |
}return AjxTimezone._ABBR_ZONE_OPTIONS | |
}; | |
AjxTimezone.getMatchingTimezoneChoices=function(){if(AjxTimezone._MATCHING_ZONE_OPTIONS){var g=AjxTimezone._MATCHING_ZONE_OPTIONS.length; | |
var f=AjxTimezone.STANDARD_RULES.length+AjxTimezone.DAYLIGHT_RULES.length; | |
if(g!=f){AjxTimezone._MATCHING_ZONE_OPTIONS=null | |
}}if(!AjxTimezone._MATCHING_ZONE_OPTIONS){AjxTimezone._MATCHING_ZONE_OPTIONS=[]; | |
for(var d in AjxTimezone.MATCHING_RULES){var h=AjxTimezone.MATCHING_RULES[d]; | |
var a=h.clientId; | |
var c=h.serverId; | |
if(a==AjxTimezone.AUTO_DETECTED){continue | |
}var e={displayValue:AjxTimezone.getMediumName(a),value:c,standard:h.standard,serverId:c,clientId:a}; | |
AjxTimezone._MATCHING_ZONE_OPTIONS.push(e) | |
}AjxTimezone._MATCHING_ZONE_OPTIONS.sort(AjxTimezone._BY_OFFSET) | |
}return AjxTimezone._MATCHING_ZONE_OPTIONS | |
}; | |
AjxTimezone._BY_OFFSET=function(d,c){var f=d.standard.offset-c.standard.offset; | |
if(f==0){var a=d.serverId; | |
var e=c.serverId; | |
if(a<e){f=-1 | |
}else{if(a>e){f=1 | |
}}}return f | |
}; | |
AjxTimezone.GMT="Europe/London"; | |
AjxTimezone.GMT_NO_DST="UTC"; | |
AjxTimezone.AUTO_DETECTED="Auto-Detected"; | |
AjxTimezone._CLIENT2SERVER={}; | |
AjxTimezone._SERVER2CLIENT={}; | |
AjxTimezone._SHORT_NAMES={}; | |
AjxTimezone._CLIENT2RULE={}; | |
AjxTimezone.STANDARD_RULES=[]; | |
AjxTimezone.DAYLIGHT_RULES=[]; | |
(function(){for(var a=0; | |
a<AjxTimezoneData.TIMEZONE_RULES.length; | |
a++){var c=AjxTimezoneData.TIMEZONE_RULES[a]; | |
var d=c.daylight?AjxTimezone.DAYLIGHT_RULES:AjxTimezone.STANDARD_RULES; | |
d.push(c) | |
}})(); | |
AjxTimezone._guessMachineTimezone=function(p){var n=new Date(AjxTimezoneData.TRANSITION_YEAR,11,1,0,0,0); | |
var u=new Date(AjxTimezoneData.TRANSITION_YEAR,5,1,0,0,0); | |
var c=-n.getTimezoneOffset(); | |
var r=-u.getTimezoneOffset(); | |
AjxTimezone.MATCHING_RULES=[]; | |
AjxTimezone.TIMEZONE_CONFLICT=false; | |
var l=[]; | |
var g={}; | |
var h=[]; | |
var q=false; | |
if(r==c){var o=AjxTimezone.STANDARD_RULES; | |
for(var s=0; | |
s<o.length; | |
++s){var j=o[s]; | |
if(j.standard.offset==r){if(!g[j.serverId]){l.push(j); | |
g[j.serverId]=true | |
}AjxTimezone.MATCHING_RULES.push(j) | |
}}}else{var o=AjxTimezone.DAYLIGHT_RULES; | |
var x=Math.max(c,r); | |
var v=Math.min(c,r); | |
var e=new Date(); | |
var t=-e.getTimezoneOffset(); | |
for(var s=0; | |
s<o.length; | |
++s){var j=o[s]; | |
if(j.standard.offset==v&&j.daylight.offset==x){var k=j.standard.trans; | |
var m=j.daylight.trans; | |
var f=new Date(k[0],k[1]-1,k[2]-1); | |
var d=new Date(k[0],k[1]-1,k[2]+2); | |
var a=new Date(m[0],m[1]-1,m[2]-1); | |
var w=new Date(m[0],m[1]-1,m[2]+2); | |
if(-d.getTimezoneOffset()==v&&-w.getTimezoneOffset()==x&&-f.getTimezoneOffset()==x&&-a.getTimezoneOffset()==v){if(!g[j.serverId]){l.push(j); | |
g[j.serverId]=true | |
}q=true | |
}}if(j.standard.offset==t||j.daylight.offset==t){AjxTimezone.MATCHING_RULES.push(j) | |
}}}if((l.length>0)&&p!=null){var o=l; | |
for(var s in o){if(o[s].serverId==p){return o[s] | |
}}}if(l.length>0){if(l.length>1){l.sort(AjxTimezone.__BY_SCORE); | |
if(l[0].score!=l[1].score){l.length=1 | |
}}AjxTimezone.TIMEZONE_CONFLICT=(l.length>1); | |
return l[0] | |
}if((AjxTimezone.MATCHING_RULES.length>0)&&p!=null){var o=AjxTimezone.MATCHING_RULES; | |
for(var s in o){if(o[s].serverId==p){return o[s] | |
}}}return AjxTimezone._generateDefaultRule() | |
}; | |
AjxTimezone.__BY_SCORE=function(d,c){return c.score-d.score | |
}; | |
AjxTimezone._generateDefaultRule=function(){var k=0; | |
var d=1; | |
var e=2; | |
var h=3; | |
var f=4; | |
function l(n,m,t,u){var p=m.getTime(); | |
var s=new Date(); | |
s.setTime(n.getTime()); | |
var r=new Date(); | |
r.setTime(s.getTime()); | |
var v=n.getTimezoneOffset()*-1; | |
if(!u){u={clientId:AjxTimezone.AUTO_DETECTED,autoDetected:true} | |
}while(s.getTime()<=p){if(t==k){s.setUTCMonth(s.getUTCMonth()+1) | |
}else{if(t==d){s.setUTCDate(s.getUTCDate()+1) | |
}else{if(t==e){s.setUTCHours(s.getUTCHours()+1) | |
}else{if(t==h){s.setUTCMinutes(s.getUTCMinutes()+1) | |
}else{if(t==f){s.setUTCSeconds(s.getUTCSeconds()+1) | |
}else{return u | |
}}}}}var o=s.getTimezoneOffset()*-1; | |
if(o!=v){if(t<f){u=l(r,s,t+1,u) | |
}else{var w=new Date(); | |
w.setUTCFullYear(r.getFullYear(),r.getMonth(),r.getDate()); | |
w.setUTCHours(r.getHours(),r.getMinutes(),r.getSeconds()+1); | |
var q=u[v<o?"daylight":"standard"]={offset:o,trans:[w.getUTCFullYear(),w.getUTCMonth()+1,w.getUTCDate(),w.getUTCHours(),w.getUTCMinutes(),w.getUTCSeconds()]}; | |
AjxTimezone.addWkDayTransition(q); | |
return u | |
}}r.setTime(s.getTime()); | |
v=o | |
}return u | |
}var c=new Date(); | |
var a=new Date(); | |
var i=c.getFullYear(); | |
c.setUTCFullYear(i,c.getMonth(),c.getDate()-1); | |
c.setUTCHours(0,0,0,0); | |
a.setTime(c.getTime()); | |
a.setUTCFullYear(i+1,c.getMonth(),c.getDate()+1); | |
var j=l(c,a,k); | |
if(!j.daylight||!j.standard){j.standard={offset:c.getTimezoneOffset()*-1}; | |
delete j.daylight | |
}j.serverId=["(GMT",AjxTimezone._generateShortName(j.standard.offset,true),") ",AjxTimezone.AUTO_DETECTED].join(""); | |
if(j.daylight&&j.daylight.offset<j.standard.offset){var g=j.daylight; | |
j.daylight=j.standard; | |
j.standard=g | |
}return j | |
}; | |
AjxTimezone._generateShortName=function(g,f){if(g==0){return"" | |
}var c=g<0?"-":"+"; | |
var d=Math.abs(g); | |
var a=Math.floor(d/60); | |
var e=d%60; | |
a=a<10?"0"+a:a; | |
e=e<10?"0"+e:e; | |
return[c,a,f?".":"",e].join("") | |
}; | |
AjxTimezone.DEFAULT_RULE=AjxTimezone._guessMachineTimezone(); | |
(function(){AjxTimezoneData.TIMEZONE_RULES.sort(AjxTimezone._BY_OFFSET); | |
for(var a=0; | |
a<AjxTimezoneData.TIMEZONE_RULES.length; | |
a++){var c=AjxTimezoneData.TIMEZONE_RULES[a]; | |
AjxTimezone.addRule(c) | |
}})(); | |
AjxTimezone.DEFAULT=AjxTimezone.getClientId(AjxTimezone.DEFAULT_RULE.serverId) | |
}if(AjxPackage.define("ajax.dwt.core.Dwt")){Dwt=function(){}; | |
Dwt.STATIC_STYLE="static"; | |
Dwt.ABSOLUTE_STYLE="absolute"; | |
Dwt.RELATIVE_STYLE="relative"; | |
Dwt.FIXED_STYLE="fixed"; | |
Dwt.NO_REPEAT="no-repeat"; | |
Dwt.REPEAT="repeat"; | |
Dwt.REPEAT_X="repeat-x"; | |
Dwt.REPEAT_Y="repeat-y"; | |
Dwt.DISPLAY_INLINE="inline"; | |
Dwt.DISPLAY_BLOCK="block"; | |
Dwt.DISPLAY_NONE="none"; | |
Dwt.DISPLAY_TABLE_ROW="table-row"; | |
Dwt.DISPLAY_TABLE_CELL="table-cell"; | |
Dwt.CLIP=1; | |
Dwt.VISIBLE=2; | |
Dwt.SCROLL=3; | |
Dwt.FIXED_SCROLL=4; | |
Dwt.SCROLL_Y=5; | |
Dwt.SCROLL_X=6; | |
Dwt.Z_HIDDEN=100; | |
Dwt.Z_CURTAIN=200; | |
Dwt.Z_VIEW=300; | |
Dwt.Z_MENU=500; | |
Dwt.Z_VEIL=600; | |
Dwt.Z_DIALOG=700; | |
Dwt.Z_DIALOG_MENU=750; | |
Dwt.Z_TOOLTIP=775; | |
Dwt.Z_DND=800; | |
Dwt.Z_BUSY=900; | |
Dwt.Z_TOAST=950; | |
Dwt.Z_SPLASH=1000; | |
Dwt.DEFAULT=-123456789; | |
Dwt.CLEAR=-20000; | |
Dwt.LOC_NOWHERE=-10000; | |
Dwt.DND_DROP_NONE=0; | |
Dwt.DND_DROP_COPY=1; | |
Dwt.DND_DROP_MOVE=2; | |
Dwt.SCROLLBAR_WIDTH=22; | |
Dwt.HTML="text/html"; | |
Dwt.TEXT="text/plain"; | |
Dwt.KEY_OBJECT="_object_"; | |
Dwt.KEY_ID="_id_"; | |
Dwt._Z_INC=1; | |
Dwt.__nextId={}; | |
Dwt.getNextId=function(a){a=a||"DWT"; | |
if(!Dwt.__nextId[a]){Dwt.__nextId[a]=1 | |
}return a+Dwt.__nextId[a]++ | |
}; | |
Dwt.getId=function(a,c){return a?a.id||(a.id=Dwt.getNextId(c)):null | |
}; | |
Dwt.associateElementWithObject=function(d,a,c){d[c||"dwtObj"]=a.__internalId=AjxCore.assignId(a) | |
}; | |
Dwt.disassociateElementFromObject=function(d,a,c){if(d){d.removeAttribute(c||"dwtObj") | |
}if(a.__internalId){AjxCore.unassignId(a.__internalId) | |
}}; | |
Dwt.getObjectFromElement=function(c,a){return AjxCore.objectWithId(c[a||"dwtObj"]) | |
}; | |
Dwt.getElement=function(a){return(typeof(a)=="string")?document.getElementById(a):a | |
}; | |
Dwt.findAncestor=function(d,c){var a=Dwt.getAttr(d,c); | |
while(d&&(a==null||a=="")){d=d.parentNode; | |
a=Dwt.getAttr(d,c) | |
}return d | |
}; | |
Dwt.isAncestor=function(c,a){if(c==a){return true | |
}var d=a; | |
while(d){d=d.parentNode; | |
if(d==c){return true | |
}}return false | |
}; | |
Dwt.setHandler=function(d,c,a){if(!(d=Dwt.getElement(d))){return | |
}if(c==DwtEvent.ONMOUSEWHEEL&&AjxEnv.isGeckoBased){Dwt.clearHandler(d,c) | |
}d[c]=a; | |
if(c==DwtEvent.ONMOUSEWHEEL&&AjxEnv.isGeckoBased){d.addEventListener("DOMMouseScroll",a,true) | |
}}; | |
Dwt.clearHandler=function(d,c){if(!(d=Dwt.getElement(d))){return | |
}if(c==DwtEvent.ONMOUSEWHEEL&&AjxEnv.isGeckoBased){if(d[c]){var a=d[c]; | |
d.removeEventListener("DOMMouseScroll",a,true) | |
}}d[c]=null | |
}; | |
Dwt.getBackgroundRepeat=function(a){if(!(a=Dwt.getElement(a))){return | |
}return DwtCssStyle.getProperty(a,"background-repeat") | |
}; | |
Dwt.setBackgroundRepeat=function(c,a){if(!(c=Dwt.getElement(c))){return | |
}c.style.backgroundRepeat=a | |
}; | |
Dwt.getBounds=function(f,d){if(!(f=Dwt.getElement(f))){return null | |
}var e=DwtPoint.tmp; | |
Dwt.getLocation(f,e); | |
var c=e.x; | |
var a=e.y; | |
Dwt.getSize(f,e); | |
if(!d){return new DwtRectangle(c,a,e.x,e.y) | |
}else{d.set(c,a,e.x,e.y); | |
return d | |
}}; | |
Dwt.setBounds=function(e,c,f,d,a){if(!(e=Dwt.getElement(e))){return | |
}Dwt.setLocation(e,c,f); | |
Dwt.setSize(e,d,a) | |
}; | |
Dwt.getCursor=function(a){if(!(a=Dwt.getElement(a))){return"" | |
}return DwtCssStyle.getProperty(a,"cursor") | |
}; | |
Dwt.setCursor=function(c,a){if(!(c=Dwt.getElement(c))){return | |
}c.style.cursor=a | |
}; | |
Dwt.getLocation=function(c,a){if(!(c=Dwt.getElement(c))){return null | |
}a=a||new DwtPoint(0,0); | |
if(c.style.position==Dwt.ABSOLUTE_STYLE){a.set(parseInt(DwtCssStyle.getProperty(c,"left")),parseInt(DwtCssStyle.getProperty(c,"top"))); | |
return a | |
}return Dwt.toWindow(c,0,0,null,null,a) | |
}; | |
Dwt.setLocation=function(d,c,e){if(!(d=Dwt.getElement(d))){return | |
}var a=DwtCssStyle.getProperty(d,"position"); | |
if(a!=Dwt.ABSOLUTE_STYLE&&a!=Dwt.RELATIVE_STYLE&&a!=Dwt.FIXED_STYLE){throw new DwtException("Static widgets may not be positioned",DwtException.INVALID_OP,"Dwt.setLocation") | |
}if(c=Dwt.__checkPxVal(c)){d.style.left=c | |
}if(e=Dwt.__checkPxVal(e)){d.style.top=e | |
}}; | |
Dwt.getPosition=function(a){if(!(a=Dwt.getElement(a))){return | |
}return a.style.position | |
}; | |
Dwt.setPosition=function(c,a){if(!(c=Dwt.getElement(c))){return | |
}c.style.position=a | |
}; | |
Dwt.getScrollStyle=function(d){if(!(d=Dwt.getElement(d))){return"" | |
}var e=DwtCssStyle.getProperty(d,"overflow"); | |
if(e=="hidden"){return Dwt.CLIP | |
}if(e=="auto"){return Dwt.SCROLL | |
}if(e=="scroll"){return Dwt.FIXED_SCROLL | |
}if(e==""){var c=DwtCssStyle.getProperty(d,"overflowX"); | |
var a=DwtCssStyle.getProperty(d,"overflowY"); | |
if(c=="scroll"){return Dwt.SCROLL_X | |
}if(a=="scroll"){return Dwt.SCROLL_Y | |
}}return Dwt.VISIBLE | |
}; | |
Dwt.setScrollStyle=function(c,a){if(!(c=Dwt.getElement(c))){return | |
}if(a==Dwt.CLIP){c.style.overflow="hidden" | |
}else{if(a==Dwt.SCROLL){c.style.overflow="auto" | |
}else{if(a==Dwt.FIXED_SCROLL){c.style.overflow="scroll" | |
}else{if(a==Dwt.SCROLL_Y){c.style.overflowX="hidden"; | |
c.style.overflowY="auto" | |
}else{if(a==Dwt.SCROLL_X){c.style.overflowY="hidden"; | |
c.style.overflowX="auto" | |
}else{c.style.overflow="visible" | |
}}}}}}; | |
Dwt.getSize=function(e,a,c){if(!(e=Dwt.getElement(e))){return | |
}var d; | |
if(!a){d=new DwtPoint(0,0) | |
}else{d=a; | |
d.set(0,0) | |
}if(!e){return d | |
}if(c){if(e.style.width){d.x=parseInt(e.style.width) | |
}if(e.style.height){d.y=parseInt(e.style.height) | |
}return d | |
}d.x=e.offsetWidth; | |
if(d.x!=null){d.y=e.offsetHeight | |
}else{if(e.clip&&e.clip.width!=null){d.x=parseInt(e.clip.width); | |
d.y=parseInt(e.clip.height) | |
}else{if(e.style&&e.style.pixelWidth!=null){d.x=parseInt(e.style.pixelWidth); | |
d.y=parseInt(e.style.pixelHeight) | |
}}}return d | |
}; | |
Dwt.getOuterSize=function(f,a){var e=Dwt.getSize(f,a); | |
if(e&&Dwt.getVisible(f)){var d=Dwt.getMargins(f); | |
var c=Dwt.getInsets(f); | |
e.x+=d.left+d.right+c.left+c.right; | |
e.y+=d.top+d.bottom+c.top+c.bottom | |
}return e | |
}; | |
Dwt.setSize=function(d,c,a){if(!(d=Dwt.getElement(d))){return | |
}if(!d.style){return | |
}if(c==Dwt.CLEAR){d.style.width=null | |
}else{if(c=Dwt.__checkPxVal(c,true)){d.style.width=c | |
}}if(a==Dwt.CLEAR){d.style.height=null | |
}else{if(a=Dwt.__checkPxVal(a,true)){d.style.height=a | |
}}}; | |
Dwt.getHtmlExtent=function(a){var c=AjxStringUtil.calcDIV(); | |
c.innerHTML=a; | |
return Dwt.getSize(c) | |
}; | |
Dwt.toDocumentFragment=function(d,g){var f=AjxStringUtil.calcDIV(); | |
f.innerHTML=d; | |
var c=document.createDocumentFragment(); | |
var a=g&&document.getElementById(g); | |
if(a){c.appendChild(a) | |
}else{for(var e=f.firstChild; | |
e; | |
e=f.firstChild){c.appendChild(e) | |
}}return c | |
}; | |
Dwt.getAttr=function(d,a,c){if(!c){return d&&d.tagName?(d.getAttribute(a)||d[a]):null | |
}else{while(d){if(Dwt.getAttr(d,a)!=null){return d | |
}d=d.parentNode | |
}return null | |
}}; | |
Dwt.getVisible=function(c){if(!(c=Dwt.getElement(c))){return | |
}var a=DwtCssStyle.getProperty(c,"display"); | |
return(a!=Dwt.DISPLAY_NONE) | |
}; | |
Dwt.setVisible=function(c,d){if(!(c=Dwt.getElement(c))){return | |
}if(d){if(c.nodeName.match(/tr/i)){c.style.display=Dwt.DISPLAY_TABLE_ROW | |
}else{if(c.nodeName.match(/td|th/i)){c.style.display=Dwt.DISPLAY_TABLE_CELL | |
}else{c.style.display=c.getAttribute("x-display")||Dwt.DISPLAY_BLOCK | |
}}}else{var a=DwtCssStyle.getComputedStyleObject(c).display; | |
if(a!="none"){c.setAttribute("x-display",a) | |
}c.style.display=Dwt.DISPLAY_NONE | |
}}; | |
Dwt.getVisibility=function(c){if(!(c=Dwt.getElement(c))){return | |
}var a=DwtCssStyle.getProperty(c,"visibility"); | |
return(a=="visible") | |
}; | |
Dwt.setVisibility=function(a,c){if(!(a=Dwt.getElement(a))){return | |
}a.style.visibility=c?"visible":"hidden" | |
}; | |
Dwt.__MSIE_OPACITY_RE=/alpha\(opacity=(\d+)\)/; | |
Dwt.getOpacity=function(a){if(!(a=Dwt.getElement(a))){return | |
}return Number(a.style.opacity||1)*100 | |
}; | |
Dwt.setOpacity=function(c,a){if(!(c=Dwt.getElement(c))){return | |
}c.style.opacity=a/100 | |
}; | |
Dwt.getZIndex=function(c,a){if(!(c=Dwt.getElement(c))){return | |
}if(a){while(c.style.zIndex===""&&c.parentNode){c=c.parentNode | |
}return c.style.zIndex | |
}return DwtCssStyle.getProperty(c,"z-index") | |
}; | |
Dwt.setZIndex=function(c,a){if(!(c=Dwt.getElement(c))){return | |
}c.style.zIndex=a; | |
if(a<Dwt.Z_VIEW){c.setAttribute("aria-hidden",true) | |
}else{c.removeAttribute("aria-hidden") | |
}}; | |
Dwt.getDisplay=function(a){DwtCssStyle.getProperty(a,"display") | |
}; | |
Dwt.setDisplay=function(c,a){if(!(c=Dwt.getElement(c))){return | |
}c.style.display=a | |
}; | |
Dwt.getWindowSize=function(a){var c=(!a)?new DwtPoint(0,0):a; | |
if(window.innerWidth){c.x=window.innerWidth; | |
c.y=window.innerHeight | |
}else{if(document.body&&document.body.clientWidth){c.x=document.body.clientWidth; | |
c.y=document.body.clientHeight | |
}}return c | |
}; | |
Dwt.toWindow=function(e,h,g,k,i,j){var c; | |
if(!j){c=new DwtPoint(h,g) | |
}else{c=j; | |
c.set(h,g) | |
}e=Dwt.getElement(e); | |
var a=e; | |
while(a&&a!=k){c.x+=a.offsetLeft-a.scrollLeft; | |
c.y+=a.offsetTop; | |
if(!i){var d=AjxEnv.isOpera?a.pageYOffset:a.scrollTop; | |
if(d){c.y-=d | |
}var f=a.parentNode; | |
while(f!=a.offsetParent&&f!=k){d=AjxEnv.isOpera?f.pageYOffset:f.scrollTop; | |
if(d){c.y-=d | |
}f=f.parentNode | |
}}a=a.offsetParent | |
}return c | |
}; | |
Dwt.getInsets=function(e){if(!(e=Dwt.getElement(e))){return | |
}var c=DwtCssStyle.getComputedStyleObject(e); | |
var d=parseInt(c.borderLeftWidth)||0; | |
var i=parseInt(c.borderTopWidth)||0; | |
var j=parseInt(c.borderRightWidth)||0; | |
var g=parseInt(c.borderBottomWidth)||0; | |
var f=parseInt(c.paddingLeft)||0; | |
var k=parseInt(c.paddingTop)||0; | |
var a=parseInt(c.paddingRight)||0; | |
var h=parseInt(c.paddingBottom)||0; | |
return{left:d+f,top:i+k,right:j+a,bottom:g+h} | |
}; | |
Dwt.insetBounds=function(c,a){if(!c){return null | |
}c.x+=a.left; | |
c.y+=a.top; | |
c.width-=a.left+a.right; | |
c.height-=a.top+a.bottom; | |
return c | |
}; | |
Dwt.getInsetBounds=function(d){if(!(d=Dwt.getElement(d))){return | |
}var c=Dwt.getBounds(d); | |
var a=Dwt.getInsets(d); | |
return Dwt.insetBounds(c,a) | |
}; | |
Dwt.getMargins=function(c){if(!(c=Dwt.getElement(c))){return | |
}var a=DwtCssStyle.getComputedStyleObject(c); | |
return{left:parseInt(a.marginLeft)||0,top:parseInt(a.marginTop)||0,right:parseInt(a.marginRight)||0,bottom:parseInt(a.marginBottom)||0} | |
}; | |
Dwt.getAncestors=function(d,a,c){var e=[]; | |
if(!a){a=document.documentElement | |
}if(c){e.push(d) | |
}while(d&&d!=a){e.push(d.parentNode); | |
d=d.parentNode | |
}if(e[e.length-1]!=a){return null | |
}return e | |
}; | |
Dwt.setStatus=function(a){window.status=a | |
}; | |
Dwt.getTitle=function(){return window.document.title | |
}; | |
Dwt.setTitle=function(a){window.document.title=a | |
}; | |
Dwt.getIframeDoc=function(a){if(a){return a.contentDocument | |
}return null | |
}; | |
Dwt.getIframeWindow=function(a){return a.contentWindow | |
}; | |
Dwt.parseHtmlFragment=function(e,d){if(!Dwt._div){Dwt._div=document.createElement("div") | |
}if(d){e="<table style='table-layout:fixed'>"+e+"</table>" | |
}Dwt._div.innerHTML=e; | |
if(d){var a=document.createDocumentFragment(); | |
var f=Dwt._div.firstChild.rows; | |
for(var c=f.length-1; | |
c>=0; | |
c--){a.appendChild(f[0]) | |
}return a.childNodes.length>1?a:a.firstChild | |
}return Dwt._div.firstChild | |
}; | |
Dwt.contains=function(d,c){var e=false; | |
if(d.compareDocumentPosition){var a=d.compareDocumentPosition(c); | |
if((a==(document.DOCUMENT_POSITION_CONTAINED_BY|document.DOCUMENT_POSITION_FOLLOWING))){e=true | |
}}else{if(d.contains){e=d.contains(c) | |
}}return e | |
}; | |
Dwt.removeChildren=function(a){while(a.hasChildNodes()){a.removeChild(a.firstChild) | |
}}; | |
Dwt.getCellIndex=function(c){if(AjxEnv.isOpera){if(c.tagName&&c.tagName.toLowerCase()=="td"){var d=c.parentNode.cells; | |
var a=d.length; | |
for(var e=0; | |
e<a; | |
e++){if(d[e]==c){return e | |
}}}}else{return c.cellIndex | |
}return -1 | |
}; | |
Dwt.delClass=function(d,a,e){if(d==null){return | |
}if(!a&&!e){return | |
}if(typeof a=="string"&&a.length){a=Dwt._DELCLASS_CACHE[a]||(Dwt._DELCLASS_CACHE[a]=new RegExp("\\b"+a+"\\b","ig")) | |
}var c=d.className||""; | |
c=c.replace(a," "); | |
c=AjxStringUtil.trim(c); | |
d.className=e?c+" "+e:c | |
}; | |
Dwt._DELCLASS_CACHE={}; | |
Dwt.addClass=function(a,d){Dwt.delClass(a,d,d) | |
}; | |
Dwt.condClass=function(e,f,d,c){if(!!f){if(c){Dwt.delClass(e,c) | |
}Dwt.addClass(e,d) | |
}else{Dwt.delClass(e,d); | |
if(c){Dwt.addClass(e,c) | |
}}}; | |
Dwt.hasClass=function(c,a){if(!c||!a){return false | |
}return c.className.match(new RegExp("\\b"+a+"\\b")) | |
}; | |
Dwt.setSelectionRange=function(d,e,a){if(d.setSelectionRange){d.focus(); | |
d.setSelectionRange(e,a) | |
}else{if(d.createTextRange){var c=d.createTextRange(); | |
c.collapse(true); | |
c.moveStart("character",e); | |
c.moveEnd("character",a-e); | |
c.select() | |
}else{if(d.select){d.select() | |
}}}}; | |
Dwt.getSelectionStart=function(e){if(AjxUtil.isSpecified(e.selectionStart)){return e.selectionStart | |
}else{if(document.selection){var d=document.selection.createRange(); | |
var c=d.compareEndPoints("StartToEnd",d)==0; | |
if(!c){d.collapse(true) | |
}var a=d.getBookmark(); | |
var f=e.createTextRange().getBookmark().charCodeAt(2); | |
return Math.max(a.charCodeAt(2)-f,0) | |
}}return e.value.length | |
}; | |
Dwt.getSelectionEnd=function(e){if(AjxUtil.isSpecified(e.selectionEnd)){return e.selectionEnd | |
}else{if(document.selection){var d=document.selection.createRange(); | |
var c=d.compareEndPoints("StartToEnd",d)==0; | |
if(!c){d.collapse(false) | |
}var a=d.getBookmark(); | |
var f=e.createTextRange().getBookmark().charCodeAt(2); | |
return Math.max(a.charCodeAt(2)-f,0) | |
}}return e.value.length | |
}; | |
Dwt.setSelectionText=function(c,f){var g=Dwt.getSelectionStart(c); | |
var a=Dwt.getSelectionEnd(c); | |
var e=c.value; | |
var d=[e.substr(0,g),f,e.substr(a)].join(""); | |
if(typeof c.setValue=="function"){c.setValue(d) | |
}else{c.value=d | |
}Dwt.setSelectionRange(c,g,g+f.length) | |
}; | |
Dwt.moveCursorToEnd=function(a){Dwt.setSelectionRange(a,a.value.length,a.value.length) | |
}; | |
Dwt.instanceOf=function(c,a){if(typeof c=="string"){return window[c]&&(c==a||window[c].prototype instanceof window[a]) | |
}return(window[a]&&c instanceof window[a]) | |
}; | |
Dwt.getParams=function(a,e){if(!a||a.length===0||(a.length===1&&!a[0])){return{} | |
}if(a.length>1||!AjxUtil.isHash(a[0]._object_||a[0])){var d={}; | |
for(var c=0; | |
c<a.length; | |
c++){d[e[c]]=a[c] | |
}return d | |
}if(a.length===1){return a[0] | |
}return{} | |
}; | |
Dwt.__REM_RE=/^(-?[0-9]+(?:\.[0-9]*)?)rem$/; | |
Dwt.__checkPxVal=function(c,a){if(c==Dwt.DEFAULT){return false | |
}if(isNaN(parseInt(c))){return false | |
}if(a&&c<0&&c!=Dwt.LOC_NOWHERE){c=0 | |
}if(typeof(c)=="number"){c=c+"px" | |
}if(!AjxEnv.supportsCSS3RemUnits&&Dwt.__REM_RE.test(c)){c=DwtCssStyle.asPixelCount(c)+"px" | |
}return c | |
}; | |
Dwt.byId=function(e,c){if(!c){return(typeof e=="string"?document.getElementById(e):e) | |
}if(c==e||c.id==e){return c | |
}for(var a=0; | |
a<c.childNodes.length; | |
a++){if(c.childNodes[a].nodeType==1){var d=Dwt.byId(e,c.childNodes[a]); | |
if(d){return d | |
}}}return null | |
}; | |
Dwt.byTag=function(c,a){if(!a){a=document | |
}return AjxUtil.toArray(a.getElementsByTagName(c)) | |
}; | |
Dwt.byClassName=function(d,c){if(!c){c=document | |
}var a; | |
if(c.getElementsByClassName){a=c.getElementsByClassName(d) | |
}else{a=c.querySelectorAll("."+d) | |
}return AjxUtil.toArray(a) | |
}; | |
Dwt.show=function(c){var a=Dwt.byId(c); | |
if(a){Dwt.setVisible(a,true) | |
}}; | |
Dwt.hide=function(c){var a=Dwt.byId(c); | |
if(a){Dwt.setVisible(a,false) | |
}}; | |
Dwt.setText=function(a,c){a.appendChild(document.createTextNode(c)) | |
}; | |
Dwt.populateText=function(){if(arguments.length==0){return | |
}var d,a=0,c=arguments.length; | |
while(a<c){d=document.getElementById(arguments[a]); | |
if(d){Dwt.setText(d,arguments[a+1]) | |
}a+=2 | |
}}; | |
Dwt.setInnerHtml=function(c,a){c.innerHTML=a | |
}; | |
Dwt.setFavIcon=function(h){var a=null; | |
if(Dwt._favIconId){a=document.getElementById(Dwt._favIconId) | |
}else{var j=document.getElementsByTagName("head")[0]; | |
var c=j.getElementsByTagName("link"); | |
for(var e=0; | |
e<c.length; | |
e++){var g=c[e]; | |
if(g.rel.toUpperCase()=="SHORTCUT ICON"){if(!g.id){g.id=Dwt._favIconId=Dwt.getNextId() | |
}a=g; | |
break | |
}}}if(a){a.href=h; | |
a.type="image/x-icon"; | |
var f=a.parentNode; | |
f.removeChild(a); | |
f.appendChild(a) | |
}else{var d=document.createElement("link"); | |
d.id=Dwt._favIconId=Dwt.getNextId(); | |
d.rel="SHORTCUT ICON"; | |
d.href=h; | |
d.type="image/x-icon"; | |
j=j||document.getElementsByTagName("head")[0]; | |
j.appendChild(d) | |
}}; | |
Dwt.enableDesignMode=function(d,a){if(!AjxEnv.isIE){d.designMode=a?"on":"off" | |
}else{var c=d.body; | |
if(!c||c.contentEditable===undefined){d.designMode=a?"on":"off" | |
}else{c.contentEditable=a?true:false | |
}}}; | |
Dwt.ffScrollbarCheck=function(c){if(AjxEnv.isFirefox3_6up||AjxEnv.isDesktop2up){var a=c.target; | |
if(a&&(a.clientHeight&&a.scrollHeight&&(a.clientHeight!=a.scrollHeight))||(a.clientWidth&&a.scrollWidth&&(a.clientWidth!=a.scrollWidth))){c._dontCallPreventDefault=true; | |
c._stopPropagation=false; | |
c._returnValue=true; | |
return true | |
}}return false | |
}; | |
Dwt.selectText=function(c){if(!c){Dwt.deselectText(); | |
return | |
}if(document.selection){var a=c.parentTextEdit.createTextRange(); | |
a.moveToElementText(c); | |
a.select() | |
}else{if(window.getSelection){var a=document.createRange(); | |
a.selectNode(c); | |
var d=window.getSelection(); | |
d.addRange(a) | |
}}}; | |
Dwt.deselectText=function(){if(document.selection){document.selection.empty() | |
}else{if(window.getSelection){window.getSelection().removeAllRanges() | |
}}}; | |
Dwt.insertText=function(c,e){if(!c||!e){return | |
}if(document.selection){c.focus(); | |
var d=document.selection.createRange(); | |
d.text=e; | |
c.focus() | |
}else{if(AjxUtil.isSpecified(c.selectionStart)){var f=c.selectionStart,a=c.selectionEnd; | |
c.value=c.value.substring(0,f)+e+c.value.substring(a,c.value.length); | |
c.selectionStart=f+e.length; | |
c.selectionEnd=a+e.length | |
}else{c.value+=e | |
}}}; | |
Dwt.doOverlap=function(g,f){if(!g||!f){return false | |
}var i=Dwt.getLocation(g),h=Dwt.getLocation(f); | |
var m=Dwt.getSize(g),l=Dwt.getSize(f); | |
var o=i.x,n=h.x,k=i.y,j=h.y; | |
var e=o+m.x,c=n+l.x; | |
var d=k+m.y,a=j+l.y; | |
return !(o>c||e<n||k>a||d<j) | |
}; | |
Dwt.scrollIntoView=function(d,c){if(!d||!c){return | |
}var a=Dwt.toWindow(d,0,0,null,null,DwtPoint.tmp).y; | |
var h=Dwt.toWindow(c,0,0,null,null,DwtPoint.tmp).y+c.scrollTop; | |
var g=a-h; | |
if(g<0){c.scrollTop+=g | |
}else{var f=Dwt.getSize(c,DwtPoint.tmp).y; | |
var e=Dwt.getSize(d,DwtPoint.tmp).y; | |
g=(a+e)-(h+f); | |
if(g>0){c.scrollTop+=g | |
}}}; | |
Dwt.setLoadingTime=function(d,a){if(!window.isPerfMetric){return | |
}a=a||new Date(); | |
d+="_loading"; | |
var c=document.getElementById(d); | |
if(!c){c=document.createElement("div"); | |
c.id=d; | |
c.style.display="none"; | |
document.body.appendChild(c) | |
}c.innerHTML=a.getTime(); | |
if(window.appDevMode){console.profile(d) | |
}}; | |
Dwt.setLoadedTime=function(d,a){if(!window.isPerfMetric){return | |
}a=a||new Date(); | |
d+="_loaded"; | |
var c=document.getElementById(d); | |
if(!c){c=document.createElement("div"); | |
c.id=d; | |
c.style.display="none"; | |
document.body.appendChild(c) | |
}c.innerHTML=a.getTime(); | |
if(window.appDevMode){console.profileEnd() | |
}}; | |
Dwt.printPerfMetric=function(){$.each($('div[id*="_loaded"]'),function(d,g){var a=$(g).attr("id"); | |
var h=a.substring(0,a.indexOf("_")); | |
var c=$("#"+h+"_launched"); | |
if(c&&c.length>0){var e=$("#"+h+"_launched").html() | |
}else{e=$("#"+h+"_loading").html() | |
}var f="Load time for "+h+" is "+($(g).html()-e); | |
if(console){console.log(f) | |
}}) | |
}; | |
Dwt.createLinearGradientCss=function(f,c,e){var a=null; | |
var d=this.createLinearGradientInfo(f,c,e); | |
if(d.field){a=d.field+":"+d.css+";" | |
}return a | |
}; | |
Dwt.createLinearGradientInfo=function(g,d,i){var h; | |
var j={}; | |
if(AjxEnv.isIE9){var e={x1:"0%",x2:i=="v"?"0%":"100%",y1:"0%",y2:i=="v"?"100%":"0%",startColor:g,endColor:d}; | |
var a=AjxTemplate.expand("dwt.Widgets#SVGGradient",e); | |
j.field="background"; | |
j.css=("url(data:image/svg+xml,"+escape(a.replace(/\s+/g," "))+")") | |
}else{if(AjxEnv.isFirefox3_6up){h=(i=="v")?"top":"left"; | |
j.field="background"; | |
j.css="-moz-linear-gradient("+h+","+g+", "+d+")" | |
}else{if((AjxEnv.isSafari&&AjxEnv.isSafari5_1up)||AjxEnv.isChrome10up){h=(i=="v")?"top":"left"; | |
j.field="background"; | |
j.css="-webkit-linear-gradient("+h+","+g+", "+d+")" | |
}else{if((AjxEnv.isSafari&&AjxEnv.isSafari4up)||AjxEnv.isChrome2up){var c="left top"; | |
var f=(i=="v")?"left bottom":"right top"; | |
j.field="background"; | |
j.css="-webkit-gradient(linear, "+c+", "+f+", color-stop(0%, "+g+"), color-stop(100%, "+d+"))" | |
}else{h=(i=="v")?"to bottom":"to right"; | |
j.field="background"; | |
j.css="linear-gradient("+h+","+g+", "+d+")" | |
}}}}return j | |
}; | |
Dwt.getDescendant=function(d,f){var c=null; | |
for(var a=0; | |
a<d.childNodes.length; | |
a++){var e=d.childNodes[a]; | |
if(e.id==f){c=e | |
}else{c=Dwt.getDescendant(e,f) | |
}if(c!=null){break | |
}}return c | |
}; | |
Dwt.getPreviousElementSibling=function(a){var c=a.previousElementSibling; | |
if(c!==undefined){return c | |
}for(c=a.previousSibling; | |
c&&c.nodeType!==1; | |
c=c.previousSibling){}return c | |
}; | |
Dwt.getNextElementSibling=function(a){var c=a.nextElementSibling; | |
if(c!==undefined){return c | |
}for(c=a.nextSibling; | |
c&&c.nodeType!==1; | |
c=c.nextSibling){}return c | |
}; | |
Dwt.getScrollbarSizes=function(e){var f=Dwt.getInsets(e); | |
var a=DwtCssStyle.getComputedStyleObject(e); | |
var d=parseInt(a.borderLeftWidth)||0; | |
var h=parseInt(a.borderTopWidth)||0; | |
var j=parseInt(a.borderRightWidth)||0; | |
var g=parseInt(a.borderBottomWidth)||0; | |
var c=e.offsetWidth-e.clientWidth-d-j; | |
var i=e.offsetHeight-e.clientHeight-h-g; | |
return new DwtPoint(c,i) | |
} | |
}if(AjxPackage.define("ajax.dwt.core.DwtException")){DwtException=function(d,c,e,a){if(arguments.length===0){return | |
}AjxException.call(this,d,c,e,a) | |
}; | |
DwtException.prototype=new AjxException(); | |
DwtException.prototype.constructor=DwtException; | |
DwtException.prototype.toString=function(){return"DwtException" | |
}; | |
DwtException.INVALIDPARENT=-1; | |
DwtException.INVALID_OP=-2; | |
DwtException.INTERNAL_ERROR=-3; | |
DwtException.INVALID_PARAM=-4 | |
}if(AjxPackage.define("ajax.dwt.core.DwtDraggable")){DwtDraggable=function(){}; | |
DwtDraggable.dragEl=null; | |
DwtDraggable.init=function(e,n,g,c,f,a,i,l,m,j,h,k,d){e.onmousedown=DwtDraggable.__start; | |
e.__hMode=j?false:true; | |
e.__vMode=h?false:true; | |
e.__root=(n&&n!=null)?n:e; | |
if(e.__hMode&&isNaN(parseInt(e.__root.style.left))){e.__root.style.left="0px" | |
}if(e.__vMode&&isNaN(parseInt(e.__root.style.top))){e.__root.style.top="0px" | |
}if(!e.__hMode&&isNaN(parseInt(e.__root.style.right))){e.__root.style.right="0px" | |
}if(!e.__vMode&&isNaN(parseInt(e.__root.style.bottom))){e.__root.style.bottom="0px" | |
}e.__minX=(typeof g!="undefined")?g:null; | |
e.__minY=(typeof f!="undefined")?f:null; | |
e.__maxX=(typeof c!="undefined")?c:null; | |
e.__maxY=(typeof a!="undefined")?a:null; | |
e.__xMapper=k?k:null; | |
e.__yMapper=d?d:null; | |
e.__root.onDragStart=i; | |
e.__root.onDragEnd=m; | |
e.__root.onDrag=l | |
}; | |
DwtDraggable.setDragBoundaries=function(c,a,e,f,d){if(c!=null){if(a!=null){c.__minX=a | |
}if(e!=null){c.__maxX=e | |
}if(f!=null){c.__minY=f | |
}if(d!=null){c.__maxY=d | |
}}}; | |
DwtDraggable.__start=function(d){var c=DwtDraggable.dragEl=this; | |
d=DwtDraggable.__fixE(d); | |
var a=parseInt(c.__hMode?c.__root.style.left:c.__root.style.right); | |
var f=parseInt(c.__vMode?c.__root.style.top:c.__root.style.bottom); | |
if(c.__root.onDragStart){c.__root.onDragStart.run([a,f]) | |
}c.__lastMouseX=d.clientX; | |
c.__lastMouseY=d.clientY; | |
if(c.__hMode){if(c.__minX!=null){c.__minMouseX=d.clientX-a+c.__minX | |
}if(c.__maxX!=null){c.__maxMouseX=c.__minMouseX+c.__maxX-c.__minX | |
}}else{if(c.__minX!=null){c.__maxMouseX=-c.__minX+d.clientX+a | |
}if(c.__maxX!=null){c.__minMouseX=-c.__maxX+d.clientX+a | |
}}if(c.__vMode){if(c.__minY!=null){c.__minMouseY=d.clientY-f+c.__minY | |
}if(c.__maxY!=null){c.__maxMouseY=c.__minMouseY+c.__maxY-c.__minY | |
}}else{if(c.__minY!=null){c.__maxMouseY=-c.__minY+d.clientY+f | |
}if(c.__maxY!=null){c.__minMouseY=-c.__maxY+d.clientY+f | |
}}document.onmousemove=DwtDraggable.__drag; | |
document.onmouseup=DwtDraggable.__end; | |
return false | |
}; | |
DwtDraggable.__drag=function(h){h=DwtDraggable.__fixE(h); | |
var d=DwtDraggable.dragEl; | |
var f=h.clientY; | |
var g=h.clientX; | |
var c=parseInt(d.__hMode?d.__root.style.left:d.__root.style.right); | |
var j=parseInt(d.__vMode?d.__root.style.top:d.__root.style.bottom); | |
var a,i; | |
if(!d.__xMapper){if(d.__minX!=null){g=d.__hMode?Math.max(g,d.__minMouseX):Math.min(g,d.__maxMouseX) | |
}if(d.__maxX!=null){g=d.__hMode?Math.min(g,d.__maxMouseX):Math.max(g,d.__minMouseX) | |
}a=c+((g-d.__lastMouseX)*(d.__hMode?1:-1)) | |
}else{a=d.__xMapper(c,g) | |
}if(!d.__yMapper){if(d.__minY!=null){f=d.__vMode?Math.max(f,d.__minMouseY):Math.min(f,d.__maxMouseY) | |
}if(d.__maxY!=null){f=d.__vMode?Math.min(f,d.__maxMouseY):Math.max(f,d.__minMouseY) | |
}i=j+((f-d.__lastMouseY)*(d.__vMode?1:-1)) | |
}else{i=d.__yMapper(j,f) | |
}DwtDraggable.dragEl.__root.style[d.__hMode?"left":"right"]=a+"px"; | |
DwtDraggable.dragEl.__root.style[d.__vMode?"top":"bottom"]=i+"px"; | |
DwtDraggable.dragEl.__lastMouseX=g; | |
DwtDraggable.dragEl.__lastMouseY=f; | |
if(DwtDraggable.dragEl.__root.onDrag){DwtDraggable.dragEl.__root.onDrag.run([a,i]) | |
}return false | |
}; | |
DwtDraggable.__end=function(){document.onmousemove=null; | |
document.onmouseup=null; | |
if(DwtDraggable.dragEl.__root.onDragEnd){DwtDraggable.dragEl.__root.onDragEnd.run([parseInt(DwtDraggable.dragEl.__root.style[DwtDraggable.dragEl.__hMode?"left":"right"]),parseInt(DwtDraggable.dragEl.__root.style[DwtDraggable.dragEl.__vMode?"top":"bottom"])]) | |
}DwtDraggable.dragEl=null | |
}; | |
DwtDraggable.__fixE=function(a){if(typeof a=="undefined"){a=window.event | |
}if(!AjxEnv.isWebKitBased){if(typeof a.layerX=="undefined"){a.layerX=a.offsetX | |
}if(typeof a.layerY=="undefined"){a.layerY=a.offsetY | |
}}return a | |
} | |
}if(AjxPackage.define("ajax.dwt.graphics.DwtCssStyle")){DwtCssStyle=function(){}; | |
DwtCssStyle.HOVER="hover"; | |
DwtCssStyle.ACTIVE="active"; | |
DwtCssStyle.SELECTED="selected"; | |
DwtCssStyle.ALT_SELECTED="altSelected"; | |
DwtCssStyle.DISABLED="disabled"; | |
DwtCssStyle.FOCUSED="focused"; | |
DwtCssStyle.ACTIONED="actioned"; | |
DwtCssStyle.MATCHED="matched"; | |
DwtCssStyle.DRAG_OVER="dragOver"; | |
DwtCssStyle.DROPPABLE="droppable"; | |
DwtCssStyle.NOT_DROPPABLE="notDroppable"; | |
DwtCssStyle.DRAG_PROXY="dragProxy"; | |
DwtCssStyle.LINUX="linux"; | |
DwtCssStyle.getProperty=function(g,a){var f=g.ownerDocument; | |
if(f.defaultView&&f.defaultView.getComputedStyle){var e=f.defaultView.getComputedStyle(g,null); | |
if(e&&e.length>0){return e.getPropertyValue(a) | |
}}var d=a.split("-"); | |
var c=d.shift()+AjxUtil.map(d,AjxStringUtil.capitalize).join(""); | |
if(g.currentStyle){return g.currentStyle[c] | |
}else{if(g.style){return g.style[c] | |
}}}; | |
DwtCssStyle.getComputedStyleObject=function(d){var c=d.ownerDocument; | |
if(c.defaultView&&c.defaultView.getComputedStyle){var a=c.defaultView.getComputedStyle(d,null); | |
if(!a&&d.style){d.style.display=""; | |
a=c.defaultView.getComputedStyle(d,null) | |
}return a||{} | |
}else{if(d.currentStyle){return d.currentStyle | |
}else{if(d.style){return d.style | |
}}}}; | |
DwtCssStyle.removeProperty=function(c,d){if(d instanceof Array){for(var a=d.length; | |
--a>=0; | |
){DwtCssStyle.removeProperty(c,d[a]) | |
}}else{if(AjxEnv.isIE){c.style.removeAttribute(d,true) | |
}else{d=d.replace(/([A-Z])/g,"-$1"); | |
c.style.removeProperty(d) | |
}}}; | |
DwtCssStyle.addRule=function(d,a,e,c){if(d.addRule){c=c||(d.rules.length); | |
d.addRule(a,e,c) | |
}else{c=c||(d.cssRules.length); | |
d.insertRule(a+"{"+e+"}",c) | |
}return c | |
}; | |
DwtCssStyle.removeRule=function(c,a){if(c.removeRule){c.removeRule(a) | |
}else{c.deleteRule(a) | |
}}; | |
DwtCssStyle.__PIXEL_RE=/^(-?[0-9]+(?:\.[0-9]*)?)px$/; | |
DwtCssStyle.__DIMENSION_RE=/^(-?[0-9]+(?:\.[0-9]*)?)([a-z]*|%)$/; | |
DwtCssStyle.__NUMBER_RE=/^(-?[0-9]+(?:\.[0-9]*)?)+$/; | |
DwtCssStyle.__getRootFontSize=function(){var a=DwtCssStyle.getProperty(document.documentElement,"font-size"); | |
if(!DwtCssStyle.__PIXEL_RE.test(a)){return -1 | |
}return parseInt(a) | |
}; | |
DwtCssStyle.asPixelCount=function(f){if(!f){return -1 | |
}var e,d,c; | |
if(typeof f==="number"||DwtCssStyle.__NUMBER_RE.test(f)){e=Number(f); | |
d="px" | |
}else{if((c=DwtCssStyle.__DIMENSION_RE.exec(f))){e=Number(c[1]); | |
d=c[2] | |
}else{return -1 | |
}}switch(d){case"rem":var a=DwtCssStyle.__getRootFontSize(); | |
return a!==-1?e*a:-1; | |
case"mm":e/=10; | |
case"cm":e/=2.54; | |
case"in":e*=6; | |
case"pc":e*=12; | |
case"pt":e/=0.75; | |
case"px":return e; | |
case"ch":case"em":case"ex":return -1; | |
default:return -1 | |
}} | |
}if(AjxPackage.define("ajax.dwt.graphics.DwtPoint")){DwtPoint=function(a,c){this.x=a||0; | |
this.y=c||0 | |
}; | |
DwtPoint.tmp=new DwtPoint(0,0); | |
DwtPoint.prototype.toString=function(){return"DwtPoint" | |
}; | |
DwtPoint.prototype.set=function(a,c){this.x=a; | |
this.y=c | |
} | |
}if(AjxPackage.define("ajax.dwt.graphics.DwtRectangle")){DwtRectangle=function(c,e,d,a){this.x=c; | |
this.y=e; | |
this.width=d; | |
this.height=a | |
}; | |
DwtRectangle.prototype.toString=function(){return"DwtRectangle" | |
}; | |
DwtRectangle.prototype.set=function(c,e,d,a){this.x=c; | |
this.y=e | |
} | |
}if(AjxPackage.define("ajax.dwt.events.DwtEvent")){DwtEvent=function(a){if(arguments.length==0){return | |
}this.dwtObj=null | |
}; | |
DwtEvent.prototype.toString=function(){return"DwtEvent" | |
}; | |
DwtEvent.ONCHANGE="onchange"; | |
DwtEvent.ONCLICK="onclick"; | |
DwtEvent.ONCONTEXTMENU="oncontextmenu"; | |
DwtEvent.ONDBLCLICK="ondblclick"; | |
DwtEvent.ONFOCUS="onfocus"; | |
DwtEvent.ONBLUR="onblur"; | |
DwtEvent.ONKEYDOWN="onkeydown"; | |
DwtEvent.ONKEYPRESS="onkeypress"; | |
DwtEvent.ONKEYUP="onkeyup"; | |
DwtEvent.ONMOUSEDOWN="onmousedown"; | |
DwtEvent.ONMOUSEENTER="onmouseenter"; | |
DwtEvent.ONMOUSELEAVE="onmouseleave"; | |
DwtEvent.ONMOUSEMOVE="onmousemove"; | |
DwtEvent.ONMOUSEOUT="onmouseout"; | |
DwtEvent.ONMOUSEOVER="onmouseover"; | |
DwtEvent.ONMOUSEUP="onmouseup"; | |
DwtEvent.ONMOUSEWHEEL="onmousewheel"; | |
DwtEvent.ONSELECTSTART="onselectstart"; | |
DwtEvent.ONSCROLL="onscroll"; | |
DwtEvent.ONPASTE="onpaste"; | |
DwtEvent.ONCUT="oncut"; | |
DwtEvent.ONINPUT="oninput"; | |
DwtEvent.ACTION="ACTION"; | |
DwtEvent.CONTROL="CONTROL"; | |
DwtEvent.DATE_RANGE="DATE_RANGE"; | |
DwtEvent.DISPOSE="DISPOSE"; | |
DwtEvent.ENTER="ENTER"; | |
DwtEvent.HOVEROVER="HOVEROVER"; | |
DwtEvent.HOVEROUT="HOVEROUT"; | |
DwtEvent.POPDOWN="POPDOWN"; | |
DwtEvent.POPUP="POPUP"; | |
DwtEvent.SELECTION="SELECTION"; | |
DwtEvent.TREE="TREE"; | |
DwtEvent.STATE_CHANGE="STATE_CHANGE"; | |
DwtEvent.TAB="TAB"; | |
DwtEvent.XFORMS_READY="xforms-ready"; | |
DwtEvent.XFORMS_DISPLAY_UPDATED="xforms-display-updated"; | |
DwtEvent.XFORMS_VALUE_CHANGED="xforms-value-changed"; | |
DwtEvent.XFORMS_FORM_DIRTY_CHANGE="xforms-form-dirty-change"; | |
DwtEvent.XFORMS_CHOICES_CHANGED="xforms-choices-changed"; | |
DwtEvent.XFORMS_VALUE_ERROR="xforms-value-error"; | |
DwtEvent.XFORMS_INSTANCE_CHANGED="xforms-instance-cahnged"; | |
DwtEvent.KEY_EVENTS=[DwtEvent.ONKEYDOWN,DwtEvent.ONKEYPRESS,DwtEvent.ONKEYUP]; | |
DwtEvent.MOUSE_EVENTS=[DwtEvent.ONCONTEXTMENU,DwtEvent.ONCLICK,DwtEvent.ONDBLCLICK,DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEMOVE,DwtEvent.ONMOUSEUP,DwtEvent.ONSELECTSTART,DwtEvent.ONMOUSEOVER,DwtEvent.ONMOUSEOUT] | |
}if(AjxPackage.define("ajax.dwt.events.DwtEventManager")){DwtEventManager=function(){}; | |
DwtEventManager._instance=new AjxEventMgr(); | |
DwtEventManager._domEventToDwtMap={ondblclick:DwtEvent.ONDBLCLICK,onmousedown:DwtEvent.ONMOUSEDOWN,onmouseup:DwtEvent.ONMOUSEUP,onmousemove:DwtEvent.ONMOUSEMOVE,onmouseout:DwtEvent.ONMOUSEOUT,onmouseover:DwtEvent.ONMOUSEOVER,onselectstart:DwtEvent.ONSELECTSTART,onchange:DwtEvent.ONCHANGE}; | |
DwtEventManager.addListener=function(a,c){DwtEventManager._instance.addListener(a,c) | |
}; | |
DwtEventManager.notifyListeners=function(a,c){DwtEventManager._instance.notifyListeners(a,c) | |
}; | |
DwtEventManager.removeListener=function(a,c){DwtEventManager._instance.removeListener(a,c) | |
} | |
}if(AjxPackage.define("ajax.dwt.events.DwtUiEvent")){DwtUiEvent=function(a){if(arguments.length==0){return | |
}DwtEvent.call(this,true); | |
this.reset() | |
}; | |
DwtUiEvent.prototype=new DwtEvent; | |
DwtUiEvent.prototype.constructor=DwtUiEvent; | |
DwtUiEvent.prototype.isDwtUiEvent=true; | |
DwtUiEvent.prototype.toString=function(){return"DwtUiEvent" | |
}; | |
DwtUiEvent.prototype.reset=function(){this.dwtObj=null; | |
this.altKey=false; | |
this.ctrlKey=false; | |
this.metaKey=false; | |
this.shiftKey=false; | |
this.target=null; | |
this.type=null; | |
this.docX=-1; | |
this.docY=-1; | |
this.elementX=-1; | |
this.elementY=-1; | |
this.ersatz=false; | |
this._stopPropagation=false; | |
this._returnValue=true; | |
this._dontCallPreventDefault=false | |
}; | |
DwtUiEvent.getEvent=function(c,d){c=c||window.event; | |
if(c){return c | |
}if(d){var a=(d.ownerDocument||d.document||d).parentWindow; | |
return a?a.event:null | |
}}; | |
DwtUiEvent.getTarget=function(a,c){a=DwtUiEvent.getEvent(a); | |
if(!a){return null | |
}if(!c){if(a.target){return(a.target.nodeType==3)?a.target.parentNode:a.target | |
}else{if(a.srcElement){return a.srcElement | |
}}}else{if(a.relatedTarget){return a.relatedTarget | |
}else{if(a.toElement){return a.toElement | |
}else{if(a.fromElement){return a.fromElement | |
}}}}return null | |
}; | |
DwtUiEvent.getTargetWithProp=function(c,g,f,e){var d=DwtUiEvent.getTarget(c,f); | |
while(d){var a=Dwt.getAttr(d,g); | |
if(a!=null&&a!==""&&(!e||(a==e))){return d | |
}d=d.parentNode | |
}return null | |
}; | |
DwtUiEvent.getTargetWithClass=function(c,a,e){var d=DwtUiEvent.getTarget(c,e); | |
while(d&&d.nodeType===1){if(Dwt.hasClass(d,a)){return d | |
}d=d.parentNode | |
}return null | |
}; | |
DwtUiEvent.getTargetWithProps=function(e,d){var f=DwtUiEvent.getTarget(e); | |
while(f){var c=true; | |
for(var a in d){var g=Dwt.getAttr(f,d[a]); | |
if(g==null||g===""){f=f.parentNode; | |
c=false; | |
break | |
}}if(c){return f | |
}}return null | |
}; | |
DwtUiEvent.copy=function(a,c){a.altKey=c.altKey; | |
a.ctrlKey=c.ctrlKey; | |
a.metaKey=c.metaKey; | |
a.shiftKey=c.shiftKey; | |
a.target=c.target; | |
a.type=c.type; | |
a.dwtObj=c.dwtObj; | |
a.docX=c.docX; | |
a.docY=c.docY; | |
a.elementX=c.elementX; | |
a.elementY=c.elementY; | |
a.ersatz=c.ersatz; | |
a._stopPropagation=c._stopPropagation; | |
a._returnValue=c._returnValue | |
}; | |
DwtUiEvent.prototype.setFromDhtmlEvent=function(c,d){c=DwtUiEvent.getEvent(c); | |
if(!c){return | |
}this.altKey=c.altKey; | |
this.ctrlKey=c.ctrlKey; | |
this.metaKey=c.metaKey; | |
this.shiftKey=c.shiftKey; | |
this.type=c.type; | |
this.target=DwtUiEvent.getTarget(c); | |
this.dwtObj=(d===true)?DwtControl.getTargetControl(c):d; | |
if(c.pageX!=null){this.docX=c.pageX; | |
this.docY=c.pageY | |
}else{if(c.clientX!=null){this.docX=c.clientX+document.body.scrollLeft-document.body.clientLeft; | |
this.docY=c.clientY+document.body.scrollTop-document.body.clientTop; | |
if(document.body.parentElement){var a=document.body.parentElement; | |
this.docX+=a.scrollLeft-a.clientLeft; | |
this.docY+=a.scrollTop-a.clientTop | |
}}}if(c.offsetX!=null){this.elementX=c.offsetX; | |
this.elementY=c.offsetY | |
}else{if(!AjxEnv.isWebKitBased&&c.layerX!=null){this.elementX=c.layerX; | |
this.elementY=c.layerY | |
}else{this.elementX=Dwt.DEFAULT; | |
this.elementY=Dwt.DEFAULT | |
}}this.ersatz=false; | |
return c | |
}; | |
DwtUiEvent.prototype.setToDhtmlEvent=function(a){DwtUiEvent.setBehaviour(a,this._stopPropagation,this._returnValue,this._dontCallPreventDefault) | |
}; | |
DwtUiEvent.setBehaviour=function(f,a,c,d){var e=DwtUiEvent.getEvent(f); | |
DwtUiEvent.setDhtmlBehaviour(e,a,c,d) | |
}; | |
DwtUiEvent.setDhtmlBehaviour=function(e,a,c,d){e=DwtUiEvent.getEvent(e); | |
if(!e){return | |
}if(e.stopPropagation!=null){if(a){e.stopPropagation() | |
}if(!c&&!d){e.preventDefault() | |
}}else{e.returnValue=c; | |
e.cancelBubble=a | |
}}; | |
DwtUiEvent.getDwtObjFromEvent=function(a,d){var c=DwtUiEvent.getTargetWithProp(a,"dwtObj",d); | |
return c?Dwt.getObjectFromElement(c):null | |
}; | |
DwtUiEvent.getDwtObjWithProp=function(a,d){var c=DwtUiEvent.getTargetWithProps(a,["dwtObj",d]); | |
return c?Dwt.getObjectFromElement(c):null | |
} | |
}if(AjxPackage.define("ajax.dwt.events.DwtControlEvent")){DwtControlEvent=function(){this.reset() | |
}; | |
DwtControlEvent.prototype=new DwtEvent; | |
DwtControlEvent.prototype.constructor=DwtControlEvent; | |
DwtControlEvent.RESIZE=1; | |
DwtControlEvent.MOVE=2; | |
DwtControlEvent.STATE=4; | |
DwtControlEvent.prototype.toString=function(){return"DwtControlEvent" | |
}; | |
DwtControlEvent.prototype.reset=function(a){this.oldX=Dwt.DEFAULT; | |
this.oldY=Dwt.DEFAULT; | |
this.oldWidth=Dwt.DEFAULT; | |
this.oldHeight=Dwt.DEFAULT; | |
this.oldState=null; | |
this.newX=Dwt.DEFAULT; | |
this.newY=Dwt.DEFAULT; | |
this.newWidth=Dwt.DEFAULT; | |
this.newHeight=Dwt.DEFAULT; | |
this.newState=null; | |
this.type=a||null | |
} | |
}if(AjxPackage.define("ajax.dwt.events.DwtFocusEvent")){DwtFocusEvent=function(a){if(arguments.length==0){return | |
}DwtEvent.call(this,true); | |
this.reset() | |
}; | |
DwtFocusEvent.prototype=new DwtEvent; | |
DwtFocusEvent.prototype.constructor=DwtFocusEvent; | |
DwtFocusEvent.FOCUS=1; | |
DwtFocusEvent.BLUR=2; | |
DwtFocusEvent.prototype.toString=function(){return"DwtFocusEvent" | |
}; | |
DwtFocusEvent.prototype.reset=function(){this.dwtObj=null; | |
this.state=DwtFocusEvent.FOCUS | |
} | |
}if(AjxPackage.define("ajax.dwt.events.DwtKeyEvent")){DwtKeyEvent=function(){DwtUiEvent.call(this,true); | |
this.reset(true) | |
}; | |
DwtKeyEvent.prototype.toString=function(){return"DwtKeyEvent" | |
}; | |
DwtKeyEvent.prototype.isDwtKeyEvent=true; | |
DwtKeyEvent.KEY_END_OF_TEXT=3; | |
DwtKeyEvent.KEY_BACKSPACE=8; | |
DwtKeyEvent.KEY_TAB=9; | |
DwtKeyEvent.KEY_RETURN=13; | |
DwtKeyEvent.KEY_ENTER=DwtKeyEvent.KEY_RETURN; | |
DwtKeyEvent.KEY_ESCAPE=27; | |
DwtKeyEvent.KEY_SPACE=32; | |
DwtKeyEvent.KEY_ARROW_LEFT=37; | |
DwtKeyEvent.KEY_ARROW_UP=38; | |
DwtKeyEvent.KEY_ARROW_RIGHT=39; | |
DwtKeyEvent.KEY_ARROW_DOWN=40; | |
DwtKeyEvent.KEY_DELETE=46; | |
DwtKeyEvent.KEY_SEMICOLON=59; | |
DwtKeyEvent.KEY_SEMICOLON_1=186; | |
DwtKeyEvent.KEY_COMMA=188; | |
DwtKeyEvent.KEY_COMMAND=224; | |
DwtKeyEvent.IS_RETURN={}; | |
DwtKeyEvent.IS_RETURN[DwtKeyEvent.KEY_END_OF_TEXT]=true; | |
DwtKeyEvent.IS_RETURN[DwtKeyEvent.KEY_RETURN]=true; | |
DwtKeyEvent.MAC_FF_CODE={}; | |
DwtKeyEvent.MAC_FF_CODE["~"]=192; | |
DwtKeyEvent.MAC_FF_CODE["!"]=49; | |
DwtKeyEvent.MAC_FF_CODE["@"]=50; | |
DwtKeyEvent.MAC_FF_CODE["#"]=51; | |
DwtKeyEvent.MAC_FF_CODE["$"]=52; | |
DwtKeyEvent.MAC_FF_CODE["%"]=53; | |
DwtKeyEvent.MAC_FF_CODE["^"]=54; | |
DwtKeyEvent.MAC_FF_CODE["&"]=55; | |
DwtKeyEvent.MAC_FF_CODE["*"]=56; | |
DwtKeyEvent.MAC_FF_CODE["("]=57; | |
DwtKeyEvent.MAC_FF_CODE[")"]=48; | |
DwtKeyEvent.MAC_FF_CODE["-"]=189; | |
DwtKeyEvent.MAC_FF_CODE._=189; | |
DwtKeyEvent.MAC_FF_CODE["+"]=187; | |
DwtKeyEvent.MAC_FF_CODE["|"]=220; | |
DwtKeyEvent.MAC_FF_CODE[":"]=186; | |
DwtKeyEvent.MAC_FF_CODE["<"]=188; | |
DwtKeyEvent.MAC_FF_CODE[">"]=190; | |
DwtKeyEvent.MAC_FF_CODE["?"]=191; | |
DwtKeyEvent.prototype=new DwtUiEvent; | |
DwtKeyEvent.prototype.constructor=DwtKeyEvent; | |
DwtKeyEvent.isKeyEvent=function(a){return a.type&&a.type.search(/^key/i)!=-1 | |
}; | |
DwtKeyEvent.isKeyPressEvent=function(a){return(AjxEnv.isIE&&a.type=="keydown")||(a.type=="keypress") | |
}; | |
DwtKeyEvent.prototype.reset=function(a){if(!a){DwtUiEvent.prototype.reset.call(this) | |
}this.keyCode=0; | |
this.charCode=0 | |
}; | |
DwtKeyEvent.prototype.isCommand=function(a){return AjxEnv.isMac&&this.metaKey||this.ctrlKey | |
}; | |
DwtKeyEvent.prototype.setFromDhtmlEvent=function(a,c){a=DwtUiEvent.prototype.setFromDhtmlEvent.apply(this,arguments); | |
if(!a){return | |
}this.charCode=a.charCode||a.keyCode; | |
this.keyCode=a.keyCode | |
}; | |
DwtKeyEvent.getCharCode=function(c){c=DwtUiEvent.getEvent(c); | |
var a=AjxEnv.isSafari?c.keyCode:(c.charCode||c.keyCode); | |
if(a==0&&AjxEnv.isMac&&AjxEnv.isGeckoBased&&c.type=="keyup"&&DwtKeyEvent._geckoCode){a=DwtKeyEvent._geckoCode; | |
DwtKeyEvent._geckoCode=null | |
}return a | |
}; | |
DwtKeyEvent.copy=function(a,c){DwtUiEvent.copy(a,c); | |
a.charCode=c.charCode; | |
a.keyCode=c.keyCode | |
}; | |
DwtKeyEvent.geckoCheck=function(c){c=DwtUiEvent.getEvent(c); | |
if(c.type=="keypress"){DwtKeyEvent._geckoCode=null; | |
if(AjxEnv.isMac&&AjxEnv.isGeckoBased){var a=String.fromCharCode(c.charCode); | |
DwtKeyEvent._geckoCode=DwtKeyEvent.MAC_FF_CODE[a] | |
}}} | |
}if(AjxPackage.define("ajax.dwt.events.DwtMouseEvent")){DwtMouseEvent=function(){DwtUiEvent.call(this,true); | |
this.reset(true) | |
}; | |
DwtMouseEvent.prototype=new DwtUiEvent; | |
DwtMouseEvent.prototype.constructor=DwtMouseEvent; | |
DwtMouseEvent.prototype.toString=function(){return"DwtMouseEvent" | |
}; | |
DwtMouseEvent.NONE=0; | |
DwtMouseEvent.LEFT=1; | |
DwtMouseEvent.MIDDLE=2; | |
DwtMouseEvent.RIGHT=3; | |
DwtMouseEvent.prototype.reset=function(a){if(!a){DwtUiEvent.prototype.reset.call(this) | |
}this.button=0 | |
}; | |
DwtMouseEvent.prototype.setFromDhtmlEvent=function(a,c){a=DwtUiEvent.prototype.setFromDhtmlEvent.apply(this,arguments); | |
if(!a){return | |
}if(a.which){switch(a.which){case 1:this.button=DwtMouseEvent.LEFT; | |
break; | |
case 2:this.button=DwtMouseEvent.MIDDLE; | |
break; | |
case 3:this.button=DwtMouseEvent.RIGHT; | |
break; | |
default:this.button=DwtMouseEvent.NONE | |
}}else{if(a.button){if((a.button&1)!=0){this.button=DwtMouseEvent.LEFT | |
}else{if((a.button&2)!=0){this.button=DwtMouseEvent.RIGHT | |
}else{if((a.button&4)!=0){this.button=DwtMouseEvent.MIDDLE | |
}else{this.button=DwtMouseEvent.NONE | |
}}}}}if(AjxEnv.isMac&&this.button){if(this.ctrlKey&&(this.button==DwtMouseEvent.LEFT||this.button==DwtMouseEvent.RIGHT)){this.button=DwtMouseEvent.RIGHT; | |
this.ctrlKey=false | |
}if(this.altKey){this.ctrlKey=true; | |
this.altKey=false | |
}}} | |
}if(AjxPackage.define("ajax.dwt.events.DwtMouseEventCapture")){DwtMouseEventCapture=function(a){a=Dwt.getParams(arguments,DwtMouseEventCapture.PARAMS); | |
this.targetObj=a.targetObj; | |
this._id=a.id; | |
this._mouseOverHdlr=a.mouseOverHdlr||DwtMouseEventCapture.emptyHdlr; | |
this._mouseDownHdlr=a.mouseDownHdlr||DwtMouseEventCapture.emptyHdlr; | |
this._mouseMoveHdlr=a.mouseMoveHdlr||DwtMouseEventCapture.emptyHdlr; | |
this._mouseUpHdlr=a.mouseUpHdlr||DwtMouseEventCapture.emptyHdlr; | |
this._mouseOutHdlr=a.mouseOutHdlr||DwtMouseEventCapture.emptyHdlr; | |
this._mouseWheelHdlr=a.mouseWheelHdlr||DwtMouseEventCapture.emptyHdlr; | |
this._hardCapture=(a.hardCapture!==false) | |
}; | |
DwtMouseEventCapture.PARAMS=["targetObj","id","mouseOverHdlr","mouseDownHdlr","mouseMoveHdlr","mouseUpHdlr","mouseOutHdlr","mouseWheelHdlr","hardCapture"]; | |
DwtMouseEventCapture._capturing=false; | |
DwtMouseEventCapture.getCaptureObj=function(){return window._mouseEventCaptureObj | |
}; | |
DwtMouseEventCapture.getTargetObj=function(){return window._mouseEventCaptureObj?window._mouseEventCaptureObj.targetObj:null | |
}; | |
DwtMouseEventCapture.getId=function(){return window._mouseEventCaptureObj?window._mouseEventCaptureObj._id:null | |
}; | |
DwtMouseEventCapture.prototype.toString=function(){return"DwtMouseEventCapture" | |
}; | |
DwtMouseEventCapture.prototype.capturing=function(){return DwtMouseEventCapture._capturing | |
}; | |
DwtMouseEventCapture.prototype.capture=function(){if(window._mouseEventCaptureObj){window._mouseEventCaptureObj.release() | |
}if(document.body!=null&&document.body.addEventListener!=null){document.body.addEventListener("mouseover",this._mouseOverHdlr,true); | |
document.body.addEventListener("mousedown",this._mouseDownHdlr,true); | |
document.body.addEventListener("mousemove",this._mouseMoveHdlr,true); | |
document.body.addEventListener("mouseup",this._mouseUpHdlr,true); | |
document.body.addEventListener("mouseout",this._mouseOutHdlr,true); | |
document.body.addEventListener("DOMMouseScroll",this._mouseWheelHdlr,true) | |
}else{this._savedMouseOverHdlr=document.onmouseover; | |
this._savedMouseDownHdlr=document.onmousedown; | |
this._savedMouseMoveHdlr=document.onmousemove; | |
this._savedMouseUpHdlr=document.onmouseup; | |
this._savedMouseOutHdlr=document.onmouseout; | |
this._savedMouseWheelHdlr=document.onmousewheel; | |
document.onmouseover=this._mouseOverHdlr; | |
document.onmousedown=this._mouseDownHdlr; | |
document.onmousemove=this._mouseMoveHdlr; | |
document.onmouseup=this._mouseUpHdlr; | |
document.onmouseout=this._mouseOutHdlr; | |
document.onmousewheel=this._mouseWheelHdlr | |
}window._mouseEventCaptureObj=this; | |
DwtMouseEventCapture._capturing=true | |
}; | |
DwtMouseEventCapture.prototype.release=function(){if(window._mouseEventCaptureObj==null){return | |
}var a=window._shellCaptureObj; | |
if(document.body&&document.body.addEventListener){document.body.removeEventListener("mouseover",this._mouseOverHdlr,true); | |
document.body.removeEventListener("mousedown",this._mouseDownHdlr,true); | |
document.body.removeEventListener("mousemove",this._mouseMoveHdlr,true); | |
document.body.removeEventListener("mouseup",this._mouseUpHdlr,true); | |
document.body.removeEventListener("mouseout",this._mouseOutHdlr,true); | |
document.body.removeEventListener("DOMMouseScroll",this._mouseWheelHdlr,true) | |
}else{document.onmouseover=this._savedMouseOverHdlr; | |
document.onmousedown=this._savedMouseDownHdlr; | |
document.onmousemove=this._savedMouseMoveHdlr; | |
document.onmouseup=this._savedMouseUpHdlr; | |
document.onmouseout=this._savedMouseOutHdlr; | |
document.onmousewheel=this._savedMouseWheelHdlr | |
}window._mouseEventCaptureObj=null; | |
DwtMouseEventCapture._capturing=false | |
}; | |
DwtMouseEventCapture.emptyHdlr=function(c){var d=DwtMouseEventCapture.getCaptureObj(); | |
var a=DwtShell.mouseEvent; | |
a.setFromDhtmlEvent(c); | |
if(d._hardCapture){a._stopPropagation=true; | |
a._returnValue=false; | |
a.setToDhtmlEvent(c); | |
return false | |
}else{a._stopPropagation=false; | |
a._returnValue=true; | |
a.setToDhtmlEvent(c); | |
return true | |
}} | |
}if(AjxPackage.define("ajax.dwt.events.DwtListViewActionEvent")){DwtListViewActionEvent=function(){DwtMouseEvent.call(this); | |
this.reset(true) | |
}; | |
DwtListViewActionEvent.prototype=new DwtMouseEvent; | |
DwtListViewActionEvent.prototype.constructor=DwtListViewActionEvent; | |
DwtListViewActionEvent.prototype.toString=function(){return"DwtListViewActionEvent" | |
}; | |
DwtListViewActionEvent.prototype.reset=function(a){if(!a){DwtMouseEvent.prototype.reset.call(this) | |
}this.field=null; | |
this.item=null; | |
this.detail=null | |
} | |
}if(AjxPackage.define("ajax.dwt.events.DwtSelectionEvent")){DwtSelectionEvent=function(a){if(arguments.length==0){return | |
}DwtUiEvent.call(this,true); | |
this.reset(true) | |
}; | |
DwtSelectionEvent.prototype=new DwtUiEvent; | |
DwtSelectionEvent.prototype.constructor=DwtSelectionEvent; | |
DwtSelectionEvent.prototype.toString=function(){return"DwtSelectionEvent" | |
}; | |
DwtSelectionEvent.prototype.reset=function(a){if(!a){DwtUiEvent.prototype.reset.call(this) | |
}this.button=0; | |
this.detail=null; | |
this.item=null | |
} | |
}if(AjxPackage.define("ajax.dwt.events.DwtTreeEvent")){DwtTreeEvent=function(){DwtSelectionEvent.call(this,true) | |
}; | |
DwtTreeEvent.prototype=new DwtSelectionEvent; | |
DwtTreeEvent.prototype.constructor=DwtTreeEvent; | |
DwtTreeEvent.prototype.toString=function(){return"DwtTreeEvent" | |
}; | |
DwtTreeEvent.prototype.setFromDhtmlEvent=function(a,c){a=DwtSelectionEvent.prototype.setFromDhtmlEvent.apply(this,arguments) | |
} | |
}if(AjxPackage.define("ajax.dwt.events.DwtHoverEvent")){DwtHoverEvent=function(e,d,c,a,f){if(arguments.length==0){return | |
}DwtEvent.call(this,true); | |
this.type=e; | |
this.delay=d; | |
this.object=c; | |
this.x=a||-1; | |
this.y=f||-1 | |
}; | |
DwtHoverEvent.prototype=new DwtEvent; | |
DwtHoverEvent.prototype.constructor=DwtHoverEvent; | |
DwtHoverEvent.prototype.toString=function(){return"DwtHoverEvent" | |
}; | |
DwtHoverEvent.prototype.reset=function(){this.type=0; | |
this.delay=0; | |
this.object=null; | |
this.x=-1; | |
this.y=-1 | |
} | |
}if(AjxPackage.define("ajax.dwt.events.DwtIdleTimer")){DwtIdleTimer=function(c,a){DwtIdleTimer._initEvents(); | |
this.timeout=c; | |
this.handler=a; | |
this.idle=false; | |
this._onIdle=AjxCallback.simpleClosure(this.setIdle,this); | |
this._startTimer(); | |
DwtIdleTimer.getHandlers().add(this) | |
}; | |
DwtIdleTimer.idleHandlers=0; | |
DwtIdleTimer.prototype.toString=function(){return"DwtIdleTimer" | |
}; | |
DwtIdleTimer.prototype.kill=function(){this._stopTimer(); | |
this.idle=false; | |
DwtIdleTimer.getHandlers().remove(this) | |
}; | |
DwtIdleTimer.prototype.resurrect=function(a){this.idle=false; | |
DwtIdleTimer.getHandlers().add(this,null,true); | |
if(a!=null){this.timeout=a | |
}this._startTimer() | |
}; | |
DwtIdleTimer.prototype.setIdle=function(){if(!this.idle){DwtIdleTimer.idleHandlers++; | |
this.idle=true; | |
this.handler.run(true) | |
}}; | |
DwtIdleTimer.prototype.resume=function(){if(this.idle){this.idle=false; | |
this.handler.run(false); | |
DwtIdleTimer.idleHandlers-- | |
}}; | |
DwtIdleTimer.prototype._startTimer=function(){this._stopTimer(); | |
this._timer=setTimeout(this._onIdle,this.timeout) | |
}; | |
DwtIdleTimer.prototype._stopTimer=function(){if(this._timer){clearTimeout(this._timer); | |
this._timer=null | |
}}; | |
DwtIdleTimer._initEvents=function(){if(!DwtIdleTimer._initialized){if(window.addEventListener){window.addEventListener("keydown",DwtIdleTimer.resetIdle,true); | |
window.addEventListener("mousemove",DwtIdleTimer.resetIdle,true); | |
window.addEventListener("mousedown",DwtIdleTimer.resetIdle,true); | |
window.addEventListener("focus",DwtIdleTimer.resetIdle,true) | |
}else{if(window.attachEvent){document.body.attachEvent("onkeydown",DwtIdleTimer.resetIdle); | |
document.body.attachEvent("onkeyup",DwtIdleTimer.resetIdle); | |
document.body.attachEvent("onmousedown",DwtIdleTimer.resetIdle); | |
document.body.attachEvent("onmousemove",DwtIdleTimer.resetIdle); | |
document.body.attachEvent("onmouseover",DwtIdleTimer.resetIdle); | |
document.body.attachEvent("onmouseout",DwtIdleTimer.resetIdle); | |
window.attachEvent("onfocus",DwtIdleTimer.resetIdle) | |
}}DwtIdleTimer._initialized=true | |
}}; | |
DwtIdleTimer.getHandlers=function(){var c=DwtIdleTimer.HANDLERS; | |
if(!c){c=DwtIdleTimer.HANDLERS=new AjxVector() | |
}return c | |
}; | |
DwtIdleTimer.resetIdle=function(){var c=DwtIdleTimer.getHandlers(); | |
c.foreach("_startTimer"); | |
if(DwtIdleTimer.idleHandlers>0){c.foreach("resume") | |
}} | |
}if(AjxPackage.define("ajax.dwt.events.DwtOutsideMouseEventMgr")){DwtOutsideMouseEventMgr=function(){this._reset(); | |
this._mouseEventListener=DwtOutsideMouseEventMgr._mouseEventHdlr.bind(); | |
DwtOutsideMouseEventMgr.INSTANCE=this; | |
this.id="DwtOutsideMouseEventMgr" | |
}; | |
DwtOutsideMouseEventMgr.prototype.isDwtOutsideMouseEventMgr=true; | |
DwtOutsideMouseEventMgr.prototype.toString=function(){return"DwtOutsideMouseEventMgr" | |
}; | |
DwtOutsideMouseEventMgr.EVENTS=[DwtEvent.ONMOUSEDOWN]; | |
DwtOutsideMouseEventMgr.EVENTS_HASH=AjxUtil.arrayAsHash(DwtOutsideMouseEventMgr.EVENTS); | |
DwtOutsideMouseEventMgr.prototype.startListening=function(e){if(!(e&&e.outsideListener)){return | |
}var a=e.id; | |
if(!this._menuCapObj){var d={id:this.id,hardCapture:false,mouseDownHdlr:DwtOutsideMouseEventMgr._mouseEventHdlr}; | |
this._menuCapObj=new DwtMouseEventCapture(d) | |
}var g=e.elementId||(e.obj&&e.obj.getHTMLElId&&e.obj.getHTMLElId()); | |
var c=this._byId[a]; | |
if(c){if(g){c.elementIds.push(g) | |
}return | |
}else{c=this._byId[a]={id:a,obj:e.obj,elementIds:[g],outsideListener:e.outsideListener} | |
}if(this._numIds==0){if(AjxEnv.isIE){var h=DwtShell.getShell(window); | |
var k=DwtOutsideMouseEventMgr.EVENTS; | |
h._setEventHdlrs(k); | |
for(var f=0; | |
f<k.length; | |
f++){var j=k[f]; | |
h.addListener(j,this._mouseEventListener); | |
DwtEventManager.addListener(j,this._mouseEventListener) | |
}}if(!AjxEnv.isIE&&!e.noWindowBlur){this._savedWindowBlurHandler=window.onblur; | |
window.onblur=DwtOutsideMouseEventMgr._mouseEventHdlr | |
}this._menuCapObj.capture(); | |
this._capturing=true | |
}this._numIds++ | |
}; | |
DwtOutsideMouseEventMgr.prototype.stopListening=function(e){if(typeof e=="string"){e={id:e} | |
}var a=e.id; | |
var d=this._byId[a]; | |
if(!d){return | |
}var c=d.elementIds; | |
var g=e.elementId||(e.obj&&e.obj.getHTMLElId()); | |
if(g){AjxUtil.arrayRemove(c,g); | |
if(c.length>0){return | |
}}delete this._byId[a]; | |
this._numIds--; | |
if(this._numIds==0){if(AjxEnv.isIE){var h=DwtShell.getShell(window); | |
var k=DwtOutsideMouseEventMgr.EVENTS; | |
h._setEventHdlrs(k,true); | |
for(var f=0; | |
f<k.length; | |
f++){var j=k[f]; | |
h.removeListener(j,this._mouseEventListener); | |
DwtEventManager.removeListener(j,this._mouseEventListener) | |
}}if(!AjxEnv.isIE&&!e.noWindowBlur){window.onblur=this._savedWindowBlurHandler | |
}this._reset() | |
}}; | |
DwtOutsideMouseEventMgr.prototype._reset=function(){if(this._capturing&&(DwtMouseEventCapture.getId()==this.id)){this._menuCapObj.release(); | |
this._capturing=false | |
}this._byId={}; | |
this._numIds=0 | |
}; | |
DwtOutsideMouseEventMgr.forwardEvent=function(d){if(!d){return | |
}var c=DwtOutsideMouseEventMgr.INSTANCE; | |
if(!c._numIds){return | |
}var a="on"+d.type; | |
if(DwtOutsideMouseEventMgr.EVENTS_HASH[a]){DwtOutsideMouseEventMgr._mouseEventHdlr(d) | |
}}; | |
DwtOutsideMouseEventMgr._mouseEventHdlr=function(h){h=DwtUiEvent.getEvent(h); | |
if(!h){return | |
}var j=DwtOutsideMouseEventMgr.INSTANCE; | |
var k=DwtUiEvent.getTarget(h); | |
if(AjxEnv.isGeckoBased&&h&&(h.type=="blur")&&h.target&&h.explicitOriginalTarget&&(h.target!=h.explicitOriginalTarget)){DwtUiEvent.setBehaviour(h,false,true); | |
return true | |
}for(var a in j._byId){var g=true; | |
var c=j._byId[a]; | |
var f=c.elementIds; | |
for(var e=0; | |
e<f.length; | |
e++){var d=document.getElementById(f[e]); | |
if(d&&k&&Dwt.isAncestor(d,k)){g=false; | |
break | |
}}if(g){c.outsideListener.run(h,c) | |
}}DwtUiEvent.setBehaviour(h,false,true); | |
return true | |
}; | |
new DwtOutsideMouseEventMgr() | |
}if(AjxPackage.define("ajax.dwt.keyboard.DwtKeyMap")){DwtKeyMap=function(a){if(a){return | |
}this._map={}; | |
this._args={}; | |
this._checkedMap={}; | |
this._load(this._map,AjxKeys); | |
DwtKeyMap.MOD_ORDER[DwtKeyMap.ALT]=1; | |
DwtKeyMap.MOD_ORDER[DwtKeyMap.CTRL]=2; | |
DwtKeyMap.MOD_ORDER[DwtKeyMap.META]=3; | |
DwtKeyMap.MOD_ORDER[DwtKeyMap.SHIFT]=4 | |
}; | |
DwtKeyMap.prototype.isDwtKeyMap=true; | |
DwtKeyMap.prototype.toString=function(){return"DwtKeyMap" | |
}; | |
DwtKeyMap.ALT="Alt"; | |
DwtKeyMap.CTRL="Ctrl"; | |
DwtKeyMap.META="Meta"; | |
DwtKeyMap.SHIFT="Shift"; | |
DwtKeyMap.deserialize=function(a){alert("DwtKeyMap.deserialize: NOT IMPLEMENTED") | |
}; | |
DwtKeyMap.serialize=function(a){alert("DwtKeyMap.serialize: NOT IMPLEMENTED") | |
}; | |
DwtKeyMap.MAP_DIALOG="dialog"; | |
DwtKeyMap.MAP_OPTION_DIALOG="optionDialog"; | |
DwtKeyMap.MAP_BUTTON="button"; | |
DwtKeyMap.MAP_LIST="list"; | |
DwtKeyMap.MAP_MENU="menu"; | |
DwtKeyMap.MAP_EDITOR="editor"; | |
DwtKeyMap.MAP_TOOLBAR_HORIZ="toolbarHorizontal"; | |
DwtKeyMap.MAP_TOOLBAR_VERT="toolbarVertical"; | |
DwtKeyMap.MAP_TAB_VIEW="tabView"; | |
DwtKeyMap.MAP_TREE="tree"; | |
DwtKeyMap.IS_MODIFIER={}; | |
DwtKeyMap.MOD_ORDER={}; | |
DwtKeyMap.ARROW_DOWN="ArrowDown"; | |
DwtKeyMap.ARROW_LEFT="ArrowLeft"; | |
DwtKeyMap.ARROW_RIGHT="ArrowRight"; | |
DwtKeyMap.ARROW_UP="ArrowUp"; | |
DwtKeyMap.BACKSLASH="Backslash"; | |
DwtKeyMap.BACKSPACE="Backspace"; | |
DwtKeyMap.COMMA="Comma"; | |
DwtKeyMap.DELETE="Del"; | |
DwtKeyMap.END="End"; | |
DwtKeyMap.ENTER="Enter"; | |
DwtKeyMap.ESC="Esc"; | |
DwtKeyMap.HOME="Home"; | |
DwtKeyMap.PGDOWN="PgDown"; | |
DwtKeyMap.PGUP="PgUp"; | |
DwtKeyMap.SEMICOLON="Semicolon"; | |
DwtKeyMap.SPACE="Space"; | |
DwtKeyMap.TAB="Tab"; | |
DwtKeyMap.ADD_SELECT_NEXT="AddNext"; | |
DwtKeyMap.ADD_SELECT_PREV="AddPrevious"; | |
DwtKeyMap.CANCEL="Cancel"; | |
DwtKeyMap.COLLAPSE="Collapse"; | |
DwtKeyMap.DBLCLICK="DoubleClick"; | |
DwtKeyMap.DELETE="Delete"; | |
DwtKeyMap.EXPAND="Expand"; | |
DwtKeyMap.GOTO_TAB="GoToTab"; | |
DwtKeyMap.HEADER1="Header1"; | |
DwtKeyMap.HEADER2="Header2"; | |
DwtKeyMap.HEADER3="Header3"; | |
DwtKeyMap.HEADER4="Header4"; | |
DwtKeyMap.HEADER5="Header5"; | |
DwtKeyMap.HEADER6="Header6"; | |
DwtKeyMap.INSERT_LINK="InsertLink"; | |
DwtKeyMap.JUSTIFY_CENTER="CenterJustify"; | |
DwtKeyMap.JUSTIFY_LEFT="LeftJustify"; | |
DwtKeyMap.JUSTIFY_RIGHT="RightJustify"; | |
DwtKeyMap.NEXT="Next"; | |
DwtKeyMap.NEXT_TAB="NextTab"; | |
DwtKeyMap.NO="No"; | |
DwtKeyMap.PAGE_UP="PageUp"; | |
DwtKeyMap.PAGE_DOWN="PageDown"; | |
DwtKeyMap.PARENTMENU="ParentMenu"; | |
DwtKeyMap.PREV="Previous"; | |
DwtKeyMap.PREV_TAB="PreviousTab"; | |
DwtKeyMap.SELECT_ALL="SelectAll"; | |
DwtKeyMap.SELECT="Select"; | |
DwtKeyMap.SELECT_CURRENT="SelectCurrent"; | |
DwtKeyMap.SELECT_FIRST="SelectFirst"; | |
DwtKeyMap.SELECT_LAST="SelectLast"; | |
DwtKeyMap.SELECT_NEXT="SelectNext"; | |
DwtKeyMap.SELECT_PREV="SelectPrevious"; | |
DwtKeyMap.SUBMENU="SubMenu"; | |
DwtKeyMap.SWITCH_MODE="SwitchMode"; | |
DwtKeyMap.TEXT_BOLD="Bold"; | |
DwtKeyMap.TEXT_ITALIC="Italic"; | |
DwtKeyMap.TEXT_UNDERLINE="Underline"; | |
DwtKeyMap.TEXT_STRIKETHRU="Strikethru"; | |
DwtKeyMap.YES="Yes"; | |
DwtKeyMap.GOTO_TAB_RE=new RegExp(DwtKeyMap.GOTO_TAB+"(\\d+)"); | |
DwtKeyMap.JOIN="+"; | |
DwtKeyMap.SEP=","; | |
DwtKeyMap.INHERIT="INHERIT"; | |
DwtKeyMap.prototype.getMap=function(){return this._map | |
}; | |
DwtKeyMap.prototype._load=function(t,j){var o=AjxEnv.platform.toLowerCase(); | |
for(var h in j){var m=h.split("."); | |
var g=m[m.length-1]; | |
if(g==="win"||g==="mac"||g==="linux"){if(g===o){var r=m.slice(0,m.length-1).join("."); | |
j[r]=j[h] | |
}j[h]=null | |
}var f=AjxStringUtil.trim(j[h]); | |
if(m[2]&&m[2]==="keycode"&&f&&f.indexOf("{")!==-1){j[h]=f.replace(/\{(\w)(\w+)\}/g,function(i,v,p){return v.toUpperCase()+p | |
}) | |
}}for(var h in j){var f=AjxStringUtil.trim(j[h]); | |
if(!f||(typeof j[h]!="string")){continue | |
}var m=h.split("."); | |
var a=m[m.length-1]; | |
var c=(m.length==2); | |
var n=c?null:m[1]; | |
if(m[0]=="keys"){this._processKeyDef(n,a,f); | |
continue | |
}if(a!=DwtKeyMap.INHERIT&&a!="keycode"){continue | |
}var l=m[0]; | |
if((this._checkedMap[l]===false)||(!this._checkedMap[l]&&!this._checkMap(l))){continue | |
}if(!t[l]){t[l]={} | |
}if(!this._checkAction(l,n)){continue | |
}var e=f.split(/\s*;\s*/); | |
for(var q=0; | |
q<e.length; | |
q++){var u=this._canonicalize(e[q]); | |
if(a==DwtKeyMap.INHERIT){var s=u.split(/\s*,\s*/); | |
var d=[]; | |
for(var k=0; | |
k<s.length; | |
k++){d[k]=s[k] | |
}t[l][m[1]]=d.join(",") | |
}else{if(a=="keycode"){t[l][u]=n | |
}}}}}; | |
DwtKeyMap.prototype._checkMap=function(c){var a=true; | |
this._checkedMap[c]=a; | |
return a | |
}; | |
DwtKeyMap.prototype._checkAction=function(a,c){return true | |
}; | |
DwtKeyMap.prototype._processKeyDef=function(a,d,c){if(!a||!d||!c){return | |
}if(d=="keycode"){DwtKeyMap.IS_MODIFIER[c]=true | |
}}; | |
DwtKeyMap.prototype._canonicalize=function(h){var f=h.split(DwtKeyMap.SEP); | |
var a=[]; | |
for(var d=0; | |
d<f.length; | |
d++){var c=f[d]; | |
var g=c.split(DwtKeyMap.JOIN); | |
if(g.length>2){var e=g.slice(0,g.length-1); | |
e.sort(function(l,j){var k=DwtKeyMap.MOD_ORDER[l]||0; | |
var i=DwtKeyMap.MOD_ORDER[j]||0; | |
return Number(k-i) | |
}); | |
e.push(g[g.length-1]); | |
a.push(e.join(DwtKeyMap.JOIN)) | |
}else{a.push(c) | |
}}return a.join(",") | |
} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtHoverMgr")){DwtHoverMgr=function(){this._hoverOverAction=new AjxTimedAction(this,this._notifyHoverOver); | |
this._hoverOutAction=new AjxTimedAction(this,this._notifyHoverOut); | |
this._ignoreHoverOverOnClickAction=new AjxTimedAction(this,this._resetIgnoreHoverOverOnClick) | |
}; | |
DwtHoverMgr.prototype.isDwtHoverMgr=true; | |
DwtHoverMgr.prototype.toString=function(){return"DwtHoverMgr" | |
}; | |
DwtHoverMgr.prototype._hoverOverDelay=750; | |
DwtHoverMgr.prototype._hoverOverActionId=-1; | |
DwtHoverMgr.prototype._hoverOutDelay=50; | |
DwtHoverMgr.prototype._ignoreHoverOverOnClickDelay=750; | |
DwtHoverMgr.prototype._hoverOutActionId=-1; | |
DwtHoverMgr.prototype._isHovering=false; | |
DwtHoverMgr.prototype.setHoverObject=function(a){this._hoverObject=a | |
}; | |
DwtHoverMgr.prototype.getHoverObject=function(){return this._hoverObject | |
}; | |
DwtHoverMgr.prototype.reset=function(){this._hoverObject=null; | |
this._hoverOverDelay=DwtHoverMgr.prototype._hoverOverDelay; | |
this._hoverOverData=null; | |
if(this._hoverOverActionId!=-1){AjxTimedAction.cancelAction(this._hoverOverActionId) | |
}this._hoverOverActionId=-1; | |
this._hoverOverListener=null; | |
this._hoverOutDelay=DwtHoverMgr.prototype._hoverOutDelay; | |
this._hoverOutData=null; | |
if(this._hoverOutActionId!=-1){AjxTimedAction.cancelAction(this._hoverOutActionId); | |
this._notifyHoverOut() | |
}this._hoverOutActionId=-1; | |
this._hoverOutListener=null | |
}; | |
DwtHoverMgr.prototype.isHovering=function(){return this._isHovering | |
}; | |
DwtHoverMgr.prototype.setHoverOverDelay=function(a){this._hoverOverDelay=a | |
}; | |
DwtHoverMgr.prototype.setHoverOverData=function(a){this._hoverOverData=a | |
}; | |
DwtHoverMgr.prototype.setHoverOverListener=function(a){this._hoverOverListener=a | |
}; | |
DwtHoverMgr.prototype.setHoverOutDelay=function(a){this._hoverOutDelay=a | |
}; | |
DwtHoverMgr.prototype.setHoverOutData=function(a){this._hoverOutData=a | |
}; | |
DwtHoverMgr.prototype.setHoverOutListener=function(a){this._hoverOutListener=a | |
}; | |
DwtHoverMgr.prototype.ignoreHoverOverOnClick=function(){this._ignoreHoverOverOnClick=true; | |
AjxTimedAction.scheduleAction(this._ignoreHoverOverOnClickAction,this._ignoreHoverOverOnClickDelay) | |
}; | |
DwtHoverMgr.prototype._resetIgnoreHoverOverOnClick=function(){this._ignoreHoverOverOnClick=false | |
}; | |
DwtHoverMgr.prototype.hoverOver=function(a,c){if(this._ignoreHoverOverOnClick){return | |
}this._isHovering=true; | |
if(this._hoverOverActionId!=-1){AjxTimedAction.cancelAction(this._hoverOverActionId) | |
}this._hoverOverAction.args=[a,c]; | |
this._hoverOverActionId=AjxTimedAction.scheduleAction(this._hoverOverAction,this._hoverOverDelay) | |
}; | |
DwtHoverMgr.prototype.hoverOut=function(){this._isHovering=false; | |
if(this._hoverOverActionId!=-1){AjxTimedAction.cancelAction(this._hoverOverActionId) | |
}if(this._hoverOutActionId==-1){if(this._hoverOutDelay>0){this._hoverOutActionId=AjxTimedAction.scheduleAction(this._hoverOutAction,this._hoverOutDelay) | |
}else{this._notifyHoverOut() | |
}}}; | |
DwtHoverMgr.prototype._notifyHoverOver=function(){this._hoverOverActionId=-1; | |
if(this._hoverOverListener!=null){var a=this._hoverOverAction.args[0]; | |
var d=this._hoverOverAction.args[1]; | |
var c=new DwtHoverEvent(DwtEvent.HOVEROVER,this._hoverOverDelay,this._hoverOverData,a,d); | |
this._hoverOverListener.handleEvent(c) | |
}}; | |
DwtHoverMgr.prototype._notifyHoverOut=function(){this._hoverOutActionId=-1; | |
if(this._hoverOutListener!=null){var a=new DwtHoverEvent(DwtEvent.HOVEROUT,this._hoverOutDelay,this._hoverOutData); | |
this._hoverOutListener.handleEvent(a) | |
}} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtControl")){DwtControl=function(c){if(arguments.length==0){return | |
}c=Dwt.getParams(arguments,DwtControl.PARAMS); | |
var a=this.parent=c.parent; | |
if(a&&!(a.isDwtComposite)){throw new DwtException("Parent must be a subclass of Composite",DwtException.INVALIDPARENT,"DwtControl") | |
}this.shell=null; | |
this._data={}; | |
this._eventMgr=new AjxEventMgr(); | |
this._disposed=false; | |
this._propagateEvent={}; | |
this._propagateEvent[DwtEvent.ONMOUSEWHEEL]=true; | |
if(!a){return | |
}this._className=c.className||"DwtControl"; | |
this.__posStyle=c.posStyle; | |
if(c.id){this._htmlElId=c.id | |
}this.isFocusable=(c.isFocusable!==false); | |
if(c.role!=null){this.role=c.role | |
}this.__index=c.index; | |
this.__parentElement=c.parentElement; | |
this._enabled=false; | |
this._dragging=null; | |
this._dndProxy=null; | |
this._hasFocus=false; | |
if(!c.deferred){this.__initCtrl() | |
}this._hoverOverListener=new AjxListener(this,this.__handleHoverOver); | |
this._hoverOutListener=new AjxListener(this,this.__handleHoverOut); | |
this._dblClickIsolation=false; | |
this._ignoreInternalOverOut=false; | |
this.TEMPLATE=c.template||this.TEMPLATE | |
}; | |
DwtControl.prototype.isDwtControl=true; | |
DwtControl.prototype.toString=function(){return"DwtControl" | |
}; | |
DwtControl.prototype.isFocusable=null; | |
DwtControl.PARAMS=["parent","className","posStyle","deferred","id","index","template"]; | |
DwtControl.ALL_BY_ID={}; | |
DwtControl.NORMAL=""; | |
DwtControl.ACTIVE="ZActive"; | |
DwtControl.FOCUSED="ZFocused"; | |
DwtControl.DISABLED="ZDisabled"; | |
DwtControl.HOVER="ZHover"; | |
DwtControl.SELECTED="ZSelected"; | |
DwtControl.DEFAULT="ZDefault"; | |
DwtControl.ERROR="ZError"; | |
DwtControl._STATES=[DwtControl.ACTIVE,DwtControl.FOCUSED,DwtControl.DISABLED,DwtControl.HOVER,DwtControl.SELECTED,DwtControl.DEFAULT,DwtControl.ERROR]; | |
DwtControl._RE_STATES=new RegExp("\\b("+DwtControl._STATES.join("|")+")\\b","g"); | |
DwtControl._RE_STATE=AjxUtil.arrayAsHash(DwtControl._STATES,function(a){return new RegExp("\\b"+a+"\\b","g") | |
}); | |
DwtControl._ARIA_STATES={}; | |
DwtControl._ARIA_STATES[DwtControl.DISABLED]="aria-disabled"; | |
DwtControl._ARIA_STATES[DwtControl.SELECTED]="aria-selected"; | |
DwtControl._ARIA_STATES[DwtControl.ERROR]="aria-invalid"; | |
DwtControl.useBrowserTooltips=false; | |
DwtControl.STATIC_STYLE=Dwt.STATIC_STYLE; | |
DwtControl.ABSOLUTE_STYLE=Dwt.ABSOLUTE_STYLE; | |
DwtControl.RELATIVE_STYLE=Dwt.RELATIVE_STYLE; | |
DwtControl.FIXED_STYLE=Dwt.FIXED_STYLE; | |
DwtControl.CLIP=Dwt.CLIP; | |
DwtControl.VISIBLE=Dwt.VISIBLE; | |
DwtControl.SCROLL=Dwt.SCROLL; | |
DwtControl.FIXED_SCROLL=Dwt.FIXED_SCROLL; | |
DwtControl._NO_DRAG="NO_DRAG"; | |
DwtControl._DRAGGING="DRAGGING"; | |
DwtControl._DRAG_REJECTED="DRAG_REJECTED"; | |
DwtControl.__DRAG_THRESHOLD=3; | |
DwtControl.__TOOLTIP_THRESHOLD=5; | |
DwtControl.__DND_HOVER_DELAY=750; | |
DwtControl.__controlEvent=new DwtControlEvent(); | |
DwtControl.__DBL_CLICK_TIMEOUT=300; | |
DwtControl.prototype._displayState=""; | |
DwtControl.prototype.addControlListener=function(a){this.addListener(DwtEvent.CONTROL,a) | |
}; | |
DwtControl.prototype.removeControlListener=function(a){this.removeListener(DwtEvent.CONTROL,a) | |
}; | |
DwtControl.prototype.addDisposeListener=function(a){this.addListener(DwtEvent.DISPOSE,a) | |
}; | |
DwtControl.prototype.removeDisposeListener=function(a){this.removeListener(DwtEvent.DISPOSE,a) | |
}; | |
DwtControl.prototype.addListener=function(c,d,a){return this._eventMgr.addListener(c,d,a) | |
}; | |
DwtControl.prototype.removeListener=function(a,c){return this._eventMgr.removeListener(a,c) | |
}; | |
DwtControl.prototype.removeAllListeners=function(a){return this._eventMgr.removeAll(a) | |
}; | |
DwtControl.prototype.isListenerRegistered=function(a){return this._eventMgr.isListenerRegistered(a) | |
}; | |
DwtControl.prototype.notifyListeners=function(a,c){return this._eventMgr.notifyListeners(a,c) | |
}; | |
DwtControl.prototype.dispose=function(){if(this._disposed){return | |
}if(this.parent&&this.parent.isDwtComposite){this.parent.removeChild(this) | |
}this._elRef=null; | |
DwtControl.ALL_BY_ID[this._htmlElId]=null; | |
delete DwtControl.ALL_BY_ID[this._htmlElId]; | |
this._disposed=true; | |
var a=new DwtDisposeEvent(); | |
a.dwtObj=this; | |
this.notifyListeners(DwtEvent.DISPOSE,a); | |
this._eventMgr.clearAllEvents() | |
}; | |
DwtControl.prototype.getDocument=function(){return document | |
}; | |
DwtControl.prototype.getTabGroupMember=function(){return this.tabGroupMember||this | |
}; | |
DwtControl.prototype.getData=function(a){return this._data[a] | |
}; | |
DwtControl.prototype.setData=function(a,c){this._data[a]=c | |
}; | |
DwtControl.prototype.isDisposed=function(){return this._disposed | |
}; | |
DwtControl.prototype.isInitialized=function(){return this.__ctrlInited | |
}; | |
DwtControl.prototype.focus=function(){if(!this._checkState()){return | |
}var c=this.getFocusElement(); | |
if(c&&c.focus){AjxTimedAction.scheduleAction(this._focusAction); | |
var a=this.getScrollContainer(),d=a&&a.scrollTop; | |
c.focus(); | |
if(d>0){a.scrollTop=d | |
}}return this | |
}; | |
DwtControl.prototype.blur=function(){if(!this._checkState()){return | |
}var a=this.getFocusElement(); | |
if(a&&a.blur){AjxTimedAction.scheduleAction(this._blurAction); | |
a.blur() | |
}return this | |
}; | |
DwtControl.prototype.hasFocus=function(){return this._hasFocus | |
}; | |
DwtControl.prototype.handleKeyAction=function(a,c){return false | |
}; | |
DwtControl.prototype.reparent=function(c,a){if(!this._checkState()){return | |
}var d=this.getHtmlElement(); | |
this.parent.removeChild(this,true); | |
DwtComposite._pendingElements[this._htmlElId]=d; | |
c.addChild(this,a); | |
this.parent=c | |
}; | |
DwtControl.prototype.reparentHtmlElement=function(d,a){if(typeof d=="string"){d=document.getElementById(d) | |
}if(!d){return | |
}var c=this.getHtmlElement(); | |
if(a==null){d.appendChild(c) | |
}else{if(typeof a=="object"){d.insertBefore(c,a) | |
}else{if(d.childNodes[a]){d.insertBefore(c,d.childNodes[a]) | |
}else{d.appendChild(c) | |
}}}}; | |
DwtControl.prototype.setHandler=function(c,a){if(!this._checkState()){return | |
}var d=this.getHtmlElement(); | |
Dwt.setHandler(d,c,a) | |
}; | |
DwtControl.prototype.clearHandler=function(a){if(!this._checkState()){return | |
}var c=this.getHtmlElement(); | |
Dwt.clearHandler(c,a) | |
}; | |
DwtControl.prototype.setEventPropagation=function(a,d){d=AjxUtil.toArray(d); | |
for(var c=0; | |
c<d.length; | |
c++){this._propagateEvent[d[c]]=a | |
}}; | |
DwtControl.prototype.getBounds=function(){if(!this._checkState()){return | |
}return Dwt.getBounds(this.getHtmlElement()) | |
}; | |
DwtControl.prototype.getInsetBounds=function(){if(!this._checkState()){return | |
}return Dwt.getInsetBounds(this.getHtmlElement()) | |
}; | |
DwtControl.prototype.getInsets=function(){if(!this._checkState()){return | |
}return Dwt.getInsets(this.getHtmlElement()) | |
}; | |
DwtControl.prototype.getMargins=function(){if(!this._checkState()){return | |
}return Dwt.getMargins(this.getHtmlElement()) | |
}; | |
DwtControl.prototype.setBounds=function(d,g,e,c){if(!this._checkState()){return | |
}var f=this.getHtmlElement(); | |
if(this.isListenerRegistered(DwtEvent.CONTROL)){this.__controlEvent.reset(DwtControlEvent.RESIZE|DwtControlEvent.MOVE); | |
var a=Dwt.getBounds(f); | |
this.__controlEvent.oldX=a.x; | |
this.__controlEvent.oldY=a.y; | |
this.__controlEvent.oldWidth=a.width; | |
this.__controlEvent.oldHeight=a.height; | |
this.setLocation(d,g); | |
this.setSize(e,c); | |
a=Dwt.getBounds(f); | |
this.__controlEvent.newX=a.x; | |
this.__controlEvent.newY=a.y; | |
this.__controlEvent.newWidth=(AjxUtil.isNumber(e))?e:a.width; | |
this.__controlEvent.newHeight=(AjxUtil.isNumber(c))?c:a.height; | |
this.__controlEvent.requestedWidth=e; | |
this.__controlEvent.requestedHeight=c; | |
this.notifyListeners(DwtEvent.CONTROL,this.__controlEvent) | |
}else{this.setLocation(d,g); | |
this.setSize(e,c) | |
}return this | |
}; | |
DwtControl.prototype.getClassName=function(){return this._className | |
}; | |
DwtControl.prototype.setClassName=function(c){if(!this._checkState()){return | |
}this._className=c; | |
var a=this.getHtmlElement(); | |
a.className=c; | |
Dwt.addClass(a,this._displayState) | |
}; | |
DwtControl.prototype.addClassName=function(a){Dwt.addClass(this.getHtmlElement(),a) | |
}; | |
DwtControl.prototype.delClassName=function(a,c){Dwt.delClass(this.getHtmlElement(),a,c) | |
}; | |
DwtControl.prototype.condClassName=function(d,a,c){Dwt.condClass(this.getHtmlElement(),d,a,c) | |
}; | |
DwtControl.prototype.setDisplayState=function(f){if(!this._enabled){f=DwtControl.DISABLED | |
}if(arguments.length>1){var c=[]; | |
for(var e=0; | |
e<arguments.length; | |
e++){c.push(arguments[e]) | |
}f=c.join(" ") | |
}if(this._displayState==f){return | |
}var d=this._displayState; | |
this._displayState=f; | |
Dwt.delClass(this.getHtmlElement(),DwtControl._RE_STATES,f); | |
AjxUtil.foreach(DwtControl._ARIA_STATES,(function(a,g){if(DwtControl._RE_STATE[g].test(this._displayState)){this.setAttribute(a,true) | |
}else{this.removeAttribute(a) | |
}}).bind(this)); | |
if(this.isListenerRegistered(DwtEvent.STATE_CHANGE)){this.__controlEvent.reset(DwtControlEvent.STATE); | |
this.__controlEvent.oldState=d; | |
this.__controlEvent.newState=f; | |
this.__controlEvent.dwtObj=this; | |
this.notifyListeners(DwtEvent.STATE_CHANGE,this.__controlEvent) | |
}}; | |
DwtControl.prototype.showAlert=function(a){if(a&&!this._alert){this.delClassName(null,"ZAlert") | |
}else{if(!a&&this._alert){this.delClassName("ZAlert",null) | |
}}this._alert=a | |
}; | |
DwtControl.prototype.isAlertShown=function(){return this._alert | |
}; | |
DwtControl.prototype._createHtmlFromTemplate=function(a,d){this.getHtmlElement().innerHTML=AjxTemplate.expand(a,d); | |
var e=AjxTemplate.getParams(a); | |
var c=e&&e["class"]; | |
if(c){c=[this._className,c].join(" "); | |
this.setClassName(c) | |
}}; | |
DwtControl.prototype.getCursor=function(){if(!this._checkState()){return | |
}return Dwt.getCursor(this.getHtmlElement()) | |
}; | |
DwtControl.prototype.setCursor=function(a){if(!this._checkState()){return | |
}Dwt.setCursor(this.getHtmlElement(),a) | |
}; | |
DwtControl.prototype.getDragSource=function(){return this._dragSource | |
}; | |
DwtControl.prototype.setDragSource=function(a){this._dragSource=a; | |
if(a&&!this._ctrlCaptureObj){this.__initCapture(); | |
this._dndHoverAction=new AjxTimedAction(null,this.__dndDoHover) | |
}}; | |
DwtControl.prototype.getDropTarget=function(){return this._dropTarget | |
}; | |
DwtControl.prototype.setDropTarget=function(a){this._dropTarget=a | |
}; | |
DwtControl.prototype.getDragBox=function(){return this._dragBox | |
}; | |
DwtControl.prototype.setDragBox=function(a){this._dragBox=a; | |
if(a&&!this._ctrlCaptureObj){this.__initCapture() | |
}}; | |
DwtControl.prototype.__initCapture=function(a){this._ctrlCaptureObj=new DwtMouseEventCapture({targetObj:this,id:"DwtControl",mouseOverHdlr:DwtControl.__mouseOverHdlr,mouseDownHdlr:DwtControl.__mouseDownHdlr,mouseMoveHdlr:DwtControl.__mouseMoveHdlr,mouseUpHdlr:DwtControl.__mouseUpHdlr,mouseOutHdlr:DwtControl.__mouseOutHdlr}) | |
}; | |
DwtControl.prototype.getEnabled=function(){if(!this._checkState()){return | |
}return this._enabled | |
}; | |
DwtControl.prototype.setEnabled=function(a,c){if(!this._checkState()){return | |
}if(a!=this._enabled){this._enabled=a; | |
this.setDisplayState(a?DwtControl.NORMAL:DwtControl.DISABLED); | |
if(c){this.getHtmlElement().disabled=!a | |
}}}; | |
DwtControl.prototype.getHTMLElId=function(){return this._htmlElId | |
}; | |
DwtControl.prototype.getHtmlElement=function(){if(!this._checkState()){return | |
}var a=this._elRef||document.getElementById(this._htmlElId); | |
if(a==null){a=DwtComposite._pendingElements[this._htmlElId] | |
}else{if(!a._rendered){delete DwtComposite._pendingElements[this._htmlElId]; | |
a._rendered=true | |
}}return this._elRef=a | |
}; | |
DwtControl.prototype.getFocusElement=function(){return this.isFocusable?this._focusElement:null | |
}; | |
DwtControl.prototype.setFocusElement=function(d){if(!this.isFocusable){return | |
}var a=(document.activeElement===this._focusElement),c=d||(this.getInputElement&&this.getInputElement())||this.getHtmlElement(); | |
if(this._focusElement&&this._focusElement!==c){this._makeFocusable(this._focusElement,false) | |
}this._focusElement=c; | |
if(c){this._makeFocusable(this._focusElement,true); | |
if(a){c.focus() | |
}}}; | |
DwtControl.fromElement=function(a){return DwtControl.ALL_BY_ID[a.id] | |
}; | |
DwtControl.fromElementId=function(a){return DwtControl.ALL_BY_ID[a] | |
}; | |
DwtControl.findControl=function(c){if(AjxEnv.isFirefox3_5up&&!AjxEnv.isFirefox3_6up){var a=HTMLElement.prototype.toString.call(c); | |
if(a=="[xpconnect wrapped native prototype]"||a=="[object XULElement]"){return null | |
}}try{while(c){if(c.id&&DwtControl.ALL_BY_ID[c.id]){return DwtControl.ALL_BY_ID[c.id] | |
}c=c.parentNode | |
}}catch(d){}return null | |
}; | |
DwtControl.getTargetControl=function(a,d){var c=DwtUiEvent.getTarget(a,d); | |
return c?DwtControl.findControl(c):null | |
}; | |
DwtControl.prototype.setHtmlElementId=function(c){if(this._disposed){return | |
}if(this.__ctrlInited){var a=this.getHtmlElement(); | |
if(!a._rendered){delete DwtComposite._pendingElements[this._htmlElId]; | |
DwtComposite._pendingElements[c]=a | |
}else{delete DwtControl.ALL_BY_ID[this._htmlElId]; | |
DwtControl.ALL_BY_ID[c]=this | |
}a.id=c | |
}this._htmlElId=c | |
}; | |
DwtControl.prototype.getX=function(){if(!this._checkState()){return | |
}return Dwt.getLocation(this.getHtmlElement()).x | |
}; | |
DwtControl.prototype.getXW=function(){if(!this._checkState()){return | |
}var a=this.getBounds(); | |
return a.x+a.width | |
}; | |
DwtControl.prototype.getY=function(){if(!this._checkState()){return | |
}return Dwt.getLocation(this.getHtmlElement()).y | |
}; | |
DwtControl.prototype.getYH=function(){if(!this._checkState()){return | |
}var a=this.getBounds(); | |
return a.y+a.height | |
}; | |
DwtControl.prototype.getPosition=function(){if(!this._checkState()){return | |
}return Dwt.getPosition(this.getHtmlElement()) | |
}; | |
DwtControl.prototype.setPosition=function(a){if(!this._checkState()){return | |
}return Dwt.setPosition(this.getHtmlElement(),a) | |
}; | |
DwtControl.prototype.getLocation=function(){if(!this._checkState()){return | |
}return Dwt.getLocation(this.getHtmlElement()) | |
}; | |
DwtControl.prototype.setLocation=function(a,e){if(!this._checkState()){return | |
}if(this.isListenerRegistered(DwtEvent.CONTROL)){var c=this.getHtmlElement(); | |
this.__controlEvent.reset(DwtControlEvent.MOVE); | |
var d=Dwt.getLocation(c); | |
this.__controlEvent.oldX=d.x; | |
this.__controlEvent.oldY=d.y; | |
Dwt.setLocation(c,a,e); | |
d=Dwt.getLocation(c); | |
this.__controlEvent.newX=d.x; | |
this.__controlEvent.newY=d.y; | |
this.notifyListeners(DwtEvent.CONTROL,this.__controlEvent) | |
}else{Dwt.setLocation(this.getHtmlElement(),a,e) | |
}return this | |
}; | |
DwtControl.prototype.getScrollStyle=function(){if(!this._checkState()){return | |
}return Dwt.getScrollStyle(this.getHtmlElement()) | |
}; | |
DwtControl.prototype.setScrollStyle=function(a){if(!this._checkState()){return | |
}Dwt.setScrollStyle(this.getHtmlElement(),a) | |
}; | |
DwtControl.prototype.getScrollContainer=function(){return this.parent&&this.parent.getHtmlElement() | |
}; | |
DwtControl.prototype.setPosition=function(a){if(!this._checkState()){return | |
}if(a==DwtControl.STATIC_STYLE||a==DwtControl.ABSOLUTE_STYLE||a==DwtControl.RELATIVE_STYLE){this.__posStyle=a; | |
Dwt.setPosition(this.getHtmlElement(),a) | |
}}; | |
DwtControl.prototype.getW=function(){if(!this._checkState()){return | |
}return Dwt.getSize(this.getHtmlElement()).x | |
}; | |
DwtControl.prototype.getH=function(){if(!this._checkState()){return | |
}return Dwt.getSize(this.getHtmlElement()).y | |
}; | |
DwtControl.prototype.getSize=function(a){if(!this._checkState()){return | |
}return Dwt.getSize(this.getHtmlElement(),null,a) | |
}; | |
DwtControl.prototype.getOuterSize=function(){if(!this._checkState()){return | |
}return Dwt.getOuterSize(this.getHtmlElement(),null) | |
}; | |
DwtControl.prototype.setSize=function(c,a){if(!this._checkState()){return | |
}if(this.isListenerRegistered(DwtEvent.CONTROL)){var e=this.getHtmlElement(); | |
this.__controlEvent.reset(DwtControlEvent.RESIZE); | |
var d=Dwt.getSize(e); | |
this.__controlEvent.oldWidth=d.x; | |
this.__controlEvent.oldHeight=d.y; | |
Dwt.setSize(e,c,a); | |
d=Dwt.getSize(e); | |
this.__controlEvent.newWidth=d.x; | |
this.__controlEvent.newHeight=d.y; | |
this.notifyListeners(DwtEvent.CONTROL,this.__controlEvent) | |
}else{Dwt.setSize(this.getHtmlElement(),c,a) | |
}return this | |
}; | |
DwtControl.prototype.getToolTipContent=function(a){if(this._disposed){return null | |
}return this.__toolTipContent | |
}; | |
DwtControl.prototype.setToolTipContent=function(c,a){if(this._disposed){return | |
}if(c&&(typeof(c)=="string")&&DwtControl.useBrowserTooltips){if(!c||(!c.match(/[\n\r\t]/)&&!c.match(/<[a-zA-Z]+/))){var d=this.getHtmlElement(); | |
if(d){d.title=c; | |
this._browserToolTip=true; | |
return | |
}}}this._browserToolTip=false; | |
this.__toolTipContent=c | |
}; | |
DwtControl.prototype.getVisible=function(){if(!this._checkState()){return | |
}return Dwt.getVisible(this.getHtmlElement()) | |
}; | |
DwtControl.prototype.setVisible=function(a){if(!this._checkState()){return | |
}Dwt.setVisible(this.getHtmlElement(),a) | |
}; | |
DwtControl.prototype.setVisibility=function(a){if(!this._checkState()){return | |
}Dwt.setVisibility(this.getHtmlElement(),a) | |
}; | |
DwtControl.prototype.getVisibility=function(){if(!this._checkState()){return | |
}return Dwt.getVisibility(this.getHtmlElement()) | |
}; | |
DwtControl.prototype.getZIndex=function(a){if(!this._checkState()){return | |
}return Dwt.getZIndex(this.getHtmlElement(),a) | |
}; | |
DwtControl.prototype.setZIndex=function(a){if(!this._checkState()){return | |
}Dwt.setZIndex(this.getHtmlElement(),a) | |
}; | |
DwtControl.prototype.zShow=function(a){this.setZIndex(a?Dwt.Z_VIEW:Dwt.Z_HIDDEN) | |
}; | |
DwtControl.prototype.setDisplay=function(a){if(!this._checkState()){return | |
}Dwt.setDisplay(this.getHtmlElement(),a) | |
}; | |
DwtControl.prototype.setOpacity=function(a){if(!this._checkState()){return | |
}Dwt.setOpacity(this.getHtmlElement(),a) | |
}; | |
DwtControl.prototype.getOpacity=function(){if(!this._checkState()){return | |
}return Dwt.getOpacity(this.getHtmlElement()) | |
}; | |
DwtControl.prototype.preventSelection=function(a){return !this.__isInputEl(a) | |
}; | |
DwtControl.prototype.preventContextMenu=function(a){return a?(!this.__isInputEl(a)):true | |
}; | |
DwtControl.prototype.getContent=function(){return this.getHtmlElement().innerHTML | |
}; | |
DwtControl.prototype.setContent=function(a){if(a){this.getHtmlElement().innerHTML=a | |
}}; | |
DwtControl.prototype.clearContent=function(){this.getHtmlElement().innerHTML="" | |
}; | |
DwtControl.prototype.appendElement=function(c){var a=AjxUtil.isString(c)?document.getElementById(c):c; | |
if(a){a.appendChild(this.getHtmlElement(),a) | |
}}; | |
DwtControl.prototype.replaceElement=function(e,a,f){var c=AjxUtil.isString(e)?document.getElementById(e):e; | |
if(c){var d=this.getHtmlElement(); | |
c.parentNode.replaceChild(d,c); | |
this._replaceElementHook(c,d,a,f) | |
}}; | |
DwtControl.prototype._replaceElementHook=function(c,f,a,i){if((a==null||a)&&c.className){Dwt.addClass(f,c.className) | |
}if(i==null||i){var d=c.getAttribute("style")||c.style; | |
if(d){if(AjxUtil.isString(d)){f.setAttribute("style",[f.getAttribute("style"),d].join(";")) | |
}else{if(AjxUtil.isString(d.cssText)){if(d.cssText){f.setAttribute("style",[f.getAttribute("style"),d.cssText].join(";")) | |
}}else{for(var g in d){if(d[g]){try{f.style[g]=d[g] | |
}catch(h){}}}}}}}}; | |
DwtControl.prototype._blur=function(){}; | |
DwtControl.prototype._focus=function(){}; | |
DwtControl.prototype._focusByMouseUpEvent=function(a){if(this.getEnabled()){this.shell.getKeyboardMgr().grabFocus(this) | |
}}; | |
DwtControl.prototype._focusByMouseDownEvent=function(a){this._duringFocusByMouseDown=true; | |
this._focusByMouseUpEvent(a); | |
this._duringFocusByMouseDown=false | |
}; | |
DwtControl.prototype._getDragOp=function(a){return a.ctrlKey?Dwt.DND_DROP_COPY:Dwt.DND_DROP_MOVE | |
}; | |
DwtControl.prototype._getDragProxy=function(a){return null | |
}; | |
DwtControl.prototype.getDragSelectionBox=function(a){if(!this._dragSelectionBox){var c=this._dragSelectionBox=document.createElement("div"); | |
c.className="dndSelectionBox"; | |
Dwt.setPosition(c,Dwt.ABSOLUTE_STYLE); | |
this.shell.getHtmlElement().appendChild(c); | |
Dwt.setZIndex(c,Dwt.Z_DND) | |
}return this._dragSelectionBox | |
}; | |
DwtControl.prototype._setDragProxyState=function(a){if(this._dndProxy){Dwt.condClass(this._dndProxy,a,DwtCssStyle.DROPPABLE,DwtCssStyle.NOT_DROPPABLE) | |
}}; | |
DwtControl.__junkIconId=0; | |
DwtControl.prototype._destroyDragProxy=function(a){if(a){if(a.parentNode){a.parentNode.removeChild(a) | |
}else{a.style.zIndex=-100; | |
a.id="DwtJunkIcon"+DwtControl.__junkIconId++; | |
a=null | |
}}}; | |
DwtControl.prototype.destroyDragSelectionBox=function(){var a=this._dragSelectionBox; | |
if(a&&a.parentNode){a.parentNode.removeChild(a) | |
}this._dragSelectionBox=null | |
}; | |
DwtControl.prototype._isValidDragObject=function(a){return true | |
}; | |
DwtControl.prototype._dragEnter=function(a){}; | |
DwtControl.prototype._dragOver=function(a){}; | |
DwtControl.prototype._dragHover=function(a){}; | |
DwtControl.prototype._dragLeave=function(a){}; | |
DwtControl.prototype._drop=function(a){}; | |
DwtControl.prototype._makeFocusable=function(a,c){c=(c!==false); | |
this._setEventHdlrs([DwtEvent.ONFOCUS,DwtEvent.ONBLUR],true,a); | |
if(c){this._setEventHdlrs([DwtEvent.ONFOCUS,DwtEvent.ONBLUR],false,a); | |
a.tabIndex=0 | |
}else{a.removeAttribute("tabIndex") | |
}}; | |
DwtControl.prototype._setKeyPressEventHdlr=function(a,c){this._setEventHdlrs([DwtEvent.ONKEYPRESS],a,c) | |
}; | |
DwtControl.prototype._setMouseEventHdlrs=function(a,c){this._setEventHdlrs(DwtEvent.MOUSE_EVENTS,a,c) | |
}; | |
DwtControl.prototype._setKeyEventHdlrs=function(a,c){this._setEventHdlrs(DwtEvent.KEY_EVENTS,a,c) | |
}; | |
DwtControl.prototype._setEventHdlrs=function(e,a,d){if(!this._checkState()){return | |
}var f=d||this.getHtmlElement(); | |
for(var c=0; | |
c<e.length; | |
c++){if(a!==true){Dwt.setHandler(f,e[c],DwtControl.__HANDLER[e[c]]) | |
}else{Dwt.clearHandler(f,e[c]) | |
}}}; | |
DwtControl.prototype._setMouseEvents=function(){var a=[DwtEvent.ONCONTEXTMENU,DwtEvent.ONCLICK,DwtEvent.ONDBLCLICK,DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEMOVE,DwtEvent.ONMOUSEUP,DwtEvent.ONSELECTSTART]; | |
if(AjxEnv.isIE){a.push(DwtEvent.ONMOUSEENTER,DwtEvent.ONMOUSELEAVE) | |
}else{a.push(DwtEvent.ONMOUSEOVER,DwtEvent.ONMOUSEOUT) | |
}this._setEventHdlrs(a) | |
}; | |
DwtControl.prototype._setMouseEvent=function(c,a){c.reset(); | |
a.ersatz=true; | |
DwtUiEvent.copy(c,a); | |
c.button=a.button | |
}; | |
DwtControl.prototype._getStopPropagationValForMouseEv=function(a){return true | |
}; | |
DwtControl.prototype._getEventReturnValForMouseEv=function(a){return false | |
}; | |
DwtControl.prototype._checkState=function(){if(this._disposed){return false | |
}if(!this.__ctrlInited){this.__initCtrl() | |
}return true | |
}; | |
DwtControl.prototype._position=function(e){this._checkState(); | |
var d=this.shell.getSize(); | |
var c=this.getSize(); | |
var a,f; | |
if(c){if(!e){a=Math.round((d.x-c.x)/2); | |
f=Math.round((d.y-c.y)/2) | |
}else{a=e.x; | |
f=e.y | |
}if((a+c.x)>d.x){a=d.x-c.x | |
}if((f+c.y)>d.y){f=d.y-c.y | |
}this.setLocation(a,f) | |
}}; | |
DwtControl._dndScrollCallback=function(d,h){var c=d.container; | |
if(!c){return | |
}var l=h.dwtObj&&h.dwtObj._dndScrollId; | |
if(h.type=="mouseup"||!l||(d.id&&l!=d.id)){if(c._dndScrollActionId!=-1){AjxTimedAction.cancelAction(c._dndScrollActionId); | |
c._dndScrollActionId=-1 | |
}return | |
}c._scrollAmt=0; | |
if(c.clientHeight<c.scrollHeight){var e=Dwt.toWindow(c,0,0,null,null,DwtPoint.tmp).y; | |
var m=e+c.scrollTop; | |
var i=c.scrollTop; | |
var j=h.docY-m; | |
var f=(c.clientWidth<c.scrollWidth)?d.threshold+Dwt.SCROLLBAR_WIDTH:d.threshold; | |
var g=(j<=f)?-1*d.amount:0; | |
if(g==0){var a=Dwt.getSize(c,DwtPoint.tmp).y; | |
var k=m+a; | |
j=k-h.docY; | |
g=(j<=f)?d.amount:0 | |
}c._scrollAmt=g; | |
if(g){if(!c._dndScrollAction){c._dndScrollAction=new AjxTimedAction(null,DwtControl._dndScroll,[d]); | |
c._dndScrollActionId=-1 | |
}if(c._dndScrollActionId==-1){c._dndScrollActionId=AjxTimedAction.scheduleAction(c._dndScrollAction,0) | |
}}else{if(c._dndScrollActionId!=-1){AjxTimedAction.cancelAction(c._dndScrollActionId); | |
c._dndScrollActionId=-1 | |
}}}}; | |
DwtControl._dndScroll=function(f){var c=f.container; | |
var e=Dwt.toWindow(c,0,0,null,null,DwtPoint.tmp).y; | |
var d=Dwt.getSize(c,DwtPoint.tmp).y; | |
var a=c.scrollTop; | |
if((c._scrollAmt<0&&a>0)||(c._scrollAmt>0&&(a+d<c.scrollHeight))){c.scrollTop+=c._scrollAmt; | |
c._dndScrollActionId=AjxTimedAction.scheduleAction(c._dndScrollAction,f.interval) | |
}}; | |
DwtControl.__keyPressHdlr=function(d){var e=e?e:DwtControl.getTargetControl(d); | |
if(!e){return false | |
}if(e.__hasToolTipContent()){var c=DwtShell.getShell(window); | |
var a=c.getHoverMgr(); | |
a.setHoverOutListener(e._hoverOutListener); | |
a.hoverOut(); | |
e.__tooltipClosed=false | |
}}; | |
DwtControl.__keyUpHdlr=function(a){return DwtKeyboardMgr.__keyUpHdlr.apply(this,arguments) | |
}; | |
DwtControl.__keyDownHdlr=function(a){return DwtKeyboardMgr.__keyDownHdlr.apply(this,arguments) | |
}; | |
DwtControl.__focusHdlr=function(c,a,d){d=d||DwtControl.getTargetControl(c); | |
if(!d){return false | |
}d._cancelFocusBlurActions(); | |
return d.__doFocus(c) | |
}; | |
DwtControl.__blurHdlr=function(c,a,d){d=d||DwtControl.getTargetControl(c); | |
if(!d){return false | |
}d._cancelFocusBlurActions(); | |
return d.__doBlur(c) | |
}; | |
DwtControl.prototype._cancelFocusBlurActions=function(){if(this._focusAction._id!==-1){AjxTimedAction.cancelAction(this._focusAction._id) | |
}if(this._blurAction._id!==-1){AjxTimedAction.cancelAction(this._blurAction._id) | |
}}; | |
DwtControl.prototype.__hasToolTipContent=function(){if(this._disposed){return false | |
}return Boolean(!this._browserToolTip&&(this.__toolTipContent||(this.getToolTipContent!=DwtControl.prototype.getToolTipContent))) | |
}; | |
DwtControl.prototype.__doFocus=function(a){if(!this._checkState()){return false | |
}this._hasFocus=true; | |
this.shell.getKeyboardMgr().updateFocus(this,a); | |
if(this.isListenerRegistered(DwtEvent.ONFOCUS)){a=a||DwtShell.focusEvent; | |
a.dwtObj=this; | |
a.state=DwtFocusEvent.FOCUS; | |
this.notifyListeners(DwtEvent.ONFOCUS,a) | |
}this._focus(); | |
return true | |
}; | |
DwtControl.prototype.__doBlur=function(a){if(!this._checkState()){return false | |
}this._hasFocus=false; | |
if(this.isListenerRegistered(DwtEvent.ONBLUR)){a=a||DwtShell.focusEvent; | |
a.dwtObj=this; | |
a.state=DwtFocusEvent.BLUR; | |
this.notifyListeners(DwtEvent.ONBLUR,a) | |
}this._blur(); | |
return true | |
}; | |
DwtControl.__clickHdlr=function(c){var d=DwtControl.getTargetControl(c); | |
if(d&&d._clickPending){return | |
}try{return DwtControl.__mouseEvent(c,DwtEvent.ONCLICK) | |
}catch(a){AjxException.reportScriptError(a) | |
}}; | |
DwtControl.__dblClickHdlr=function(c){try{var d=DwtControl.getTargetControl(c); | |
if(d&&d._dblClickIsolation){d._clickPending=false; | |
AjxTimedAction.cancelAction(d._dblClickActionId) | |
}return DwtControl.__mouseEvent(c,DwtEvent.ONDBLCLICK) | |
}catch(a){AjxException.reportScriptError(a) | |
}}; | |
DwtControl.__mouseOverHdlr=function(g,h){try{var d=(DwtMouseEventCapture.getId()=="DwtControl")?DwtMouseEventCapture.getCaptureObj():null; | |
if(d!=null){g=DwtUiEvent.getEvent(g); | |
g._stopPropagation=true; | |
return false | |
}var c=DwtControl.getTargetControl(g); | |
if(!c){return false | |
}h=h||DwtEvent.ONMOUSEOVER; | |
if((h==DwtEvent.ONMOUSEOVER)&&c._ignoreInternalOverOut){var j=DwtControl.getTargetControl(g,true); | |
if(c==j){return false | |
}}var i=DwtShell.mouseEvent; | |
if(c._dragging==DwtControl._NO_DRAG){i.setFromDhtmlEvent(g,c); | |
i.hoverStarted=false; | |
if(c.isListenerRegistered(h)){c.notifyListeners(h,i) | |
}if(c.__hasToolTipContent(i)&&!i.hoverStarted){var e=DwtShell.getShell(window); | |
var a=e.getHoverMgr(); | |
if((!a.isHovering()||a.getHoverObject()!=c)&&!DwtMenu.menuShowing()){a.reset(); | |
a.setHoverObject(c); | |
a.setHoverOverData(i); | |
a.setHoverOverDelay(DwtToolTip.TOOLTIP_DELAY); | |
a.setHoverOverListener(c._hoverOverListener); | |
a.hoverOver(i.docX,i.docY) | |
}}}i._stopPropagation=true; | |
i._returnValue=false; | |
i.setToDhtmlEvent(g); | |
return false | |
}catch(f){AjxException.reportScriptError(f) | |
}}; | |
DwtControl.__mouseEnterHdlr=function(a){return DwtControl.__mouseOverHdlr(a,DwtEvent.ONMOUSEENTER) | |
}; | |
DwtControl.__mouseDownHdlr=function(f){try{var g=DwtControl.getTargetControl(f); | |
if(!g){return false | |
}f=DwtUiEvent.getEvent(f); | |
var e=DwtShell.mouseEvent; | |
e.setFromDhtmlEvent(f,g); | |
if(e.button==DwtMouseEvent.LEFT){g._focusByMouseDownEvent(f); | |
e.setFromDhtmlEvent(f,g) | |
}if(g.__hasToolTipContent()){var d=DwtShell.getShell(window); | |
var c=d.getHoverMgr(); | |
c.setHoverOutListener(g._hoverOutListener); | |
c.hoverOut() | |
}if(g._dragSource&&(e.button==DwtMouseEvent.LEFT)&&g._isValidDragObject(e)){try{g._ctrlCaptureObj.capture() | |
}catch(a){}g._dragOp=g._getDragOp(e); | |
g.__dragStartX=e.docX; | |
g.__dragStartY=e.docY | |
}else{if(g._dragBox){if(g._dragBox._setStart(e,g)){try{g._ctrlCaptureObj.capture() | |
}catch(a){}}}}return DwtControl.__mouseEvent(f,DwtEvent.ONMOUSEDOWN,g,e) | |
}catch(a){AjxException.reportScriptError(a) | |
}}; | |
DwtControl.__mouseMoveHdlr=function(n){try{var h=(DwtMouseEventCapture.getId()=="DwtControl")?DwtMouseEventCapture.getCaptureObj():null; | |
var g=h?h.targetObj:DwtControl.getTargetControl(n); | |
if(!g){return false | |
}if(g.__dndHoverActionId!=-1){AjxTimedAction.cancelAction(g.__dndHoverActionId); | |
g.__dndHoverActionId=-1 | |
}var o=DwtShell.mouseEvent; | |
o.setFromDhtmlEvent(n,h?true:g); | |
if(o.docX<0||o.docY<0){o._stopPropagation=true; | |
o._returnValue=false; | |
o.setToDhtmlEvent(n); | |
return false | |
}var l=(g._dragSource&&h&&(Math.abs(g.__dragStartX-o.docX)>=DwtControl.__DRAG_THRESHOLD||Math.abs(g.__dragStartY-o.docY)>=DwtControl.__DRAG_THRESHOLD)); | |
var p=(h&&g._dragBox&&g._dragBox._dragObj==g); | |
if(!l&&!p){if(g.__hasToolTipContent()){var j=DwtShell.getShell(window); | |
var d=j.getHoverMgr(); | |
if(!g.__tooltipClosed&&!DwtMenu.menuShowing()){d.hoverOver(o.docX,o.docY) | |
}else{var e=g.__lastTooltipX?Math.abs(o.docX-g.__lastTooltipX):null; | |
var c=g.__lastTooltipY?Math.abs(o.docY-g.__lastTooltipY):null; | |
if((e!=null&&e>DwtControl.__TOOLTIP_THRESHOLD)||(c!=null&&c>DwtControl.__TOOLTIP_THRESHOLD)){d.setHoverOutListener(g._hoverOutListener); | |
d.hoverOut(); | |
g.__tooltipClosed=true | |
}}}return DwtControl.__mouseEvent(n,DwtEvent.ONMOUSEMOVE,g,o) | |
}else{if(g._dragging==DwtControl._NO_DRAG){if(g._dragSource){g._dragOp=g._dragSource._beginDrag(g._dragOp,g); | |
if(g._dragOp!=Dwt.DND_DROP_NONE){g._dragging=DwtControl._DRAGGING; | |
g._dndProxy=g._getDragProxy(g._dragOp); | |
Dwt.addClass(g._dndProxy,"DwtDragProxy"); | |
if(!g._dndProxy){g._dragging=DwtControl._DRAG_REJECTED | |
}}else{g._dragging=DwtControl._DRAG_REJECTED | |
}}else{if(g._dragBox){g._dragging=DwtControl._DRAGGING; | |
g._dragBox._beginDrag(g) | |
}}}if(g._dragging!=DwtControl._DRAG_REJECTED){var k=o.dwtObj; | |
if(g._dragSource){var a=k&&k._dropTarget; | |
var q=g.__lastTargetObj; | |
if(k){g._dndHoverAction.args=[k]; | |
g.__dndHoverActionId=AjxTimedAction.scheduleAction(g._dndHoverAction,DwtControl.__DND_HOVER_DELAY) | |
}if(k&&a&&((k!=g)||a.hasMultipleTargets())){if(k!=q||a.hasMultipleTargets()){var f=g._dragSource._getData(); | |
if(a._dragEnter(g._dragOp,k,f,o,g._dndProxy)){g._setDragProxyState(true); | |
g.__dropAllowed=true; | |
k._dragEnter(o) | |
}else{g._setDragProxyState(false); | |
g.__dropAllowed=false | |
}}else{if(g.__dropAllowed){k._dragOver(o) | |
}}}else{g._setDragProxyState(false) | |
}if(q&&q!=k&&q._dropTarget&&q!=g){if(k&&!k._dndScrollCallback&&q._dndScrollCallback){q._dndScrollCallback.run(o) | |
}q._dragLeave(o); | |
q._dropTarget._dragLeave() | |
}g.__lastTargetObj=k; | |
if((k!=g)&&k&&k._dndScrollCallback){k._dndScrollCallback.run(o) | |
}Dwt.setLocation(g._dndProxy,o.docX+2,o.docY+2) | |
}else{if(g._dragBox){var i=DwtUiEvent.getTarget(n); | |
if(k&&(Dwt.isAncestor(g.getHtmlElement(),i)||i==g._dragSelectionBox)){g._dragBox._dragMove(o,g) | |
}}}}else{DwtControl.__mouseEvent(n,DwtEvent.ONMOUSEMOVE,g,o) | |
}o._stopPropagation=true; | |
o._returnValue=false; | |
o.setToDhtmlEvent(n); | |
return false | |
}}catch(m){AjxException.reportScriptError(m) | |
}}; | |
DwtControl.__mouseUpHdlr=function(e){try{var g=(DwtMouseEventCapture.getId()=="DwtControl")?DwtMouseEventCapture.getCaptureObj():null; | |
var f=g?g.targetObj:DwtControl.getTargetControl(e); | |
if(!f){return false | |
}if(f.__dndHoverActionId!=-1){AjxTimedAction.cancelAction(f.__dndHoverActionId); | |
f.__dndHoverActionId=-1 | |
}var d=DwtShell.mouseEvent; | |
d.setFromDhtmlEvent(e,g?true:f); | |
if(!(g&&(f._dragSource||f._dragBox))){return DwtControl.__processMouseUpEvent(e,f,d) | |
}else{g.release(); | |
if(f._dragging!=DwtControl._DRAGGING){f._dragging=DwtControl._NO_DRAG; | |
return DwtControl.__processMouseUpEvent(e,f,d) | |
}if(f._dragSource){f.__lastTargetObj=null; | |
var c=d.dwtObj; | |
var h=c&&c._dropTarget; | |
if(c&&h&&f.__dropAllowed&&((c!=f)||h.hasMultipleTargets())){c._drop(d); | |
h._drop(f._dragSource._getData(),d); | |
f._dragSource._endDrag(); | |
f._destroyDragProxy(f._dndProxy); | |
f._dragging=DwtControl._NO_DRAG | |
}else{DwtControl.__badDrop(f,d) | |
}if(c&&c._dndScrollCallback){c._dndScrollCallback.run(d) | |
}}else{if(f._dragBox){f._dragBox._endDrag(f) | |
}}d._stopPropagation=true; | |
d._returnValue=false; | |
d.setToDhtmlEvent(e); | |
return false | |
}}catch(a){AjxException.reportScriptError(a) | |
}}; | |
DwtControl.__badDrop=function(e,d){if(e._dragSource){e._dragSource._cancelDrag() | |
}var c=d.dwtObj; | |
if(c){c._drop(d) | |
}e.__dragEndX=d.docX; | |
e.__dragEndY=d.docY; | |
if(e.__badDropAction==null){e.__badDropAction=new AjxTimedAction(e,e.__badDropEffect) | |
}var a=(e.__dragEndY-e.__dragStartY)/(e.__dragEndX-e.__dragStartX); | |
e.__badDropAction.args=[a,e.__dragStartY-(a*e.__dragStartX),(e.__dragStartX-e.__dragEndX<0)?-1:1]; | |
AjxTimedAction.scheduleAction(e.__badDropAction,0) | |
}; | |
DwtControl.__processMouseUpEvent=function(e,g,d){var c=DwtShell.getShell(window); | |
var f=c.getHoverMgr(); | |
f.ignoreHoverOverOnClick(); | |
if(g._dblClickIsolation&&d&&(d.button==DwtMouseEvent.LEFT)){if(g._clickPending){return false | |
}else{g._clickPending=true; | |
var a=new AjxTimedAction(null,DwtControl.__timedClick,[e,g,d]); | |
g._dblClickActionId=AjxTimedAction.scheduleAction(a,DwtControl.__DBL_CLICK_TIMEOUT); | |
DwtUiEvent.setBehaviour(e,true,false); | |
g._st=new Date(); | |
return false | |
}}else{g._clickPending=false; | |
return DwtControl.__mouseEvent(e,DwtEvent.ONMOUSEUP,g,d) | |
}}; | |
DwtControl.__timedClick=function(c,d,a){d._clickPending=false; | |
DwtControl.__mouseEvent(c,DwtEvent.ONMOUSEUP,d,a) | |
}; | |
DwtControl.__mouseOutHdlr=function(g,f){try{var h=DwtControl.getTargetControl(g); | |
if(!h){return false | |
}f=f||DwtEvent.ONMOUSEOUT; | |
if((f==DwtEvent.ONMOUSEOUT)&&h._ignoreInternalOverOut){var a=DwtControl.getTargetControl(g,true); | |
if(h==a){return false | |
}}if(h.__hasToolTipContent()){var e=DwtShell.getShell(window); | |
var d=e.getHoverMgr(); | |
d.setHoverOutListener(h._hoverOutListener); | |
d.hoverOut(); | |
h.__tooltipClosed=false | |
}return DwtControl.__mouseEvent(g,f||DwtEvent.ONMOUSEOUT,h) | |
}catch(c){AjxException.reportScriptError(c) | |
}}; | |
DwtControl.__mouseLeaveHdlr=function(a){return DwtControl.__mouseOutHdlr(a,DwtEvent.ONMOUSELEAVE) | |
}; | |
DwtControl.__mouseWheelHdlr=function(c){try{return DwtControl.__mouseEvent(c,DwtEvent.ONMOUSEWHEEL) | |
}catch(a){AjxException.reportScriptError(a) | |
}}; | |
DwtControl.__selectStartHdlr=function(c){try{return DwtControl.__mouseEvent(c,DwtEvent.ONSELECTSTART) | |
}catch(a){AjxException.reportScriptError(a) | |
}}; | |
DwtControl.__contextMenuHdlr=function(d){try{if(AjxEnv.isSafari){var e=DwtControl.getTargetControl(d); | |
var a=e?e.preventContextMenu():true; | |
if(a){DwtControl.__mouseEvent(d,DwtEvent.ONMOUSEDOWN); | |
return DwtControl.__mouseEvent(d,DwtEvent.ONMOUSEUP) | |
}}return DwtControl.__mouseEvent(d,DwtEvent.ONCONTEXTMENU) | |
}catch(c){AjxException.reportScriptError(c) | |
}}; | |
DwtControl.__mouseEvent=function(f,d,g,e){var g=g?g:DwtControl.getTargetControl(f); | |
if(!g){return false | |
}if(!e){e=DwtShell.mouseEvent; | |
e.setFromDhtmlEvent(f,g) | |
}var c=e.target.tagName&&e.target.tagName.toLowerCase(); | |
var a=g._propagateEvent[d]||(c==="input"||c==="textarea"||c==="a"||c==="label"||c==="select"); | |
e._stopPropagation=!a; | |
e._dontCallPreventDefault=a; | |
e._returnValue=a; | |
DwtEventManager.notifyListeners(d,e); | |
if(g.isListenerRegistered&&g.isListenerRegistered(d)){g.notifyListeners(d,e) | |
}e.setToDhtmlEvent(f); | |
if(d==DwtEvent.ONMOUSELEAVE||d==DwtEvent.ONMOUSEOUT){g.__ignoreNextClick=false | |
}else{if(d==DwtEvent.ONMOUSEUP){g.__ignoreNextClick=true | |
}else{if(d==DwtEvent.ONCLICK){if(g.__ignoreNextClick){DBG.println(AjxDebug.ACCESSIBILITY,"DwtControl: ignoring a click!"); | |
g.__ignoreNextClick=false; | |
return true | |
}if(g.isListenerRegistered&&!g.isListenerRegistered(DwtEvent.ONCLICK)){DBG.println(AjxDebug.ACCESSIBILITY,"DwtControl: faking a click!"); | |
d=DwtEvent.ONMOUSEDOWN; | |
if(f){f.type=d | |
}DwtControl.__mouseEvent(f,d,g,DwtShell.mouseEvent); | |
d=DwtEvent.ONMOUSEUP; | |
if(f){f.type=d | |
}DwtControl.__mouseEvent(f,d,g,DwtShell.mouseEvent); | |
return DwtShell.mouseEvent._returnValue | |
}else{DBG.println(AjxDebug.ACCESSIBILITY,"DwtControl: skipping a click!"); | |
window.console&&console.warn("skipping a click!") | |
}}}}return e._returnValue | |
}; | |
DwtControl.__HANDLER={}; | |
DwtControl.__HANDLER[DwtEvent.ONCONTEXTMENU]=DwtControl.__contextMenuHdlr; | |
DwtControl.__HANDLER[DwtEvent.ONCLICK]=DwtControl.__clickHdlr; | |
DwtControl.__HANDLER[DwtEvent.ONDBLCLICK]=DwtControl.__dblClickHdlr; | |
DwtControl.__HANDLER[DwtEvent.ONMOUSEDOWN]=DwtControl.__mouseDownHdlr; | |
DwtControl.__HANDLER[DwtEvent.ONMOUSEENTER]=DwtControl.__mouseEnterHdlr; | |
DwtControl.__HANDLER[DwtEvent.ONMOUSELEAVE]=DwtControl.__mouseLeaveHdlr; | |
DwtControl.__HANDLER[DwtEvent.ONMOUSEMOVE]=DwtControl.__mouseMoveHdlr; | |
DwtControl.__HANDLER[DwtEvent.ONMOUSEOUT]=DwtControl.__mouseOutHdlr; | |
DwtControl.__HANDLER[DwtEvent.ONMOUSEOVER]=DwtControl.__mouseOverHdlr; | |
DwtControl.__HANDLER[DwtEvent.ONMOUSEUP]=DwtControl.__mouseUpHdlr; | |
DwtControl.__HANDLER[DwtEvent.ONMOUSEWHEEL]=DwtControl.__mouseWheelHdlr; | |
DwtControl.__HANDLER[DwtEvent.ONSELECTSTART]=DwtControl.__selectStartHdlr; | |
DwtControl.__HANDLER[DwtEvent.ONKEYPRESS]=DwtControl.__keyPressHdlr; | |
DwtControl.__HANDLER[DwtEvent.ONKEYUP]=DwtControl.__keyUpHdlr; | |
DwtControl.__HANDLER[DwtEvent.ONKEYDOWN]=DwtControl.__keyDownHdlr; | |
DwtControl.__HANDLER[DwtEvent.ONFOCUS]=DwtControl.__focusHdlr; | |
DwtControl.__HANDLER[DwtEvent.ONBLUR]=DwtControl.__blurHdlr; | |
DwtControl.prototype.__initCtrl=function(){this.shell=this.parent.shell||this.parent; | |
this._htmlElId=this.__internalId=this._htmlElId||Dwt.getNextId(); | |
var a=this._elRef=this._createElement(this._htmlElId); | |
a.id=this._htmlElId; | |
if(DwtControl.ALL_BY_ID[this._htmlElId]){this._htmlElId=a.id=this.__internalId=DwtId.makeId(this._htmlElId,Dwt.getNextId()) | |
}DwtControl.ALL_BY_ID[this._htmlElId]=this; | |
DwtComposite._pendingElements[this._htmlElId]=a; | |
a.style.position=this.__posStyle||DwtControl.STATIC_STYLE; | |
a.className=this._className; | |
a.style.overflow="visible"; | |
if(this.role){a.setAttribute("role",this.role) | |
}this._enabled=true; | |
this.__controlEvent=DwtControl.__controlEvent; | |
this._dragging=DwtControl._NO_DRAG; | |
this.__ctrlInited=true; | |
this.setFocusElement(); | |
this._focusAction=new AjxTimedAction(null,DwtControl.__focusHdlr,[DwtShell.focusEvent,DwtEvent.ONFOCUS,this]); | |
this._blurAction=new AjxTimedAction(null,DwtControl.__blurHdlr,[DwtShell.focusEvent,DwtEvent.ONBLUR,this]); | |
this.parent.addChild(this,this.__index) | |
}; | |
DwtControl.prototype._createElement=function(a){return document.createElement("DIV") | |
}; | |
DwtControl.prototype.__dndDoHover=function(a){a._dragHover() | |
}; | |
DwtControl.prototype.__badDropEffect=function(a,h,f){var e=(Math.abs(a)<=1); | |
var g=e?this.__dragStartX-this.__dragEndX:this.__dragStartY-this.__dragEndY; | |
if(g*f>0&&!(this.__dragEndY==this.__dragStartY||this.__dragEndX==this.__dragStartX)){if(e){this.__dragEndX+=(30*f); | |
this._dndProxy.style.top=a*this.__dragEndX+h; | |
this._dndProxy.style.left=this.__dragEndX | |
}else{this.__dragEndY+=(30*f); | |
this._dndProxy.style.top=this.__dragEndY; | |
this._dndProxy.style.left=(this.__dragEndY-h)/a | |
}AjxTimedAction.scheduleAction(this.__badDropAction,0) | |
}else{this._destroyDragProxy(this._dndProxy); | |
this._dragging=DwtControl._NO_DRAG | |
}}; | |
DwtControl.prototype.__handleHoverOver=function(e){if(this._eventMgr.isListenerRegistered(DwtEvent.HOVEROVER)){this._eventMgr.notifyListeners(DwtEvent.HOVEROVER,e) | |
}var d=e&&e.object; | |
var f=this.getToolTipContent(d); | |
var c,g; | |
if(!f){c="" | |
}else{if(typeof(f)=="string"){c=f | |
}else{if(f.isAjxCallback||AjxUtil.isFunction(f)){g=f | |
}else{if(typeof(f)=="object"){c=f.content; | |
g=f.callback | |
}}}}if(!c&&g&&f.loading){c=AjxMsg.loading | |
}if(c){this.__showToolTip(e,c) | |
}if(g){var a=new AjxCallback(this,this.__showToolTip,[e]); | |
AjxTimedAction.scheduleAction(new AjxTimedAction(null,function(){g.run(a) | |
}),0) | |
}}; | |
DwtControl.prototype.__showToolTip=function(c,a){if(!a){return | |
}DwtControl.showToolTip(a,c.x,c.y,this,c); | |
this.__lastTooltipX=c.x; | |
this.__lastTooltipY=c.y; | |
this.__tooltipClosed=false | |
}; | |
DwtControl.prototype.__handleHoverOut=function(a){if(this._eventMgr.isListenerRegistered(DwtEvent.HOVEROUT)){this._eventMgr.notifyListeners(DwtEvent.HOVEROUT,a) | |
}DwtControl.hideToolTip(); | |
this.__lastTooltipX=null; | |
this.__lastTooltipY=null | |
}; | |
DwtControl.prototype.__isInputEl=function(d){var e=false; | |
if(!d||!d.tagName){return e | |
}var a=d.tagName.toLowerCase(); | |
var c=a=="input"?d.type.toLowerCase():null; | |
if(a=="textarea"||(c&&(c=="text"||c=="password"))){e=true | |
}return e | |
}; | |
DwtControl.ON_UNLOAD=function(){var c=DwtControl.ALL_BY_ID,a; | |
for(a in c){c[a]._elRef=null | |
}DwtControl.ALL_BY_ID={} | |
}; | |
if(window.attachEvent){window.attachEvent("onunload",DwtControl.ON_UNLOAD) | |
}else{if(window.addEventListener){window.addEventListener("unload",DwtControl.ON_UNLOAD,false) | |
}}DwtControl.showToolTip=function(c,a,g,e,f){if(!c){return | |
}var d=DwtShell.getShell(window).getToolTip(); | |
d.setContent(c); | |
d.popup(a,g,false,false,e,f) | |
}; | |
DwtControl.hideToolTip=function(){DwtShell.getShell(window).getToolTip().popdown() | |
}; | |
DwtControl.prototype.getTooltipBase=function(a){return this.getHtmlElement() | |
}; | |
DwtControl.prototype.boundsForChild=function(d){if(d&&d.getHtmlElement){d=d.getHtmlElement() | |
}var a=function(f,e){var g=Dwt.getMargins(e); | |
var f=Dwt.insetBounds(f,Dwt.getInsets(e)); | |
f.width=Math.max(f.width-g.left-g.right,0); | |
f.height=Math.max(f.height-g.top-g.bottom,0); | |
return f | |
}; | |
var c=new DwtRectangle(0,0,this.getHtmlElement().clientWidth,this.getHtmlElement().clientHeight); | |
return AjxUtil.reduce(Dwt.getAncestors(d,this.getHtmlElement(),true),a,c) | |
}; | |
DwtControl.prototype.hasAttribute=function(a){return this.getHtmlElement().hasAttribute(a) | |
}; | |
DwtControl.prototype.getAttribute=function(a){return this.getHtmlElement().getAttribute(a) | |
}; | |
DwtControl.prototype.setAttribute=function(a,c){this.getHtmlElement().setAttribute(a,c) | |
}; | |
DwtControl.prototype.removeAttribute=function(a){this.getHtmlElement().removeAttribute(a) | |
} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtComposite")){DwtComposite=function(c){if(arguments.length==0){return | |
}c=Dwt.getParams(arguments,DwtComposite.PARAMS); | |
c.className=c.className||"DwtComposite"; | |
DwtControl.call(this,c); | |
var a=this.toString(); | |
if(a=="DwtComposite"){a=this.getHTMLElId() | |
}this._compositeTabGroup=new DwtTabGroup(a+" (DwtComposite)"); | |
this._children=new AjxVector() | |
}; | |
DwtComposite.PARAMS=DwtControl.PARAMS.concat(); | |
DwtComposite.prototype=new DwtControl; | |
DwtComposite.prototype.constructor=DwtComposite; | |
DwtComposite.prototype.isDwtComposite=true; | |
DwtComposite.prototype.toString=function(){return"DwtComposite" | |
}; | |
DwtComposite._pendingElements=new Object(); | |
DwtComposite.prototype.dispose=function(){if(this._disposed){return | |
}var a=this._children.getArray(); | |
while(a.length>0){a.pop().dispose() | |
}if(this._compositeTabGroup){this._compositeTabGroup.removeAllMembers() | |
}this._compositeTabGroup=null; | |
DwtControl.prototype.dispose.call(this) | |
}; | |
DwtComposite.prototype.getChildren=function(){return this._children.getArray().slice(0) | |
}; | |
DwtComposite.prototype.getChild=function(a){return this._children.get(a) | |
}; | |
DwtComposite.prototype.cleanupSeparators=function(){var c=this.getChildren(); | |
var d=true; | |
var f; | |
for(var e=0; | |
e<c.length; | |
e++){var g=c[e]; | |
var a=g.isStyle&&g.isStyle(DwtMenuItem.SEPARATOR_STYLE); | |
if(a){g.setVisible(!d); | |
if(!d||!f){d=true; | |
f=g | |
}continue | |
}if(g.getVisible()){d=false | |
}}if(d&&f){f.setVisible(false) | |
}}; | |
DwtComposite.prototype.getNumChildren=function(){return this._children.size() | |
}; | |
DwtComposite.prototype.removeChildren=function(){var c=this._children.getArray(); | |
while(c.length>0){c[0].dispose() | |
}if(this._compositeTabGroup){this._compositeTabGroup.removeAllMembers() | |
}}; | |
DwtComposite.prototype.clear=function(){this.removeChildren(); | |
this.getHtmlElement().innerHTML="" | |
}; | |
DwtComposite.prototype.addChild=function(d,a){this._children.add(d,a); | |
this._compositeTabGroup.addMember(d,a); | |
var c=d.getHtmlElement(); | |
c.setAttribute("parentId",this._htmlElId); | |
if(this instanceof DwtShell&&this.isVirtual()){document.body.appendChild(c) | |
}else{d.reparentHtmlElement(d.__parentElement||this.getHtmlElement(),a); | |
d.__parentElement=null | |
}}; | |
DwtComposite.prototype.removeChild=function(d){if(d.isInitialized()){this._children.remove(d); | |
this._compositeTabGroup.removeMember(d); | |
var c=d.getHtmlElement(); | |
if(c){c.removeAttribute("parentId"); | |
if(c.parentNode){var a=c.parentNode.removeChild(c) | |
}}}}; | |
DwtComposite.prototype.getTabGroupMember=function(){return this.tabGroupMember||(this.getNumChildren()>0?this._compositeTabGroup:this) | |
}; | |
DwtComposite.prototype._setAllowSelection=function(){if(!this._allowSelection){this._allowSelection=true; | |
this.addListener(DwtEvent.ONMOUSEDOWN,new AjxListener(this,this._mouseDownListener)); | |
this.addListener(DwtEvent.ONCONTEXTMENU,new AjxListener(this,this._contextMenuListener)) | |
}}; | |
DwtComposite.prototype.preventSelection=function(a){return this._allowSelection?false:DwtControl.prototype.preventSelection.call(this,a) | |
}; | |
DwtComposite.prototype.preventContextMenu=function(d){if(!this._allowSelection){return DwtControl.prototype.preventContextMenu.apply(this,arguments) | |
}var a=d?(d.id.indexOf("OBJ_")==0):false; | |
var c=false; | |
if(document.selection){c=document.selection.type=="Text" | |
}else{if(getSelection()){c=getSelection().toString().length>0 | |
}}return(c&&!a)?false:true | |
}; | |
DwtComposite.prototype._focusByMouseUpEvent=function(){if(!this._allowSelection){DwtControl.prototype._focusByMouseUpEvent.apply(this,arguments) | |
}}; | |
DwtComposite.prototype._mouseDownListener=function(a){if(a.button==DwtMouseEvent.LEFT){a._stopPropagation=true; | |
a._returnValue=true | |
}}; | |
DwtComposite.prototype._contextMenuListener=function(a){a._stopPropagation=false; | |
a._returnValue=true | |
} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtShell")){DwtShell=function(f){if(window._dwtShellId){throw new DwtException("DwtShell already exists for window",DwtException.INVALID_OP,"DwtShell") | |
}var d=f.className||"DwtShell"; | |
DwtComposite.call(this,{className:d}); | |
this.__ctrlInited=true; | |
document.body.style.margin=0; | |
if(!f.docBodyScrollable){if(AjxEnv.isIE){document.body.onscroll=DwtShell.__onBodyScroll | |
}document.body.style.overflow="hidden" | |
}document.body.onselect=DwtShell._preventDefaultSelectPrt; | |
document.body.onselectstart=DwtShell._preventDefaultSelectPrt; | |
document.body.oncontextmenu=DwtShell._preventDefaultPrt; | |
window.onresize=DwtShell._resizeHdlr; | |
var e=document.createElement("div"); | |
this._htmlElId=window._dwtShellId=e.id=f.id||Dwt.getNextId(); | |
DwtControl.ALL_BY_ID[this._htmlElId]=this; | |
e.className=d; | |
e.style.width=e.style.height="100%"; | |
Dwt.setPosition(e,DwtControl.ABSOLUTE_STYLE); | |
if(e.style.overflow){e.style.overflow=null | |
}try{if(f.userShell){document.body.removeChild(f.userShell) | |
}}catch(c){}document.body.appendChild(e); | |
if(f.userShell){var a=new DwtControl({parent:this,posStyle:Dwt.ABSOLUTE_STYLE}); | |
a.getHtmlElement().appendChild(f.userShell); | |
a.setSize("100%","100%"); | |
a.zShow(true); | |
this._userShell=f.userShell | |
}else{this._userShell=null | |
}this.shell=this; | |
this._createBusyOverlay(e); | |
this._veilOverlay=document.createElement("div"); | |
this._veilOverlay.className=(!AjxEnv.isLinux)?"VeilOverlay":"VeilOverlay-linux"; | |
this._veilOverlay.style.position="absolute"; | |
this._veilOverlay.style.cursor="not-allowed"; | |
this._veilOverlay.veilZ=new Array(); | |
this._veilOverlay.veilZ.push(Dwt.Z_HIDDEN); | |
this._veilOverlay.dialogZ=new Array(); | |
this._veilOverlay.activeDialogs=new Array(); | |
this._veilOverlay.innerHTML="<table cellspacing=0 cellpadding=0 style='width:100%; height:100%'><tr><td> </td></tr></table>"; | |
e.appendChild(this._veilOverlay); | |
Dwt.setBounds(this._veilOverlay,0,0,"100%","100%"); | |
Dwt.setZIndex(this._veilOverlay,Dwt.Z_HIDDEN); | |
if(f.useCurtain){this._curtainOverlay=document.createElement("div"); | |
this._curtainOverlay.className="CurtainOverlay"; | |
this._curtainOverlay.style.position="absolute"; | |
this._curtainOverlay.innerHTML="<table cellspacing=0 cellpadding=0 style='width:100%; height:100%'><tr><td> </td></tr></table>"; | |
e.appendChild(this._curtainOverlay); | |
Dwt.setBounds(this._curtainOverlay,0,0,"100%","100%"); | |
Dwt.setZIndex(this._curtainOverlay,Dwt.Z_CURTAIN) | |
}this._uiEvent=new DwtUiEvent(true); | |
this.relayout(); | |
this._toolTip=new DwtToolTip(this); | |
this._hoverMgr=new DwtHoverMgr(); | |
this._keyboardMgr=new DwtKeyboardMgr(this) | |
}; | |
DwtShell.prototype=new DwtComposite; | |
DwtShell.prototype.constructor=DwtShell; | |
DwtShell.CANCEL_BUTTON=-1; | |
DwtShell.controlEvent=new DwtControlEvent(); | |
DwtShell.focusEvent=new DwtFocusEvent(); | |
DwtShell.keyEvent=new DwtKeyEvent(); | |
DwtShell.mouseEvent=new DwtMouseEvent(); | |
DwtShell.selectionEvent=new DwtSelectionEvent(true); | |
DwtShell.treeEvent=new DwtTreeEvent(); | |
DwtShell._GLOBAL_SELECTION="GlobalSelection"; | |
DwtShell.prototype.toString=function(){return"DwtShell" | |
}; | |
DwtShell.getShell=function(a){a=a||window; | |
return DwtControl.fromElementId(a._dwtShellId) | |
}; | |
DwtShell.prototype.getKeyboardMgr=function(){return this._keyboardMgr | |
}; | |
DwtShell.prototype.setBusy=function(e,f,c,d,a){if(e){this._setBusyCount++ | |
}else{if(this._setBusyCount>0){this._setBusyCount-- | |
}}if(!this._setBusy&&(this._setBusyCount>0)){Dwt.setCursor(this._busyOverlay,"wait"); | |
Dwt.setVisible(this._busyOverlay,true); | |
this._setBusy=this._blockInput=true | |
}else{if(this._setBusy&&(this._setBusyCount<=0)){Dwt.setCursor(this._busyOverlay,"default"); | |
Dwt.setVisible(this._busyOverlay,false); | |
this._setBusy=this._blockInput=false | |
}}if(e&&c){if(d&&d>0){this._busyActionId[f]=AjxTimedAction.scheduleAction(this._busyTimedAction,d) | |
}else{this._showBusyDialogAction(f) | |
}this._cancelBusyCallback=a; | |
if(this._busyDialog){this._busyDialog.setButtonEnabled(DwtShell.CANCEL_BUTTON,(a!=null)) | |
}}else{if(this._busyActionId[f]&&(this._busyActionId[f]!=-1)){AjxTimedAction.cancelAction(this._busyActionId[f]); | |
this._busyActionId[f]=-1 | |
}if(this._busyDialog&&this._busyDialog.isPoppedUp){this._busyDialog.popdown() | |
}}}; | |
DwtShell.prototype.getBusy=function(){return this._setBusy | |
}; | |
DwtShell.prototype.setBusyDialogText=function(a){this._busyDialogText=a; | |
if(this._busyDialogTxt){this._busyDialogTxt.innerHTML=(a)?a:"" | |
}}; | |
DwtShell.prototype.setBusyDialogTitle=function(a){this._busyDialogTitle=a; | |
if(this._busyDialog){this._busyDialog.setTitle((a)?a:AjxMsg.workInProgress) | |
}}; | |
DwtShell.prototype.getHoverMgr=function(){return this._hoverMgr | |
}; | |
DwtShell.prototype.getToolTip=function(){return this._toolTip | |
}; | |
DwtShell.prototype.getH=function(a){return(!this._virtual)?Dwt.getSize(this.getHtmlElement(),a).y:Dwt.getSize(document.body,a).y | |
}; | |
DwtShell.prototype.getW=function(a){return(!this._virtual)?Dwt.getSize(this.getHtmlElement(),a).x:Dwt.getSize(document.body,a).x | |
}; | |
DwtShell.prototype.getSize=function(a){return(!this._virtual)?Dwt.getSize(this.getHtmlElement(),a):Dwt.getSize(document.body,a) | |
}; | |
DwtShell.prototype.getLocation=function(){return(!this._virtual)?Dwt.getLocation(this.getHtmlElement()):Dwt.getLocation(document.body) | |
}; | |
DwtShell.prototype.getX=function(){return(!this._virtual)?Dwt.getLocation(this.getHtmlElement()).x:Dwt.getLocation(document.body).x | |
}; | |
DwtShell.prototype.getY=function(){return(!this._virtual)?Dwt.getLocation(this.getHtmlElement()).y:Dwt.getLocation(document.body).y | |
}; | |
DwtShell.prototype.getBounds=function(a){return(!this._virtual)?Dwt.getBounds(this.getHtmlElement(),a):Dwt.getBounds(document.body,a) | |
}; | |
DwtShell.prototype.setVirtual=function(){this._virtual=true; | |
this.setVisible(false) | |
}; | |
DwtShell.prototype.addFocusListener=function(a){if(!this._hasFocusHandler){var c=document; | |
if((typeof c.onfocusin!="undefined")&&c.attachEvent){c.attachEvent("onfocusin",DwtShell.__focusHdlr) | |
}else{if(window.addEventListener){window.addEventListener("focus",DwtShell.__focusHdlr,false) | |
}}this._hasFocusHandler=true | |
}this.addListener(DwtEvent.ONFOCUS,a) | |
}; | |
DwtShell.prototype.addBlurListener=function(a){if(!this._hasBlurHandler){var c=document; | |
if((typeof c.onfocusin!="undefined")&&c.attachEvent){c.attachEvent("onfocusout",DwtShell.__blurHdlr) | |
}else{if(window.addEventListener){window.addEventListener("blur",DwtShell.__blurHdlr,false) | |
}}this._hasBlurHandler=true | |
}this.addListener(DwtEvent.ONBLUR,a) | |
}; | |
DwtShell.prototype.addGlobalSelectionListener=function(a){this.addListener(DwtShell._GLOBAL_SELECTION,a) | |
}; | |
DwtShell.prototype.removeGlobalSelectionListener=function(a){this.removeListener(DwtShell._GLOBAL_SELECTION,a) | |
}; | |
DwtShell.prototype.notifyGlobalSelection=function(a){this.notifyListeners(DwtShell._GLOBAL_SELECTION,a) | |
}; | |
DwtShell.prototype.isVirtual=function(){return this._virtual | |
}; | |
DwtShell.prototype._showBusyDialogAction=function(c){var a=this._getBusyDialog(); | |
a.popup(); | |
this._busyActionId[c]=-1 | |
}; | |
DwtShell.prototype._createBusyOverlay=function(a){this._busyOverlay=document.createElement("div"); | |
this._busyOverlay.className=(!AjxEnv.isLinux)?"BusyOverlay":"BusyOverlay-linux"; | |
this._busyOverlay.style.position="absolute"; | |
this._busyOverlay.innerHTML="<table cellspacing=0 cellpadding=0 style='width:100%; height:100%'><tr><td> </td></tr></table>"; | |
a.appendChild(this._busyOverlay); | |
Dwt.setBounds(this._busyOverlay,0,0,"100%","100%"); | |
Dwt.setZIndex(this._busyOverlay,Dwt.Z_VEIL); | |
Dwt.setVisible(this._busyOverlay,false); | |
this._busyTimedAction=new AjxTimedAction(this,this._showBusyDialogAction); | |
this._busyActionId={}; | |
this._setBusyCount=0; | |
this._setBusy=false | |
}; | |
DwtShell.prototype._getBusyDialog=function(d){if(!this._busyDialog){var e=new DwtDialog_ButtonDescriptor(DwtShell.CANCEL_BUTTON,AjxMsg.cancelRequest,DwtDialog.ALIGN_CENTER); | |
this._busyDialog=new DwtDialog({parent:this,className:"DwtShellBusyDialog",title:AjxMsg.workInProgress,standardButtons:DwtDialog.NO_BUTTONS,extraButtons:[e],zIndex:Dwt.BUSY+10}); | |
this._busyDialog.registerCallback(DwtShell.CANCEL_BUTTON,this._busyCancelButtonListener,this); | |
var c=Dwt.getNextId(); | |
var a=["<table class='DialogContent'><tr>","<td><div class='WaitIcon'></div></td><td class='MsgText' id='",c,"'> </td>","</tr></table>"].join(""); | |
this._busyDialog.setContent(a); | |
this._busyDialogTxt=document.getElementById(c); | |
if(this._busyDialogText){this._busyDialogTxt.innerHTML=this._busyDialogText | |
}if(this._busyDialogTitle){this._busyDialog.setTitle(this._busyDialogTitle) | |
}this._busyDialog.setButtonEnabled(DwtShell.CANCEL_BUTTON,(this._cancelBusyCallback!=null)) | |
}return this._busyDialog | |
}; | |
DwtShell.prototype.relayout=function(){this._currWinSize=Dwt.getWindowSize(); | |
if(this._userShell){var a=Dwt.byClassName("skin_layout_filler",this._userShell); | |
AjxUtil.foreach(a,function(d){if(Dwt.hasClass(d,"skin_layout_row")){var k=d; | |
var j=k.parentNode; | |
var i=Dwt.getSize(j).y; | |
var f=0; | |
var e=Dwt.getInsets(j); | |
i-=e.top+e.bottom; | |
var g=Dwt.getMargins(k); | |
i-=g.top+g.bottom; | |
AjxUtil.foreach(j.children,function(m){var n=Dwt.getMargins(m); | |
i-=n.top+n.bottom; | |
if(Dwt.hasClass(m,"skin_layout_filler")){f+=1 | |
}else{var l=Dwt.getSize(m).y; | |
AjxUtil.foreach(m.children,function(p){var q=Dwt.getMargins(p); | |
var o=Dwt.getSize(p).y+q.top+q.bottom; | |
l=Math.max(l,o) | |
}); | |
i-=l | |
}}); | |
k.style.height=Math.max(i/f,0)+"px" | |
}else{if(Dwt.hasClass(d,"skin_layout_cell")){var h=d; | |
var k=h.parentNode; | |
var j=k.parentNode; | |
var c=Dwt.getSize(j).x; | |
var f=0; | |
var e=Dwt.getInsets(j); | |
c-=e.left+e.right; | |
var g=Dwt.getMargins(k); | |
c-=g.left+g.right; | |
AjxUtil.foreach(k.children,function(l){var m=Dwt.getMargins(l); | |
c-=m.left+m.right; | |
if(Dwt.hasClass(l,"skin_layout_filler")){f+=1 | |
}else{if(h.id==="skin_td_main"&&l.id==="skin_td_tree_app_sash"&&AjxEnv.isChrome&&!AjxUtil.isInt(window.devicePixelRatio)){c-=3 | |
}c-=Dwt.getSize(l).x | |
}}); | |
h.style.width=Math.max(c/f,0)+"px" | |
}else{if(window.console){console.warn("not fixing sizes for element!",d) | |
}}}}) | |
}}; | |
DwtShell.prototype._busyCancelButtonListener=function(a){this._cancelBusyCallback.run(); | |
if(this._busyDialog){this._busyDialog.popdown() | |
}}; | |
DwtShell._preventDefaultSelectPrt=function(c){var a=DwtControl.fromElementId(window._dwtShellId)._uiEvent; | |
a.setFromDhtmlEvent(c,true); | |
if(a.dwtObj&&a.dwtObj instanceof DwtControl&&!a.dwtObj.preventSelection(a.target)){a._stopPropagation=false; | |
a._returnValue=true | |
}else{a._stopPropagation=true; | |
a._returnValue=false | |
}a.setToDhtmlEvent(c); | |
return !a._stopPropagation | |
}; | |
DwtShell._preventDefaultPrt=function(c){c=DwtUiEvent.getEvent(c); | |
var d=c.target?c.target:c.srcElement; | |
var a=DwtControl.fromElementId(window._dwtShellId)._uiEvent; | |
a.setFromDhtmlEvent(c,true); | |
a._stopPropagation=true; | |
a._returnValue=false; | |
if(a.dwtObj&&a.dwtObj instanceof DwtControl&&!a.dwtObj.preventContextMenu(a.target)){a._stopPropagation=false; | |
a._returnValue=true | |
}else{if(d!=null&&typeof(d)=="object"){if((d.tagName=="A"||d.tagName=="a")&&d.href){a._stopPropagation=false; | |
a._returnValue=true | |
}}}a.setToDhtmlEvent(c); | |
return a._returnValue | |
}; | |
DwtShell._resizeHdlr=function(d){var c=DwtControl.fromElementId(window._dwtShellId); | |
if(c.isListenerRegistered(DwtEvent.CONTROL)){var a=DwtShell.controlEvent; | |
a.reset(); | |
a.oldWidth=c._currWinSize.x; | |
a.oldHeight=c._currWinSize.y; | |
c.relayout(); | |
a.newWidth=c._currWinSize.x; | |
a.newHeight=c._currWinSize.y; | |
c.notifyListeners(DwtEvent.CONTROL,a) | |
}else{c.relayout() | |
}}; | |
DwtShell.__onBodyScroll=function(){document.body.scrollTop=0; | |
document.body.scrollLeft=0 | |
}; | |
DwtShell.__focusHdlr=function(){var c=DwtShell.focusEvent; | |
var a=DwtShell.getShell(window); | |
c.dwtObj=a; | |
c.state=DwtFocusEvent.FOCUS; | |
a.notifyListeners(DwtEvent.ONFOCUS,c) | |
}; | |
DwtShell.__blurHdlr=function(){var c=DwtShell.focusEvent; | |
var a=DwtShell.getShell(window); | |
c.dwtObj=a; | |
c.state=DwtFocusEvent.BLUR; | |
a.notifyListeners(DwtEvent.ONBLUR,c) | |
} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtLabel")){DwtLabel=function(a){if(arguments.length==0){return | |
}a=Dwt.getParams(arguments,DwtLabel.PARAMS); | |
a.className=a.className||"DwtLabel"; | |
DwtComposite.call(this,a); | |
this._style=a.style||(DwtLabel.IMAGE_LEFT|DwtLabel.ALIGN_CENTER); | |
this._textBackground=null; | |
this._textForeground=null; | |
this._createHtml(a.template) | |
}; | |
DwtLabel.PARAMS=["parent","style","className","posStyle","id","index"]; | |
DwtLabel.prototype=new DwtComposite; | |
DwtLabel.prototype.constructor=DwtLabel; | |
DwtLabel.prototype.isFocusable=true; | |
DwtLabel.prototype.toString=function(){return"DwtLabel" | |
}; | |
DwtLabel.IMAGE_LEFT=1; | |
DwtLabel.IMAGE_RIGHT=2; | |
DwtLabel.IMAGE_BOTH=4; | |
DwtLabel.ALIGN_LEFT=8; | |
DwtLabel.ALIGN_RIGHT=16; | |
DwtLabel.ALIGN_CENTER=32; | |
DwtLabel._LAST_STYLE=32; | |
DwtLabel.LEFT="left"; | |
DwtLabel.RIGHT="right"; | |
DwtLabel.prototype.TEMPLATE="dwt.Widgets#ZLabel"; | |
DwtLabel.prototype.dispose=function(){delete this._dropDownEl; | |
delete this._iconEl; | |
delete this._textEl; | |
DwtControl.prototype.dispose.call(this) | |
}; | |
DwtLabel.prototype.setEnabled=function(a){if(a!=this._enabled){DwtControl.prototype.setEnabled.call(this,a); | |
var c=this._style&DwtLabel.IMAGE_RIGHT?DwtLabel.RIGHT:DwtLabel.LEFT; | |
this.__imageInfo=this.__imageInfo||{}; | |
this.__setImage(this.__imageInfo[c]) | |
}}; | |
DwtLabel.prototype.getImage=function(a){a=a||(this._style&DwtLabel.IMAGE_RIGHT?DwtLabel.RIGHT:DwtLabel.LEFT); | |
return this.__imageInfo[a] | |
}; | |
DwtLabel.prototype.setImage=function(a,d,c){d=d||(this._style&DwtLabel.IMAGE_RIGHT?DwtLabel.RIGHT:DwtLabel.LEFT); | |
this.__imageInfo=this.__imageInfo||{}; | |
this.__imageInfo[d]=a; | |
this.__setImage(a,d,c) | |
}; | |
DwtLabel.prototype.setIconEl=function(a,c){this._iconEl=this._iconEl||{}; | |
c=c||(this._style&DwtLabel.IMAGE_RIGHT?DwtLabel.RIGHT:DwtLabel.LEFT); | |
this._iconEl[c]=a | |
}; | |
DwtLabel.prototype.setDisabledImage=function(a){}; | |
DwtLabel.prototype.getText=function(){return(this.__text!=null)?this.__text:null | |
}; | |
DwtLabel.prototype.setText=function(a){if(!this._textEl){return | |
}if(a==null||a==""){this.__text=null; | |
this._textEl.innerHTML="" | |
}else{this.__text=a; | |
this._textEl.innerHTML=a | |
}this._textSet(a) | |
}; | |
DwtLabel.prototype.setTextBackground=function(a){this._textBackground=a; | |
if(this._textEl){this._textEl.style.backgroundColor=a | |
}}; | |
DwtLabel.prototype.setTextForeground=function(a){this._textForeground=a; | |
if(this._textEl){this._textEl.style.color=a | |
}}; | |
DwtLabel.prototype.setAlign=function(a){this._style=a; | |
var c=this._style&DwtLabel.IMAGE_RIGHT?DwtLabel.RIGHT:DwtLabel.LEFT; | |
this.__imageInfo=this.__imageInfo||{}; | |
this.__setImage(this.__imageInfo[c]) | |
}; | |
DwtLabel.prototype.isStyle=function(a){return this._style&a | |
}; | |
DwtLabel.prototype.getTabGroupMember=function(){return DwtControl.prototype.getTabGroupMember.apply(this,arguments) | |
}; | |
DwtLabel.prototype._createHtml=function(a){var c={id:this._htmlElId}; | |
this._createHtmlFromTemplate(a||this.TEMPLATE,c) | |
}; | |
DwtLabel.prototype._createHtmlFromTemplate=function(a,c){DwtControl.prototype._createHtmlFromTemplate.call(this,a,c); | |
this._textEl=document.getElementById(c.id+"_title") | |
}; | |
DwtLabel.prototype._getIconEl=function(c){var a=this._style&DwtLabel.IMAGE_RIGHT?DwtLabel.RIGHT:DwtLabel.LEFT; | |
c=typeof c==="boolean"?a:(c||a); | |
this._iconEl=this._iconEl||{}; | |
return this._iconEl[c]||(this._iconEl[c]=document.getElementById(this._htmlElId+"_"+c+"_icon")) | |
}; | |
DwtLabel.prototype.__setImage=function(c,e,d){this.__altText=d||this.__altText; | |
var a=this._getIconEl(e); | |
if(a){if(c){AjxImg.setImage(a,c,null,!this._enabled,null,this.__altText); | |
var f=(this._style&DwtLabel.IMAGE_RIGHT?"ZHasRightIcon":"ZHasLeftIcon"); | |
Dwt.addClass(this.getHtmlElement(),f) | |
}else{a.innerHTML="" | |
}}}; | |
DwtLabel.prototype._textSet=function(a){if(!this.hasAttribute("aria-labelledby")){if(a){this.setAttribute("aria-label",a) | |
}else{this.removeAttribute("aria-label") | |
}}} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtButton")){DwtButton=function(d){if(arguments.length==0){return | |
}d=Dwt.getParams(arguments,DwtButton.PARAMS); | |
d.className=d.className||"ZButton"; | |
DwtLabel.call(this,d); | |
var c=d.parent; | |
if(!c._hasSetMouseEvents||AjxEnv.isIE){this._setMouseEvents() | |
}var a; | |
if(c._hasSetMouseEvents){a=AjxEnv.isIE?[DwtEvent.ONMOUSEENTER,DwtEvent.ONMOUSELEAVE]:[] | |
}else{a=AjxEnv.isIE?[DwtEvent.ONMOUSEENTER,DwtEvent.ONMOUSELEAVE]:[DwtEvent.ONMOUSEOVER,DwtEvent.ONMOUSEOUT]; | |
a.push(DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEUP,DwtEvent.ONCLICK) | |
}if(a&&a.length){this._setEventHdlrs(a) | |
}this._listeners=d.listeners||DwtButton._listeners; | |
this._addMouseListeners(); | |
this._ignoreInternalOverOut=true; | |
this._dropDownEvtMgr=new AjxEventMgr(); | |
this._selected=false; | |
this._actionTiming=d.actionTiming||DwtButton.ACTION_MOUSEUP; | |
this.__preventMenuFocus=null; | |
this._menuPopupStyle=DwtButton.MENU_POPUP_STYLE_BELOW | |
}; | |
DwtButton.prototype=new DwtLabel; | |
DwtButton.prototype.constructor=DwtButton; | |
DwtButton.prototype.isDwtButton=true; | |
DwtButton.prototype.toString=function(){return"DwtButton" | |
}; | |
DwtButton.prototype.role="button"; | |
DwtButton.PARAMS=["parent","style","className","posStyle","actionTiming","id","index","listeners"]; | |
DwtButton.TOGGLE_STYLE=DwtLabel._LAST_STYLE*2; | |
DwtButton.ALWAYS_FLAT=DwtLabel._LAST_STYLE*4; | |
DwtButton._LAST_STYLE=DwtButton.ALWAYS_FLAT; | |
DwtButton.ACTION_MOUSEUP=1; | |
DwtButton.ACTION_MOUSEDOWN=2; | |
DwtButton.NOTIFY_WINDOW=500; | |
DwtButton.MENU_POPUP_STYLE_BELOW="BELOW"; | |
DwtButton.MENU_POPUP_STYLE_ABOVE="ABOVE"; | |
DwtButton.MENU_POPUP_STYLE_RIGHT="RIGHT"; | |
DwtButton.MENU_POPUP_STYLE_CASCADE="CASCADE"; | |
DwtButton.MOUSE_EVENTS=[DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEUP]; | |
if(AjxEnv.isIE){DwtButton.MOUSE_EVENTS.push(DwtEvent.ONMOUSEENTER,DwtEvent.ONMOUSELEAVE) | |
}else{DwtButton.MOUSE_EVENTS.push(DwtEvent.ONMOUSEOVER,DwtEvent.ONMOUSEOUT) | |
}DwtButton.prototype.TEMPLATE="dwt.Widgets#ZButton"; | |
DwtButton.prototype.dispose=function(){if(this._menu&&this._menu.isDwtMenu&&(this._menu.parent==this)){this._menu.dispose(); | |
this._menu=null | |
}DwtLabel.prototype.dispose.call(this) | |
}; | |
DwtButton.prototype.addSelectionListener=function(c,a){this.addListener(DwtEvent.SELECTION,c,a) | |
}; | |
DwtButton.prototype.removeSelectionListener=function(a){this.removeListener(DwtEvent.SELECTION,a) | |
}; | |
DwtButton.prototype.removeSelectionListeners=function(){this.removeAllListeners(DwtEvent.SELECTION) | |
}; | |
DwtButton.prototype.addDropDownSelectionListener=function(a){return this._dropDownEvtMgr.addListener(DwtEvent.SELECTION,a) | |
}; | |
DwtButton.prototype.removeDropDownSelectionListener=function(a){this._dropDownEvtMgr.removeListener(DwtEvent.SELECTION,a) | |
}; | |
DwtButton.prototype._dropDownImg="SelectPullDownArrow"; | |
DwtButton.prototype._dropDownDepImg="SelectPullDownArrow"; | |
DwtButton.prototype._dropDownHovImg="SelectPullDownArrowHover"; | |
DwtButton.prototype.setDropDownImages=function(c,d,e,a){this._dropDownImg=c; | |
this._dropDownHovImg=e; | |
this._dropDownDepImg=a | |
}; | |
DwtButton.prototype.setDropDownHovImage=function(a){this._dropDownHovImg=a | |
}; | |
DwtButton.prototype._addMouseListeners=function(){AjxUtil.foreach(DwtButton.MOUSE_EVENTS,(function(a){this.addListener(a,this._listeners[a]) | |
}).bind(this)) | |
}; | |
DwtButton.prototype._removeMouseListeners=function(){AjxUtil.foreach(DwtButton.MOUSE_EVENTS,(function(a){this.removeListener(a,this._listeners[a]) | |
}).bind(this)) | |
}; | |
DwtButton.prototype.setDisplayState=function(c,a){if(this._selected&&c!=DwtControl.SELECTED&&!a){c=[DwtControl.SELECTED,c].join(" ") | |
}DwtLabel.prototype.setDisplayState.call(this,c) | |
}; | |
DwtButton.prototype.setEnabled=function(c){if(c!=this._enabled){DwtLabel.prototype.setEnabled.call(this,c); | |
if(c){var d=(AjxEnv.isIE)?this.getHtmlElement().firstChild:null; | |
if(d){var a=d.className; | |
d.className=""; | |
d.className=a | |
}this._addMouseListeners(); | |
if(this._menu){this._setDropDownCellMouseHandlers(true); | |
if(this._dropDownEl&&this._dropDownImg){AjxImg.setImage(this._dropDownEl,this._dropDownImg) | |
}}}else{this._removeMouseListeners(); | |
if(this._menu){this._setDropDownCellMouseHandlers(false); | |
if(this._dropDownEl&&this._dropDownImg){AjxImg.setDisabledImage(this._dropDownEl,this._dropDownImg) | |
}}}}}; | |
DwtButton.prototype.setImage=function(a,c){if(this.whatToShow&&!this.whatToShow.showImage){return | |
}DwtLabel.prototype.setImage.apply(this,arguments); | |
this._setMinWidth() | |
}; | |
DwtButton.prototype.setText=function(a){if(this.whatToShow&&!this.whatToShow.showText){return | |
}DwtLabel.prototype.setText.call(this,a); | |
this._setMinWidth() | |
}; | |
DwtButton.prototype._setMinWidth=function(){if(this.getText()!=null){Dwt.addClass(this.getHtmlElement(),"ZHasText") | |
}else{Dwt.delClass(this.getHtmlElement(),"ZHasText") | |
}}; | |
DwtButton.prototype.setHoverImage=function(c,a){a=a||(this._style&DwtLabel.IMAGE_RIGHT?DwtLabel.RIGHT:DwtLabel.LEFT); | |
this._hoverImageInfo=this._hoverImageInfo||{}; | |
this._hoverImageInfo[a]=c | |
}; | |
DwtButton.prototype.setMenu=function(a){a=Dwt.getParams(arguments,DwtButton.setMenuParams,(arguments.length==1&&arguments[0]&&!arguments[0].menu)); | |
if(a){this._menu=a.menu | |
}if(this._menu){if(this._menu.isDwtMenu){this._shouldToggleMenu=(a.shouldToggle===true); | |
if(a.popupAbove){this._menuPopupStyle=DwtButton.MENU_POPUP_STYLE_ABOVE | |
}else{if(a.popupRight){this._menuPopupStyle=DwtButton.MENU_POPUP_STYLE_RIGHT | |
}else{this._menuPopupStyle=a.menuPopupStyle||DwtButton.MENU_POPUP_STYLE_BELOW | |
}}this._menuAdded(this._menu) | |
}else{this._savedMenuParams=a | |
}if(this._dropDownEl){Dwt.addClass(this.getHtmlElement(),"ZHasDropDown"); | |
if(this._dropDownImg){AjxImg.setImage(this._dropDownEl,this._dropDownImg) | |
}if(this._enabled){this._setDropDownCellMouseHandlers(true) | |
}if(this._menu.isDwtMenu){this._menu.setAssociatedElementId(this._dropDownEl.id) | |
}}if((this.__preventMenuFocus!=null)&&this._menu.isDwtMenu){this._menu.dontStealFocus(this.__preventMenuFocus) | |
}}else{if(this._dropDownEl){Dwt.delClass(this.getHtmlElement(),"ZHasDropDown"); | |
this._dropDownEl.innerHTML="" | |
}}}; | |
DwtButton.setMenuParams=["menu","shouldToggle","followIconStyle","popupAbove","popupRight"]; | |
DwtButton.prototype._setDropDownCellMouseHandlers=function(a){this._dropDownEventsEnabled=a | |
}; | |
DwtButton.prototype.getMenu=function(a){if(this._menu&&this._menu.isAjxCallback){if(a){return null | |
}var d=this._menu; | |
var c=this._savedMenuParams||{}; | |
c.menu=d.run(this); | |
this.setMenu(c); | |
if((this.__preventMenuFocus!=null)&&(this._menu.isDwtMenu)){this._menu.dontStealFocus(this.__preventMenuFocus) | |
}}if(this._menu){this.setAttribute("menuId",this._menu._htmlElId) | |
}return this._menu | |
}; | |
DwtButton.prototype.resetClassName=function(){this.setDisplayState(DwtControl.NORMAL) | |
}; | |
DwtButton.prototype.setActionTiming=function(a){this._actionTiming=a | |
}; | |
DwtButton.prototype.setHovered=function(a){this.setDisplayState(a?DwtControl.HOVER:DwtControl.NORMAL) | |
}; | |
DwtButton.prototype.setEnabledImage=function(a){this._enabledImageInfo=a; | |
this.setImage(a) | |
}; | |
DwtButton.prototype.setDepressedImage=function(a){this._depressedImageInfo=a | |
}; | |
DwtButton.prototype.setSelected=function(a){if(this._selected!=a){this._selected=a; | |
this.setDisplayState(a?DwtControl.SELECTED:DwtControl.NORMAL) | |
}}; | |
DwtButton.prototype.isToggled=function(){return this._selected | |
}; | |
DwtButton.prototype.popup=function(f,c){f=f||this.getMenu(); | |
if(!f){return | |
}var l=f.parent; | |
var h=l.getBounds(); | |
var k=f.shell.getSize(); | |
var d=f.getSize(); | |
var m=l.getHtmlElement(); | |
var e=Dwt.toWindow(m,0,0); | |
var a=(m.style.borderLeftWidth=="")?0:parseInt(m.style.borderLeftWidth); | |
var n=Boolean(c&&DwtKeyEvent.isKeyEvent(c)); | |
var j; | |
if(this._menuPopupStyle==DwtButton.MENU_POPUP_STYLE_RIGHT){j=e.x+h.width-d.x | |
}else{if(this._menuPopupStyle==DwtButton.MENU_POPUP_STYLE_CASCADE){j=e.x+h.width | |
}else{j=e.x+a; | |
j=((j+d.x)>=k.x)?k.x-d.x:j | |
}}var i; | |
if(this._menuPopupStyle==DwtButton.MENU_POPUP_STYLE_ABOVE){i=e.y-d.y | |
}else{if(this._menuPopupStyle==DwtButton.MENU_POPUP_STYLE_CASCADE){i=e.y | |
}else{var g=(m.style.borderTopWidth=="")?0:parseInt(m.style.borderTopWidth); | |
g+=(m.style.borderBottomWidth=="")?0:parseInt(m.style.borderBottomWidth); | |
i=e.y+h.height+g | |
}}f.popup(0,j,i,n); | |
f.setSelectedItem(0) | |
}; | |
DwtButton.prototype.getKeyMapName=function(){return DwtKeyMap.MAP_BUTTON | |
}; | |
DwtButton.prototype.handleKeyAction=function(a,c){switch(a){case DwtKeyMap.SELECT:this._emulateSingleClick(); | |
break; | |
case DwtKeyMap.SUBMENU:var d=this.getMenu(); | |
if(!d){return false | |
}this._emulateDropDownClick(); | |
d.setSelectedItem(0); | |
break | |
}return true | |
}; | |
DwtButton.prototype.removePullDownMenuOptions=function(){if(this._menu){this._setDropDownCellMouseHandlers(false); | |
if(this._dropDownEl&&this._dropDownImg){AjxImg.setImage(this._dropDownEl,""); | |
this.setDropDownImages("","","","") | |
}}}; | |
DwtButton.prototype._emulateSingleClick=function(){this.trigger(); | |
var a=this.getHtmlElement(); | |
var c=Dwt.toWindow(a); | |
var d=new DwtMouseEvent(); | |
this._setMouseEvent(d,{type:this._actionTiming==DwtButton.ACTION_MOUSEDOWN?DwtEvent.ONMOUSEDOWN:DwtEvent.ONMOUSEUP,dwtObj:this,target:a,button:DwtMouseEvent.LEFT,docX:c.x,docY:c.y,kbNavEvent:true}); | |
this.notifyListeners(d.type,d) | |
}; | |
DwtButton.prototype._emulateDropDownClick=function(){var a=this._dropDownEl; | |
if(!a){return | |
}var c=Dwt.toWindow(a); | |
var d=new DwtMouseEvent(); | |
this._setMouseEvent(d,{dwtObj:this,target:a,button:DwtMouseEvent.LEFT,docX:c.x,docY:c.y,kbNavEvent:true}); | |
DwtButton._dropDownCellMouseUpHdlr(d) | |
}; | |
DwtButton.prototype._focusByMouseUpEvent=function(){}; | |
DwtButton.prototype._focus=function(){this.setDisplayState(DwtControl.FOCUSED) | |
}; | |
DwtButton.prototype._blur=function(){this.setDisplayState(DwtControl.NORMAL) | |
}; | |
DwtButton.prototype._toggleMenu=function(a){if(this._shouldToggleMenu){var c=this.getMenu(); | |
if(!c.isPoppedUp()){this.popup(null,a); | |
this._menuUp=true | |
}else{c.popdown(0,a); | |
this._menuUp=false; | |
this.deactivate() | |
}}else{this.popup(null,a) | |
}}; | |
DwtButton.prototype._isDropDownEvent=function(c){if(this._dropDownEventsEnabled&&this._dropDownEl){var a=c.docX; | |
var d=Dwt.toWindow(this._dropDownEl,0,0,window).x; | |
if(a>=d){return true | |
}}return false | |
}; | |
DwtButton.prototype.trigger=function(){if(this._depressedImageInfo){this.setImage(this._depressedImageInfo) | |
}this.setDisplayState(DwtControl.ACTIVE,true); | |
this.isActive=true | |
}; | |
DwtButton.prototype.deactivate=function(){this._showHoverImage(true); | |
if(this._style&DwtButton.TOGGLE_STYLE){this._selected=!this._selected | |
}this.setDisplayState(DwtControl.HOVER) | |
}; | |
DwtButton.prototype.dontStealFocus=function(a){if(a==null){a=true | |
}if(this._menu&&this._menu.isDwtMenu){this._menu.dontStealFocus(a) | |
}this.__preventMenuFocus=a | |
}; | |
DwtButton.prototype._toggleHoverClass=function(c,e){var a=this._getIconEl(e); | |
if(a){var d=c?this._hoverImageInfo[e]:this.__imageInfo[e]; | |
a.firstChild.className=AjxImg.getClassForImage(d) | |
}}; | |
DwtButton.prototype._showHoverImage=function(a){if(!this._hoverImageInfo){return | |
}if(this._hoverImageInfo.left){this._toggleHoverClass(a,DwtLabel.LEFT) | |
}if(this._hoverImageInfo.right){this._toggleHoverClass(a,DwtLabel.RIGHT) | |
}}; | |
DwtButton.prototype._handleClick=function(c){if(this.isListenerRegistered(DwtEvent.SELECTION)){var a=(new Date()).getTime(); | |
if(!this._lastNotify||(a-this._lastNotify>DwtButton.NOTIFY_WINDOW)){var d=DwtShell.selectionEvent; | |
DwtUiEvent.copy(d,c); | |
d.item=this; | |
d.detail=(typeof this.__detail=="undefined")?0:this.__detail; | |
this.notifyListeners(DwtEvent.SELECTION,d); | |
this._lastNotify=a; | |
this.shell.notifyGlobalSelection(d) | |
}}else{if(this._menu){if(this._menu.isDwtMenu&&!this.isListenerRegistered(DwtEvent.SELECTION)){this._menu.setAssociatedObj(this) | |
}this._toggleMenu(c) | |
}}}; | |
DwtButton.prototype._setMouseOutClassName=function(){this.setDisplayState(DwtControl.NORMAL) | |
}; | |
DwtButton.prototype._createHtmlFromTemplate=function(a,c){DwtLabel.prototype._createHtmlFromTemplate.call(this,a,c); | |
this._dropDownEl=document.getElementById(c.id+"_dropdown") | |
}; | |
DwtButton.prototype._menuAdded=function(a){this.setAttribute("aria-haspopup",true); | |
this.setAttribute("aria-controls",a._htmlElId) | |
}; | |
DwtButton.prototype._menuItemSelected=function(a){}; | |
DwtButton._dropDownCellMouseDownHdlr=function(c){var d=DwtControl.getTargetControl(c); | |
var a=DwtShell.mouseEvent; | |
a.setFromDhtmlEvent(c,d); | |
if(a.button==DwtMouseEvent.LEFT){if(this._depImg){AjxImg.setImage(this,this._depImg) | |
}}a._stopPropagation=true; | |
a._returnValue=false; | |
a.setToDhtmlEvent(c); | |
return false | |
}; | |
DwtButton._dropDownCellMouseUpHdlr=function(c){var a=DwtShell.mouseEvent; | |
a.setFromDhtmlEvent(c); | |
if(a.button==DwtMouseEvent.LEFT){if(this._dropDownHovImg&&!this.noMenuBar){AjxImg.setImage(this,this._dropDownHovImg) | |
}DwtEventManager.notifyListeners(DwtEvent.ONMOUSEDOWN,a); | |
var e=DwtControl.getTargetControl(c); | |
if(e){if(e.getMenu()&&e.getMenu().isPoppedUp()){e.getMenu().popdown() | |
}else{if(e._menu&&e._menu.isAjxCallback){e.popup() | |
}if(e._dropDownEvtMgr.isListenerRegistered(DwtEvent.SELECTION)){var d=DwtShell.selectionEvent; | |
DwtUiEvent.copy(d,a); | |
d.item=e; | |
e._dropDownEvtMgr.notifyListeners(DwtEvent.SELECTION,d) | |
}else{e._toggleMenu(c) | |
}}}}a._stopPropagation=true; | |
a._returnValue=false; | |
a.setToDhtmlEvent(c); | |
return false | |
}; | |
DwtButton._mouseOverListener=function(e){var c=e.dwtObj; | |
if(!c){return false | |
}c._showHoverImage(true); | |
c.setDisplayState(DwtControl.HOVER); | |
var f=c._dropDownEl; | |
if(c._menu&&f&&c._dropDownHovImg&&!c.noMenuBar&&c.isListenerRegistered(DwtEvent.SELECTION)){if(c._dropDownHovImg){AjxImg.setImage(f,c._dropDownHovImg) | |
}}if(AjxEnv.isIE){if(e&&e.target&&e.target.firstChild){var d=e.target.firstChild; | |
var a=d.className; | |
d.className=""; | |
d.className=a | |
}}e._stopPropagation=true | |
}; | |
DwtButton._mouseOutListener=function(c){var a=c.dwtObj; | |
if(!a){return false | |
}a._showHoverImage(false); | |
a._setMouseOutClassName(); | |
a.isActive=false; | |
var d=a._dropDownEl; | |
if(a._menu&&d&&a._dropDownImg){AjxImg.setImage(d,a._dropDownImg) | |
}}; | |
DwtButton._mouseDownListener=function(c){var a=c.dwtObj; | |
if(!a){return false | |
}if(a._isDropDownEvent(c)){return DwtButton._dropDownCellMouseDownHdlr(c) | |
}if(c.button!=DwtMouseEvent.LEFT){return | |
}var d=a._dropDownEl; | |
if(a._menu&&d&&a._dropDownDepImg){AjxImg.setImage(d,a._dropDownDepImg) | |
}switch(a._actionTiming){case DwtButton.ACTION_MOUSEDOWN:a.trigger(); | |
a._handleClick(c); | |
break; | |
case DwtButton.ACTION_MOUSEUP:a.trigger(); | |
break | |
}}; | |
DwtButton._mouseUpListener=function(d){var a=d.dwtObj; | |
if(!a){return false | |
}if(a._isDropDownEvent(d)){return DwtButton._dropDownCellMouseUpHdlr(d) | |
}if(d.button!=DwtMouseEvent.LEFT){return | |
}var e=a._dropDownEl; | |
if(a._menu&&e&&a._dropDownHovImg&&!a.noMenuBar){AjxImg.setImage(e,a._dropDownHovImg) | |
}switch(a._actionTiming){case DwtButton.ACTION_MOUSEDOWN:a.deactivate(); | |
break; | |
case DwtButton.ACTION_MOUSEUP:var c=a.getHtmlElement(); | |
if(a.isActive){a.deactivate(); | |
a._handleClick(d) | |
}break | |
}}; | |
DwtButton._listeners={}; | |
DwtButton._listeners[DwtEvent.ONMOUSEOVER]=new AjxListener(null,DwtButton._mouseOverListener); | |
DwtButton._listeners[DwtEvent.ONMOUSEOUT]=new AjxListener(null,DwtButton._mouseOutListener); | |
DwtButton._listeners[DwtEvent.ONMOUSEDOWN]=new AjxListener(null,DwtButton._mouseDownListener); | |
DwtButton._listeners[DwtEvent.ONMOUSEUP]=new AjxListener(null,DwtButton._mouseUpListener); | |
DwtButton._listeners[DwtEvent.ONMOUSEENTER]=new AjxListener(null,DwtButton._mouseOverListener); | |
DwtButton._listeners[DwtEvent.ONMOUSELEAVE]=new AjxListener(null,DwtButton._mouseOutListener) | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtLinkButton")){DwtLinkButton=function(a){a.className=a.className||"ZButtonLink"; | |
this._noDropDown=a.noDropDown; | |
this._elementTag=a.elementTag; | |
DwtButton.call(this,a) | |
}; | |
DwtLinkButton.prototype=new DwtButton; | |
DwtLinkButton.prototype.constructor=DwtLinkButton; | |
DwtLinkButton.prototype.role="link"; | |
DwtLinkButton.prototype.TEMPLATE="dwt.Widgets#ZLinkButton"; | |
DwtLinkButton.prototype._dropDownImg=null; | |
DwtLinkButton.prototype._dropDownDepImg=null; | |
DwtLinkButton.prototype._dropDownHovImg=null; | |
DwtLinkButton.prototype.toString=function(){return"DwtLinkButton" | |
}; | |
DwtLinkButton.prototype._createHtmlFromTemplate=function(a,c){c=c||{}; | |
c.noDropDown=this._noDropDown; | |
DwtButton.prototype._createHtmlFromTemplate.call(this,a,c) | |
}; | |
DwtLinkButton.prototype._createElement=function(){return document.createElement(this._elementTag||"SPAN") | |
} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtMenuItem")){DwtMenuItem=function(e){if(arguments.length==0){return | |
}e=Dwt.getParams(arguments,DwtMenuItem.PARAMS); | |
var d=e.parent; | |
if(!(d&&d.isDwtMenu)){throw new DwtException("Parent must be a DwtMenu object",DwtException.INVALIDPARENT,"DwtMenuItem") | |
}var c=e.style=e.style||DwtMenuItem.NO_STYLE; | |
if(d._style==DwtMenu.BAR_STYLE&&c!=DwtMenuItem.PUSH_STYLE){throw new DwtException("DwtMenuItemInit: invalid style",DwtException.INVALID_PARAM,"DwtMenuItem") | |
}e.className=e.className||"ZMenuItem"; | |
c&=~DwtLabel.IMAGE_RIGHT; | |
c|=DwtButton.ALWAYS_FLAT|DwtLabel.IMAGE_LEFT; | |
var a=(c&DwtMenuItem.SEPARATOR_STYLE); | |
if(a){e.className="ZMenuItemSeparator"; | |
this.isFocusable=false; | |
this.noTab=true; | |
this.role=null | |
}e.listeners=DwtMenuItem._listeners; | |
DwtButton.call(this,e); | |
this.setDropDownImages("Cascade","Cascade","Cascade","Cascade"); | |
this._radioGroupId=e.radioGroupId; | |
if(d._addItem){d._addItem(this,e.index) | |
}if(!a){this.addSelectionListener(this.__handleItemSelect.bind(this)) | |
}}; | |
DwtMenuItem.PARAMS=["parent","style","radioGroupId","index","className","posStyle","id"]; | |
DwtMenuItem.prototype=new DwtButton; | |
DwtMenuItem.prototype.constructor=DwtMenuItem; | |
DwtMenuItem.prototype.isDwtMenuItem=true; | |
DwtMenuItem.prototype.toString=function(){return"DwtMenuItem" | |
}; | |
DwtMenuItem.prototype.role="menuitem"; | |
DwtMenuItem.CHECKED=1; | |
DwtMenuItem.UNCHECKED=2; | |
DwtMenuItem.NO_STYLE=0; | |
DwtMenuItem.CHECK_STYLE=DwtButton._LAST_STYLE*2; | |
DwtMenuItem.RADIO_STYLE=DwtButton._LAST_STYLE*4; | |
DwtMenuItem.SEPARATOR_STYLE=DwtButton._LAST_STYLE*8; | |
DwtMenuItem.CASCADE_STYLE=DwtButton._LAST_STYLE*16; | |
DwtMenuItem.PUSH_STYLE=DwtButton._LAST_STYLE*32; | |
DwtMenuItem.SELECT_STYLE=DwtButton._LAST_STYLE*64; | |
DwtMenuItem._LAST_STYLE=DwtMenuItem.SELECT_STYLE; | |
DwtMenuItem._MENU_POPUP_DELAY=250; | |
DwtMenuItem._MENU_POPDOWN_DELAY=250; | |
DwtMenuItem.prototype.TEMPLATE="dwt.Widgets#ZMenuItem"; | |
DwtMenuItem.prototype.SEPARATOR_TEMPLATE="dwt.Widgets#ZMenuItemSeparator"; | |
DwtMenuItem.prototype.BLANK_CHECK_TEMPLATE="dwt.Widgets#ZMenuItemBlankCheck"; | |
DwtMenuItem.prototype.BLANK_ICON_TEMPLATE="dwt.Widgets#ZMenuItemBlankIcon"; | |
DwtMenuItem.prototype.BLANK_CASCADE_TEMPLATE="dwt.Widgets#ZMenuItemBlankCascade"; | |
DwtMenuItem.prototype.dispose=function(){delete this._checkEl; | |
DwtButton.prototype.dispose.call(this) | |
}; | |
DwtMenuItem.create=function(c){var a=new DwtMenuItem(c); | |
if(c.imageInfo){a.setImage(c.imageInfo) | |
}if(c.text){a.setText(c.text) | |
}a.setEnabled(c.enabled!==false); | |
return a | |
}; | |
DwtMenuItem.prototype.getChecked=function(){return this._itemChecked | |
}; | |
DwtMenuItem.prototype.setChecked=function(c,a){this._setChecked(c,null,a); | |
this.parent._checkItemAdded(this) | |
}; | |
DwtMenuItem.prototype.setImage=function(a){DwtButton.prototype.setImage.call(this,a); | |
this.parent._iconItemAdded(this) | |
}; | |
DwtMenuItem.prototype.setText=function(a){DwtButton.prototype.setText.call(this,a); | |
if(this.parent.isPoppedUp()){this.parent.render() | |
}}; | |
DwtMenuItem.prototype.setMenu=function(a){var a=Dwt.getParams(arguments,DwtButton.setMenuParams); | |
DwtButton.prototype.setMenu.call(this,a); | |
this.parent._submenuItemAdded(this) | |
}; | |
DwtMenuItem.prototype.setHoverDelay=function(a){this._hoverDelay=a | |
}; | |
DwtMenuItem.prototype.setShortcut=function(a){if(a&&this._dropDownEl){this._dropDownEl.innerHTML=a | |
}}; | |
DwtMenuItem.prototype.setSelectableWithSubmenu=function(a){this._selectableWithSubmenu=a | |
}; | |
DwtMenuItem.prototype.isSeparator=function(){return Boolean(this._style&DwtMenuItem.SEPARATOR_STYLE) | |
}; | |
DwtMenuItem.prototype.handleKeyAction=function(a,c){if(this.parent){return this.parent.handleKeyAction(a,c) | |
}else{return DwtButton.prototype.handleKeyAction.call(this,a,c) | |
}}; | |
DwtMenuItem.prototype.getKeyMapName=function(){return DwtKeyMap.MAP_MENU | |
}; | |
DwtMenuItem.prototype._createHtml=function(a){var c=this.isSeparator()?this.SEPARATOR_TEMPLATE:this.TEMPLATE; | |
DwtButton.prototype._createHtml.call(this,a||c) | |
}; | |
DwtMenuItem.prototype._createHtmlFromTemplate=function(a,c){DwtButton.prototype._createHtmlFromTemplate.call(this,a,c); | |
this._checkEl=document.getElementById(c.id+"_check") | |
}; | |
DwtMenuItem.prototype._setChecked=function(g,f,c){var a=this._style&DwtMenuItem.CHECK_STYLE; | |
var e=this._style&DwtMenuItem.RADIO_STYLE; | |
if((a||e)&&this._itemChecked!=g){this._itemChecked=g; | |
if(this._checkEl){this._checkEl.innerHTML=""; | |
var d=g?(a?"MenuCheck":"MenuRadio"):"Blank_9"; | |
AjxImg.setImage(this._checkEl,d); | |
if(g){if(e){this.parent._radioItemSelected(this,c) | |
}}}}}; | |
DwtMenuItem.prototype._checkItemAdded=function(a){}; | |
DwtMenuItem.prototype._checkedItemsRemoved=function(){}; | |
DwtMenuItem.prototype._submenuItemAdded=function(){if(this.isSeparator()){return | |
}if(this._cascCell==null){this._cascCell=this._row.insertCell(-1); | |
this._cascCell.noWrap=true | |
}}; | |
DwtMenuItem.prototype._submenuItemRemoved=function(){if(this._dropDownEl){this._dropDownEl.innerHTML="" | |
}}; | |
DwtMenuItem.prototype._popupMenu=function(f,l){var a=this.getMenu(); | |
var c=this.parent.parent; | |
var j=this.getBounds(); | |
var g=a.shell.getSize(); | |
var m=a.getSize(); | |
var k; | |
var h; | |
var e; | |
var i; | |
var d=c.getHtmlElement(); | |
if(c._style==DwtMenu.BAR_STYLE){e=(d.style.borderLeftWidth=="")?0:parseInt(d.style.borderLeftWidth); | |
k=j.x+e; | |
i=(d.style.borderTopWidth=="")?0:parseInt(d.style.borderTopWidth); | |
i+=(d.style.borderBottomWidth=="")?0:parseInt(d.style.borderBottonWidth); | |
h=j.y+j.height+i; | |
k=((k+m.x)>=g.x)?k-(k+m.x-g.x):k | |
}else{e=(d.style.borderLeftWidth=="")?0:parseInt(d.style.borderLeftWidth); | |
e+=(d.style.borderRightWidth=="")?0:parseInt(d.style.borderRightWidth); | |
k=j.x+j.width+e; | |
i=(d.style.borderTopWidth=="")?0:parseInt(d.style.borderTopWidth); | |
h=j.y+i; | |
if(a.centerOnParentVertically()){h+=j.height/2 | |
}}a.popup(f,k,h,l) | |
}; | |
DwtMenuItem.prototype._popdownMenu=function(){var a=this.getMenu(); | |
if(a){a.popdown() | |
}}; | |
DwtMenuItem.prototype._isMenuPoppedUp=function(){var a=this.getMenu(); | |
return(a&&a.isPoppedUp()) | |
}; | |
DwtMenuItem.prototype._blur=function(){var a=this.parent; | |
var c=new DwtMouseEvent(); | |
this._setMouseEvent(c,{dwtObj:this,ersatz:true,type:DwtEvent.ONMOUSEOUT}); | |
this.notifyListeners(DwtEvent.ONMOUSEOUT,c); | |
a.__currentItem=null; | |
DwtButton.prototype._blur.call(this) | |
}; | |
DwtMenuItem.prototype._focus=function(){var c=this.parent; | |
var a=c.__currentItem; | |
var d=new DwtMouseEvent(); | |
this._setMouseEvent(d,{dwtObj:this,ersatz:true}); | |
this.notifyListeners(AjxEnv.isIE?DwtEvent.ONMOUSEENTER:DwtEvent.ONMOUSEOVER,d); | |
c.__currentItem=this; | |
DwtButton.prototype._focus.call(this) | |
}; | |
DwtMenuItem.prototype.__handleItemSelect=function(a){this.setDisplayState(DwtControl.NORMAL); | |
if(this.isStyle(DwtMenuItem.CHECK_STYLE)){this._setChecked(!this._itemChecked,null,true); | |
a.detail=this.getChecked()?DwtMenuItem.CHECKED:DwtMenuItem.UNCHECKED | |
}else{if(this.isStyle(DwtMenuItem.RADIO_STYLE)){this._setChecked(true,true); | |
this.parent._radioItemSelected(this,true); | |
a.detail=this.getChecked()?DwtMenuItem.CHECKED:DwtMenuItem.UNCHECKED | |
}else{if(this.isStyle(DwtMenuItem.PUSH_STYLE)){if(this._menu){if(this._isMenuPoppedUp()){DwtMenu.closeActiveMenu(a) | |
}else{this._popupMenu(DwtKeyEvent.isKeyEvent(ev)) | |
}}return | |
}}}if(!this.isStyle(DwtMenuItem.CASCADE_STYLE)){if(this._selectableWithSubmenu||!this._menu||!this._menu.isPoppedUp||!this._menu.isPoppedUp()){DwtMenu.closeActiveMenu(a) | |
}}}; | |
DwtMenuItem._mouseOverListener=function(c){var a=c.dwtObj; | |
if(!a){return false | |
}var d=a.parent; | |
if(a.isSeparator()){return false | |
}DwtButton._mouseOverListener(c,a); | |
if(!c.ersatz){d._popdownSubmenus() | |
}if(!a.hasFocus()&&a.getEnabled()){a.focus() | |
}if(a._menu&&!c.ersatz){a._popupMenu(a._hoverDelay) | |
}}; | |
DwtMenuItem._mouseOutListener=function(d){var c=d.dwtObj; | |
var a=c&&c.getMenu(); | |
if(a&&a.isPoppedUp()){return | |
}DwtButton._mouseOutListener(d) | |
}; | |
DwtMenuItem.prototype.getRowElement=function(){var a=this._textEl||this._dropDownEl||(this._iconEl&&this._iconEl.left)||(this._iconEl&&this._iconEl.right); | |
if(a){return a.parentNode | |
}}; | |
DwtMenuItem._listeners={}; | |
DwtMenuItem._listeners[DwtEvent.ONMOUSEOVER]=DwtMenuItem._mouseOverListener.bind(); | |
DwtMenuItem._listeners[DwtEvent.ONMOUSEOUT]=DwtMenuItem._mouseOutListener.bind(); | |
DwtMenuItem._listeners[DwtEvent.ONMOUSEDOWN]=DwtButton._mouseDownListener.bind(); | |
DwtMenuItem._listeners[DwtEvent.ONMOUSEUP]=DwtButton._mouseUpListener.bind(); | |
DwtMenuItem._listeners[DwtEvent.ONMOUSEENTER]=DwtMenuItem._mouseOverListener.bind(); | |
DwtMenuItem._listeners[DwtEvent.ONMOUSELEAVE]=DwtButton._mouseOutListener.bind() | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtMenu")){DwtMenu=function(e){this._created=false; | |
if(arguments.length==0){return | |
}e=Dwt.getParams(arguments,DwtMenu.PARAMS); | |
this._origStyle=e.style; | |
var c=e.parent; | |
if(c){if(c instanceof DwtMenuItem||c instanceof DwtButton){if((e.style==DwtMenu.GENERIC_WIDGET_STYLE)||(e.style==DwtMenu.DROPDOWN_CENTERV_STYLE)){this._style=e.style | |
}else{this._style=DwtMenu.DROPDOWN_STYLE | |
}}else{this._style=e.style||DwtMenu.POPUP_STYLE | |
}if(!e.posStyle){e.posStyle=(this._style==DwtMenu.BAR_STYLE)?DwtControl.STATIC_STYLE:DwtControl.ABSOLUTE_STYLE | |
}}e.className=e.className||"DwtMenu"; | |
this._layoutStyle=e.layout==null||e.layout; | |
if(this._layoutStyle===true){this._layoutStyle=DwtMenu.LAYOUT_CASCADE | |
}else{if(this._layoutStyle===false){this._layoutStyle=DwtMenu.LAYOUT_STACK | |
}}this._maxRows=this._layoutStyle&&e.maxRows||0; | |
this._congruent=e.congruent; | |
e.parent=(c instanceof DwtShell)?c:c.shell; | |
DwtComposite.call(this,e); | |
this.parent=c; | |
if(this._isPopupStyle()&&(this._layoutStyle==DwtMenu.LAYOUT_STACK)){this.setScrollStyle(DwtControl.SCROLL) | |
}if(!c){return | |
}var a=AjxEnv.isIE?[DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEUP]:[DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEUP,DwtEvent.ONMOUSEOVER,DwtEvent.ONMOUSEOUT]; | |
this._setEventHdlrs(a); | |
this._hasSetMouseEvents=true; | |
var d=this.getHtmlElement(); | |
if(e.posStyle!=DwtControl.STATIC_STYLE){Dwt.setLocation(d,Dwt.LOC_NOWHERE,Dwt.LOC_NOWHERE) | |
}if(this._style!=DwtMenu.COLOR_PICKER_STYLE&&this._style!=DwtMenu.CALENDAR_PICKER_STYLE&&this._style!=DwtMenu.GENERIC_WIDGET_STYLE){this._table=document.createElement("table"); | |
this._table.border=this._table.cellPadding=this._table.cellSpacing=0; | |
this._table.className="DwtMenuTable"; | |
this._table.id=Dwt.getNextId(); | |
if(this._layoutStyle==DwtMenu.LAYOUT_SCROLL){this._setupScroll() | |
}else{d.appendChild(this._table) | |
}this._table.backgroundColor=DwtCssStyle.getProperty(d,"background-color") | |
}if(e.style!=DwtMenu.BAR_STYLE){this.setVisible(false); | |
this._isPoppedUp=false | |
}else{DwtMenu._activeMenuIds.add(d.id,null,true); | |
this._isPoppedUp=true | |
}this._popdownAction=new AjxTimedAction(this,this._doPopdown); | |
this._popdownActionId=-1; | |
this._popupAction=new AjxTimedAction(this,this._doPopup); | |
this._popupActionId=-1; | |
this._outsideListener=new AjxListener(null,DwtMenu._outsideMouseDownListener); | |
this._menuItemsHaveChecks=false; | |
this._menuItemsHaveIcons=false; | |
this._menuItemsWithSubmenus=0; | |
this.__currentItem=null; | |
this.__preventMenuFocus=false; | |
this._created=true; | |
this._itemSelectionListener=new AjxListener(this,this._propagateItemSelection); | |
if(c._menuAdded){c._menuAdded(this) | |
}}; | |
DwtMenu.PARAMS=["parent","style","className","posStyle","cascade","id"]; | |
DwtMenu.prototype=new DwtComposite; | |
DwtMenu.prototype.constructor=DwtMenu; | |
DwtMenu.prototype.isDwtMenu=true; | |
DwtMenu.prototype.toString=function(){return"DwtMenu" | |
}; | |
DwtMenu.prototype.role="menu"; | |
DwtMenu.BAR_STYLE="BAR"; | |
DwtMenu.POPUP_STYLE="POPUP"; | |
DwtMenu.DROPDOWN_STYLE="DROPDOWN"; | |
DwtMenu.DROPDOWN_CENTERV_STYLE="DROPDOWN_CENTERV"; | |
DwtMenu.COLOR_PICKER_STYLE="COLOR"; | |
DwtMenu.CALENDAR_PICKER_STYLE="CALENDAR"; | |
DwtMenu.GENERIC_WIDGET_STYLE="GENERIC"; | |
DwtMenu.HAS_ICON="ZHasIcon"; | |
DwtMenu.HAS_CHECK="ZHasCheck"; | |
DwtMenu.HAS_SUBMENU="ZHasSubMenu"; | |
DwtMenu.LAYOUT_STACK=0; | |
DwtMenu.LAYOUT_CASCADE=1; | |
DwtMenu.LAYOUT_SCROLL=2; | |
DwtMenu._activeMenuUp=false; | |
DwtMenu._activeMenuIds=new AjxVector(); | |
DwtMenu._activeMenus=new AjxVector(); | |
DwtMenu.prototype.dispose=function(){this._table=null; | |
DwtComposite.prototype.dispose.call(this); | |
if(!(this.parent instanceof DwtShell)){this.shell.removeChild(this) | |
}}; | |
DwtMenu.prototype.addSelectionListener=function(a){this.addListener(DwtEvent.SELECTION,a) | |
}; | |
DwtMenu.prototype.removeSelectionListener=function(a){this.removeListener(DwtEvent.SELECTION,a) | |
}; | |
DwtMenu.prototype.addPopupListener=function(a){this.addListener(DwtEvent.POPUP,a) | |
}; | |
DwtMenu.prototype.removePopupListener=function(a){this.removeListener(DwtEvent.POPUP,a) | |
}; | |
DwtMenu.prototype.addPopdownListener=function(a){this.addListener(DwtEvent.POPDOWN,a) | |
}; | |
DwtMenu.prototype.removePopdownListener=function(a){this.removeListener(DwtEvent.POPDOWN,a) | |
}; | |
DwtMenu.prototype.setWidth=function(a){this._width=a; | |
if(this._table){Dwt.setSize(this._table,a,Dwt.CLEAR) | |
}}; | |
DwtMenu.prototype.centerOnParentVertically=function(){return(this._style===DwtMenu.DROPDOWN_CENTERV_STYLE) | |
}; | |
DwtMenu.prototype._isPopupStyle=function(){return(this._style===DwtMenu.POPUP_STYLE||this._style===DwtMenu.DROPDOWN_STYLE||this._style===DwtMenu.DROPDOWN_CENTERV_STYLE) | |
}; | |
DwtMenu.prototype.getItem=function(a){return this._children.get(a) | |
}; | |
DwtMenu.prototype.getItemIndex=function(a){return this._children.indexOf(a) | |
}; | |
DwtMenu.prototype.getItemById=function(d,f){var a=this.getItems(); | |
for(var c=0; | |
c<a.length; | |
c++){var e=a[c].getData(d); | |
if(e==f){a[c].index=c; | |
return a[c] | |
}}return null | |
}; | |
DwtMenu.prototype.getItemCount=function(){return this._children.size() | |
}; | |
DwtMenu.prototype.getItems=function(){return this._children.getArray() | |
}; | |
DwtMenu.prototype.getSelectedItem=function(f){var c=this._children.getArray(); | |
for(var e=0; | |
e<c.length; | |
e++){var d=c[e]; | |
if((f==null||(d._style&&f!=0))&&d.getChecked()){return d | |
}}return null | |
}; | |
DwtMenu.prototype.isPoppedUp=function(){return this._isPoppedUp | |
}; | |
DwtMenu.prototype.popup=function(d,a,e,c){if(this._style==DwtMenu.BAR_STYLE){return | |
}if(this._popdownActionId!=-1){AjxTimedAction.cancelAction(this._popdownActionId); | |
this._popdownActionId=-1 | |
}else{if(this._isPoppedUp||(this._popupActionId!=-1&&d&&d>0)){return | |
}else{if(this._popupActionId!=-1){AjxTimedAction.cancelAction(this._popupActionId); | |
this._popupActionId=-1 | |
}}if(!d){this._doPopup(a,e,c) | |
}else{this._popupAction.args=[a,e,c]; | |
this._popupActionId=AjxTimedAction.scheduleAction(this._popupAction,d) | |
}}}; | |
DwtMenu.prototype.popdown=function(c,a){if(this._style==DwtMenu.BAR_STYLE){return | |
}if(this._popupActionId!=-1){AjxTimedAction.cancelAction(this._popupActionId); | |
this._popupActionId=-1 | |
}else{if(!this._isPoppedUp||this._popdownActionId!=-1){return | |
}if(c==null||c==0){this._doPopdown(a) | |
}else{this._popdownActionId=AjxTimedAction.scheduleAction(this._popdownAction,c) | |
}}}; | |
DwtMenu.prototype._setupScroll=function(){var i=this.getHtmlElement(); | |
this._table.style.position="relative"; | |
this._topScroller=document.createElement("div"); | |
this._topScroller.className="DwtMenuScrollTop"; | |
this._topScroller.id=Dwt.getNextId(); | |
this._imgDivTop=document.createElement("div"); | |
this._imgDivTop.className="ImgUpArrowSmall"; | |
this._topScroller.appendChild(this._imgDivTop); | |
Dwt.setHandler(this._imgDivTop,DwtEvent.ONMOUSEOUT,DwtMenu._stopEvent); | |
Dwt.setHandler(this._imgDivTop,DwtEvent.ONMOUSEOVER,DwtMenu._stopEvent); | |
i.appendChild(this._topScroller); | |
this._tableContainer=document.createElement("div"); | |
this._tableContainer.appendChild(this._table); | |
i.appendChild(this._tableContainer); | |
this._bottomScroller=document.createElement("div"); | |
this._bottomScroller.className="DwtMenuScrollBottom"; | |
this._bottomScroller.id=Dwt.getNextId(); | |
this._imgDivBottom=document.createElement("div"); | |
this._imgDivBottom.className="ImgDownArrowSmall"; | |
Dwt.setHandler(this._imgDivBottom,DwtEvent.ONMOUSEOUT,DwtMenu._stopEvent); | |
Dwt.setHandler(this._imgDivBottom,DwtEvent.ONMOUSEOVER,DwtMenu._stopEvent); | |
this._bottomScroller.appendChild(this._imgDivBottom); | |
i.appendChild(this._bottomScroller); | |
var d=AjxCallback.simpleClosure(this._scroll,this,this._table.id,true,false); | |
var a=AjxCallback.simpleClosure(this._scroll,this,this._table.id,false,false); | |
var c=AjxCallback.simpleClosure(this._handleMouseOut,this,this._topScroller.id,this._table.id); | |
var g=AjxCallback.simpleClosure(this._handleMouseOut,this,this._bottomScroller.id,this._table.id); | |
Dwt.setHandler(this._topScroller,DwtEvent.ONMOUSEDOWN,d); | |
Dwt.setHandler(this._topScroller,DwtEvent.ONMOUSEUP,a); | |
if(!AjxEnv.isIE){Dwt.setHandler(this._topScroller,DwtEvent.ONMOUSEOUT,c) | |
}else{Dwt.setHandler(this._topScroller,DwtEvent.ONMOUSELEAVE,a) | |
}var f=AjxCallback.simpleClosure(this._scroll,this,this._table.id,true,true); | |
var e=AjxCallback.simpleClosure(this._scroll,this,this._table.id,false,true); | |
Dwt.setHandler(this._bottomScroller,DwtEvent.ONMOUSEDOWN,f); | |
Dwt.setHandler(this._bottomScroller,DwtEvent.ONMOUSEUP,e); | |
Dwt.setHandler(this._bottomScroller,DwtEvent.ONMOUSEUP,e); | |
if(!AjxEnv.isIE){Dwt.setHandler(this._bottomScroller,DwtEvent.ONMOUSEOUT,g) | |
}else{Dwt.setHandler(this._bottomScroller,DwtEvent.ONMOUSELEAVE,e) | |
}var h=AjxCallback.simpleClosure(this._handleScroll,this,this._table.id); | |
Dwt.setHandler(i,DwtEvent.ONMOUSEWHEEL,h) | |
}; | |
DwtMenu.prototype.render=function(v,t){var A=this.shell.getSize(); | |
var H=this.getSize(); | |
var w=this.getHtmlElement(); | |
A.y-=10+(AjxEnv.isIE?20:0); | |
A.x-=28; | |
var z=this._layoutStyle==DwtMenu.LAYOUT_SCROLL; | |
var g=this._isPopupStyle(); | |
var D=this._layoutStyle==DwtMenu.LAYOUT_CASCADE; | |
if(this._table){if(g&&D){var I=A.y; | |
var J=null; | |
var u=this._table.rows; | |
var h=u.length; | |
var c=this._maxRows; | |
var B=H.y; | |
var s=I-25; | |
for(var F=h-1; | |
F>=0; | |
F--){B-=Dwt.getSize(u[F]).y; | |
if(B<s){break | |
}}var r=c?Math.min(F+1,c):(F+1); | |
for(var E=r; | |
E<h; | |
E++){var q=u[(E-r)%r]; | |
var e=q.insertCell(-1); | |
e.className="DwtMenuCascadeCell"; | |
var p=u[E].cells[0].firstChild; | |
while(p!=null){e.appendChild(p); | |
p=p.nextSibling | |
}}for(E=u.length-1; | |
E>=r; | |
E--){this._table.deleteRow(r) | |
}var n=h%r; | |
if(n>0){for(var E=n; | |
E<r; | |
E++){var q=u[E]; | |
var e=q.insertCell(-1); | |
e.className="DwtMenuCascadeCell"; | |
e.empty=true; | |
e.innerHTML=" " | |
}}H=this.getSize(); | |
if(J){t=J-H.y | |
}}else{if(g&&z){var u=this._table.rows; | |
var h=u.length; | |
var c=this._maxRows; | |
var o=c?Math.min(c,h):h; | |
var m=A.y-25; | |
var B=20; | |
for(var F=0; | |
F<o; | |
F++){var a=Dwt.getSize(u[F]).y; | |
if(B+a<=m){B+=a | |
}else{break | |
}}H.y=B | |
}}}var L="auto"; | |
var l="auto"; | |
if(g&&z){l=H.y; | |
if(this._tableContainer){this._tableContainer.style.height=(l-20)+"px" | |
}}else{if((g&&D)||t+H.y<A.y-5){l="auto" | |
}else{l=A.y-t-5 | |
}}if(z){if(this._table){this._table.style.width=H.x | |
}L=H.x | |
}this.setSize(L,l); | |
if((AjxEnv.isGeckoBased||AjxEnv.isSafari||(this._origStyle==DwtMenu.CALENDAR_PICKER_STYLE))&&this._table&&!z){w.style.width=(H.x+(g&&!D?10:0))+"px" | |
}var K=v+H.x>=A.x?A.x-H.x:v; | |
if(this.parent instanceof DwtMenuItem){Dwt.delClass(w,"DwtMenu-congruentLeft"); | |
Dwt.delClass(w,"DwtMenu-congruentRight"); | |
var G=this.parent.getBounds(); | |
var M=DwtCssStyle.getComputedStyleObject(this.parent.parent.getHtmlElement()); | |
var d=DwtCssStyle.getComputedStyleObject(w); | |
if(((K>G.x&&K<G.x+G.width)||(G.x>=K&&G.x<K+H.x))&&G.x>=H.x){var f=parseInt(d.width); | |
if(!AjxEnv.isIE){f+=parseInt(d.paddingLeft)+parseInt(d.paddingRight)+parseInt(d.borderLeftWidth)+parseInt(d.borderRightWidth) | |
}K=(parseInt(M.left)||G.x)-(f||H.x); | |
if(this._congruent){var n; | |
if(AjxEnv.isIE){n=parseInt(d.borderLeftWidth) | |
}else{n=parseInt(d.borderLeftWidth)+parseInt(d.borderRightWidth) | |
}if(!isNaN(n)){K+=n; | |
Dwt.addClass(w,"DwtMenu-congruentLeft") | |
}}}else{var k=parseInt(M.left)||(G.x-(parseInt(M.paddingLeft)||0)); | |
var C=parseInt(M.width)||G.width; | |
K=k+C; | |
if(this._congruent){var n=parseInt(M.paddingRight)+parseInt(d.paddingLeft)+parseInt(d.borderLeftWidth); | |
if(!isNaN(n)){K+=n; | |
Dwt.addClass(w,"DwtMenu-congruentRight") | |
}}}}if(this._style===DwtMenu.DROPDOWN_CENTERV_STYLE){t-=H.y/2; | |
if(t<0){t=0 | |
}}var J=g&&t+H.y>=A.y?A.y-H.y:t; | |
if(this.parent instanceof DwtMenuItem&&this._congruent){var n=(parseInt(d.paddingTop)||0)-(parseInt(d.borderTopWidth)||0); | |
if(n>0){J-=n | |
}}K=K<0&&K!==Dwt.DEFAULT?0:K; | |
J=J<0&&J!==Dwt.DEFAULT?0:J; | |
this.setLocation(K,J) | |
}; | |
DwtMenu.prototype.getKeyMapName=function(){return DwtKeyMap.MAP_MENU | |
}; | |
DwtMenu.prototype._handleScroll=function(a,e){if(!e){e=window.event | |
}var g=Dwt.byId(a); | |
if(g&&e){e=e?e:window.event; | |
var c=e.detail?e.detail*-1:e.wheelDelta/40; | |
var f=g.rows; | |
var d=Dwt.getSize(f[0]).y||10; | |
this._popdownSubmenus(); | |
if(c>0){this._doScroll(g,+d) | |
}else{if(c<0){this._doScroll(g,-d) | |
}}}}; | |
DwtMenu.prototype._handleMouseOut=function(a,c,d){if(a&&d.type&&d.type=="mouseout"&&!AjxEnv.isIE){var e=a?Dwt.byId(a):null; | |
fromEl=d.target; | |
if(fromEl!=e){return | |
}toEl=d.relatedTarget; | |
while(toEl){toEl=toEl.parentNode; | |
if(toEl==e){return | |
}}this._scroll(c,false,false,null) | |
}}; | |
DwtMenu.prototype._scroll=function(a,g,f,d){var h=a?document.getElementById(a):null; | |
if(h&&g){var e=h.rows; | |
var c=Dwt.getSize(e[0]).y||10; | |
if(this._direction!=f||!this._scrollTimer){this._popdownSubmenus(); | |
this._direction=f; | |
if(this._scrollTimer){clearInterval(this._scrollTimer); | |
this._scrollTimer=null | |
}if(f){this._scrollTimer=setInterval(AjxCallback.simpleClosure(this._doScroll,this,h,-c),100); | |
this._doScroll(h,-c) | |
}else{this._scrollTimer=setInterval(AjxCallback.simpleClosure(this._doScroll,this,h,c),100); | |
this._doScroll(h,c) | |
}}}else{if(this._scrollTimer){clearInterval(this._scrollTimer); | |
this._scrollTimer=null | |
}}}; | |
DwtMenu.prototype._doScroll=function(h,e){if(h&&e){var d=parseInt(h.style.top)||0; | |
var g; | |
if(e<0){var f=this._table.rows||null; | |
var c=f&&f.length&&Dwt.getSize(f[0]).y; | |
var a=h.scrollHeight-(parseInt(h.parentNode.style.height)||((this._maxRows||(f&&f.length))*c)||0); | |
if(Math.abs(d+e)<=a){g=d+e | |
}else{g=-a | |
}}else{if((d+e)<0){g=d+e | |
}else{g=0 | |
}}Dwt.setLocation(h,Dwt.DEFAULT,g) | |
}}; | |
DwtMenu.prototype.scrollToItem=function(d,a){var c=this.getItemIndex(d); | |
if(c!=-1){this.scrollToIndex(c,a) | |
}}; | |
DwtMenu.prototype.scrollToIndex=function(j,e){if(this._created&&this._layoutStyle==DwtMenu.LAYOUT_SCROLL&&j!==null&&j>=0&&this._table){var p=this._table.rows; | |
if(p){var n=this._maxRows; | |
var a=0; | |
var l=[]; | |
for(var d=0,g=p.length; | |
d<g; | |
d++){var f=Dwt.getSize(p[d]).y; | |
if(d<n){a+=f | |
}l.push(f) | |
}var c=l[j]; | |
var k=parseInt(this._table.style.top)||0; | |
if(j>=p.length){j=p.length-1 | |
}var m=0; | |
for(var d=0; | |
d<j&&d<l.length; | |
d++){m+=l[d] | |
}var o=0; | |
if(e){if(m<-k){o=-(m+k) | |
}else{if(m+c>a-k){o=-(m+k-a+c) | |
}}}else{o=-(m+k) | |
}if(o){this._popdownSubmenus(); | |
this._doScroll(this._table,o) | |
}}}}; | |
DwtMenu.prototype.handleKeyAction=function(c,e){switch(this._style){case DwtMenu.BAR_STYLE:case DwtMenu.POPUP_STYLE:case DwtMenu.DROPDOWN_STYLE:case DwtMenu.DROPDOWN_CENTERV_STYLE:break; | |
default:return false | |
}switch(c){case DwtKeyMap.PAGE_UP:case DwtKeyMap.PAGE_DOWN:var d=this.__currentItem||this._children.get(0); | |
var a=this.getItemIndex(d); | |
if(this._maxRows&&a!==-1){this.setSelectedItem(a+((c===DwtKeyMap.PAGE_UP)?-this._maxRows:this._maxRows)) | |
}else{this.setSelectedItem(c===DwtKeyMap.PAGE_DOWN) | |
}break; | |
case DwtKeyMap.SELECT_PREV:case DwtKeyMap.SELECT_NEXT:this.setSelectedItem(c===DwtKeyMap.SELECT_NEXT); | |
break; | |
case DwtKeyMap.SELECT:if(this.__currentItem){this.__currentItem._emulateSingleClick() | |
}break; | |
case DwtKeyMap.SUBMENU:if(this.__currentItem&&this.__currentItem._menu){this.__currentItem._popupMenu(0,true) | |
}break; | |
case DwtKeyMap.PARENTMENU:if(this.parent.isDwtMenuItem){this.popdown(); | |
this.parent.focus() | |
}break; | |
case DwtKeyMap.CANCEL:this.popdown(); | |
break; | |
default:return false | |
}return true | |
}; | |
DwtMenu.prototype.setAssociatedObj=function(a){this._associatedObj=a | |
}; | |
DwtMenu.prototype.setAssociatedElementId=function(a){this._associatedElId=a | |
}; | |
DwtMenu.prototype.checkItem=function(g,f,d){var a=this._children.getArray(); | |
for(var c=0; | |
c<a.length; | |
c++){var e=a[c]; | |
if(!(e.isStyle(DwtMenuItem.CHECK_STYLE)||e.isStyle(DwtMenuItem.RADIO_STYLE))){continue | |
}var h=e.getData(g); | |
if(h==f){e.setChecked(true,d) | |
}}}; | |
DwtMenu.prototype.setSelectedItem=function(d,c){var a=this.__currentItem; | |
if(typeof(d)=="boolean"){a=!a?this._children.get(0):d?this._children.getNext(a):this._children.getPrev(a) | |
}else{if(d instanceof DwtMenuItem){if(this._children.contains(d)){a=d | |
}}else{d=Math.max(0,Math.min(this._children.size()-1,d)); | |
a=this._children.get(d) | |
}}while(a){if(!a.isStyle){if(!c){a.focus() | |
}break | |
}else{if(!a.isStyle(DwtMenuItem.SEPARATOR_STYLE)&&a.getEnabled()&&a.getVisible()){break | |
}}a=(d===false)?this._children.getPrev(a):this._children.getNext(a) | |
}if(!a){return | |
}this.scrollToItem(a,true); | |
if(!c){a.focus() | |
}if(this.parent&&this.parent._menuItemSelected){this.parent._menuItemSelected(a) | |
}}; | |
DwtMenu.prototype.clearExternallySelectedItems=function(){if(this._externallySelected!=null){this._externallySelected._deselect(); | |
this._externallySelected=null | |
}}; | |
DwtMenu.prototype.removeChild=function(d){if(this._table){if(this._style==DwtMenu.BAR_STYLE){var a=d.getHtmlElement().parentNode; | |
this._table.rows[0].deleteCell(Dwt.getCellIndex(a)) | |
}else{var c=d.getHtmlElement(); | |
if(c&&c.parentNode&&c.parentNode.parentNode.rowIndex>-1){this._table.deleteRow(c.parentNode.parentNode.rowIndex) | |
}}}this._children.remove(d); | |
if(d.removeSelectionListener){d.removeSelectionListener(this._itemSelectionListener) | |
}}; | |
DwtMenu.prototype.addChild=function(a){DwtComposite.prototype.addChild.apply(this,arguments); | |
if(Dwt.instanceOf(a,"DwtColorPicker")||Dwt.instanceOf(a,"DwtCalendar")||(this._style==DwtMenu.GENERIC_WIDGET_STYLE)){this._addItem(a) | |
}if(a.addSelectionListener){a.addSelectionListener(this._itemSelectionListener) | |
}}; | |
DwtMenu.prototype._addItem=function(e,c){if(this._style==DwtMenu.COLOR_PICKER_STYLE||this._style==DwtMenu.CALENDAR_PICKER_STYLE||this._style==DwtMenu.GENERIC_WIDGET_STYLE){return | |
}var g; | |
var a; | |
if(this._style==DwtMenu.BAR_STYLE){var f=this._table.rows; | |
g=(f.length!=0)?f[0]:this._table.insertRow(0); | |
if(c==null||c>g.cells.length){c=f.cells.length | |
}a=g.insertCell(c); | |
a.align="center"; | |
a.vAlign="middle"; | |
var d=g.insertCell(-1); | |
d.nowrap=true; | |
d.width="7px" | |
}else{if(e.isStyle&&(e.isStyle(DwtMenuItem.CHECK_STYLE)||e.isStyle(DwtMenuItem.RADIO_STYLE))){this._checkItemAdded() | |
}if(c==null||c>this._table.rows.length){c=-1 | |
}g=this._table.insertRow(c); | |
a=g.insertCell(0) | |
}a.noWrap=true; | |
a.appendChild(e.getHtmlElement()) | |
}; | |
DwtMenu.prototype._radioItemSelected=function(h,f){var d=h._radioGroupId; | |
var g=this._children.size(); | |
var c=this._children.getArray(); | |
for(var e=0; | |
e<g; | |
e++){if(c[e]!=h&&c[e].isStyle(DwtMenuItem.RADIO_STYLE)&&c[e]._radioGroupId==d&&c[e]._itemChecked){c[e].setChecked(false,f); | |
break | |
}}}; | |
DwtMenu.prototype._propagateItemSelection=function(a){if(this.isListenerRegistered(DwtEvent.SELECTION)){this.notifyListeners(DwtEvent.SELECTION,a) | |
}}; | |
DwtMenu.prototype._menuHasCheckedItems=function(){return this._menuItemsHaveChecks | |
}; | |
DwtMenu.prototype._menuHasItemsWithIcons=function(){return this._menuItemsHaveIcons | |
}; | |
DwtMenu.prototype._menuHasSubmenus=function(){return(this._menuItemsWithSubmenus>0) | |
}; | |
DwtMenu.prototype._iconItemAdded=function(a){if(!this._menuItemsHaveIcons){Dwt.addClass(this.getHtmlElement(),DwtMenu.HAS_ICON) | |
}this._menuItemsHaveIcons=true | |
}; | |
DwtMenu.prototype._checkItemAdded=function(a){if(!this._menuItemsHaveChecks){Dwt.addClass(this.getHtmlElement(),DwtMenu.HAS_CHECK) | |
}this._menuItemsHaveChecks=true | |
}; | |
DwtMenu.prototype._submenuItemAdded=function(){Dwt.addClass(this.getHtmlElement(),DwtMenu.HAS_SUBMENU); | |
this._menuItemsWithSubmenus++ | |
}; | |
DwtMenu.prototype._submenuItemRemoved=function(){if(this._menuItemsWithSubmenus==1){var e=this._children.size(); | |
var c=this._children.getArray(); | |
for(var d=0; | |
d<e; | |
d++){c[d]._submenuItemRemoved() | |
}}this._menuItemsWithSubmenus--; | |
if(this._menuItemsWithSubmenus==0){Dwt.delClass(this.getHtmlElement(),DwtMenu.HAS_SUBMENU) | |
}}; | |
DwtMenu.prototype._popdownSubmenus=function(){var e=this._children.size(); | |
var c=this._children.getArray(); | |
for(var d=0; | |
d<e; | |
d++){if(c[d]._popdownMenu){c[d]._popdownMenu() | |
}}}; | |
DwtMenu.prototype.dontStealFocus=function(a){if(a==null){a=true | |
}this.__preventMenuFocus=!!a | |
}; | |
DwtMenu.prototype._doPopup=function(f,d,i){var e=DwtBaseDialog.getActiveDialog()?Dwt.Z_DIALOG_MENU:Dwt.Z_MENU; | |
this.setZIndex(e); | |
this.setVisible(true); | |
this.render(f,d); | |
var c=this._layoutStyle==DwtMenu.LAYOUT_SCROLL; | |
var g=this._layoutStyle==DwtMenu.LAYOUT_CASCADE; | |
if(!c){this.setScrollStyle(this._isPopupStyle()&&g?Dwt.CLIP:Dwt.SCROLL) | |
}else{if(this._tableContainer){Dwt.setScrollStyle(this._tableContainer,Dwt.CLIP) | |
}}this.notifyListeners(DwtEvent.POPUP,this); | |
var j=this.shell.getToolTip(); | |
if(j){j.popdown() | |
}this._popupActionId=-1; | |
this._isPoppedUp=true; | |
var h=DwtOutsideMouseEventMgr.INSTANCE; | |
var a={id:"DwtMenu",obj:this,outsideListener:this._outsideListener}; | |
h.startListening(a); | |
if(!DwtMenu._activeMenu){DwtMenu._activeMenu=this; | |
DwtMenu._activeMenuUp=true | |
}DwtMenu._activeMenuIds.add(this._htmlElId,null,true); | |
DwtMenu._activeMenuIds.sort(); | |
DwtMenu._activeMenus.add(this,null,true); | |
DwtShell.getShell(window).getKeyboardMgr().pushTabGroup(this._compositeTabGroup,this.__preventMenuFocus); | |
if(i||!this.parent.isDwtMenu){this.setSelectedItem(0,this.__preventMenuFocus) | |
}}; | |
DwtMenu.prototype.getSize=function(c){var a; | |
if(this._table){a=Dwt.getSize(this._table,c) | |
}else{a=DwtComposite.prototype.getSize.call(this,c) | |
}if(this._width&&this._width>a.x){a.x=this._width | |
}return a | |
}; | |
DwtMenu.prototype._doPopdown=function(h){var k=this._children.getArray(); | |
var o=this._children.size(); | |
for(var f=0; | |
f<o; | |
f++){if((k[f] instanceof DwtMenuItem)&&!(k[f].isStyle(DwtMenuItem.SEPARATOR_STYLE))){k[f]._popdownMenu() | |
}}this.setVisible(false); | |
this._ev=h; | |
this.notifyListeners(DwtEvent.POPDOWN,this); | |
var m=DwtOutsideMouseEventMgr.INSTANCE; | |
m.stopListening({id:"DwtMenu",obj:this}); | |
if(DwtMenu._activeMenu==this){DwtMenu._activeMenu=null; | |
DwtMenu._activeMenuUp=false | |
}DwtMenu._activeMenuIds.remove(this._htmlElId); | |
DwtMenu._activeMenus.remove(this); | |
this._popdownActionId=-1; | |
this._isPoppedUp=false; | |
if(this._isPopupStyle()&&this._table&&this._table.rows&&this._table.rows.length&&this._table.rows[0].cells.length){var d=this._table.rows[0].cells.length; | |
var g=this._table.rows.length; | |
for(var f=1; | |
f<d; | |
f++){for(var e=0; | |
e<g; | |
e++){var l=this._table.rows[e].cells[f]; | |
if(!l.empty){var c=l.firstChild; | |
var n=this._table.insertRow(this._table.rows.length); | |
var l=n.insertCell(0); | |
while(c!=null){l.appendChild(c); | |
c=c.nextSibling | |
}}}}for(var e=0; | |
e<g; | |
e++){var n=this._table.rows[e]; | |
for(var f=n.cells.length-1; | |
f>0; | |
f--){n.deleteCell(f) | |
}}}if(this.__currentItem){this.__currentItem.blur() | |
}DwtShell.getShell(window).getKeyboardMgr().popTabGroup(this._compositeTabGroup) | |
}; | |
DwtMenu.prototype._getActiveItem=function(){var c=this._children.getArray(); | |
var e=this._children.size(); | |
for(var d=0; | |
d<e; | |
d++){if(c[d]._isMenuPoppedUp()){return c[d] | |
}}return null | |
}; | |
DwtMenu._outsideMouseDownListener=function(c){if(DwtMenu._activeMenuUp){var e=DwtMenu._activeMenu; | |
var f=e._htmlElId; | |
var d=DwtUiEvent.getTarget(c); | |
while(d!=null){if(d.id&&d.id!=""&&(d.id==f||d.id==e._associatedElId||DwtMenu._activeMenuIds.binarySearch(d.id)!=-1)){return false | |
}d=d.parentNode | |
}e.popdown(0,c); | |
var a=null; | |
do{a=DwtMenu._activeMenus.getLast(); | |
if(a!=null&&a instanceof DwtMenu){a.popdown() | |
}}while(a!=null) | |
}}; | |
DwtMenu._stopEvent=function(a){if(!a){a=window.event | |
}a.cancelBubble=true; | |
if(a.stopPropagation){a.stopPropagation() | |
}}; | |
DwtMenu.menuShowing=function(){return DwtMenu._activeMenuUp | |
}; | |
DwtMenu.closeActiveMenu=function(a){if(DwtMenu._activeMenuUp){DwtMenu._activeMenu.popdown(0,a) | |
}} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtSelect")){DwtSelect=function(e){if(arguments.length==0){return | |
}e=Dwt.getParams(arguments,DwtSelect.PARAMS); | |
e.className=e.className||"ZSelect"; | |
e.posStyle=e.posStyle||Dwt.STATIC_STYLE; | |
this._legendId=e.legendId; | |
DwtButton.call(this,e); | |
var d=AjxEnv.isIE?[DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEUP]:[DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEUP,DwtEvent.ONMOUSEOVER,DwtEvent.ONMOUSEOUT]; | |
this._setEventHdlrs(d); | |
this._hasSetMouseEvents=true; | |
this._currentSelectedOption=null; | |
this._options=new AjxVector(); | |
this._optionValuesToIndices={}; | |
this._selectedValue=this._selectedOption=null; | |
this._maxRows=e.maxRows||0; | |
this._layout=e.layout; | |
this._congruent=e.congruent; | |
this._hrCount=0; | |
var a=e.options; | |
if(a){for(var c=0; | |
c<a.length; | |
++c){this.addOption(a[c]) | |
}}this.setDropDownImages("SelectPullDownArrow","SelectPullDownArrowDis","SelectPullDownArrow","SelectPullDownArrow"); | |
this._menuCallback=new AjxListener(this,this._createMenu); | |
this.setMenu(this._menuCallback,true) | |
}; | |
DwtSelect.PARAMS=["parent","options","style","className","layout"]; | |
DwtSelect.prototype=new DwtButton; | |
DwtSelect.prototype.constructor=DwtSelect; | |
DwtSelect.prototype.isDwtSelect=true; | |
DwtSelect.prototype.toString=function(){return"DwtSelect" | |
}; | |
DwtSelect.prototype.role="combobox"; | |
DwtSelect._CONTAINER_TEMPLATE="dwt.Widgets#ZSelectAutoSizingContainer"; | |
DwtSelect._objectIds=[null]; | |
DwtSelect.prototype.TEMPLATE="dwt.Widgets#ZSelect"; | |
DwtSelect.getObjectFromElement=function(a){return a&&a.dwtObj?AjxCore.objectWithId(a.dwtObj):null | |
}; | |
DwtSelect.prototype.addOption=function(g,f,h,e){if(!g){return -1 | |
}e=e||null; | |
var c=null; | |
var d=null; | |
var a=null; | |
if(typeof(g)=="string"){d=h!=null?h:g; | |
c=new DwtSelectOption(d,f,g,this,null,e) | |
}else{if(g instanceof DwtSelectOption){c=g; | |
if(h){c.setValue(h) | |
}f=c.isSelected() | |
}else{if(g instanceof DwtSelectOptionData||g.value!=null){d=h!=null?h:g.value; | |
c=new DwtSelectOption(d,g.isSelected,g.displayValue,this,null,g.image,g.selectedValue,false,g.extraData,g.id); | |
f=Boolean(g.isSelected); | |
a=g.id | |
}else{return -1 | |
}}}this._options.add(c); | |
if(this._options.size()==1||f){this._setSelectedOption(c) | |
}var j=this._pseudoItemsEl; | |
var k=j.insertRow(-1); | |
var i=k.insertCell(-1); | |
i.className="ZSelectPseudoItem"; | |
i.innerHTML=["<div class='ZWidgetTitle'>",AjxStringUtil.htmlEncode(c.getDisplayValue()),"</div>"].join(""); | |
this.fixedButtonWidth(); | |
this.setMenu(this._menuCallback,true); | |
this._optionValuesToIndices[c.getValue()]=this._options.size()-1; | |
return(this._options.size()-1) | |
}; | |
DwtSelect.prototype.addHR=function(){opt=new DwtSelectOption("hr"+this._hrCount.toString(),false,"",this,null,null,null,true); | |
this._hrCount++; | |
this._options.add(opt) | |
}; | |
DwtSelect.prototype.removeOption=function(e){if(!e){return -1 | |
}this.setMenu(this._menuCallback,true); | |
this._options.remove(e); | |
var d=this._options.size(); | |
var f=e.getValue(); | |
var a=this._optionValuesToIndices[f]; | |
if(a!=null){this._pseudoItemsEl.deleteRow(a); | |
if(this._selectedOption==e){if(d>0){var g=(a>=d)?d-1:a; | |
this._setSelectedOption(this._options.get(g)) | |
}this.removeAttribute("aria-activedescendant") | |
}this.fixedButtonWidth() | |
}delete this._optionValuesToIndices[f]; | |
for(var c=a; | |
c<d; | |
c++){var e=this._options.get(c); | |
this._optionValuesToIndices[e.getValue()]=c | |
}return a | |
}; | |
DwtSelect.prototype.removeOptionWithValue=function(c){var a=this.getOptionWithValue(c); | |
return a?this.removeOption(a):-1 | |
}; | |
DwtSelect.prototype.popup=function(){var g=this.getMenu(); | |
if(!g){return | |
}var e=this._selectEl; | |
var c=Dwt.getBounds(e); | |
var f=(e.style.borderLeftWidth=="")?0:parseInt(e.style.borderLeftWidth); | |
var i=(e.style.borderTopWidth=="")?0:parseInt(e.style.borderTopWidth); | |
i+=(e.style.borderBottomWidth=="")?0:parseInt(e.style.borderBottomWidth); | |
var d=Dwt.toWindow(e,0,0); | |
var a=d.x+f; | |
var h=d.y+c.height+i; | |
g.popup(0,a,h); | |
if(this._currentSelectedOption){g.setSelectedItem(this._currentSelectedOption.getItem()) | |
}}; | |
DwtSelect.prototype.rename=function(c,d){var a=this.getOptionWithValue(c); | |
if(!a){return | |
}a._displayValue=d; | |
if(this._selectedOption&&(this._selectedOption._value==c)){this.setText(AjxStringUtil.htmlEncode(d)) | |
}this.setMenu(this._menuCallback,true) | |
}; | |
DwtSelect.prototype.enableOption=function(e,a){var c=this.getOptionWithValue(e); | |
if(!c){return | |
}if(c.enabled!=a){c.enabled=a; | |
var d=c.getItem(); | |
if(d){d.setEnabled(a) | |
}}}; | |
DwtSelect.prototype.clearOptions=function(){var c=this._options.getArray(); | |
for(var a=0; | |
a<c.length; | |
++a){c[a]=null | |
}this._options.removeAll(); | |
this._optionValuesToIndices=null; | |
this._optionValuesToIndices=[]; | |
this._selectedValue=null; | |
this._selectedOption=null; | |
this._currentSelectedOption=null; | |
if(this._pseudoItemsEl){try{this._pseudoItemsEl.innerHTML="" | |
}catch(d){}}}; | |
DwtSelect.prototype.setName=function(a){this._name=a | |
}; | |
DwtSelect.prototype.getName=function(){return this._name | |
}; | |
DwtSelect.prototype.setSelectedValue=function(c){var a=this._optionValuesToIndices[c]; | |
if(a!=null){this.setSelected(a) | |
}}; | |
DwtSelect.prototype.setSelected=function(a){var c=this.getOptionWithHandle(a); | |
this.setSelectedOption(c) | |
}; | |
DwtSelect.prototype.getOptionCount=function(){return this._options.size() | |
}; | |
DwtSelect.prototype.getOptions=function(){return this._options | |
}; | |
DwtSelect.prototype.getOptionWithHandle=function(a){return this._options.get(a) | |
}; | |
DwtSelect.prototype.getOptionAtIndex=DwtSelect.prototype.getOptionWithHandle; | |
DwtSelect.prototype.getIndexForValue=function(a){return this._optionValuesToIndices[a] | |
}; | |
DwtSelect.prototype.getOptionWithValue=function(d){var a=this._optionValuesToIndices[d]; | |
var c=null; | |
if(a!=null){c=this.getOptionWithHandle(a) | |
}return c | |
}; | |
DwtSelect.prototype.setSelectedOption=function(a){if(a){this._setSelectedOption(a) | |
}}; | |
DwtSelect.prototype.getValue=function(){return this._selectedValue | |
}; | |
DwtSelect.prototype.getSelectedOption=function(){return this._selectedOption | |
}; | |
DwtSelect.prototype.getSelectedIndex=function(){return this.getIndexForValue(this.getValue()) | |
}; | |
DwtSelect.prototype.addChangeListener=function(a){this.addListener(DwtEvent.ONCHANGE,a) | |
}; | |
DwtSelect.prototype.size=function(){return this._options.size() | |
}; | |
DwtSelect.prototype.disable=function(){this.setEnabled(false) | |
}; | |
DwtSelect.prototype.enable=function(){this.setEnabled(true) | |
}; | |
DwtSelect.prototype.setImage=function(a){DwtLabel.prototype.setImage.call(this,a) | |
}; | |
DwtSelect.prototype.setText=function(a){DwtLabel.prototype.setText.call(this,a) | |
}; | |
DwtSelect.prototype.dispose=function(){this._selectEl=null; | |
if(this._pseudoItemsEl){this._pseudoItemsEl.outerHTML=""; | |
this._pseudoItemsEl=null | |
}this._containerEl=null; | |
DwtButton.prototype.dispose.call(this); | |
if(this._internalObjectId){DwtSelect._unassignId(this._internalObjectId) | |
}}; | |
DwtSelect._assignId=function(a){var c=DwtSelect._objectIds.length; | |
DwtSelect._objectIds[c]=a; | |
return c | |
}; | |
DwtSelect._getObjectWithId=function(a){return DwtSelect._objectIds[a] | |
}; | |
DwtSelect._unassignId=function(a){DwtSelect._objectIds[a]=null | |
}; | |
DwtSelect.prototype.dynamicButtonWidth=function(){this._isDynamicButtonWidth=true; | |
this._selectEl.style.width="auto"; | |
this._pseudoItemsEl.style.display="none" | |
}; | |
DwtSelect.prototype.fixedButtonWidth=function(){if(this._isDynamicButtonWidth){return | |
}this._pseudoItemsEl.style.display="block"; | |
var c=this._selectEl; | |
var a=c.offsetWidth; | |
if(a){c.style.width=a+"px" | |
}this._pseudoItemsEl.style.display="none" | |
}; | |
DwtSelect.prototype._createHtmlFromTemplate=function(d,f){var c=DwtSelect._CONTAINER_TEMPLATE; | |
var a={id:f.id,selectTemplateId:d||this.TEMPLATE,selectData:f}; | |
DwtButton.prototype._createHtmlFromTemplate.call(this,c,a); | |
this._selectEl=document.getElementById(f.id+"_select_container"); | |
this._pseudoItemsEl=document.getElementById(f.id+"_pseudoitems_container"); | |
this._pseudoItemsEl.style.display="block"; | |
var e=this._containerEl=this.getHtmlElement(); | |
this._selectEl.className=e.className; | |
Dwt.addClass(e,"ZSelectAutoSizingContainer"); | |
this.removeAttribute("style"); | |
if(this._legendId){this.setAttribute("aria-labelledby",[this._legendId,this._textEl.id].join(" ")) | |
}}; | |
DwtSelect.prototype._createMenu=function(){var j=new DwtSelectMenu(this); | |
var d; | |
for(var e=0,c=this._options.size(); | |
e<c; | |
++e){var f=this._options.get(e); | |
if(f._hr){d=new DwtMenuItem({parent:j,style:DwtMenuItem.SEPARATOR_STYLE}); | |
d.setEnabled(false) | |
}else{var d=new DwtSelectMenuItem(j,f.id||Dwt.getNextId(j._htmlElId+"_option_")); | |
var g=f.getImage(); | |
if(g){d.setImage(g) | |
}var h=f.getDisplayValue(); | |
if(h){d.setText(AjxStringUtil.htmlEncode(h)) | |
}d.setEnabled(f.enabled); | |
d.addSelectionListener(new AjxListener(this,this._handleOptionSelection)); | |
d._optionIndex=e | |
}d._optionIndex=e; | |
f.setItem(d) | |
}var a=this; | |
j.addPopupListener(function(){a.setAttribute("aria-expanded",true) | |
}); | |
j.addPopdownListener(function(){a.setAttribute("aria-expanded",false); | |
a.removeAttribute("aria-activedescendant") | |
}); | |
return j | |
}; | |
DwtSelect.prototype._handleOptionSelection=function(h){var e=h.item; | |
var g=e._optionIndex; | |
var d=this._options.get(g); | |
var c=this.getValue(); | |
this._setSelectedOption(d); | |
var a=new Object(); | |
a.selectObj=this; | |
a.newValue=d.getValue(); | |
a.oldValue=c; | |
var f=DwtUiEvent.getEvent(h); | |
f._args=a; | |
this.notifyListeners(DwtEvent.ONCHANGE,f) | |
}; | |
DwtSelect.prototype._setSelectedOption=function(c){var a=c.getSelectedValue()||c.getDisplayValue(); | |
var d=c.getImage(); | |
if(this._selectedOption!=c){if(a){this.setText(AjxStringUtil.htmlEncode(a)) | |
}this.setImage(d); | |
this._selectedValue=c._value; | |
this._selectedOption=c | |
}this._updateSelection(c); | |
this.autoResize() | |
}; | |
DwtSelect.prototype.autoResize=function(){var a=this.getHtmlElement(); | |
AjxTimedAction.scheduleAction(new AjxTimedAction(this,function(){var c=document.getElementById(a.id); | |
if(c){c.style.width=c.childNodes[0].offsetWidth||"auto" | |
}},200)) | |
}; | |
DwtSelect.prototype._updateSelection=function(a){var d=this._currentSelectedOption; | |
if(d){d.deSelect() | |
}this._currentSelectedOption=a; | |
if(!a){return | |
}a.select(); | |
var c=this.getMenu(true); | |
if(!c){return | |
}c.setSelectedItem(a.getItem()) | |
}; | |
DwtSelect.prototype.updateRendering=function(){var a=this.getScrollStyle(); | |
this.setScrollStyle(a==Dwt.VISIBLE?Dwt.CLIP:Dwt.VISIBLE); | |
var c=function(){try{this.setScrollStyle(a) | |
}catch(f){}}; | |
var d=new AjxTimedAction(this,c); | |
AjxTimedAction.scheduleAction(d,4) | |
}; | |
DwtSelect.prototype._menuAdded=function(a){this.setAttribute("aria-owns",a._htmlElId) | |
}; | |
DwtSelect.prototype._menuItemSelected=function(a){this.setAttribute("aria-activedescendant",a._htmlElId) | |
}; | |
DwtSelectOptionData=function(f,d,a,c,g,h,e){if(f==null||d==null){return null | |
}this.value=f; | |
this.displayValue=d; | |
this.isSelected=a; | |
this.selectedValue=c; | |
this.image=g; | |
this.extraData=e; | |
this.id=h||Dwt.getNextId() | |
}; | |
DwtSelectOption=function(j,f,i,c,h,e,g,k,d,a){this._value=j; | |
this._selected=f; | |
this._displayValue=i; | |
this._image=e; | |
this._selectedValue=g; | |
this._hr=k; | |
this._extraData=d; | |
this.id=a; | |
this._internalObjectId=DwtSelect._assignId(this); | |
this.enabled=true | |
}; | |
DwtSelectOption.prototype.toString=function(){return"DwtSelectOption" | |
}; | |
DwtSelectOption.prototype.setItem=function(a){this._menuItem=a | |
}; | |
DwtSelectOption.prototype.getItem=function(a){return this._menuItem | |
}; | |
DwtSelectOption.prototype.getDisplayValue=function(){return this._displayValue | |
}; | |
DwtSelectOption.prototype.getImage=function(){return this._image | |
}; | |
DwtSelectOption.prototype.getSelectedValue=function(){return this._selectedValue | |
}; | |
DwtSelectOption.prototype.getValue=function(){return this._value | |
}; | |
DwtSelectOption.prototype.setValue=function(a){this._value=a | |
}; | |
DwtSelectOption.prototype.select=function(){this._selected=true | |
}; | |
DwtSelectOption.prototype.deSelect=function(){this._selected=false | |
}; | |
DwtSelectOption.prototype.isSelected=function(){return this._selected | |
}; | |
DwtSelectOption.prototype.getIdentifier=function(){return this._internalObjectId | |
}; | |
DwtSelectOption.prototype.getExtraData=function(a){return this._extraData&&this._extraData[a] | |
}; | |
DwtSelectMenu=function(a){DwtMenu.call(this,{parent:a,style:DwtMenu.DROPDOWN_STYLE,className:"DwtMenu",layout:a._layout,maxRows:a._maxRows,congruent:a._congruent,id:Dwt.getNextId(a.getHTMLElId()+"_Menu_")}) | |
}; | |
DwtSelectMenu.prototype=new DwtMenu; | |
DwtSelectMenu.prototype.constructor=DwtSelectMenu; | |
DwtSelectMenu.prototype.TEMPLATE="dwt.Widgets#ZSelectMenu"; | |
DwtSelectMenu.prototype.toString=function(){return"DwtSelectMenu" | |
}; | |
DwtSelectMenuItem=function(a,c){DwtMenuItem.call(this,{parent:a,style:DwtMenuItem.SELECT_STYLE,className:"ZSelectMenuItem",id:c}) | |
}; | |
DwtSelectMenuItem.prototype=new DwtMenuItem; | |
DwtSelectMenuItem.prototype.constructor=DwtSelectMenuItem; | |
DwtSelectMenuItem.prototype.TEMPLATE="dwt.Widgets#ZSelectMenuItem"; | |
DwtSelectMenuItem.prototype.isDwtSelectMenuItem=true; | |
DwtSelectMenuItem.prototype.toString=function(){return"DwtSelectMenuItem" | |
}; | |
DwtSelectMenuItem.prototype.role="option"; | |
DwtLabel.prototype._textSet=function(a){} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtListView")){DwtListView=function(e){if(arguments.length==0){return | |
}e=Dwt.getParams(arguments,DwtListView.PARAMS); | |
e.className=e.className||"DwtListView"; | |
DwtComposite.call(this,e); | |
this._view=e.view||Dwt.getNextId(); | |
if(e.headerList){var d=this.getHtmlElement(); | |
var g=new Array(50); | |
var j=0; | |
var i=Dwt.getNextId(); | |
var a=Dwt.getNextId(); | |
g[j++]="<table width='100%'><tr><td "; | |
g[j++]="id="+i; | |
g[j++]="></td></tr><tr><td "; | |
g[j++]="id="+a; | |
g[j++]="></td></tr></table>"; | |
d.innerHTML=g.join(""); | |
var k=document.getElementById(i); | |
this._listColDiv=document.createElement("div"); | |
this._listColDiv.id=DwtId.getListViewId(this._view,DwtId.LIST_VIEW_HEADERS); | |
k.appendChild(this._listColDiv); | |
var c=document.getElementById(a); | |
this._listDiv=this.useListElement()?document.createElement("ul"):document.createElement("div"); | |
this._listDiv.id=DwtId.getListViewId(this._view,DwtId.LIST_VIEW_ROWS); | |
this._listDiv.className="DwtListView-Rows"; | |
c.appendChild(this._listDiv); | |
this._bSortAsc=false; | |
this._currentColId=null; | |
this.sortingEnabled=true | |
}else{this._listDiv=document.getElementById(e.id); | |
this.setScrollStyle(DwtControl.SCROLL) | |
}this._setMouseEventHdlrs(); | |
this._listenerMouseOver=this._mouseOverListener.bind(this); | |
this._listenerMouseOut=this._mouseOutListener.bind(this); | |
this._listenerMouseDown=this._mouseDownListener.bind(this); | |
this._listenerMouseUp=this._mouseUpListener.bind(this); | |
this._listenerMouseMove=this._mouseMoveListener.bind(this); | |
this._listenerDoubleClick=this._doubleClickListener.bind(this); | |
this.addListener(DwtEvent.ONMOUSEOVER,this._listenerMouseOver); | |
this.addListener(DwtEvent.ONMOUSEOUT,this._listenerMouseOut); | |
this.addListener(DwtEvent.ONMOUSEDOWN,this._listenerMouseDown); | |
this.addListener(DwtEvent.ONMOUSEUP,this._listenerMouseUp); | |
this.addListener(DwtEvent.ONMOUSEMOVE,this._listenerMouseMove); | |
this.addListener(DwtEvent.ONDBLCLICK,this._listenerDoubleClick); | |
this._evtMgr=new AjxEventMgr(); | |
this._selectedItems=new AjxVector(); | |
this._selAnchor=null; | |
this._kbAnchor=null; | |
this._selEv=new DwtSelectionEvent(true); | |
this._actionEv=new DwtListViewActionEvent(true); | |
this._stateChangeEv=new DwtEvent(true); | |
this._headerList=e.headerList; | |
this._noMaximize=e.noMaximize; | |
if(this._headerList){this._parentEl=this._listDiv | |
}else{this._parentEl=this.getHtmlElement(); | |
if(this.useListElement()){var h=document.createElement("ul"); | |
h.className="DwtListView-Rows"; | |
this._parentEl.appendChild(h); | |
this._parentEl=h | |
}}this._parentEl.tabIndex=0; | |
this._list=null; | |
this.offset=0; | |
this.headerColCreated=false; | |
this.setMultiSelect(true); | |
this.firstSelIndex=-1; | |
this._data={}; | |
this._rowClass=[this._className,DwtListView.ROW_CLASS].join(""); | |
var f=this._normalClass=DwtListView.ROW_CLASS; | |
this._selectedClass=[f,DwtCssStyle.SELECTED].join("-"); | |
this._viewedButUnselectedClass=[f,DwtCssStyle.ALT_SELECTED].join("-"); | |
this._disabledSelectedClass=[this._selectedClass,DwtCssStyle.DISABLED].join("-"); | |
this._kbFocusClass=[f,DwtCssStyle.FOCUSED].join("-"); | |
this._dndClass=[f,DwtCssStyle.DRAG_PROXY].join("-"); | |
this._rightClickClass=[this._selectedClass,DwtCssStyle.ACTIONED].join("-"); | |
this._styleRe=this._getStyleRegex() | |
}; | |
DwtListView.prototype=new DwtComposite; | |
DwtListView.prototype.constructor=DwtListView; | |
DwtListView.prototype.isDwtListView=true; | |
DwtListView.prototype.toString=function(){return"DwtListView" | |
}; | |
DwtListView.prototype.role="list"; | |
DwtListView.prototype.itemRole="listitem"; | |
DwtListView.PARAMS=["parent","className","posStyle","headerList","noMaximize"]; | |
DwtListView.ITEM_SELECTED=1; | |
DwtListView.ITEM_DESELECTED=2; | |
DwtListView.ITEM_DBL_CLICKED=3; | |
DwtListView._LAST_REASON=3; | |
DwtListView._TOOLTIP_DELAY=250; | |
DwtListView.HEADERITEM_HEIGHT=24; | |
DwtListView.TYPE_HEADER_ITEM="1"; | |
DwtListView.TYPE_LIST_ITEM="2"; | |
DwtListView.TYPE_HEADER_SASH="3"; | |
DwtListView.DEFAULT_LIMIT=25; | |
DwtListView.MAX_REPLENISH_THRESHOLD=10; | |
DwtListView.MIN_COLUMN_WIDTH=20; | |
DwtListView.COL_MOVE_THRESHOLD=3; | |
DwtListView.ROW_CLASS="Row"; | |
DwtListView.ROW_CLASS_ODD="RowEven"; | |
DwtListView.ROW_CLASS_EVEN="RowOdd"; | |
DwtListView._STYLE_CLASS="_sc"; | |
DwtListView._SELECTED_STYLE_CLASS="_ssc"; | |
DwtListView._SELECTED_DIS_STYLE_CLASS="_sdsc"; | |
DwtListView._KBFOCUS_CLASS="_kfc"; | |
DwtListView.prototype.dispose=function(){this._listColDiv=null; | |
this._listDiv=null; | |
this._parentEl=null; | |
this._clickDiv=null; | |
this._selectedItems=null; | |
DwtComposite.prototype.dispose.call(this) | |
}; | |
DwtListView.prototype.setEnabled=function(a){DwtComposite.prototype.setEnabled.call(this,a); | |
this.removeListener(DwtEvent.ONMOUSEOVER,this._listenerMouseOver); | |
this.removeListener(DwtEvent.ONMOUSEOUT,this._listenerMouseOut); | |
this.removeListener(DwtEvent.ONMOUSEDOWN,this._listenerMouseDown); | |
this.removeListener(DwtEvent.ONMOUSEUP,this._listenerMouseUp); | |
this.removeListener(DwtEvent.ONMOUSEMOVE,this._listenerMouseMove); | |
this.removeListener(DwtEvent.ONDBLCLICK,this._listenerDoubleClick); | |
if(a){this.addListener(DwtEvent.ONMOUSEOVER,this._listenerMouseOver); | |
this.addListener(DwtEvent.ONMOUSEOUT,this._listenerMouseOut); | |
this.addListener(DwtEvent.ONMOUSEDOWN,this._listenerMouseDown); | |
this.addListener(DwtEvent.ONMOUSEUP,this._listenerMouseUp); | |
this.addListener(DwtEvent.ONMOUSEMOVE,this._listenerMouseMove); | |
this.addListener(DwtEvent.ONDBLCLICK,this._listenerDoubleClick) | |
}var d=this.getSelectedItems(); | |
if(d){var e=d.getArray(); | |
for(var c=0; | |
c<e.length; | |
c++){Dwt.delClass(e[c],this._styleRe,a?this._selectedClass:this._disabledSelectedClass) | |
}}}; | |
DwtListView.prototype.createHeaderHtml=function(n,r){if(!this._headerList||this.headerColCreated){return | |
}this._headerHash={}; | |
this._headerIdHash={}; | |
var o=0; | |
var q=[]; | |
q[o++]="<table id='"; | |
q[o++]=DwtId.getListViewHdrId(DwtId.WIDGET_HDR_TABLE,this._view); | |
q[o++]="' height=100%"; | |
q[o++]=this._noMaximize?">":" width=100%>"; | |
q[o++]="<tr>"; | |
var e=this._headerList.length; | |
for(var g=0; | |
g<e; | |
g++){var l=this._headerList[g]; | |
var m=l._field; | |
l._index=g; | |
var c=l._id=DwtId.getListViewHdrId(DwtId.WIDGET_HDR,this._view,m); | |
this._headerHash[m]=l; | |
this._headerIdHash[c]=l; | |
if(l._variable){this._variableHeaderCol=l | |
}if(l._visible){o=this._createHeader(q,o,l,g,e,c,n) | |
}}q[o++]="</tr></table>"; | |
this._listColDiv.innerHTML=q.join(""); | |
this._listColDiv.className="DwtListView-ColHeader"+(r?" FixedColumnHeaderTables":""); | |
setTimeout($.proxy(function(){for(var j=0; | |
j<e; | |
j++){var s=this._headerList[j]; | |
if(s._cssClass&&s._resizeable&&s._width==="auto"){this._createHeaderCssStyle(s,this._calcRelativeWidth(j)) | |
}}},this),0); | |
var a=0,k; | |
for(var f=0; | |
f<this._headerList.length; | |
f++){var l=this._headerList[f]; | |
var p=document.getElementById(l._id); | |
if(!p){continue | |
}if(l._sortable&&l._field==n){p.className="DwtListView-Column DwtListView-ColumnActive" | |
}if(l._resizeable){var h=DwtId.getListViewHdrId(DwtId.WIDGET_HDR_SASH,this._view,l._field); | |
var d=document.getElementById(h); | |
if(d){this.associateItemWithElement(l,d,DwtListView.TYPE_HEADER_SASH,h,{index:f}) | |
}a++; | |
k=l | |
}this.associateItemWithElement(l,p,DwtListView.TYPE_HEADER_ITEM,l._id,{index:f}) | |
}if(a==1){k._resizeable=false | |
}this.headerColCreated=true | |
}; | |
DwtListView.prototype._createHeader=function(o,n,k,f,e,c,m){var l=k._field; | |
o[n++]="<td id='"; | |
o[n++]=c; | |
o[n++]="' class='"; | |
var h=(c==this._currentColId)?"DwtListView-Column DwtListView-ColumnActive":"DwtListView-Column"; | |
h+=k._sortable?"":" DwtDefaultCursor"; | |
o[n++]=h+"'"; | |
if(k._width){o[n++]=" width="; | |
o[n++]=k._width; | |
if(k._cssClass&&k._resizeable&&k._width!=="auto"){this._createHeaderCssStyle(k,k._width) | |
}if(k._widthUnits){o[n++]=k._widthUnits | |
}}if(k._tooltip&&DwtControl.useBrowserTooltips){o[n++]=" title='"+k._tooltip+"'" | |
}o[n++]=">"; | |
o[n++]="<div"; | |
var g=null; | |
if(k._width&&k._width!="auto"){if(AjxEnv.isIE){g=k._width | |
}else{g=k._width+2 | |
}if(k._widthUnits){g+=k._widthUnits | |
}}if(!!g){o[n++]=" style='overflow: hidden; width: "; | |
o[n++]=g; | |
o[n++]="'>" | |
}else{o[n++]=">" | |
}o[n++]="<table width=100%><tr>"; | |
if(k._iconInfo){var j=["id='",DwtId.getListViewHdrId(DwtId.WIDGET_HDR_ICON,this._view,l),"'"].join(""); | |
o[n++]="<td><center>"; | |
o[n++]=AjxImg.getImageHtml(k._iconInfo,null,j); | |
o[n++]="</center></td>" | |
}if(k._label){o[n++]="<td id='"; | |
o[n++]=DwtId.getListViewHdrId(DwtId.WIDGET_HDR_LABEL,this._view,l); | |
o[n++]="' class='DwtListHeaderItem-label' style='padding-right:6px; padding-left:6px'>"; | |
o[n++]=k._label; | |
o[n++]="</td>" | |
}if(k._sortable&&!k._noSortArrow){var a=this._bSortAsc?"ColumnUpArrow":"ColumnDownArrow"; | |
o[n++]="<td align=right style='padding-right:2px' width='8px' id='"; | |
o[n++]=DwtId.getListViewHdrId(DwtId.WIDGET_HDR_ARROW,this._view,l); | |
o[n++]="'>"; | |
var d=(l==m); | |
o[n++]=AjxImg.getImageHtml(a,d?null:"visibility:hidden"); | |
o[n++]="</td>"; | |
if(d){this._currentColId=c | |
}}if(f<(e-1)){o[n++]="<td width=6>"; | |
o[n++]="<table align=right width=4 height=100% id='"; | |
o[n++]=DwtId.getListViewHdrId(DwtId.WIDGET_HDR_SASH,this._view,l); | |
o[n++]="'><tr>"; | |
o[n++]="<td class='DwtListView-Sash'><div style='width: 1px; height: "; | |
o[n++]=(DwtListView.HEADERITEM_HEIGHT-2); | |
o[n++]="px; background-color: #8A8A8A;margin-left:2px'></div></td><td class='DwtListView-Sash'><div style='width: 1px; height: "; | |
o[n++]=(DwtListView.HEADERITEM_HEIGHT-2); | |
o[n++]="px;'></div></td></tr></table>"; | |
o[n++]="</td>" | |
}o[n++]="</tr></table>"; | |
o[n++]="</div></td>"; | |
return n | |
}; | |
DwtListView.prototype._createHeaderCssStyle=function(e,c){if(!e._cssClass||!e._resizeable){return | |
}if(e._cssRuleIndex){DwtCssStyle.removeRule(document.styleSheets[0],e._cssRuleIndex) | |
}var a="#"+this.parent._htmlElId; | |
a+=" ."+e._cssClass; | |
var d="width:"+c+($.isNumeric(c)?"px;":";"); | |
e._cssRuleIndex=DwtCssStyle.addRule(document.styleSheets[0],a,d,e._cssRuleIndex) | |
}; | |
DwtListView.prototype.getItemIndex=function(d){var e=this._list; | |
if(e){var a=e.size(); | |
for(var c=0; | |
c<a; | |
++c){if(e.get(c).id==d.id){return c | |
}}}return null | |
}; | |
DwtListView.prototype.setSize=function(c,a){DwtComposite.prototype.setSize.call(this,c,a); | |
this._sizeChildren(a) | |
}; | |
DwtListView.prototype.size=function(){return this._list?this._list.size():0 | |
}; | |
DwtListView.prototype.set=function(d,c,a){if(this._selectedItems){this._selectedItems.removeAll() | |
}this._curViewedItem=null; | |
this._rightSelItem=null; | |
this.sortingEnabled=true; | |
this._resetList(); | |
this._list=d; | |
this.setUI(c,a) | |
}; | |
DwtListView.prototype.setUI=function(c,a){this.removeAll(); | |
this.createHeaderHtml(c); | |
this._renderList(this._list,a) | |
}; | |
DwtListView.prototype._renderList=function(h,g,d){if(h instanceof AjxVector&&h.size()){var c=new Date(); | |
var m=h.size(); | |
var k=[]; | |
if(!d){this._parentEl.innerHTML="" | |
}Dwt.delClass(this._parentEl,"DwtListView-Rows-Empty"); | |
for(var f=0; | |
f<m; | |
f++){var l=h.get(f); | |
var a=this._createItemHtml(l,{now:c},false,f); | |
if(a){if(a instanceof Array){for(var e=0; | |
e<a.length; | |
e++){this._addRow(a[e]) | |
}}else{this._addRow(a) | |
}this._itemAdded(l) | |
}}}else{if(!g){this._setNoResultsHtml(); | |
Dwt.addClass(this._parentEl,"DwtListView-Rows-Empty") | |
}}}; | |
DwtListView.prototype.addItems=function(a){if(AjxUtil.isArray(a)){if(!this._list){this._list=new AjxVector() | |
}if(this._list.size()==0){this._resetList() | |
}this._renderList(AjxVector.fromArray(a),null,true); | |
this._list.addList(a) | |
}}; | |
DwtListView.prototype.addItem=function(f,c,d,e){if(!this._list){this._list=new AjxVector() | |
}if(this._list.size()==0){this._resetList() | |
}this._list.add(f,(e!=null)?e:c); | |
var g=this._createItemHtml(f); | |
if(g){if(g instanceof Array){for(var a=0; | |
a<g.length; | |
a++){this._addRow(g[a]) | |
}}else{this._addRow(g,c) | |
}}if(!d&&this._evtMgr.isListenerRegistered(DwtEvent.STATE_CHANGE)){this._evtMgr.notifyListeners(DwtEvent.STATE_CHANGE,this._stateChangeEv) | |
}}; | |
DwtListView.prototype.removeItem=function(d,c,e){var a=this._getElFromItem(d); | |
if(!a){return | |
}var f=this._getRowIndex(d); | |
this._selectedItems.remove(a); | |
if(this._rightSelItem===a){this._rightSelItem=null | |
}if(this._kbAnchor===a){this._kbAnchor=null | |
}if(a.parentNode===this._parentEl){this._parentEl.removeChild(a) | |
}if(this._list){this._list.remove(d) | |
}var g=a.id; | |
if(this._data[g]){this._data[g]=null; | |
delete this._data[g] | |
}if(!e){this._fixAlternation(f) | |
}if(!c&&this._evtMgr.isListenerRegistered(DwtEvent.STATE_CHANGE)){this._evtMgr.notifyListeners(DwtEvent.STATE_CHANGE,this._stateChangeEv) | |
}}; | |
DwtListView.prototype.redrawItem=function(c){var d=this._getElFromItem(c); | |
if(d){var a=d.className; | |
var e=this._createItemHtml(c); | |
e.className=a; | |
d.parentNode.replaceChild(e,d); | |
if(this._selectedItems.contains(d)){this._selectedItems.remove(d); | |
this.selectItem(c) | |
}if(this._kbAnchor===d){this._setKbFocusElement(e) | |
}}}; | |
DwtListView.prototype.addSelectionListener=function(a){this._evtMgr.addListener(DwtEvent.SELECTION,a) | |
}; | |
DwtListView.prototype.removeSelectionListener=function(a){this._evtMgr.removeListener(DwtEvent.SELECTION,a) | |
}; | |
DwtListView.prototype.addActionListener=function(a){this._evtMgr.addListener(DwtEvent.ACTION,a) | |
}; | |
DwtListView.prototype.removeActionListener=function(a){this._evtMgr.removeListener(DwtEvent.ACTION,a) | |
}; | |
DwtListView.prototype.addStateChangeListener=function(a){this._evtMgr.addListener(DwtEvent.STATE_CHANGE,a) | |
}; | |
DwtListView.prototype.removeStateChangeListener=function(a){this._evtMgr.removeListener(DwtEvent.STATE_CHANGE,a) | |
}; | |
DwtListView.prototype.removeAll=function(a){if(this._parentEl){this._parentEl.innerHTML="" | |
}if(this._selectedItems){this._selectedItems.removeAll() | |
}this._rightSelItem=this._selAnchor=this._kbAnchor=null; | |
if(!a&&this._evtMgr.isListenerRegistered(DwtEvent.STATE_CHANGE)){this._evtMgr.notifyListeners(DwtEvent.STATE_CHANGE,this._stateChangeEv) | |
}}; | |
DwtListView.prototype.selectAll=function(){if(this._list&&this._list.size()){this.setSelectedItems(this._list.getArray()) | |
}}; | |
DwtListView.prototype.deselectAll=function(){if(this._selectedItems){var c=this._selectedItems.getArray(); | |
var e=this._selectedItems.size(); | |
for(var d=0; | |
d<e; | |
d++){Dwt.delClass(c[d],this._styleRe); | |
c[d].removeAttribute("aria-selected") | |
}this._selectedItems.removeAll(); | |
this._rightSelItem=this._selAnchor=null; | |
if(this._kbAnchor!=null&&this.hasFocus()){Dwt.addClass(this._kbAnchor,this._kbFocusClass) | |
}}}; | |
DwtListView.prototype._markUnselectedViewedItem=function(a){var c=this._curViewedItem; | |
var d=c&&this._getElFromItem(c); | |
if(!d){return | |
}if(a){Dwt.delClass(d,this._styleRe,this._viewedButUnselectedClass) | |
}else{Dwt.delClass(d,this._viewedButUnselectedClass) | |
}}; | |
DwtListView.prototype.getDnDSelection=function(){if(this._dndSelection instanceof AjxVector){return this.getSelection() | |
}else{return this.getItemFromElement(this._dndSelection) | |
}}; | |
DwtListView.prototype.getSelection=function(){var d=[]; | |
if(this._rightSelItem){d.push(this.getItemFromElement(this._rightSelItem)) | |
}else{if(this._selectedItems){var c=this._selectedItems.getArray(); | |
var f=this._selectedItems.size(); | |
for(var e=0; | |
e<f; | |
e++){d[e]=this.getItemFromElement(c[e]) | |
}}}return d | |
}; | |
DwtListView.prototype.getSelectedItems=function(){return this._selectedItems | |
}; | |
DwtListView.prototype.setSelection=function(e,c,a){if(!e){return | |
}var d=this._getElFromItem(e); | |
if(d){if(this._selectedItems.size()==1&&this._selectedItems.get(0)==d&&!a){return | |
}this.deselectAll(); | |
this._unmarkKbAnchorElement(true); | |
this._setKbFocusElement(d); | |
this._selAnchor=d; | |
this.selectItem(e,this.getEnabled()); | |
this.firstSelIndex=(this._list&&this._list.size()>0)?this._list.indexOf(e):-1; | |
this._scrollList(d); | |
if(!c&&this._evtMgr.isListenerRegistered(DwtEvent.SELECTION)){var f=new DwtSelectionEvent(true); | |
f.button=DwtMouseEvent.LEFT; | |
f.target=d; | |
f.item=this.getItemFromElement(d); | |
f.detail=DwtListView.ITEM_SELECTED; | |
f.ersatz=true; | |
this._evtMgr.notifyListeners(DwtEvent.SELECTION,f) | |
}}}; | |
DwtListView.prototype.setMultiSelection=function(a,d,c){if(d){this._selectedItems.remove(a); | |
a.removeAttribute("aria-selected"); | |
Dwt.delClass(a,this._styleRe); | |
this._selEv.detail=DwtListView.ITEM_DESELECTED | |
}else{this._selectedItems.add(a,null,true); | |
a.setAttribute("aria-selected",true); | |
Dwt.delClass(a,this._styleRe,this._selectedClass); | |
this._selEv.detail=DwtListView.ITEM_SELECTED | |
}if(this._kbAnchor&&this._kbAnchor!=a){Dwt.delClass(this._kbAnchor,this._kbFocusClass) | |
}this._setKbFocusElement(a); | |
this._selAnchor=a; | |
Dwt.addClass(this._kbAnchor,this._kbFocusClass) | |
}; | |
DwtListView.prototype.setSelectedItems=function(d){this.deselectAll(); | |
var e=d.length,a=this.getEnabled(); | |
for(var c=0; | |
c<e; | |
++c){this.selectItem(d[c],a) | |
}}; | |
DwtListView.prototype.selectItem=function(d,c){var a=this._getElFromItem(d); | |
if(a){Dwt.delClass(a,this._styleRe,c?this._selectedClass:this._disabledSelectedClass); | |
if(this._kbAnchor==a&&this.hasFocus()){Dwt.addClass(a,this._kbFocusClass); | |
a.focus() | |
}this._selectedItems.add(a); | |
a.setAttribute("aria-selected",true) | |
}}; | |
DwtListView.prototype.getSelectionCount=function(){return this._rightSelItem?1:this._selectedItems.size() | |
}; | |
DwtListView.prototype.handleActionPopdown=function(){this._clearRightSel() | |
}; | |
DwtListView.prototype.associateItemWithElement=function(e,c,d,g,f){g=g||this._getItemId(e); | |
if(c){c.id=g | |
}d=d||DwtListView.TYPE_LIST_ITEM; | |
this._data[g]={item:e,id:g,type:d}; | |
if(f){for(var a in f){this._data[g][a]=f[a] | |
}}return g | |
}; | |
DwtListView.prototype.getItemFromElement=function(a){return this._getItemData(a,"item") | |
}; | |
DwtListView.prototype.findItem=function(a){if(!a){return | |
}var c=this.findItemDiv(a); | |
return this._getItemData(c,"item") | |
}; | |
DwtListView.prototype.findItemDiv=function(a){if(!a){return | |
}while(a&&(a.id!=this._htmlElId)){if(a.id&&this._data[a.id]){return a | |
}a=a.parentNode | |
}return null | |
}; | |
DwtListView.prototype.getTargetItem=function(a){return this.findItem(DwtUiEvent.getTarget(a)) | |
}; | |
DwtListView.prototype.getTargetItemDiv=function(a){return this.findItemDiv(DwtUiEvent.getTarget(a)) | |
}; | |
DwtListView.prototype.dragSelect=function(c){if(this._dragHighlight){var a=document.getElementById(this._dragHighlight); | |
if(!c||(a&&(c.id!=a.id))){this._updateDragSelection(a,false) | |
}}if(!c){return | |
}if(this._getItemData(c,"type")!=DwtListView.TYPE_LIST_ITEM){return | |
}if(c.id!=this._dragHighlight){this._dragHighlight=c.id; | |
this._updateDragSelection(c,true) | |
}}; | |
DwtListView.prototype.dragDeselect=function(c){if(this._dragHighlight){var a=document.getElementById(this._dragHighlight); | |
this._updateDragSelection(a,false); | |
this._dragHighlight=null | |
}}; | |
DwtListView.prototype.getScrollContainer=function(){return this._parentEl | |
}; | |
DwtListView.prototype.scrollToItem=function(c){var a=this._getElFromItem(c); | |
if(a){this._listDiv.scrollTop=a.offsetTop | |
}}; | |
DwtListView.prototype.scrollToTop=function(){this._listDiv.scrollTop=0 | |
}; | |
DwtListView.prototype.scrollPage=function(a){var c=this._parentEl; | |
if(c.clientHeight>=c.scrollHeight){return | |
}c.scrollTop=a?Math.max(c.scrollTop-c.clientHeight,0):Math.min(c.scrollTop+c.clientHeight,c.scrollHeight-c.clientHeight) | |
}; | |
DwtListView.prototype.setSortByAsc=function(d,c){if(!this._headerList){return | |
}this._bSortAsc=c; | |
var e=null; | |
for(var a=0; | |
a<this._headerList.length; | |
a++){if(this._headerList[a]._sortable&&this._headerList[a]._field==d){e=this._headerList[a]._id; | |
break | |
}}if(e){this._setSortedColStyle(e) | |
}}; | |
DwtListView.prototype.getNewOffset=function(c){var a=this.getLimit(); | |
var d=c?(this.offset+a):(this.offset-a); | |
return(d<0)?0:d | |
}; | |
DwtListView.prototype.getLimit=function(){return DwtListView.DEFAULT_LIMIT | |
}; | |
DwtListView.prototype.getReplenishThreshold=function(){return DwtListView.MAX_REPLENISH_THRESHOLD | |
}; | |
DwtListView.prototype.getList=function(){return this._list | |
}; | |
DwtListView.prototype.getFocusElement=function(){if(!this._kbAnchor){this._setKbFocusElement(null,true) | |
}return this._kbAnchor||this._parentEl | |
}; | |
DwtListView.prototype.replenish=function(e){this._list.addList(e); | |
var c=e.size(); | |
for(var a=0; | |
a<c; | |
a++){var d=e.get(a); | |
var f=this._createItemHtml(d); | |
if(f){this._addRow(f) | |
}}}; | |
DwtListView.prototype.getKeyMapName=function(){return DwtKeyMap.MAP_LIST | |
}; | |
DwtListView.prototype.handleKeyAction=function(f,h){if(!this.size()){return false | |
}switch(f){case DwtKeyMap.SELECT:this._emulateSingleClick({target:this._kbAnchor,button:DwtMouseEvent.LEFT,kbNavEvent:true}); | |
break; | |
case DwtKeyMap.SELECT_CURRENT:this._emulateSingleClick({target:this._kbAnchor,button:DwtMouseEvent.LEFT,ctrlKey:true,kbNavEvent:true}); | |
break; | |
case DwtKeyMap.SELECT_NEXT:this._selectItem(true,false,true); | |
break; | |
case DwtKeyMap.SELECT_PREV:this._selectItem(false,false,true); | |
break; | |
case DwtKeyMap.ADD_SELECT_NEXT:this._selectItem(true,true,true); | |
break; | |
case DwtKeyMap.ADD_SELECT_PREV:this._selectItem(false,true,true); | |
break; | |
case DwtKeyMap.PREV:this._setKbFocusElement(false); | |
break; | |
case DwtKeyMap.NEXT:this._setKbFocusElement(true); | |
break; | |
case DwtKeyMap.DBLCLICK:if(!this._kbAnchor){break | |
}var d=false; | |
var k=this.getSelectedItems().getArray(); | |
for(var e=0; | |
e<k.length; | |
e++){if(k[e]==this._kbAnchor){d=true; | |
break | |
}}if(d){this.emulateDblClick(this.getItemFromElement(this._kbAnchor),true) | |
}else{this._emulateSingleClick({target:this._kbAnchor,button:DwtMouseEvent.LEFT,kbNavEvent:true}) | |
}break; | |
case DwtKeyMap.SELECT_ALL:this.selectAll(); | |
break; | |
case DwtKeyMap.SELECT_FIRST:case DwtKeyMap.SELECT_LAST:var l=(f==DwtKeyMap.SELECT_FIRST)?this._getFirstItem():this._getLastItem(); | |
if(l){this.setSelection(l); | |
this._scrollList(this._kbAnchor) | |
}break; | |
case DwtKeyMap.SUBMENU:if(this._evtMgr.isListenerRegistered(DwtEvent.ACTION)){var c=Dwt.toWindow(this._kbAnchor,0,0); | |
var m=Dwt.getSize(this._kbAnchor); | |
var j=c.x+m.x/4; | |
var g=c.y+m.y/2; | |
this._emulateSingleClick({target:this._kbAnchor,button:DwtMouseEvent.RIGHT,docX:j,docY:g,kbNavEvent:true}) | |
}break; | |
case DwtKeyMap.PAGE_UP:case DwtKeyMap.PAGE_DOWN:this.scrollPage(f==DwtKeyMap.PAGE_UP); | |
break; | |
default:return false | |
}return true | |
}; | |
DwtListView.prototype.setMultiSelect=function(a){this.setAttribute("aria-multiselectable",Boolean(a)) | |
}; | |
DwtListView.prototype.isMultiSelectEnabled=function(){return this.getAttribute("aria-multiselectable")==="true" | |
}; | |
DwtListView.prototype.setListDivHeight=function(d){if(this._listDiv&&this._listColDiv){var c=Dwt.getSize(this._listColDiv).y; | |
var a=d-c-25; | |
Dwt.setSize(this._listDiv,Dwt.DEFAULT,a) | |
}}; | |
DwtListView.prototype._getStyleRegex=function(){return new RegExp("\\bRow(-("+[DwtCssStyle.ALT_SELECTED,DwtCssStyle.SELECTED,DwtCssStyle.ACTIONED,DwtCssStyle.FOCUSED,DwtCssStyle.DISABLED,DwtCssStyle.DRAG_PROXY].join("|")+"))+\\b","g") | |
}; | |
DwtListView.prototype._addRow=function(d,c){if(!d||!this._parentEl){return | |
}var a=this._parentEl.childNodes.length; | |
if(c!=null&&a>0&&c!=a){this._parentEl.insertBefore(d,this._parentEl.childNodes[c]) | |
}else{this._parentEl.appendChild(d) | |
}this._fixAlternation((c!=null)?c:a); | |
d.setAttribute("role",this.itemRole) | |
}; | |
DwtListView.prototype._itemAdded=function(a){}; | |
DwtListView.prototype._fixAlternation=function(a){var f=this._parentEl.childNodes; | |
if(!(f&&f.length)){return | |
}if(!(this._list&&this._list.size())){return | |
}var e=f[a]; | |
if(!e){return | |
}var d=Boolean(a%2); | |
this._setAlternatingRowClass(e,d); | |
var c=e.nextSibling; | |
while(c){d=!d; | |
this._setAlternatingRowClass(c,d); | |
c=c.nextSibling | |
}}; | |
DwtListView.prototype._setAlternatingRowClass=function(e,a){var c=a?DwtListView.ROW_CLASS_ODD:DwtListView.ROW_CLASS_EVEN; | |
var d=a?DwtListView.ROW_CLASS_EVEN:DwtListView.ROW_CLASS_ODD; | |
Dwt.delClass(e,c,d) | |
}; | |
DwtListView.prototype._createItemHtml=function(m,e,i,h){e=e||{}; | |
this._addParams(m,e,l,k); | |
var a; | |
var l=[]; | |
var k=0; | |
if(i){k=this._getDivHtml(m,e,l,k,h) | |
}else{if(e.div){var d=[this._getDivClass(e.divClass||this._normalClass,m,e),(h%2)?DwtListView.ROW_CLASS_EVEN:DwtListView.ROW_CLASS_ODD]; | |
e.div.className=d.join(" ") | |
}a=e.div||this._getDiv(m,e) | |
}var f=this.useListElement(); | |
if(!f){k=this._getTable(l,k,e) | |
}k=this._getRow(l,k,m,e); | |
var c=e.headerList||this._headerList; | |
if(c&&c.length){for(var g=0; | |
g<c.length; | |
g++){if(!c[g]._visible){continue | |
}var j=c[g]._field; | |
k=this._getCell(l,k,m,j,g,e) | |
}}else{k=this._getCell(l,k,m,null,null,e) | |
}l[k++]=f?"</div>":"</tr></table>"; | |
if(i){l[k++]=f?"</li>":"</div>"; | |
return l.join("") | |
}a.innerHTML=l.join(""); | |
return a | |
}; | |
DwtListView.prototype._addParams=function(a,c){}; | |
DwtListView.prototype._getDiv=function(c,d){var e=document.createElement("div"); | |
var a=[]; | |
this._getDivHtml(c,d,a,0,0); | |
e.innerHTML=a.join(""); | |
return e.firstChild | |
}; | |
DwtListView.prototype._getExtraStyle=function(a){return null | |
}; | |
DwtListView.prototype._getDivHtml=function(j,f,g,i,h,e){g[i++]=this.useListElement()?"<li ":"<div "; | |
e=e||[]; | |
e.push(this._getDivClass(f.divClass||this._normalClass,j,f)); | |
e.push((h%2)?DwtListView.ROW_CLASS_EVEN:DwtListView.ROW_CLASS_ODD); | |
g[i++]=AjxUtil.getClassAttr(e); | |
var c=[]; | |
if(f.isDragProxy&&AjxEnv.isMozilla){c.push("overflow:visible") | |
}if(f.isDragProxy){c.push("position:absolute"); | |
c.push("width:"+this.getSize().x+"px") | |
}var a=this._getExtraStyle(j); | |
if(a){c.push(a) | |
}if(c.length){g[i++]=" style='"; | |
g[i++]=c.join(";"); | |
g[i++]="'" | |
}var d=f.isDragProxy?this._getItemId(j)+"_dnd":null; | |
g[i++]=" id='"; | |
g[i++]=this.associateItemWithElement(j,null,null,d); | |
g[i++]="'>"; | |
return i | |
}; | |
DwtListView.prototype._getDivClass=function(c,a,d){return d.isDragProxy?([c," ",c,"-",DwtCssStyle.DRAG_PROXY].join("")):c | |
}; | |
DwtListView.prototype._getTable=function(c,a,d){c[a++]="<table width="; | |
c[a++]=!d.isDragProxy?"100%>":(this.getSize().x+">"); | |
return a | |
}; | |
DwtListView.prototype._getRow=function(c,a,f,h,d){var g=this._getRowId(f,h)||Dwt.getNextId(); | |
var e=this._getRowClass(f,h); | |
if(this.useListElement()){c[a++]="<div "; | |
d=d||[]; | |
if(e){d.push(e) | |
}if(g){c[a++]=["id='",g,"'"].join("") | |
}c[a++]=AjxUtil.getClassAttr(d)+">" | |
}else{c[a++]=g?["<tr id='",g,"'"].join(""):"<tr"; | |
c[a++]=e?([" class='",e,"'>"].join("")):">" | |
}return a | |
}; | |
DwtListView.prototype.useListElement=function(){return false | |
}; | |
DwtListView.prototype._getRowClass=function(a,c){return null | |
}; | |
DwtListView.prototype._getRowId=function(a,c){return null | |
}; | |
DwtListView.prototype._getCell=function(p,o,r,n,g,f){if(this.useListElement()){var e=[]; | |
var k=this._getCellClass(r,n,f); | |
if(k){e.push(k) | |
}o=this._getCellContents(p,o,r,n,g,f,[k||""]) | |
}else{var d=this._getCellId(r,n,f); | |
var m=d?[" id=","'",d,"'"].join(""):""; | |
var c=this._getCellWidth(g,f); | |
var j=c?([" width=",c].join("")):(" width='100%'"); | |
var k=this._getCellClass(r,n,f); | |
var h=k?[" class=",k].join(""):""; | |
var q=this._getCellAlign(g,f); | |
var l=q?[" align=",q].join(""):""; | |
var a=(this._getCellAttrText(r,n,f))||""; | |
var i=[m,j,h,l,a].join(" "); | |
p[o++]="<td"; | |
p[o++]=i?(" "+i):""; | |
p[o++]=">"; | |
o=this._getCellContents(p,o,r,n,g,f); | |
p[o++]="</td>" | |
}return o | |
}; | |
DwtListView.prototype._getCellWidth=function(e,d){if(e==null){return null | |
}var a=d.headerList||this._headerList; | |
var c=a[e]._width; | |
if(c){if(c!="auto"&&c>0){if(AjxEnv.isIE){return(c+2) | |
}if(AjxEnv.isSafari&&!AjxEnv.isSafari6up&&!AjxEnv.isChrome19up){return(c+5) | |
}}return c | |
}return null | |
}; | |
DwtListView.prototype._getCellAlign=function(d,c){if(d==null){return null | |
}var a=c.headerList||this._headerList; | |
return a[d]._align | |
}; | |
DwtListView.prototype._getCellId=function(a,c,d){return null | |
}; | |
DwtListView.prototype._getCellClass=function(a,c,d){return null | |
}; | |
DwtListView.prototype._getCellAttrText=function(a,c,d){return null | |
}; | |
DwtListView.prototype._getCellContents=function(c,a,d,e,g,f){c[a++]=d.toString?d.toString():d; | |
return a | |
}; | |
DwtListView.prototype._getFieldId=function(a,c){return DwtId.getListViewItemId(DwtId.WIDGET_ITEM_FIELD,this._view,a.id,c) | |
}; | |
DwtListView.prototype._getElement=function(a,c){return document.getElementById(this._getFieldId(a,c)) | |
}; | |
DwtListView.prototype._getDragProxy=function(e){var f=this.getDnDSelection(); | |
if(!f){return null | |
}var h; | |
var a; | |
var c; | |
this._dndImg=null; | |
if(!(f instanceof Array)||f.length==1){var j=(f instanceof Array)?f[0]:f; | |
h=this._createItemHtml(j,{now:new Date(),isDragProxy:true}); | |
this._setItemData(h,"origClassName",h.className); | |
Dwt.setPosition(h,Dwt.ABSOLUTE_STYLE); | |
c="position:absolute;top:18;left:-11;visibility:hidden" | |
}else{h=document.createElement("div"); | |
h.className="DragProxy"; | |
Dwt.setPosition(h,Dwt.ABSOLUTE_STYLE); | |
AjxImg.setImage(h,"DndMultiYes_48"); | |
this._dndImg=h; | |
a=document.createElement("div"); | |
Dwt.setPosition(a,Dwt.ABSOLUTE_STYLE); | |
var i=this.allSelected?ZmMsg.all:f.length; | |
a.innerHTML="<table><tr><td class='DragProxyTextLabel'>"+i+"</td></tr></table>"; | |
h.appendChild(a); | |
c="position:absolute;top:30;left:0;visibility:hidden"; | |
Dwt.setBounds(h,Dwt.LOC_NOWHERE,Dwt.LOC_NOWHERE,43+32-16,36+32-20) | |
}var d=AjxImg.getImageHtml("RoundPlus",c,"id="+DwtId.DND_PLUS_ID); | |
if(!this._noDndPlusImage){h.appendChild(Dwt.parseHtmlFragment(d)) | |
}this.shell.getHtmlElement().appendChild(h); | |
if(a){var g=Dwt.getSize(a); | |
Dwt.setLocation(a,16+(32-g.x)/2,19+(32-g.y)/2) | |
}Dwt.setZIndex(h,Dwt.Z_DND); | |
return h | |
}; | |
DwtListView.prototype._setDragProxyState=function(c){if(this._dndImg){AjxImg.setImage(this._dndImg,c?"DndMultiYes_48":"DndMultiNo_48") | |
}else{if(this._dndProxy){var d=c?DwtCssStyle.DROPPABLE:DwtCssStyle.NOT_DROPPABLE; | |
var a=this._getItemData(this._dndProxy,"origClassName"); | |
this._dndProxy.className=[a,d].join(" ") | |
}}}; | |
DwtListView.prototype._setNoResultsHtml=function(){var c=document.createElement("div"); | |
var a={message:this._getNoResultsMessage(),type:this.type}; | |
c.innerHTML=AjxTemplate.expand("dwt.Widgets#DwtListView-NoResults",a); | |
this._addRow(c) | |
}; | |
DwtListView.prototype._getNoResultsMessage=function(){return AjxMsg.noResults | |
}; | |
DwtListView.prototype._clearRightSel=function(){if(!this._rightSelItem){return | |
}Dwt.delClass(this._rightSelItem,this._rightClickClass); | |
this._rightSelItem=null; | |
if(!this._curViewedItem){return | |
}this.deselectAll(); | |
this.selectItem(this._curViewedItem,true) | |
}; | |
DwtListView.prototype._getItemId=function(a){return DwtId.getListViewItemId(DwtId.WIDGET_ITEM,this._view,(a&&a.id)?a.id:Dwt.getNextId()) | |
}; | |
DwtListView.prototype._getElFromItem=function(a){return Dwt.byId(this._getItemId(a)) | |
}; | |
DwtListView.prototype._getRowIndex=function(c){var e=this._getItemId(c); | |
var d=this._parentEl.childNodes; | |
for(var a=0; | |
a<d.length; | |
a++){if(d[a].id==e){return a | |
}}return null | |
}; | |
DwtListView.prototype._getItemData=function(a,d,e){e=e||(a?a.id:null); | |
var c=this._data[e]; | |
return c?c[d]:null | |
}; | |
DwtListView.prototype._setItemData=function(a,e,d,f){f=f||(a?a.id:null); | |
var c=this._data[f]; | |
if(c){c[e]=d | |
}}; | |
DwtListView.prototype._isValidDragObject=function(a){return(this.getTargetItemDiv(a)!=null) | |
}; | |
DwtListView.prototype._updateDragSelection=function(c,a){if(!c){return | |
}if(!a){c.className=this._getItemData(c,"origClassName") | |
}else{this._setItemData(c,"origClassName",c.className); | |
Dwt.delClass(c,this._styleRe,this._dndClass) | |
}}; | |
DwtListView.prototype._mouseOverAction=function(c,e){var a=this._getItemData(e,"type"); | |
if(a==DwtListView.TYPE_HEADER_ITEM){var d=this.getItemFromElement(e); | |
if(d&&this.sortingEnabled&&d._sortable&&!this._headerClone){e.className+=" DwtListView-ColumnHover" | |
}}else{if(a==DwtListView.TYPE_HEADER_SASH){e.style.cursor=AjxEnv.isIE?"col-resize":"e-resize" | |
}}return true | |
}; | |
DwtListView.prototype._mouseOutAction=function(c,e){var a=this._getItemData(e,"type"); | |
if(a==DwtListView.TYPE_HEADER_ITEM&&!this._headerClone){e.className=(e.id!=this._currentColId)?"DwtListView-Column":"DwtListView-Column DwtListView-ColumnActive"; | |
var d=this.getItemFromElement(e); | |
if(!d._sortable){e.className+=" DwtDefaultCursor" | |
}}else{if(a==DwtListView.TYPE_HEADER_SASH){e.style.cursor="auto" | |
}}return true | |
}; | |
DwtListView.prototype._mouseOverListener=function(a){var c=this.getTargetItemDiv(a); | |
if(!c){return | |
}this._mouseOverAction(a,c) | |
}; | |
DwtListView.prototype._mouseOutListener=function(a){var c=this.getTargetItemDiv(a); | |
if(!c){return | |
}this.setToolTipContent(null); | |
this._mouseOutAction(a,c) | |
}; | |
DwtListView.prototype._mouseMoveListener=function(c){if(!this._clickDiv){return | |
}var a=this._getItemData(this._clickDiv,"type"); | |
if(a==DwtListView.TYPE_HEADER_ITEM){this._handleColHeaderMove(c) | |
}else{if(a==DwtListView.TYPE_HEADER_SASH){this._handleColHeaderResize(c) | |
}}}; | |
DwtListView.prototype._mouseDownListener=function(a){var c=this.getTargetItemDiv(a); | |
if(!c){this._dndSelection=null | |
}else{this._clickDiv=c; | |
if(this._getItemData(c,"type")!=DwtListView.TYPE_LIST_ITEM){this._dndSelection=null | |
}else{this._dndSelection=(this._selectedItems.contains(c))?this._selectedItems:c | |
}}this._mouseDownAction(a,c) | |
}; | |
DwtListView.prototype._mouseUpListener=function(d){var g=this.getTargetItemDiv(d); | |
var f=this._handleColHeaderDrop(d); | |
var a=this._handleColSashDrop(d); | |
if(!g||g!=this._clickDiv||f||a){delete this._clickDiv; | |
this._mouseUpAction(d,g); | |
return | |
}delete this._clickDiv; | |
var c=this._getItemData(g,"type"); | |
if(this._headerList&&c==DwtListView.TYPE_HEADER_ITEM){if(d.button==DwtMouseEvent.LEFT){this._columnClicked(g,d) | |
}else{if(d.button==DwtMouseEvent.RIGHT){var e=this._colHeaderActionMenu=this._getActionMenuForColHeader(); | |
if(e&&e instanceof DwtMenu){e.popup(0,d.docX,d.docY) | |
}}}}else{if(c==DwtListView.TYPE_LIST_ITEM){if(d.button==DwtMouseEvent.LEFT||d.button==DwtMouseEvent.RIGHT){this._itemClicked(g,d) | |
}}}this._mouseUpAction(d,g) | |
}; | |
DwtListView.prototype._mouseDownAction=function(a,c){}; | |
DwtListView.prototype._mouseUpAction=function(a,c){}; | |
DwtListView.prototype._doubleClickAction=function(a,c){return true | |
}; | |
DwtListView.prototype._doubleClickListener=function(c){var d=this.getTargetItemDiv(c); | |
if(!d){return | |
}var a=this._getItemData(d,"type"); | |
if(a==DwtListView.TYPE_LIST_ITEM){if(!this._doubleClickAction(c,d)){return | |
}if(this._evtMgr.isListenerRegistered(DwtEvent.SELECTION)){DwtUiEvent.copy(this._selEv,c); | |
this._selEv.item=this.getItemFromElement(d); | |
this._selEv.detail=DwtListView.ITEM_DBL_CLICKED; | |
this._evtMgr.notifyListeners(DwtEvent.SELECTION,this._selEv) | |
}}}; | |
DwtListView.prototype.emulateDblClick=function(a,c){var e=document.getElementById(this._getItemId(a)); | |
if(e){var d=new DwtMouseEvent(); | |
this._setMouseEvent(d,{target:e,button:DwtMouseEvent.LEFT}); | |
d.kbNavEvent=c; | |
this._itemClicked(e,d); | |
this._doubleClickListener(d) | |
}}; | |
DwtListView.prototype._selectItem=function(d,a,e){if(!this.size()){return | |
}var c=(this._kbAnchor)?this._getSiblingElement(this._kbAnchor,d):this._parentEl.firstChild; | |
this._scrollList(c); | |
this._emulateSingleClick({target:c,button:DwtMouseEvent.LEFT,shiftKey:a,kbNavEvent:e}) | |
}; | |
DwtListView.prototype._getSiblingElement=function(a,d){if(!a){return null | |
}var c=d?a.nextSibling:a.previousSibling; | |
while(this._hasHiddenRows&&c&&!Dwt.getVisible(c)){c=d?c.nextSibling:c.previousSibling | |
}return(!c||(this._hasHiddenRows&&!Dwt.getVisible(c)))?a:c | |
}; | |
DwtListView.prototype._scrollList=function(a){Dwt.scrollIntoView(a,a.parentNode) | |
}; | |
DwtListView.prototype._setRowHeight=function(){if(!this._rowHeight){var a=this._parentEl.firstChild; | |
this._rowHeight=a&&Dwt.getSize(a).y | |
}}; | |
DwtListView.prototype._emulateSingleClick=function(a){this._clickDiv=this.findItemDiv(a.target); | |
var c=new DwtMouseEvent(); | |
this._setMouseEvent(c,a); | |
c.kbNavEvent=a.kbNavEvent; | |
this.notifyListeners(DwtEvent.ONMOUSEUP,c) | |
}; | |
DwtListView.prototype._setKbFocusElement=function(a,c){if(!this._list||!this._list.size()){this._kbAnchor=null; | |
this.setFocusElement(this.getHtmlElement()); | |
return | |
}if(this._kbAnchor){this._setEventHdlrs([DwtEvent.ONFOCUS,DwtEvent.ONBLUR],true,this._kbAnchor); | |
this._unmarkKbAnchorElement() | |
}if(a&&a!==true){this._kbAnchor=a | |
}else{if(this._kbAnchor){this._kbAnchor=this._getSiblingElement(this._kbAnchor,a) | |
}else{this._kbAnchor=this._parentEl.firstChild | |
}}this.setFocusElement(this._kbAnchor); | |
if(this._kbAnchor&&!c){Dwt.addClass(this._kbAnchor,this._kbFocusClass); | |
if(!this._duringFocusByMouseDown){this._scrollList(this._kbAnchor) | |
}var d=this.shell.getKeyboardMgr(); | |
if(this.hasFocus()||d.getFocusObj()===this){d.grabFocus(this) | |
}}}; | |
DwtListView.prototype._itemSelected=function(a,d){if(this._allowLeftSelection(a,d,d&&d.button)){this._unmarkKbAnchorElement(true); | |
this.deselectAll(); | |
this._selectedItems.add(a); | |
a.setAttribute("aria-selected",true); | |
this._setKbFocusElement(a); | |
this._selAnchor=a; | |
Dwt.delClass(a,this._styleRe,this._selectedClass); | |
if(this.hasFocus()){Dwt.addClass(a,this._kbFocusClass) | |
}var c=this.getItemFromElement(a); | |
this._markUnselectedViewedItem(false); | |
this._curViewedItem=c; | |
this.firstSelIndex=(this._list&&c)?this._list.indexOf(c):-1 | |
}}; | |
DwtListView.prototype._itemClicked=function(h,n){if(this._rightSelItem){Dwt.delClass(this._rightSelItem,this._styleRe); | |
this._rightSelItem=null | |
}var g=this._selectedItems.size(); | |
var e=this._selectedItems.contains(h); | |
if((!n.shiftKey&&!n.ctrlKey)||!this.isMultiSelectEnabled()){if(n.button==DwtMouseEvent.LEFT||n.button==DwtMouseEvent.RIGHT){this._selEv.detail=DwtListView.ITEM_SELECTED | |
}if(n.button==DwtMouseEvent.LEFT){this._itemSelected(h,n) | |
}else{if(n.button==DwtMouseEvent.RIGHT&&!e&&this._evtMgr.isListenerRegistered(DwtEvent.ACTION)){this.deselectAll(); | |
this._markUnselectedViewedItem(true); | |
this._rightSelItem=h; | |
Dwt.delClass(h,this._styleRe,this._rightClickClass); | |
this._setKbFocusElement(h,true) | |
}}}else{if(n.button==DwtMouseEvent.LEFT){if(n.ctrlKey){this.setMultiSelection(h,e,n) | |
}else{if(!this._selAnchor){return | |
}var j=this._getChildren()||h.parentNode.childNodes; | |
var l=j.length; | |
var f; | |
var c=0; | |
this._rightSelItem=null; | |
this._selectedItems.removeAll(); | |
for(var k=0; | |
k<l; | |
k++){f=j[k]; | |
var o=this.getItemFromElement(f); | |
if(o===null){continue | |
}var d=this._selectedClass; | |
var a=(c===1); | |
if(f===h||f===this._selAnchor||f.id===h.id||f.id===this._selAnchor.id){c++; | |
a=true | |
}if(a){this._selectedItems.add(f); | |
f.setAttribute("aria-selected",true); | |
Dwt.delClass(f,this._styleRe,d) | |
}else{if(f.className.indexOf(d)!==-1){Dwt.delClass(f,this._styleRe); | |
f.removeAttribute("aria-selected") | |
}}}this._setKbFocusElement(h); | |
var m=this._selectedItems.size(); | |
if(g<m){this._selEv.detail=DwtListView.ITEM_SELECTED | |
}else{if(g>m){this._selEv.detail=DwtListView.ITEM_DESELECTED | |
}else{return | |
}}}}}if(n.button==DwtMouseEvent.LEFT&&this._evtMgr.isListenerRegistered(DwtEvent.SELECTION)){if(this._setListEvent(n,this._selEv,h)){this._evtMgr.notifyListeners(DwtEvent.SELECTION,this._selEv) | |
}if(!this.hasFocus()){this.focus() | |
}}else{if(n.button==DwtMouseEvent.RIGHT&&!n.shiftKey&&!n.ctrlKey&&this._evtMgr.isListenerRegistered(DwtEvent.ACTION)){if(this._setListEvent(n,this._actionEv,h)){this._evtMgr.notifyListeners(DwtEvent.ACTION,this._actionEv) | |
}}}}; | |
DwtListView.prototype._focusByMouseDownEvent=function(){}; | |
DwtListView.prototype._setListEvent=function(c,d,a){DwtUiEvent.copy(d,c); | |
d.kbNavEvent=c.kbNavEvent; | |
d.item=this.findItem(a); | |
return true | |
}; | |
DwtListView.prototype._columnClicked=function(f,d){var g=this.getItemFromElement(f); | |
if(!(g._sortable&&this.sortingEnabled)){return | |
}var e=this.getList(); | |
var a=e?e.size():null; | |
var c=this._columnHasCustomQuery(g); | |
if(!a&&!c){return | |
}this._bSortAsc=(g._id===this._currentColId)?!this._bSortAsc:this._isDefaultSortAscending(g); | |
this._setSortedColStyle(g._id); | |
if(a>=1||c){this._sortColumn(g,this._bSortAsc) | |
}}; | |
DwtListView.prototype._columnHasCustomQuery=function(a){return false | |
}; | |
DwtListView.prototype._sortColumn=function(a,c){}; | |
DwtListView.prototype._getActionMenuForColHeader=function(){return null | |
}; | |
DwtListView.prototype._isDefaultSortAscending=function(a){return true | |
}; | |
DwtListView.prototype._allowLeftSelection=function(c,d,a){return true | |
}; | |
DwtListView.prototype._setSortedColStyle=function(a){if(this._currentColId&&(a!=this._currentColId)){var g=this._headerIdHash[this._currentColId]; | |
if(g&&!g._noSortArrow){var h=g._field; | |
var i=DwtId.getListViewHdrId(DwtId.WIDGET_HDR_ARROW,this._view,h); | |
var e=document.getElementById(i); | |
if(e&&e.firstChild){var c=(AjxImg._mode==AjxImg.SINGLE_IMG)?e.firstChild:e.firstChild.firstChild; | |
if(c){c.style.visibility="hidden" | |
}}}var k=document.getElementById(this._currentColId); | |
if(k){k.className="DwtListView-Column" | |
}}this._currentColId=a; | |
var g=this._headerIdHash[this._currentColId]; | |
if(!g._noSortArrow){var h=g._field; | |
var j=DwtId.getListViewHdrId(DwtId.WIDGET_HDR_ARROW,this._view,h); | |
var d=document.getElementById(j); | |
if(d){AjxImg.setImage(d,this._bSortAsc?"ColumnUpArrow":"ColumnDownArrow"); | |
var c=(AjxImg._mode==AjxImg.SINGLE_IMG)?d.firstChild:d.firstChild.firstChild; | |
if(c){c.style.visibility="visible" | |
}}}var f=document.getElementById(a); | |
if(f){f.className="DwtListView-Column DwtListView-ColumnActive" | |
}}; | |
DwtListView.prototype._resetList=function(){if(this._list&&this._list.size()){this._list.removeAll() | |
}this._resetListView() | |
}; | |
DwtListView.prototype._resetListView=function(){var a; | |
while(this._parentEl&&this._parentEl.hasChildNodes()){var a=this._parentEl.removeChild(this._parentEl.firstChild); | |
this._data[a.id]=null | |
}if(this._selectedItems){this._selectedItems.removeAll() | |
}this._rightSelItem=null | |
}; | |
DwtListView.prototype._destroyDragProxy=function(a){this._data[a.id]=null; | |
DwtControl.prototype._destroyDragProxy.call(this,a) | |
}; | |
DwtListView.prototype._handleColHeaderMove=function(h){if(!this._headerClone){if(!this._headerColX){this._headerColX=h.docX; | |
return | |
}else{var f=Math.abs(this._headerColX-h.docX); | |
if(f<DwtListView.COL_MOVE_THRESHOLD){return | |
}}this._headerClone=document.createElement("div"); | |
var l=Dwt.getSize(this._clickDiv); | |
var c=AjxEnv.isIE?l.x:l.x-3; | |
var k=AjxEnv.isIE?l.y:l.y-5; | |
Dwt.setSize(this._headerClone,c,k); | |
Dwt.setPosition(this._headerClone,Dwt.ABSOLUTE_STYLE); | |
Dwt.setZIndex(this._headerClone,Dwt.Z_DND); | |
Dwt.setLocation(this._headerClone,Dwt.DEFAULT,h.docY); | |
this._headerClone.className=this._clickDiv.className+" DragProxy"; | |
this._headerClone.innerHTML=this._clickDiv.innerHTML; | |
this._clickDiv.className="DwtListView-Column DwtListView-ColumnEmpty"; | |
this._headerClone.style.borderTop="1px solid #777777"; | |
var i=this._headerIdHash[this._clickDiv.id]; | |
var j=i._field; | |
var e=DwtId.getListViewHdrId(DwtId.WIDGET_HDR_LABEL,this._view,j); | |
var d=document.getElementById(e); | |
if(d){d.style.color="#FFFFFF" | |
}this.shell.getHtmlElement().appendChild(this._headerClone) | |
}else{var a=this.getTargetItemDiv(h); | |
var g=this._getItemData(a,"type"); | |
if(g==DwtListView.TYPE_HEADER_ITEM){if(this._headerCloneTarget&&(this._headerCloneTarget==this._clickDiv)){this._headerCloneTarget=null | |
}else{if(this._headerCloneTarget!=a){this._headerCloneTarget=a | |
}}}else{this._headerCloneTarget=null | |
}}if(this._headerClone){Dwt.setLocation(this._headerClone,h.docX+2) | |
}}; | |
DwtListView.prototype._handleColHeaderResize=function(c){if(!this._headerSash){this._headerSash=document.createElement("div"); | |
Dwt.setSize(this._headerSash,Dwt.DEFAULT,this.getSize().y); | |
Dwt.setPosition(this._headerSash,Dwt.ABSOLUTE_STYLE); | |
Dwt.setZIndex(this._headerSash,Dwt.Z_DND); | |
var d=this._getHeaderSashLocation(); | |
this._headerSashFudgeX=d.x; | |
Dwt.setLocation(this._headerSash,Dwt.DEFAULT,d.y); | |
this._headerSash.className="DwtListView-ColumnSash"; | |
this.getHtmlElement().appendChild(this._headerSash); | |
this._headerSashX=c.docX | |
}var a=this._getParentForColResize(); | |
var e=Dwt.toWindow(a.getHtmlElement(),0,0); | |
Dwt.setLocation(this._headerSash,(c.docX-e.x)+this._headerSashFudgeX) | |
}; | |
DwtListView.prototype._getHeaderSashLocation=function(){if(!this._tmpPoint){this._tmpPoint=new DwtPoint() | |
}this._tmpPoint.x=0; | |
this._tmpPoint.y=0; | |
return this._tmpPoint | |
}; | |
DwtListView.prototype._handleColHeaderDrop=function(j){this._headerColX=null; | |
if(this._headerClone==null||j.button==DwtMouseEvent.RIGHT){return false | |
}if(this._headerCloneTarget){var a=this._getItemData(this._clickDiv,"index"); | |
var d=this._getItemData(this._headerCloneTarget,"index"); | |
this._reIndexColumn(a,d) | |
}this._clickDiv.className=(this._clickDiv.id!=this._currentColId)?"DwtListView-Column":"DwtListView-Column DwtListView-ColumnActive"; | |
var l=this._headerClone.parentNode; | |
if(l){l.removeChild(this._headerClone) | |
}delete this._headerClone; | |
var g=this._data[this._clickDiv.id]; | |
if(g.type!=DwtListView.TYPE_HEADER_ITEM){var k=this._headerIdHash[this._currentColId]; | |
var h=k._sortable?k._field:null; | |
this.headerColCreated=false; | |
this.createHeaderHtml(h) | |
}else{var k=this._headerIdHash[this._clickDiv.id]; | |
var e=DwtId.getListViewHdrId(DwtId.WIDGET_HDR_LABEL,this._view,k._field); | |
var c=document.getElementById(e); | |
if(c){c.style.color="#000000" | |
}}for(var f=0; | |
f<this._headerList.length; | |
f++){this._headerList[f]._width=this._calcRelativeWidth(f) | |
}this._resetColWidth(); | |
return true | |
}; | |
DwtListView.prototype._reIndexColumn=function(e,d){if(!this._headerList){return | |
}var a=this._headerList.length; | |
if(e<0||d<0||e>=a||d>=a||e==d){return | |
}var c=this._headerList.splice(e,1); | |
this._headerList.splice(d,0,c[0]); | |
this._relayout() | |
}; | |
DwtListView.prototype._handleColSashDrop=function(l){if(this._headerSash==null||l.button==DwtMouseEvent.RIGHT){return false | |
}var m=this._headerSash.parentNode; | |
if(m){m.removeChild(this._headerSash) | |
}delete this._headerSash; | |
for(var e=0; | |
e<this._headerList.length; | |
e++){this._headerList[e]._width=this._calcRelativeWidth(e) | |
}var d=this._getItemData(this._clickDiv,"index"); | |
if(d==null){return false | |
}var n=l.docX-this._headerSashX; | |
var k=this._headerList[d]; | |
var j=k; | |
var h; | |
var f=[]; | |
if(n<0){if((j==h)||!h){h=this._getNextResizeableColumnHeader(j) | |
}if(!h){return false | |
}n=Math.max(DwtListView.MIN_COLUMN_WIDTH-k._width,n); | |
k._width=Math.max(k._width+n,DwtListView.MIN_COLUMN_WIDTH); | |
h._width=Math.max(this._calcRelativeWidth(h._index)-n,DwtListView.MIN_COLUMN_WIDTH); | |
f.push(k._index,h._index) | |
}else{if(n>0){var g=n; | |
while(g>0){if((j==h)||!h){h=this._getNextResizeableColumnHeader(j,[],false) | |
}if(!h){n-=g; | |
break | |
}var o=this._calcRelativeWidth(h._index); | |
var a=o-DwtListView.MIN_COLUMN_WIDTH; | |
if(g>a){g-=a; | |
o=DwtListView.MIN_COLUMN_WIDTH | |
}else{o-=g; | |
g=0 | |
}h._width=o; | |
f.push(h._index); | |
j=h | |
}k._width=Math.max(k._width+n,DwtListView.MIN_COLUMN_WIDTH); | |
f.push(k._index) | |
}}var c=this._getNextResizeableColumnHeader(k,f,true); | |
if(c){c._width="auto" | |
}this._relayout(); | |
this._resetColWidth(); | |
return true | |
}; | |
DwtListView.prototype.recalculateCssStyle=function(){for(var a=0; | |
a<this._headerList.length; | |
a++){var c=this._headerList[a]; | |
this._createHeaderCssStyle(c,this._calcRelativeWidth(a)) | |
}}; | |
DwtListView.prototype._calcRelativeWidth=function(d){var c=this._headerList[d]; | |
if(!c._width||(c._width&&c._width=="auto")){var a=document.getElementById(c._id); | |
return(a)?(a.clientWidth-(AjxEnv.isIE?4:5)):null | |
}return c._width | |
}; | |
DwtListView.prototype._resetColWidth=function(){if(!this.headerColCreated){return | |
}var g=this._getLastColumnIndex(); | |
if(g){var d=this._headerList[g]; | |
var c=document.getElementById(d._id); | |
if(c){var h=c.firstChild; | |
var a=16; | |
var f=this._listColDiv.clientWidth; | |
var e=this._listDiv.clientWidth; | |
if(f!=e){c.style.width=h.style.width=(d._width!=null&&d._width!="auto")?(d._width+a+"px"):(c.clientWidth+a+"px") | |
}else{Dwt.setSize(c,d._width,Dwt.DEFAULT); | |
Dwt.setSize(h,d._width,Dwt.DEFAULT) | |
}this.recalculateCssStyle() | |
}}}; | |
DwtListView.prototype._getLastColumnIndex=function(){var c=null; | |
if(this._headerList){var a=this._headerList.length-1; | |
while(c==null&&a>=0){if(this._headerList[a]._visible){c=a | |
}a-- | |
}}return c | |
}; | |
DwtListView.prototype._getNextResizeableColumnIndex=function(f,a,e){a=a?AjxUtil.arrayAsHash(a):{}; | |
a[f]=true; | |
if(this._headerList){for(var d=f+1; | |
d<this._headerList.length; | |
d++){var c=this._headerList[d]; | |
if(a[d]){continue | |
}if(c._visible&&c._resizeable){return d | |
}}if(e){for(var d=0; | |
d<f; | |
d++){if(a[d]){continue | |
}var c=this._headerList[d]; | |
if(c._visible&&c._resizeable){return d | |
}}}}return null | |
}; | |
DwtListView.prototype._getNextResizeableColumnHeader=function(e,a,d){var c=this._getNextResizeableColumnIndex(e._index,a,d); | |
return(c!==null)?this._headerList[c]:false | |
}; | |
DwtListView.prototype._relayout=function(){this.headerColCreated=false; | |
var d=this._headerIdHash[this._currentColId]; | |
var a=(d&&d._sortable)?d._field:null; | |
var c=this.getSelection()[0]; | |
this.setUI(a); | |
this.setSelection(c,true) | |
}; | |
DwtListView.prototype._getParentForColResize=function(){return this | |
}; | |
DwtListView.prototype._sizeChildren=function(a){if(this.headerColCreated&&this._listDiv&&(a!=Dwt.DEFAULT)){Dwt.setSize(this._listDiv,Dwt.DEFAULT,a-DwtListView.HEADERITEM_HEIGHT); | |
return true | |
}else{return false | |
}}; | |
DwtListView.prototype._getChildren=function(){return null | |
}; | |
DwtListView.prototype._focus=function(){if(this.size()==0){return | |
}if(this._kbAnchor){Dwt.addClass(this._kbAnchor,this._kbFocusClass) | |
}else{this._setKbFocusElement(null,true) | |
}}; | |
DwtListView.prototype._blur=function(){this._unmarkKbAnchorElement() | |
}; | |
DwtListView.prototype._unmarkKbAnchorElement=function(a){if(this._kbAnchor){Dwt.delClass(this._kbAnchor,this._kbFocusClass) | |
}if(a){this._kbAnchor=null | |
}}; | |
DwtListView.prototype._getFirstItem=function(){var c=this._list.getArray(); | |
if(c&&c.length>1){return c[0] | |
}return null | |
}; | |
DwtListView.prototype._getLastItem=function(){var c=this._list.getArray(); | |
if(c&&c.length>1){return c[c.length-1] | |
}return null | |
}; | |
DwtListHeaderItem=function(c){if(arguments.length==0){return | |
}c=Dwt.getParams(arguments,DwtListView.PARAMS); | |
this._field=c.field; | |
this._label=c.text; | |
this._iconInfo=c.icon; | |
this._sortable=c.sortable; | |
this._noSortArrow=c.noSortArrow; | |
this._resizeable=c.resizeable; | |
this._visible=(c.visible!==false); | |
this._name=c.name||c.text; | |
this._align=c.align; | |
this._noRemove=c.noRemove; | |
this._tooltip=c.tooltip; | |
this._cssClass=c.cssClass; | |
var a=parseInt(c.width); | |
if(isNaN(a)||!a){this._width="auto"; | |
this._variable=true; | |
this._resizeable=true | |
}else{if(String(a)==String(c.width)){this._width=a | |
}else{this._width=parseInt(String(c.width).substr(0,String(a).length)); | |
this._widthUnits=AjxStringUtil.getUnitsFromSizeString(c.width) | |
}}}; | |
DwtListHeaderItem.prototype.isDwtListHeaderItem=true; | |
DwtListHeaderItem.prototype.toString=function(){return"DwtListHeaderItem" | |
}; | |
DwtListHeaderItem.PARAMS=["id","text","icon","width","sortable","resizeable","visible","name","align","noRemove","view"]; | |
DwtListHeaderItem.sortCompare=function(d,c){return d._index<c._index?-1:(d._index>c._index?1:0) | |
} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtInputField")){DwtInputField=function(j){if(arguments.length==0){return | |
}j.className=j.className||"DwtInputField"; | |
this._origClassName=j.className; | |
this._errorClassName=this._origClassName+"-error"; | |
this._hintClassName=this._origClassName+"-hint"; | |
this._disabledClassName=this._origClassName+"-disabled"; | |
this._focusedClassName=this._origClassName+"-focused"; | |
this._errorHintClassName=this._origClassName+"-errorhint"; | |
this._requiredClassName=this._origClassName+"-required"; | |
DwtComposite.call(this,j); | |
this._inputEventHandlers={}; | |
this._type=j.type?j.type:DwtInputField.STRING; | |
this._rows=j.rows?j.rows:1; | |
this._size=j.size; | |
this._errorIconStyle=j.errorIconStyle?j.errorIconStyle:j.validator?DwtInputField.ERROR_ICON_RIGHT:DwtInputField.ERROR_ICON_NONE; | |
this._validationStyle=j.validationStyle?j.validationStyle:DwtInputField.ONEXIT_VALIDATION; | |
this._hasError=false; | |
this._hintIsVisible=false; | |
this._hint=j.hint; | |
this._label=j.label; | |
this.addListener(DwtEvent.ONFOCUS,this._focusHdlr.bind(this)); | |
this.addListener(DwtEvent.ONBLUR,this._blurHdlr.bind(this)); | |
this.addListener(DwtEvent.STATE_CHANGE,this._stateChanged.bind(this)); | |
var h=j.inputId||Dwt.getNextId(); | |
var g=Dwt.getNextId(); | |
var f=this.getHtmlElement(); | |
if(this._errorIconStyle==DwtInputField.ERROR_ICON_NONE){if(j.forceMultiRow||(j.rows&&j.rows>1)){var a=["<textarea id='",h,"' rows=",j.rows]; | |
var e=a.length; | |
if(j.forceMultiRow||j.size){a[e++]=" cols="; | |
a[e++]=j.size||1 | |
}if(j.wrap){a[e++]=" wrap="; | |
a[e++]=j.wrap | |
}a[e++]="></textarea>"; | |
f.innerHTML=a.join("") | |
}else{f.innerHTML=["<input id='",h,"'>"].join("") | |
}}else{var a=["<table cellspacing='0' cellpadding='0'><tr>"]; | |
var e=1; | |
if(this._errorIconStyle==DwtInputField.ERROR_ICON_LEFT){a[e++]=["<td style='padding-right:2px;'id='",g,"'></td>"].join("") | |
}a[e++]=["<td>","<input id='",h,"'>","</td>"].join(""); | |
if(this._errorIconStyle==DwtInputField.ERROR_ICON_RIGHT){a[e++]=["<td style='padding-left:2px;' id='",g,"'></td>"].join("") | |
}a[e++]="</tr></table>"; | |
f.innerHTML=a.join(""); | |
if(this._errorIconStyle!=DwtInputField.ERROR_ICON_NONE){this._errorIconTd=document.getElementById(g); | |
this._errorIconTd.vAlign="middle"; | |
this._errorIconTd.innerHTML=DwtInputField._NOERROR_ICON_HTML | |
}}if(j.forceMultiRow||this._rows>1){this._inputField=document.getElementById(h); | |
this._inputField.onkeyup=DwtInputField._keyUpHdlr; | |
this._inputField.onkeydown=DwtInputField._keyDownHdlr; | |
if(j.size){this._inputField.size=j.size | |
}if(j.maxLen){this._inputField.maxLength=this._maxLen=j.maxLen | |
}this._inputField.value=j.initialValue||"" | |
}else{var c=document.getElementById(h); | |
var d=this.__createInputEl(j); | |
if(AjxEnv.isCamino){c.parentNode.style.overflow="hidden" | |
}c.parentNode.replaceChild(d,c) | |
}this.setFocusElement(); | |
this.setValidatorFunction(j.validatorCtxtObj,j.validator); | |
this._setMouseEventHdlrs(false); | |
this._setKeyPressEventHdlr(false); | |
if(j.required!=null){this.setRequired(j.required) | |
}if(j.hint!=null){this.setHint(j.hint) | |
}}; | |
DwtInputField.prototype=new DwtComposite; | |
DwtInputField.prototype.constructor=DwtInputField; | |
DwtInputField.prototype.isDwtInputField=true; | |
DwtInputField.prototype.isInputControl=true; | |
DwtInputField.prototype.toString=function(){return"DwtInputField" | |
}; | |
DwtInputField.ERROR_ICON_LEFT=1; | |
DwtInputField.ERROR_ICON_RIGHT=2; | |
DwtInputField.ERROR_ICON_NONE=3; | |
DwtInputField.CONTINUAL_VALIDATION=1; | |
DwtInputField.ONEXIT_VALIDATION=2; | |
DwtInputField.MANUAL_VALIDATION=3; | |
DwtInputField.NUMBER=1; | |
DwtInputField.INTEGER=2; | |
DwtInputField.FLOAT=3; | |
DwtInputField.STRING=4; | |
DwtInputField.PASSWORD=5; | |
DwtInputField.DATE=6; | |
DwtInputField._ERROR_ICON_HTML=AjxImg.getImageHtml("Critical"); | |
DwtInputField._NOERROR_ICON_HTML=AjxImg.getImageHtml("Blank_9"); | |
DwtInputField.prototype.dispose=function(){this._errorIconTd=null; | |
this._inputField=null; | |
DwtComposite.prototype.dispose.call(this) | |
}; | |
DwtInputField.prototype.setHandler=function(c,a){if(!this._checkState()){return | |
}this._inputEventHandlers[c]=a; | |
Dwt.setHandler(this.getInputElement(),c,a) | |
}; | |
DwtInputField.prototype.setInputType=function(d){if(d!=this._type&&this._rows==1){this._type=d; | |
if(AjxEnv.isIE){var a=this._inputField; | |
var c=this.__createInputEl(); | |
a.parentNode.replaceChild(c,a) | |
}else{this._inputField.type=this._type!=DwtInputField.PASSWORD?"text":"password" | |
}}}; | |
DwtInputField.prototype.applySubstitution=function(d,c){var a; | |
while((a=d.exec(this.getValue()))){this._inputField.setRangeText(c,a.index,a.index+a[0].length); | |
if(!d.global){return | |
}}}; | |
DwtInputField.prototype.setValidatorFunction=function(c,a){if(a){this._validator=a; | |
this._validatorObj=c | |
}else{switch(this._type){case DwtInputField.NUMBER:this._validator=DwtInputField.validateNumber; | |
break; | |
case DwtInputField.INTEGER:this._validator=DwtInputField.validateInteger; | |
break; | |
case DwtInputField.FLOAT:this._validator=DwtInputField.validateFloat; | |
break; | |
case DwtInputField.STRING:case DwtInputField.PASSWORD:this._validator=DwtInputField.validateString; | |
break; | |
case DwtInputField.DATE:this._validator=DwtInputField.validateDate; | |
break; | |
default:this._validator=DwtInputField.validateAny | |
}}}; | |
DwtInputField.prototype.setValidatorRegExp=function(a,c){this._validator=a; | |
this._validatorObj=null; | |
this._errorString=c||"" | |
}; | |
DwtInputField.prototype.setValidationCallback=function(a){this._validationCallback=a | |
}; | |
DwtInputField.prototype.getInputElement=function(){return this._inputField | |
}; | |
DwtInputField.prototype.getValue=function(){return this._hintIsVisible?"":AjxStringUtil.trim(this._inputField.value) | |
}; | |
DwtInputField.prototype.setValue=function(c,a){c=c||""; | |
this._inputField.value=c; | |
if(!a){c=this._validateInput(c); | |
if(c!=null){this._inputField.value=c | |
}}if(this._hintIsVisible&&c){this._hideHint(c) | |
}else{if(!c){this._showHint() | |
}}}; | |
DwtInputField.prototype.clear=function(){this.setValue("") | |
}; | |
DwtInputField.prototype.setHint=function(c){this._hint=c; | |
var a=this.getInputElement(); | |
if(AjxEnv.supportsPlaceholder){a.placeholder=c||""; | |
return | |
}if(this._hintIsVisible){a.value=c; | |
if(!c){this._hintIsVisible=false; | |
this._updateClassName() | |
}}else{if(a.value===""){this._showHint() | |
}}}; | |
DwtInputField.prototype.setLabel=function(a){this._label=a; | |
var c=this.getInputElement(); | |
if(a){c.setAttribute("aria-label",a) | |
}else{c.removeAttribute("aria-label",a) | |
}}; | |
DwtInputField.prototype.setValidNumberRange=function(c,a){this._minNumVal=c; | |
this._maxNumVal=a; | |
var d=this._validateInput(this.getValue()); | |
if(d!=null){this.setValue(d) | |
}}; | |
DwtInputField.prototype.setValidStringLengths=function(c,a){this._minLen=c||0; | |
if(a!=null){this._inputField.maxLength=a; | |
this._maxLen=a | |
}}; | |
DwtInputField.prototype.setNumberPrecision=function(a){this._decimals=a | |
}; | |
DwtInputField.prototype.setReadOnly=function(a){this._inputField.setAttribute("readonly",(a==null?true:a)) | |
}; | |
DwtInputField.prototype.getRequired=function(){var a=this.getInputElement().getAttribute("aria-required"); | |
return a&&a.toLowerCase()==="true" | |
}; | |
DwtInputField.prototype.setRequired=function(a){this.getInputElement().setAttribute("aria-required",a?"true":"false") | |
}; | |
DwtInputField.prototype.setVisible=function(a){DwtComposite.prototype.setVisible.apply(this,arguments); | |
Dwt.setVisible(this.getInputElement(),a) | |
}; | |
DwtInputField.prototype.isValid=function(){if(!this.getEnabled()){return this.getValue() | |
}try{if(typeof this._validator=="function"){return this._validatorObj?this._validator.call(this._validatorObj,this.getValue(),this):this._validator(this.getValue()) | |
}else{return this._validator.test(this._inputField.value) | |
}}catch(a){if(typeof a=="string"){return null | |
}else{throw a | |
}}}; | |
DwtInputField.prototype.getValidationError=function(){this.validate(); | |
return this._validationError | |
}; | |
DwtInputField.prototype.validate=function(){var a=this._validateInput(this.getValue()); | |
if(a!=null){this.setValue(a); | |
return true | |
}else{return false | |
}}; | |
DwtInputField.validateNumber=function(a){var c=new Number(a); | |
if(isNaN(c)||(Math.round(c)!=c)){throw AjxMsg.notAnInteger | |
}return DwtInputField.validateFloat.call(this,a) | |
}; | |
DwtInputField.validateInteger=function(a){var c=new Number(a); | |
if(isNaN(c)||(Math.round(c)!=c)||(c.toString()!=a)){throw AjxMsg.notAnInteger | |
}if(this._minNumVal&&a<this._minNumVal){throw AjxMessageFormat.format(AjxMsg.numberLessThanMin,this._minNumVal) | |
}if(this._maxNumVal&&a>this._maxNumVal){throw AjxMessageFormat.format(AjxMsg.numberMoreThanMax,this._maxNumVal) | |
}return a | |
}; | |
DwtInputField.validateFloat=function(a){var e=new Number(a); | |
if(isNaN(e)){throw AjxMsg.notANumber | |
}if(this._minNumVal&&a<this._minNumVal){throw AjxMessageFormat.format(AjxMsg.numberLessThanMin,this._minNumVal) | |
}if(this._maxNumVal&&a>this._maxNumVal){throw AjxMessageFormat.format(AjxMsg.numberMoreThanMax,this._maxNumVal) | |
}if(this._decimals!=null){var c=e.toString(); | |
var d=c.indexOf("."); | |
if(d==-1){d=c.length | |
}a=e.toPrecision(d+this._decimals) | |
}else{a=e.toString() | |
}return a | |
}; | |
DwtInputField.validateString=function(a){if(this._minLen!=null&&a.length<this._minLen){throw AjxMessageFormat.format(AjxMsg.stringTooShort,this._minLen) | |
}if(this._maxLen!=null&&a.length>this._maxLen){throw AjxMessageFormat.format(AjxMsg.stringTooLong,this._maxLen) | |
}return a | |
}; | |
DwtInputField.validateDate=function(a){if(AjxDateUtil.simpleParseDateStr(a)==null){throw AjxMsg.invalidDatetimeString | |
}return a | |
}; | |
DwtInputField.validateEmail=function(a){if(!AjxEmailAddress.isValid(a)){throw AjxMsg.invalidEmailAddr | |
}return a | |
}; | |
DwtInputField.validateAny=function(a){return a | |
}; | |
DwtInputField.prototype._validateRegExp=function(a){if(this._regExp&&!this._regExp.test(a)){throw this._errorString | |
}return a | |
}; | |
DwtInputField._keyUpHdlr=function(c){var a=DwtShell.keyEvent; | |
a.setFromDhtmlEvent(c,true); | |
var e=a.dwtObj; | |
var d=a.keyCode; | |
if(e.notifyListeners(DwtEvent.ONKEYUP,a)){return true | |
}var f=null; | |
if((d==13||d==9)&&e._validationStyle==DwtInputField.ONEXIT_VALIDATION){f=e._validateInput(e.getValue()) | |
}else{if(e._validationStyle==DwtInputField.CONTINUAL_VALIDATION){f=e._validateInput(e.getValue()) | |
}}if(f!=null&&f!=e.getValue()){e.setValue(f) | |
}return true | |
}; | |
DwtInputField.prototype._blurHdlr=function(a){if(this.isDisposed()){return | |
}this._updateClassName(); | |
if(this._validationStyle==DwtInputField.ONEXIT_VALIDATION){var c=this._validateInput(this.getValue()); | |
if(c!=null){this.setValue(c) | |
}}if(!this._hintIsVisible&&this._hint){this._showHint() | |
}}; | |
DwtInputField.prototype._focusHdlr=function(a){appCtxt.getKeyboardMgr().updateFocus(this); | |
this._updateClassName(); | |
if(this._hintIsVisible){this._hideHint("") | |
}}; | |
DwtInputField._keyDownHdlr=function(a){var c=DwtControl.getTargetControl(a); | |
if(c){if(c._hintIsVisible){c._hideHint("") | |
}}}; | |
DwtInputField.prototype._hideHint=function(c){if(!AjxEnv.supportsPlaceholder){var a=this.getInputElement(); | |
a.value=c; | |
a.title=this._hint||""; | |
this._hintIsVisible=false; | |
this._updateClassName() | |
}}; | |
DwtInputField.prototype._showHint=function(){if(!AjxEnv.supportsPlaceholder&&this._hint){var a=this.getInputElement(); | |
if(!a.value){this._hintIsVisible=true; | |
this._updateClassName(); | |
a.title=""; | |
a.value=this._hint | |
}}}; | |
DwtInputField.prototype._updateClassName=function(){var a=[]; | |
if(this._hasFocus){a.push(this._focusedClassName) | |
}if(!this.getEnabled()){a.push(this._disabledClassName) | |
}else{if(this._hasError){if(this._validationError===AjxMsg.valueIsRequired){a.push(this._requiredClassName) | |
}else{if(this._hintIsVisible&&!this._hasFocus){a.push(this._errorHintClassName) | |
}else{a.push(this._errorClassName) | |
}}}else{if(this._hintIsVisible&&!this._hasFocus){a.push(this._hintClassName) | |
}}}a.push(this._origClassName); | |
this.getHtmlElement().className=a.join(" ") | |
}; | |
DwtInputField.prototype._validateInput=function(c){var e=true; | |
var d; | |
this._validationError=null; | |
if(!this.getEnabled()){d=this.getValue() | |
}else{if(this.getRequired()&&c==""){this._validationError=AjxMsg.valueIsRequired | |
}else{try{if(typeof this._validator=="function"){d=c=this._validatorObj?this._validator.call(this._validatorObj,c,this):this._validator(c) | |
}else{if(!this._validator.test(c)){this._validationError=this._errorString | |
}}}catch(a){if(typeof a=="string"){this._validationError=a | |
}else{throw a | |
}}}}if(this._validationError){this._hasError=true; | |
if(this._errorIconTd){this._errorIconTd.innerHTML=DwtInputField._ERROR_ICON_HTML | |
}this.setToolTipContent(this._validationError); | |
e=false; | |
d=null | |
}else{this._hasError=false; | |
if(this._errorIconTd){this._errorIconTd.innerHTML=DwtInputField._NOERROR_ICON_HTML | |
}this.setToolTipContent(null); | |
e=true | |
}this._updateClassName(); | |
if(this._validationCallback){this._validationCallback.run(this,e,c) | |
}return d | |
}; | |
DwtInputField.prototype._focusByMouseUpEvent=function(){if(this.getEnabled()){this._hasFocus=true | |
}}; | |
DwtInputField.prototype._replaceElementHook=function(c,d,a,e){d=this.getInputElement(); | |
DwtControl.prototype._replaceElementHook.call(this,c,d,a,e); | |
if(c.id){d.id=c.id | |
}if(c.size){d.size=c.size | |
}if(c.title){this.setHint(c.title) | |
}}; | |
DwtInputField.prototype.__createInputEl=function(h){var c=this._inputField; | |
if(c){for(var f in this._inputEventHandlers){c.removeAttribute(f) | |
}}var e; | |
var g=this._type!=DwtInputField.PASSWORD?"text":"password"; | |
e=document.createElement("INPUT"); | |
e.type=g; | |
this._inputField=e; | |
var d=h?h.size:c.size; | |
var a=h?h.maxLen:c.maxLength; | |
e.autocomplete="off"; | |
if(d){e.size=d | |
}if(a){e.maxLength=a | |
}e.value=(h?h.initialValue:c.value)||""; | |
e.readonly=c?c.readonly:false; | |
if(h&&h.inputId){e.id=h.inputId | |
}if(AjxEnv.supportsPlaceholder&&this._hint){e.placeholder=this._hint | |
}if(this._label){e.setAttribute("aria-label",this._label) | |
}e.onkeyup=DwtInputField._keyUpHdlr; | |
e.onkeydown=DwtInputField._keyDownHdlr; | |
this._makeFocusable(e); | |
for(var f in this._inputEventHandlers){e[f]=this._inputEventHandlers[f] | |
}return e | |
}; | |
DwtInputField.prototype._stateChanged=function(a){this.getInputElement().disabled=!this.getEnabled(); | |
this._validateInput(this.getValue()) | |
}; | |
DwtInputField.prototype.disableFocusHdlr=function(){this._inputField.onfocus=null | |
}; | |
DwtInputField.prototype.enableFocusHdlr=function(){this._inputField.onfocus=DwtInputField._focusHdlr | |
}; | |
DwtInputField.prototype.enableKeyDownHdlr=function(){this._inputField.onkeydown=DwtInputField._keyDownHdlr | |
}; | |
DwtInputField.prototype.moveCursorToEnd=function(){Dwt.moveCursorToEnd(this._inputField) | |
} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtBaseDialog")){DwtBaseDialog=function(c){if(arguments.length==0){return | |
}c=Dwt.getParams(arguments,DwtBaseDialog.PARAMS); | |
var a=c.parent; | |
if(!(a instanceof DwtShell)){throw new DwtException("DwtBaseDialog parent must be a DwtShell",DwtException.INVALIDPARENT,"DwtDialog") | |
}c.className=c.className||"DwtBaseDialog"; | |
c.posStyle=DwtControl.ABSOLUTE_STYLE; | |
c.isFocusable=false; | |
this._title=c.title||""; | |
DwtComposite.call(this,c); | |
this._disposeOnPopDown=c.disposeOnPopDown||false; | |
this._shell=a; | |
this._zIndex=c.zIndex||Dwt.Z_DIALOG; | |
this._mode=c.mode||DwtBaseDialog.MODAL; | |
this._loc=new DwtPoint(); | |
if(c.loc){this._loc.x=c.loc.x; | |
this._loc.y=c.loc.y | |
}else{this._loc.x=this._loc.y=Dwt.LOC_NOWHERE | |
}this._tabGroup=new DwtTabGroup(this.toString()); | |
this._dragHandleId=c.dragHandleId||this._htmlElId+"_handle"; | |
this._createHtml(); | |
this._initializeDragging(this._dragHandleId); | |
if(c.view){this.setView(c.view) | |
}this.setZIndex(Dwt.Z_HIDDEN); | |
this.setVisible(true); | |
this._position(DwtBaseDialog.__nowhereLoc); | |
this._propagateEvent[DwtEvent.ONMOUSEUP]=true; | |
this.shellResizeHandler=this._resizeHdlr.bind(this) | |
}; | |
DwtBaseDialog.PARAMS=["parent","className","title","zIndex","mode","loc","view","dragHandleId","id"]; | |
DwtBaseDialog.prototype=new DwtComposite; | |
DwtBaseDialog.prototype.constructor=DwtBaseDialog; | |
DwtBaseDialog.prototype.toString=function(){return"DwtBaseDialog" | |
}; | |
DwtBaseDialog.prototype.isDwtBaseDialog=true; | |
DwtBaseDialog.prototype.role="dialog"; | |
DwtBaseDialog.prototype.isFocusable=true; | |
DwtBaseDialog.MODELESS=1; | |
DwtBaseDialog.MODAL=2; | |
DwtBaseDialog.__nowhereLoc=new DwtPoint(Dwt.LOC_NOWHERE,Dwt.LOC_NOWHERE); | |
DwtBaseDialog.prototype.TEMPLATE="dwt.Widgets#DwtBaseDialog"; | |
DwtBaseDialog.prototype.CONTROLS_TEMPLATE=null; | |
DwtBaseDialog.prototype.addPopupListener=function(a){this.addListener(DwtEvent.POPUP,a) | |
}; | |
DwtBaseDialog.prototype.removePopupListener=function(a){this.removeListener(DwtEvent.POPUP,a) | |
}; | |
DwtBaseDialog.prototype.addPopdownListener=function(a){this.addListener(DwtEvent.POPDOWN,a) | |
}; | |
DwtBaseDialog.prototype.removePopdownListener=function(a){this.removeListener(DwtEvent.POPDOWN,a) | |
}; | |
DwtBaseDialog.prototype.popup=function(c){if(this._poppedUp){return | |
}this.cleanup(true); | |
var a=this._zIndex; | |
if(this._mode==DwtBaseDialog.MODAL){a=this._setModalEffect(a) | |
}this._shell._veilOverlay.activeDialogs.push(this); | |
this.setVisible(true); | |
if(c){this._loc.x=c.x; | |
this._loc.y=c.y | |
}this._position(c); | |
this._resetTabFocus(); | |
this.setZIndex(a); | |
this._poppedUp=true; | |
var d=this._shell.getKeyboardMgr(); | |
d.pushTabGroup(this._tabGroup); | |
d.pushDefaultHandler(this); | |
DwtShell.getShell().addListener(DwtEvent.CONTROL,this.shellResizeHandler); | |
this.notifyListeners(DwtEvent.POPUP,this) | |
}; | |
DwtBaseDialog.prototype._resetTabFocus=function(){this._tabGroup.resetFocusMember(true) | |
}; | |
DwtBaseDialog.prototype.focus=function(){if(this.isListenerRegistered(DwtEvent.ONFOCUS)){this.notifyListeners(DwtEvent.ONFOCUS) | |
}else{if(this._focusElementId){var a=document.getElementById(this._focusElementId); | |
if(a){a.focus(); | |
return a | |
}}}}; | |
DwtBaseDialog.prototype.isPoppedUp=function(){return this._poppedUp | |
}; | |
DwtBaseDialog.prototype.popdown=function(){if(this._poppedUp){this._poppedUp=false; | |
this.cleanup(false); | |
var a=this._zIndex; | |
this.setZIndex(Dwt.Z_HIDDEN); | |
this.setVisible(false); | |
this._position(DwtBaseDialog.__nowhereLoc); | |
if(this._mode==DwtBaseDialog.MODAL){this._undoModality(a) | |
}else{this._shell._veilOverlay.activeDialogs.pop() | |
}if(this._disposeOnPopDown===true){this.dispose() | |
}var c=this._shell.getKeyboardMgr(); | |
c.popTabGroup(this._tabGroup); | |
c.popDefaultHandler(); | |
DwtShell.getShell().removeListener(DwtEvent.CONTROL,this.shellResizeHandler); | |
this.notifyListeners(DwtEvent.POPDOWN,this) | |
}}; | |
DwtBaseDialog.prototype.setView=function(a){this.reset(); | |
if(a){this._getContentDiv().appendChild(a.getHtmlElement()) | |
}}; | |
DwtBaseDialog.prototype.reset=function(){this._loc.x=this._loc.y=Dwt.LOC_NOWHERE | |
}; | |
DwtBaseDialog.prototype.cleanup=function(c){var e=this._getInputFields(); | |
if(e){var a=e.length; | |
for(var d=0; | |
d<a; | |
d++){e[d].disabled=!c; | |
if(c){e[d].value="" | |
}}}}; | |
DwtBaseDialog.prototype.setTitle=function(a){if(this._titleEl){this._titleEl.innerHTML=a||"" | |
}this._title=a | |
}; | |
DwtBaseDialog.prototype.setContent=function(c){var a=this._getContentDiv(); | |
if(a){a.innerHTML=c||"" | |
}}; | |
DwtBaseDialog.prototype._getContentDiv=function(){return this._contentEl | |
}; | |
DwtBaseDialog.prototype.addEnterListener=function(a){this.addListener(DwtEvent.ENTER,a) | |
}; | |
DwtBaseDialog.getActiveDialog=function(){var c=null; | |
var d=DwtShell.getShell(window); | |
if(d){var a=d._veilOverlay.activeDialogs.length; | |
if(a>0){c=d._veilOverlay.activeDialogs[a-1] | |
}}return c | |
}; | |
DwtBaseDialog.prototype.getTabGroupMember=function(){return this._tabGroup | |
}; | |
DwtBaseDialog.prototype._initializeDragging=function(i){var h=document.getElementById(i); | |
if(h){var g=DwtControl.fromElementId(window._dwtShellId); | |
if(g){var a=Dwt.getSize(g.getHtmlElement()); | |
var d=document.getElementById(this._htmlElId); | |
var j=this.getSize(); | |
var f=new AjxCallback(this,this._dragEnd); | |
var e=new AjxCallback(this,this._duringDrag); | |
var c=new AjxCallback(this,this._dragStart); | |
DwtDraggable.init(h,d,0,document.body.offsetWidth-10,0,document.body.offsetHeight-10,c,e,f) | |
}}}; | |
DwtBaseDialog.prototype._getContentHtml=function(){return"" | |
}; | |
DwtBaseDialog.prototype._createHtml=function(a){var c={id:this._htmlElId}; | |
this._createHtmlFromTemplate(a||this.TEMPLATE,c) | |
}; | |
DwtBaseDialog.prototype._createHtmlFromTemplate=function(a,c){c.dragId=this._dragHandleId; | |
c.title=this._title; | |
c.icon=""; | |
c.closeIcon1=""; | |
c.closeIcon2=""; | |
c.controlsTemplateId=this.CONTROLS_TEMPLATE; | |
DwtComposite.prototype._createHtmlFromTemplate.call(this,a,c); | |
this._titleBarEl=document.getElementById(c.id+"_titlebar"); | |
this._titleEl=document.getElementById(c.id+"_title"); | |
this._contentEl=document.getElementById(c.id+"_content"); | |
if(this._titleEl){this.setAttribute("aria-labelledby",this._titleEl.id); | |
this._titleEl.setAttribute("role","heading"); | |
this._titleEl.setAttribute("aria-level","2") | |
}this.setContent(this._getContentHtml()) | |
}; | |
DwtBaseDialog.prototype._setModalEffect=function(){var d=this._shell._veilOverlay.dialogZ; | |
var e=null; | |
var c,a; | |
if(d.length){e=d[d.length-1] | |
}if(e){c=e+2; | |
a=e+1 | |
}else{c=this._zIndex; | |
a=Dwt.Z_VEIL | |
}this._shell._veilOverlay.veilZ.push(a); | |
this._shell._veilOverlay.dialogZ.push(c); | |
Dwt.setZIndex(this._shell._veilOverlay,a); | |
return c | |
}; | |
DwtBaseDialog.prototype._undoModality=function(d){var a=this._shell._veilOverlay.veilZ; | |
a.pop(); | |
var c=a[a.length-1]; | |
Dwt.setZIndex(this._shell._veilOverlay,c); | |
this._shell._veilOverlay.dialogZ.pop(); | |
this._shell._veilOverlay.activeDialogs.pop(); | |
if(this._shell._veilOverlay.activeDialogs.length>0){this._shell._veilOverlay.activeDialogs[0].focus() | |
}}; | |
DwtBaseDialog.prototype._getInputFields=function(){}; | |
DwtBaseDialog.prototype._resizeHdlr=function(a){if(this._loc.x===Dwt.LOC_NOWHERE&&this._loc.y===Dwt.LOC_NOWHERE){this._position() | |
}}; | |
DwtBaseDialog.prototype._dragStart=function(a,e){if(AjxEnv.isNav&&!this._ignoreSetDragBoundries){this._currSize=this.getSize(); | |
var d=DwtControl.fromElementId(window._dwtShellId); | |
if(d){var c=Dwt.getSize(d.getHtmlElement()); | |
DwtDraggable.setDragBoundaries(DwtDraggable.dragEl,0,c.x-this._currSize.x,0,c.y-this._currSize.y) | |
}}}; | |
DwtBaseDialog.prototype._dragEnd=function(a,c){this._loc.x=a; | |
this._loc.y=c | |
}; | |
DwtBaseDialog.prototype._duringDrag=function(a,c){}; | |
DwtBaseDialog.prototype._doesContainElement=function(a){return Dwt.contains(this.getHtmlElement(),a) | |
} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtDialog")){DwtDialog=function(c){if(arguments.length==0){return | |
}c=Dwt.getParams(arguments,DwtDialog.PARAMS); | |
c.className=c.className||"DwtDialog"; | |
this._title=c.title=c.title||""; | |
var d=c.standardButtons; | |
var k=c.extraButtons; | |
if(!d){d=[DwtDialog.OK_BUTTON,DwtDialog.CANCEL_BUTTON] | |
}else{if(d==DwtDialog.NO_BUTTONS){d=null | |
}else{if(d&&!d.length){d=[d] | |
}}}this._buttonList=[]; | |
var m={}; | |
m[DwtDialog.ALIGN_LEFT]=[]; | |
m[DwtDialog.ALIGN_CENTER]=[]; | |
m[DwtDialog.ALIGN_RIGHT]=[]; | |
if(d||k){this._buttonDesc={}; | |
if(d&&d.length){this._initialEnterButtonId=this._enterButtonId=d[0]; | |
for(var e=0; | |
e<d.length; | |
e++){var j=d[e]; | |
this._buttonList.push(j); | |
var h=DwtDialog.ALIGN[j]; | |
if(h){m[h].push(j) | |
}this._buttonDesc[j]=new DwtDialog_ButtonDescriptor(j,AjxMsg[DwtDialog.MSG_KEY[j]],h) | |
}this._resetCallbacks() | |
}if(k&&k.length){if(!this._enterButtonId){this._initialEnterButtonId=this._enterButtonId=k[0] | |
}for(var e=0; | |
e<k.length; | |
e++){var j=k[e].id; | |
this._buttonList.push(j); | |
var h=k[e].align; | |
if(h){m[h].push(j) | |
}this._buttonDesc[j]=k[e] | |
}}}this._buttonElementId={}; | |
for(var e=0; | |
e<this._buttonList.length; | |
e++){var j=this._buttonList[e]; | |
this._buttonElementId[j]=this._buttonDesc[j].label?this._buttonDesc[j].label+"_"+Dwt.getNextId():Dwt.getNextId() | |
}DwtBaseDialog.call(this,c); | |
this._button={}; | |
for(var e=0; | |
e<this._buttonList.length; | |
e++){var j=this._buttonList[e]; | |
var l=this._button[j]=new DwtButton({parent:this,id:this._htmlElId+"_button"+j}); | |
l.setText(this._buttonDesc[j].label); | |
l.buttonId=j; | |
l.addSelectionListener(new AjxListener(this,this._buttonListener)); | |
var a=document.getElementById(this._buttonElementId[j]); | |
if(a){a.appendChild(l.getHtmlElement()) | |
}}var g=m[DwtDialog.ALIGN_LEFT].concat(m[DwtDialog.ALIGN_CENTER],m[DwtDialog.ALIGN_RIGHT]); | |
for(var e=0; | |
e<g.length; | |
e++){var f=this._button[g[e]]; | |
this._tabGroup.addMember(f) | |
}}; | |
DwtDialog.PARAMS=["parent","className","title","standardButtons","extraButtons","zIndex","mode","loc","id"]; | |
DwtDialog.prototype=new DwtBaseDialog; | |
DwtDialog.prototype.constructor=DwtDialog; | |
DwtDialog.prototype.isDwtDialog=true; | |
DwtDialog.prototype.toString=function(){return"DwtDialog" | |
}; | |
DwtDialog.ALIGN_LEFT=1; | |
DwtDialog.ALIGN_RIGHT=2; | |
DwtDialog.ALIGN_CENTER=3; | |
DwtDialog.CANCEL_BUTTON=1; | |
DwtDialog.OK_BUTTON=2; | |
DwtDialog.DISMISS_BUTTON=3; | |
DwtDialog.NO_BUTTON=4; | |
DwtDialog.YES_BUTTON=5; | |
DwtDialog.LAST_BUTTON=5; | |
DwtDialog.NO_BUTTONS=256; | |
DwtDialog.ALL_BUTTONS=[DwtDialog.CANCEL_BUTTON,DwtDialog.OK_BUTTON,DwtDialog.DISMISS_BUTTON,DwtDialog.NO_BUTTON,DwtDialog.YES_BUTTON]; | |
DwtDialog.MSG_KEY={}; | |
DwtDialog.MSG_KEY[DwtDialog.CANCEL_BUTTON]="cancel"; | |
DwtDialog.MSG_KEY[DwtDialog.OK_BUTTON]="ok"; | |
DwtDialog.MSG_KEY[DwtDialog.DISMISS_BUTTON]="close"; | |
DwtDialog.MSG_KEY[DwtDialog.NO_BUTTON]="no"; | |
DwtDialog.MSG_KEY[DwtDialog.YES_BUTTON]="yes"; | |
DwtDialog.ALIGN={}; | |
DwtDialog.ALIGN[DwtDialog.CANCEL_BUTTON]=DwtDialog.ALIGN_RIGHT; | |
DwtDialog.ALIGN[DwtDialog.OK_BUTTON]=DwtDialog.ALIGN_RIGHT; | |
DwtDialog.ALIGN[DwtDialog.DISMISS_BUTTON]=DwtDialog.ALIGN_RIGHT; | |
DwtDialog.ALIGN[DwtDialog.NO_BUTTON]=DwtDialog.ALIGN_RIGHT; | |
DwtDialog.ALIGN[DwtDialog.YES_BUTTON]=DwtDialog.ALIGN_RIGHT; | |
DwtDialog.MODELESS=DwtBaseDialog.MODELESS; | |
DwtDialog.MODAL=DwtBaseDialog.MODAL; | |
DwtDialog.prototype.CONTROLS_TEMPLATE="dwt.Widgets#DwtDialogControls"; | |
DwtDialog.prototype.popdown=function(){DwtBaseDialog.prototype.popdown.call(this); | |
if(!this._disposeOnPopDown){this.resetButtonStates() | |
}}; | |
DwtDialog.prototype.popup=function(a,c){this._focusButtonId=c; | |
DwtBaseDialog.prototype.popup.call(this,a) | |
}; | |
DwtDialog.prototype._resetTabFocus=function(){if(this._focusButtonId){var a=this.getButton(this._focusButtonId); | |
this._tabGroup.setFocusMember(a,true) | |
}else{DwtBaseDialog.prototype._resetTabFocus.call(this) | |
}}; | |
DwtDialog.prototype.reset=function(){this._resetCallbacks(); | |
this.resetButtonStates(); | |
DwtBaseDialog.prototype.reset.call(this) | |
}; | |
DwtDialog.prototype.resetButtonStates=function(){for(b in this._button){this._button[b].setEnabled(true); | |
this._button[b].setHovered(false) | |
}this.associateEnterWithButton(this._initialEnterButtonId) | |
}; | |
DwtDialog.prototype.getButton=function(a){return this._button[a] | |
}; | |
DwtDialog.prototype.setButtonEnabled=function(c,a){if(!this._button[c]){return | |
}this._button[c].setEnabled(a) | |
}; | |
DwtDialog.prototype.setButtonVisible=function(a,c){if(!this._button[a]){return | |
}this._button[a].setVisible(c) | |
}; | |
DwtDialog.prototype.getButtonEnabled=function(a){return this._button[a].getEnabled() | |
}; | |
DwtDialog.prototype.registerCallback=function(c,d,e,a){this._buttonDesc[c].callback=(d&&(d.isAjxCallback||(!e&&!a)))?d:(new AjxCallback(e,d,a)) | |
}; | |
DwtDialog.prototype.unregisterCallback=function(a){this._buttonDesc[a].callback=null | |
}; | |
DwtDialog.prototype.setButtonListener=function(a,c){this._button[a].removeSelectionListeners(); | |
this._button[a].addSelectionListener(c) | |
}; | |
DwtDialog.prototype.setEnterListener=function(a){this.removeAllListeners(DwtEvent.ENTER); | |
this.addEnterListener(a) | |
}; | |
DwtDialog.prototype.associateEnterWithButton=function(a){this._enterButtonId=a | |
}; | |
DwtDialog.prototype.getKeyMapName=function(){return DwtKeyMap.MAP_DIALOG | |
}; | |
DwtDialog.prototype.handleKeyAction=function(a,c){switch(a){case DwtKeyMap.ENTER:this.notifyListeners(DwtEvent.ENTER,c); | |
break; | |
case DwtKeyMap.CANCEL:var d=false; | |
d=d||this._runCallbackForButtonId(DwtDialog.CANCEL_BUTTON); | |
d=d||this._runCallbackForButtonId(DwtDialog.NO_BUTTON); | |
d=d||this._runCallbackForButtonId(DwtDialog.DISMISS_BUTTON); | |
if(!d&&this._buttonDesc[DwtDialog.OK_BUTTON]&&this._buttonList.length==1){d=d||this._runCallbackForButtonId(DwtDialog.OK_BUTTON) | |
}this.popdown(); | |
return true; | |
case DwtKeyMap.YES:if(this._buttonDesc[DwtDialog.YES_BUTTON]){this._runCallbackForButtonId(DwtDialog.YES_BUTTON) | |
}break; | |
case DwtKeyMap.NO:if(this._buttonDesc[DwtDialog.NO_BUTTON]){this._runCallbackForButtonId(DwtDialog.NO_BUTTON) | |
}break; | |
default:return false | |
}return true | |
}; | |
DwtDialog.prototype._createHtmlFromTemplate=function(d,f){DwtBaseDialog.prototype._createHtmlFromTemplate.call(this,d,f); | |
var e=f.id+"_focus"; | |
if(document.getElementById(e)){this._focusElementId=e | |
}this._buttonsEl=document.getElementById(f.id+"_buttons"); | |
if(this._buttonsEl){var c=[]; | |
var a=0; | |
this._addButtonsHtml(c,a); | |
this._buttonsEl.innerHTML=c.join("") | |
}}; | |
DwtDialog.prototype._getButtonsContainerStartTemplate=function(){return"<table role='presentation' width='100%'><tr>" | |
}; | |
DwtDialog.prototype._getButtonsAlignStartTemplate=function(){return"<td align=\"{0}\"><table role='presentation'><tr>" | |
}; | |
DwtDialog.prototype._getButtonsAlignEndTemplate=function(){return"</tr></table></td>" | |
}; | |
DwtDialog.prototype._getButtonsCellTemplate=function(){return'<td id="{0}"></td>' | |
}; | |
DwtDialog.prototype._getButtonsContainerEndTemplate=function(){return"</tr></table>" | |
}; | |
DwtDialog.prototype._addButtonsHtml=function(g,c){if(this._buttonList&&this._buttonList.length){var d=new Array(); | |
var a=new Array(); | |
var f=new Array(); | |
for(var e=0; | |
e<this._buttonList.length; | |
e++){var h=this._buttonList[e]; | |
switch(this._buttonDesc[h].align){case DwtDialog.ALIGN_RIGHT:a.push(h); | |
break; | |
case DwtDialog.ALIGN_LEFT:d.push(h); | |
break; | |
case DwtDialog.ALIGN_CENTER:f.push(h); | |
break | |
}}g[c++]=this._getButtonsContainerStartTemplate(); | |
if(d.length){g[c++]=AjxMessageFormat.format(this._getButtonsAlignStartTemplate(),["left"]); | |
for(var e=0; | |
e<d.length; | |
e++){var h=d[e]; | |
var j=this._buttonDesc[h].cellTemplate?this._buttonDesc[h].cellTemplate:this._getButtonsCellTemplate(); | |
g[c++]=AjxMessageFormat.format(j,[this._buttonElementId[h]]) | |
}g[c++]=this._getButtonsAlignEndTemplate() | |
}if(f.length){g[c++]=AjxMessageFormat.format(this._getButtonsAlignStartTemplate(),["center"]); | |
for(var e=0; | |
e<f.length; | |
e++){var h=f[e]; | |
var j=this._buttonDesc[h].cellTemplate?this._buttonDesc[h].cellTemplate:this._getButtonsCellTemplate(); | |
g[c++]=AjxMessageFormat.format(j,[this._buttonElementId[h]]) | |
}g[c++]=this._getButtonsAlignEndTemplate() | |
}if(a.length){g[c++]=AjxMessageFormat.format(this._getButtonsAlignStartTemplate(),["right"]); | |
for(var e=0; | |
e<a.length; | |
e++){var h=a[e]; | |
var j=this._buttonDesc[h].cellTemplate?this._buttonDesc[h].cellTemplate:this._getButtonsCellTemplate(); | |
g[c++]=AjxMessageFormat.format(j,[this._buttonElementId[h]]) | |
}g[c++]=this._getButtonsAlignEndTemplate() | |
}g[c++]=this._getButtonsContainerEndTemplate() | |
}return c | |
}; | |
DwtDialog.prototype._buttonListener=function(d,a){var e=DwtControl.getTargetControl(d); | |
var c=(e&&e.buttonId)||this._enterButtonId; | |
if(c){this._runCallbackForButtonId(c,a) | |
}}; | |
DwtDialog.prototype._runCallbackForButtonId=function(e,a){var c=this._buttonDesc[e]; | |
var d=c&&c.callback; | |
if(!d){return false | |
}a=(a instanceof Array)?a:[a]; | |
d.run.apply(d,a); | |
return true | |
}; | |
DwtDialog.prototype._runEnterCallback=function(a){if(this._enterButtonId&&this.getButtonEnabled(this._enterButtonId)){this._runCallbackForButtonId(this._enterButtonId,a) | |
}}; | |
DwtDialog.prototype._resetCallbacks=function(){if(this._buttonDesc){for(var a=0; | |
a<DwtDialog.ALL_BUTTONS.length; | |
a++){var c=DwtDialog.ALL_BUTTONS[a]; | |
if(this._buttonDesc[c]){this._buttonDesc[c].callback=new AjxCallback(this,this.popdown) | |
}}}}; | |
DwtDialog_ButtonDescriptor=function(f,a,e,d,c){this.id=f; | |
this.label=a; | |
this.align=e; | |
this.callback=d; | |
this.cellTemplate=c | |
} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtMessageDialog")){DwtMessageDialog=function(c){if(arguments.length==0){return | |
}c=Dwt.getParams(arguments,DwtMessageDialog.PARAMS); | |
this._msgCellId=Dwt.getNextId("MessageDialog_"); | |
c.standardButtons=c.buttons||[DwtDialog.OK_BUTTON]; | |
if(c.helpText){var a=new DwtDialog_ButtonDescriptor(DwtMessageDialog.HELP_BUTTON,c.helpText,DwtDialog.ALIGN_LEFT); | |
c.extraButtons=c.extraButtons||[]; | |
c.extraButtons.push(a); | |
DwtDialog.call(this,c); | |
this.registerCallback(DwtMessageDialog.HELP_BUTTON,function(){ZmZimbraMail.helpLinkCallback(this._helpURL) | |
},this) | |
}else{DwtDialog.call(this,c) | |
}this.setContent(this._contentHtml()); | |
this._msgCell=document.getElementById(this._msgCellId); | |
this.addEnterListener(new AjxListener(this,this._enterListener)); | |
this._setAllowSelection(); | |
if(AjxEnv.isSafari){this.setAttribute("aria-labelledby",this._titleEl.id+" "+this._msgCellId) | |
}else{this.setAttribute("aria-describedby",this._msgCellId) | |
}}; | |
DwtMessageDialog.PARAMS=["parent","className","buttons","extraButtons","id"]; | |
DwtMessageDialog.prototype=new DwtDialog; | |
DwtMessageDialog.prototype.constructor=DwtMessageDialog; | |
DwtMessageDialog.prototype.isDwtMessageDialog=true; | |
DwtMessageDialog.prototype.role="alertdialog"; | |
DwtMessageDialog.prototype.toString=function(){return"DwtMessageDialog" | |
}; | |
DwtMessageDialog.CRITICAL_STYLE=1; | |
DwtMessageDialog.INFO_STYLE=2; | |
DwtMessageDialog.WARNING_STYLE=3; | |
DwtMessageDialog.PLAIN_STYLE=4; | |
DwtMessageDialog.TITLE={}; | |
DwtMessageDialog.TITLE[DwtMessageDialog.CRITICAL_STYLE]=AjxMsg.criticalMsg; | |
DwtMessageDialog.TITLE[DwtMessageDialog.INFO_STYLE]=AjxMsg.infoMsg; | |
DwtMessageDialog.TITLE[DwtMessageDialog.WARNING_STYLE]=AjxMsg.warningMsg; | |
DwtMessageDialog.TITLE[DwtMessageDialog.PLAIN_STYLE]=AjxMsg.infoMsg; | |
DwtMessageDialog.ICON={}; | |
DwtMessageDialog.ICON[DwtMessageDialog.CRITICAL_STYLE]="Critical_32"; | |
DwtMessageDialog.ICON[DwtMessageDialog.INFO_STYLE]="Information_32"; | |
DwtMessageDialog.ICON[DwtMessageDialog.WARNING_STYLE]="Warning_32"; | |
DwtMessageDialog.HELP_BUTTON="Help"; | |
DwtMessageDialog.prototype.toString=function(){return"DwtMessageDialog" | |
}; | |
DwtMessageDialog.prototype.setMessage=function(d,e,f){this._message=d||""; | |
this._style=e||this._getDefaultStyle(); | |
this.setTitle(f||DwtMessageDialog.TITLE[this._style]); | |
if(d){var c=[]; | |
var a=0; | |
c[a++]="<table role='presentation' cellspacing=0 cellpadding=0 border=0 width=100% height=100%><tr>"; | |
if(DwtMessageDialog.ICON[this._style]){c[a++]="<td valign='top'>"; | |
c[a++]=AjxImg.getImageHtml({imageName:DwtMessageDialog.ICON[this._style],attrStr:"id='"+this._msgCellId+"_Image''",altText:DwtMessageDialog.TITLE[this._style]}); | |
c[a++]="</td>" | |
}c[a++]="<td class='DwtMsgArea' id='"+this._msgCellId+"_Msg'>"; | |
c[a++]=d; | |
c[a++]="</td></tr></table>"; | |
this._msgCell.innerHTML=c.join("") | |
}else{this._msgCell.innerHTML="" | |
}}; | |
DwtMessageDialog.prototype.setHelpURL=function(a){this._helpURL=a | |
}; | |
DwtMessageDialog.prototype.setSize=function(c,a){var d=document.getElementById(this._msgCellId); | |
if(d&&(c||a)){Dwt.setSize(d,c,a) | |
}}; | |
DwtMessageDialog.prototype._getDefaultStyle=function(){return DwtMessageDialog.INFO_STYLE | |
}; | |
DwtMessageDialog.prototype.reset=function(){this._msgCell.innerHTML=""; | |
this._helpURL=""; | |
DwtDialog.prototype.reset.call(this) | |
}; | |
DwtMessageDialog.prototype.handleKeyAction=function(a,c){return DwtDialog.prototype.handleKeyAction.call(this,a,c) | |
}; | |
DwtMessageDialog.prototype._contentHtml=function(){return"<div id='"+this._msgCellId+"' class='DwtMsgDialog'></div>" | |
}; | |
DwtMessageDialog.prototype._enterListener=function(a){this._runEnterCallback() | |
} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtOptionDialog")){DwtOptionDialog=function(g){if(arguments.length==0){return | |
}g.buttons=g.buttons||[DwtDialog.OK_BUTTON,DwtDialog.CANCEL_BUTTON]; | |
DwtMessageDialog.call(this,g); | |
var a=g.options||[]; | |
this._options=[]; | |
this._selectedIdx=0; | |
this._buttonContainer=document.createElement("FIELDSET"); | |
this._buttonContainer.setAttribute("role","radiogroup"); | |
this._getContentDiv().appendChild(this._buttonContainer); | |
for(var d=0; | |
d<a.length; | |
d++){var e=AjxUtil.hashCopy(a[d]); | |
e.index=d; | |
var f=(d===0); | |
var c=e.button=new DwtRadioButton({parent:this,parentElement:this._buttonContainer,id:[this.getHTMLElId(),name,"button"].join("_"),name:e.name,value:e.value||e.name,checked:f}); | |
if(e.text){c.setText(e.text) | |
}c.getInputElement().setAttribute("aria-setsize",a.length); | |
c.getInputElement().setAttribute("aria-posinset",d+1); | |
c.addSelectionListener(this._selectionListener.bind(this,d)); | |
this._options.push(e) | |
}if(g.message){this.setMessage(g.message,null,g.title) | |
}else{if(g.title){this.setTitle(g.title) | |
}}}; | |
DwtOptionDialog.prototype=new DwtMessageDialog; | |
DwtOptionDialog.prototype.constructor=DwtOptionDialog; | |
DwtOptionDialog.prototype.isDwtOptionDialog=true; | |
DwtOptionDialog.prototype.toString=function(){return"DwtOptionDialog" | |
}; | |
DwtOptionDialog.prototype.getKeyMapName=function(){return DwtKeyMap.MAP_OPTION_DIALOG | |
}; | |
DwtOptionDialog.prototype._getDefaultStyle=function(){return DwtMessageDialog.PLAIN_STYLE | |
}; | |
DwtOptionDialog.prototype._updateSelection=function(a,c){if(!AjxUtil.isNumber(a)||a<0||a>=this._options.length){return false | |
}this._selectedIdx=a; | |
for(var d=0; | |
d<this._options.length; | |
d++){this._options[d].button.setSelected(d===a) | |
}if(c){this._options[a].button.focus() | |
}return true | |
}; | |
DwtOptionDialog.prototype._getOptionByName=function(a){for(var c=0; | |
c<this._options.length; | |
c++){if(this._options[c].name===a){return this._options[c] | |
}}return null | |
}; | |
DwtOptionDialog.prototype._selectionListener=function(a,c){if(!c.detail){return | |
}this._updateSelection(a) | |
}; | |
DwtOptionDialog.prototype.getSelection=function(){var a=this._options[this._selectedIdx]; | |
return a.button?a.button.getValue():null | |
}; | |
DwtOptionDialog.prototype.setSelection=function(a){var c=this._getOptionByName(a); | |
this._updateSelection(c&&c.index) | |
}; | |
DwtOptionDialog.prototype.getButton=function(a){var c=this._getOptionByName(a); | |
return c&&c.button | |
}; | |
DwtOptionDialog.prototype.handleKeyAction=function(a,c){switch(a){case DwtKeyMap.NEXT:return this._updateSelection(this._selectedIdx+1,true); | |
case DwtKeyMap.PREV:return this._updateSelection(this._selectedIdx-1,true); | |
default:return DwtMessageDialog.prototype.handleKeyAction.apply(this,arguments) | |
}}; | |
DwtOptionDialog.prototype.popup=function(a){DwtMessageDialog.prototype.popup.call(this,a); | |
this._updateSelection(0,true) | |
} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtToolBar")){DwtToolBar=function(c){if(arguments.length==0){return | |
}c=Dwt.getParams(arguments,DwtToolBar.PARAMS); | |
c.className=c.className||"ZToolbar"; | |
DwtComposite.call(this,c); | |
if(c.parent instanceof DwtToolBar){this._hasSetMouseEvents=c.parent._hasSetMouseEvents | |
}if(c.handleMouse!==false&&!this._hasSetMouseEvents){var a=[DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEUP,DwtEvent.ONCLICK]; | |
if(!AjxEnv.isIE){a.push(DwtEvent.ONMOUSEOVER,DwtEvent.ONMOUSEOUT) | |
}this._setEventHdlrs(a); | |
this._hasSetMouseEvents=true | |
}this._style=c.style||DwtToolBar.HORIZ_STYLE; | |
this._createHtml(); | |
this._numFillers=0; | |
this._curFocusIndex=0; | |
this.tabGroupMember=this; | |
this._keyMapName=(this._style==DwtToolBar.HORIZ_STYLE)?DwtKeyMap.MAP_TOOLBAR_HORIZ:DwtKeyMap.MAP_TOOLBAR_VERT | |
}; | |
DwtToolBar.PARAMS=["parent","className","posStyle","style","index","id"]; | |
DwtToolBar.prototype=new DwtComposite; | |
DwtToolBar.prototype.constructor=DwtToolBar; | |
DwtToolBar.prototype.role="toolbar"; | |
DwtToolBar.prototype.isDwtToolBar=true; | |
DwtToolBar.prototype.toString=function(){return"DwtToolBar" | |
}; | |
DwtToolBar.HORIZ_STYLE=1; | |
DwtToolBar.VERT_STYLE=2; | |
DwtToolBar.FIRST_ITEM="ZFirstItem"; | |
DwtToolBar.LAST_ITEM="ZLastItem"; | |
DwtToolBar.SELECTED_NEXT=DwtControl.SELECTED+"Next"; | |
DwtToolBar.SELECTED_PREV=DwtControl.SELECTED+"Prev"; | |
DwtToolBar._NEXT_PREV_RE=new RegExp("\\b"+[DwtToolBar.SELECTED_NEXT,DwtToolBar.SELECTED_PREV].join("|")+"\\b","g"); | |
DwtToolBar.prototype.TEMPLATE="dwt.Widgets#ZToolbar"; | |
DwtToolBar.prototype.ITEM_TEMPLATE="dwt.Widgets#ZToolbarItem"; | |
DwtToolBar.prototype.SEPARATOR_TEMPLATE="dwt.Widgets#ZToolbarSeparator"; | |
DwtToolBar.prototype.SPACER_TEMPLATE="dwt.Widgets#ZToolbarSpacer"; | |
DwtToolBar.prototype.FILLER_TEMPLATE="dwt.Widgets#ZToolbarFiller"; | |
DwtToolBar.__itemCount=0; | |
DwtToolBar.prototype.dispose=function(){DwtComposite.prototype.dispose.call(this); | |
this._itemsEl=null; | |
this._prefixEl=null; | |
this._suffixEl=null | |
}; | |
DwtToolBar.prototype.getItem=function(a){return this._children.get(a) | |
}; | |
DwtToolBar.prototype.getItemCount=function(){return this._children.size() | |
}; | |
DwtToolBar.prototype.getItems=function(){return this._children.getArray() | |
}; | |
DwtToolBar.prototype.addSpacer=function(d,c){var a=new DwtToolBarSpacer({parent:this,index:c,className:d,toolbarItemTemplate:this.SPACER_TEMPLATE,id:this._htmlElId+"_spacer"+DwtToolBar.__itemCount}); | |
return a | |
}; | |
DwtToolBar.prototype.addSeparator=function(d,c){var a=new DwtToolBarSpacer({parent:this,index:c,className:d,toolbarItemTemplate:this.SEPARATOR_TEMPLATE,id:this._htmlElId+"_separator"+DwtToolBar.__itemCount}); | |
return a | |
}; | |
DwtToolBar.prototype.addFiller=function(d,a){var c=new DwtToolBarSpacer({parent:this,index:a,className:d,toolbarItemTemplate:this.FILLER_TEMPLATE,id:this._htmlElId+"_filler"+DwtToolBar.__itemCount}); | |
return c | |
}; | |
DwtToolBar.prototype.addChild=function(f,a){var d=this.getChild(a); | |
var e=d?d.getHtmlElement().parentNode:this._suffixEl; | |
DwtComposite.prototype.addChild.apply(this,arguments); | |
if(this._itemsEl){var c=this._createItemElement(f.toolbarItemTemplate); | |
this._itemsEl.insertBefore(c,e) | |
}f.reparentHtmlElement(c) | |
}; | |
DwtToolBar.prototype.removeChild=function(c){var a=c.getHtmlElement().parentNode; | |
DwtComposite.prototype.removeChild.apply(this,arguments); | |
if(a&&a.parentNode){a.parentNode.removeChild(a) | |
}}; | |
DwtToolBar.prototype.getKeyMapName=function(){return this._keyMapName | |
}; | |
DwtToolBar.prototype.handleKeyAction=function(f,h){var e=this._curFocusIndex,d=this.getItemCount(),c=h&&h.target&&h.target.nodeName.toLowerCase()==="input"?h.target:null,i=c&&c.selectionStart,a=c&&c.value&&c.value.length; | |
if(d<2){return false | |
}switch(f){case DwtKeyMap.PREV:if(c&&i>0){h.forcePropagate=true; | |
return false | |
}else{if(e>0){this._moveFocus(true,h); | |
return true | |
}}break; | |
case DwtKeyMap.NEXT:if(c&&i<a){h.forcePropagate=true; | |
return false | |
}else{if(e<d-1){this._moveFocus(false); | |
return true | |
}}break; | |
default:var g=this._getCurrentFocusItem(); | |
if(g){return g.handleKeyAction(f,h) | |
}}return true | |
}; | |
DwtToolBar.prototype._createItemId=function(c){c=c||this._htmlElId; | |
var a=[c,"item",++DwtToolBar.__itemCount].join("_"); | |
return a | |
}; | |
DwtToolBar.prototype._createHtml=function(){var a={id:this._htmlElId}; | |
this._createHtmlFromTemplate(this.TEMPLATE,a); | |
this._itemsEl=document.getElementById(a.id+"_items"); | |
this._prefixEl=document.getElementById(a.id+"_prefix"); | |
this._suffixEl=document.getElementById(a.id+"_suffix") | |
}; | |
DwtToolBar.prototype._createItemElement=function(d){d=d||this.ITEM_TEMPLATE; | |
var e={id:this._htmlElId,itemId:this._createItemId()}; | |
var c=AjxTemplate.expand(d,e); | |
var a=AjxStringUtil.calcDIV(); | |
a.innerHTML=c; | |
return a.firstChild.rows[0].cells[0] | |
}; | |
DwtToolBar.prototype.focus=function(a){this._setMenuKey(); | |
a=a||this._getCurrentFocusItem(); | |
if(a&&this._canFocusItem(a)){this._curFocusIndex=this.__getButtonIndex(a); | |
return a.focus() | |
}else{return this._moveFocus(false) | |
}}; | |
DwtToolBar.prototype.blur=function(a){a=a||this._getCurrentFocusItem(); | |
if(a&&a.blur){a.blur() | |
}}; | |
DwtToolBar.prototype._canFocusItem=function(a){if(!a){return false | |
}if(!a.focus){return false | |
}if(a.isDwtToolBarSpacer){return false | |
}if(a.getEnabled&&!a.getEnabled()){return false | |
}if(a.getVisible&&!a.getVisible()){return false | |
}if(a.isDwtText&&!a.getText()){return false | |
}return true | |
}; | |
DwtToolBar.prototype._getCurrentFocusItem=function(){return this.getItem(this._curFocusIndex) | |
}; | |
DwtToolBar.prototype.getEnabled=function(){return this._children.some(function(a){return this._canFocusItem(a) | |
},this) | |
}; | |
DwtToolBar.prototype._moveFocus=function(a){var c=this._curFocusIndex,d=this.getItemCount()-1,e=null,f=false; | |
c=a?c-1:c+1; | |
while(!f&&c>=0&&c<=d){e=this.getItem(c); | |
if(this._canFocusItem(e)){f=true | |
}c=a?c-1:c+1 | |
}if(e&&f){this.blur(); | |
this.focus(e) | |
}return e | |
}; | |
DwtToolBar.prototype._setMenuKey=function(){if(!this._submenuKeySet){var c=this.shell.getKeyboardMgr(); | |
if(c.isEnabled()){var a=c.__keyMapMgr; | |
if(a){if(this._style==DwtToolBar.HORIZ_STYLE){a.removeMapping(DwtKeyMap.MAP_BUTTON,"ArrowRight"); | |
a.setMapping(DwtKeyMap.MAP_BUTTON,"ArrowDown",DwtKeyMap.SUBMENU) | |
}else{a.removeMapping(DwtKeyMap.MAP_BUTTON,"ArrowDown"); | |
a.setMapping(DwtKeyMap.MAP_BUTTON,"ArrowRight",DwtKeyMap.SUBMENU) | |
}a.reloadMap(DwtKeyMap.MAP_BUTTON) | |
}}this._submenuKeySet=true | |
}}; | |
DwtToolBar.prototype._childFocusListener=function(a){this._curFocusIndex=this.__getButtonIndex(a.dwtObj) | |
}; | |
DwtToolBar.prototype.__markPrevNext=function(h,g){var a=this.__getButtonIndex(h); | |
var e=this.getChild(a-1); | |
var c=this.getChild(a+1); | |
if(g){if(e){Dwt.delClass(e.getHtmlElement(),DwtToolBar._NEXT_PREV_RE,DwtToolBar.SELECTED_PREV) | |
}if(c){Dwt.delClass(c.getHtmlElement(),DwtToolBar._NEXT_PREV_RE,DwtToolBar.SELECTED_NEXT) | |
}}else{if(e){Dwt.delClass(e.getHtmlElement(),DwtToolBar._NEXT_PREV_RE) | |
}if(c){Dwt.delClass(c.getHtmlElement(),DwtToolBar._NEXT_PREV_RE) | |
}}var f=this.getChild(0); | |
if(f){Dwt.addClass(f.getHtmlElement(),DwtToolBar.FIRST_ITEM) | |
}var d=this.getChild(this.getItemCount()-1); | |
if(d){Dwt.addClass(d.getHtmlElement(),DwtToolBar.LAST_ITEM) | |
}}; | |
DwtToolBar.prototype.__getButtonIndex=function(d){var c=AjxUtil.isString(d)?DwtControl.fromElementId(d):d; | |
for(var a=0; | |
a<=this.getItemCount()-1; | |
a++){if(c===this.getItem(a)){return a | |
}}return -1 | |
}; | |
DwtToolBarButton=function(a){if(arguments.length==0){return | |
}var a=Dwt.getParams(arguments,DwtToolBarButton.PARAMS); | |
a.className=a.className||"ZToolbarButton"; | |
DwtButton.call(this,a) | |
}; | |
DwtToolBarButton.PARAMS=["parent","style","className","posStyle","actionTiming","id","index"]; | |
DwtToolBarButton.prototype=new DwtButton; | |
DwtToolBarButton.prototype.constructor=DwtToolBarButton; | |
DwtToolBarButton.prototype.isDwtToolBarButton=true; | |
DwtToolBarButton.prototype.toString=function(){return"DwtToolBarButton" | |
}; | |
DwtToolBarButton.prototype.TEMPLATE="dwt.Widgets#ZToolbarButton"; | |
DwtToolBarSpacer=function(a){if(arguments.length==0){return | |
}this._noFocus=this.noTab=true; | |
this.toolbarItemTemplate=a.toolbarItemTemplate; | |
DwtControl.call(this,a) | |
}; | |
DwtToolBarSpacer.prototype=new DwtControl; | |
DwtToolBarSpacer.prototype.constructor=DwtToolBarSpacer; | |
DwtToolBarSpacer.prototype.isDwtToolBarSpacer=true; | |
DwtToolBarSpacer.prototype.toString=function(){return"DwtToolBarSpacer" | |
}; | |
DwtToolBarSpacer.prototype.role="separator" | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtToolTip")){DwtToolTip=function(f,g,e){if(arguments.length==0){return | |
}this.shell=f; | |
this._dialog=e; | |
this._poppedUp=false; | |
this._div=document.createElement("div"); | |
this._div.className=g||"DwtToolTip"; | |
this._div.style.position=DwtControl.ABSOLUTE_STYLE; | |
this.shell.getHtmlElement().appendChild(this._div); | |
Dwt.setZIndex(this._div,Dwt.Z_HIDDEN); | |
Dwt.setLocation(this._div,Dwt.LOC_NOWHERE,Dwt.LOC_NOWHERE); | |
this._eventMgr=new AjxEventMgr(); | |
var d="dwt.Widgets#DwtToolTip"; | |
this._div.innerHTML=AjxTemplate.expand(d); | |
var j=AjxTemplate.getParams(d); | |
this._offsetX=(j.width!=null)?Number(j.width):DwtToolTip.POPUP_OFFSET_X; | |
this._offsetY=(j.height!=null)?Number(j.height):DwtToolTip.POPUP_OFFSET_Y; | |
this._contentDiv=document.getElementById("tooltipContents"); | |
Dwt.setHandler(this._div,DwtEvent.ONMOUSEOVER,AjxCallback.simpleClosure(this._mouseOverListener,this)); | |
Dwt.setHandler(this._div,DwtEvent.ONMOUSEOUT,AjxCallback.simpleClosure(this._mouseOutListener,this)); | |
var c=[DwtEvent.ONCLICK,DwtEvent.ONDBLCLICK,DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEENTER,DwtEvent.ONMOUSELEAVE,DwtEvent.ONMOUSEMOVE,DwtEvent.ONMOUSEUP,DwtEvent.ONMOUSEWHEEL,DwtEvent.ONSCROLL]; | |
for(var a=0; | |
a<c.length; | |
a++){var h=c[a]; | |
Dwt.setHandler(this._div,h,AjxCallback.simpleClosure(this.notifyListeners,this,[h])) | |
}}; | |
DwtToolTip.prototype.isDwtToolTip=true; | |
DwtToolTip.prototype.toString=function(){return"DwtToolTip" | |
}; | |
DwtToolTip.TOOLTIP_DELAY=750; | |
DwtToolTip.WINDOW_GUTTER=5; | |
DwtToolTip.POPUP_OFFSET_X=5; | |
DwtToolTip.POPUP_OFFSET_Y=5; | |
DwtToolTip.prototype.getContent=function(){return this._div.innerHTML | |
}; | |
DwtToolTip.prototype.setContent=function(c,a){this._content=c; | |
if(a){this._contentDiv.innerHTML=this._content | |
}}; | |
DwtToolTip.prototype.popup=function(a,h,c,d,e,g,f){this._hovered=false; | |
if(this._popupAction){AjxTimedAction.cancelAction(this._popupAction); | |
this._popupAction=null | |
}this._popdownOnMouseOver=d; | |
this._popdownListener=f; | |
if(this._content!=null){if(!c){this._contentDiv.innerHTML=this._content | |
}this._popupAction=new AjxTimedAction(this,this._positionElement,[a,h,e,g]); | |
AjxTimedAction.scheduleAction(this._popupAction,5) | |
}}; | |
DwtToolTip.prototype.setSticky=function(a){this._poppedUp=!a | |
}; | |
DwtToolTip.prototype.popdown=function(){this._popdownOnMouseOver=false; | |
this._hovered=false; | |
if(this._popupAction){AjxTimedAction.cancelAction(this._popupAction); | |
this._popupAction=null | |
}if(this._content!=null&&this._poppedUp){Dwt.setLocation(this._div,Dwt.LOC_NOWHERE,Dwt.LOC_NOWHERE); | |
this._poppedUp=false; | |
if(this._popdownListener instanceof AjxCallback){this._popdownListener.run() | |
}this._popdownListener=null | |
}}; | |
DwtToolTip.prototype._positionElement=function(h,g,f,i){this._popupAction=null; | |
var d=DwtShell.getShell(window).getSize(); | |
var c=d.x,o=d.y; | |
var p,n,a; | |
var q=f&&f.getTooltipBase(i); | |
if(q){a=Dwt.toWindow(q); | |
var e=Dwt.getSize(q); | |
p=a.x+this._offsetX; | |
n=a.y+e.y+this._offsetY | |
}else{p=h+this._offsetX; | |
n=g+this._offsetY | |
}var l=Dwt.getSize(this._div); | |
var m=l.x,j=l.y; | |
if(p+m>c-DwtToolTip.WINDOW_GUTTER){p=c-DwtToolTip.WINDOW_GUTTER-m | |
}if(n+j>o-DwtToolTip.WINDOW_GUTTER){n=(a?a.y:n)-this._offsetY-j | |
}Dwt.setLocation(this._div,p,n); | |
var k=this._dialog?this._dialog.getZIndex()+Dwt._Z_INC:Dwt.Z_TOOLTIP; | |
Dwt.setZIndex(this._div,k); | |
this._poppedUp=true | |
}; | |
DwtToolTip.prototype._mouseOverListener=function(a){this._hovered=true; | |
if(this._popdownOnMouseOver&&this._poppedUp){var c=(this._popdownOnMouseOver.isAjxCallback||AjxUtil.isFunction(this._popdownOnMouseOver))?this._popdownOnMouseOver:null; | |
this.popdown(); | |
if(c){c.run() | |
}}this.notifyListeners(DwtEvent.ONMOUSEOVER) | |
}; | |
DwtToolTip.prototype._mouseOutListener=function(d){d=DwtUiEvent.getEvent(d,this._div); | |
var a=Dwt.toWindow(this._div); | |
var c=Dwt.getSize(this._div); | |
if(d.clientX<=a.x||d.clientX>=(a.x+c.x)||d.clientY<=a.y||d.clientY>=(a.y+c.y)){this.popdown(); | |
this.notifyListeners(DwtEvent.ONMOUSEOUT) | |
}}; | |
DwtToolTip.prototype.getHovered=function(){return this._hovered | |
}; | |
DwtToolTip.prototype.addListener=function(c,d,a){return this._eventMgr.addListener(c,d,a) | |
}; | |
DwtToolTip.prototype.setListener=function(c,d,a){this.removeAllListeners(c); | |
return this._eventMgr.addListener(c,d,a) | |
}; | |
DwtToolTip.prototype.removeListener=function(a,c){return this._eventMgr.removeListener(a,c) | |
}; | |
DwtToolTip.prototype.removeAllListeners=function(a){return this._eventMgr.removeAll(a) | |
}; | |
DwtToolTip.prototype.isListenerRegistered=function(a){return this._eventMgr.isListenerRegistered(a) | |
}; | |
DwtToolTip.prototype.notifyListeners=function(a,c){return this._eventMgr.notifyListeners(a,c) | |
} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtText")){DwtText=function(a){if(arguments.length==0){return | |
}a=Dwt.getParams(arguments,DwtText.PARAMS); | |
a.className=a.className||"DwtText"; | |
if(Dwt.hasClass(a,"FakeAnchor")){this.role="link" | |
}DwtControl.call(this,a); | |
this.noTab=true | |
}; | |
DwtText.PARAMS=["parent","className","posStyle"]; | |
DwtText.prototype=new DwtControl; | |
DwtText.prototype.constructor=DwtText; | |
DwtText.prototype.isDwtText=true; | |
DwtText.prototype.toString=function(){return"DwtText" | |
}; | |
DwtText.prototype.setText=function(c){this.noTab=!c; | |
if(!this._textNode){this._textNode=document.createTextNode(c); | |
this.getHtmlElement().appendChild(this._textNode) | |
}else{try{this._textNode.data=c | |
}catch(a){}}this.setAttribute("aria-label",c) | |
}; | |
DwtText.prototype.getText=function(){return this._textNode?this._textNode.data:"" | |
}; | |
DwtText.prototype.getTextNode=function(){return this._textNode | |
}; | |
DwtText.prototype._focus=function(){this.setDisplayState(DwtControl.FOCUSED) | |
}; | |
DwtText.prototype._blur=function(){this.setDisplayState(DwtControl.NORMAL) | |
} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtIframe")){DwtIframe=function(e){e.posStyle=e.posStyle||DwtControl.STATIC_STYLE; | |
e.className=e.className||"DwtIframe"; | |
DwtControl.call(this,e); | |
this._styles=e.styles; | |
this._noscroll=e.noscroll; | |
this._iframeID=e.id?DwtId.getIframeId(e.id):Dwt.getNextId(); | |
this._onLoadHandler=e.onload; | |
this._processHtmlCallback=e.processHtmlCallback; | |
this._hidden=e.hidden; | |
this._title=e.title; | |
if(!this._createFrame(e.html)){this.initFailed=true; | |
return | |
}if(e.useKbMgmt){var c=this.getIframe(); | |
var a=Dwt.getIframeDoc(c); | |
var d=AjxEnv.isIE?a:c.contentWindow; | |
Dwt.setHandler(d,DwtEvent.ONKEYDOWN,DwtKeyboardMgr.__keyDownHdlr); | |
Dwt.setHandler(d,DwtEvent.ONKEYUP,DwtKeyboardMgr.__keyUpHdlr); | |
Dwt.setHandler(d,DwtEvent.ONKEYPRESS,DwtKeyboardMgr.__keyPressHdlr) | |
}}; | |
DwtIframe.prototype=new DwtControl; | |
DwtIframe.prototype.constructor=DwtIframe; | |
DwtIframe.prototype.isDwtIframe=true; | |
DwtIframe.prototype.toString=function(){return"DwtIframe" | |
}; | |
DwtIframe.prototype.getIframe=function(){return document.getElementById(this._iframeID) | |
}; | |
DwtIframe.prototype.getInputElement=function(){return this.getIframe() | |
}; | |
DwtIframe.prototype.getDocument=function(){return this.getIframe().contentWindow.document | |
}; | |
DwtIframe.prototype._rawEventHandler=function(h){var d=this.getIframe(); | |
var e=d.contentWindow; | |
if(AjxEnv.isIE){h=e.event | |
}var a; | |
if(/mouse|context|click|select/i.test(h.type)){a=new DwtMouseEvent(true) | |
}else{a=new DwtUiEvent(true) | |
}a.setFromDhtmlEvent(h); | |
if(h.type=="mousedown"||h.type=="mousewheel"){DwtOutsideMouseEventMgr.forwardEvent(h) | |
}var f=a.type.toLowerCase(); | |
if(!/^on/.test(f)){f="on"+f | |
}var g=this.getLocation(); | |
if(!AjxEnv.isIE){var i=e.document; | |
var c=i.documentElement.scrollLeft||(i.body?i.body.scrollLeft:0); | |
var l=i.documentElement.scrollTop||(i.body?i.body.scrollTop:0); | |
g.x-=c; | |
g.y-=l | |
}a.docX+=g.x; | |
a.docY+=g.y; | |
a.elementX+=g.x; | |
a.elementY+=g.y; | |
var k=DwtMouseEventCapture.getCaptureObj(); | |
k=k&&a.button!=DwtMouseEvent.RIGHT; | |
if(AjxEnv.isIE||!k){if(f===DwtEvent.ONFOCUS||f===DwtEvent.ONBLUR){DwtControl.__HANDLER[f].call(null,a,f,this.parent) | |
}else{DwtEventManager.notifyListeners(f,a); | |
this.parent.notifyListeners(f,a) | |
}}else{var j=document.createEvent("MouseEvents"); | |
j.initMouseEvent(h.type,true,true,document.defaultView,0,h.screenX,h.screenY,a.docX,a.docY,h.ctrlKey,h.altKey,h.shiftKey,h.metaKey,h.button,h.relatedTarget); | |
document.body.dispatchEvent(j) | |
}a.setToDhtmlEvent(h); | |
return a._returnValue | |
}; | |
DwtIframe._forwardEvents=[DwtEvent.ONCHANGE,DwtEvent.ONCLICK,DwtEvent.ONCONTEXTMENU,DwtEvent.ONDBLCLICK,DwtEvent.ONFOCUS,DwtEvent.ONKEYDOWN,DwtEvent.ONKEYPRESS,DwtEvent.ONKEYUP,DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEENTER,DwtEvent.ONMOUSELEAVE,DwtEvent.ONMOUSEMOVE,DwtEvent.ONMOUSEOUT,DwtEvent.ONMOUSEOVER,DwtEvent.ONMOUSEUP,DwtEvent.ONSELECTSTART]; | |
DwtIframe.prototype._createFrame=function(c){var a=this.getHTMLElId(); | |
function d(g){var f=document.getElementById(a); | |
var e=DwtControl.findControl(f); | |
return e._rawEventHandler(g) | |
}return(function(){var l,k=[],j=0,e; | |
var g=document.getElementById(a); | |
var f=DwtControl.findControl(g); | |
if(!f){return false | |
}k[j++]="<iframe"; | |
if(f._noscroll){k[j++]=" scrolling='no'" | |
}if(f._hidden){k[j++]=" style='visibility:hidden'" | |
}if(f._title){k[j++]=" title='"+AjxStringUtil.encodeQuotes(AjxStringUtil.htmlEncode(f._title))+"'" | |
}k[j++]=" frameborder='0' width='100%' id='"; | |
k[j++]=f._iframeID; | |
k[j++]="' name='"+f._iframeID+"'"; | |
if(f._onLoadHandler){k[j++]=" onload='"+f._onLoadHandler+"'" | |
}k[j++]=" src='about:blank' ></iframe>"; | |
f.setContent(k.join("")); | |
c=c.replace(/(<style[^>]*>)[\s\t\u00A0]*((.|\n)*?)[\s\t\u00A0]*<\x2fstyle>/mgi,function(i,o,n){return o+n.replace(/@import.*?(;|[\s\t\u00A0]*$)/gi,"")+"</style>" | |
}); | |
c=AjxStringUtil.checkForCleanHtml(c,ZmMailMsgView.TRUSTED_TAGS,ZmMailMsgView.UNTRUSTED_ATTRS).html; | |
l=f.getIframe(); | |
e=Dwt.getIframeDoc(l); | |
e.open(); | |
if(f._styles){e.write(["<style type='text/css'>",f._styles,"</style>"].join("")) | |
}e.write(c); | |
e.close(); | |
if(f._processHtmlCallback){f._processHtmlCallback.run(e) | |
}k=e.documentElement.style; | |
k.margin=k.padding="0"; | |
if(e.body){e.body.style.margin="0" | |
}var m=e.firstChild&&e.firstChild.tagName&&e.firstChild.tagName.toLowerCase()==="html"?e.firstChild:null,h=m&&m.getAttribute("lang"); | |
if(m&&!h){m.setAttribute("lang",window.appLang) | |
}k=DwtIframe._forwardEvents; | |
if(!AjxEnv.isIE){e=l.contentWindow | |
}for(j=k.length; | |
--j>=0; | |
){e[k[j]]=d | |
}return true | |
})() | |
}; | |
DwtIframe.prototype._resetEventHandlers=function(){var a=this; | |
function c(d){return a._rawEventHandler(d) | |
}(function(){var g,f=[],e=0,d; | |
g=a.getIframe(); | |
d=Dwt.getIframeDoc(g); | |
f=DwtIframe._forwardEvents; | |
if(!AjxEnv.isIE){d=g.contentWindow | |
}for(e=f.length; | |
--e>=0; | |
){d[f[e]]=c | |
}})() | |
}; | |
DwtIframe.prototype.setSrc=function(c){c=c||'javascript:"";'; | |
var a=this.getIframe(); | |
a.src=c | |
}; | |
DwtIframe.prototype.setIframeContent=function(a){var c=this.getDocument(); | |
if(c.body){c.body.innerHTML=a | |
}} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtSpinner")){DwtSpinner=function(a){if(arguments.length==0){return | |
}DwtControl.call(this,{parent:a.parent,className:a.className,posStyle:a.posStyle,parentElement:a.parentElement}); | |
this._maxValue=a.max!=null?a.max:null; | |
this._minValue=a.min!=null?a.min:null; | |
this._fieldSize=a.size!=null?a.size:3; | |
this._origValue=a.value||0; | |
this._maxLen=a.maxLen||null; | |
this._step=a.step||1; | |
this._decimals="decimals" in a?a.decimals:0; | |
this._align=a.align||null; | |
this._timerFunc=AjxCallback.simpleClosure(this._timerFunc,this); | |
this._btnPressCapture=new DwtMouseEventCapture({targetObj:this,id:"DwtSpinner",mouseUpHdlr:AjxCallback.simpleClosure(this._stopCapture,this)}); | |
this._createElements() | |
}; | |
DwtSpinner.prototype=new DwtControl; | |
DwtSpinner.prototype.constructor=DwtSpinner; | |
DwtSpinner.INIT_TIMER=250; | |
DwtSpinner.SLOW_TIMER=125; | |
DwtSpinner.FAST_TIMER=33; | |
DwtSpinner.prototype._createElements=function(){var g=this.getHtmlElement(); | |
var f=Dwt.getNextId(); | |
this._idField=f; | |
this._idUpButton=f+"-up"; | |
this._idDownButton=f+"-down"; | |
var e=["<table class='DwtSpinner' cellspacing='0' cellpadding='0'>","<tr><td rowspan='2' class='DwtSpinner-inputCell'>","<input id='",f,"' autocomplete='off' />","</td>","<td unselectable id='",this._idUpButton,"' class='DwtSpinner-upBtn'><div class='ImgUpArrowSmall'> </div></td>","</tr><tr>","<td unselectable id='",this._idDownButton,"' class='DwtSpinner-downBtn'><div class='ImgDownArrowSmall'> </div></td>","</tr></table>"]; | |
g.innerHTML=e.join(""); | |
var d=this._getUpButton(); | |
d.onmousedown=AjxCallback.simpleClosure(this._btnPressed,this,"Up"); | |
var c=this._getDownButton(); | |
c.onmousedown=AjxCallback.simpleClosure(this._btnPressed,this,"Down"); | |
var a=this.getInputElement(); | |
if(this._maxLen){a.maxLength=this._maxLen | |
}if(this._fieldSize){a.size=this._fieldSize | |
}if(this._align){a.style.textAlign=this._align | |
}if(this._origValue!=null){this.setValue(this._origValue) | |
}a.onblur=AjxCallback.simpleClosure(this.setValue,this,null); | |
a[(AjxEnv.isIE||AjxEnv.isOpera)?"onkeydown":"onkeypress"]=AjxCallback.simpleClosure(this.__onKeyPress,this) | |
}; | |
DwtSpinner.prototype._getValidValue=function(a){var c=parseFloat(a); | |
if(isNaN(c)||c==null){c=this._lastValidValue | |
}if(c==null){c=this._minValue||0 | |
}if(this._minValue!=null&&c<this._minValue){c=this._minValue | |
}if(this._maxValue!=null&&c>this._maxValue){c=this._maxValue | |
}c=parseFloat(c); | |
if(this._decimals!=null){c=c.toFixed(this._decimals) | |
}this._lastValidValue=c; | |
return c | |
}; | |
DwtSpinner.prototype.getInputElement=function(){return document.getElementById(this._idField) | |
}; | |
DwtSpinner.prototype._getUpButton=function(){return document.getElementById(this._idUpButton) | |
}; | |
DwtSpinner.prototype._getDownButton=function(){return document.getElementById(this._idDownButton) | |
}; | |
DwtSpinner.prototype._getButton=function(a){switch(a){case"Up":return this._getUpButton(); | |
case"Down":return this._getDownButton() | |
}}; | |
DwtSpinner.prototype._setBtnState=function(a,d){var c=this._getButton(a); | |
if(d){Dwt.addClass(c,"DwtSpinner-"+a+"-disabled"); | |
c.firstChild.className="Img"+a+"ArrowSmallDis" | |
}else{Dwt.delClass(c,"DwtSpinner-"+a+"-disabled"); | |
c.firstChild.className="Img"+a+"ArrowSmall" | |
}}; | |
DwtSpinner.prototype.getValue=function(){return parseFloat(this._getValidValue(this.getInputElement().value)) | |
}; | |
DwtSpinner.prototype.setValue=function(a){if(a==null){a=this.getInputElement().value | |
}a=this._getValidValue(a); | |
this.getInputElement().value=a; | |
a=parseFloat(a); | |
this._setBtnState("Down",this._minValue!=null&&this._minValue==a); | |
this._setBtnState("Up",this._maxValue!=null&&this._maxValue==a) | |
}; | |
DwtSpinner.prototype.setEnabled=function(a){DwtControl.prototype.setEnabled.call(this,a); | |
this.getInputElement().disabled=!a; | |
var c=this.getHtmlElement().firstChild; | |
if(!a){Dwt.addClass(c,"DwtSpinner-disabled") | |
}else{Dwt.delClass(c,"DwtSpinner-disabled") | |
}}; | |
DwtSpinner.prototype._rotateVal=function(a){var c=this.getValue(); | |
switch(a){case"Up":c+=this._step; | |
break; | |
case"Down":c-=this._step; | |
break | |
}this.setValue(c) | |
}; | |
DwtSpinner.prototype._btnPressed=function(a){if(!this.getEnabled()){return | |
}Dwt.addClass(this._getButton(a),"DwtSpinner-"+a+"-pressed"); | |
this._direction=a; | |
this._rotateVal(a); | |
this._btnPressCapture.capture(); | |
this._timerSteps=0; | |
this._timer=setTimeout(this._timerFunc,DwtSpinner.INIT_TIMER) | |
}; | |
DwtSpinner.prototype._timerFunc=function(){var d=this.getValue(); | |
this._rotateVal(this._direction); | |
var c=this.getValue(); | |
this._timerSteps++; | |
var a=this._timerSteps>4?DwtSpinner.FAST_TIMER:DwtSpinner.SLOW_TIMER; | |
if(d!=c){this._timer=setTimeout(this._timerFunc,a) | |
}else{this._stopCapture() | |
}}; | |
DwtSpinner.prototype._stopCapture=function(){if(this._timer){clearTimeout(this._timer) | |
}this._timer=null; | |
this._timerSteps=null; | |
var c=this._direction; | |
Dwt.delClass(this._getButton(c),"DwtSpinner-"+c+"-pressed"); | |
this._direction=null; | |
this._btnPressCapture.release(); | |
var a=this.getInputElement(); | |
a.focus(); | |
Dwt.setSelectionRange(a,0,a.value.length) | |
}; | |
DwtSpinner.prototype.__onKeyPress=function(d){if(AjxEnv.isIE){d=window.event | |
}var c=null; | |
switch(d.keyCode){case 38:c="Up"; | |
break; | |
case 40:c="Down"; | |
break | |
}if(c){this._rotateVal(c); | |
var a=this.getInputElement(); | |
Dwt.setSelectionRange(a,0,a.value.length) | |
}}; | |
DwtSpinner.prototype.focus=function(){this.getInputElement().focus() | |
}; | |
DwtSpinner.prototype.select=function(){var a=this.getInputElement(); | |
a.focus(); | |
Dwt.setSelectionRange(a,0,a.value.length) | |
} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtColorPicker")){DwtColorPicker=function(a){if(arguments.length==0){return | |
}a=Dwt.getParams(arguments,DwtColorPicker.PARAMS); | |
a.className=a.className||"DwtColorPicker"; | |
DwtComposite.call(this,a); | |
this._hideNoFill=a.hideNoFill; | |
this._noFillLabel=a.noFillLabel; | |
this._allowColorInput=a.allowColorInput; | |
this._defaultColor=a.defaultColor||"#000000"; | |
this._createHtml() | |
}; | |
DwtColorPicker.prototype=new DwtComposite; | |
DwtColorPicker.prototype.constructor=DwtColorPicker; | |
DwtColorPicker.prototype.toString=function(){return"DwtColorPicker" | |
}; | |
DwtColorPicker.PARAMS=["parent","className","posStyle","noFillLabel","allowColorInput","defaultColor"]; | |
DwtColorPicker._RGB_RE=/^rgb\(([0-9]{1,3}),\s*([0-9]{1,3}),\s*([0-9]{1,3})\)$/; | |
DwtColorPicker._HEX_RE=/^\#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i; | |
DwtColorPicker.prototype.TEMPLATE="dwt.Widgets#DwtColorPicker"; | |
DwtColorPicker.prototype.addSelectionListener=function(a){this.addListener(DwtEvent.SELECTION,a) | |
}; | |
DwtColorPicker.prototype.removeSelectionListener=function(a){this.removeListener(DwtEvent.SELECTION,a) | |
}; | |
DwtColorPicker.prototype.dispose=function(){if(this._disposed){return | |
}DwtControl.prototype.dispose.call(this) | |
}; | |
DwtColorPicker.prototype._createHtml=function(a){this._createHtmlFromTemplate(a||this.TEMPLATE,{id:this.getHtmlElement().id}) | |
}; | |
DwtColorPicker.prototype._createHtmlFromTemplate=function(c,g){g.allowColorInput=this._allowColorInput; | |
g.hideNoFill=this._hideNoFill; | |
g.noFillLabel=this._noFillLabel; | |
DwtComposite.prototype._createHtmlFromTemplate.apply(this,arguments); | |
if(g.allowColorInput){var n=document.getElementById(g.id+"_input"); | |
var j={parent:this,validationStyle:DwtInputField.CONTINUAL_VALIDATION,errorIconStyle:DwtInputField.ERROR_ICON_RIGHT,validator:DwtColorPicker.__isValidInputValue}; | |
var m=this._colorInput=new DwtInputField(j); | |
m.replaceElement(n); | |
var e=new AjxCallback(this,this._updatePreview); | |
m.setValidationCallback(e); | |
var l=this._error=new DwtLabel({parent:this}); | |
var a=document.getElementById(g.id+"_error"); | |
l.replaceElement(a); | |
l.setVisible(false); | |
this._preview=document.getElementById(g.id+"_preview"); | |
var k=document.getElementById(g.id+"_button"); | |
var h=new DwtButton({parent:this}); | |
h.setText(AjxMsg.setColor); | |
h.replaceElement(k); | |
h.addSelectionListener(new AjxListener(this,this._handleSetColor)) | |
}var k=document.getElementById(g.id+"_default"); | |
if(k){if(!DwtColorPicker.Button){DwtColorPicker.__defineClasses() | |
}var h=this._defaultColorButton=new DwtColorPicker.Button({parent:this}); | |
h.setText(g.noFillLabel||AjxMsg.colorsUseDefault); | |
h.replaceElement(k); | |
h.addSelectionListener(new AjxListener(this,this._handleColorSelect,[0])) | |
}var f=document.getElementById(g.id+"_colors"); | |
var d=AjxEnv.isIE?DwtEvent.ONMOUSEENTER:DwtEvent.ONMOUSEOVER; | |
var i=AjxEnv.isIE?DwtEvent.ONMOUSELEAVE:DwtEvent.ONMOUSEOUT; | |
Dwt.setHandler(f,DwtEvent.ONMOUSEDOWN,AjxCallback.simpleClosure(this._handleMouseDown,this)); | |
Dwt.setHandler(f,DwtEvent.ONMOUSEUP,AjxCallback.simpleClosure(this._handleMouseUp,this)); | |
Dwt.setHandler(f,d,AjxCallback.simpleClosure(this._handleMouseOver,this)); | |
Dwt.setHandler(f,i,AjxCallback.simpleClosure(this._handleMouseOut,this)) | |
}; | |
DwtColorPicker.prototype._handleMouseOver=function(a){var c=DwtUiEvent.getEvent(a); | |
var d=DwtUiEvent.getTarget(c); | |
if(!Dwt.hasClass(d,"Color")){return | |
}this._handleMouseOut(a); | |
Dwt.addClass(d,DwtControl.HOVER); | |
this._mouseOverEl=d | |
}; | |
DwtColorPicker.prototype._handleMouseOut=function(a){if(this._mouseOverEl){Dwt.delClass(this._mouseOverEl,DwtControl.HOVER) | |
}this._mouseOverEl=null | |
}; | |
DwtColorPicker.prototype._handleMouseDown=function(a){var c=DwtUiEvent.getEvent(a); | |
var d=DwtUiEvent.getTarget(c); | |
this._mouseDownEl=Dwt.hasClass(d,"Color")?d:null | |
}; | |
DwtColorPicker.prototype._handleMouseUp=function(a){var c=DwtUiEvent.getEvent(a); | |
var e=DwtUiEvent.getTarget(c); | |
if(this._mouseDownEl!=e){return | |
}var d=DwtCssStyle.getProperty(e,"background-color"); | |
this._handleColorSelect(DwtColorPicker.__color2hex(d)) | |
}; | |
DwtColorPicker.prototype._handleSetColor=function(a){var c=this._colorInput.getValue(); | |
if(c){c=DwtColorPicker.__color2hex(c); | |
if(!c){return | |
}this._handleColorSelect(c) | |
}}; | |
DwtColorPicker.prototype._handleColorSelect=function(a){this._inputColor=a; | |
if(this.parent instanceof DwtMenu){DwtMenu.closeActiveMenu() | |
}if(this.isListenerRegistered(DwtEvent.SELECTION)){var c=DwtShell.selectionEvent; | |
c.item=this; | |
c.detail=this._inputColor; | |
this.notifyListeners(DwtEvent.SELECTION,c) | |
}}; | |
DwtColorPicker.prototype.getInputColor=function(){return this._inputColor | |
}; | |
DwtColorPicker.prototype.setDefaultColor=function(a){if(this._defaultColorButton){this._defaultColorButton.setDefaultColor(a) | |
}}; | |
DwtColorPicker.__color2hex=function(d){if(d=="white"){return"#FFFFFF" | |
}if(d=="black"){return"#000000" | |
}var a=d&&d.match(DwtColorPicker._RGB_RE); | |
if(a){for(var c=1; | |
c<=3; | |
c++){if(parseInt(a[c])>255){return"" | |
}}return AjxColor.color(a[1],a[2],a[3]) | |
}a=d&&d.match(DwtColorPicker._HEX_RE); | |
if(a){return d | |
}return"" | |
}; | |
DwtColorPicker.__isValidInputValue=function(a){if(!a){return a | |
}var c=DwtColorPicker.__color2hex(a); | |
if(!c){throw AjxMsg.colorFormatError | |
}return a | |
}; | |
DwtColorPicker.prototype._updatePreview=function(d,c,a){if(c){a=DwtColorPicker.__color2hex(a); | |
Dwt.setVisible(this._preview,true); | |
this._preview.style.backgroundColor=a; | |
this._error.setVisible(false) | |
}else{Dwt.setVisible(this._preview,false); | |
this._error.setVisible(true); | |
this._error.setText(AjxMsg.colorFormatError) | |
}}; | |
DwtColorPicker.__defineClasses=function(){DwtColorPicker.Button=function(a){a.className=a.className||"DwtColorPickerButton"; | |
DwtButton.call(this,a); | |
this._colorDiv=document.getElementById(this.getHtmlElement().id+"_color") | |
}; | |
DwtColorPicker.Button.prototype=new DwtButton; | |
DwtColorPicker.Button.prototype.constructor=DwtColorPicker.Button; | |
DwtColorPicker.Button.prototype.setDefaultColor=function(a){this._colorDiv.style.backgroundColor=(a===null)?"":a | |
}; | |
DwtColorPicker.Button.prototype.toString=function(){return"DwtColorPickerButton" | |
}; | |
DwtColorPicker.Button.prototype.TEMPLATE="dwt.Widgets#DwtColorPickerButton" | |
} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtButtonColorPicker")){DwtButtonColorPicker=function(d){if(arguments.length==0){return | |
}d=Dwt.getParams(arguments,DwtButtonColorPicker.PARAMS); | |
d.actionTiming=DwtButton.ACTION_MOUSEUP; | |
DwtButton.call(this,d); | |
var a=new DwtMenu({parent:this,style:DwtMenu.COLOR_PICKER_STYLE}); | |
this.setMenu(a); | |
var c=new DwtColorPicker(a,null,null,d.noFillLabel,d.allowColorInput); | |
c.addSelectionListener(new AjxListener(this,this._colorPicked)); | |
this.__colorPicker=c; | |
this.__color="" | |
}; | |
DwtButtonColorPicker.PARAMS=["parent","style","className","posStyle","id","index","noFillLabel","allowColorInput"]; | |
DwtButtonColorPicker.prototype=new DwtButton; | |
DwtButtonColorPicker.prototype.constructor=DwtButtonColorPicker; | |
DwtButtonColorPicker._RGB_RE=/rgb\(([0-9]{1,3}),\s*([0-9]{1,3}),\s*([0-9]{1,3})\)/; | |
DwtButtonColorPicker._hexdigits=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"]; | |
DwtButtonColorPicker.toHex=function(f,c){var a=[]; | |
while(f){var e=DwtButtonColorPicker._hexdigits[f&15]; | |
a.push(e); | |
f=f>>4 | |
}if(c!=null){c-=a.length; | |
while(c-->0){a.push("0") | |
}}a.reverse(); | |
return a.join("") | |
}; | |
DwtButtonColorPicker.prototype.showColorDisplay=function(a){if(!this._colorEl){return | |
}if(!a){this._colorEl.onmouseover=DwtButtonColorPicker.__colorDisplay_onMouseOver; | |
this._colorEl.onmouseout=DwtButtonColorPicker.__colorDisplay_onMouseOut; | |
this._colorEl.onmousedown=DwtButtonColorPicker.__colorDisplay_onMouseDown | |
}}; | |
DwtButtonColorPicker.prototype.getColor=function(){return this.__color | |
}; | |
DwtButtonColorPicker.prototype.setColor=function(a){var c=a.match(DwtButtonColorPicker._RGB_RE); | |
if(c){a="#"+DwtButtonColorPicker.toHex(parseInt(c[1]),2)+DwtButtonColorPicker.toHex(parseInt(c[2]),2)+DwtButtonColorPicker.toHex(parseInt(c[3]),2) | |
}this.__color=a; | |
var d=this._colorEl; | |
if(d){d.style.backgroundColor=a | |
}}; | |
DwtButtonColorPicker.prototype._createHtmlFromTemplate=function(c,d){DwtButton.prototype._createHtmlFromTemplate.call(this,c,d); | |
var a=AjxTemplate.expand("dwt.Widgets#ZButtonColorDisplay",d); | |
this.setText(a); | |
this._colorEl=document.getElementById(d.id+"_color") | |
}; | |
DwtButtonColorPicker.prototype._setMinWidth=function(){}; | |
DwtButtonColorPicker.prototype._colorPicked=function(d){var a=d.detail||"#000000"; | |
this.__color=this.__detail=a; | |
var c=this._colorEl; | |
if(c){c.style.backgroundColor=a | |
}if(this.isListenerRegistered(DwtEvent.SELECTION)){var e=DwtShell.selectionEvent; | |
e.item=this; | |
e.detail=a; | |
this.notifyListeners(DwtEvent.SELECTION,e) | |
}}; | |
DwtButtonColorPicker.prototype.__colorDisplay_onMouseOver=function(a,c){if(!this.getEnabled()){return | |
}Dwt.addClass(c,"ImgDisable") | |
}; | |
DwtButtonColorPicker.prototype.__colorDisplay_onMouseOut=function(a,c){if(!this.getEnabled()){return | |
}Dwt.delClass(c,"ImgDisable") | |
}; | |
DwtButtonColorPicker.prototype.__colorDisplay_onMouseDown=function(c,e){if(!this.getEnabled()){return | |
}var a=DwtShell.mouseEvent; | |
a.setFromDhtmlEvent(c); | |
this.__color=this.__detail=e.style.backgroundColor=""; | |
if(this.isListenerRegistered(DwtEvent.SELECTION)){var d=DwtShell.selectionEvent; | |
d.item=this; | |
d.detail=""; | |
this.notifyListeners(DwtEvent.SELECTION,d) | |
}a._stopPropagation=true; | |
a._returnValue=false; | |
a.setToDhtmlEvent(c); | |
return false | |
}; | |
DwtButtonColorPicker.__colorDisplay_onMouseOver=function(a){var c=DwtControl.getTargetControl(a); | |
c.__colorDisplay_onMouseOver(a,this) | |
}; | |
DwtButtonColorPicker.__colorDisplay_onMouseOut=function(a){var c=DwtControl.getTargetControl(a); | |
c.__colorDisplay_onMouseOut(a,this) | |
}; | |
DwtButtonColorPicker.__colorDisplay_onMouseDown=function(a){var c=DwtControl.getTargetControl(a); | |
c.__colorDisplay_onMouseDown(a,this) | |
} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtChooser")){DwtChooser=function(d){if(arguments.length==0){return | |
}DwtComposite.call(this,d.parent,d.className); | |
this._slvClassName=d.slvClassName; | |
this._tlvClassName=d.tlvClassName; | |
this._layoutStyle=d.layoutStyle?d.layoutStyle:DwtChooser.HORIZ_STYLE; | |
this._selectStyle=d.selectStyle?d.selectStyle:DwtChooser.MULTI_SELECT; | |
this._mode=d.listStyle?d.listStyle:DwtChooser.MODE_MOVE; | |
this._noDuplicates=(d.noDuplicates!==false); | |
this._singleHeight=d.singleHeight?d.singleHeight:45; | |
this._listSize=d.listSize; | |
this._sourceEmptyOk=d.sourceEmptyOk; | |
this._allButtons=d.allButtons; | |
this._hasTextField=d.hasTextField; | |
this._handleButtonInfo(d.buttonInfo); | |
this._mode=d.mode?d.mode:this._hasMultiButtons?DwtChooser.MODE_COPY:DwtChooser.MODE_MOVE; | |
this._createHtml(); | |
this._initialize(); | |
var c=d.parent.getSize(); | |
var e=d.listWidth||c.x; | |
var a=d.listHeight||c.y; | |
if(e&&a){this.resize(e,a) | |
}}; | |
DwtChooser.prototype=new DwtComposite; | |
DwtChooser.prototype.constructor=DwtChooser; | |
DwtChooser.prototype.isFocusable=true; | |
DwtChooser.prototype.role="listbox"; | |
DwtChooser.HORIZ_STYLE=1; | |
DwtChooser.VERT_STYLE=2; | |
DwtChooser.SINGLE_SELECT=1; | |
DwtChooser.MULTI_SELECT=2; | |
DwtChooser.MODE_COPY=1; | |
DwtChooser.MODE_MOVE=2; | |
DwtChooser.REMOVE_BTN_ID="__remove__"; | |
DwtChooser.ADD_ALL_BTN_ID="__addAll__"; | |
DwtChooser.REMOVE_ALL_BTN_ID="__removeAll__"; | |
DwtChooser.prototype.toString=function(){return"DwtChooser" | |
}; | |
DwtChooser.prototype.setItems=function(c,a,d){a=a?a:DwtChooserListView.SOURCE; | |
this._reset(a); | |
this.addItems(c,a,true); | |
this._selectFirst(a); | |
if(d){this._reset((a==DwtChooserListView.SOURCE)?DwtChooserListView.TARGET:DwtChooserListView.SOURCE) | |
}}; | |
DwtChooser.prototype.getItems=function(a){a=a?a:DwtChooserListView.TARGET; | |
if(a==DwtChooserListView.SOURCE){return this.sourceListView.getList().clone() | |
}else{if(this._hasMultiButtons){var d={}; | |
for(var c in this._data){d[c]=this._data[c].clone() | |
}return d | |
}else{return this._data[this._buttonInfo[0].id].clone() | |
}}}; | |
DwtChooser.prototype.addItems=function(c,a,e,h){a=a?a:DwtChooserListView.SOURCE; | |
var g=(c instanceof AjxVector)?c.getArray():(c instanceof Array)?c:[c]; | |
if(a==DwtChooserListView.SOURCE){for(var d=0; | |
d<g.length; | |
d++){this._addToSource(g[d],null,e) | |
}}else{var f; | |
if(this._selectStyle==DwtChooser.SINGLE_SELECT){this.targetListView._resetList(); | |
g=(g.length>0)?[g[0]]:g | |
}for(var d=0; | |
d<g.length; | |
d++){this._addToTarget(g[d],h,e) | |
}}if(a==DwtChooserListView.SOURCE){var g=this.sourceListView.getList(); | |
this._sourceSize=g?g.size():0 | |
}}; | |
DwtChooser.prototype.removeItems=function(e,a,d){e=(e instanceof AjxVector)?e.getArray():(e instanceof Array)?e:[e]; | |
for(var c=0; | |
c<e.length; | |
c++){(a==DwtChooserListView.SOURCE)?this._removeFromSource(e[c],d):this._removeFromTarget(e[c],d) | |
}}; | |
DwtChooser.prototype.transfer=function(c,e,a){e=e?e:this._activeButtonId; | |
this._setActiveButton(e); | |
if(this._mode==DwtChooser.MODE_MOVE){if(this._selectStyle==DwtChooser.SINGLE_SELECT){var d=this.targetListView.getList(); | |
if(d&&d.size()){this.remove(d,true) | |
}}this.removeItems(c,DwtChooserListView.SOURCE,true) | |
}this.addItems(c,DwtChooserListView.TARGET,a); | |
this.sourceListView.deselectAll() | |
}; | |
DwtChooser.prototype.remove=function(e,d){e=(e instanceof AjxVector)?e.getArray():(e instanceof Array)?e:[e]; | |
if(this._mode==DwtChooser.MODE_MOVE){for(var c=0; | |
c<e.length; | |
c++){var a=this._getInsertionIndex(this.sourceListView,e[c]); | |
this.sourceListView.addItem(e[c],a,true) | |
}this._sourceSize=e?e.length:0 | |
}this.removeItems(e,DwtChooserListView.TARGET) | |
}; | |
DwtChooser.prototype.setSelectStyle=function(e,h){if(e==this._selectStyle){return | |
}this._selectStyle=e; | |
if(this._defLabel){var d=this._button[this._buttonInfo[0].id]; | |
d.setText((e==DwtChooser.SINGLE_SELECT)?AjxMsg.select:AjxMsg.add) | |
}if(!h){var f=this.getSize(); | |
this.resize(f.x,f.y) | |
}if(this._allButtons){this._addAllButton.setVisible(e==DwtChooser.MULTI_SELECT); | |
this._removeAllButton.setVisible(e==DwtChooser.MULTI_SELECT); | |
this._enableButtons() | |
}if(e==DwtChooser.SINGLE_SELECT){var g=this.targetListView.getList(); | |
var c=g?g.clone().getArray():null; | |
if(c&&c.length){this._reset(DwtChooserListView.TARGET); | |
this.addItems(c[0],DwtChooserListView.TARGET,true); | |
this.targetListView.deselectAll(); | |
if(c.length>1&&this._mode==DwtChooser.MODE_MOVE){this.addItems(c.slice(1),DwtChooserListView.SOURCE,true) | |
}this._enableButtons() | |
}}this.sourceListView.setMultiSelect(e==DwtChooser.MULTI_SELECT); | |
this.targetListView.setMultiSelect(e==DwtChooser.MULTI_SELECT) | |
}; | |
DwtChooser.prototype.reset=function(a){this._reset(a); | |
this._setActiveButton(this._buttonInfo[0].id); | |
this._enableButtons(); | |
if(this._hasTextField){this._textField.setValue("") | |
}}; | |
DwtChooser.prototype._reset=function(a){if(!a||a==DwtChooserListView.SOURCE){this.sourceListView._resetList() | |
}if(!a||a==DwtChooserListView.TARGET){this.targetListView._resetList(); | |
for(var c in this._data){this._data[c].removeAll() | |
}}}; | |
DwtChooser.prototype.addStateChangeListener=function(a){this.targetListView.addStateChangeListener(a) | |
}; | |
DwtChooser.prototype.removeStateChangeListener=function(a){this.targetListView.removeStateChangeListener(a) | |
}; | |
DwtChooser.prototype.getSourceListView=function(){return document.getElementById(this._sourceListViewDivId) | |
}; | |
DwtChooser.prototype.getButtons=function(){return document.getElementById(this._buttonsDivId) | |
}; | |
DwtChooser.prototype.getTargetListView=function(){return document.getElementById(this._targetListViewDivId) | |
}; | |
DwtChooser.prototype.getTextField=function(){return this._textField | |
}; | |
DwtChooser.prototype._createHtml=function(){this._sourceListViewDivId=Dwt.getNextId(); | |
this._targetListViewDivId=Dwt.getNextId(); | |
this._buttonsDivId=Dwt.getNextId(); | |
this._removeButtonDivId=Dwt.getNextId(); | |
if(this._allButtons){this._addAllButtonDivId=Dwt.getNextId(); | |
this._removeAllButtonDivId=Dwt.getNextId() | |
}if(this._hasTextField){this._textFieldTdId=Dwt.getNextId() | |
}var d=[]; | |
var a=0; | |
if(this._layoutStyle==DwtChooser.HORIZ_STYLE){d[a++]="<table>"; | |
d[a++]="<tr>"; | |
d[a++]="<td id='"; | |
d[a++]=this._sourceListViewDivId; | |
d[a++]="'></td>"; | |
d[a++]="<td valign='middle' id='"; | |
d[a++]=this._buttonsDivId; | |
d[a++]="'>"; | |
if(this._allButtons){d[a++]="<div id='"; | |
d[a++]=this._addAllButtonDivId; | |
d[a++]="'></div><br>" | |
}for(var c=0; | |
c<this._buttonInfo.length; | |
c++){var e=this._buttonInfo[c].id; | |
d[a++]="<div id='"; | |
d[a++]=this._buttonDivId[e]; | |
d[a++]="'></div><br>" | |
}d[a++]="<br><div id='"; | |
d[a++]=this._removeButtonDivId; | |
d[a++]="'></div>"; | |
if(this._allButtons){d[a++]="<br><div id='"; | |
d[a++]=this._removeAllButtonDivId; | |
d[a++]="'></div><br>" | |
}d[a++]="</td>"; | |
d[a++]="<td id='"; | |
d[a++]=this._targetListViewDivId; | |
d[a++]="'></td>"; | |
d[a++]="</tr>"; | |
if(this._hasTextField){d[a++]="<tr><td>"; | |
d[a++]="<table width=100%><tr><td style='white-space:nowrap; width:1%'>"; | |
d[a++]=AjxMsg.add; | |
d[a++]=":</td><td id='"; | |
d[a++]=this._textFieldTdId; | |
d[a++]="'></td></tr></table>"; | |
d[a++]="</td><td> </td><td> </td></tr>" | |
}d[a++]="</table>" | |
}else{d[a++]="<div id='"; | |
d[a++]=this._sourceListViewDivId; | |
d[a++]="'></div>"; | |
d[a++]="<div align='center' id='"; | |
d[a++]=this._buttonsDivId; | |
d[a++]="'>"; | |
d[a++]="<table class='ZPropertySheet' cellspacing='6'><tr>"; | |
if(this._allButtons){d[a++]="<td id='"; | |
d[a++]=this._addAllButtonDivId; | |
d[a++]="'></td>" | |
}for(var c=0; | |
c<this._buttonInfo.length; | |
c++){var e=this._buttonInfo[c].id; | |
d[a++]="<td id='"; | |
d[a++]=this._buttonDivId[e]; | |
d[a++]="'></td>" | |
}d[a++]="<td id='"; | |
d[a++]=this._removeButtonDivId; | |
d[a++]="'></td>"; | |
if(this._allButtons){d[a++]="<td id='"; | |
d[a++]=this._removeAllButtonDivId; | |
d[a++]="'></td>" | |
}d[a++]="</tr></table></div>"; | |
d[a++]="<div id='"; | |
d[a++]=this._targetListViewDivId; | |
d[a++]="'></div>" | |
}this.getHtmlElement().innerHTML=d.join("") | |
}; | |
DwtChooser.prototype._handleButtonInfo=function(c){if(!c){this._defLabel=(this._selectStyle==DwtChooser.SINGLE_SELECT)?AjxMsg.select:AjxMsg.add; | |
c=[{label:this._defLabel}] | |
}this._buttonInfo=c; | |
this._buttonDivId={}; | |
this._buttonId={}; | |
if(this._buttonInfo.length==1){if(!this._buttonInfo[0].id){this._buttonInfo[0].id=Dwt.getNextId("DwtChooserButtonInfo_") | |
}this._activeButtonId=this._buttonInfo[0].id | |
}for(var a=0; | |
a<this._buttonInfo.length; | |
a++){var d=this._buttonInfo[a].id; | |
this._buttonDivId[d]=Dwt.getNextId("DwtChooserButtonDiv_"); | |
this._buttonId[d]=Dwt.getNextId("DwtChooserButton_") | |
}this._hasMultiButtons=(this._buttonInfo.length>1) | |
}; | |
DwtChooser.prototype._initialize=function(){var a=new AjxListener(this,this._transferButtonListener); | |
this._button={}; | |
this._buttonIndex={}; | |
this._data={}; | |
for(var c=0; | |
c<this._buttonInfo.length; | |
c++){var e=this._buttonInfo[c].id; | |
this._button[e]=this._setupButton(e,this._buttonId[e],this._buttonDivId[e],this._buttonInfo[c].label); | |
this._button[e].addSelectionListener(a); | |
this._buttonIndex[e]=c; | |
this._data[e]=new AjxVector() | |
}this.sourceListView=this._createSourceListView(); | |
this._addListView(this.sourceListView,this._sourceListViewDivId); | |
this.sourceListView.addSelectionListener(new AjxListener(this,this._sourceListener)); | |
this.targetListView=this._createTargetListView(); | |
this._addListView(this.targetListView,this._targetListViewDivId); | |
this.targetListView.addSelectionListener(new AjxListener(this,this._targetListener)); | |
this._removeButtonId=Dwt.getNextId("DwtChooserRemoveButton_"); | |
this._removeButton=this._setupButton(DwtChooser.REMOVE_BTN_ID,this._removeButtonId,this._removeButtonDivId,AjxMsg.remove); | |
this._removeButton.addSelectionListener(new AjxListener(this,this._removeButtonListener)); | |
if(this._allButtons){this._addAllButtonId=Dwt.getNextId(); | |
this._addAllButton=this._setupButton(DwtChooser.ADD_ALL_BTN_ID,this._addAllButtonId,this._addAllButtonDivId,AjxMsg.addAll); | |
this._addAllButton.addSelectionListener(new AjxListener(this,this._addAllButtonListener)); | |
this._removeAllButtonId=Dwt.getNextId(); | |
this._removeAllButton=this._setupButton(DwtChooser.REMOVE_ALL_BTN_ID,this._removeAllButtonId,this._removeAllButtonDivId,AjxMsg.removeAll); | |
this._removeAllButton.addSelectionListener(new AjxListener(this,this._removeAllButtonListener)); | |
if(this._selectStyle==DwtChooser.SINGLE_SELECT){this._addAllButton.setVisible(false); | |
this._removeAllButton.setVisible(false) | |
}}if(this._hasTextField){var d={parent:this,type:DwtInputField.STRING}; | |
this._textField=new DwtInputField(d); | |
this._textField.reparentHtmlElement(this._textFieldTdId); | |
this._textField._chooser=this; | |
this._textField.setHandler(DwtEvent.ONKEYUP,DwtChooser._onKeyUp); | |
Dwt.setSize(this._textField.getInputElement(),"100%",Dwt.DEFAULT) | |
}if(this._selectStyle==DwtChooser.SINGLE_SELECT){this.sourceListView.setMultiSelect(false); | |
this.targetListView.setMultiSelect(false) | |
}}; | |
DwtChooser.prototype.getTabGroupMember=function(){var c=new DwtTabGroup(this.toString()); | |
c.addMember(this.sourceListView); | |
for(var a=0; | |
a<this._buttonInfo.length; | |
a++){c.addMember(this._button[this._buttonInfo[a].id]) | |
}c.addMember(this._removeButton); | |
if(this._addAllButton){c.addMember(this._addAllButton); | |
c.addMember(this._removeAllButton) | |
}if(this._hasTextField){c.addMember(this._textField) | |
}c.addMember(this.targetListView); | |
return c | |
}; | |
DwtChooser.prototype._createSourceListView=function(){return new DwtChooserListView(this,DwtChooserListView.SOURCE,this._slvClassName) | |
}; | |
DwtChooser.prototype._createTargetListView=function(){return new DwtChooserListView(this,DwtChooserListView.TARGET,this._tlvClassName) | |
}; | |
DwtChooser.prototype._addListView=function(c,d){var a=document.getElementById(d); | |
a.appendChild(c.getHtmlElement()); | |
c.setUI(null,true); | |
c._initialized=true | |
}; | |
DwtChooser.prototype.resize=function(f,a){if(!f||!a){return | |
}if(f==Dwt.DEFAULT&&a==Dwt.DEFAULT){return | |
}var d=document.getElementById(this._buttonsDivId); | |
var h=Dwt.getSize(d); | |
var c,e,g; | |
if(this._layoutStyle==DwtChooser.HORIZ_STYLE){c=this._listSize?this._listSize:(f==Dwt.DEFAULT)?f:Math.floor(((f-h.x)/2)-12); | |
e=g=a | |
}else{c=f; | |
if(this._selectStyle==DwtChooser.SINGLE_SELECT){e=this._listSize?this._listSize:(a==Dwt.DEFAULT)?a:a-h.y-this._singleHeight-30; | |
g=(a==Dwt.DEFAULT)?a:a-h.y-e-30 | |
}else{e=g=this._listSize?this._listSize:(a==Dwt.DEFAULT)?a:Math.floor(((a-h.y)/2)-12) | |
}}this.sourceListView.setSize((c==Dwt.DEFAULT)?c:c+2,e); | |
this.targetListView.setSize((c==Dwt.DEFAULT)?c:c+2,g) | |
}; | |
DwtChooser.prototype._setupButton=function(g,d,f,a){var c=new DwtButton({parent:this,id:d}); | |
c.setText(a); | |
c.id=d; | |
c._buttonId=g; | |
var e=document.getElementById(f); | |
e.appendChild(c.getHtmlElement()); | |
return c | |
}; | |
DwtChooser.prototype._sourceListener=function(a){if(a.detail==DwtListView.ITEM_DBL_CLICKED){this.transfer(this.sourceListView.getSelection(),this._activeButtonId); | |
this.sourceListView.deselectAll() | |
}else{if(this._activeButtonId==DwtChooser.REMOVE_BTN_ID){var c=this._lastActiveTransferButtonId?this._lastActiveTransferButtonId:this._buttonInfo[0].id; | |
this._setActiveButton(c) | |
}}this.targetListView.deselectAll(); | |
this._enableButtons() | |
}; | |
DwtChooser.prototype._targetListener=function(a){if(a.detail==DwtListView.ITEM_DBL_CLICKED){this.remove(this.targetListView.getSelection()) | |
}else{this._setActiveButton(DwtChooser.REMOVE_BTN_ID); | |
this.sourceListView.deselectAll(); | |
this._enableButtons() | |
}}; | |
DwtChooser.prototype._transferButtonListener=function(d){var c=DwtControl.getTargetControl(d); | |
var f=c._buttonId; | |
var e=this.sourceListView.getSelection(); | |
if(e&&e.length){this.transfer(e,f); | |
this._enableButtons() | |
}else{var a=this._getEmailFromText(); | |
if(a){this.transfer([a],f) | |
}else{this._setActiveButton(f) | |
}}}; | |
DwtChooser.prototype._removeButtonListener=function(a){this.remove(this.targetListView.getSelection()); | |
var c=this.targetListView.getList(); | |
if(c&&c.size()){this._selectFirst(DwtChooserListView.TARGET) | |
}else{this._enableButtons() | |
}}; | |
DwtChooser.prototype._addAllButtonListener=function(a){this.transfer(this.sourceListView.getList().clone()); | |
this._selectFirst(DwtChooserListView.TARGET) | |
}; | |
DwtChooser.prototype._removeAllButtonListener=function(a){this.remove(this.targetListView.getList().clone()); | |
this._selectFirst(DwtChooserListView.SOURCE) | |
}; | |
DwtChooser.prototype._enableButtons=function(d,h){var j=this.sourceListView.getList(); | |
var l=this.targetListView.getList(); | |
var e=(d||(this.sourceListView.getSelectionCount()>0)); | |
for(var g=0; | |
g<this._buttonInfo.length; | |
g++){var c=this._buttonInfo[g].id; | |
this._button[c].setEnabled(e) | |
}var k=(h||(this.targetListView.getSelectionCount()>0)); | |
this._removeButton.setEnabled(k); | |
if(this._allButtons&&(this._selectStyle==DwtChooser.MULTI_SELECT)){var a=j?j.size():0; | |
var f=l?l.size():0; | |
this._addAllButton.setEnabled(a>0); | |
this._removeAllButton.setEnabled(f>0) | |
}}; | |
DwtChooser.prototype._selectFirst=function(c,d){var a=(c==DwtChooserListView.SOURCE)?this.sourceListView:this.targetListView; | |
var e=a.getList(); | |
if(e&&e.size()>0){a.setSelection(e.get(0)) | |
}}; | |
DwtChooser.prototype._setActiveButton=function(e){if(!this._hasMultiButtons){return | |
}if(e!=this._activeButtonId){var d=(this._activeButtonId==DwtChooser.REMOVE_BTN_ID)?this._removeButtonId:this._buttonId[this._activeButtonId]; | |
if(d){var a=DwtControl.findControl(document.getElementById(d)); | |
if(a){a.setDisplayState(DwtControl.NORMAL) | |
}}d=(e==DwtChooser.REMOVE_BTN_ID)?this._removeButtonId:this._buttonId[e]; | |
var c=DwtControl.findControl(document.getElementById(d)); | |
if(c){c.setDisplayState(DwtControl.DEFAULT) | |
}this._activeButtonId=e; | |
if(e!=DwtChooser.REMOVE_BTN_ID){this._lastActiveTransferButtonId=e | |
}}}; | |
DwtChooser.prototype._isDuplicate=function(a,c){return c.contains(a) | |
}; | |
DwtChooser.prototype._addToSource=function(d,a,c){if(!d){return | |
}if(!d._chooserIndex){var e=this.sourceListView.getList(); | |
d._chooserIndex=e?e.size()+1:1 | |
}this.sourceListView.addItem(d,a,c) | |
}; | |
DwtChooser.prototype._addToTarget=function(k,a,g){if(!k){return | |
}a=a?a:this._activeButtonId; | |
if(this._noDuplicates&&this._data[a]&&this._isDuplicate(k,this._data[a])){return | |
}var f=this.targetListView.getList(); | |
if(f&&f.contains(k)&&k.clone){var d=k.clone(); | |
d.id=Dwt.getNextId(); | |
k=d | |
}var h=null; | |
if(this._hasMultiButtons){f=[]; | |
for(var c=0; | |
c<this._buttonInfo.length; | |
c++){f=f.concat(this._data[this._buttonInfo[c].id].getArray()) | |
}var e=this._buttonIndex[a]; | |
for(h=0; | |
h<f.length; | |
h++){var j=this._buttonIndex[f[h]._buttonId]; | |
if(j>e){break | |
}}}k._buttonId=a; | |
k.id=k.id||Dwt.getNextId(); | |
this._data[a].add(k); | |
this.targetListView.addItem(k,h,g) | |
}; | |
DwtChooser.prototype._removeFromSource=function(c,a){if(!c){return | |
}var d=this.sourceListView.getList(); | |
if(!d){return | |
}if(!d.contains(c)){return | |
}this.sourceListView.removeItem(c,a) | |
}; | |
DwtChooser.prototype._removeFromTarget=function(c,a){if(!c){return | |
}var d=this.targetListView.getList(); | |
if(!d){return | |
}if(!d.contains(c)){return | |
}this._data[c._buttonId].remove(c); | |
this.targetListView.removeItem(c,a) | |
}; | |
DwtChooser.prototype._getInsertionIndex=function(d,f){var g=d.getList(); | |
if(!g){return null | |
}var c=g.getArray(); | |
for(var e=0; | |
e<c.length; | |
e++){if(f._chooserIndex&&c[e]._chooserIndex&&(c[e]._chooserIndex>=f._chooserIndex)){return e | |
}}return null | |
}; | |
DwtChooser.prototype._getEmailFromText=function(){if(this._hasTextField){var c=this._textField.getValue(); | |
var a=AjxEmailAddress.parse(c); | |
if(a){a.id=Dwt.getNextId(); | |
return a | |
}}}; | |
DwtChooser._onKeyUp=function(f){var d=DwtUiEvent.getTarget(f); | |
var g=DwtControl.findControl(d); | |
var e=g._chooser; | |
var c=DwtKeyEvent.getCharCode(f); | |
if(DwtKeyEvent.IS_RETURN[c]){var a=e._getEmailFromText(); | |
if(a){e.transfer([a],e._activeButtonId); | |
d.value="" | |
}}e._enableButtons(d.value.length) | |
}; | |
DwtChooserListView=function(a){if(arguments.length==0){return | |
}a=Dwt.getParams(arguments,DwtChooserListView.PARAMS); | |
a.className=a.className||"DwtChooserListView"; | |
a.headerList=this._getHeaderList(parent); | |
DwtListView.call(this,a); | |
this.type=a.type; | |
this._chooserParent=a.parent.parent; | |
this._dragSrc=new DwtDragSource(Dwt.DND_DROP_MOVE); | |
this.setDragSource(this._dragSrc) | |
}; | |
DwtChooserListView.PARAMS=["parent","type","className","view"]; | |
DwtChooserListView.SOURCE=1; | |
DwtChooserListView.TARGET=2; | |
DwtChooserListView.prototype=new DwtListView; | |
DwtChooserListView.prototype.constructor=DwtChooserListView; | |
DwtChooserListView.prototype._getHeaderList=function(){}; | |
DwtChooserListView.prototype.toString=function(){return"DwtChooserListView" | |
}; | |
DwtChooserListView.prototype.setUI=function(c,a){a=a?a:((this.type==DwtChooserListView.TARGET)||this.parent._sourceEmptyOk); | |
DwtListView.prototype.setUI.call(this,c,a) | |
}; | |
DwtChooserListView.prototype._itemClicked=function(a,c){if(!c.shiftKey&&!c.ctrlKey&&c.button==DwtMouseEvent.RIGHT){return | |
}else{DwtListView.prototype._itemClicked.call(this,a,c) | |
}}; | |
DwtChooserListView.prototype._sortColumn=function(c,a){this._chooserParent.search(c,a) | |
}; | |
DwtChooserListView.prototype._getHeaderSashLocation=function(){var c=this.getHtmlElement(); | |
if(Dwt.getPosition(c)==Dwt.ABSOLUTE_STYLE){return DwtListView.prototype._getHeaderSashLocation.call(this) | |
}var d=Dwt.toWindow(c,0,0); | |
var a=Dwt.toWindow(this._chooserParent.getHtmlElement(),0,0); | |
if(!this._tmpPoint){this._tmpPoint=new DwtPoint() | |
}this._tmpPoint.x=d.x-a.x; | |
this._tmpPoint.y=d.y-a.y; | |
return this._tmpPoint | |
} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtPropertySheet")){DwtPropertySheet=function(f,e,d,a){if(arguments.length==0){return | |
}e=e||"DwtPropertySheet"; | |
DwtComposite.call(this,{parent:f,className:e,posStyle:d}); | |
this._labelSide=a||DwtPropertySheet.DEFAULT; | |
this._propertyIdCount=0; | |
this._propertyList=[]; | |
this._propertyMap={}; | |
this._tabGroup=new DwtTabGroup(this.toString()); | |
this._tableEl=document.createElement("TABLE"); | |
this._tableEl.cellSpacing=6; | |
var c=this.getHtmlElement(); | |
c.appendChild(this._tableEl); | |
this._setAllowSelection() | |
}; | |
DwtPropertySheet.prototype=new DwtComposite; | |
DwtPropertySheet.prototype.constructor=DwtPropertySheet; | |
DwtPropertySheet.prototype.toString=function(){return"DwtPropertySheet" | |
}; | |
DwtPropertySheet.RIGHT="right"; | |
DwtPropertySheet.LEFT="left"; | |
DwtPropertySheet.DEFAULT=DwtPropertySheet.LEFT; | |
DwtPropertySheet.prototype._labelCssClass="Label"; | |
DwtPropertySheet.prototype._valueCssClass="Field"; | |
DwtPropertySheet.prototype.addProperty=function(h,i,g){var f=this._tableEl.rows.length; | |
var k=this._tableEl.insertRow(-1); | |
k.vAlign=this._vAlign?this._vAlign:"top"; | |
var a=Dwt.getNextId(),d=Dwt.getNextId(),e; | |
if(this._labelSide==DwtPropertySheet.LEFT){this._insertLabel(k,h,g,a,d); | |
e=this._insertValue(k,i,g,a,d) | |
}else{this._insertValue(k,i,g,a,d); | |
e=this._insertLabel(k,h,g,a,d) | |
}var c=this._propertyIdCount++; | |
var j={id:c,index:f,row:k,visible:true,labelId:a,valueId:d,tabValue:e}; | |
this._propertyList.push(j); | |
this._propertyMap[c]=j; | |
return c | |
}; | |
DwtPropertySheet.prototype._insertLabel=function(h,c,g,f,a){var e=h.insertCell(-1); | |
e.className=this._labelCssClass; | |
e.id=f; | |
e.setAttribute("for",a); | |
if(this._labelSide!=DwtPropertySheet.LEFT){e.width="100%"; | |
e.style.textAlign="left" | |
}e.innerHTML=c; | |
if(g){var d=this._tableEl.ownerDocument.createElement("SUP"); | |
d.innerHTML="*"; | |
e.insertBefore(d,e.firstChild) | |
}}; | |
DwtPropertySheet.prototype._insertValue=function(h,e,g,f,a){var d=h.insertCell(-1); | |
d.className=this._valueCssClass; | |
d.id=a; | |
if(!e){d.innerHTML=" " | |
}else{if(e.isDwtControl){d.appendChild(e.getHtmlElement()); | |
this._tabGroup.addMember(e); | |
var c=e.getInputElement&&e.getInputElement(); | |
if(c){c.setAttribute("aria-labelledby",f) | |
}}else{if(e.nodeType==AjxUtil.ELEMENT_NODE){d.appendChild(e); | |
this._addTabGroupMemberEl(d); | |
e.setAttribute("aria-labelledby",f) | |
}else{d.innerHTML=String(e); | |
this._addTabGroupMemberEl(d); | |
d.setAttribute("aria-labelledby",f); | |
e=d | |
}}}return e | |
}; | |
DwtPropertySheet.prototype._addTabGroupMemberEl=function(d,c){var e=this; | |
function a(f){if(f.children.length>0){AjxUtil.foreach(f.children,function(g){a(g) | |
}) | |
}else{if(AjxUtil.isBoolean(c)){e.noTab=!c | |
}else{e._makeFocusable(f); | |
e._tabGroup.addMember(f) | |
}}}a(d,c) | |
}; | |
DwtPropertySheet.prototype.getTabGroupMember=function(){return this._tabGroup | |
}; | |
DwtPropertySheet.prototype.getProperty=function(a){return this._propertyMap[a] | |
}; | |
DwtPropertySheet.prototype.removeProperty=function(g){var f=this._propertyMap[g]; | |
if(f){var c=f.index; | |
if(f.visible){var e=this.__getTableIndex(c); | |
var d=this._tableEl.rows[e]; | |
d.parentNode.removeChild(d) | |
}f.row=null; | |
for(var a=c+1; | |
a<this._propertyList.length; | |
a++){this._propertyList[a].index-- | |
}this._propertyList.splice(c,1); | |
delete this._propertyMap[g] | |
}}; | |
DwtPropertySheet.prototype.setPropertyVisible=function(e,c){var d=this._propertyMap[e]; | |
if(d&&d.visible!==c){d.visible=c; | |
Dwt.setVisible(this._tableEl.rows[d.index],c); | |
var a=d.tabValue; | |
if(a.isDwtControl){a.noTab=!c | |
}else{this._addTabGroupMemberEl(a,!c) | |
}}} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtPropertyPage")){DwtPropertyPage=function(a){if(arguments.length==0){return | |
}a=Dwt.getParams(arguments,DwtPropertyPage.PARAMS); | |
a.className=a.className||"DwtPropertyPage"; | |
DwtComposite.call(this,a); | |
this._fieldIds=new Object(); | |
this._fildDivIds=new Object(); | |
this._isDirty=false; | |
this._tabGroup=new DwtTabGroup(this.toString()) | |
}; | |
DwtPropertyPage.prototype=new DwtComposite; | |
DwtPropertyPage.prototype.constructor=DwtPropertyPage; | |
DwtPropertyPage.prototype.toString=function(){return"DwtPropertyPage" | |
}; | |
DwtPropertyPage.PARAMS=DwtComposite.PARAMS; | |
DwtPropertyPage.prototype.setDirty=function(a){this._isDirty=a | |
}; | |
DwtPropertyPage.prototype.isDirty=function(){return this._isDirty | |
}; | |
DwtPropertyPage.prototype.getTabGroupMember=function(){return this._tabGroup | |
}; | |
DwtPropertyPage.prototype._installOnKeyUpHandler=function(d,a){if(!d){return | |
}var c=null; | |
c=document.getElementById(this._fieldIds[d]); | |
if(c){Dwt.setHandler(c,DwtEvent.ONKEYUP,a?a:this._onKeyUp); | |
c._view=this; | |
c._field=d | |
}}; | |
DwtPropertyPage.prototype._installOnClickHandler=function(d,a){if(!d){return | |
}var c=document.getElementById(this._fieldIds[d]); | |
if(c){Dwt.setHandler(c,DwtEvent.ONCLICK,a?a:this._onClick); | |
c._view=this; | |
c._field=d | |
}}; | |
DwtPropertyPage.prototype._onClick=function(a){this._view.setDirty(true); | |
return true | |
}; | |
DwtPropertyPage.prototype._onKeyUp=function(a){this._view.setDirty(true); | |
return true | |
}; | |
DwtPropertyPage.prototype._installOnChangeHandler=function(d,a){if(!d){return | |
}var c=null; | |
c=document.getElementById(this._fieldIds[d]); | |
if(c){Dwt.setHandler(c,DwtEvent.ONCHANGE,a?a:this._onChange); | |
c._view=this; | |
c._field=d | |
}}; | |
DwtPropertyPage._onChange=function(a){this._view.setDirty(true); | |
return true | |
}; | |
DwtPropertyPage.prototype._onChange2=function(a){this.setDirty(true); | |
return true | |
}; | |
DwtPropertyPage.prototype._addDwtSelectEntryRow=function(f,g,d,a,e){var c="30ex"; | |
if(e){c=e | |
}d[a++]="<tr valign='center'>"; | |
a=this._addDwtSelectEntryCell(f,g,d,a,c); | |
d[a++]="</tr>"; | |
return a | |
}; | |
DwtPropertyPage.prototype._addDwtSelectEntryCell=function(d,e,c,a,g){var f=Dwt.getNextId(); | |
this._fieldIds[d]=f; | |
if(e){c[a++]="<td align='left' style='width:"+g+"'>"; | |
c[a++]=AjxStringUtil.htmlEncode(e)+":"; | |
c[a++]="</td>" | |
}c[a++]="<td align='left'>"; | |
c[a++]="<div id='"+f+"'></div></td>"; | |
return a | |
}; | |
DwtPropertyPage.prototype._addBoolEntryRow=function(d,e,c,a,f){c[a++]="<tr valign='center'>"; | |
a=this._addBoolEntryCell(d,e,c,a,f); | |
c[a++]="</tr>"; | |
return a | |
}; | |
DwtPropertyPage.prototype._addBoolEntryCell=function(e,f,c,a,h){var g=Dwt.getNextId(); | |
this._fieldIds[e]=g; | |
var d="20ex"; | |
if(h){d=h | |
}if(f){c[a++]="<td style='width:"+d+";' align='left'>"; | |
c[a++]=AjxStringUtil.htmlEncode(f)+":"; | |
c[a++]="</td>" | |
}c[a++]="<td align='left'>"; | |
c[a++]="<input type='checkbox' id='"+g+"'>"; | |
c[a++]="</td>"; | |
return a | |
}; | |
DwtPropertyPage.prototype._addTextAreaEntryRow=function(e,f,c,a,h){var d="on"; | |
if(h){d="off" | |
}var g=Dwt.getNextId(); | |
this._fieldIds[e]=g; | |
c[a++]="<tr valign='center'>"; | |
c[a++]="<td align='left' style='width:60ex;'>"; | |
c[a++]=AjxStringUtil.htmlEncode(f)+":"; | |
c[a++]="</td></tr>"; | |
c[a++]="<tr valign='center'><td align='left' style='width:60ex;'><textarea wrap='"+d+"' rows='8' cols ='60' id='"; | |
c[a++]=g; | |
c[a++]="'/></textarea></td></tr>"; | |
return a | |
}; | |
DwtPropertyPage.prototype._addEntryRow=function(h,g,c,j,e,f,a,i,d){c[j++]="<tr valign='center'>"; | |
j=this._addEntryCell(h,g,c,j,e,f,a,i,d); | |
c[j++]="</tr>"; | |
return j | |
}; | |
DwtPropertyPage.prototype._addEntryCell=function(j,i,e,l,g,h,c,k,f){if(g==null){g="text" | |
}if(h==null){h=35 | |
}var d="20ex"; | |
if(k){d=k | |
}var a=Dwt.getNextId(); | |
this._fieldIds[j]=a; | |
if(i){e[l++]="<td align='left' style='width:"+d+";'>"; | |
e[l++]=AjxStringUtil.htmlEncode(i)+":"; | |
e[l++]="</td>" | |
}e[l++]="<td "; | |
if(f){e[l++]="class='redAsteric' " | |
}e[l++]=" align='left'><input autocomplete='off' size='"+h+"' type='"+g+"' id='"; | |
e[l++]=a; | |
e[l++]="'"; | |
if(f){e[l++]="/>*" | |
}else{e[l++]="/> " | |
}if(c!=null){e[l++]=c | |
}e[l++]="</td>"; | |
return l | |
}; | |
DwtPropertyPage.prototype._createHTML=function(){} | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtTabView")){DwtTabView=function(c){if(arguments.length==0){return | |
}c=Dwt.getParams(arguments,DwtListView.PARAMS); | |
c.className=c.className||"ZTabView"; | |
c.posStyle=c.posStyle||DwtControl.ABSOLUTE_STYLE; | |
DwtComposite.call(this,c); | |
this._stateChangeEv=new DwtEvent(true); | |
this._stateChangeEv.item=this; | |
this._tabs=[]; | |
this._tabIx=1; | |
this._createHtml(); | |
var a=[this.toString(),this._htmlElId].join(" "); | |
this._tabGroup=new DwtTabGroup(a); | |
this._tabGroup.addMember(this._tabBar) | |
}; | |
DwtTabView.PARAMS=["parent","className","posStyle"]; | |
DwtTabView.prototype=new DwtComposite; | |
DwtTabView.prototype.constructor=DwtTabView; | |
DwtTabView.prototype.isDwtTabView=true; | |
DwtTabView.prototype.toString=function(){return"DwtTabView" | |
}; | |
DwtTabView.prototype.role="tablist"; | |
DwtTabView.Z_ACTIVE_TAB=Dwt.Z_VIEW+10; | |
DwtTabView.Z_HIDDEN_TAB=Dwt.Z_HIDDEN; | |
DwtTabView.Z_TAB_PANEL=Dwt.Z_VIEW+20; | |
DwtTabView.Z_CURTAIN=Dwt.Z_CURTAIN; | |
DwtTabView.prototype.TEMPLATE="dwt.Widgets#ZTabView"; | |
DwtTabView.prototype.addStateChangeListener=function(a){this._eventMgr.addListener(DwtEvent.STATE_CHANGE,a) | |
}; | |
DwtTabView.prototype.removeStateChangeListener=function(a){this._eventMgr.removeListener(DwtEvent.STATE_CHANGE,a) | |
}; | |
DwtTabView.prototype.getTabGroupMember=function(){return this._tabGroup | |
}; | |
DwtTabView.prototype.addTab=function(g,f,d,a){var e=this._tabIx++; | |
this._tabs[e]={title:g,button:this._tabBar.addButton(e,g,d,a)}; | |
this.setTabView(e,f); | |
if(e==1){var c=this.getTabView(e); | |
if(c){f.showMe() | |
}this._currentTabKey=e; | |
this.switchToTab(e) | |
}else{if(f&&!(f instanceof AjxCallback)){f.hideMe(); | |
Dwt.setVisible(f.getHtmlElement(),false) | |
}}this._tabBar.addSelectionListener(e,new AjxListener(this,DwtTabView.prototype._tabButtonListener)); | |
return e | |
}; | |
DwtTabView.prototype.enable=function(a){for(var d in this._tabs){var c=this._tabs[d].button; | |
if(c){c.setEnabled(a) | |
}}}; | |
DwtTabView.prototype.getCurrentTab=function(){return this._currentTabKey | |
}; | |
DwtTabView.prototype.getNumTabs=function(){return(this._tabs.length-1) | |
}; | |
DwtTabView.prototype.getTab=function(a){return(this._tabs&&this._tabs[a])?this._tabs[a]:null | |
}; | |
DwtTabView.prototype.getTabBar=function(){return this._tabBar | |
}; | |
DwtTabView.prototype.getTabTitle=function(a){return(this._tabs&&this._tabs[a])?this._tabs[a]["title"]:null | |
}; | |
DwtTabView.prototype.getTabButton=function(a){return(this._tabs&&this._tabs[a])?this._tabs[a]["button"]:null | |
}; | |
DwtTabView.prototype.setTabView=function(e,d){var c=this.getTab(e); | |
c.view=d; | |
if(d&&!(d instanceof AjxCallback)){this._pageEl.appendChild(d.getHtmlElement()); | |
d._tabKey=e; | |
if(e==this._currentTabKey){var a=d.getTabGroupMember(); | |
this._tabGroup.replaceMember(c.tabGroup,a); | |
c.tabGroup=a | |
}}}; | |
DwtTabView.prototype.getTabView=function(e){var d=this.getTab(e); | |
var c=d&&d.view; | |
if(c instanceof AjxCallback){var f=c; | |
c=f.run(e); | |
this.setTabView(e,c); | |
var a=this._getTabSize(); | |
c.setSize(a.x,a.y); | |
c.setAttribute("aria-labelledby",d.button.getHTMLElId()) | |
}return c | |
}; | |
DwtTabView.prototype.switchToTab=function(d){var c=this.getTab(d); | |
if(c){var a=this.getTab(this._currentTabKey); | |
if(a){this._tabGroup.removeMember(a.tabGroup) | |
}this._showTab(d); | |
this._tabBar.openTab(d); | |
if(!c.tabGroup&&c.view){c.tabGroup=c.view.getTabGroupMember() | |
}this._tabGroup.addMember(c.tabGroup); | |
if(this._eventMgr.isListenerRegistered(DwtEvent.STATE_CHANGE)){this._eventMgr.notifyListeners(DwtEvent.STATE_CHANGE,this._stateChangeEv) | |
}}}; | |
DwtTabView.prototype.setBounds=function(c,e,d,a){DwtComposite.prototype.setBounds.call(this,c,e,d,a); | |
this._resetTabSizes(d,a) | |
}; | |
DwtTabView.prototype.getActiveView=function(){return this._tabs[this._currentTabKey].view | |
}; | |
DwtTabView.prototype.getKeyMapName=function(){return DwtKeyMap.MAP_TAB_VIEW | |
}; | |
DwtTabView.prototype.resetKeyBindings=function(){var c=this.shell.getKeyboardMgr(); | |
if(c.isEnabled()){var f=c.__keyMapMgr; | |
if(!f){return | |
}var e=this.getNumTabs(); | |
var h=f.getKeySequences(DwtKeyMap.MAP_TAB_VIEW,"GoToTab"); | |
for(var a=0; | |
a<h.length; | |
a++){var j=h[a]; | |
for(var d=1; | |
d<=e; | |
d++){var g=48+d; | |
var l=j.replace(/NNN/,g); | |
f.setMapping(DwtKeyMap.MAP_TAB_VIEW,l,"GoToTab"+d) | |
}}f.reloadMap(DwtKeyMap.MAP_TAB_VIEW) | |
}}; | |
DwtTabView.prototype.handleKeyAction=function(e){switch(e){case DwtKeyMap.NEXT_TAB:var d=this.getCurrentTab(); | |
if(d<this.getNumTabs()){this.switchToTab(d+1) | |
}break; | |
case DwtKeyMap.PREV_TAB:var d=this.getCurrentTab(); | |
if(d>1){this.switchToTab(d-1) | |
}break; | |
default:var c=e.match(DwtKeyMap.GOTO_TAB_RE); | |
if(c&&c.length){var a=c[1]; | |
if((a<=this.getNumTabs())&&(a!=this.getCurrentTab())){this.switchToTab(a) | |
}}else{return false | |
}}return true | |
}; | |
DwtTabView.prototype._resetTabSizes=function(d,a){if(this._tabs&&this._tabs.length){for(var f in this._tabs){var c=this._tabs[f].view; | |
if(c&&!(c instanceof AjxCallback)){var e; | |
e=e||a-Dwt.getSize(this._tabBarEl).y; | |
c.resetSize(d,e) | |
}}}}; | |
DwtTabView.prototype._getTabSize=function(){var c=this.getSize(); | |
var d=c.x||this.getHtmlElement().clientWidth; | |
var a=c.y||this.getHtmlElement().clientHeight; | |
var e=this._tabBar.getSize(); | |
var f=e.y||this._tabBar.getHtmlElement().clientHeight; | |
return new DwtPoint(d,(a-f)) | |
}; | |
DwtTabView.prototype._createHtml=function(a){this._createHtmlFromTemplate(a||this.TEMPLATE,{id:this._htmlElId}) | |
}; | |
DwtTabView.prototype._createHtmlFromTemplate=function(a,c){DwtComposite.prototype._createHtmlFromTemplate.call(this,a,c); | |
this._tabBarEl=document.getElementById(c.id+"_tabbar"); | |
this._tabBar=new DwtTabBar(this); | |
this._tabBar.reparentHtmlElement(this._tabBarEl); | |
this._pageEl=document.getElementById(c.id+"_page") | |
}; | |
DwtTabView.prototype._showTab=function(c){if(this._tabs&&this._tabs[c]){this._currentTabKey=c; | |
this._hideAllTabs(); | |
var a=this.getTabView(c); | |
if(a){a.setVisible(true); | |
a.showMe() | |
}}}; | |
DwtTabView.prototype._hideAllTabs=function(){if(this._tabs&&this._tabs.length){for(var c in this._tabs){var a=this._tabs[c].view; | |
if(a&&!(a instanceof AjxCallback)){a.hideMe(); | |
Dwt.setVisible(a.getHtmlElement(),false) | |
}}}}; | |
DwtTabView.prototype._tabButtonListener=function(a){this.switchToTab(a.item.getData("tabKey")) | |
}; | |
DwtTabViewPage=function(d,c,a,f){if(arguments.length==0){return | |
}var e=Dwt.getParams(arguments,DwtTabViewPage.PARAMS); | |
e.className=e.className||"ZTabPage"; | |
e.posStyle=e.posStyle||DwtControl.ABSOLUTE_STYLE; | |
e.id=f||null; | |
this._rendered=true; | |
DwtPropertyPage.call(this,e); | |
this._createHtml(); | |
this.getHtmlElement().style.overflowY="auto"; | |
this.getHtmlElement().style.overflowX="visible"; | |
if(e.contentTemplate){this.getContentHtmlElement().innerHTML=AjxTemplate.expand(e.contentTemplate,this._htmlElId) | |
}}; | |
DwtTabViewPage.prototype=new DwtPropertyPage; | |
DwtTabViewPage.prototype.constructor=DwtTabViewPage; | |
DwtTabViewPage.prototype.isDwtTabViewPage=true; | |
DwtTabViewPage.prototype.toString=function(){return"DwtTabViewPage" | |
}; | |
DwtTabViewPage.prototype.role="tabpanel"; | |
DwtTabViewPage.prototype.TEMPLATE="dwt.Widgets#ZTabPage"; | |
DwtTabViewPage.PARAMS=DwtPropertyPage.PARAMS.concat("contentTemplate"); | |
DwtTabViewPage.prototype.getContentHtmlElement=function(){return this._contentEl||this.getHtmlElement() | |
}; | |
DwtTabViewPage.prototype.showMe=function(){this.setZIndex(DwtTabView.Z_ACTIVE_TAB); | |
this.setAttribute("aria-selected",true); | |
if(this.parent.getHtmlElement().offsetHeight>80){this._contentEl.style.height=this.parent.getHtmlElement().offsetHeight-80 | |
}else{var c=parseInt(this.parent.getHtmlElement().style.height); | |
var a=AjxStringUtil.getUnitsFromSizeString(this.parent.getHtmlElement().style.height); | |
if(c>80){this._contentEl.style.height=(Number(c-80).toString()+a) | |
}}this._contentEl.style.width=this.parent.getHtmlElement().style.width | |
}; | |
DwtTabViewPage.prototype.hideMe=function(){this.setZIndex(DwtTabView.Z_HIDDEN_TAB); | |
this.setAttribute("aria-selected",false) | |
}; | |
DwtTabViewPage.prototype.resetSize=function(c,a){this.setSize(c,a) | |
}; | |
DwtTabViewPage.prototype._createHtml=function(a){this._createHtmlFromTemplate(a||this.TEMPLATE,{id:this._htmlElId}) | |
}; | |
DwtTabViewPage.prototype._createHtmlFromTemplate=function(a,c){DwtPropertyPage.prototype._createHtmlFromTemplate.call(this,a,c); | |
this._contentEl=document.getElementById(c.id+"_content")||this.getHtmlElement() | |
}; | |
DwtTabBar=function(d,c,e){if(arguments.length==0){return | |
}this._buttons=[]; | |
this._btnStyle=e||"ZTab"; | |
this._btnImage=null; | |
this._currentTabKey=1; | |
var a=c||"ZTabBar"; | |
DwtToolBar.call(this,{parent:d,className:a,posStyle:DwtControl.STATIC_STYLE}); | |
if(AjxEnv.isFirefox){if(this._prefixEl&&this.constructor==DwtTabBar){this._prefixEl.style.cssFloat="none" | |
}}}; | |
DwtTabBar.prototype=new DwtToolBar; | |
DwtTabBar.prototype.constructor=DwtTabBar; | |
DwtTabBar.prototype.TEMPLATE="dwt.Widgets#ZTabBar"; | |
DwtTabBar.prototype.toString=function(){return"DwtTabBar" | |
}; | |
DwtTabBar.prototype.getCurrentTab=function(){return this._currentTabKey | |
}; | |
DwtTabBar.prototype.addStateChangeListener=function(a){this._eventMgr.addListener(DwtEvent.STATE_CHANGE,a) | |
}; | |
DwtTabBar.prototype.removeStateChangeListener=function(a){this._eventMgr.removeListener(DwtEvent.STATE_CHANGE,a) | |
}; | |
DwtTabBar.prototype.addSelectionListener=function(c,a){this._buttons[c].addSelectionListener(a) | |
}; | |
DwtTabBar.prototype.removeSelectionListener=function(c,a){this._buttons[c].removeSelectionListener(a) | |
}; | |
DwtTabBar.prototype.addButton=function(g,f,h,d){var c=this._buttons[g]=new DwtTabButton(this,h,d); | |
this._buttons[g].addSelectionListener(new AjxListener(this,DwtTabBar._setActiveTab)); | |
if(this._btnImage!=null){c.setImage(this._btnImage) | |
}if(f!=null){c.setText(f) | |
}c.setEnabled(true); | |
c.setData("tabKey",g); | |
if(parseInt(g)==1){this.openTab(g,true) | |
}var a=this.__getButtonIndex(this._currentTabKey); | |
if(a!=-1){var e=this.__getButtonIndex(g); | |
if(e==a+1){Dwt.addClass(c.getHtmlElement(),DwtTabBar.SELECTED_NEXT) | |
}}return c | |
}; | |
DwtTabBar.prototype.getButton=function(a){return(this._buttons[a])?this._buttons[a]:null | |
}; | |
DwtTabBar.prototype.openTab=function(a,f){this._currentTabKey=a; | |
var e=this._buttons.length; | |
for(var c=0; | |
c<e; | |
c++){if(c==a){continue | |
}var d=this._buttons[c]; | |
if(d){this.__markPrevNext(c,false); | |
d.setClosed() | |
}}var d=this._buttons[a]; | |
if(d){d.setOpen(); | |
this.__markPrevNext(a,true) | |
}if(!f&&this._eventMgr.isListenerRegistered(DwtEvent.STATE_CHANGE)){this._eventMgr.notifyListeners(DwtEvent.STATE_CHANGE,this._stateChangeEv) | |
}}; | |
DwtTabBar._setActiveTab=function(d){var a; | |
if(d&&d.item){a=d.item.getData("tabKey") | |
}else{if(d&&d.target){var c=d.target; | |
while(c.tagName!="TABLE"&&c.offsetParent){c=c.offsetParent | |
}a=c.getAttribute("tabKey"); | |
if(a==null){return false | |
}}else{return false | |
}}this.openTab(a) | |
}; | |
DwtTabButton=function(e,f,c,d){if(arguments.length==0){return | |
}var a=d||"ZTab"; | |
DwtButton.call(this,{parent:e,className:a,id:f,index:c}) | |
}; | |
DwtTabButton.prototype=new DwtButton; | |
DwtTabButton.prototype.constructor=DwtTabButton; | |
DwtTabButton.prototype.TEMPLATE="dwt.Widgets#ZTab"; | |
DwtTabButton.prototype.isDwtTabButton=true; | |
DwtTabButton.prototype.toString=function(){return"DwtTabButton" | |
}; | |
DwtTabButton.prototype.role="tab"; | |
DwtTabButton.prototype.setOpen=function(){this._isSelected=true; | |
this.setDisplayState(DwtControl.SELECTED) | |
}; | |
DwtTabButton.prototype.setClosed=function(){this._isSelected=false; | |
this.setDisplayState(DwtControl.NORMAL) | |
}; | |
DwtTabButton.prototype.setDisplayState=function(a){if(this._isSelected&&a!=DwtControl.SELECTED){a=[DwtControl.SELECTED,a].join(" ") | |
}DwtButton.prototype.setDisplayState.call(this,a) | |
}; | |
DwtTabBarFloat=function(c,a,d){if(arguments.length==0){return | |
}DwtTabBar.call(this,c,a,d) | |
}; | |
DwtTabBarFloat.prototype=new DwtTabBar; | |
DwtTabBarFloat.prototype.constructor=DwtTabBarFloat; | |
DwtTabBarFloat.prototype.TEMPLATE="dwt.Widgets#ZTabBarFloat"; | |
DwtTabBarFloat.prototype.addButton=function(f,e,g){var c=this._buttons[f]=new DwtTabButtonFloat(this,g); | |
this._buttons[f].addSelectionListener(new AjxListener(this,DwtTabBar._setActiveTab)); | |
if(this._btnImage!=null){c.setImage(this._btnImage) | |
}if(e!=null){c.setText(e) | |
}c.setEnabled(true); | |
c.setData("tabKey",f); | |
if(parseInt(f)==1){this.openTab(f,true) | |
}var a=this.__getButtonIndex(this._currentTabKey); | |
if(a!=-1){var d=this.__getButtonIndex(f); | |
if(d==a+1){Dwt.addClass(c.getHtmlElement(),DwtTabBar.SELECTED_NEXT) | |
}}return c | |
}; | |
DwtTabButtonFloat=function(a,c){DwtTabButton.call(this,a,c,undefined,"ZTab") | |
}; | |
DwtTabButtonFloat.prototype=new DwtTabButton; | |
DwtTabButtonFloat.prototype.constructor=DwtTabButtonFloat; | |
DwtTabButtonFloat.prototype.TEMPLATE="dwt.Widgets#ZTabFloat" | |
}if(AjxPackage.define("ajax.dwt.widgets.DwtTimeSelect")){DwtTimeSelect=function(a,c){DwtComposite.call(this,{parent:a,className:"DwtTimeSelect"}); | |
this.id=c; | |
this._isLocale24Hour=true; | |
this._createSelects() | |
}; | |
DwtTimeSelect.START=1; | |
DwtTimeSelect.END=2; | |
DwtTimeSelect.HOUR=1; | |
DwtTimeSelect.MINUTE=2; | |
DwtTimeSelect.AMPM=3; | |
DwtTimeSelect.getDateFromFields=function(a,e,d,c){a=Number(a); | |
if(d){if(d=="AM"||d===0){a=(a==12)?0:a | |
}else{if(d=="PM"||d==1){a=(a<12)?a+12:a | |
}}}c=c?c:new Date(); | |
c.setHours(a,Number(e),0,0); | |
return c | |
}; | |
DwtTimeSelect.parse=function(d){var c; | |
var e=d.toLowerCase(); | |
if(e===AjxMsg.midnight.toLowerCase()||e===AjxMsg.noon.toLowerCase()){c=new Date(); | |
c.setMinutes(0); | |
c.setSeconds(0); | |
c.setHours(e===AjxMsg.noon.toLowerCase()?12:0) | |
}else{var a=AjxDateFormat.getTimeInstance(AjxDateFormat.SHORT); | |
c=a.parse(d)||AjxDateFormat.parseTime(d) | |
}return c | |
}; | |
DwtTimeSelect.format=function(a){if(a.getHours()==0&&a.getMinutes()==0){return AjxMsg.midnight | |
}else{if(a.getHours()==12&&a.getMinutes()==0){return AjxMsg.noon | |
}else{return AjxDateFormat.getTimeInstance(AjxDateFormat.SHORT).format(a) | |
}}}; | |
DwtTimeSelect.adjustStartEnd=function(s,a,j,k,n){var h=s._args.selectObj; | |
var c=AjxDateUtil.simpleParseDateStr(k.value); | |
var q=AjxDateUtil.simpleParseDateStr(n.value); | |
var g=k.value; | |
var d=n.value; | |
if(h.id==DwtTimeSelect.START){var o=(h.compId==DwtTimeSelect.HOUR)?s._args.oldValue:a.getHours(); | |
var l=(h.compId==DwtTimeSelect.MINUTE)?s._args.oldValue:a.getMinutes(); | |
var e=(h.compId==DwtTimeSelect.AMPM)?s._args.oldValue:a.getAmPm(); | |
var m=DwtTimeSelect.getDateFromFields(o,l,e,c).getTime(); | |
var i=DwtTimeSelect.getDateFromFields(a.getHours(),a.getMinutes(),a.getAmPm(),c).getTime(); | |
var p=DwtTimeSelect.getDateFromFields(j.getHours(),j.getMinutes(),j.getAmPm(),q).getTime(); | |
var t=p-m; | |
if(!t){return null | |
}var f=i+t; | |
var r=new Date(f); | |
j.set(r); | |
n.value=AjxDateUtil.simpleComputeDateStr(r); | |
if(n.value!=d){return n | |
}}else{return null | |
}}; | |
DwtTimeSelect.validStartEnd=function(i,c,e,h){var a=AjxDateUtil.simpleParseDateStr(i.value); | |
var g=AjxDateUtil.simpleParseDateStr(c.value); | |
if(a&&g){if((a.valueOf()>g.valueOf())){return false | |
}if(a.getFullYear()>9999||g.getFullYear()>9999){return false | |
}if(e&&h){var d=DwtTimeSelect.getDateFromFields(e.getHours(),e.getMinutes(),e.getAmPm(),a).getTime(); | |
var f=DwtTimeSelect.getDateFromFields(h.getHours(),h.getMinutes(),h.getAmPm(),g).getTime(); | |
if(d>f){return false | |
}}}else{return false | |
}return true | |
}; | |
DwtTimeSelect.prototype=new DwtComposite; | |
DwtTimeSelect.prototype.constructor=DwtTimeSelect; | |
DwtTimeSelect.prototype.isDwtTimeSelect=true; | |
DwtTimeSelect.prototype.toString=function(){return"DwtTimeSelect" | |
}; | |
DwtTimeSelect.prototype.set=function(e){var d=0,g=0,f=0; | |
var c=this.isLocale24Hour(); | |
var a=e.getHours(); | |
if(!c&&a>12){d=a-13 | |
}else{if(!c&&a==0){d=this.getHourSelectSize()-1 | |
}else{d=c?a:a-1 | |
}}g=Math.floor(e.getMinutes()/5); | |
if(!c){f=(e.getHours()>=12)?1:0 | |
}this.setSelected(d,g,f) | |
}; | |
DwtTimeSelect.prototype.getValue=function(a){return(DwtTimeSelect.getDateFromFields(this.getHours(),this.getMinutes(),this.getAmPm(),a)) | |
}; | |
DwtTimeSelect.prototype.getHours=function(){return this._hourSelect.getValue() | |
}; | |
DwtTimeSelect.prototype.getMinutes=function(){return this._minuteSelect.getValue() | |
}; | |
DwtTimeSelect.prototype.getAmPm=function(){return this._amPmSelect?this._amPmSelect.getValue():null | |
}; | |
DwtTimeSelect.prototype.setSelected=function(a,d,c){this._hourSelect.setSelected(a); | |
this._minuteSelect.setSelected(d); | |
if(!this._isLocale24Hour){this._amPmSelect.setSelected(c) | |
}}; | |
DwtTimeSelect.prototype.addChangeListener=function(a){this._hourSelect.addChangeListener(a); | |
this._minuteSelect.addChangeListener(a); | |
if(this._amPmSelect){this._amPmSelect.addChangeListener(a) | |
}}; | |
DwtTimeSelect.prototype.isLocale24Hour=function(){return this._isLocale24Hour | |
}; | |
DwtTimeSelect.prototype.getHourSelectSize=function(){return this._hourSelect.size() | |
}; | |
DwtTimeSelect.prototype.getMinuteSelectSize=function(){return this._minuteSelect.size() | |
}; | |
DwtTimeSelect.prototype.getSelectedHourIdx=function(){return this._hourSelect.getSelectedIndex() | |
}; | |
DwtTimeSelect.prototype.getSelectedMinuteIdx=function(){return this._minuteSelect.getSelectedIndex() | |
}; | |
DwtTimeSelect.prototype.getSelectedAmPmIdx=function(){return this._amPmSelect?this._amPmSelect.getSelectedIndex():0 | |
}; | |
DwtTimeSelect.prototype.setEnabled=function(a){DwtComposite.prototype.setEnabled.call(this,a); | |
this._hourSelect.setEnabled(a); | |
this._minuteSelect.setEnabled(a); | |
if(this._amPmSelect){this._amPmSelect.setEnabled(a) | |
}}; | |
DwtTimeSelect.prototype._createSelects=function(){this._hourSelectId=Dwt.getNextId(); | |
this._minuteSelectId=Dwt.getNextId(); | |
this._amPmSelectId=Dwt.getNextId(); | |
var e=AjxDateFormat.getTimeInstance(AjxDateFormat.SHORT); | |
var g=0; | |
var n=0; | |
var m=[]; | |
var k=0; | |
m[k++]="<table border=0 cellpadding=0 cellspacing=0><tr>"; | |
for(var h=0; | |
h<e._segments.length; | |
h++){var l=e._segments[h]._s; | |
if(e._segments[h] instanceof AjxFormat.TextSegment){var a=AjxStringUtil.trim(l); | |
if(a.length){m[k++]="<td class='TextPadding ZmFieldLabel'>"; | |
m[k++]=l; | |
m[k++]="</td>" | |
}}else{if(l.charAt(0)=="h"||l.charAt(0)=="H"){g=h; | |
m[k++]="<td width=42 id='"; | |
m[k++]=this._hourSelectId; | |
m[k++]="'></td>" | |
}else{if(l.charAt(0)=="m"){n=h; | |
m[k++]="<td width=42 id='"; | |
m[k++]=this._minuteSelectId; | |
m[k++]="'></td>" | |
}else{if(l=="a"){this._isLocale24Hour=false; | |
m[k++]="<td width=42 id='"; | |
m[k++]=this._amPmSelectId; | |
m[k++]="'></td>" | |
}}}}}m[k++]="</tr></table>"; | |
this.getHtmlElement().innerHTML=m.join(""); | |
var d=new Date(); | |
var c=this._isLocale24Hour?0:1; | |
var f=this._isLocale24Hour?24:13; | |
this._hourSelect=new DwtSelect({parent:this}); | |
this._hourSelect.id=this.id; | |
this._hourSelect.compId=DwtTimeSelect.HOUR; | |
for(var k=c; | |
k<f; | |
k++){d.setHours(k); | |
var o=e._segments[g].format(d); | |
this._hourSelect.addOption(o,false,k) | |
}this._hourSelect.reparentHtmlElement(this._hourSelectId); | |
delete this._hourSelectId; | |
this._minuteSelect=new DwtSelect({parent:this}); | |
this._minuteSelect.id=this.id; | |
this._minuteSelect.compId=DwtTimeSelect.MINUTE; | |
for(var k=0; | |
k<60; | |
k=k+5){d.setMinutes(k); | |
var o=e._segments[n].format(d); | |
this._minuteSelect.addOption(o,false,k) | |
}this._minuteSelect.reparentHtmlElement(this._minuteSelectId); | |
delete this._minuteSelectId; | |
if(!this._isLocale24Hour){this._amPmSelect=new DwtSelect({parent:this}); | |
this._amPmSelect.id=this.id; | |
this._amPmSelect.compId=DwtTimeSelect.AMPM; | |
this._amPmSelect.addOption(I18nMsg.periodAm,false,"AM"); | |
this._amPmSelect.addOption(I18nMsg.periodPm,false,"PM"); | |
this._amPmSelect.reparentHtmlElement(this._amPmSelectId); | |
delete this._amPmSelectId | |
}}; | |
DwtTimeInput=function(d,f,a,c){var e={parent:d,id:"DwtTimeInput",className:"DwtTimeInput"}; | |
if(a){e.parentElement=a | |
}DwtComposite.call(this,e); | |
this._interval=c||DwtTimeInput.FIFTEEN_MIN_INTERVAL; | |
this.id=f; | |
this._isLocale24Hour=true; | |
this._createSelects(); | |
this._useTextInput=true | |
}; | |
DwtTimeInput.THIRTY_MIN_INTERVAL=30; | |
DwtTimeInput.FIFTEEN_MIN_INTERVAL=15; | |
DwtTimeInput.START=1; | |
DwtTimeInput.END=2; | |
DwtTimeInput.HOUR=1; | |
DwtTimeInput.MINUTE=2; | |
DwtTimeInput.AMPM=3; | |
DwtTimeInput.ROWS=8; | |
DwtTimeInput.DEFAULT_TOP_ROW=8; | |
DwtTimeInput.getDateFromFields=function(c,a){var d=DwtTimeSelect.parse(c); | |
a=a||new Date(); | |
a.setHours(d.getHours(),d.getMinutes(),0,0); | |
return a | |
}; | |
DwtTimeInput.adjustStartEnd=function(s,a,i,k,m,q,g){var c=AjxDateUtil.simpleParseDateStr(k.value); | |
var p=AjxDateUtil.simpleParseDateStr(m.value); | |
var e=k.value; | |
var d=m.value; | |
if(g==DwtTimeInput.START){var j=q?q.startTimeStr:a.getTimeString(); | |
var l=DwtTimeInput.getDateFromFields(j,c).getTime(); | |
var h=DwtTimeInput.getDateFromFields(a.getTimeString(),c).getTime(); | |
var o=DwtTimeInput.getDateFromFields(i.getTimeString(),p).getTime(); | |
var t=o-l; | |
if(!t){return null | |
}var f=h+t; | |
var r=new Date(f); | |
a.set(new Date(h)); | |
i.set(r); | |
m.value=AjxDateUtil.simpleComputeDateStr(r); | |
if(m.value!=d){return m | |
}}else{if(g==DwtTimeInput.END){var j=q?q.endTimeStr:i.getTimeString(); | |
var o=DwtTimeInput.getDateFromFields(j,p).getTime(); | |
var f=DwtTimeInput.getDateFromFields(i.getTimeString(),p).getTime(); | |
var l=DwtTimeInput.getDateFromFields(a.getTimeString(),c).getTime(); | |
var t=o-l; | |
if(!t){return null | |
}if(f<l){var h=f-t; | |
var n=new Date(h); | |
a.set(n); | |
i.set(new Date(f)); | |
k.value=AjxDateUtil.simpleComputeDateStr(n); | |
m.value=AjxDateUtil.simpleComputeDateStr(new Date(f)) | |
}if(k.value!=e){return k | |
}}else{return null | |
}}}; | |
DwtTimeInput.validStartEnd=function(f,a,k,j){var e=AjxDateUtil.simpleParseDateStr(f.value); | |
var h=AjxDateUtil.simpleParseDateStr(a.value); | |
if(e&&h){if((e.valueOf()>h.valueOf())){return false | |
}if(e.getFullYear()>9999||h.getFullYear()>9999){return false | |
}if(k&&j){var d=k.getTimeString(); | |
var i=j.getTimeString(); | |
if(d&&i){var c=DwtTimeInput.getDateFromFields(d,e).getTime(); | |
var g=DwtTimeInput.getDateFromFields(i,h).getTime(); | |
if(c>g){return false | |
}}}}else{return false | |
}return true | |
}; | |
DwtTimeInput.prototype=new DwtComposite; | |
DwtTimeInput.prototype.constructor=DwtTimeInput; | |
DwtTimeInput.prototype.isDwtTimeInput=true; | |
DwtTimeInput.prototype.toString=function(){return"DwtTimeInput" | |
}; | |
DwtTimeInput.prototype.set=function(a){var c=DwtTimeSelect.format(a); | |
this._originalTimeStr=c; | |
this._timeSelectInput.setValue(c); | |
this._scrollToValue(c) | |
}; | |
DwtTimeInput.prototype.setValue=function(c){var a=DwtTimeSelect.parse(c); | |
if(!a){c="" | |
}this._originalTimeStr=c; | |
this._timeSelectInput.setValue(c); | |
this._scrollToValue(c) | |
}; | |
DwtTimeInput.prototype._scrollToValue=function(c){var a=this.getTimeIndex(c); | |
if(a!==null){this._hoursSelectMenu.setSelectedItem(a) | |
}}; | |
DwtTimeInput.prototype.getValue=function(a){var c=DwtTimeSelect.parse(this._timeSelectInput.getValue()); | |
if(!c){c=new Date() | |
}a=a||new Date(); | |
if(AjxDateUtil.isDayShifted(a)){AjxDateUtil.rollToNextDay(a) | |
}a.setHours(c.getHours(),c.getMinutes(),0,0); | |
return a | |
}; | |
DwtTimeInput.prototype.getHours=function(){var a=this.getValue(); | |
return a?a.getHours():null | |
}; | |
DwtTimeInput.prototype.getMinutes=function(){var a=this.getValue(); | |
return a?a.getMinutes():null | |
}; | |
DwtTimeInput.prototype.addChangeListener=function(a){this._changeListener=a; | |
var c=AjxCallback.simpleClosure(this.handleTimeChange,this,a); | |
this._timeSelectInput.setHandler(DwtEvent.ONBLUR,c) | |
}; | |
DwtTimeInput.prototype.handleTimeChange=function(c,a){var f=this._timeSelectInput.getValue(); | |
var e=DwtTimeSelect.parse(f); | |
if(!e){this.setValue(this._originalTimeStr) | |
}else{this._scrollToValue(f) | |
}c.run(a,this.id) | |
}; | |
DwtTimeInput.prototype.correctTimeString=function(f,c){var a=f.split(":"); | |
if(!a){return c | |
}var d=(a.length&&a[0]!=null)?parseInt(a[0].replace(/\D/g,"")):null; | |
var e=(a.length>1&&a[1]!=null)?parseInt(a[1].replace(/\D/g,"")):0; | |
if(!d){d=(d==0)?0:c.getHours() | |
}if(!e){e=0 | |
}c.setHours(d,e,0,0); | |
return c | |
}; | |
DwtTimeInput.prototype.isLocale24Hour=function(){return this._isLocale24Hour | |
}; | |
DwtTimeInput.prototype.setEnabled=function(a){DwtComposite.prototype.setEnabled.call(this,a); | |
this._timeSelectInput.setEnabled(a); | |
this._timeSelectBtn.setEnabled(a) | |
}; | |
DwtTimeInput.prototype._timeButtonListener=function(o){var c=AjxDateFormat.getTimeInstance(AjxDateFormat.SHORT); | |
var f; | |
if(!this._menuItemsAdded){var e,d,i,h,p,g,n,a=new Date(),m=this._timeSelectBtn,l=new AjxListener(this,this._timeSelectionListener); | |
for(e=0; | |
e<24; | |
e++){a.setHours(e); | |
a.setMinutes(0); | |
i=new DwtMenuItem({parent:this._hoursSelectMenu,style:DwtMenuItem.NO_STYLE}); | |
p=c.format(a); | |
this.putTimeIndex(p,e); | |
if(e==0||e==12){p=DwtTimeSelect.format(a); | |
this.putTimeIndex(p,e) | |
}i.setText(p); | |
i.setData("value",e*60); | |
if(l){i.addSelectionListener(l) | |
}if(e==DwtTimeInput.DEFAULT_TOP_ROW){f=i | |
}g=60/this._interval; | |
n=new DwtMenu({parent:i,style:DwtMenu.DROPDOWN_CENTERV_STYLE,layout:DwtMenu.LAYOUT_CASCADE,maxRows:g,congruent:true}); | |
i.setMenu(n,true); | |
i.setSelectableWithSubmenu(true); | |
n.dontStealFocus(true); | |
for(d=1; | |
d<g; | |
d++){a.setMinutes(d*this._interval); | |
h=new DwtMenuItem({parent:n,style:DwtMenuItem.NO_STYLE}); | |
h.setText(c.format(a)); | |
h.setData("value",e*60+d*this._interval); | |
if(l){h.addSelectionListener(l) | |
}}}this._hoursSelectMenu.setWidth(m.getW()+this._timeSelectInput.getW()); | |
this._menuItemsAdded=true | |
}o.item.popup(); | |
if(f){this._hoursSelectMenu.scrollToItem(f) | |
}this._scrollToValue(c.format(this.getValue())) | |
}; | |
DwtTimeInput.prototype._timeSelectionListener=function(a){if(a.item&&a.item instanceof DwtMenuItem){this._timeSelectInput.setValue(a.item.getText()); | |
this._timeSelectValue=a.item.getData("value"); | |
if(this._changeListener){this._changeListener.run(a,this.id) | |
}return | |
}}; | |
DwtTimeInput.prototype.getTimeString=function(){var a=DwtTimeSelect.parse(this._timeSelectInput.getValue()); | |
return a?this._timeSelectInput.getValue():"" | |
}; | |
DwtTimeInput.prototype.getInputField=function(){return this._timeSelectInput | |
}; | |
DwtTimeInput.prototype.getTabGroupMember=function(){return this._tabGroup | |
}; | |
DwtTimeInput.prototype.putTimeIndex=function(c,a){this._timeIndex[c.replace(/\:\d\d/,":00").replace(/\s/,"").toLowerCase()]=a | |
}; | |
DwtTimeInput.prototype.getTimeIndex=function(c){if(!c){return null | |
}var a=this._timeIndex[c.replace(/\:\d\d/,":00").replace(/\s/,"").toLowerCase()]; | |
return(a||a===0)?a:null | |
}; | |
DwtTimeInput.prototype._createSelects=function(){var f=(this.id===DwtTimeSelect.START?ZmMsg.startTime:this.id===DwtTimeSelect.END?ZmMsg.endTime:ZmMsg.time); | |
this.getHtmlElement().innerHTML=AjxTemplate.expand("calendar.Appointment#ApptTimeInput",{id:this._htmlElId}); | |
var d=Dwt.getNextId("DwtTimeInputSelect_"); | |
if(this.id&&this.id==DwtTimeSelect.START){d+="_startTimeInput" | |
}else{if(this.id&&this.id==DwtTimeSelect.END){d+="_endTimeInput" | |
}}var h={parent:this,parentElement:(this._htmlElId+"_timeSelectInput"),type:DwtInputField.STRING,label:f,errorIconStyle:DwtInputField.ERROR_ICON_NONE,validationStyle:DwtInputField.CONTINUAL_VALIDATION,inputId:d,id:Dwt.getNextId("DwtTimeInputField_")}; | |
this._timeSelectInput=new DwtInputField(h); | |
var e=this._timeSelectInput.getInputElement(); | |
Dwt.setSize(e,"80px","2rem"); | |
e.typeId=this.id; | |
var a=new AjxListener(this,this._timeButtonListener); | |
var g=this._htmlElId+"_timeSelectBtn"; | |
var c=this._timeSelectBtn=new DwtButton({parent:this}); | |
c.addDropDownSelectionListener(a); | |
c.setData(Dwt.KEY_ID,g); | |
c.setSize("20"); | |
c.setAttribute("aria-label",f); | |
this._timeIndex={}; | |
this._hoursSelectMenu=new DwtMenu({parent:c,style:DwtMenu.DROPDOWN_STYLE,layout:DwtMenu.LAYOUT_SCROLL,maxRows:DwtTimeInput.ROWS}); | |
c.setMenu(this._hoursSelectMenu,true,false,false,true); | |
this._menuItemsAdded=false; | |
c.reparentHtmlElement(g); | |
this._tabGroup=new DwtTabGroup(this.getHTMLElId()); | |
this._tabGroup.addMember(this._timeSelectInput); | |
this._tabGroup.addMember(c) | |
} | |
}if(AjxPackage.define("zimbraMail.share.view.ZmTagsHelper")){ZmTagsHelper={}; | |
ZmTagsHelper.setupListeners=function(a){if(appCtxt.isChildWindow){return | |
}a._tagList=appCtxt.getTagTree(); | |
if(!a._tagList){return | |
}a._tagChangeHandler=ZmTagsHelper._tagChangeListener.bind(a); | |
a._tagList.addChangeListener(a._tagChangeHandler) | |
}; | |
ZmTagsHelper.disposeListeners=function(a){a._tagList&&a._tagList.removeChangeListener(a._tagChangeHandler) | |
}; | |
ZmTagsHelper.getTagsHtml=function(k,c){if(!appCtxt.get(ZmSetting.TAGGING_ENABLED)){return"" | |
}var e=k&&k.getSortedTags(); | |
if(!(e&&e.length)){return"" | |
}var g=[],f=0; | |
for(var d=0; | |
d<e.length; | |
d++){var a=e[d]; | |
if(!a){continue | |
}var h={tag:a,html:g,i:f,view:c,readOnly:k.isReadOnly()}; | |
f=ZmTagsHelper._getTagHtml(h) | |
}return g.join("") | |
}; | |
ZmTagsHelper._getTagHtml=function(h){h=h||{}; | |
var a=h.tag; | |
var e=h.html; | |
var d=h.i; | |
var c=h.view; | |
var j=h.readOnly; | |
var g=['ZmTagsHelper._tagClick("',c._htmlElId,'","',AjxStringUtil.encodeQuotes(a.name),'");'].join(""); | |
var f=['ZmTagsHelper._removeTagClick("',c._htmlElId,'","',AjxStringUtil.encodeQuotes(a.name),'");'].join(""); | |
e[d++]="<span class='addrBubble TagBubble' notoggle=1 >"; | |
e[d++]="<span class='TagImage' onclick='"; | |
e[d++]=g; | |
e[d++]="'>"; | |
e[d++]=AjxImg.getImageHtml({imageName:a.getIconWithColor(),altText:ZmMsg.tag}); | |
e[d++]="</span>"; | |
e[d++]="<span class='TagName' onclick='"; | |
e[d++]=g; | |
e[d++]="'>"; | |
e[d++]=AjxStringUtil.htmlEncodeSpace(a.name); | |
e[d++]=" </span>"; | |
if(!j){e[d++]="<span class='ImgBubbleDelete' onclick='"; | |
e[d++]=f; | |
e[d++]="'>"; | |
e[d++]="</span>" | |
}e[d++]="</span>"; | |
return d | |
}; | |
ZmTagsHelper._tagClick=function(e,d){if(appCtxt.isChildWindow){return | |
}var a=ZmTagsHelper._getTagClicked(d); | |
var c=DwtControl.fromElementId(e); | |
appCtxt.getSearchController().search({query:a.createQuery(),inclSharedItems:true}) | |
}; | |
ZmTagsHelper._removeTagClick=function(e,d){var a=ZmTagsHelper._getTagClicked(d); | |
var c=DwtControl.fromElementId(e); | |
ZmListController.prototype._doTag.call(c._controller,c._item,a,false) | |
}; | |
ZmTagsHelper._getTagClicked=function(a){var c=appCtxt.getAccountTagList(); | |
return c.getByNameOrRemote(a) | |
}; | |
ZmTagsHelper._tagChangeListener=function(a){if(a.type!=ZmEvent.S_TAG){return | |
}if(this._disposed){return | |
}if(a.event==ZmEvent.E_DELETE||a.event==ZmEvent.E_MODIFY||a.event==ZmEvent.E_CREATE){this._setTags() | |
}} | |
}}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function (global, factory) { | |
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : | |
typeof define === 'function' && define.amd ? define(factory) : | |
(global.DOMPurify = factory()); | |
}(this, (function () { 'use strict'; | |
var freeze$1 = Object.freeze || function (x) { | |
return x; | |
}; | |
var html = freeze$1(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']); | |
// SVG | |
var svg = freeze$1(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'audio', 'canvas', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'video', 'view', 'vkern']); | |
var svgFilters = freeze$1(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']); | |
var mathMl = freeze$1(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover']); | |
var text = freeze$1(['#text']); | |
var freeze$2 = Object.freeze || function (x) { | |
return x; | |
}; | |
var html$1 = freeze$2(['accept', 'action', 'align', 'alt', 'autocomplete', 'background', 'bgcolor', 'border', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'coords', 'crossorigin', 'datetime', 'default', 'dir', 'disabled', 'download', 'enctype', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'integrity', 'ismap', 'label', 'lang', 'list', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'name', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'type', 'usemap', 'valign', 'value', 'width', 'xmlns']); | |
var svg$1 = freeze$2(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'tabindex', 'targetx', 'targety', 'transform', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']); | |
var mathMl$1 = freeze$2(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']); | |
var xml = freeze$2(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']); | |
var hasOwnProperty = Object.hasOwnProperty; | |
var setPrototypeOf = Object.setPrototypeOf; | |
var _ref$1 = typeof Reflect !== 'undefined' && Reflect; | |
var apply$1 = _ref$1.apply; | |
if (!apply$1) { | |
apply$1 = function apply(fun, thisValue, args) { | |
return fun.apply(thisValue, args); | |
}; | |
} | |
/* Add properties to a lookup table */ | |
function addToSet(set, array) { | |
if (setPrototypeOf) { | |
// Make 'in' and truthy checks like Boolean(set.constructor) | |
// independent of any properties defined on Object.prototype. | |
// Prevent prototype setters from intercepting set as a this value. | |
setPrototypeOf(set, null); | |
} | |
var l = array.length; | |
while (l--) { | |
var element = array[l]; | |
if (typeof element === 'string') { | |
var lcElement = element.toLowerCase(); | |
if (lcElement !== element) { | |
// Config presets (e.g. tags.js, attrs.js) are immutable. | |
if (!Object.isFrozen(array)) { | |
array[l] = lcElement; | |
} | |
element = lcElement; | |
} | |
} | |
set[element] = true; | |
} | |
return set; | |
} | |
/* Shallow clone an object */ | |
function clone(object) { | |
var newObject = {}; | |
var property = void 0; | |
for (property in object) { | |
if (apply$1(hasOwnProperty, object, [property])) { | |
newObject[property] = object[property]; | |
} | |
} | |
return newObject; | |
} | |
var seal = Object.seal || function (x) { | |
return x; | |
}; | |
var MUSTACHE_EXPR = seal(/\{\{[\s\S]*|[\s\S]*\}\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode | |
var ERB_EXPR = seal(/<%[\s\S]*|[\s\S]*%>/gm); | |
var DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]/); // eslint-disable-line no-useless-escape | |
var ARIA_ATTR = seal(/^aria-[\-\w]+$/); // eslint-disable-line no-useless-escape | |
var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i // eslint-disable-line no-useless-escape | |
); | |
var IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i); | |
var ATTR_WHITESPACE = seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g // eslint-disable-line no-control-regex | |
); | |
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; | |
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } | |
var _ref = typeof Reflect !== 'undefined' && Reflect; | |
var apply = _ref.apply; | |
var arraySlice = Array.prototype.slice; | |
var freeze = Object.freeze; | |
var getGlobal = function getGlobal() { | |
return typeof window === 'undefined' ? null : window; | |
}; | |
if (!apply) { | |
apply = function apply(fun, thisValue, args) { | |
return fun.apply(thisValue, args); | |
}; | |
} | |
/** | |
* Creates a no-op policy for internal use only. | |
* Don't export this function outside this module! | |
* @param {?TrustedTypePolicyFactory} trustedTypes The policy factory. | |
* @param {Document} document The document object (to determine policy name suffix) | |
* @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types | |
* are not supported). | |
*/ | |
var _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, document) { | |
if ((typeof trustedTypes === 'undefined' ? 'undefined' : _typeof(trustedTypes)) !== 'object' || typeof trustedTypes.createPolicy !== 'function') { | |
return null; | |
} | |
// Allow the callers to control the unique policy name | |
// by adding a data-tt-policy-suffix to the script element with the DOMPurify. | |
// Policy creation with duplicate names throws in Trusted Types. | |
var suffix = null; | |
var ATTR_NAME = 'data-tt-policy-suffix'; | |
if (document.currentScript && document.currentScript.hasAttribute(ATTR_NAME)) { | |
suffix = document.currentScript.getAttribute(ATTR_NAME); | |
} | |
var policyName = 'dompurify' + (suffix ? '#' + suffix : ''); | |
try { | |
return trustedTypes.createPolicy(policyName, { | |
createHTML: function createHTML(html$$1) { | |
return html$$1; | |
} | |
}); | |
} catch (error) { | |
// Policy creation failed (most likely another DOMPurify script has | |
// already run). Skip creating the policy, as this will only cause errors | |
// if TT are enforced. | |
console.warn('TrustedTypes policy ' + policyName + ' could not be created.'); | |
return null; | |
} | |
}; | |
function createDOMPurify() { | |
var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal(); | |
var DOMPurify = function DOMPurify(root) { | |
return createDOMPurify(root); | |
}; | |
/** | |
* Version label, exposed for easier checks | |
* if DOMPurify is up to date or not | |
*/ | |
DOMPurify.version = '2.0.7'; | |
/** | |
* Array of elements that DOMPurify removed during sanitation. | |
* Empty if nothing was removed. | |
*/ | |
DOMPurify.removed = []; | |
if (!window || !window.document || window.document.nodeType !== 9) { | |
// Not running in a browser, provide a factory function | |
// so that you can pass your own Window | |
DOMPurify.isSupported = false; | |
return DOMPurify; | |
} | |
var originalDocument = window.document; | |
var useDOMParser = false; | |
var removeTitle = false; | |
var document = window.document; | |
var DocumentFragment = window.DocumentFragment, | |
HTMLTemplateElement = window.HTMLTemplateElement, | |
Node = window.Node, | |
NodeFilter = window.NodeFilter, | |
_window$NamedNodeMap = window.NamedNodeMap, | |
NamedNodeMap = _window$NamedNodeMap === undefined ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap, | |
Text = window.Text, | |
Comment = window.Comment, | |
DOMParser = window.DOMParser, | |
TrustedTypes = window.TrustedTypes; | |
// As per issue #47, the web-components registry is inherited by a | |
// new document created via createHTMLDocument. As per the spec | |
// (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries) | |
// a new empty registry is used when creating a template contents owner | |
// document, so we use that as our parent document to ensure nothing | |
// is inherited. | |
if (typeof HTMLTemplateElement === 'function') { | |
var template = document.createElement('template'); | |
if (template.content && template.content.ownerDocument) { | |
document = template.content.ownerDocument; | |
} | |
} | |
var trustedTypesPolicy = _createTrustedTypesPolicy(TrustedTypes, originalDocument); | |
var emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : ''; | |
var _document = document, | |
implementation = _document.implementation, | |
createNodeIterator = _document.createNodeIterator, | |
getElementsByTagName = _document.getElementsByTagName, | |
createDocumentFragment = _document.createDocumentFragment; | |
var importNode = originalDocument.importNode; | |
var hooks = {}; | |
/** | |
* Expose whether this browser supports running the full DOMPurify. | |
*/ | |
DOMPurify.isSupported = implementation && typeof implementation.createHTMLDocument !== 'undefined' && document.documentMode !== 9; | |
var MUSTACHE_EXPR$$1 = MUSTACHE_EXPR, | |
ERB_EXPR$$1 = ERB_EXPR, | |
DATA_ATTR$$1 = DATA_ATTR, | |
ARIA_ATTR$$1 = ARIA_ATTR, | |
IS_SCRIPT_OR_DATA$$1 = IS_SCRIPT_OR_DATA, | |
ATTR_WHITESPACE$$1 = ATTR_WHITESPACE; | |
var IS_ALLOWED_URI$$1 = IS_ALLOWED_URI; | |
/** | |
* We consider the elements and attributes below to be safe. Ideally | |
* don't add any new ones but feel free to remove unwanted ones. | |
*/ | |
/* allowed element names */ | |
var ALLOWED_TAGS = null; | |
var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(html), _toConsumableArray(svg), _toConsumableArray(svgFilters), _toConsumableArray(mathMl), _toConsumableArray(text))); | |
/* Allowed attribute names */ | |
var ALLOWED_ATTR = null; | |
var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray(html$1), _toConsumableArray(svg$1), _toConsumableArray(mathMl$1), _toConsumableArray(xml))); | |
/* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */ | |
var FORBID_TAGS = null; | |
/* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */ | |
var FORBID_ATTR = null; | |
/* Decide if ARIA attributes are okay */ | |
var ALLOW_ARIA_ATTR = true; | |
/* Decide if custom data attributes are okay */ | |
var ALLOW_DATA_ATTR = true; | |
/* Decide if unknown protocols are okay */ | |
var ALLOW_UNKNOWN_PROTOCOLS = false; | |
/* Output should be safe for jQuery's $() factory? */ | |
var SAFE_FOR_JQUERY = false; | |
/* Output should be safe for common template engines. | |
* This means, DOMPurify removes data attributes, mustaches and ERB | |
*/ | |
var SAFE_FOR_TEMPLATES = false; | |
/* Decide if document with <html>... should be returned */ | |
var WHOLE_DOCUMENT = false; | |
/* Track whether config is already set on this instance of DOMPurify. */ | |
var SET_CONFIG = false; | |
/* Decide if all elements (e.g. style, script) must be children of | |
* document.body. By default, browsers might move them to document.head */ | |
var FORCE_BODY = false; | |
/* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html | |
* string (or a TrustedHTML object if Trusted Types are supported). | |
* If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead | |
*/ | |
var RETURN_DOM = false; | |
/* Decide if a DOM `DocumentFragment` should be returned, instead of a html | |
* string (or a TrustedHTML object if Trusted Types are supported) */ | |
var RETURN_DOM_FRAGMENT = false; | |
/* If `RETURN_DOM` or `RETURN_DOM_FRAGMENT` is enabled, decide if the returned DOM | |
* `Node` is imported into the current `Document`. If this flag is not enabled the | |
* `Node` will belong (its ownerDocument) to a fresh `HTMLDocument`, created by | |
* DOMPurify. */ | |
var RETURN_DOM_IMPORT = false; | |
/* Try to return a Trusted Type object instead of a string, retrun a string in | |
* case Trusted Types are not supported */ | |
var RETURN_TRUSTED_TYPE = false; | |
/* Output should be free from DOM clobbering attacks? */ | |
var SANITIZE_DOM = true; | |
/* Keep element content when removing element? */ | |
var KEEP_CONTENT = true; | |
/* If a `Node` is passed to sanitize(), then performs sanitization in-place instead | |
* of importing it into a new Document and returning a sanitized copy */ | |
var IN_PLACE = false; | |
/* Allow usage of profiles like html, svg and mathMl */ | |
var USE_PROFILES = {}; | |
/* Tags to ignore content of when KEEP_CONTENT is true */ | |
var FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']); | |
/* Tags that are safe for data: URIs */ | |
var DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image']); | |
/* Attributes safe for values like "javascript:" */ | |
var URI_SAFE_ATTRIBUTES = null; | |
var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'summary', 'title', 'value', 'style', 'xmlns']); | |
/* Keep a reference to config to pass to hooks */ | |
var CONFIG = null; | |
/* Ideally, do not touch anything below this line */ | |
/* ______________________________________________ */ | |
var formElement = document.createElement('form'); | |
/** | |
* _parseConfig | |
* | |
* @param {Object} cfg optional config literal | |
*/ | |
// eslint-disable-next-line complexity | |
var _parseConfig = function _parseConfig(cfg) { | |
if (CONFIG && CONFIG === cfg) { | |
return; | |
} | |
/* Shield configuration object from tampering */ | |
if (!cfg || (typeof cfg === 'undefined' ? 'undefined' : _typeof(cfg)) !== 'object') { | |
cfg = {}; | |
} | |
/* Set configuration parameters */ | |
ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS; | |
ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR; | |
URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR) : DEFAULT_URI_SAFE_ATTRIBUTES; | |
FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS) : {}; | |
FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR) : {}; | |
USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false; | |
ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true | |
ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true | |
ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false | |
SAFE_FOR_JQUERY = cfg.SAFE_FOR_JQUERY || false; // Default false | |
SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false | |
WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false | |
RETURN_DOM = cfg.RETURN_DOM || false; // Default false | |
RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false | |
RETURN_DOM_IMPORT = cfg.RETURN_DOM_IMPORT || false; // Default false | |
RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false | |
FORCE_BODY = cfg.FORCE_BODY || false; // Default false | |
SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true | |
KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true | |
IN_PLACE = cfg.IN_PLACE || false; // Default false | |
IS_ALLOWED_URI$$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$$1; | |
if (SAFE_FOR_TEMPLATES) { | |
ALLOW_DATA_ATTR = false; | |
} | |
if (RETURN_DOM_FRAGMENT) { | |
RETURN_DOM = true; | |
} | |
/* Parse profile info */ | |
if (USE_PROFILES) { | |
ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(text))); | |
ALLOWED_ATTR = []; | |
if (USE_PROFILES.html === true) { | |
addToSet(ALLOWED_TAGS, html); | |
addToSet(ALLOWED_ATTR, html$1); | |
} | |
if (USE_PROFILES.svg === true) { | |
addToSet(ALLOWED_TAGS, svg); | |
addToSet(ALLOWED_ATTR, svg$1); | |
addToSet(ALLOWED_ATTR, xml); | |
} | |
if (USE_PROFILES.svgFilters === true) { | |
addToSet(ALLOWED_TAGS, svgFilters); | |
addToSet(ALLOWED_ATTR, svg$1); | |
addToSet(ALLOWED_ATTR, xml); | |
} | |
if (USE_PROFILES.mathMl === true) { | |
addToSet(ALLOWED_TAGS, mathMl); | |
addToSet(ALLOWED_ATTR, mathMl$1); | |
addToSet(ALLOWED_ATTR, xml); | |
} | |
} | |
/* Merge configuration parameters */ | |
if (cfg.ADD_TAGS) { | |
if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) { | |
ALLOWED_TAGS = clone(ALLOWED_TAGS); | |
} | |
addToSet(ALLOWED_TAGS, cfg.ADD_TAGS); | |
} | |
if (cfg.ADD_ATTR) { | |
if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) { | |
ALLOWED_ATTR = clone(ALLOWED_ATTR); | |
} | |
addToSet(ALLOWED_ATTR, cfg.ADD_ATTR); | |
} | |
if (cfg.ADD_URI_SAFE_ATTR) { | |
addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR); | |
} | |
/* Add #text in case KEEP_CONTENT is set to true */ | |
if (KEEP_CONTENT) { | |
ALLOWED_TAGS['#text'] = true; | |
} | |
/* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */ | |
if (WHOLE_DOCUMENT) { | |
addToSet(ALLOWED_TAGS, ['html', 'head', 'body']); | |
} | |
/* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */ | |
if (ALLOWED_TAGS.table) { | |
addToSet(ALLOWED_TAGS, ['tbody']); | |
delete FORBID_TAGS.tbody; | |
} | |
// Prevent further manipulation of configuration. | |
// Not available in IE8, Safari 5, etc. | |
if (freeze) { | |
freeze(cfg); | |
} | |
CONFIG = cfg; | |
}; | |
/** | |
* _forceRemove | |
* | |
* @param {Node} node a DOM node | |
*/ | |
var _forceRemove = function _forceRemove(node) { | |
DOMPurify.removed.push({ element: node }); | |
try { | |
node.parentNode.removeChild(node); | |
} catch (error) { | |
node.outerHTML = emptyHTML; | |
} | |
}; | |
/** | |
* _removeAttribute | |
* | |
* @param {String} name an Attribute name | |
* @param {Node} node a DOM node | |
*/ | |
var _removeAttribute = function _removeAttribute(name, node) { | |
try { | |
DOMPurify.removed.push({ | |
attribute: node.getAttributeNode(name), | |
from: node | |
}); | |
} catch (error) { | |
DOMPurify.removed.push({ | |
attribute: null, | |
from: node | |
}); | |
} | |
node.removeAttribute(name); | |
}; | |
/** | |
* _initDocument | |
* | |
* @param {String} dirty a string of dirty markup | |
* @return {Document} a DOM, filled with the dirty markup | |
*/ | |
var _initDocument = function _initDocument(dirty) { | |
/* Create a HTML document */ | |
var doc = void 0; | |
var leadingWhitespace = void 0; | |
if (FORCE_BODY) { | |
dirty = '<remove></remove>' + dirty; | |
} else { | |
/* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */ | |
var matches = dirty.match(/^[\s]+/); | |
leadingWhitespace = matches && matches[0]; | |
if (leadingWhitespace) { | |
dirty = dirty.slice(leadingWhitespace.length); | |
} | |
} | |
/* Use DOMParser to workaround Firefox bug (see comment below) */ | |
if (useDOMParser) { | |
try { | |
doc = new DOMParser().parseFromString(dirty, 'text/html'); | |
} catch (error) {} | |
} | |
/* Remove title to fix a mXSS bug in older MS Edge */ | |
if (removeTitle) { | |
addToSet(FORBID_TAGS, ['title']); | |
} | |
/* Otherwise use createHTMLDocument, because DOMParser is unsafe in | |
Safari (see comment below) */ | |
if (!doc || !doc.documentElement) { | |
doc = implementation.createHTMLDocument(''); | |
var _doc = doc, | |
body = _doc.body; | |
body.parentNode.removeChild(body.parentNode.firstElementChild); | |
body.outerHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty; | |
} | |
if (dirty && leadingWhitespace) { | |
doc.body.insertBefore(document.createTextNode(leadingWhitespace), doc.body.childNodes[0] || null); | |
} | |
/* Work on whole document or just its body */ | |
return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0]; | |
}; | |
// Firefox uses a different parser for innerHTML rather than | |
// DOMParser (see https://bugzilla.mozilla.org/show_bug.cgi?id=1205631) | |
// which means that you *must* use DOMParser, otherwise the output may | |
// not be safe if used in a document.write context later. | |
// | |
// So we feature detect the Firefox bug and use the DOMParser if necessary. | |
// | |
// Chrome 77 and other versions ship an mXSS bug that caused a bypass to | |
// happen. We now check for the mXSS trigger and react accordingly. | |
if (DOMPurify.isSupported) { | |
(function () { | |
try { | |
var doc = _initDocument('<svg><p><textarea><img src="</textarea><img src=x abc=1//">'); | |
if (doc.querySelector('svg img')) { | |
useDOMParser = true; | |
} | |
} catch (error) {} | |
})(); | |
(function () { | |
try { | |
var doc = _initDocument('<x/><title></title><img>'); | |
if (/<\/title/.test(doc.querySelector('title').innerHTML)) { | |
removeTitle = true; | |
} | |
} catch (error) {} | |
})(); | |
} | |
/** | |
* _createIterator | |
* | |
* @param {Document} root document/fragment to create iterator for | |
* @return {Iterator} iterator instance | |
*/ | |
var _createIterator = function _createIterator(root) { | |
return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, function () { | |
return NodeFilter.FILTER_ACCEPT; | |
}, false); | |
}; | |
/** | |
* _isClobbered | |
* | |
* @param {Node} elm element to check for clobbering attacks | |
* @return {Boolean} true if clobbered, false if safe | |
*/ | |
var _isClobbered = function _isClobbered(elm) { | |
if (elm instanceof Text || elm instanceof Comment) { | |
return false; | |
} | |
if (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string') { | |
return true; | |
} | |
return false; | |
}; | |
/** | |
* _isNode | |
* | |
* @param {Node} obj object to check whether it's a DOM node | |
* @return {Boolean} true is object is a DOM node | |
*/ | |
var _isNode = function _isNode(obj) { | |
return (typeof Node === 'undefined' ? 'undefined' : _typeof(Node)) === 'object' ? obj instanceof Node : obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && typeof obj.nodeType === 'number' && typeof obj.nodeName === 'string'; | |
}; | |
/** | |
* _executeHook | |
* Execute user configurable hooks | |
* | |
* @param {String} entryPoint Name of the hook's entry point | |
* @param {Node} currentNode node to work on with the hook | |
* @param {Object} data additional hook parameters | |
*/ | |
var _executeHook = function _executeHook(entryPoint, currentNode, data) { | |
if (!hooks[entryPoint]) { | |
return; | |
} | |
hooks[entryPoint].forEach(function (hook) { | |
hook.call(DOMPurify, currentNode, data, CONFIG); | |
}); | |
}; | |
/** | |
* _sanitizeElements | |
* | |
* @protect nodeName | |
* @protect textContent | |
* @protect removeChild | |
* | |
* @param {Node} currentNode to check for permission to exist | |
* @return {Boolean} true if node was killed, false if left alive | |
*/ | |
// eslint-disable-next-line complexity | |
var _sanitizeElements = function _sanitizeElements(currentNode) { | |
var content = void 0; | |
/* Execute a hook if present */ | |
_executeHook('beforeSanitizeElements', currentNode, null); | |
/* Check if element is clobbered or can clobber */ | |
if (_isClobbered(currentNode)) { | |
_forceRemove(currentNode); | |
return true; | |
} | |
/* Now let's check the element's type and name */ | |
var tagName = currentNode.nodeName.toLowerCase(); | |
/* Execute a hook if present */ | |
_executeHook('uponSanitizeElement', currentNode, { | |
tagName: tagName, | |
allowedTags: ALLOWED_TAGS | |
}); | |
/* Take care of an mXSS pattern using p, br inside svg, math */ | |
if ((tagName === 'svg' || tagName === 'math') && currentNode.querySelectorAll('p, br').length !== 0) { | |
_forceRemove(currentNode); | |
return true; | |
} | |
/* Remove element if anything forbids its presence */ | |
if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) { | |
/* Keep content except for black-listed elements */ | |
if (KEEP_CONTENT && !FORBID_CONTENTS[tagName] && typeof currentNode.insertAdjacentHTML === 'function') { | |
try { | |
var htmlToInsert = currentNode.innerHTML; | |
currentNode.insertAdjacentHTML('AfterEnd', trustedTypesPolicy ? trustedTypesPolicy.createHTML(htmlToInsert) : htmlToInsert); | |
} catch (error) {} | |
} | |
_forceRemove(currentNode); | |
return true; | |
} | |
/* Remove in case a noscript/noembed XSS is suspected */ | |
if (tagName === 'noscript' && /<\/noscript/i.test(currentNode.innerHTML)) { | |
_forceRemove(currentNode); | |
return true; | |
} | |
if (tagName === 'noembed' && /<\/noembed/i.test(currentNode.innerHTML)) { | |
_forceRemove(currentNode); | |
return true; | |
} | |
/* Convert markup to cover jQuery behavior */ | |
if (SAFE_FOR_JQUERY && !currentNode.firstElementChild && (!currentNode.content || !currentNode.content.firstElementChild) && /</g.test(currentNode.textContent)) { | |
DOMPurify.removed.push({ element: currentNode.cloneNode() }); | |
if (currentNode.innerHTML) { | |
currentNode.innerHTML = currentNode.innerHTML.replace(/</g, '<'); | |
} else { | |
currentNode.innerHTML = currentNode.textContent.replace(/</g, '<'); | |
} | |
} | |
/* Sanitize element content to be template-safe */ | |
if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) { | |
/* Get the element's text content */ | |
content = currentNode.textContent; | |
content = content.replace(MUSTACHE_EXPR$$1, ' '); | |
content = content.replace(ERB_EXPR$$1, ' '); | |
if (currentNode.textContent !== content) { | |
DOMPurify.removed.push({ element: currentNode.cloneNode() }); | |
currentNode.textContent = content; | |
} | |
} | |
/* Execute a hook if present */ | |
_executeHook('afterSanitizeElements', currentNode, null); | |
return false; | |
}; | |
/** | |
* _isValidAttribute | |
* | |
* @param {string} lcTag Lowercase tag name of containing element. | |
* @param {string} lcName Lowercase attribute name. | |
* @param {string} value Attribute value. | |
* @return {Boolean} Returns true if `value` is valid, otherwise false. | |
*/ | |
// eslint-disable-next-line complexity | |
var _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) { | |
/* Make sure attribute cannot clobber */ | |
if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) { | |
return false; | |
} | |
/* Allow valid data-* attributes: At least one character after "-" | |
(https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes) | |
XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804) | |
We don't need to check the value; it's always URI safe. */ | |
if (ALLOW_DATA_ATTR && DATA_ATTR$$1.test(lcName)) { | |
// This attribute is safe | |
} else if (ALLOW_ARIA_ATTR && ARIA_ATTR$$1.test(lcName)) { | |
// This attribute is safe | |
/* Otherwise, check the name is permitted */ | |
} else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) { | |
return false; | |
/* Check value is safe. First, is attr inert? If so, is safe */ | |
} else if (URI_SAFE_ATTRIBUTES[lcName]) { | |
// This attribute is safe | |
/* Check no script, data or unknown possibly unsafe URI | |
unless we know URI values are safe for that attribute */ | |
} else if (IS_ALLOWED_URI$$1.test(value.replace(ATTR_WHITESPACE$$1, ''))) { | |
// This attribute is safe | |
/* Keep image data URIs alive if src/xlink:href is allowed */ | |
/* Further prevent gadget XSS for dynamically built script tags */ | |
} else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && value.indexOf('data:') === 0 && DATA_URI_TAGS[lcTag]) { | |
// This attribute is safe | |
/* Allow unknown protocols: This provides support for links that | |
are handled by protocol handlers which may be unknown ahead of | |
time, e.g. fb:, spotify: */ | |
} else if (ALLOW_UNKNOWN_PROTOCOLS && !IS_SCRIPT_OR_DATA$$1.test(value.replace(ATTR_WHITESPACE$$1, ''))) { | |
// This attribute is safe | |
/* Check for binary attributes */ | |
// eslint-disable-next-line no-negated-condition | |
} else if (!value) { | |
// Binary attributes are safe at this point | |
/* Anything else, presume unsafe, do not add it back */ | |
} else { | |
return false; | |
} | |
return true; | |
}; | |
/** | |
* _sanitizeAttributes | |
* | |
* @protect attributes | |
* @protect nodeName | |
* @protect removeAttribute | |
* @protect setAttribute | |
* | |
* @param {Node} currentNode to sanitize | |
*/ | |
// eslint-disable-next-line complexity | |
var _sanitizeAttributes = function _sanitizeAttributes(currentNode) { | |
var attr = void 0; | |
var value = void 0; | |
var lcName = void 0; | |
var idAttr = void 0; | |
var l = void 0; | |
/* Execute a hook if present */ | |
_executeHook('beforeSanitizeAttributes', currentNode, null); | |
var attributes = currentNode.attributes; | |
/* Check if we have attributes; if not we might have a text node */ | |
if (!attributes) { | |
return; | |
} | |
var hookEvent = { | |
attrName: '', | |
attrValue: '', | |
keepAttr: true, | |
allowedAttributes: ALLOWED_ATTR | |
}; | |
l = attributes.length; | |
/* Go backwards over all attributes; safely remove bad ones */ | |
while (l--) { | |
attr = attributes[l]; | |
var _attr = attr, | |
name = _attr.name, | |
namespaceURI = _attr.namespaceURI; | |
value = attr.value.trim(); | |
lcName = name.toLowerCase(); | |
/* Execute a hook if present */ | |
hookEvent.attrName = lcName; | |
hookEvent.attrValue = value; | |
hookEvent.keepAttr = true; | |
_executeHook('uponSanitizeAttribute', currentNode, hookEvent); | |
value = hookEvent.attrValue; | |
/* Remove attribute */ | |
// Safari (iOS + Mac), last tested v8.0.5, crashes if you try to | |
// remove a "name" attribute from an <img> tag that has an "id" | |
// attribute at the time. | |
if (lcName === 'name' && currentNode.nodeName === 'IMG' && attributes.id) { | |
idAttr = attributes.id; | |
attributes = apply(arraySlice, attributes, []); | |
_removeAttribute('id', currentNode); | |
_removeAttribute(name, currentNode); | |
if (attributes.indexOf(idAttr) > l) { | |
currentNode.setAttribute('id', idAttr.value); | |
} | |
} else if ( | |
// This works around a bug in Safari, where input[type=file] | |
// cannot be dynamically set after type has been removed | |
currentNode.nodeName === 'INPUT' && lcName === 'type' && value === 'file' && hookEvent.keepAttr && (ALLOWED_ATTR[lcName] || !FORBID_ATTR[lcName])) { | |
continue; | |
} else { | |
// This avoids a crash in Safari v9.0 with double-ids. | |
// The trick is to first set the id to be empty and then to | |
// remove the attribute | |
if (name === 'id') { | |
currentNode.setAttribute(name, ''); | |
} | |
_removeAttribute(name, currentNode); | |
} | |
/* Did the hooks approve of the attribute? */ | |
if (!hookEvent.keepAttr) { | |
continue; | |
} | |
/* Take care of an mXSS pattern using namespace switches */ | |
if (/svg|math/i.test(currentNode.namespaceURI) && new RegExp('</(' + Object.keys(FORBID_CONTENTS).join('|') + ')', 'i').test(value)) { | |
_removeAttribute(name, currentNode); | |
continue; | |
} | |
/* Sanitize attribute content to be template-safe */ | |
if (SAFE_FOR_TEMPLATES) { | |
value = value.replace(MUSTACHE_EXPR$$1, ' '); | |
value = value.replace(ERB_EXPR$$1, ' '); | |
} | |
/* Is `value` valid for this attribute? */ | |
var lcTag = currentNode.nodeName.toLowerCase(); | |
if (!_isValidAttribute(lcTag, lcName, value)) { | |
continue; | |
} | |
/* Handle invalid data-* attribute set by try-catching it */ | |
try { | |
if (namespaceURI) { | |
currentNode.setAttributeNS(namespaceURI, name, value); | |
} else { | |
/* Fallback to setAttribute() for browser-unrecognized namespaces e.g. "x-schema". */ | |
currentNode.setAttribute(name, value); | |
} | |
DOMPurify.removed.pop(); | |
} catch (error) {} | |
} | |
/* Execute a hook if present */ | |
_executeHook('afterSanitizeAttributes', currentNode, null); | |
}; | |
/** | |
* _sanitizeShadowDOM | |
* | |
* @param {DocumentFragment} fragment to iterate over recursively | |
*/ | |
var _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) { | |
var shadowNode = void 0; | |
var shadowIterator = _createIterator(fragment); | |
/* Execute a hook if present */ | |
_executeHook('beforeSanitizeShadowDOM', fragment, null); | |
while (shadowNode = shadowIterator.nextNode()) { | |
/* Execute a hook if present */ | |
_executeHook('uponSanitizeShadowNode', shadowNode, null); | |
/* Sanitize tags and elements */ | |
if (_sanitizeElements(shadowNode)) { | |
continue; | |
} | |
/* Deep shadow DOM detected */ | |
if (shadowNode.content instanceof DocumentFragment) { | |
_sanitizeShadowDOM(shadowNode.content); | |
} | |
/* Check attributes, sanitize if necessary */ | |
_sanitizeAttributes(shadowNode); | |
} | |
/* Execute a hook if present */ | |
_executeHook('afterSanitizeShadowDOM', fragment, null); | |
}; | |
/** | |
* Sanitize | |
* Public method providing core sanitation functionality | |
* | |
* @param {String|Node} dirty string or DOM node | |
* @param {Object} configuration object | |
*/ | |
// eslint-disable-next-line complexity | |
DOMPurify.sanitize = function (dirty, cfg) { | |
var body = void 0; | |
var importedNode = void 0; | |
var currentNode = void 0; | |
var oldNode = void 0; | |
var returnNode = void 0; | |
/* Make sure we have a string to sanitize. | |
DO NOT return early, as this will return the wrong type if | |
the user has requested a DOM object rather than a string */ | |
if (!dirty) { | |
dirty = '<!-->'; | |
} | |
/* Stringify, in case dirty is an object */ | |
if (typeof dirty !== 'string' && !_isNode(dirty)) { | |
// eslint-disable-next-line no-negated-condition | |
if (typeof dirty.toString !== 'function') { | |
throw new TypeError('toString is not a function'); | |
} else { | |
dirty = dirty.toString(); | |
if (typeof dirty !== 'string') { | |
throw new TypeError('dirty is not a string, aborting'); | |
} | |
} | |
} | |
/* Check we can run. Otherwise fall back or ignore */ | |
if (!DOMPurify.isSupported) { | |
if (_typeof(window.toStaticHTML) === 'object' || typeof window.toStaticHTML === 'function') { | |
if (typeof dirty === 'string') { | |
return window.toStaticHTML(dirty); | |
} | |
if (_isNode(dirty)) { | |
return window.toStaticHTML(dirty.outerHTML); | |
} | |
} | |
return dirty; | |
} | |
/* Assign config vars */ | |
if (!SET_CONFIG) { | |
_parseConfig(cfg); | |
} | |
/* Clean up removed elements */ | |
DOMPurify.removed = []; | |
if (IN_PLACE) { | |
/* No special handling necessary for in-place sanitization */ | |
} else if (dirty instanceof Node) { | |
/* If dirty is a DOM element, append to an empty document to avoid | |
elements being stripped by the parser */ | |
body = _initDocument('<!-->'); | |
importedNode = body.ownerDocument.importNode(dirty, true); | |
if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') { | |
/* Node is already a body, use as is */ | |
body = importedNode; | |
} else if (importedNode.nodeName === 'HTML') { | |
body = importedNode; | |
} else { | |
// eslint-disable-next-line unicorn/prefer-node-append | |
body.appendChild(importedNode); | |
} | |
} else { | |
/* Exit directly if we have nothing to do */ | |
if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && RETURN_TRUSTED_TYPE && dirty.indexOf('<') === -1) { | |
return trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty; | |
} | |
/* Initialize the document to work on */ | |
body = _initDocument(dirty); | |
/* Check we have a DOM node from the data */ | |
if (!body) { | |
return RETURN_DOM ? null : emptyHTML; | |
} | |
} | |
/* Remove first element node (ours) if FORCE_BODY is set */ | |
if (body && FORCE_BODY) { | |
_forceRemove(body.firstChild); | |
} | |
/* Get node iterator */ | |
var nodeIterator = _createIterator(IN_PLACE ? dirty : body); | |
/* Now start iterating over the created document */ | |
while (currentNode = nodeIterator.nextNode()) { | |
/* Fix IE's strange behavior with manipulated textNodes #89 */ | |
if (currentNode.nodeType === 3 && currentNode === oldNode) { | |
continue; | |
} | |
/* Sanitize tags and elements */ | |
if (_sanitizeElements(currentNode)) { | |
continue; | |
} | |
/* Shadow DOM detected, sanitize it */ | |
if (currentNode.content instanceof DocumentFragment) { | |
_sanitizeShadowDOM(currentNode.content); | |
} | |
/* Check attributes, sanitize if necessary */ | |
_sanitizeAttributes(currentNode); | |
oldNode = currentNode; | |
} | |
oldNode = null; | |
/* If we sanitized `dirty` in-place, return it. */ | |
if (IN_PLACE) { | |
return dirty; | |
} | |
/* Return sanitized string or DOM */ | |
if (RETURN_DOM) { | |
if (RETURN_DOM_FRAGMENT) { | |
returnNode = createDocumentFragment.call(body.ownerDocument); | |
while (body.firstChild) { | |
// eslint-disable-next-line unicorn/prefer-node-append | |
returnNode.appendChild(body.firstChild); | |
} | |
} else { | |
returnNode = body; | |
} | |
if (RETURN_DOM_IMPORT) { | |
/* AdoptNode() is not used because internal state is not reset | |
(e.g. the past names map of a HTMLFormElement), this is safe | |
in theory but we would rather not risk another attack vector. | |
The state that is cloned by importNode() is explicitly defined | |
by the specs. */ | |
returnNode = importNode.call(originalDocument, returnNode, true); | |
} | |
return returnNode; | |
} | |
var serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML; | |
/* Sanitize final string template-safe */ | |
if (SAFE_FOR_TEMPLATES) { | |
serializedHTML = serializedHTML.replace(MUSTACHE_EXPR$$1, ' '); | |
serializedHTML = serializedHTML.replace(ERB_EXPR$$1, ' '); | |
} | |
return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML; | |
}; | |
/** | |
* Public method to set the configuration once | |
* setConfig | |
* | |
* @param {Object} cfg configuration object | |
*/ | |
DOMPurify.setConfig = function (cfg) { | |
_parseConfig(cfg); | |
SET_CONFIG = true; | |
}; | |
/** | |
* Public method to remove the configuration | |
* clearConfig | |
* | |
*/ | |
DOMPurify.clearConfig = function () { | |
CONFIG = null; | |
SET_CONFIG = false; | |
}; | |
/** | |
* Public method to check if an attribute value is valid. | |
* Uses last set config, if any. Otherwise, uses config defaults. | |
* isValidAttribute | |
* | |
* @param {string} tag Tag name of containing element. | |
* @param {string} attr Attribute name. | |
* @param {string} value Attribute value. | |
* @return {Boolean} Returns true if `value` is valid. Otherwise, returns false. | |
*/ | |
DOMPurify.isValidAttribute = function (tag, attr, value) { | |
/* Initialize shared config vars if necessary. */ | |
if (!CONFIG) { | |
_parseConfig({}); | |
} | |
var lcTag = tag.toLowerCase(); | |
var lcName = attr.toLowerCase(); | |
return _isValidAttribute(lcTag, lcName, value); | |
}; | |
/** | |
* AddHook | |
* Public method to add DOMPurify hooks | |
* | |
* @param {String} entryPoint entry point for the hook to add | |
* @param {Function} hookFunction function to execute | |
*/ | |
DOMPurify.addHook = function (entryPoint, hookFunction) { | |
if (typeof hookFunction !== 'function') { | |
return; | |
} | |
hooks[entryPoint] = hooks[entryPoint] || []; | |
hooks[entryPoint].push(hookFunction); | |
}; | |
/** | |
* RemoveHook | |
* Public method to remove a DOMPurify hook at a given entryPoint | |
* (pops it from the stack of hooks if more are present) | |
* | |
* @param {String} entryPoint entry point for the hook to remove | |
*/ | |
DOMPurify.removeHook = function (entryPoint) { | |
if (hooks[entryPoint]) { | |
hooks[entryPoint].pop(); | |
} | |
}; | |
/** | |
* RemoveHooks | |
* Public method to remove all DOMPurify hooks at a given entryPoint | |
* | |
* @param {String} entryPoint entry point for the hooks to remove | |
*/ | |
DOMPurify.removeHooks = function (entryPoint) { | |
if (hooks[entryPoint]) { | |
hooks[entryPoint] = []; | |
} | |
}; | |
/** | |
* RemoveAllHooks | |
* Public method to remove all DOMPurify hooks | |
* | |
*/ | |
DOMPurify.removeAllHooks = function () { | |
hooks = {}; | |
}; | |
return DOMPurify; | |
} | |
var purify = createDOMPurify(); | |
return purify; | |
}))); | |
//# sourceMappingURL=purify.js.map |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
WAToolkit | |
Author: Cristian Perez <http://www.cpr.name> | |
License: GNU GPLv3 | |
*/ | |
var debug = false; | |
var debugRepeating = false; | |
var whatsAppUrl = "https://web.whatsapp.com/"; | |
var rateUrl = "https://chrome.google.com/webstore/detail/watoolkit/fedimamkpgiemhacbdhkkaihgofncola/reviews"; | |
var optionsFragment = "#watOptions"; | |
var sourceChatFragment = "#watSrcChatTitle="; | |
var safetyDelayShort = 300; | |
var safetyDelayLong = 600; // Must be smaller than checkBadgeInterval | |
var safetyDelayLonger = 1200; | |
var checkBadgeInterval = 5000; // Must be greater than safetyDelayLong | |
var checkLoadingErrorInterval = 30000; | |
// Default options, should match the ones defined in background.js | |
var backgroundNotif = true; | |
var wideText = false; | |
// Prevent page exit confirmation dialog. The window object is not shared between the original page and the content script: http://stackoverflow.com/a/12396221/423171 | |
var scriptElem = document.createElement("script"); | |
scriptElem.innerHTML = "window.onbeforeunload = null;"; | |
document.head.appendChild(scriptElem); | |
chrome.runtime.sendMessage({ name: "getIsBackgroundPage" }, function (isBackgroundPage) | |
{ | |
if (isBackgroundPage) | |
{ | |
if (debug) console.info("WAT: Background script injected"); | |
backgroundScript(); | |
} | |
else | |
{ | |
if (debug) console.info("WAT: Foreground script injected"); | |
foregroundScript(); | |
} | |
chrome.runtime.sendMessage({ name: "getOptions" }, function (options) | |
{ | |
if (debug) console.info("WAT: Got options: " + JSON.stringify(options)); | |
backgroundNotif = options.backgroundNotif; | |
wideText = options.wideText; | |
if (!isBackgroundPage) | |
{ | |
updateWideText(); | |
} | |
}); | |
}); | |
function backgroundScript() | |
{ | |
addStopAnimations(); | |
onMainUiReady(function () | |
{ | |
proxyNotifications(true); | |
checkBadge(); | |
reCheckBadge(true); | |
}); | |
reCheckLoadingError(); | |
} | |
function foregroundScript() | |
{ | |
onMainUiReady(function () | |
{ | |
proxyNotifications(false); | |
checkBadge(); | |
reCheckBadge(false); | |
checkSrcChat(); | |
addOptions(); | |
}); | |
} | |
// FOR BOTH BACKGROUND AND FOREGROUND SCRIPTS //////////////////////////////////////////////////// | |
function onMainUiReady(callback) | |
{ | |
try | |
{ | |
// First check if the main UI is already ready, just in case | |
if (document.querySelector("#app .two") != undefined) | |
{ | |
if (debug) console.info("WAT: Found main UI, will notify main UI ready event directly"); | |
setTimeout(function () { callback(); }, safetyDelayShort); | |
} | |
else | |
{ | |
if (debug) console.info("WAT: Setting up mutation observer for main UI ready event..."); | |
var appElem = document.querySelector("#app"); | |
if (appElem != undefined) | |
{ | |
var mutationObserver = new MutationObserver(function (mutations) | |
{ | |
if (debug) console.info("WAT: Mutation observerd, will search main UI"); | |
// Check if main UI is now ready (new child div with class "two") | |
if (document.querySelector("#app .two") != undefined) | |
{ | |
if (debug) console.info("WAT: Found main UI, will notify main UI ready event"); | |
mutationObserver.disconnect(); | |
setTimeout(function () { callback(); }, safetyDelayShort); | |
} | |
}); | |
mutationObserver.observe(appElem, { childList: true, subtree: true }); | |
} | |
} | |
} | |
catch (err) | |
{ | |
console.error("WAT: Exception while setting up mutation observer for main UI ready event"); | |
console.error(err); | |
} | |
} | |
function proxyNotifications(isBackgroundScript) | |
{ | |
// The window object is not shared between the original page and the content script: http://stackoverflow.com/a/12396221/423171 | |
if (isBackgroundScript) | |
{ | |
window.addEventListener("message", function (event) | |
{ | |
if (event != undefined && event.data != undefined && event.data.name == "backgroundNotificationClicked") | |
{ | |
chrome.runtime.sendMessage({ name: "backgroundNotificationClicked", srcChatTitle: event.data.srcChatTitle }); | |
} | |
}); | |
} | |
else | |
{ | |
window.addEventListener("message", function (event) | |
{ | |
if (event != undefined && event.data != undefined && (event.data.name == "foregroundNotificationClicked" || event.data.name == "foregroundNotificationShown")) | |
{ | |
setTimeout(function () { checkBadge(); }, safetyDelayLonger); | |
} | |
}); | |
} | |
var script = ""; | |
script += "var debug = " + debug + ";"; | |
script += "var isBackgroundScript = " + isBackgroundScript + ";"; | |
script += "var backgroundNotif = " + backgroundNotif + ";"; | |
script += "(" + function () | |
{ | |
// Notification spec: https://developer.mozilla.org/en/docs/Web/API/notification | |
// Save native notification | |
var _Notification = window.Notification; | |
// Create proxy notification | |
var ProxyNotification = function (title, options) | |
{ | |
if (isBackgroundScript && !backgroundNotif) | |
{ | |
if (debug) console.info("WAT: Notification creation intercepted, will not proxy it because the user disabled background notifications"); | |
return; | |
} | |
else | |
{ | |
if (debug) console.info("WAT: Notification creation intercepted, will proxy it"); | |
} | |
// Proxy constructor | |
var _notification = new _Notification(title, options); | |
// Proxy instance properties | |
this.title = _notification.title; | |
this.dir = _notification.dir; | |
this.lang = _notification.lang; | |
this.body = _notification.body; | |
this.tag = _notification.tag; | |
this.icon = _notification.icon; | |
// Proxy event handlers | |
var that = this; | |
_notification.onclick = function (event) | |
{ | |
if (that.onclick != undefined) that.onclick(event); | |
if (isBackgroundScript) | |
{ | |
var srcChatTitle = undefined; | |
if (event != undefined && event.srcElement != undefined && typeof event.srcElement.title == "string" && event.srcElement.title.length > 0) | |
{ | |
srcChatTitle = event.srcElement.title; | |
if (debug) console.info("WAT: Background notification click intercepted with srcChatTitle " + srcChatTitle); | |
} | |
window.postMessage({ name: "backgroundNotificationClicked", srcChatTitle: srcChatTitle }, "*"); | |
} | |
else | |
{ | |
if (debug) console.info("WAT: Foreground notification click intercepted"); | |
window.postMessage({ name: "foregroundNotificationClicked" }, "*"); | |
} | |
}; | |
_notification.onshow = function (event) | |
{ | |
if (that.onshow != undefined) that.onshow(event); | |
if (!isBackgroundScript) | |
{ | |
if (debug) console.info("WAT: Foreground notification show intercepted"); | |
window.postMessage({ name: "foregroundNotificationShown" }, "*"); | |
} | |
}; | |
_notification.onerror = function (event) | |
{ | |
if (that.onerror != undefined) that.onerror(event); | |
}; | |
_notification.onclose = function (event) | |
{ | |
if (that.onclose != undefined) that.onclose(event); | |
}; | |
// Proxy instance methods | |
this.close = function () | |
{ | |
_notification.close(); | |
}; | |
this.addEventListener = function (type, listener, useCapture) | |
{ | |
_notification.addEventListener(type, listener, useCapture); | |
}; | |
this.removeEventListener = function (type, listener, useCapture) | |
{ | |
_notification.removeEventListener(type, listener, useCapture); | |
}; | |
this.dispatchEvent = function (event) | |
{ | |
_notification.dispatchEvent(event); | |
}; | |
}; | |
// Proxy static properties | |
ProxyNotification.permission = _Notification.permission; | |
// Proxy static methods | |
ProxyNotification.requestPermission = _Notification.requestPermission; | |
// Replace native notification with proxy notification | |
window.Notification = ProxyNotification; | |
} + ")();"; | |
var scriptElem = document.createElement("script"); | |
scriptElem.innerHTML = script; | |
document.head.appendChild(scriptElem); | |
} | |
var lastToolbarIconWarn = -1; | |
var lastToolbarIconBadgeText = -1; | |
var lastToolbarIconTooltipText = -1; | |
function reCheckBadge(isBackgroundScript) | |
{ | |
if (isBackgroundScript) | |
{ | |
setTimeout(function () { document.dispatchEvent(new CustomEvent("stopAnimations")); }, checkBadgeInterval - safetyDelayLong); | |
} | |
setTimeout(function () { checkBadge(); reCheckBadge(isBackgroundScript); }, checkBadgeInterval); | |
} | |
function checkBadge() | |
{ | |
if (debugRepeating) console.info("WAT: Checking badge..."); | |
try | |
{ | |
var isSessionActive = document.querySelector("#pane-side") != undefined; | |
var warn = !isSessionActive || document.querySelector("[data-icon='alert-phone']") != undefined || document.querySelector("[data-icon='alert-computer']") != undefined; | |
if (isSessionActive) | |
{ | |
var totalUnreadCount = 0; | |
var tooltipText = ""; | |
var parentChatElem = document.querySelector("#pane-side").children[0].children[0].children[0]; | |
var chatElems = parentChatElem.children; | |
for (var i = 0; i < chatElems.length; i++) | |
{ | |
var chatElem = chatElems[i]; | |
var unreadElem = chatElem.children[0].children[0].children[1].children[1].children[1]; | |
var unreadCount = parseInt(unreadElem.textContent) || 0; // Returns 0 in case of isNaN | |
if (unreadCount > 0) | |
{ | |
var chatTitle = chatElem.children[0].children[0].children[1].children[0].children[0].textContent; | |
var chatTime = chatElem.children[0].children[0].children[1].children[0].children[1].textContent; | |
var chatStatus = chatElem.children[0].children[0].children[1].children[1].children[0].textContent; | |
if (chatTitle.length > 30) // Max 30 chars | |
{ | |
chatTitle = chatTitle.substr(0, 30 - 3) + "..."; | |
} | |
if (chatStatus.length > 70) // Max 70 chars | |
{ | |
chatStatus = chatStatus.substr(0, 70 - 3) + "..."; | |
} | |
totalUnreadCount += unreadCount; | |
tooltipText += (i > 0 ? "\n" : "") + "(" + unreadCount + ") " + chatTitle + " → " + chatStatus + " [" + chatTime + "]"; | |
} | |
} | |
var badgeText = ""; | |
if (totalUnreadCount > 0) | |
{ | |
badgeText = totalUnreadCount.toString(); | |
} | |
if (tooltipText.length == 0) | |
{ | |
tooltipText = "Open WhatsApp"; // Should match browser_action.default_title defined in manifest.json | |
} | |
if (lastToolbarIconWarn !== warn || lastToolbarIconBadgeText !== badgeText || lastToolbarIconTooltipText !== tooltipText) | |
{ | |
if (debug) console.info("WAT: Will update toolbar icon info"); | |
chrome.runtime.sendMessage({ name: "setToolbarIcon", warn: warn, badgeText: badgeText, tooltipText: tooltipText }); | |
lastToolbarIconWarn = warn; | |
lastToolbarIconBadgeText = badgeText; | |
lastToolbarIconTooltipText = tooltipText; | |
} | |
else | |
{ | |
if (debugRepeating) console.info("WAT: Will not update toolbar icon info because it did not change"); | |
} | |
} | |
else | |
{ | |
if (lastToolbarIconWarn !== warn) | |
{ | |
if (debug) console.info("WAT: Will update toolbar icon warning info"); | |
chrome.runtime.sendMessage({ name: "setToolbarIcon", warn: warn }); | |
lastToolbarIconWarn = warn; | |
} | |
else | |
{ | |
if (debugRepeating) console.info("WAT: Will not update toolbar icon warning info because it did not change"); | |
} | |
} | |
} | |
catch (err) | |
{ | |
console.error("WAT: Exception while checking badge"); | |
console.error(err); | |
} | |
} | |
// FOR BACKGROUND SCRIPT ///////////////////////////////////////////////////////////////////////// | |
function addStopAnimations() | |
{ | |
// Provide stopAnimations method to clear all pending animations that can cause live DOM data such as unreadCount not to be up to date on the background page | |
// Velocity.js related thread: https://github.com/julianshapiro/velocity/issues/842 (special thanks to https://github.com/Rycochet) | |
// The window object is not shared between the original page and the content script: http://stackoverflow.com/a/12396221/423171 | |
if (debug) console.info("WAT: Adding stopAnimations() function..."); | |
var script = ""; | |
script += "var debugRepeating = " + debugRepeating + ";"; | |
script += "(" + function () | |
{ | |
function _stopAnimations(maxChecks) | |
{ | |
try | |
{ | |
var pendingElems = document.querySelectorAll(".velocity-animating"); | |
if (pendingElems.length > 0) | |
{ | |
if (debugRepeating) console.info("WAT: Will stop " + pendingElems.length + " pending animations"); | |
Velocity(Array.from(pendingElems), "stop"); | |
maxChecks--; // Max consecutive repetitions to prevent a potential infinite loop if WhatsApp changes something on their animation logic | |
if (maxChecks > 0) | |
{ | |
setTimeout(function () { _stopAnimations(maxChecks); }, 0); | |
} | |
else | |
{ | |
if (debugRepeating) console.info("WAT: Max repetitions reached while stopping animations, will not continue"); | |
} | |
} | |
} | |
catch (err) | |
{ | |
console.error("WAT: Exception while stopping Velocity.js animations"); | |
console.error(err); | |
} | |
} | |
document.addEventListener("stopAnimations", function (e) | |
{ | |
try | |
{ | |
_stopAnimations(20); // maxChecks is set so that all consecutive _stopAnimations() calls should not exceed safetyDelayLong for optimal performance | |
} | |
catch (err) | |
{ | |
console.error("WAT: Exception while stopping animations"); | |
console.error(err); | |
} | |
}); | |
} + ")();"; | |
var scriptElem = document.createElement("script"); | |
scriptElem.innerHTML = script; | |
document.head.appendChild(scriptElem); | |
} | |
var lastPotentialLoadingError = false; | |
function reCheckLoadingError() | |
{ | |
setTimeout(function () { checkLoadingError(); }, checkLoadingErrorInterval); | |
} | |
function checkLoadingError() | |
{ | |
if (debugRepeating) console.info("WAT: Checking potential loading error..."); | |
try | |
{ | |
var potentialLoadingError = document.querySelector("#startup") != undefined; | |
if (potentialLoadingError && !lastPotentialLoadingError) | |
{ | |
if (debug) console.warn("WAT: Found potential loading error"); | |
} | |
if (lastPotentialLoadingError && potentialLoadingError) | |
{ | |
if (debug) console.warn("WAT: Found loading error, will reload"); | |
window.location.href = whatsAppUrl; | |
} | |
else | |
{ | |
lastPotentialLoadingError = potentialLoadingError; | |
} | |
} | |
catch (err) | |
{ | |
console.error("WAT: Exception while checking loading error"); | |
console.error(err); | |
} | |
reCheckLoadingError(); | |
} | |
// FOR FOREGROUND SCRIPT ///////////////////////////////////////////////////////////////////////// | |
function checkSrcChat() | |
{ | |
if (debug) console.info("WAT: Checking source chat..."); | |
try | |
{ | |
var fragment = window.location.hash; | |
if (typeof fragment == "string" && fragment.indexOf(sourceChatFragment) == 0) | |
{ | |
var srcChatTitle = decodeURIComponent(fragment.substr(sourceChatFragment.length)); | |
var chatTitle = undefined; | |
var foundSrcChat = false; | |
var parentChatElem = document.querySelector("#pane-side").children[0].children[0].children[0]; | |
var chatElems = parentChatElem.children; | |
for (var i = 0; i < chatElems.length; i++) | |
{ | |
var chatElem = chatElems[i]; | |
chatTitle = chatElem.children[0].children[0].children[1].children[0].children[0].children[0].children[0]; | |
var chatTitleText = chatTitle.getAttribute("title"); | |
if (typeof chatTitleText == "string" && chatTitleText == srcChatTitle) | |
{ | |
foundSrcChat = true; | |
break; | |
} | |
} | |
if (foundSrcChat) | |
{ | |
if (debug) console.info("WAT: Found source chat, will click it"); | |
history.replaceState({}, document.title, "/"); | |
setTimeout(function () | |
{ | |
// For some reason chatTitle.click() stopped working | |
chatTitle.dispatchEvent(new MouseEvent("mousedown", { bubbles: true, cancelable: true })); | |
}, safetyDelayShort); // The delay fixes some strange page misposition glitch | |
} | |
} | |
} | |
catch (err) | |
{ | |
console.error("WAT: Exception while checking source chat"); | |
console.error(err); | |
} | |
} | |
function addOptions() | |
{ | |
if (debug) console.info("WAT: Adding options..."); | |
try | |
{ | |
var menu = document.querySelector("#side > header").children[1]; | |
if (menu != undefined) | |
{ | |
if (debug) console.info("WAT: Will add options"); | |
var menuItem = document.createElement("div"); | |
menuItem.setAttribute("class", "menu-watoolkit"); | |
var iconElem = document.createElement("button"); | |
iconElem.setAttribute("class", "icon-watoolkit"); | |
iconElem.setAttribute("title", "WAToolkit options"); | |
menuItem.appendChild(iconElem); | |
menu.firstChild.insertBefore(menuItem, menu.firstChild.firstChild); | |
chrome.runtime.sendMessage({ name: "getOptions" }, function (options) | |
{ | |
if (debug) console.info("WAT: Got options: " + JSON.stringify(options)); | |
backgroundNotif = options.backgroundNotif; | |
wideText = options.wideText; | |
var dropContent = " \ | |
<div class='watoolkit-options-container'> \ | |
<div class='watoolkit-options-title'>WAToolkit options</div> \ | |
<div id='watoolkit-option-background-notif' class='watoolkit-options-item'> \ | |
<div class='checkbox-watoolkit " + (backgroundNotif ? "checked" : "unchecked") + "'></div> \ | |
Background notifications \ | |
<div class='watoolkit-options-description'>Enable background notifications to receive new message notifications even when you have no WhatsApp tab or Chrome window open at all. Notifications must be enabled in WhatsApp's own settings menu for background notifications to work. If you disable the background notifications, you will probably want to silence them as well in WhatsApp's own settings menu.</div> \ | |
</div> \ | |
<div id='watoolkit-option-wide-text' class='watoolkit-options-item'> \ | |
<div class='checkbox-watoolkit " + (wideText ? "checked" : "unchecked") + "'></div> \ | |
Wide text bubbles \ | |
<div class='watoolkit-options-description'>Enable wide text bubbles to make use of the full chat panel width in both outgoing and incomming messages.</div> \ | |
</div> \ | |
<div id='watoolkit-option-rate' class='watoolkit-options-item watoolkit-rate'> \ | |
<div class='watoolkit-rate-heart'>❤</div> \ | |
Rate WAToolkit in Chrome Web Store \ | |
<div class='watoolkit-options-description'>If you enjoy WATookit and would like the development to continue, please help us with a 5 star ★★★★★ rating on Chrome Web Store.</div> \ | |
</div> \ | |
</div>"; | |
var drop = new Drop({ | |
target: menuItem, | |
content: dropContent, | |
position: "bottom left", | |
classes: "drop-theme-watoolkit", | |
openOn: "click", | |
tetherOptions: { | |
offset: "-4px -4px 0 0" | |
} | |
}); | |
drop.on("open", function() | |
{ | |
document.getElementsByClassName("menu-watoolkit")[0].setAttribute("class", "menu-horizontal-item active menu-watoolkit"); | |
document.getElementById("watoolkit-option-background-notif").addEventListener("click", optionBackgroundNotifClick); | |
document.getElementById("watoolkit-option-wide-text").addEventListener("click", optionWideTextClick); | |
document.getElementById("watoolkit-option-rate").addEventListener("click", optionRateClick); | |
}); | |
drop.on("close", function() | |
{ | |
document.getElementsByClassName("menu-watoolkit")[0].setAttribute("class", "menu-horizontal-item menu-watoolkit"); | |
document.getElementById("watoolkit-option-background-notif").removeEventListener("click", optionBackgroundNotifClick); | |
document.getElementById("watoolkit-option-wide-text").removeEventListener("click", optionWideTextClick); | |
document.getElementById("watoolkit-option-rate").removeEventListener("click", optionRateClick); | |
}); | |
var fragment = window.location.hash; | |
if (typeof fragment == "string" && fragment.indexOf(optionsFragment) == 0) | |
{ | |
history.replaceState({}, document.title, "/"); | |
setTimeout(function () { drop.open(); }, safetyDelayLong); // The delay fixes a potential dialog misposition glitch | |
} | |
}); | |
} | |
} | |
catch (err) | |
{ | |
console.error("WAT: Exception while adding options"); | |
console.error(err); | |
} | |
} | |
function optionBackgroundNotifClick() | |
{ | |
var checkbox = document.querySelector("#watoolkit-option-background-notif .checkbox-watoolkit"); | |
var checkboxClass = checkbox.getAttribute("class"); | |
if (checkboxClass.indexOf("unchecked") > -1) | |
{ | |
checkbox.setAttribute("class", checkboxClass.replace("unchecked", "checked")); | |
backgroundNotif = true; | |
} | |
else | |
{ | |
checkbox.setAttribute("class", checkboxClass.replace("checked", "unchecked")); | |
backgroundNotif = false; | |
} | |
chrome.runtime.sendMessage({ name: "setOptions", backgroundNotif: backgroundNotif }); | |
} | |
function optionWideTextClick() | |
{ | |
var checkbox = document.querySelector("#watoolkit-option-wide-text .checkbox-watoolkit"); | |
var checkboxClass = checkbox.getAttribute("class"); | |
if (checkboxClass.indexOf("unchecked") > -1) | |
{ | |
checkbox.setAttribute("class", checkboxClass.replace("unchecked", "checked")); | |
wideText = true; | |
} | |
else | |
{ | |
checkbox.setAttribute("class", checkboxClass.replace("checked", "unchecked")); | |
wideText = false; | |
} | |
chrome.runtime.sendMessage({ name: "setOptions", wideText: wideText }); | |
updateWideText(); | |
} | |
function optionRateClick() | |
{ | |
window.open(rateUrl); | |
} | |
var wideTextStyleElem; | |
function updateWideText() | |
{ | |
if (debug) console.info("WAT: Updating wide text..."); | |
if (wideTextStyleElem == undefined) | |
{ | |
wideTextStyleElem = document.createElement("style"); | |
wideTextStyleElem.setAttribute("type", "text/css"); | |
wideTextStyleElem.innerHTML = ".message-in div, .message-out div { max-width: 100% !important; }"; | |
} | |
if (wideText && wideTextStyleElem.parentElement == undefined) | |
{ | |
if (debug) console.info("WAT: Will update wide text"); | |
document.getElementsByTagName("head")[0].appendChild(wideTextStyleElem); | |
} | |
else if (!wideText && wideTextStyleElem.parentElement != undefined) | |
{ | |
if (debug) console.info("WAT: Will update wide text"); | |
wideTextStyleElem.parentElement.removeChild(wideTextStyleElem); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment