1var ASPx = ASPx || {}; 2var dx = dx || {}; 3(function module(ASPx, dx) { 4ASPx.modules = { Utils: module }; 5if(!ASPx.attachToReady) 6 ASPx.attachToReady = function (callback) { ASPx.Evt.AttachEventToElement(window, "load", callback); }; 7if(!ASPx.attachToLoad) 8 ASPx.attachToLoad = function(callback) { ASPx.Evt.AttachEventToDocumentCore("DOMContentLoaded", callback); }; 9ASPx.EmptyObject = { }; 10ASPx.FalseFunction = function() { return false; }; 11ASPx.SSLSecureBlankUrl = '/DXR.axd?r=1_86-1U2pu'; 12ASPx.EmptyImageUrl = '/DXR.axd?r=1_87-1U2pu'; 13ASPx.VersionInfo = 'Version=\'24.2.5.0\', File Version=\'24.2.5.0\', Date Modified=\'3/5/2025 6:17:52 AM\''; 14ASPx.Platform = 'ASP'; 15ASPx.DoctypeMode = 'Xhtml'; 16ASPx.InvalidDimension = -10000; 17ASPx.InvalidPosition = -10000; 18ASPx.AbsoluteLeftPosition = -10000; 19ASPx.EmptyGuid = "00000000-0000-0000-0000-000000000000"; 20ASPx.CallbackSeparator = ":"; 21ASPx.ItemIndexSeparator = "i"; 22ASPx.CallbackResultPrefix = "/*DX*/"; 23ASPx.StyleValueEncodedSemicolon = "DXsmcln"; 24ASPx.AccessibilityEmptyUrl = "javascript:;"; 25ASPx.AccessibilityPronounceTimeout = 500; 26ASPx.MaxMobileWindowWidth = 576; 27ASPx.PossibleNumberDecimalSeparators = [",", "."]; 28ASPx.CultureInfo = { 29 twoDigitYearMax: 2029, 30 ts: ":", 31 ds: "/", 32 am: "AM", 33 pm: "PM", 34 monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "
34November", "December", ""], 35 genMonthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", ""], 36 abbrMonthNames: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", ""], 37 abbrDayNames: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], 38 dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], 39 invariantCultureDecimalPoint: ".", 40 numDecimalPoint: ".", 41 numPrec: 2, 42 numGroupSeparator: ",", 43 numGroups: [ 3 ], 44 numNegPattern: 1, 45 numPosInf: "Infinity", 46 numNegInf: "-Infinity", 47 numNan: "NaN", 48 currency: "$", 49 currDecimalPoint: ".", 50 currPrec: 2, 51 currGroupSeparator: ",", 52 currGroups: [ 3 ], 53 currPosPattern: 0, 54 currNegPattern: 0, 55 percentPattern: 0, 56 shortTime: "h:mm tt", 57 longTime: "h:mm:ss tt", 58 shortDate: "M/d/yyyy", 59 longDate: "dddd, MMMM d, yyyy", 60 monthDay: "MMMM d", 61 yearMonth: "MMMM yyyy" 62}; 63ASPx.CultureInfo.genMonthNames = ASPx.CultureInfo.monthNames; 64ASPx.Position = { 65 Left: "Left", 66 Right: "Right", 67 Top: "Top", 68 Bottom: "Bottom" 69};
70ASPx.FOCUS_TIMEOUT = 100; 71function setInnerHtmlInternal(el, trustedHtmlString) { 72 el.innerHTML = trustedHtmlString; 73} 74var DateUtils = { }; 75DateUtils.GetInvariantDateString = function(date) { 76 if(!date) 77 return "01/01/0001"; 78 var day = date.getDate(); 79 var month = date.getMonth() + 1; 80 var year = date.getFullYear(); 81 var result = ""; 82 if(month < 10) 83 result += "0"; 84 result += month.toString() + "/"; 85 if(day < 10) 86 result += "0"; 87 result += day.toString() + "/"; 88 if(year < 1000) 89 result += "0"; 90 result += year.toString(); 91 return result; 92}; 93DateUtils.GetInvariantDateTimeString = function(date) { 94 var dateTimeString = DateUtils.GetInvariantDateString(date); 95 var time = { 96 h: date.getHours(), 97 m: date.getMinutes(), 98 s: date.getSeconds() 99 }; 100 for(var key in time) { 101 if(time.hasOwnProperty(key)) { 102 var str = time[key].toString(); 103 if(str.length < 2) 104 str = "0" + str; 105 time[key] = str; 106 } 107 } 108 dateTimeString += " " + time.h + ":" + time.m + ":" + time.s; 109 var msec = date.getMilliseconds(); 110 if(msec > 0) 111 dateTimeString += "." + ("000" + msec.toString()).substr(-3); 112 return dateTimeString; 113}; 114DateUtils.ExpandTwoDigitYear = function(value) { 115 value += 1900; 116 if(value + 99 < ASPx.CultureInfo.twoDigitYearMax) 117 value += 100; 118 return value; 119}; 120DateUtils.GetTimeZoneOffsetDifference = function(firstDate, secondDate) { 121 if(!secondDate) 122 secondDate = DateUtils.GetUtcDate(firstDate); 123 return 60000 * (firstDate.getTimezoneOffset() - secondDate.getTimezoneOffset()); 124}; 125DateUtils.GetTimeZoneOffset = function(date) { 126 var isECMA262Support = (ASPx.Browser.Chrome && ASPx.Browser.Version >= 67) || ASPx.Browser.EdgeWebKit; 127 if(!isECMA262Support) 128 return date.getTimezoneOffset() * 60000; 129 var utcDate = DateUtils.GetUtcDate(date); 130 var utcTimezoneOffsetDifference = DateUtils.GetTimeZoneOffsetDifference(date); 131 if(utcTimezoneOffsetDifference !== 0) 132 utcDate.setTime(utcDate.valueOf() + utcTimezoneOffsetDifference); 133 return utcDate - date; 134}; 135DateUtils.GetUtcDate = function(date) { 136 var utcFullYear = date.getUTCFullYear(); 137 var result = new Date(utcFullYear, date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds()); 138 if(utcFullYear < 100) 139 result.setFullYear(utcFullYear); 140 return result; 141}; 142DateUtils.ToUtcTime = function(date) { 143 var result = new Date(); 144 result.setTime(date.valueOf() + ASPx.DateUtils.GetTimeZoneOffset(date)); 145 return result; 146}; 147DateUtils.ToLocalTime = function(date) { 148 var result = new Date(); 149 result.setTime(date.valueOf() - ASPx.DateUtils.GetTimeZoneOffset(date)); 150 return result; 151}; 152DateUtils.AreDatesEqualExact = function(date1, date2) { 153 if(date1 == null && date2 == null) 154 return true; 155 if(date1 == null || date2 == null) 156 return false; 157 return date1.getTime() == date2.getTime(); 158}; 159DateUtils.FixTimezoneGap = function(oldDate, newDate) { 160 var diff = newDate.getHours() - oldDate.getHours(); 161 if(diff == 0) 162 return; 163 var sign = (diff == 1 || diff == -23) ? -1 : 1; 164 var trial = new Date(newDate.getTime() + sign * 3600000); 165 var isDateChangedAsExpected = newDate.getHours() - trial.getHours() === diff; 166 if(isDateChangedAsExpected && (sign > 0 || trial.getDate() == newDate.getDate())) 167 newDate.setTime(trial.getTime()); 168}; 169DateUtils.GetDecadeStartYear = function(year) { 170 return 10 * Math.floor(year / 10); 171}; 172DateUtils.GetCenturyStartYear = function(year) { 173 return 100 * Math.floor(year / 100); 174}; 175DateUtils.GetCorrectedYear = function(date, pickerType) { 176 var year = date.getFullYear(); 177 return pickerType != ASPx.DatePickerType.Decades ? year : DateUtils.GetDecadeStartYear(year); 178}; 179DateUtils.GetCorrectedMonth = function(date, pickerType) { 180 return pickerType < ASPx.DatePickerType.Years ? date.getMonth() : 0; 181}; 182DateUtils.GetCorrectedDay = function(date, pickerType) { 183 return pickerType == ASPx.DatePickerType.Days ? date.getDate() : 1; 184}; 185DateUtils.CorrectDateByPickerType = function(date, pickerType) { 186 if(!ASPx.IsExists(pickerType)) 187 pickerType = ASPx.DatePickerType.Days; 188 if(!date || pickerType == ASPx.DatePickerType.Days) 189 return date; 190 var correctedYear = DateUtils.GetCorrectedYear(date, pickerType); 191 var result = new Date( 192 correctedYear, 193 DateUtils.GetCorrectedMonth(date, pickerType), 194 DateUtils.GetCorrectedDay(date, pickerType), 195 date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds() 196 ); 197 result.setFullYear(correctedYear); 198 return result; 199}; 200DateUtils.GetYearRangeFormatString = function(startYear, rangeLength) { 201 return startYear + " - " + (startYear + rangeLength - 1); 202}; 203ASPx.DateUtils = DateUtils; 204var Timer = { }; 205Timer.ClearTimer = function(timerID){ 206 if(timerID > -1) 207 window.clearTimeout(timerID); 208 return -1; 209};
210Timer.ClearInterval = function(timerID){ 211 if(timerID > -1) 212 window.clearInterval(timerID); 213 return -1; 214}; 215var setControlBoundTimer = function(handler, control, setTimerFunction, clearTimerFunction, delay) { 216 var timerId; 217 var getTimerId = function() { return timerId; }; 218 var controlMainElement = control.GetMainElement(); 219 var boundHandler = function() { 220 var controlExists = control && ASPx.GetControlCollection().Get(control.name) === control && control.GetMainElement() === controlMainElement; 221 if(controlExists) 222 handler.aspxBind(control)(); 223 else { 224 clearTimerFunction(getTimerId()); 225 controlMainElement = null; 226 } 227 }; 228 timerId = setTimerFunction(boundHandler, delay); 229 return timerId; 230}; 231Timer.SetControlBoundTimeout = function(handler, control, delay) { 232 return setControlBoundTimer(handler, control, window.setTimeout, Timer.ClearTimer, delay); 233}; 234Timer.SetControlBoundInterval = function(handler, control, delay) { 235 return setControlBoundTimer(handler, control, window.setInterval, Timer.ClearInterval, delay); 236}; 237Timer.Throttle = function(func, delay) { 238 var isThrottled = false, 239 savedArgs, 240 savedThis = this; 241 function wrapper() { 242 if(isThrottled) { 243 savedArgs = arguments; 244 savedThis = this; 245 return; 246 } 247 func.apply(this, arguments); 248 isThrottled = true; 249 setTimeout(function() { 250 isThrottled = false; 251 if(savedArgs) { 252 wrapper.apply(savedThis, savedArgs); 253 savedArgs = null; 254 } 255 }, delay); 256 } 257 wrapper.cancel = function() { 258 clearTimeout(delay); 259 delay = savedArgs = savedThis = null; 260 }; 261 return wrapper; 262}; 263ASPx.Timer = Timer; 264var Browser = { }; 265Browser.UserAgent = navigator.userAgent.toLowerCase(); 266Browser.Mozilla = false; 267Browser.IE = false; 268Browser.Firefox = false; 269Browser.Netscape = false; 270Browser.Safari = false; 271Browser.Chrome = false; 272Browser.Opera = false; 273Browser.Edge = false; 274Browser.EdgeWebKit = false; 275Browser.Version = undefined; 276Browser.MajorVersion = undefined; 277Browser.WindowsPlatform = false; 278Browser.MacOSPlatform = false; 279Browser.MacOSMobilePlatform = false; 280Browser.AndroidMobilePlatform = false; 281Browser.PlaformMajorVersion = false; 282Browser.WindowsPhonePlatform = false; 283Browser.AndroidDefaultBrowser = false; 284Browser.AndroidChromeBrowser = false; 285Browser.SamsungAndroidDevice = false; 286Browser.WebKitTouchUI = false; 287Browser.MSTouchUI = false; 288Browser.TouchUI = false; 289Browser.WebKitFamily = false; 290Browser.NetscapeFamily = false; 291Browser.VirtualKeyboardSupported = false; 292Browser.Info = ""; 293Browser.IsQuirksMode = document.compatMode === "BackCompat"; 294function indentPlatformMajorVersion(userAgent) { 295 var regex = /(?:(?:windows nt|macintosh|mac os|cpu os|cpu iphone os|android|windows phone|linux) )(\d+)(?:[-0-9_.])*/; 296 var matches = regex.exec(userAgent); 297 if(matches) 298 Browser.PlaformMajorVersion = matches[1]; 299} 300function getIECompatibleVersionString() { 301 if(document.compatible) { 302 for(var i = 0; i < document.compatible.length; i++) 303 if(document.compatible[i].userAgent === "IE" && document.compatible[i].version) 304 return document.compatible[i].version.toLowerCase(); 305 } 306 return ""; 307} 308Browser.IdentUserAgent = function(userAgent, ignoreDocumentMode) { 309 var browserTypesOrderedList = ["Mozilla", "IE", "Firefox", "Netscape", "Safari", "Chrome", "Opera", "Opera10", "EdgeWebKit", "Edge" ]; 310 var defaultBrowserType = "IE"; 311 var defaultPlatform = "Win"; 312 var defaultVersions = { Safari: 2, Chrome: 0.1, Mozilla: 1.9, Netscape: 8, Firefox: 2, Opera: 9, IE: 6, Edge: 12 }; 313 if(!userAgent || userAgent.length == 0) { 314 fillUserAgentInfo(browserTypesOrderedList, defaultBrowserType, defaultVersions[defaultBrowserType], defaultPlatform); 315 return; 316 } 317 userAgent = userAgent.toLowerCase(); 318 indentPlatformMajorVersion(userAgent); 319 try { 320 var platformIdentStrings = { 321 "Windows": "Win", 322 "Macintosh": "Mac", 323 "Mac OS": "Mac", 324 "Mac_PowerPC": "Mac", 325 "cpu os": "MacMobile", 326 "cpu iphone os": "MacMobile", 327 "Android": "Android", 328 "!Windows Phone": "WinPhone", 329 "!WPDesktop": "WinPhone", 330 "!ZuneWP": "WinPhone" 331 }; 332 var optSlashOrSpace = "(?:/|\\s*)?"; 333 var version = "(\\d+)(?:\\.((?:\\d+?[1-9])|\\d)0*?)?"; 334 var optComma = "(?:,)?"; 335 var appleVersion = "(\\d+)(?:\\.((?:\\d+?[1-9])|\\d)" + optComma + "0*?)?"; 336 var optVersion = "(?:" + version + ")?"; 337 var patterns = { 338 Safari: "applewebkit(?:.*?(?:version/" + appleVersion + "[\\.\\w\\d]*?(?:\\s+mobile\/\\S*)?\\s+safari))?", 339 Chrome: "(?:chrome|crios)(?!frame)" + optSlashOrSpace + optVersion, 340 Mozilla: "mozilla(?:.*rv:" + optVersion + ".*Gecko)?", 341 Netscape: "(?:netscape|navigator)\\d*/?\\s*" + optVersion, 342 Firefox: "firefox" + optSlashOrSpace + optVersion, 343 Opera: "(?:opera|\sopr)" + optSlashOrSpace + optVersion, 344 Opera10: "opera.*\\s*version" + optSlashOrSpace + optVersion, 345 IE: "msie\\s*" + optVersion, 346 EdgeWebKit: "edg" + optSlashOrSpace + optVersion, 347 Edge: "edge" + optSlashOrSpace + optVersion 348 }; 349 var browserType; 350 var version = -1; 351 for(var i = 0; i < browserTypesOrderedList.length; i++) { 352 var browserTypeCandidate = browserTypesOrderedList[i]; 353 var regExp = new RegExp(patterns[browserTypeCandidate], "i"); 354 if(regExp.compile) 355 regExp.compile(patterns[browserTypeCandidate], "i"); 356 var matches = regExp.exec(userAgent); 357 if(matches && matches.index >= 0) { 358 if(browserType == "IE" && version >= 11 && browserTypeCandidate == "Safari") 359 continue; 360 browserType = browserTypeCandidate; 361 if(browserType == "Opera10") 362 browserType = "Opera"; 363 var tridentPattern = "trident" + optSlashOrSpace + optVersion; 364 version = Browser.GetBrowserVersion(userAgent, matches, tridentPattern, getIECompatibleVersionString()); 365 if(browserType == "Mozilla" && version >= 11) 366 browserType = "IE"; 367 } 368 } 369 if(!browserType) 370 browserType = defaultBrowserType; 371 var browserVersionDetected = version != -1; 372 if(!browserVersionDetected) 373 version = defaultVersions[browserType]; 374 var platform; 375 var minOccurenceIndex = Number.MAX_VALUE;
376 for(var identStr in platformIdentStrings) { 377 if(!platformIdentStrings.hasOwnProperty(identStr)) continue; 378 var importantIdent = identStr.substr(0,1) == "!"; 379 var occurenceIndex = userAgent.indexOf((importantIdent ? identStr.substr(1) : identStr).toLowerCase()); 380 if(occurenceIndex >= 0 && (occurenceIndex < minOccurenceIndex || importantIdent)) { 381 minOccurenceIndex = importantIdent ? 0 : occurenceIndex; 382 platform = platformIdentStrings[identStr]; 383 } 384 } 385 var samsungPattern = "SM-[A-Z]"; 386 var matches = userAgent.toUpperCase().match(samsungPattern); 387 var isSamsungAndroidDevice = matches && matches.length > 0; 388 if(platform == "WinPhone" && version < 9) 389 version = Math.floor(getVersionFromTrident(userAgent, "trident" + optSlashOrSpace + optVersion)); 390 if(!ignoreDocumentMode && browserType == "IE" && version > 7 && document.documentMode < version) 391 version = document.documentMode; 392 if(platform == "WinPhone") 393 version = Math.max(9, version); 394 if(!platform) 395 platform = defaultPlatform; 396 if(platform == platformIdentStrings["cpu os"] && !browserVersionDetected) 397 version = 4; 398 fillUserAgentInfo(browserTypesOrderedList, browserType, version, platform, isSamsungAndroidDevice); 399 } catch(e) { 400 fillUserAgentInfo(browserTypesOrderedList, defaultBrowserType, defaultVersions[defaultBrowserType], defaultPlatform); 401 } 402}; 403function getVersionFromMatches(matches) { 404 var result = -1; 405 var versionStr = ""; 406 if(matches[1]) { 407 versionStr += matches[1]; 408 if(matches[2]) 409 versionStr += "." + matches[2]; 410 } 411 if(versionStr != "") { 412 result = parseFloat(versionStr); 413 if(isNaN(result)) 414 result = -1; 415 } 416 return result; 417} 418function getVersionFromTrident(userAgent, tridentPattern) { 419 var tridentDiffFromVersion = 4; 420 var matches = new RegExp(tridentPattern, "i").exec(userAgent); 421 return getVersionFromMatches(matches) + tridentDiffFromVersion; 422} 423Browser.GetBrowserVersion = function(userAgent, matches, tridentPattern, ieCompatibleVersionString) { 424 var version = getVersionFromMatches(matches); 425 if(ieCompatibleVersionString) { 426 var versionFromTrident = getVersionFromTrident(userAgent, tridentPattern); 427 if(ieCompatibleVersionString === "edge" || parseInt(ieCompatibleVersionString) === versionFromTrident) 428 return versionFromTrident; 429 } 430 return version; 431}; 432function fillUserAgentInfo(browserTypesOrderedList, browserType, version, platform, isSamsungAndroidDevice) { 433 for(var i = 0; i < browserTypesOrderedList.length; i++) { 434 var type = browserTypesOrderedList[i]; 435 Browser[type] = type == browserType; 436 } 437 Browser.Version = Math.floor(10.0 * version) / 10.0; 438 Browser.MajorVersion = Math.floor(Browser.Version); 439 Browser.WindowsPlatform = platform == "Win" || platform == "WinPhone"; 440 Browser.MacOSPlatform = platform == "Mac"; 441 var isMacWithTouchSupport = platform == "Mac" && (!!window.ontouchstart || getMaxTouchPoints() > 0); 442 Browser.MacOSMobilePlatform = platform == "MacMobile" || isMacWithTouchSupport; 443 if(Browser.MacOSMobilePlatform) 444 Browser.MacOSPlatform = false; 445 Browser.AndroidMobilePlatform = platform == "Android"; 446 Browser.WindowsPhonePlatform = platform == "WinPhone"; 447 Browser.WebKitFamily = Browser.Safari || Browser.Chrome || Browser.Opera && Browser.MajorVersion >= 15 || Browser.EdgeWebKit; 448 Browser.NetscapeFamily = Browser.Netscape || Browser.Mozilla || Browser.Firefox; 449 Browser.WebKitTouchUI = Browser.MacOSMobilePlatform || Browser.AndroidMobilePlatform; 450 var isIETouchUI = Browser.IE && Browser.MajorVersion > 9 && Browser.WindowsPlatform && Browser.UserAgent.toLowerCase().indexOf("touch") >= 0; 451 Browser.MSTouchUI = isIETouchUI || ((Browser.Edge || (Browser.EdgeWebKit && !Browser.AndroidMobilePlatform)) && !!getMaxTouchPoints()); 452 Browser.TouchUI = Browser.WebKitTouchUI || Browser.MSTouchUI; 453 Browser.MobileUI = Browser.WebKitTouchUI || Browser.WindowsPhonePlatform; 454 Browser.AndroidDefaultBrowser = Browser.AndroidMobilePlatform && !Browser.Chrome; 455 Browser.AndroidChromeBrowser = Browser.AndroidMobilePlatform && Browser.Chrome; 456 if(isSamsungAndroidDevice) 457 Browser.SamsungAndroidDevice = isSamsungAndroidDevice; 458 if(Browser.MSTouchUI) { 459 var isARMArchitecture = Browser.UserAgent.toLowerCase().indexOf("arm;") > -1; 460 Browser.VirtualKeyboardSupported = isARMArchitecture || Browser.WindowsPhonePlatform; 461 } else { 462 Browser.VirtualKeyboardSupported = Browser.MobileUI; 463 } 464 fillDocumentElementBrowserTypeClassNames(browserTypesOrderedList); 465} 466function getMaxTouchPoints() { 467 var result = navigator.maxTouchPoints;
468 if(window.testingTouchMode) 469 result = 10; 470 return result; 471} 472function fillDocumentElementBrowserTypeClassNames(browserTypesOrderedList) { 473 var documentElementClassName = ""; 474 var browserTypeslist = browserTypesOrderedList.concat(["WindowsPlatform", "MacOSPlatform", "MacOSMobilePlatform", "AndroidMobilePlatform", 475 "WindowsPhonePlatform", "WebKitFamily", "WebKitTouchUI", "MSTouchUI", "TouchUI", "AndroidDefaultBrowser", "MobileUI"]); 476 for(var i = 0; i < browserTypeslist.length; i++) { 477 var type = browserTypeslist[i]; 478 if(Browser[type]) 479 documentElementClassName += "dx" + type + " "; 480 } 481 documentElementClassName += "dxBrowserVersion-" + Browser.MajorVersion; 482 if(document && document.documentElement) { 483 if(document.documentElement.className != "") 484 documentElementClassName = " " + documentElementClassName; 485 document.documentElement.className += documentElementClassName; 486 Browser.Info = documentElementClassName; 487 } 488} 489Browser.SupportsStickyPositioning = function() { 490 return this.Chrome && this.MajorVersion >= 56 491 || this.Firefox && this.MajorVersion >= 32 492 || this.Safari && this.MajorVersion >= 6 && this.Version !== "6" 493 || this.Opera && this.MajorVersion >= 42; 494}; 495Browser.IdentUserAgent(Browser.UserAgent); 496ASPx.Browser = Browser; 497ASPx.BlankUrl = Browser.Opera ? "about:blank" : ""; 498ASPx.FillDocumentElementDXThemeCssClassName = function(dxThemeName) { 499 ASPx.AddClassNameToElement(document.documentElement, "dxTheme-" + dxThemeName); 500}; 501var Data = { }; 502Data.ArrayInsert = function(array, element, position){ 503 if(0 <= position && position < array.length){ 504 for(var i = array.length; i > position; i --) 505 array[i] = array[i - 1]; 506 array[position] = element; 507 } 508 else 509 array.push(element); 510}; 511Data.ArrayRemove = function(array, element){ 512 var index = Data.ArrayIndexOf(array, element); 513 if(index > -1) Data.ArrayRemoveAt(array, index); 514}; 515Data.ArrayRemoveAt = function(array, index){ 516 if(index >= 0 && index < array.length){ 517 for(var i = index; i < array.length - 1; i++) 518 array[i] = array[i + 1]; 519 array.pop(); 520 } 521}; 522Data.ArrayClear = function(array){ 523 while(array.length > 0) 524 array.pop(); 525}; 526Data.ArrayIndexOf = function(array, element, comparer) { 527 if(!comparer) { 528 for(var i = 0; i < array.length; i++) { 529 if(array[i] == element) 530 return i; 531 } 532 } else { 533 for(var i = 0; i < array.length; i++) { 534 if(comparer(array[i], element)) 535 return i; 536 } 537 } 538 return -1; 539}; 540Data.ArrayContains = function(array, element) { 541 return Data.ArrayIndexOf(array, element) >= 0; 542}; 543Data.ArrayEqual = function(array1, array2) { 544 var count1 = array1.length; 545 var count2 = array2.length; 546 if(count1 != count2) 547 return false; 548 for(var i = 0; i < count1; i++) 549 if(array1[i] != array2[i]) 550 return false; 551 return true; 552}; 553Data.ArraySame = function(array1, array2) { 554 if(array1.length !== array2.length) 555 return false; 556 return array1.every(function(elem) { return Data.ArrayContains(array2, elem); }); 557}; 558Data.ArrayGetIntegerEdgeValues = function(array) { 559 var arrayToSort = Data.CollectionToArray(array); 560 Data.ArrayIntegerAscendingSort(arrayToSort); 561 return { 562 start: arrayToSort[0], 563 end: arrayToSort[arrayToSort.length - 1] 564 }; 565}; 566Data.ArrayIntegerAscendingSort = function(array){ 567 Data.ArrayIntegerSort(array); 568}; 569Data.ArrayIntegerSort = function(array, desc) { 570 array.sort(function(i1, i2) { 571 var res = 0; 572 if(i1 > i2) 573 res = 1; 574 else if(i1 < i2) 575 res = -1; 576 if(desc) 577 res *= -1; 578 return res; 579 }); 580}; 581Data.CollectionsUnionToArray = function(firstCollection, secondCollection) { 582 var result = []; 583 var firstCollectionLength = firstCollection.length; 584 var secondCollectionLength = secondCollection.length; 585 for(var i = 0; i < firstCollectionLength + secondCollectionLength; i++) { 586 if(i < firstCollectionLength) 587 result.push(firstCollection[i]); 588 else 589 result.push(secondCollection[i - firstCollectionLength]); 590 } 591 return result; 592}; 593Data.CollectionToArray = function(collection) { 594 var array = []; 595 for(var i = 0; i < collection.length; i++) 596 array.push(collection[i]); 597 return array; 598};
599Data.CreateHashTableFromArray = function(array) { 600 var hash = []; 601 for(var i = 0; i < array.length; i++) 602 hash[array[i]] = 1; 603 return hash; 604}; 605Data.CreateIndexHashTableFromArray = function(array) { 606 var hash = []; 607 for(var i = 0; i < array.length; i++) 608 hash[array[i]] = i; 609 return hash; 610}; 611Data.ArrayToHash = function(array, getKeyFunc, getValueFunc) { 612 if(!(array instanceof Array)) 613 return { }; 614 return array.reduce(function(map, element, index) { 615 var key = getKeyFunc(element, index); 616 var value = getValueFunc(element, index); 617 map[key] = value; 618 return map; 619 }, { }); 620}; 621Data.Sum = function(array, getValueFunc) { 622 if(!(array instanceof Array)) 623 return 0; 624 return array.reduce(function(prevValue, item) { 625 var value = getValueFunc ? getValueFunc(item) : item; 626 if(!ASPx.IsNumber(value)) 627 value = 0; 628 return prevValue + value; 629 }, 0); 630}; 631Data.Min = function(array, getValueFunc) { return CalculateArrayMinMax(array, getValueFunc, false); }; 632Data.Max = function(array, getValueFunc) { return CalculateArrayMinMax(array, getValueFunc, true); }; 633var CalculateArrayMinMax = function(array, getValueFunc, isMax) { 634 if(!(array instanceof Array)) 635 return 0; 636 var startValue = isMax ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY; 637 return array.reduce(function(prevValue, item) { 638 var value = getValueFunc ? getValueFunc(item) : item; 639 if(!ASPx.IsNumber(value)) 640 value = startValue; 641 var func = isMax ? Math.max : Math.min; 642 return func(value, prevValue); 643 }, startValue); 644}; 645var defaultBinarySearchComparer = function(array, index, value) { 646 var arrayElement = array[index]; 647 if(arrayElement == value) 648 return 0; 649 else 650 return arrayElement < value ? -1 : 1; 651}; 652Data.NearestLeftBinarySearchComparer = function(array, index, value) { 653 var arrayElement = array[index]; 654 var leftPoint = arrayElement < value; 655 var lastLeftPoint = leftPoint && index == array.length - 1; 656 var nearestLeftPoint = lastLeftPoint || (leftPoint && array[index + 1] >= value); 657 if(nearestLeftPoint) 658 return 0; 659 else 660 return arrayElement < value ? -1 : 1; 661}; 662Data.ArrayBinarySearch = function(array, value, binarySearchComparer, startIndex, length) { 663 if(!binarySearchComparer) 664 binarySearchComparer = defaultBinarySearchComparer; 665 if(!ASPx.IsExists(startIndex)) 666 startIndex = 0; 667 if(!ASPx.IsExists(length)) 668 length = array.length - startIndex; 669 var endIndex = (startIndex + length) - 1; 670 while(startIndex <= endIndex) { 671 var middle = (startIndex + ((endIndex - startIndex) >> 1)); 672 var compareResult = binarySearchComparer(array, middle, value); 673 if(compareResult == 0) 674 return middle; 675 if(compareResult < 0) 676 startIndex = middle + 1; 677 else 678 endIndex = middle - 1; 679 } 680 return -(startIndex + 1); 681}; 682Data.ArrayFlatten = function(arrayOfArrays) { 683 return [].concat.apply([], arrayOfArrays); 684}; 685Data.GetDistinctArray = function(array) { 686 var resultArray = []; 687 for(var i = 0; i < array.length; i++) { 688 var currentEntry = array[i]; 689 if(Data.ArrayIndexOf(resultArray, currentEntry) == -1) { 690 resultArray.push(currentEntry); 691 } 692 } 693 return resultArray; 694}; 695Data.ForEach = function(arr, callback) { 696 if(Array.prototype.forEach) { 697 Array.prototype.forEach.call(arr, callback); 698 } else { 699 for(var i = 0, len = arr.length; i < len; i++) { 700 callback(arr[i], i, arr); 701 } 702 } 703}; 704Data.MergeHashTables = function(target, object) { 705 if(!object || typeof (object) == "string") 706 return target; 707 if(!target) 708 target = {}; 709 for(var key in object) 710 if(key && !(key in target)) 711 target[key] = object[key]; 712 return target; 713}; 714Data.Range = function(count, start) { 715 count = parseInt(count) || 0; 716 start = parseInt(start) || 0; 717 if(count < 0) count = 0; 718 if(start < 0) start = 0; 719 return Array.apply(null, Array(count)).map(function(val, i) { return start + i; }); 720}; 721ASPx.Data = Data; 722var Cookie = { }; 723Cookie.DelCookie = function(name){ 724 setCookieInternal(name, "", new Date(1970, 1, 1)); 725}; 726Cookie.GetCookie = function(name) { 727 name = escape(name); 728 var cookies = document.cookie.split(';'); 729 for(var i = 0; i < cookies.length; i++) { 730 var cookie = Str.Trim(cookies[i]); 731 if(cookie.indexOf(name + "=") == 0) 732 return unescape(cookie.substring(name.length + 1, cookie.length)); 733 else if(cookie.indexOf(name + ";") == 0 || cookie === name) 734 return ""; 735 } 736 return null; 737}; 738Cookie.SetCookie = function(name, value, expirationDate){ 739 if(!ASPx.IsExists(value)) { 740 Cookie.DelCookie(name); 741 return; 742 } 743 if(!ASPx.Ident.IsDate(expirationDate)) { 744 expirationDate = new Date(); 745 expirationDate.setFullYear(expirationDate.getFullYear() + 1); 746 } 747 setCookieInternal(name, value, expirationDate); 748}; 749function setCookieInternal(name, value, date){ 750 document.cookie = escape(name) + "=" + escape(value.toString()) + "; expires=" + date.toGMTString() + "; path=/"; 751} 752ASPx.Cookie = Cookie;
753ASPx.ImageUtils = { 754 GetImageSrc: function (image){ 755 return image.src; 756 }, 757 SetImageSrc: function(image, src){ 758 image.src = src; 759 }, 760 SetSize: function(image, width, height){ 761 image.style.width = width + "px"; 762 image.style.height = height + "px"; 763 }, 764 GetSize: function(image, isWidth) { 765 return (isWidth ? ASPx.GetElementOffsetWidth(image) : ASPx.GetElementOffsetHeight(image)); 766 } 767}; 768var Str = { }; 769Str.ApplyReplacement = function(text, replecementTable) { 770 if(typeof(text) != "string") 771 text = text.toString(); 772 for(var i = 0; i < replecementTable.length; i++) { 773 var replacement = replecementTable[i]; 774 text = text.replace(replacement[0], replacement[1]); 775 } 776 return text; 777}; 778Str.CompleteReplace = function(text, regexp, newSubStr) { 779 if(typeof(text) != "string") 780 text = text.toString(); 781 var textPrev; 782 do { 783 textPrev = text; 784 text = text.replace(regexp, newSubStr); 785 } while(text != textPrev); 786 return text; 787}; 788Str.EncodeHtml = function(html) { 789 return Str.ApplyReplacement(html, [ 790 [ /&/g, '&x;' ], [ /&/g, '&' ], 791 [ /"/g, '"x;' ], [ /"/g, '"' ], 792 [ /</g, '<x;' ], [ /</g, '<' ], 793 [ />/g, '>x;' ], [ />/g, '>' ] 794 ]); 795}; 796Str.DecodeHtml = function(html) { 797 return Str.ApplyReplacement(html, [ 798 [ />/g, '>' ], [ />x;/g, '>' ], 799 [ /</g, '<' ], [ /<x;/g, '<' ], 800 [ /"/g, '"' ], [ /"x;/g,'"' ], 801 [ /&/g, '&' ], [ /&x;/g, '&' ] 802 ]); 803}; 804Str.DecodeHtmlViaTextArea = function(html) { 805 var textArea = document.createElement("TEXTAREA"); 806 setInnerHtmlInternal(textArea, html); 807 return textArea.value; 808}; 809Str.TrimStart = function(str) { 810 return trimInternal(str, true); 811}; 812Str.TrimEnd = function(str) { 813 return trimInternal(str, false, true); 814}; 815Str.Trim = function(str) { 816 return trimInternal(str, true, true); 817}; 818Str.EscapeForRegEx = function(str) { 819 return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); 820};
821var whiteSpaces = { 822 0x0009: 1, 0x000a: 1, 0x000b: 1, 0x000c: 1, 0x000d: 1, 0x0020: 1, 0x0085: 1, 823 0x00a0: 1, 0x1680: 1, 0x180e: 1, 0x2000: 1, 0x2001: 1, 0x2002: 1, 0x2003: 1, 824 0x2004: 1, 0x2005: 1, 0x2006: 1, 0x2007: 1, 0x2008: 1, 0x2009: 1, 0x200a: 1, 825 0x200b: 1, 0x2028: 1, 0x2029: 1, 0x202f: 1, 0x205f: 1, 0x3000: 1, 0xfeff: 1 826}; 827var caretWidth = 1; 828function trimInternal(source, trimStart, trimEnd) { 829 var len = source.length; 830 if(!len) 831 return source; 832 var result = ""; 833 if(len < 0xBABA1) 834 result = trimSource(source, trimStart, trimEnd); 835 else 836 result = trimLargeSource(source, len, trimStart, trimEnd); 837 return Str.ClearString(result); 838} 839function trimSource(source, trimStart, trimEnd) { 840 var result = source; 841 if(trimStart) 842 result = result.replace(/^\s+/, ""); 843 if(trimEnd) 844 result = result.replace(/\s+$/, ""); 845 return result; 846} 847function trimLargeSource(source, len, trimStart, trimEnd) { 848 var start = 0; 849 if(trimEnd) { 850 while(len > 0 && whiteSpaces[source.charCodeAt(len - 1)]) { 851 len--; 852 } 853 } 854 if(trimStart && len > 0) { 855 while(start < len && whiteSpaces[source.charCodeAt(start)]) { 856 start++; 857 } 858 } 859 return source.substring(start, len); 860} 861var inlineStringLength = 12; 862Str.ClearString = function(str) { 863 if(!ASPx.Browser.Chrome) 864 return str; 865 return str.length < inlineStringLength ? str : JSON.parse(JSON.stringify(str)); 866}; 867Str.Insert = function(str, subStr, index) { 868 var leftText = str.slice(0, index); 869 var rightText = str.slice(index); 870 return leftText + subStr + rightText; 871}; 872Str.InsertEx = function(str, subStr, startIndex, endIndex) { 873 var leftText = str.slice(0, startIndex); 874 var rightText = str.slice(endIndex); 875 return leftText + subStr + rightText; 876}; 877var greekSLFSigmaChar = String.fromCharCode(962); 878var greekSLSigmaChar = String.fromCharCode(963); 879Str.PrepareStringForFilter = function(s, saveCaseSensitive){ 880 if(!saveCaseSensitive) 881 s = s.toLowerCase(); 882 if(ASPx.Browser.WebKitFamily) { 883 return s.replace(new RegExp(greekSLFSigmaChar, "g"), greekSLSigmaChar); 884 } 885 return s; 886}; 887Str.GetCoincideCharCount = function(text, filter, textMatchingDelegate) { 888 var coincideText = ASPx.Str.PrepareStringForFilter(filter); 889 var originText = ASPx.Str.PrepareStringForFilter(text); 890 while(coincideText != "" && !textMatchingDelegate(originText, coincideText)) { 891 coincideText = coincideText.slice(0, -1); 892 } 893 return coincideText.length; 894}; 895Str.EndsWith = function(str, suffix) { 896 return str.indexOf(suffix, str.length - suffix.length) !== -1; 897}; 898ASPx.Str = Str; 899var Xml = { }; 900Xml.Parse = function(xmlStr) { 901 if(window.DOMParser) { 902 var parser = new DOMParser(); 903 return parser.parseFromString(xmlStr, "text/xml"); 904 } 905 else if(window.ActiveXObject) { 906 var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); 907 if(xmlDoc) { 908 xmlDoc.async = false; 909 xmlDoc.loadXML(xmlStr); 910 return xmlDoc; 911 } 912 } 913 return null; 914}; 915ASPx.Xml = Xml; 916ASPx.Key = { 917 F1 : 112, 918 F2 : 113, 919 F3 : 114, 920 F4 : 115, 921 F5 : 116, 922 F6 : 117, 923 F7 : 118, 924 F8 : 119,
925 F9 : 120, 926 F10 : 121, 927 F11 : 122, 928 F12 : 123, 929 Ctrl : 17, 930 Shift : 16, 931 Alt : 18, 932 Enter : 13, 933 Home : 36, 934 End : 35, 935 Left : 37, 936 Right : 39, 937 Up : 38, 938 Down : 40, 939 PageUp : 33, 940 PageDown : 34, 941 Esc : 27, 942 Space : 32, 943 Tab : 9, 944 Backspace : 8, 945 Delete : 46, 946 Insert : 45, 947 ContextMenu : 93, 948 Windows : 91, 949 Decimal : 110, 950 CapsLock : 20 951}; 952ASPx.ModifierKey = { 953 None: 0, 954 Ctrl: 1 << (0 + 16), 955 Shift: 1 << (2 + 16), 956 Alt: 1 << (4 + 16), 957 Meta: 1 << (8 + 16) 958}; 959ASPx.KeyCode = { 960 Backspace : 8, 961 Tab : 9, 962 Enter : 13, 963 Pause : 19, 964 CapsLock : 20, 965 Esc : 27, 966 Space : 32, 967 PageUp : 33, 968 PageDown : 34, 969 End : 35, 970 Home : 36, 971 Left : 37, 972 Up : 38, 973 Right : 39, 974 Down : 40, 975 Insert : 45, 976 Delete : 46, 977 Key_0 : 48, 978 Key_1 : 49, 979 Key_2 : 50, 980 Key_3 : 51, 981 Key_4 : 52, 982 Key_5 : 53, 983 Key_6 : 54, 984 Key_7 : 55, 985 Key_8 : 56, 986 Key_9 : 57, 987 Key_a : 65, 988 Key_b : 66, 989 Key_c : 67, 990 Key_d : 68, 991 Key_e : 69, 992 Key_f : 70, 993 Key_g : 71, 994 Key_h : 72, 995 Key_i : 73, 996 Key_j : 74, 997 Key_k : 75, 998 Key_l : 76, 999 Key_m : 77, 1000 Key_n : 78, 1001 Key_o : 79, 1002 Key_p : 80, 1003 Key_q : 81, 1004 Key_r : 82, 1005 Key_s : 83, 1006 Key_t : 84, 1007 Key_u : 85, 1008 Key_v : 86, 1009 Key_w : 87, 1010 Key_x : 88, 1011 Key_y : 89, 1012 Key_z : 90, 1013 Windows : 91, 1014 ContextMenu : 93, 1015 Numpad_0 : 96, 1016 Numpad_1 : 97, 1017 Numpad_2 : 98, 1018 Numpad_3 : 99, 1019 Numpad_4 : 100, 1020 Numpad_5 : 101, 1021 Numpad_6 : 102, 1022 Numpad_7 : 103, 1023 Numpad_8 : 104, 1024 Numpad_9 : 105, 1025 Multiply : 106, 1026 Add : 107, 1027 Subtract : 109, 1028 Decimal : 110, 1029 Divide : 111, 1030 F1 : 112, 1031 F2 : 113, 1032 F3 : 114, 1033 F4 : 115, 1034 F5 : 116, 1035 F6 : 117, 1036 F7 : 118, 1037 F8 : 119,
1038 F9 : 120, 1039 F10 : 121, 1040 F11 : 122, 1041 F12 : 123, 1042 NumLock : 144, 1043 ScrollLock : 145, 1044 Semicolon : 186, 1045 Equals : 187, 1046 Comma : 188, 1047 Dash : 189, 1048 Period : 190, 1049 ForwardSlash : 191, 1050 GraveAccent : 192, 1051 OpenBracket : 219, 1052 BackSlash : 220, 1053 CloseBracket : 221, 1054 SingleQuote : 222 1055}; 1056ASPx.ScrollBarMode = { Hidden: 0, Visible: 1, Auto: 2 }; 1057ASPx.ColumnResizeMode = { None: 0, Control: 1, NextColumn: 2 }; 1058var Selection = { }; 1059Selection.Set = function(input, startPos, endPos, scrollToSelection, isApi) { 1060 if(!ASPx.IsExistsElement(input)) 1061 return; 1062 var isInputFocused = ASPx.GetActiveElement() === input; 1063 var isInputNativeFocusLocked = ASPx.VirtualKeyboardUI.getInputNativeFocusLocked(); 1064 if(!isApi && Browser.VirtualKeyboardSupported && (!isInputFocused || isInputNativeFocusLocked)) 1065 return; 1066 var textLen = input.value.length; 1067 startPos = ASPx.GetDefinedValue(startPos, 0); 1068 endPos = ASPx.GetDefinedValue(endPos, textLen); 1069 if(startPos < 0) 1070 startPos = 0; 1071 if(endPos < 0 || endPos > textLen) 1072 endPos = textLen; 1073 if(startPos > endPos) 1074 startPos = endPos; 1075 var makeReadOnly = false; 1076 if(Browser.WebKitFamily && input.readOnly) { 1077 input.readOnly = false; 1078 makeReadOnly = true; 1079 } 1080 try { 1081 if(Browser.Firefox && Browser.Version >= 8) 1082 input.setSelectionRange(startPos, endPos, "backward"); 1083 else { 1084 forceScrollToSelectionRange(input, startPos, endPos); 1085 input.setSelectionRange(startPos, endPos); 1086 } 1087 if(Browser.Opera || Browser.Firefox || Browser.Chrome || Browser.Edge || Browser.EdgeWebKit) 1088 input.focus(); 1089 } catch(e) { } 1090 if(scrollToSelection && input.tagName == 'TEXTAREA') { 1091 var scrollHeight = input.scrollHeight; 1092 var approxCaretPos = startPos; 1093 var scrollTop = Math.max(Math.round(approxCaretPos * scrollHeight / textLen - input.clientHeight / 2), 0); 1094 input.scrollTop = scrollTop; 1095 } 1096 if(makeReadOnly) 1097 input.readOnly = true; 1098}; 1099var getTextWidthBeforePos = function(input, pos) { 1100 return ASPx.GetSizeOfText(input.value.toString().substr(0, pos), ASPx.GetCurrentStyle(input)).width; 1101}; 1102var forceScrollToSelectionRange = function(input, startPos, endPos) { 1103 if(endPos === input.value.length) 1104 input.scrollLeft = input.scrollWidth; 1105 else if(startPos === 0 && endPos === 0) 1106 input.scrollLeft = 0; 1107 else { 1108 var inputRawWidth = ASPx.GetElementOffsetWidth(input) - ASPx.GetLeftRightBordersAndPaddingsSummaryValue(input); 1109 if(inputRawWidth < input.scrollWidth) { 1110 var widthBeforeEndPos = getTextWidthBeforePos(input, endPos) + caretWidth; 1111 if(input.scrollLeft < widthBeforeEndPos - inputRawWidth) 1112 input.scrollLeft = widthBeforeEndPos - inputRawWidth; 1113 else { 1114 var widthBeforeStartPos = getTextWidthBeforePos(input, startPos) - caretWidth; 1115 if(input.scrollLeft > widthBeforeStartPos) 1116 input.scrollLeft = widthBeforeStartPos; 1117 } 1118 } 1119 } 1120}; 1121Selection.GetInfo = function(input) { 1122 var start, end; 1123 try { 1124 start = input.selectionStart; 1125 end = input.selectionEnd; 1126 } catch (e) { 1127 } 1128 return { startPos: start, endPos: end }; 1129}; 1130Selection.GetExtInfo = function(input) { 1131 var start = 0, end = 0; 1132 try { 1133 start = input.selectionStart; 1134 end = input.selectionEnd; 1135 } catch (e) { 1136 } 1137 return {startPos: start, endPos: end}; 1138}; 1139Selection.SetCaretPosition = function(input, caretPos) { 1140 if(typeof caretPos === "undefined" || caretPos < 0) 1141 caretPos = input.value.length; 1142 Selection.Set(input, caretPos, caretPos, true); 1143}; 1144Selection.GetCaretPosition = function(element, isDialogMode) { 1145 var pos = 0; 1146 if("selectionStart" in element) { 1147 pos = element.selectionStart; 1148 } else if("selection" in document) { 1149 element.focus(); 1150 var sel = document.selection.createRange(), 1151 selLength = document.selection.createRange().text.length; 1152 sel.moveStart("character", -element.value.length); 1153 pos = sel.text.length - selLength; 1154 } 1155 if(isDialogMode && !pos) { 1156 pos = element.value.length - 1; 1157 } 1158 return pos; 1159}; 1160Selection.Clear = function() { 1161 try { 1162 if(window.getSelection) { 1163 window.getSelection().removeAllRanges(); 1164 } 1165 else if(document.selection) { 1166 if(document.selection.empty) 1167 document.selection.empty(); 1168 else if(document.selection.clear) 1169 document.selection.clear(); 1170 } 1171 } catch(e) { 1172 } 1173}; 1174Selection.ClearOnMouseMove = function(evt) { 1175 Selection.Clear(); 1176}; 1177Selection.SetElementSelectionEnabled = function(element, value) { 1178 var userSelectValue = value ? "" : "none"; 1179 var func = value ? Evt.DetachEventFromElement : Evt.AttachEventToElement; 1180 if(Browser.Firefox) 1181 element.style.MozUserSelect = userSelectValue; 1182 else if(Browser.WebKitFamily) 1183 element.style.webkitUserSelect = userSelectValue; 1184 else if(Browser.Edge) 1185 element.style.msUserSelect = userSelectValue; 1186 else if(Browser.Opera) 1187 func(element, "mousemove", Selection.Clear); 1188 else { 1189 func(element, "selectstart", ASPx.FalseFunction); 1190 func(element, "mousemove", Selection.Clear); 1191 } 1192}; 1193Selection.SetElementAsUnselectable = function(element, isWithChild, recursive) { 1194 if(element && element.nodeType == 1) { 1195 element.unselectable = "on"; 1196 if(Browser.NetscapeFamily) 1197 element.onmousedown = ASPx.FalseFunction; 1198 if(Browser.WebKitFamily) 1199 Evt.AttachEventToElement(element, "mousedown", Evt.PreventEventAndBubble);
1200 if(isWithChild === true){ 1201 for(var j = 0; j < element.childNodes.length; j ++) 1202 Selection.SetElementAsUnselectable(element.childNodes[j], (!!recursive ? true : false), (!!recursive)); 1203 } 1204 } 1205}; 1206Selection.AreEqual = function(selection1, selection2) { 1207 return selection1.startPos === selection2.startPos && selection1.endPos === selection2.endPos; 1208}; 1209ASPx.Selection = Selection; 1210var MouseScroller = { }; 1211MouseScroller.MinimumOffset = 10; 1212MouseScroller.Create = function(getElement, getScrollXElement, getScrollYElement, needPreventScrolling, vertRecursive, onMouseDown, onMouseMove, onMouseUp, onMouseUpMissed) { 1213 var element = getElement(); 1214 if(!element) 1215 return; 1216 if(!element.dxMouseScroller) 1217 element.dxMouseScroller = new MouseScroller.Extender(getElement, getScrollXElement, getScrollYElement, needPreventScrolling, vertRecursive, onMouseDown, onMouseMove, onMouseUp, onMouseUpMissed); 1218 return element.dxMouseScroller; 1219}; 1220MouseScroller.Extender = function(getElement, getScrollXElement, getScrollYElement, needPreventScrolling, vertRecursive, onMouseDown, onMouseMove, onMouseUp, onMouseUpMissed) { 1221 this.getElement = getElement; 1222 this.getScrollXElement = getScrollXElement; 1223 this.getScrollYElement = getScrollYElement; 1224 this.needPreventScrolling = needPreventScrolling; 1225 this.vertRecursive = !!vertRecursive; 1226 this.createHandlers(onMouseDown || function() { }, onMouseMove || function() { }, onMouseUp || function() { }, onMouseUpMissed || function() { }); 1227 this.update(); 1228}; 1229MouseScroller.Extender.prototype = { 1230 update: function() { 1231 if(this.element) 1232 Evt.DetachEventFromElement(this.element, ASPx.TouchUIHelper.touchMouseDownEventName, this.mouseDownHandler); 1233 this.element = this.getElement(); 1234 Evt.AttachEventToElement(this.element, ASPx.TouchUIHelper.touchMouseDownEventName, this.mouseDownHandler); 1235 Evt.AttachEventToElement(this.element, "click", this.mouseClickHandler); 1236 if(Browser.MSTouchUI && this.element.className.indexOf(ASPx.TouchUIHelper.msTouchDraggableClassName) < 0) 1237 this.element.className += " " + ASPx.TouchUIHelper.msTouchDraggableClassName; 1238 this.scrollXElement = this.getScrollXElement(); 1239 this.scrollYElement = this.getScrollYElement(); 1240 }, 1241 createHandlers: function(onMouseDown, onMouseMove, onMouseUp, onMouseUpMissed) { 1242 var mouseDownCounter = 0; 1243 this.onMouseDown = onMouseDown; 1244 this.onMouseMove = onMouseMove; 1245 this.onMouseUp = onMouseUp; 1246 this.mouseDownHandler = function(e) { 1247 if(mouseDownCounter++ > 0) { 1248 this.finishScrolling(); 1249 onMouseUpMissed(); 1250 } 1251 var eventSource = Evt.GetEventSource(e); 1252 var requirePreventCustonScroll = ASPx.IsExists(ASPx.TouchUIHelper.RequirePreventCustomScroll) && ASPx.TouchUIHelper.RequirePreventCustomScroll(eventSource, this.element); 1253 this.requirePreventScroll = requirePreventCustonScroll || this.needPreventScrolling && this.needPreventScrolling(eventSource); 1254 if(this.requirePreventScroll) 1255 return; 1256 this.scrollableTreeLine = this.GetScrollableElements(); 1257 this.firstX = this.prevX = Evt.GetEventX(e); 1258 this.firstY = this.prevY = Evt.GetEventY(e); 1259 Evt.AttachEventToDocument(ASPx.TouchUIHelper.touchMouseMoveEventName, this.mouseMoveHandler); 1260 Evt.AttachEventToDocument(ASPx.TouchUIHelper.touchMouseUpEventName, this.mouseUpHandler); 1261 this.onMouseDown(e); 1262 }.aspxBind(this); 1263 this.mouseMoveHandler = function(e) { 1264 if(ASPx.TouchUIHelper.isGesture) 1265 return; 1266 var x = Evt.GetEventX(e); 1267 var y = Evt.GetEventY(e); 1268 var xDiff = this.prevX - x; 1269 var yDiff = this.prevY - y; 1270 if(this.vertRecursive) { 1271 var isTopDirection = yDiff < 0; 1272 this.scrollYElement = this.GetElementForVertScrolling(isTopDirection, this.prevIsTopDirection, this.scrollYElement); 1273 this.prevIsTopDirection = isTopDirection; 1274 } 1275 if(this.scrollXElement && xDiff != 0) 1276 this.scrollXElement.scrollLeft += xDiff; 1277 if(this.scrollYElement && yDiff != 0) { 1278 this.scrollYElement.scrollTop += yDiff; 1279 var isOuterScrollableElement = this.scrollableTreeLine[this.scrollableTreeLine.length - 1] == this.scrollYElement; 1280 if(isOuterScrollableElement) 1281 y += yDiff; 1282 } 1283 this.prevX = x; 1284 this.prevY = y; 1285 Evt.PreventEvent(e); 1286 this.onMouseMove(e); 1287 }.aspxBind(this); 1288 this.mouseUpHandler = function(e) { 1289 this.finishScrolling(); 1290 this.onMouseUp(e); 1291 }.aspxBind(this); 1292 this.mouseClickHandler = function(e){
1293 if(this.requirePreventScroll || (ASPx.IsExists(e.isTrusted) && !e.isTrusted)) 1294 return; 1295 var xDiff = this.firstX - Evt.GetEventX(e); 1296 var yDiff = this.firstY - Evt.GetEventY(e); 1297 if(xDiff > MouseScroller.MinimumOffset || yDiff > MouseScroller.MinimumOffset) 1298 return Evt.PreventEventAndBubble(e); 1299 }.aspxBind(this); 1300 this.finishScrolling = function() { 1301 Evt.DetachEventFromDocument(ASPx.TouchUIHelper.touchMouseMoveEventName, this.mouseMoveHandler); 1302 Evt.DetachEventFromDocument(ASPx.TouchUIHelper.touchMouseUpEventName, this.mouseUpHandler); 1303 this.scrollableTreeLine = []; 1304 this.prevIsTopDirection = null; 1305 mouseDownCounter--; 1306 }; 1307 }, 1308 GetScrollableElements: function() { 1309 if(!this.vertRecursive) return [ ]; 1310 var isHtmlScrollableElement = !ASPx.Browser.IsQuirksMode && !ASPx.Browser.Safari; 1311 var outerScrollableElementTag = isHtmlScrollableElement ? "HTML" : "BODY"; 1312 return ASPx.GetElementTreeLine(this.element, null, function(el) { return el == document; }) 1313 .filter(function(el) { 1314 var tagName = el.tagName; 1315 if(isHtmlScrollableElement && tagName == "BODY") 1316 return false; 1317 return ASPx.IsScrollableElement(el, false, true) || tagName == outerScrollableElementTag || el.dxScrollable; 1318 }.bind(this)); 1319 }, 1320 GetElementForVertScrolling: function(currentIsTop, prevIsTop, prevElement) { 1321 if(prevElement && currentIsTop === prevIsTop && this.GetVertScrollExcess(prevElement, currentIsTop) > 0) 1322 return prevElement; 1323 for(var i = 0; i < this.scrollableTreeLine.length; i++) { 1324 var element = this.scrollableTreeLine[i]; 1325 var excess = this.GetVertScrollExcess(element, currentIsTop); 1326 if(excess > 0) 1327 return element; 1328 } 1329 return null; 1330 }, 1331 GetVertScrollExcess: function(element, isTop) { 1332 if(isTop) 1333 return element.scrollTop; 1334 var isDocument = element.tagName == "HTML" || ASPx.Browser.Safari && !ASPx.Browser.IsQuirksMode && element.tagName == "BODY"; 1335 var clientHeight = isDocument ? ASPx.GetDocumentClientHeight() : element.clientHeight; 1336 return element.scrollHeight - clientHeight - element.scrollTop; 1337 } 1338}; 1339ASPx.MouseScroller = MouseScroller; 1340var Evt = { }; 1341Evt.GetEvent = function(evt){ 1342 return evt; 1343}; 1344Evt.IsEventPrevented = function(evt) { 1345 return evt.defaultPrevented || evt.returnValue === false; 1346}; 1347Evt.PreventEvent = function(evt){ 1348 if(evt.preventDefault) { 1349 if(evt.cancelable) 1350 evt.preventDefault(); 1351 } 1352 else 1353 evt.returnValue = false; 1354 return false; 1355}; 1356Evt.PreventEventAndBubble = function(evt){ 1357 Evt.PreventEvent(evt); 1358 if(evt.stopPropagation) 1359 evt.stopPropagation(); 1360 evt.cancelBubble = true; 1361 return false; 1362}; 1363Evt.CancelBubble = function(evt){ 1364 evt.stopPropagation(); 1365 return false; 1366}; 1367Evt.PreventImageDragging = function(image) { 1368 if(image) 1369 image.ondragstart = function() { return false; }; 1370}; 1371Evt.PreventDragStart = function(evt) { 1372 evt = Evt.GetEvent(evt); 1373 var element = Evt.GetEventSource(evt); 1374 if(element.releaseCapture) 1375 element.releaseCapture(); 1376 return false; 1377}; 1378Evt.PreventElementDrag = function(element) { 1379 Evt.AttachEventToElement(element, "mousedown", Evt.PreventEvent); 1380}; 1381Evt.PreventElementDragAndSelect = function(element, skipMouseMove, skipIESelect){ 1382 if(Browser.WebKitFamily) 1383 Evt.AttachEventToElement(element, "selectstart", Evt.PreventEventAndBubble); 1384}; 1385Evt.GetEventSource = function(evt){ 1386 if(!ASPx.IsExists(evt)) return null; 1387 return evt.srcElement ? evt.srcElement : evt.target; 1388}; 1389Evt.GetKeyCode = function(srcEvt) { 1390 return Browser.NetscapeFamily || Browser.Opera ? srcEvt.which : srcEvt.keyCode; 1391}; 1392function clientEventRequiresDocScrollCorrection() { 1393 var isSafariVerLess3 = Browser.Safari && Browser.Version < 3, 1394 isMacOSMobileVerLess51 = Browser.MacOSMobilePlatform && Browser.Version < 5.1; 1395 return Browser.AndroidDefaultBrowser || Browser.AndroidChromeBrowser || !(isSafariVerLess3 || isMacOSMobileVerLess51); 1396} 1397Evt.GetEventX = function(evt){ 1398 if(ASPx.TouchUIHelper.isTouchEvent(evt)) 1399 return ASPx.TouchUIHelper.getEventX(evt); 1400 return evt.clientX + (clientEventRequiresDocScrollCorrection() ? ASPx.GetDocumentScrollLeft() : 0); 1401}; 1402Evt.GetEventY = function(evt){ 1403 if(ASPx.TouchUIHelper.isTouchEvent(evt)) 1404 return ASPx.TouchUIHelper.getEventY(evt); 1405 return evt.clientY + (clientEventRequiresDocScrollCorrection() ? ASPx.GetDocumentScrollTop() : 0 ); 1406};
1407Evt.IsLeftButtonPressed = function(evt) { 1408 if(ASPx.TouchUIHelper.isTouchEvent(evt)) 1409 return true; 1410 evt = Evt.GetEvent(evt); 1411 if(!evt) return false; 1412 if(Browser.WebKitFamily) { 1413 if(evt.type === "pointermove") 1414 return evt.buttons === 1; 1415 return evt.which == 1; 1416 } else if(Browser.NetscapeFamily || Browser.Edge) { 1417 if(evt.type === ASPx.TouchUIHelper.touchMouseMoveEventName) 1418 return evt.buttons === 1; 1419 return evt.which == 1; 1420 } else if(Browser.Opera) 1421 return evt.button == 0; 1422 return true; 1423}; 1424Evt.IsRightButtonPressed = function(evt){ 1425 evt = Evt.GetEvent(evt); 1426 if(!ASPx.IsExists(evt)) return false; 1427 if(Browser.IE || Browser.Edge) { 1428 if(evt.type === "pointermove") 1429 return evt.buttons === 2; 1430 return evt.button == 2; 1431 } 1432 else if(Browser.NetscapeFamily || Browser.WebKitFamily) 1433 return evt.which == 3; 1434 else if (Browser.Opera) 1435 return evt.button == 1; 1436 return true; 1437}; 1438Evt.GetWheelDelta = function(evt) { 1439 var ret; 1440 if(Browser.NetscapeFamily && Browser.MajorVersion < 17) 1441 ret = -evt.detail; 1442 else if(Browser.Safari) 1443 ret = evt.wheelDelta; 1444 else 1445 ret = -evt.deltaY; 1446 if(Browser.Opera && Browser.Version < 9) 1447 ret = -ret; 1448 return ret; 1449}; 1450Evt.IsWheelEventWithDirection = function(evt) { 1451 return ASPx.Data.ArrayContains(["wheel", "mousewheel"], evt.type); 1452}; 1453Evt.GetWheelDeltaX = function(evt) { 1454 if(evt.type === "wheel") 1455 return -evt.deltaX; 1456 if(evt.type === "mousewheel") 1457 return evt.wheelDeltaX; 1458}; 1459Evt.GetWheelDeltaY = function(evt) { 1460 if(evt.type === "wheel") 1461 return -evt.deltaY; 1462 if(evt.type === "mousewheel") 1463 return evt.wheelDeltaY; 1464}; 1465Evt.IsPassiveListenersSupported = function() { 1466 if(Browser.Chrome && Browser.MajorVersion > 69 || Browser.Edge && Browser.MajorVersion > 15 || Browser.Firefox && Browser.MajorVersion > 62) 1467 return true; 1468 if(Evt.isPassiveListenersSupported === undefined) { 1469 Evt.isPassiveListenersSupported = false; 1470 try { 1471 var options = Object.defineProperty({}, "passive", { get: function() { Evt.isPassiveListenersSupported = true; } }); 1472 window.addEventListener("test", options, options); 1473 window.removeEventListener("test", options, options); 1474 } 1475 catch(err) { Evt.isPassiveListenersSupported = false; } 1476 } 1477 return !!Evt.isPassiveListenersSupported; 1478}; 1479Evt.AttachEventToElement = function(element, eventName, func, onlyBubbling, passive) { 1480 if(element.addEventListener) 1481 element.addEventListener(eventName, func, Evt.IsPassiveListenersSupported() ? { capture: !onlyBubbling, passive: !!passive } : !onlyBubbling); 1482 else 1483 element.attachEvent("on" + eventName, func); 1484}; 1485Evt.DetachEventFromElement = function(element, eventName, func, onlyBubbling) { 1486 if(element.removeEventListener) 1487 element.removeEventListener(eventName, func, Evt.IsPassiveListenersSupported() ? { capture: !onlyBubbling } : !onlyBubbling); 1488 else 1489 element.detachEvent("on" + eventName, func); 1490}; 1491Evt.AttachEventToDocument = function(eventName, func) { 1492 var attachingAllowed = ASPx.TouchUIHelper.onEventAttachingToDocument(eventName, func); 1493 if(attachingAllowed) 1494 Evt.AttachEventToDocumentCore(eventName, func); 1495}; 1496Evt.AttachEventToDocumentCore = function(eventName, func) { 1497 Evt.AttachEventToElement(document, eventName, func); 1498}; 1499Evt.DetachEventFromDocument = function(eventName, func) { 1500 Evt.DetachEventFromDocumentCore(eventName, func); 1501 ASPx.TouchUIHelper.onEventDettachedFromDocument(eventName, func); 1502}; 1503Evt.DetachEventFromDocumentCore = function(eventName, func){ 1504 Evt.DetachEventFromElement(document, eventName, func); 1505}; 1506Evt.GetMouseWheelEventName = function() { 1507 if(Browser.Safari) 1508 return "mousewheel"; 1509 if(Browser.NetscapeFamily && Browser.MajorVersion < 17) 1510 return "DOMMouseScroll"; 1511 return "wheel"; 1512}; 1513Evt.AttachMouseEnterToElement = function (element, onMouseOverHandler, onMouseOutHandler) { 1514 Evt.AttachEventToElement(element, ASPx.TouchUIHelper.pointerEnabled ? ASPx.TouchUIHelper.pointerOverEventName : "mouseover", function (evt) { mouseEnterHandler(evt, element, onMouseOverHandler, onMouseOutHandler); }); 1515 Evt.AttachEventToElement(element, ASPx.TouchUIHelper.pointerEnabled ? ASPx.TouchUIHelper.pointerOutEventName : "mouseout", function (evt) { mouseEnterHandler(evt, element, onMouseOverHandler, onMouseOutHandler); }); 1516}; 1517Evt.GetEventRelatedTarget = function(evt, isMouseOverEvent) { 1518 return evt.relatedTarget || (isMouseOverEvent ? evt.srcElement : evt.toElement); 1519}; 1520function mouseEnterHandler(evt, element, onMouseOverHandler, onMouseOutHandler) { 1521 var isMouseOverExecuted = !!element.dxMouseOverExecuted; 1522 var isMouseOverEvent = (evt.type == "mouseover" || evt.type == ASPx.TouchUIHelper.pointerOverEventName); 1523 if(isMouseOverEvent && isMouseOverExecuted || !isMouseOverEvent && !isMouseOverExecuted) 1524 return; 1525 var source = Evt.GetEventRelatedTarget(evt, isMouseOverEvent); 1526 if(!ASPx.GetIsParent(element, source)) { 1527 element.dxMouseOverExecuted = isMouseOverEvent; 1528 if(isMouseOverEvent) 1529 onMouseOverHandler(element); 1530 else 1531 onMouseOutHandler(element); 1532 } 1533 else if(isMouseOverEvent && !isMouseOverExecuted) { 1534 element.dxMouseOverExecuted = true; 1535 onMouseOverHandler(element); 1536 } 1537} 1538Evt.DispatchEvent = function(target, eventName, canBubble, cancellable) { 1539 var event = document.createEvent("Event"); 1540 event.initEvent(eventName, canBubble || false, cancellable || false); 1541 target.dispatchEvent(event); 1542}; 1543Evt.EmulateDocumentOnMouseDown = function(evt) { 1544 Evt.EmulateOnMouseDown(document, evt); 1545};
1546Evt.EmulateOnMouseDown = function(element, evt) { 1547 if(!Browser.WebKitFamily){ 1548 var emulatedEvt = document.createEvent("MouseEvents"); 1549 emulatedEvt.initMouseEvent("mousedown", true, true, window, 0, evt.screenX, evt.screenY, 1550 evt.clientX, evt.clientY, evt.ctrlKey, evt.altKey, evt.shiftKey, false, 0, null); 1551 element.dispatchEvent(emulatedEvt); 1552 } 1553}; 1554Evt.EmulateOnMouseEvent = function (type, element, evt) { 1555 evt.type = type; 1556 var emulatedEvt = document.createEvent("MouseEvents"); 1557 emulatedEvt.initMouseEvent(type, true, true, window, 0, evt.screenX, evt.screenY, 1558 evt.clientX, evt.clientY, evt.ctrlKey, evt.altKey, evt.shiftKey, false, 0, null); 1559 emulatedEvt.target = element; 1560 element.dispatchEvent(emulatedEvt); 1561}; 1562Evt.EmulateMouseClick = function (element, evt) { 1563 var x = ASPx.GetElementOffsetWidth(element) / 2; 1564 var y = ASPx.GetElementOffsetHeight(element) / 2; 1565 if (!evt) 1566 evt = { 1567 bubbles: true, 1568 cancelable: true, 1569 view: window, 1570 detail: 1, 1571 screenX: 0, 1572 screenY: 0, 1573 clientX: x, 1574 clientY: y, 1575 ctrlKey: false, 1576 altKey: false, 1577 shiftKey: false, 1578 metaKey: false, 1579 button: 0, 1580 relatedTarget: null 1581 }; 1582 Evt.EmulateOnMouseEvent("mousedown", element, evt); 1583 Evt.EmulateOnMouseEvent("mouseup", element, evt); 1584 Evt.EmulateOnMouseEvent("click", element, evt); 1585}; 1586Evt.DoElementClick = function(element) { 1587 try{ 1588 element.click(); 1589 } 1590 catch(e){ 1591 } 1592}; 1593Evt.IsActionKeyPressed = function(evt) { 1594 return evt.keyCode === ASPx.Key.Space || 1595 evt.keyCode === ASPx.Key.Enter || 1596 (evt.keyCode === ASPx.Key.Down && evt.altKey); 1597}; 1598Evt.InvokeMouseClickByKeyDown = function(evt, handler) { 1599 if(Evt.IsActionKeyPressed(evt)) { 1600 ASPx.Evt.PreventEvent(evt); 1601 if(!handler) 1602 ASPx.Evt.GetEventSource(evt).onclick(); 1603 else 1604 handler(evt); 1605 } 1606}; 1607Evt.AttachContextMenuToElement = function (element, handler, onlyBubbling) { 1608 if (ASPx.TouchUIHelper.useLongTapHelper()) 1609 element.detachContextMenuEventHandler = ASPx.TouchUIHelper.attachLongTapHandler(element, handler, onlyBubbling); 1610 else 1611 Evt.AttachEventToElement(element, "contextmenu", handler, onlyBubbling); 1612}; 1613Evt.DetachContextMenuFromElement = function (element, handler) { 1614 if (element.detachContextMenuEventHandler) 1615 element.detachContextMenuEventHandler(); 1616 else 1617 Evt.DetachEventFromElement(element, "contextmenu", handler); 1618}; 1619Evt.PreventContextMenuOnElement = function(element) { 1620 Evt.AttachContextMenuToElement(element, function(evt) { 1621 Evt.PreventEvent(evt); 1622 }); 1623}; 1624ASPx.Evt = Evt; 1625var Attr = { }; 1626Attr.GetAttribute = function(obj, attrName){ 1627 if(obj.getAttribute) 1628 return obj.getAttribute(attrName); 1629 else if(obj.getPropertyValue) { 1630 if(Browser.Firefox) { 1631 try { 1632 return obj.getPropertyValue(attrName); 1633 } catch(e) { 1634 return obj[attrName]; 1635 } 1636 } 1637 return obj.getPropertyValue(attrName); 1638 } 1639 return null; 1640}; 1641Attr.SetAttribute = function(obj, attrName, value){ 1642 if(obj.setAttribute) 1643 obj.setAttribute(attrName, value); 1644 else if(obj.setProperty) 1645 obj.setProperty(attrName, value, ""); 1646}; 1647Attr.ToggleAttribute = function(obj, attrName, value, condition) { 1648 if(condition) 1649 Attr.SetAttribute(obj, attrName, value); 1650 else 1651 Attr.RemoveAttribute(obj, attrName); 1652}; 1653Attr.RemoveAttribute = function(obj, attrName){ 1654 if(obj.removeAttribute) 1655 obj.removeAttribute(attrName); 1656 else if(obj.removeProperty) 1657 obj.removeProperty(attrName); 1658}; 1659Attr.IsExistsAttribute = function(obj, attrName){ 1660 var value = Attr.GetAttribute(obj, attrName); 1661 return (value != null) && (value !== ""); 1662}; 1663Attr.SetOrRemoveAttribute = function(obj, attrName, value) { 1664 if(!value) 1665 Attr.RemoveAttribute(obj, attrName); 1666 else 1667 Attr.SetAttribute(obj, attrName, value); 1668}; 1669Attr.SaveAttribute = function(obj, attrName, savedObj, savedAttrName){ 1670 if(!Attr.IsExistsAttribute(savedObj, savedAttrName)){ 1671 var oldValue = Attr.IsExistsAttribute(obj, attrName) ? Attr.GetAttribute(obj, attrName) : ASPx.EmptyObject; 1672 Attr.SetAttribute(savedObj, savedAttrName, oldValue); 1673 } 1674}; 1675Attr.SaveStyleAttribute = function(obj, attrName){ 1676 Attr.SaveAttribute(obj.style, attrName, obj, "saved" + attrName); 1677}; 1678Attr.ChangeAttributeExtended = function(obj, attrName, savedObj, savedAttrName, newValue){ 1679 Attr.SaveAttribute(obj, attrName, savedObj, savedAttrName); 1680 Attr.SetAttribute(obj, attrName, newValue); 1681}; 1682Attr.ChangeAttribute = function(obj, attrName, newValue){ 1683 Attr.ChangeAttributeExtended(obj, attrName, obj, "saved" + attrName, newValue); 1684}; 1685Attr.ChangeStyleAttribute = function(obj, attrName, newValue){ 1686 Attr.ChangeAttributeExtended(obj.style, attrName, obj, "saved" + attrName, newValue); 1687}; 1688Attr.ResetAttributeExtended = function(obj, attrName, savedObj, savedAttrName){ 1689 Attr.SaveAttribute(obj, attrName, savedObj, savedAttrName); 1690 Attr.SetAttribute(obj, attrName, ""); 1691 Attr.RemoveAttribute(obj, attrName); 1692}; 1693Attr.ResetAttribute = function(obj, attrName){ 1694 Attr.ResetAttributeExtended(obj, attrName, obj, "saved" + attrName); 1695}; 1696Attr.ResetStyleAttribute = function(obj, attrName){ 1697 Attr.ResetAttributeExtended(obj.style, attrName, obj, "saved" + attrName); 1698}; 1699Attr.RestoreAttributeExtended = function(obj, attrName, savedObj, savedAttrName){ 1700 if(Attr.IsExistsAttribute(savedObj, savedAttrName)){ 1701 var oldValue = Attr.GetAttribute(savedObj, savedAttrName); 1702 if(oldValue != ASPx.EmptyObject) 1703 Attr.SetAttribute(obj, attrName, oldValue); 1704 else 1705 Attr.RemoveAttribute(obj, attrName); 1706 Attr.RemoveAttribute(savedObj, savedAttrName); 1707 return true; 1708 } 1709 return false; 1710}; 1711Attr.RestoreAttribute = function(obj, attrName){ 1712 return Attr.RestoreAttributeExtended(obj, attrName, obj, "saved" + attrName); 1713}; 1714Attr.RestoreStyleAttribute = function(obj, attrName){ 1715 return Attr.RestoreAttributeExtended(obj.style, attrName, obj, "saved" + attrName); 1716}; 1717Attr.CopyAllAttributes = function(sourceElem, destElement) { 1718 var attrs = sourceElem.attributes; 1719 for(var n = 0; n < attrs.length; n++) { 1720 var attr = attrs[n]; 1721 if(attr.specified) { 1722 var attrName = attr.nodeName; 1723 var attrValue = sourceElem.getAttribute(attrName, 2); 1724 if(attrValue == null) 1725 attrValue = attr.nodeValue; 1726 destElement.setAttribute(attrName, attrValue, 0); 1727 } 1728 } 1729 if(sourceElem.style.cssText !== '') 1730 destElement.style.cssText = sourceElem.style.cssText; 1731}; 1732Attr.RemoveAllAttributes = function(element, excludedAttributes) { 1733 var excludedAttributesHashTable = {}; 1734 if(excludedAttributes) 1735 excludedAttributesHashTable = Data.CreateHashTableFromArray(excludedAttributes); 1736 if(element.attributes) { 1737 var attrArray = element.attributes; 1738 for(var i = 0; i < attrArray.length; i++) { 1739 var attrName = attrArray[i].name; 1740 if(!ASPx.IsExists(excludedAttributesHashTable[attrName.toLowerCase()])) { 1741 try { 1742 attrArray.removeNamedItem(attrName); 1743 } catch (e) { } 1744 } 1745 } 1746 } 1747}; 1748Attr.RemoveStyleAttribute = function(element, attrName) { 1749 if(element.style) { 1750 if(Browser.Firefox && element.style[attrName]) 1751 element.style[attrName] = ""; 1752 if(element.style.removeAttribute && element.style.removeAttribute != "") 1753 element.style.removeAttribute(attrName); 1754 else if(element.style.removeProperty && element.style.removeProperty != "") 1755 element.style.removeProperty(attrName); 1756 } 1757}; 1758Attr.RemoveAllStyles = function(element) { 1759 if(element.style) { 1760 for(var key in element.style) 1761 Attr.RemoveStyleAttribute(element, key); 1762 Attr.RemoveAttribute(element, "style"); 1763 } 1764}; 1765Attr.GetTabIndexAttributeName = function(){ 1766 return "tabindex"; 1767}; 1768Attr.ChangeTabIndexAttribute = function(element){ 1769 var attribute = Attr.GetTabIndexAttributeName(); 1770 if(Attr.GetAttribute(element, attribute) != -1) 1771 Attr.ChangeAttribute(element, attribute, -1); 1772}; 1773Attr.SaveTabIndexAttributeAndReset = function(element) { 1774 var attribute = Attr.GetTabIndexAttributeName(); 1775 Attr.SaveAttribute(element, attribute, element, "saved" + attribute); 1776 Attr.SetAttribute(element, attribute, -1); 1777}; 1778Attr.RestoreTabIndexAttribute = function(element){ 1779 var attribute = Attr.GetTabIndexAttributeName(); 1780 if(Attr.IsExistsAttribute(element, attribute)) { 1781 if(Attr.GetAttribute(element, attribute) == -1) { 1782 if(Attr.IsExistsAttribute(element, "saved" + attribute)){ 1783 var oldValue = Attr.GetAttribute(element, "saved" + attribute); 1784 if(oldValue != ASPx.EmptyObject) 1785 Attr.SetAttribute(element, attribute, oldValue); 1786 else { 1787 if(Browser.WebKitFamily) 1788 Attr.SetAttribute(element, attribute, 0); 1789 Attr.RemoveAttribute(element, attribute); 1790 } 1791 Attr.RemoveAttribute(element, "saved" + attribute); 1792 } 1793 } 1794 } 1795}; 1796Attr.ChangeAttributesMethod = function(enabled){ 1797 return enabled ? Attr.RestoreAttribute : Attr.ResetAttribute; 1798}; 1799Attr.InitiallyChangeAttributesMethod = function(enabled){ 1800 return enabled ? Attr.ChangeAttribute : Attr.ResetAttribute; 1801}; 1802Attr.ChangeStyleAttributesMethod = function(enabled){ 1803 return enabled ? Attr.RestoreStyleAttribute : Attr.ResetStyleAttribute; 1804}; 1805Attr.InitiallyChangeStyleAttributesMethod = function(enabled){ 1806 return enabled ? Attr.ChangeStyleAttribute : Attr.ResetStyleAttribute; 1807}; 1808Attr.ChangeEventsMethod = function(enabled){ 1809 return enabled ? Evt.AttachEventToElement : Evt.DetachEventFromElement; 1810}; 1811Attr.ChangeDocumentEventsMethod = function(enabled){ 1812 return enabled ? Evt.AttachEventToDocument : Evt.DetachEventFromDocument; 1813}; 1814Attr.ChangeCellSpanCount = function(cell, value, isColumnSpan) { 1815 if(!cell) return; 1816 var propertyKey = isColumnSpan ? "colSpan" : "rowSpan"; 1817 var prevValue = cell[propertyKey]; 1818 if(value > 1) 1819 cell[propertyKey] = value; 1820 else if(prevValue !== 1) 1821 Attr.RemoveAttribute(cell, propertyKey); 1822}; 1823Attr.AppendScriptType = function(script) { 1824 if(!isHtml5Mode()) 1825 script.type = "text/javascript"; 1826}; 1827Attr.AppendStyleType = function(style) { 1828 if(!isHtml5Mode()) 1829 style.type = "text/css"; 1830}; 1831function isHtml5Mode() { 1832 return ASPx.DoctypeMode === "Html5"; 1833} 1834ASPx.Attr = Attr; 1835var Aria = { 1836 atomic: "aria-atomic", 1837 checked: "aria-checked", 1838 descendant: "aria-activedescendant", 1839 described: "aria-describedby", 1840 disabled: "aria-disabled", 1841 expanded: "aria-expanded", 1842 haspopup: "aria-haspopup", 1843 invalid: "aria-invalid", 1844 label: "aria-label", 1845 labelled: "aria-labelledby", 1846 level: "aria-level", 1847 owns: "aria-owns", 1848 posinset: "aria-posinset", 1849 role: "role", 1850 selected: "aria-selected", 1851 setsize: "aria-setsize", 1852 valuemax: "aria-valuemax", 1853 valuemin: "aria-valuemin", 1854 valuenow: "aria-valuenow" 1855}; 1856Aria.SetOrRemoveDescendant = function(obj, value) { 1857 ASPx.Attr.SetOrRemoveAttribute(obj, Aria.descendant, value); 1858}; 1859Aria.SetOrRemoveLabel = function(obj, value) { 1860 ASPx.Attr.SetOrRemoveAttribute(obj, Aria.label, value); 1861}; 1862Aria.SetOrRemoveDisabled = function(obj, value) { 1863 ASPx.Attr.SetOrRemoveAttribute(obj, Aria.disabled, value); 1864}; 1865Aria.AppendLabel = function(obj, value, checkExists) { 1866 var currentValue = ASPx.Attr.GetAttribute(obj, Aria.label) || ""; 1867 var resultParts = [ ]; 1868 if(currentValue) 1869 resultParts.push(currentValue); 1870 var needAppendValue = value && (!checkExists || currentValue.indexOf(value) == -1); 1871 if(needAppendValue) 1872 resultParts.push(value); 1873 ASPx.Attr.SetAttribute(obj, Aria.label, resultParts.join(" ")); 1874}; 1875Aria.SetOrRemoveLabelled = function(obj, value) { 1876 ASPx.Attr.SetOrRemoveAttribute(obj, Aria.labelled, value); 1877}; 1878Aria.SetApplicationRole = function(obj) { 1879 ASPx.Attr.SetAttribute(obj, Aria.role, "application"); 1880}; 1881Aria.SetSilence = function(obj) { 1882 ASPx.Attr.SetAttribute(obj, Aria.label, ";"); 1883};
1884Aria.SetExpanded = function(obj, expanded) { 1885 if(!obj || !ASPx.Attr.GetAttribute(obj, Aria.expanded)) return; 1886 Aria.SetBoolAttribute(obj, Aria.expanded, expanded); 1887}; 1888Aria.SetAtomic = function(obj, value) { 1889 Aria.SetBoolAttribute(obj, Aria.atomic, value); 1890}; 1891Aria.SetBoolAttribute = function(obj, attribute, value) { 1892 if(value) 1893 ASPx.Attr.SetAttribute(obj, attribute, true); 1894 else 1895 ASPx.Attr.SetAttribute(obj, attribute, false); 1896}; 1897ASPx.Attr.Aria = Aria; 1898var Color = { }; 1899function _aspxToHex(d) { 1900 return (d < 16) ? ("0" + d.toString(16)) : d.toString(16); 1901} 1902Color.RGBRegexp = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/; 1903Color.RGBARegexp = /rgba?\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*,?\s*([0-9]*\.?[0-9]*)\s*\)/; 1904Color.ColorToHexadecimal = function(colorValue, isRGBA) { 1905 if(typeof(colorValue) == "number") { 1906 var r = colorValue & 0xFF; 1907 var g = (colorValue >> 8) & 0xFF; 1908 var b = (colorValue >> 16) & 0xFF; 1909 return "#" + _aspxToHex(r) + _aspxToHex(g) + _aspxToHex(b); 1910 } 1911 if(colorValue && (colorValue.substr(0, 3).toLowerCase() == "rgb")) { 1912 var regResult = colorValue.toLowerCase().match(isRGBA ? Color.RGBARegexp : Color.RGBRegexp); 1913 if(regResult) { 1914 var r = parseInt(regResult[1]); 1915 var g = parseInt(regResult[2]); 1916 var b = parseInt(regResult[3]); 1917 if (isRGBA) 1918 return { r: r, g: g, b: b, a: regResult[4] !== undefined ? parseFloat(regResult[4]) : 1 }; 1919 return "#" + _aspxToHex(r) + _aspxToHex(g) + _aspxToHex(b); 1920 } 1921 return null; 1922 } 1923 if(colorValue && (colorValue.charAt(0) == "#")) 1924 return colorValue; 1925 return null; 1926}; 1927Color.Names = { 1928 AddColorNames: function(stringResourcesObj) { 1929 if(stringResourcesObj) { 1930 for(var key in stringResourcesObj) 1931 if(stringResourcesObj.hasOwnProperty(key)) 1932 this[key] = stringResourcesObj[key]; 1933 } 1934 } 1935}; 1936ASPx.Color = Color; 1937var Url = { }; 1938Url.Navigate = function(url, target) { 1939 var javascriptPrefix = "javascript:"; 1940 if(!url || url === "") 1941 return; 1942 else if(url.indexOf(javascriptPrefix) != -1) 1943 eval(url.substr(javascriptPrefix.length)); 1944 else { 1945 try { 1946 if(target != "") 1947 navigateTo(url, target); 1948 else 1949 location.href = url; 1950 } 1951 catch(e) { 1952 } 1953 } 1954}; 1955Url.NavigateByLink = function(linkElement) { 1956 Url.Navigate(Attr.GetAttribute(linkElement, "href"), linkElement.target); 1957}; 1958Url.GetAbsoluteUrl = function(url) { 1959 if(url) 1960 url = Url.getURLObject(url).href; 1961 return url; 1962}; 1963Url.Redirect = function(url) { 1964 window.location.href = url; 1965}; 1966var absolutePathPrefixes = 1967 [ "about:", "file:///", "ftp://", "gopher://", "http://", "https://", "javascript:", "mailto:", "news:", "res://", "telnet://", "view-source:" ]; 1968Url.isAbsoluteUrl = function(url) { 1969 if (url) { 1970 for (var i = 0; i < absolutePathPrefixes.length; i++) { 1971 if(url.indexOf(absolutePathPrefixes[i]) == 0) 1972 return true; 1973 } 1974 } 1975 return false; 1976}; 1977Url.getURLObject = function(url) { 1978 var link = document.createElement('A'); 1979 link.href = url || ""; 1980 return { 1981 href: link.href, 1982 protocol: link.protocol, 1983 host: link.host, 1984 port: link.port, 1985 pathname: link.pathname, 1986 search: link.search, 1987 hash: link.hash 1988 }; 1989}; 1990Url.getRootRelativeUrl = function(url) { 1991 return getRelativeUrl(url, !Url.isRootRelativeUrl(url), true); 1992}; 1993Url.getPathRelativeUrl = function(url) { 1994 return getRelativeUrl(url, !Url.isPathRelativeUrl(url), false); 1995}; 1996function getRelativeUrl(url, isValid, isRootRelative) { 1997 if(url && !(/data:([^;]+\/?[^;]*)(;charset=[^;]*)?(;base64,)/.test(url)) && isValid) { 1998 var urlObject = Url.getURLObject(url); 1999 var baseUrlObject = Url.getURLObject(); 2000 if(!Url.isAbsoluteUrl(url) || urlObject.host === baseUrlObject.host && urlObject.protocol === baseUrlObject.protocol) { 2001 url = urlObject.pathname; 2002 if(!isRootRelative) 2003 url = getPathRelativeUrl(baseUrlObject.pathname, url); 2004 url = url + urlObject.search + urlObject.hash; 2005 } 2006 } 2007 return url; 2008} 2009function getPathRelativeUrl(baseUrl, url) { 2010 var requestSegments = getSegments(baseUrl, false); 2011 var urlSegments = getSegments(url, true); 2012 return buildPathRelativeUrl(requestSegments, urlSegments, 0, 0, ""); 2013} 2014function getSegments(url, addTail) { 2015 var segments = []; 2016 var startIndex = 0; 2017 var endIndex = -1; 2018 while ((endIndex = url.indexOf("/", startIndex)) != -1) { 2019 segments.push(url.substring(startIndex, ++endIndex)); 2020 startIndex = endIndex; 2021 } 2022 if(addTail && startIndex < url.length) 2023 segments.push(url.substring(startIndex, url.length)); 2024 return segments; 2025} 2026function buildPathRelativeUrl(requestSegments, urlSegments, reqIndex, urlIndex, buffer) { 2027 if(urlIndex >= urlSegments.length) 2028 return buffer; 2029 if(reqIndex >= requestSegments.length) 2030 return buildPathRelativeUrl(requestSegments, urlSegments, reqIndex, urlIndex + 1, buffer + urlSegments[urlIndex]); 2031 if(requestSegments[reqIndex] === urlSegments[urlIndex] && urlIndex === reqIndex) 2032 return buildPathRelativeUrl(requestSegments, urlSegments, reqIndex + 1, urlIndex + 1, buffer); 2033 return buildPathRelativeUrl(requestSegments, urlSegments, reqIndex + 1, urlIndex, buffer + "../"); 2034} 2035Url.isPathRelativeUrl = function(url) { 2036 return !!url && !Url.isAbsoluteUrl(url) && url.indexOf("/") != 0; 2037}; 2038Url.isRootRelativeUrl = function(url) { 2039 return !!url && !Url.isAbsoluteUrl(url) && url.indexOf("/") == 0 && url.indexOf("//") != 0; 2040}; 2041function navigateTo(url, target) { 2042 var lowerCaseTarget = target.toLowerCase(); 2043 if("_top" == lowerCaseTarget) 2044 top.location.href = url; 2045 else if("_self" == lowerCaseTarget) 2046 location.href = url; 2047 else if("_search" == lowerCaseTarget) 2048 openInNewWindow(url); 2049 else if("_media" == lowerCaseTarget) 2050 openInNewWindow(url); 2051 else if("_parent" == lowerCaseTarget) 2052 window.parent.location.href = url; 2053 else if("_blank" == lowerCaseTarget) 2054 openInNewWindow(url); 2055 else { 2056 var frame = getFrame(top.frames, target); 2057 if(frame != null) 2058 frame.location.href = url; 2059 else 2060 openInNewWindow(url); 2061 } 2062} 2063function openInNewWindow(url) { 2064 if(ASPx.Browser.Safari) 2065 openInNewWindowViaIframe(url); 2066 else { 2067 var newWindow = window.open(); 2068 newWindow.opener = null; 2069 newWindow.location = url; 2070 } 2071} 2072function openInNewWindowViaIframe(url) { 2073 var iframe = document.createElement('iframe');
2074 iframe.style.display = 'none'; 2075 document.body.appendChild(iframe); 2076 var iframeDoc = iframe.contentDocument || iframe.contentWindow.document; 2077 var openArgs = '"' + url + '"'; 2078 var script = iframeDoc.createElement('script'); 2079 script.type = 'text/javascript'; 2080 script.text = 'window.parent = null; ' + 2081 'window.top = null;' + 2082 'window.frameElement = null;' + 2083 'var child = window.open(' + openArgs + ');' + 2084 'child.opener = null'; 2085 iframeDoc.body.appendChild(script); 2086 document.body.removeChild(iframe); 2087} 2088ASPx.Url = Url; 2089var Json = { }; 2090function isValid(JsonString) { 2091 return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(JsonString.replace(/"(\\.|[^"\\])*"/g, ''))); 2092} 2093Json.Eval = function(jsonString, controlName) { 2094 if(isValid(jsonString)) { 2095 return eval("(" + jsonString + ")"); 2096 } else { 2097 throw new Error(controlName + " received incorrect JSON-data: " + jsonString); 2098 } 2099}; 2100Json.ToJson = function(param, skipEncodeHtml){ 2101 var paramType = typeof(param); 2102 if((paramType == "undefined") || (param == null)) 2103 return null; 2104 if((paramType == "object") && (typeof(param.__toJson) == "function")) 2105 return param.__toJson(); 2106 if((paramType == "number") || (paramType == "boolean")) 2107 return param; 2108 if(param.constructor == Date) 2109 return dateToJson(param); 2110 if(paramType == "string") { 2111 var result = param.replace(/\\/g, "\\\\"); 2112 result = result.replace(/"/g, "\\\""); 2113 result = result.replace(/\n/g, "\\n"); 2114 result = result.replace(/\r/g, "\\r"); 2115 if(!skipEncodeHtml) { 2116 result = result.replace(/</g, "\\u003c"); 2117 result = result.replace(/>/g, "\\u003e"); 2118 } 2119 return "\"" + result + "\""; 2120 } 2121 if(param.constructor == Array){ 2122 var values = []; 2123 for(var i = 0; i < param.length; i++) { 2124 var jsonValue = Json.ToJson(param[i], skipEncodeHtml); 2125 if(jsonValue === null) 2126 jsonValue = "null"; 2127 values.push(jsonValue); 2128 } 2129 return "[" + values.join(",") + "]"; 2130 } 2131 var exceptKeys = {}; 2132 if(ASPx.Ident.IsArray(param.__toJsonExceptKeys)) 2133 exceptKeys = Data.CreateHashTableFromArray(param.__toJsonExceptKeys); 2134 exceptKeys["__toJsonExceptKeys"] = 1; 2135 var values = []; 2136 for(var key in param) { 2137 if(param.hasOwnProperty(key)) { 2138 if(ASPx.IsFunction(param[key])) 2139 continue; 2140 if(exceptKeys[key] == 1) 2141 continue; 2142 values.push(Json.ToJson(key) + ":" + Json.ToJson(param[key], skipEncodeHtml)); 2143 } 2144 } 2145 return "{" + values.join(",") + "}"; 2146}; 2147function dateToJson(date) { 2148 var result = [ 2149 date.getFullYear(), 2150 date.getMonth(), 2151 date.getDate() 2152 ]; 2153 var time = { 2154 h: date.getHours(), 2155 m: date.getMinutes(), 2156 s: date.getSeconds(), 2157 ms: date.getMilliseconds() 2158 }; 2159 if(time.h || time.m || time.s || time.ms) 2160 result.push(time.h); 2161 if(time.m || time.s || time.ms) 2162 result.push(time.m); 2163 if(time.s || time.ms) 2164 result.push(time.s); 2165 if(time.ms) 2166 result.push(time.ms); 2167 return "new Date(" + result.join() + ")"; 2168} 2169ASPx.Json = Json; 2170ASPx.CreateClass = function(parentClass, properties) { 2171 if(arguments.length == 1) { 2172 properties = parentClass; 2173 parentClass = null; 2174 } 2175 var ret = function() { 2176 if(ret.preparing) 2177 return delete(ret.preparing); 2178 if(ret.constr) { 2179 this.constructor = ret; 2180 ret.constr.apply(this, arguments); 2181 } 2182 }; 2183 ret.prototype = {}; 2184 if(parentClass) { 2185 parentClass.preparing = true; 2186 for(var name in parentClass) { 2187 if(parentClass.hasOwnProperty(name) && name != 'constr' && ASPx.IsFunction(parentClass[name]) && !ret[name]) 2188 ret[name] = parentClass[name].aspxBind(parentClass); 2189 } 2190 ret.prototype = new parentClass; 2191 ret.prototype.constructor = parentClass; 2192 ret.constr = parentClass; 2193 } 2194 if(properties) { 2195 var constructorName = "constructor"; 2196 for(var name in properties) { 2197 if(!properties.hasOwnProperty(name)) 2198 continue; 2199 var getter = Object.getOwnPropertyDescriptor(properties, name).get; 2200 var setter = Object.getOwnPropertyDescriptor(properties, name).set; 2201 if(getter || setter) 2202 Object.defineProperty(ret.prototype, name, { 2203 set: setter, 2204 get: getter, 2205 enumerable: true, 2206 configurable: true 2207 });
2208 if(name != constructorName && !getter && !setter) 2209 ret.prototype[name] = properties[name]; 2210 } 2211 if(properties[constructorName] && properties[constructorName] != Object) 2212 ret.constr = properties[constructorName]; 2213 } 2214 return ret; 2215}; 2216var registeredMixins = {}; 2217ASPx.GetMixin = function (name, baseClass) { 2218 var mixinCache = baseClass._mixins || (baseClass._mixins = {}); 2219 var resultClass = mixinCache[name]; 2220 if (!resultClass) { 2221 var mixinCodeBuilder = registeredMixins[name]; 2222 if (!mixinCodeBuilder) 2223 throw new Error("mixin with the '" + name + "' is not registered"); 2224 var mixinCode = mixinCodeBuilder(baseClass); 2225 mixinCode.mixinName = name; 2226 resultClass = ASPx.CreateClass(baseClass, mixinCode); 2227 mixinCache[name] = resultClass; 2228 } 2229 return resultClass; 2230}; 2231ASPx.RegisterMixin = function() { 2232 var name = arguments.length == 1 ? "mixin_" + ASPx.CreateGuid() : arguments[0]; 2233 var mixinCodeBuilder = arguments[arguments.length - 1]; 2234 if (registeredMixins[name]) 2235 throw new Error("mixin with the '" + name + "' name is already defined"); 2236 registeredMixins[name] = mixinCodeBuilder; 2237 return function(baseClass) { return ASPx.GetMixin(name, baseClass); }; 2238}; 2239ASPx.FormatCallbackArg = function(prefix, arg) { 2240 if(prefix == null && arg == null) 2241 return ""; 2242 if(prefix == null) prefix = ""; 2243 if(arg == null) arg = ""; 2244 if(arg != null && !ASPx.IsExists(arg.length) && ASPx.IsExists(arg.value)) 2245 arg = arg.value; 2246 arg = arg.toString(); 2247 return [prefix, '|', arg.length, '|' , arg].join(''); 2248}; 2249ASPx.FormatCallbackArgs = function(callbackData) { 2250 var sb = [ ]; 2251 for(var i = 0; i < callbackData.length; i++) 2252 sb.push(ASPx.FormatCallbackArg(callbackData[i][0], callbackData[i][1])); 2253 return sb.join(""); 2254}; 2255ASPx.ParseShortcutString = function(shortcutString) { 2256 if(!shortcutString) 2257 return 0; 2258 var isCtrlKey = false; 2259 var isShiftKey = false; 2260 var isAltKey = false; 2261 var isMetaKey = false; 2262 var keyCode = null; 2263 var shcKeys = shortcutString.toString().split("+"); 2264 if(shcKeys.length > 0) { 2265 for(var i = 0; i < shcKeys.length; i++) { 2266 var key = Str.Trim(shcKeys[i].toUpperCase()); 2267 switch (key) { 2268 case "CONTROL": 2269 case "CONTROLKEY": 2270 case "CTRL": 2271 isCtrlKey = true; 2272 break; 2273 case "SHIFT": 2274 case "SHIFTKEY": 2275 isShiftKey = true; 2276 break; 2277 case "ALT": 2278 isAltKey = true; 2279 break; 2280 case "CMD": 2281 isMetaKey = true; 2282 break; 2283 case "F1": keyCode = ASPx.Key.F1; break; 2284 case "F2": keyCode = ASPx.Key.F2; break; 2285 case "F3": keyCode = ASPx.Key.F3; break; 2286 case "F4": keyCode = ASPx.Key.F4; break; 2287 case "F5": keyCode = ASPx.Key.F5; break; 2288 case "F6": keyCode = ASPx.Key.F6; break; 2289 case "F7": keyCode = ASPx.Key.F7; break; 2290 case "F8": keyCode = ASPx.Key.F8; break; 2291 case "F9": keyCode = ASPx.Key.F9; break; 2292 case "F10": keyCode = ASPx.Key.F10; break; 2293 case "F11": keyCode = ASPx.Key.F11; break; 2294 case "F12": keyCode = ASPx.Key.F12; break; 2295 case "RETURN": 2296 case "ENTER": keyCode = ASPx.Key.Enter; break; 2297 case "HOME": keyCode = ASPx.Key.Home; break; 2298 case "END": keyCode = ASPx.Key.End; break; 2299 case "LEFT": keyCode = ASPx.Key.Left; break; 2300 case "RIGHT": keyCode = ASPx.Key.Right; break; 2301 case "UP": keyCode = ASPx.Key.Up; break; 2302 case "DOWN": keyCode = ASPx.Key.Down; break; 2303 case "PAGEUP": keyCode = ASPx.Key.PageUp; break; 2304 case "PAGEDOWN": keyCode = ASPx.Key.PageDown; break; 2305 case "SPACE": keyCode = ASPx.Key.Space; break; 2306 case "TAB": keyCode = ASPx.Key.Tab; break; 2307 case "BACKSPACE": 2308 case "BACK": keyCode = ASPx.Key.Backspace; break; 2309 case "CONTEXT": keyCode = ASPx.Key.ContextMenu; break; 2310 case "ESCAPE": 2311 case "ESC": 2312 keyCode = ASPx.Key.Esc; 2313 break; 2314 case "DELETE": 2315 case "DEL": 2316 keyCode = ASPx.Key.Delete; 2317 break; 2318 case "INSERT": 2319 case "INS": 2320 keyCode = ASPx.Key.Insert; 2321 break; 2322 case "PLUS": 2323 keyCode = "+".charCodeAt(0); 2324 break; 2325 default: 2326 keyCode = key.charCodeAt(0); 2327 break; 2328 } 2329 } 2330 } else 2331 ASPx.ShowErrorAlert("Invalid shortcut"); 2332 return ASPx.GetShortcutCode(keyCode, isCtrlKey, isShiftKey, isAltKey, isMetaKey); 2333}; 2334ASPx.GetShortcutCode = function(keyCode, isCtrlKey, isShiftKey, isAltKey, isMetaKey) { 2335 var value = keyCode; 2336 value |= isCtrlKey ? ASPx.ModifierKey.Ctrl : 0; 2337 value |= isShiftKey ? ASPx.ModifierKey.Shift : 0; 2338 value |= isAltKey ? ASPx.ModifierKey.Alt : 0; 2339 value |= isMetaKey ? ASPx.ModifierKey.Meta : 0; 2340 return value; 2341}; 2342ASPx.GetShortcutCodeByEvent = function(evt) { 2343 return ASPx.GetShortcutCode(Evt.GetKeyCode(evt), evt.ctrlKey, evt.shiftKey, evt.altKey, ASPx.Browser.MacOSPlatform ? evt.metaKey : false); 2344};
2345ASPx.IsPasteShortcut = function(evt) { 2346 if(evt.type === "paste") 2347 return true; 2348 var keyCode = Evt.GetKeyCode(evt); 2349 if(Browser.NetscapeFamily && evt.which == 0) 2350 keyCode = evt.keyCode; 2351 return (evt.ctrlKey && (keyCode == 118 || (keyCode == 86))) || 2352 (evt.shiftKey && !evt.ctrlKey && !evt.altKey && 2353 (keyCode == ASPx.Key.Insert)) ; 2354}; 2355var NotPrintableKeyCodes = null; 2356ASPx.IsPrintableKey = function(keyCode) { 2357 if (!NotPrintableKeyCodes) 2358 NotPrintableKeyCodes = Object.keys(ASPx.Key).map(function(key) { return ASPx.Key[key]; }); 2359 return !ASPx.Data.ArrayContains(NotPrintableKeyCodes, keyCode); 2360}; 2361ASPx.SetFocus = function(element, selectAction) { 2362 function focusCore(element, selectAction){ 2363 try { 2364 element.focus(); 2365 if(selectAction) { 2366 var currentSelection = Selection.GetInfo(element); 2367 if(currentSelection.startPos == currentSelection.endPos) { 2368 switch(selectAction) { 2369 case "start": 2370 Selection.SetCaretPosition(element, 0); 2371 break; 2372 case "all": 2373 Selection.Set(element); 2374 break; 2375 } 2376 } 2377 } 2378 } catch (e) { 2379 } 2380 } 2381 if(ASPxClientUtils.iOSPlatform || ASPxClientUtils.androidPlatform) 2382 focusCore(element, selectAction); 2383 else { 2384 window.setTimeout(function() { 2385 focusCore(element, selectAction); 2386 }, ASPx.FOCUS_TIMEOUT); 2387 } 2388}; 2389ASPx.IsFocusableCore = function(element, skipContainerVisibilityCheck) { 2390 var current = element; 2391 while(current && current.nodeType == 1) { 2392 if(current == element || !skipContainerVisibilityCheck(current)) { 2393 var tagName = current.tagName.toUpperCase(); 2394 if(tagName == "BODY") 2395 return true; 2396 var disabledElementTags = ["INPUT", "BUTTON", "TEXTAREA", "SELECT", "OPTION"]; 2397 if(disabledElementTags.indexOf(tagName) !== -1 && current.disabled || !ASPx.GetElementDisplay(current) || !ASPx.GetElementVisibility(current)) 2398 return false; 2399 } 2400 current = current.parentNode; 2401 } 2402 return true; 2403}; 2404ASPx.IsFocusable = function(element) { 2405 return ASPx.IsFocusableCore(element, ASPx.FalseFunction); 2406}; 2407ASPx.RemoveFocus = function(parent) { 2408 var div = document.createElement('div'); 2409 div.tabIndex = "-1"; 2410 concealDivElement(div); 2411 parent.appendChild(div); 2412 if(ASPx.IsFocusable(div)) 2413 div.focus(); 2414 ASPx.RemoveElement(div); 2415}; 2416function concealDivElement(div){ 2417 div.style.position = "absolute"; 2418 div.style.left = 0; 2419 div.style.top = 0; 2420 if(ASPx.Browser.WebKitFamily) { 2421 div.style.opacity = 0; 2422 div.style.width = 1; 2423 div.style.height = 1; 2424 } else { 2425 div.style.border = 0; 2426 div.style.width = 0; 2427 div.style.height = 0; 2428 } 2429} 2430var ActionElementsCache = ASPx.CreateClass(null, { 2431 constructor: function() { 2432 this.usageCounter = 0; 2433 this.elements = [ ]; 2434 this.values = [ ]; 2435 }, 2436 IsActive: function() { return this.usageCounter > 0; }, 2437 BeginUsage: function() { 2438 this.usageCounter++; 2439 }, 2440 EndUsage: function() { 2441 this.usageCounter--; 2442 if(this.usageCounter === 0) 2443 this.Clear(); 2444 }, 2445 Add: function(element, value) { 2446 var index = this.elements.length; 2447 this.elements[index] = element; 2448 this.values[index] = value; 2449 }, 2450 Get: function(element) { 2451 var index = this.elements.indexOf(element); 2452 var hasValue = index > -1; 2453 var value = hasValue ? this.values[index] : undefined; 2454 return { hasValue: hasValue, value: value }; 2455 }, 2456 Clear: function() { 2457 this.elements = [ ]; 2458 this.values = [ ]; 2459 } 2460}); 2461ASPx.ActionElementsCache = new ActionElementsCache(); 2462ASPx.IsActionElement = function(element) { 2463 if(!ASPx.IsExistsElement(element)) 2464 return false; 2465 var useCache = ASPx.ActionElementsCache.IsActive(); 2466 if(useCache) { 2467 var cacheValue = ASPx.ActionElementsCache.Get(element); 2468 if(cacheValue.hasValue) 2469 return cacheValue.value; 2470 } 2471 var isActionElement = ASPx.IsActionElementCore(element); 2472 if(useCache) 2473 ASPx.ActionElementsCache.Add(element, isActionElement); 2474 return isActionElement; 2475}; 2476ASPx.IsActionElementCore = function(element) { 2477 var tabIndex = parseInt(ASPx.Attr.GetAttribute(element, ASPx.Attr.GetTabIndexAttributeName())); 2478 var hasTabIndex = !isNaN(tabIndex); 2479 var hasNonNegativeTabIndex = hasTabIndex && tabIndex > -1; 2480 var hasNegativeTabIndex = hasTabIndex && tabIndex < 0; 2481 var tagName = element.tagName; 2482 var focusableElementTags = ["BUTTON", "SELECT", "TEXTAREA", "OPTION", "IFRAME"]; 2483 var isFocusableCore = ASPx.IsFocusable(element); 2484 var isFocusableTag = focusableElementTags.indexOf(tagName) !== -1; 2485 var isFocusableLink = tagName === "A" && (!!element.href || hasNonNegativeTabIndex); 2486 var isFocusableInput = tagName === "INPUT" && element.type.toLowerCase() !== "hidden"; 2487 var isFocusableByTabIndex = tagName !== "INPUT" && hasNonNegativeTabIndex; 2488 var isEditableDiv = tagName == "DIV" && element.contentEditable === "true"; 2489 return isFocusableCore && !hasNegativeTabIndex && (isFocusableTag || isFocusableLink || isFocusableInput || isFocusableByTabIndex || isEditableDiv); 2490};
2491ASPx.GetCanBeActiveElementsInContainer = function(container) { 2492 var canBeActiveTags = ["INPUT", "A", "UL", "BUTTON", "TEXTAREA", "SELECT", "IFRAME"], 2493 canBeActiveElements = []; 2494 Data.ForEach(canBeActiveTags, function(tag) { 2495 var elements = container.getElementsByTagName(tag); 2496 canBeActiveElements = canBeActiveElements.concat([].slice.call(elements)); 2497 }); 2498 return canBeActiveElements; 2499}; 2500function isActionElementAllowedByPredicate(element, predicate) { 2501 var allowedByPredicate = !predicate || predicate(element); 2502 return allowedByPredicate && ASPx.IsActionElement(element); 2503} 2504ASPx.FindChildActionElements = function(container, predicate) { 2505 return ASPx.GetNodes(container, function(el) { 2506 return isActionElementAllowedByPredicate(el, predicate); 2507 }); 2508}; 2509ASPx.FindAllSortedActionElements = function(container, predicate) { 2510 var result = [ ]; 2511 if(!container || !container.getElementsByTagName) return result; 2512 var actionElements = ASPx.FindChildActionElements(container, predicate); 2513 var getTabOrderValue = function(el) { 2514 var tabIndex = parseInt(ASPx.Attr.GetAttribute(el, ASPx.Attr.GetTabIndexAttributeName())); 2515 return isNaN(tabIndex) ? 0 : tabIndex; 2516 }; 2517 var positiveTabIndexElements = actionElements.filter(function(x) { return getTabOrderValue(x) > 0; }); 2518 var nonPositiveTabIndexElements = actionElements.filter(function(x) { return getTabOrderValue(x) === 0; }); 2519 var sortedTabIndexElements = positiveTabIndexElements.sort(function(x, y) { return getTabOrderValue(x) - getTabOrderValue(y); }); 2520 result = sortedTabIndexElements.concat(nonPositiveTabIndexElements); 2521 return result; 2522}; 2523ASPx.FindFirstChildActionElement = function(container, predicate) { 2524 if(!container || isActionElementAllowedByPredicate(container, predicate)) 2525 return !container ? null : container; 2526 var sortedActionElements = ASPx.FindAllSortedActionElements(container, predicate); 2527 return sortedActionElements[0]; 2528}; 2529ASPx.FindLastChildActionElement = function(container, predicate) { 2530 if(!container) 2531 return null; 2532 var sortedActionElements = ASPx.FindAllSortedActionElements(container, predicate); 2533 var actionElement = sortedActionElements[sortedActionElements.length - 1]; 2534 if(!actionElement && isActionElementAllowedByPredicate(container, predicate)) 2535 actionElement = container; 2536 return actionElement; 2537}; 2538ASPx.GetParentClientControls = function(name) { 2539 var nameParts = name.split("_"); 2540 var result = [ ]; 2541 var controlCollection = ASPx.GetControlCollection(); 2542 for(var i = 1; i <= nameParts.length; i++) { 2543 var controlName = nameParts.slice(0, i).join("_"); 2544 var control = controlCollection.Get(controlName); 2545 if(control) 2546 result.push(control); 2547 } 2548 return result; 2549}; 2550ASPx.GetRootClientControl = function(childControlName) { 2551 var parentControls = ASPx.GetParentClientControls(childControlName); 2552 return parentControls[0]; 2553}; 2554ASPx.GetClientControlByElementID = function(elementID) { 2555 var parentControls = ASPx.GetParentClientControls(elementID); 2556 return parentControls[parentControls.length - 1]; 2557}; 2558ASPx.IsExists = function(obj){ 2559 return (typeof(obj) != "undefined") && (obj != null); 2560}; 2561ASPx.IsFunction = function(obj){ 2562 return typeof(obj) == "function"; 2563}; 2564ASPx.IsNumber = function(str) { 2565 return !isNaN(parseFloat(str)) && isFinite(str); 2566}; 2567ASPx.GetDefinedValue = function(value, defaultValue){ 2568 return (typeof(value) != "undefined") ? value : defaultValue; 2569}; 2570ASPx.CorrectJSFloatNumber = function(number) { 2571 var ret = 21; 2572 var numString = number.toPrecision(21); 2573 numString = numString.replace("-", ""); 2574 var integerDigitsCount = numString.indexOf(ASPx.PossibleNumberDecimalSeparators[0]); 2575 if(integerDigitsCount < 0) 2576 integerDigitsCount = numString.indexOf(ASPx.PossibleNumberDecimalSeparators[1]); 2577 var floatDigitsCount = numString.length - integerDigitsCount - 1; 2578 if(floatDigitsCount < 10) 2579 return number; 2580 if(integerDigitsCount > 0) { 2581 ret = integerDigitsCount + 12; 2582 } 2583 var toPrecisionNumber = Math.min(ret, 21); 2584 var newValueString = number.toPrecision(toPrecisionNumber); 2585 return parseFloat(newValueString, 10); 2586}; 2587ASPx.CorrectRounding = function(number, step) { 2588 var regex = /[,|.](.*)/, 2589 isFloatValue = regex.test(number), 2590 isFloatStep = regex.test(step); 2591 if(isFloatValue || isFloatStep) { 2592 var valueAccuracy = (isFloatValue) ? regex.exec(number)[0].length - 1 : 0, 2593 stepAccuracy = (isFloatStep) ? regex.exec(step)[0].length - 1 : 0, 2594 accuracy = Math.max(valueAccuracy, stepAccuracy); 2595 var multiplier = Math.pow(10, accuracy); 2596 number = Math.round((number + step) * multiplier) / multiplier; 2597 return number; 2598 } 2599 return number + step; 2600};
2601ASPx.GetActiveElement = function() { 2602 try{ return document.activeElement; } catch(e) { return null; } 2603}; 2604var verticalScrollBarWidth; 2605ASPx.GetVerticalScrollBarWidth = function(nonZero) { 2606 if(typeof(verticalScrollBarWidth) === "undefined") { 2607 var container = document.createElement("DIV"); 2608 container.style.cssText = "position: absolute; top: 0px; left: 0px; visibility: hidden; width: 200px; height: 150px; overflow: hidden; box-sizing: content-box"; 2609 document.body.appendChild(container); 2610 var child = document.createElement("P"); 2611 container.appendChild(child); 2612 child.style.cssText = "width: 100%; height: 200px;"; 2613 var widthWithoutScrollBar = child.offsetWidth; 2614 container.style.overflow = "scroll"; 2615 var widthWithScrollBar = child.offsetWidth; 2616 if(widthWithoutScrollBar == widthWithScrollBar) 2617 widthWithScrollBar = container.clientWidth; 2618 verticalScrollBarWidth = widthWithoutScrollBar - widthWithScrollBar; 2619 document.body.removeChild(container); 2620 } 2621 if(nonZero && verticalScrollBarWidth === 0) { 2622 if(ASPx.Browser.MacOSPlatform || ASPx.Browser.Firefox) 2623 return 12; 2624 if(ASPx.Browser.WebKitTouchUI) 2625 return 1; 2626 } 2627 return verticalScrollBarWidth; 2628}; 2629function hideScrollBarCore(element, scrollName) { 2630 if(element.tagName == "IFRAME") { 2631 if((element.scrolling == "yes") || (element.scrolling == "auto")) { 2632 Attr.ChangeAttribute(element, "scrolling", "no"); 2633 return true; 2634 } 2635 } 2636 else if(element.tagName == "DIV") { 2637 if((element.style[scrollName] == "scroll") || (element.style[scrollName] == "auto")) { 2638 Attr.ChangeStyleAttribute(element, scrollName, "hidden"); 2639 return true; 2640 } 2641 } 2642 return false; 2643} 2644function restoreScrollBarCore(element, scrollName) { 2645 if(element.tagName == "IFRAME") 2646 return Attr.RestoreAttribute(element, "scrolling"); 2647 else if(element.tagName == "DIV") 2648 return Attr.RestoreStyleAttribute(element, scrollName); 2649 return false; 2650} 2651ASPx.SetScrollBarVisibilityCore = function(element, scrollName, isVisible) { 2652 return isVisible ? restoreScrollBarCore(element, scrollName) : hideScrollBarCore(element, scrollName); 2653}; 2654ASPx.SetScrollBarVisibility = function(element, isVisible) { 2655 if(ASPx.SetScrollBarVisibilityCore(element, "overflow", isVisible)) 2656 return true; 2657 var result = ASPx.SetScrollBarVisibilityCore(element, "overflowX", isVisible) 2658 || ASPx.SetScrollBarVisibilityCore(element, "overflowY", isVisible); 2659 return result; 2660}; 2661ASPx.SetInnerHtml = function(element, html) { 2662 setInnerHtmlInternal(element, html); 2663}; 2664ASPx.GetInnerText = function(container) { 2665 if(Browser.Safari && Browser.MajorVersion <= 5) { 2666 var filter = getHtml2PlainTextFilter(); 2667 setInnerHtmlInternal(filter, container.innerHTML); 2668 ASPx.SetElementDisplay(filter, true); 2669 var innerText = filter.innerText; 2670 ASPx.SetElementDisplay(filter, false); 2671 return innerText; 2672 } else if(Browser.NetscapeFamily || Browser.WebKitFamily || (Browser.IE && Browser.Version >= 9) || Browser.Edge) { 2673 return container.textContent; 2674 } else 2675 return container.innerText; 2676}; 2677ASPx.GetEllipsisTooltipText = function(element) { 2678 var innerText = ASPx.GetInnerText(element); 2679 innerText = ASPx.RemoveComment(innerText); 2680 return innerText; 2681}; 2682ASPx.RemoveComment = function(text) { 2683 var result = text; 2684 var commentStart = "<!--"; 2685 var commentEnd = "//-->"; 2686 var positionStart = result.indexOf(commentStart); 2687 while(positionStart > -1) { 2688 var positionEnd = result.indexOf(commentEnd); 2689 var startStr = result.substring(0, positionStart); 2690 var endStr = result.substring(positionEnd + commentEnd.length); 2691 result = startStr + endStr; 2692 positionStart = result.indexOf(commentStart); 2693 } 2694 return result; 2695}; 2696var html2PlainTextFilter = null; 2697function getHtml2PlainTextFilter() { 2698 if(html2PlainTextFilter == null) { 2699 html2PlainTextFilter = document.createElement("DIV"); 2700 html2PlainTextFilter.style.width = "0"; 2701 html2PlainTextFilter.style.height = "0"; 2702 html2PlainTextFilter.style.overflow = "visible"; 2703 ASPx.SetElementDisplay(html2PlainTextFilter, false); 2704 document.body.appendChild(html2PlainTextFilter); 2705 } 2706 return html2PlainTextFilter; 2707} 2708ASPx.CreateHiddenField = function(name, id, parent) { 2709 var input = document.createElement("INPUT"); 2710 input.setAttribute("type", "hidden"); 2711 if(name) 2712 input.setAttribute("name", name); 2713 if(id) 2714 input.setAttribute("id", id); 2715 if(parent) 2716 parent.appendChild(input); 2717 return input; 2718}; 2719ASPx.CloneObject = function(srcObject) { 2720 if(typeof(srcObject) != 'object' || srcObject == null) 2721 return srcObject; 2722 var newObject = {}; 2723 for(var i in srcObject) 2724 newObject[i] = srcObject[i]; 2725 return newObject; 2726}; 2727ASPx.InsertRowsBefore = function(table, rowsHtml, index) { 2728 var row = null; 2729 if(index >= 0 && index < table.rows.length) 2730 row = table.rows[index]; 2731 insertRowsBefore(table, rowsHtml, row); 2732}; 2733var insertRowsBefore = function(table, rowsHtml, row) { 2734 if(!row && table.tBodies.length > 0) { 2735 row = document.createElement("TR"); 2736 table.tBodies[0].appendChild(row);
2737 row.shouldRemove = true; 2738 } 2739 if(row) { 2740 row.insertAdjacentHTML("beforeBegin", rowsHtml); 2741 if(row.shouldRemove) 2742 ASPx.RemoveElement(row); 2743 } 2744}; 2745ASPx.IsPercentageSize = function(size) { 2746 return size && size.indexOf('%') != -1; 2747}; 2748ASPx.GetElementById = function(id) { 2749 if(document.getElementById) 2750 return document.getElementById(id); 2751 else 2752 return document.all[id]; 2753}; 2754ASPx.GetElementByIdInDocument = function(documentObj, id) { 2755 if(documentObj.getElementById) 2756 return documentObj.getElementById(id); 2757 else 2758 return documentObj.all[id]; 2759}; 2760ASPx.GetIsParent = function(parentElement, element) { 2761 if(!parentElement || !element) 2762 return false; 2763 while(element){ 2764 if(element === parentElement) 2765 return true; 2766 if(element.tagName === "BODY") 2767 return false; 2768 element = element.parentNode; 2769 } 2770 return false; 2771}; 2772ASPx.GetParentById = function(element, id) { 2773 element = element.parentNode; 2774 while(element){ 2775 if(element.id === id) 2776 return element; 2777 element = element.parentNode; 2778 } 2779 return null; 2780}; 2781ASPx.GetParentByPartialId = function(element, idPart){ 2782 while(element && element.tagName != "BODY") { 2783 if(element.id && element.id.match(idPart)) 2784 return element; 2785 element = element.parentNode; 2786 } 2787 return null; 2788}; 2789ASPx.GetParentByTagName = function(element, tagName) { 2790 tagName = tagName.toUpperCase(); 2791 while(element) { 2792 if(element.tagName === "BODY") 2793 return null; 2794 if(element.tagName === tagName) 2795 return element; 2796 element = element.parentNode; 2797 } 2798 return null; 2799}; 2800function getParentByCondition(element, conditionArg, condition) { 2801 while(element != null) { 2802 if(element.tagName == "BODY" || element.nodeName == "#document") 2803 return null; 2804 if (condition(element, conditionArg)) 2805 return element; 2806 element = element.parentNode; 2807 } 2808 return null; 2809} 2810ASPx.GetParentByPartialClassName = function(element, className) { 2811 return getParentByCondition(element, className, ASPx.ElementContainsCssClass); 2812}; 2813ASPx.GetParentByClassName = function(element, className) { 2814 return getParentByCondition(element, className, ASPx.ElementHasCssClass); 2815}; 2816ASPx.GetParentBySelector = function (element, selector) { 2817 return getParentByCondition(element, selector, ASPx.ElementMatchesSelector); 2818}; 2819ASPx.GetParentByTagNameAndAttributeValue = function(element, tagName, attrName, attrValue) { 2820 tagName = tagName.toUpperCase(); 2821 while(element != null) { 2822 if(element.tagName == "BODY") 2823 return null; 2824 if(element.tagName == tagName && element[attrName] == attrValue) 2825 return element; 2826 element = element.parentNode; 2827 } 2828 return null; 2829}; 2830ASPx.GetParent = function(element, testFunc){ 2831 if (!ASPx.IsExists(testFunc)) return null; 2832 while(element != null && element.tagName != "BODY"){ 2833 if(testFunc(element)) 2834 return element; 2835 element = element.parentNode; 2836 } 2837 return null; 2838}; 2839ASPx.GetElementTreeLine = function(element, stopTagName, stopFunc) { 2840 var result = []; 2841 stopTagName = stopTagName || "BODY"; 2842 while(element != null) { 2843 if(!stopFunc && element.tagName == stopTagName) 2844 break; 2845 if(stopFunc && stopFunc(element)) 2846 break; 2847 result.push(element); 2848 element = element.parentNode; 2849 } 2850 return result; 2851}; 2852ASPx.IsScrollableElement = function(element, isHorzScrollable, isVertScrollable) { 2853 isHorzScrollable = ASPx.IsExists(isHorzScrollable) ? isHorzScrollable : true; 2854 isVertScrollable = ASPx.IsExists(isVertScrollable) ? isVertScrollable : true; 2855 var style = ASPx.GetCurrentStyle(element); 2856 var overflowStyleNames = ["overflow"]; 2857 if(isHorzScrollable) 2858 overflowStyleNames.push("overflowX"); 2859 if(isVertScrollable) 2860 overflowStyleNames.push("overflowY"); 2861 for(var i = 0; i < overflowStyleNames.length; i++) 2862 if(style[overflowStyleNames[i]] == "scroll" || style[overflowStyleNames[i]] == "auto") 2863 return true; 2864 return false; 2865}; 2866ASPx.GetPreviousSibling = function(el) { 2867 if(el.previousElementSibling) { 2868 return el.previousElementSibling; 2869 } else { 2870 while(el = el.previousSibling) { 2871 if(el.nodeType === 1) 2872 return el; 2873 } 2874 } 2875}; 2876ASPx.ElementMatchesSelector = (function (e) { 2877 return (function (matches) { 2878 return function (el, selector) { return !!el && !!selector && matches.call(el, selector); }; 2879 })(e.matches || e.matchesSelector || e.webkitMatchesSelector || e.mozMatchesSelector || e.msMatchesSelector || e.oMatchesSelector); 2880})(Element.prototype); 2881ASPx.ElementHasCssClass = function(element, className) { 2882 try { 2883 var elementClasses; 2884 var classList = ASPx.GetClassNameList(element); 2885 if(!classList) { 2886 var elementClassName = ASPx.GetClassName(element); 2887 if(!elementClassName) { 2888 return false; 2889 } 2890 elementClasses = elementClassName.split(" "); 2891 } 2892 var classNames = className.split(" "); 2893 for(var i = classNames.length - 1; i >= 0; i--) { 2894 if(classList) { 2895 if(classList.indexOf(classNames[i]) === -1) 2896 return false; 2897 continue; 2898 } 2899 if(Data.ArrayIndexOf(elementClasses, classNames[i]) < 0) 2900 return false; 2901 } 2902 return true; 2903 } catch(e) { 2904 return false; 2905 } 2906}; 2907ASPx.ElementContainsCssClass = function(element, className) { 2908 try { 2909 var elementClassName = ASPx.GetClassName(element); 2910 if(!elementClassName) { 2911 return false; 2912 } 2913 return elementClassName.indexOf(className) != -1; 2914 } catch(e) { 2915 return false; 2916 } 2917}; 2918ASPx.AddClassNameToElement = function (element, className) { 2919 if(!element || typeof(className) !== "string" ) return; 2920 className = className.trim(); 2921 if(!ASPx.ElementHasCssClass(element, className) && className !== "") { 2922 var oldClassName = ASPx.GetClassName(element); 2923 ASPx.SetClassName(element, (oldClassName === "") ? className : oldClassName + " " + className); 2924 } 2925}; 2926ASPx.AddClassNamesToElement = function(element, classNames) { 2927 Data.ForEach(classNames, function(className) { ASPx.AddClassNameToElement(element, className); }); 2928};
2929ASPx.CombineCssClasses = function() { 2930 return Array.prototype.slice.call(arguments).join(" "); 2931}; 2932ASPx.RemoveClassNameFromElement = function(element, className) { 2933 if(!element) return; 2934 var elementClassName = ASPx.GetClassName(element); 2935 var updClassName = " " + elementClassName + " "; 2936 var newClassName = updClassName.replace(" " + className + " ", " "); 2937 if(updClassName.length != newClassName.length) 2938 ASPx.SetClassName(element, Str.Trim(newClassName)); 2939}; 2940ASPx.RemoveClassNamesFromElement = function(element, classNames) { 2941 if(!element) return; 2942 for(var i = 0; i < classNames.length; i++) { 2943 var className = classNames[i]; 2944 element.classList.remove(className); 2945 } 2946}; 2947ASPx.ToggleClassNameToElement = function(element, className, toggleState) { 2948 if(!toggleState) 2949 ASPx.RemoveClassNameFromElement(element, className); 2950 if(toggleState && !ASPx.ElementHasCssClass(element, className)) 2951 ASPx.AddClassNameToElement(element, className); 2952}; 2953ASPx.GetClassNameList = function(element) { 2954 var result = []; 2955 if(element) { 2956 if(element.tagName === "svg") { 2957 result = ASPx.GetClassName(element).replace(/^\s+|\s+$/g, '').split(/\s+/); 2958 } 2959 else { 2960 result = element.classList ? [].slice.call(element.classList) : ASPx.GetClassName(element).replace(/^\s+|\s+$/g, '').split(/\s+/); 2961 } 2962 } 2963 return result; 2964}; 2965ASPx.GetClassName = function(element) { 2966 var result = ""; 2967 if(element) { 2968 if(element.tagName === "svg") { 2969 result = element.className.baseVal; 2970 } 2971 else { 2972 result = element.className ? element.className : ""; 2973 } 2974 } 2975 return result; 2976}; 2977ASPx.SetClassName = function(element, className) { 2978 if(element.tagName === "svg") { 2979 element.className.baseVal = Str.Trim(className); 2980 } 2981 else { 2982 element.className = Str.Trim(className); 2983 } 2984}; 2985ASPx.GetElementOffsetWidth = function(element) { 2986 if(element.tagName === "svg") { 2987 return element.getBoundingClientRect().width; 2988 } 2989 else { 2990 return element.offsetWidth; 2991 } 2992}; 2993ASPx.GetElementOffsetHeight = function(element) { 2994 if(element.tagName === "svg") { 2995 return element.getBoundingClientRect().height; 2996 } 2997 else { 2998 return element.offsetHeight; 2999 } 3000}; 3001function nodeListToArray(nodeList, filter) { 3002 var result = []; 3003 for(var i = 0, element; element = nodeList[i]; i++) { 3004 if(filter && !filter(element)) 3005 continue; 3006 result.push(element); 3007 } 3008 return result; 3009} 3010ASPx.NodeListToArray = nodeListToArray; 3011function getItemByIndex(collection, index) { 3012 if(!index) index = 0; 3013 if(collection != null && collection.length > index) 3014 return collection[index]; 3015 return null; 3016} 3017ASPx.GetChildNodesByQuerySelector = function (parent, selector) { 3018 return nodeListToArray(parent.querySelectorAll(selector), function (el) { return el.parentNode === parent; }); 3019}; 3020ASPx.GetChildNodesByClassName = function(parent, className) { 3021 if(!parent) return []; 3022 if(parent.querySelectorAll) { 3023 var children = parent.querySelectorAll('.' + className); 3024 return nodeListToArray(children, function(element) { 3025 return element.parentNode === parent; 3026 }); 3027 } 3028 return ASPx.GetChildNodes(parent, function(elem) { return elem.className && ASPx.ElementHasCssClass(elem, className); }); 3029}; 3030ASPx.GetChildNodesByPartialClassName = function(element, className) { 3031 return ASPx.GetChildElementNodesByPredicate(element, 3032 function(child) { 3033 return ASPx.ElementContainsCssClass(child, className); 3034 }); 3035}; 3036ASPx.GetChildByPartialClassName = function(element, className, index) { 3037 if(element != null){ 3038 var collection = ASPx.GetChildNodesByPartialClassName(element, className); 3039 return getItemByIndex(collection, index); 3040 } 3041 return null; 3042}; 3043ASPx.GetChildByClassName = function(element, className, index) { 3044 if(element != null){ 3045 var collection = ASPx.GetChildNodesByClassName(element, className); 3046 return getItemByIndex(collection, index); 3047 } 3048 return null; 3049}; 3050ASPx.GetNodesByPartialClassName = function(element, className) { 3051 if(element.querySelectorAll) { 3052 var list = element.querySelectorAll('*[class*=' + className + ']'); 3053 return nodeListToArray(list); 3054 } 3055 var collection = element.all || element.getElementsByTagName('*'); 3056 var ret = [ ]; 3057 if(collection != null) { 3058 for(var i = 0; i < collection.length; i ++) { 3059 if(ASPx.ElementContainsCssClass(collection[i], className))
3060 ret.push(collection[i]); 3061 } 3062 } 3063 return ret; 3064}; 3065ASPx.GetNodesByClassName = function(parent, className) { 3066 if(parent.querySelectorAll) { 3067 var children = parent.querySelectorAll('.' + className); 3068 return nodeListToArray(children); 3069 } 3070 return ASPx.GetNodes(parent, function(elem) { return elem.className && ASPx.ElementHasCssClass(elem, className); }); 3071}; 3072ASPx.GetNodeByClassName = function(element, className, index) { 3073 if(element != null){ 3074 var collection = ASPx.GetNodesByClassName(element, className); 3075 return getItemByIndex(collection, index); 3076 } 3077 return null; 3078}; 3079ASPx.GetChildById = function(element, id) { 3080 if(element.all) { 3081 var child = element.all[id]; 3082 if(!child) { 3083 child = element.all(id); 3084 if(!child) 3085 return null; 3086 } 3087 if(!ASPx.IsExists(child.length)) 3088 return child; 3089 else 3090 return ASPx.GetElementById(id); 3091 } 3092 else 3093 return ASPx.GetElementById(id); 3094}; 3095ASPx.GetNodesByPartialId = function(element, partialName, list) { 3096 if(element.id && element.id.indexOf(partialName) > -1) 3097 list.push(element); 3098 if(element.childNodes) { 3099 for(var i = 0; i < element.childNodes.length; i ++) 3100 ASPx.GetNodesByPartialId(element.childNodes[i], partialName, list); 3101 } 3102}; 3103ASPx.GetNodesByTagName = function(element, tagName) { 3104 var tagNameToUpper = tagName.toUpperCase(); 3105 var result = null; 3106 if(element) { 3107 if(element.getElementsByTagName) { 3108 result = element.getElementsByTagName(tagNameToUpper); 3109 if(result.length === 0) { 3110 result = element.getElementsByTagName(tagName); 3111 } 3112 } 3113 else if(element.all && element.all.tags !== undefined) 3114 result = Browser.Netscape ? element.all.tags[tagNameToUpper] : element.all.tags(tagNameToUpper); 3115 } 3116 return result; 3117}; 3118ASPx.GetNodeByTagName = function(element, tagName, index) { 3119 if(element != null){ 3120 var collection = ASPx.GetNodesByTagName(element, tagName); 3121 return getItemByIndex(collection, index); 3122 } 3123 return null; 3124}; 3125ASPx.GetChildNodesByTagName = function(parent, tagName) { 3126 return ASPx.GetChildNodes(parent, function (child) { return child.tagName === tagName; }); 3127}; 3128ASPx.GetChildByTagName = function(element, tagName, index) { 3129 if(element != null){ 3130 var collection = ASPx.GetChildNodesByTagName(element, tagName); 3131 return getItemByIndex(collection, index); 3132 } 3133 return null; 3134}; 3135ASPx.RetrieveByPredicate = function(scourceCollection, predicate) { 3136 var result = []; 3137 for(var i = 0; i < scourceCollection.length; i++) { 3138 var element = scourceCollection[i]; 3139 if(!predicate || predicate(element)) 3140 result.push(element); 3141 } 3142 return result; 3143}; 3144ASPx.GetChildNodes = function(parent, predicate) { 3145 return ASPx.RetrieveByPredicate(parent.childNodes, predicate); 3146}; 3147ASPx.GetNodes = function(parent, predicate) { 3148 var c = parent.all || parent.getElementsByTagName('*'); 3149 return ASPx.RetrieveByPredicate(c, predicate); 3150}; 3151ASPx.GetChildElementNodes = function(parent) { 3152 if(!parent) return null; 3153 return ASPx.GetChildNodes(parent, function(e) { return e.nodeType == 1; }); 3154}; 3155ASPx.GetChildElementNodesByPredicate = function(parent, predicate) { 3156 if(!parent) return null; 3157 if(!predicate) return ASPx.GetChildElementNodes(parent); 3158 return ASPx.GetChildNodes(parent, function(e) { return e.nodeType == 1 && predicate(e); }); 3159}; 3160ASPx.GetTextNode = function(element, index) { 3161 if(element != null){ 3162 var collection = [ ]; 3163 ASPx.GetTextNodes(element, collection); 3164 return getItemByIndex(collection, index); 3165 } 3166 return null; 3167}; 3168ASPx.GetTextNodes = function(element, collection) { 3169 if(element.tagName === "svg") 3170 return; 3171 for(var i = 0; i < element.childNodes.length; i ++){ 3172 var childNode = element.childNodes[i]; 3173 if(ASPx.IsExists(childNode.nodeValue)) 3174 collection.push(childNode); 3175 ASPx.GetTextNodes(childNode, collection); 3176 } 3177}; 3178ASPx.GetNormalizedTextNode = function(element, index) { 3179 var textNode = ASPx.GetTextNode(element, index); 3180 if(textNode != null) 3181 ASPx.MergeAdjacentTextNodes(textNode); 3182 return textNode; 3183}; 3184ASPx.MergeAdjacentTextNodes = function(firstTextNode) { 3185 if(!ASPx.IsExists(firstTextNode.nodeValue)) 3186 return; 3187 var textNode = firstTextNode; 3188 while(textNode.nextSibling && ASPx.IsExists(textNode.nextSibling.nodeValue)) { 3189 textNode.nodeValue += textNode.nextSibling.nodeValue; 3190 textNode.parentNode.removeChild(textNode.nextSibling); 3191 } 3192}; 3193ASPx.GetElementDocument = function(element) { 3194 return element.document || element.ownerDocument; 3195}; 3196ASPx.RemoveElement = function(element) { 3197 if(element && element.parentNode) 3198 element.parentNode.removeChild(element); 3199}; 3200ASPx.ReplaceTagName = function(element, newTagName, cloneChilds) { 3201 if(element.nodeType != 1) 3202 return null; 3203 if(element.nodeName == newTagName) 3204 return element; 3205 cloneChilds = cloneChilds !== undefined ? cloneChilds : true; 3206 var doc = element.ownerDocument; 3207 var newElem = doc.createElement(newTagName); 3208 Attr.CopyAllAttributes(element, newElem); 3209 if(cloneChilds) { 3210 for(var i = 0; i < element.childNodes.length; i++) 3211 newElem.appendChild(element.childNodes[i].cloneNode(true)); 3212 } 3213 else { 3214 for(var child; child = element.firstChild; ) 3215 newElem.appendChild(child); 3216 } 3217 element.parentNode.replaceChild(newElem, element); 3218 return newElem; 3219}; 3220ASPx.RemoveOuterTags = function(element) { 3221 var docFragment = element.ownerDocument.createDocumentFragment(); 3222 for(var i = 0; i < element.childNodes.length; i++) 3223 docFragment.appendChild(element.childNodes[i].cloneNode(true)); 3224 element.parentNode.replaceChild(docFragment, element); 3225}; 3226ASPx.WrapElementInNewElement = function(element, newElementTagName) { 3227 var wrapElement = null; 3228 var docFragment = element.ownerDocument.createDocumentFragment(); 3229 wrapElement = element.ownerDocument.createElement(newElementTagName); 3230 docFragment.appendChild(wrapElement); 3231 wrapElement.appendChild(element.cloneNode(true)); 3232 element.parentNode.replaceChild(docFragment, element); 3233 return wrapElement; 3234}; 3235ASPx.InsertElementAfter = function(newElement, targetElement) { 3236 var parentElem = targetElement.parentNode; 3237 if(parentElem.childNodes[parentElem.childNodes.length - 1] == targetElement) 3238 parentElem.appendChild(newElement); 3239 else if(newElement !== targetElement.nextSibling) 3240 parentElem.insertBefore(newElement, targetElement.nextSibling); 3241}; 3242ASPx.SetElementOpacity = function(element, value) { 3243 element.style.opacity = value; 3244}; 3245ASPx.GetElementOpacity = function(element) { 3246 return parseFloat(ASPx.GetCurrentStyle(element).opacity); 3247}; 3248ASPx.HiddenChangable = "dx-hc"; 3249ASPx.DefaultDisplayNoneSelectors = [ "dxmodalSys" ]; 3250ASPx.DefaultDisplaySelectors = ["show"]; 3251function getIsDefaultDisplayNone(element) { 3252 for(var i = 0; i < ASPx.DefaultDisplayNoneSelectors.length; i++) { 3253 if(ASPx.ElementHasCssClass(element, ASPx.DefaultDisplayNoneSelectors[i])) 3254 return true; 3255 } 3256 return false; 3257} 3258ASPx.GetElementDisplay = function(element, isCurrentStyle) { 3259 if(isCurrentStyle) { 3260 var currentStyle = ASPx.GetCurrentStyle(element); 3261 if(currentStyle) 3262 return currentStyle.display != "none"; 3263 } 3264 if(getIsDefaultDisplayNone(element)) 3265 return element.style.display != "none" && element.style.display != "" || ASPx.DefaultDisplaySelectors.some(function(s) { return ASPx.ElementHasCssClass(element, s); }); 3266 return element.style.display != "none" && !ASPx.ElementHasCssClass(element, ASPx.HiddenChangable); 3267}; 3268ASPx.SetElementDisplay = function(element, value) { 3269 if(!element) return; 3270 if(ASPx.ElementHasCssClass(element, ASPx.HiddenChangable)) 3271 ASPx.RemoveClassNameFromElement(element, ASPx.HiddenChangable); 3272 if(typeof(value) === "string") 3273 element.style.display = value; 3274 else if(getIsDefaultDisplayNone(element)) 3275 element.style.display = value ? (element.tagName === "TABLE" ? "table" : "block") : ""; 3276 else if(!value) 3277 element.style.display = "none"; 3278 else
3279 element.style.display = ""; 3280}; 3281ASPx.GetElementVisibility = function(element, isCurrentStyle) { 3282 if(isCurrentStyle) { 3283 var currentStyle = ASPx.GetCurrentStyle(element); 3284 if(currentStyle) 3285 return currentStyle.visibility != "hidden"; 3286 } 3287 return element.style.visibility != "hidden"; 3288}; 3289ASPx.SetElementVisibility = function(element, value) { 3290 if(!element) return; 3291 if(typeof(value) === "string") 3292 element.style.visibility = value; 3293 else 3294 element.style.visibility = value ? "visible" : "hidden"; 3295}; 3296ASPx.IsElementVisible = function(element, isCurrentStyle) { 3297 if(!element) return false; 3298 while(element && element.tagName != "BODY") { 3299 if(!ASPx.GetElementDisplay(element, isCurrentStyle) || (!ASPx.GetElementVisibility(element, isCurrentStyle) && !Attr.IsExistsAttribute(element, "errorFrame"))) 3300 return false; 3301 element = element.parentNode; 3302 } 3303 return true; 3304}; 3305ASPx.IsElementDisplayed = function(element) { 3306 if(!element) return false; 3307 while(element && element.tagName != "BODY") { 3308 if(!ASPx.GetElementDisplay(element)) 3309 return false; 3310 element = element.parentNode; 3311 } 3312 return true; 3313}; 3314ASPx.GetElementInitializedFlag = function(element) { 3315 return element["dxinit"]; 3316}; 3317ASPx.SetElementInitializedFlag = function(element) { 3318 element["dxinit"] = true; 3319}; 3320ASPx.AddStyleSheetLinkToDocument = function(doc, linkUrl) { 3321 var newLink = createStyleLink(doc, linkUrl); 3322 var head = ASPx.GetHeadElementOrCreateIfNotExist(doc); 3323 head.appendChild(newLink); 3324 return newLink; 3325}; 3326ASPx.GetHeadElementOrCreateIfNotExist = function(doc) { 3327 var elements = ASPx.GetNodesByTagName(doc, "head"); 3328 var head = null; 3329 if(elements.length == 0) { 3330 head = doc.createElement("head"); 3331 head.visibility = "hidden"; 3332 doc.insertBefore(head, doc.body); 3333 } else 3334 head = elements[0]; 3335 return head; 3336}; 3337function createStyleLink(doc, url) { 3338 var newLink = doc.createElement("link"); 3339 Attr.SetAttribute(newLink, "href", url); 3340 Attr.SetAttribute(newLink, "rel", "stylesheet"); 3341 Attr.AppendStyleType(newLink); 3342 return newLink; 3343} 3344ASPx.GetCurrentStyle = function(element) { 3345 if(document.defaultView && document.defaultView.getComputedStyle) { 3346 var result = document.defaultView.getComputedStyle(element, null); 3347 if(!result && Browser.Firefox && window.frameElement) { 3348 var changes = []; 3349 var curElement = window.frameElement; 3350 while(!(result = document.defaultView.getComputedStyle(element, null))) { 3351 changes.push([curElement, curElement.style.display]); 3352 ASPx.SetStylesCore(curElement, "display", "block", true); 3353 curElement = curElement.tagName == "BODY" ? curElement.ownerDocument.defaultView.frameElement : curElement.parentNode; 3354 } 3355 result = ASPx.CloneObject(result); 3356 for(var ch, i = 0; ch = changes[i]; i++) 3357 ASPx.SetStylesCore(ch[0], "display", ch[1]); 3358 var dummy = document.body.offsetWidth; 3359 } 3360 if(Browser.Firefox && Browser.MajorVersion >= 62 && window.frameElement && result.length === 0) { 3361 result = ASPx.CloneObject(result); 3362 result.display = element.style.display; 3363 } 3364 return result; 3365 } 3366 return window.getComputedStyle(element, null); 3367}; 3368ASPx.CreateStyleSheetInDocument = function(doc) { 3369 if(doc.createStyleSheet) { 3370 try { 3371 return doc.createStyleSheet(); 3372 } 3373 catch(e) { 3374 var message = "The CSS link limit (31) has been exceeded. Please enable CSS merging or reduce the number of CSS files on the page. For details, see https://supportcenter.devexpress.com/ticket/details/k18487/."; 3375 throw new Error(message); 3376 } 3377 } 3378 else { 3379 var styleSheet = doc.createElement("STYLE"); 3380 ASPx.GetNodeByTagName(doc, "HEAD", 0).appendChild(styleSheet); 3381 return styleSheet.sheet; 3382 } 3383}; 3384ASPx.currentStyleSheet = null; 3385ASPx.GetCurrentStyleSheet = function() { 3386 if(!ASPx.currentStyleSheet) 3387 ASPx.currentStyleSheet = ASPx.CreateStyleSheetInDocument(document); 3388 return ASPx.currentStyleSheet; 3389}; 3390function getStyleSheetRules(styleSheet){ 3391 try { 3392 if (styleSheet.href && styleSheet.href.indexOf("file:///") === 0) 3393 return null; 3394 return styleSheet.cssRules; 3395 } 3396 catch(e) { 3397 return null; 3398 } 3399} 3400ASPx.cachedCssRules = { }; 3401ASPx.GetStyleSheetRules = function (className, stylesStorageDocument) { 3402 if(ASPx.cachedCssRules[className]) { 3403 if(ASPx.cachedCssRules[className] != ASPx.EmptyObject) 3404 return ASPx.cachedCssRules[className]; 3405 return null; 3406 } 3407 var result = iterateStyleSheetRules(stylesStorageDocument, function(rule) { 3408 if(rule.selectorText == "." + className){ 3409 ASPx.cachedCssRules[className] = rule; 3410 return rule; 3411 } 3412 }); 3413 if(ASPx.IsExists(result)) 3414 return result; 3415 ASPx.cachedCssRules[className] = ASPx.EmptyObject; 3416 return null; 3417}; 3418function iterateStyleSheetRules(stylesStorageDocument, callback) { 3419 var doc = stylesStorageDocument || document; 3420 for(var i = 0; i < doc.styleSheets.length; i ++){ 3421 var styleSheet = doc.styleSheets[i];
3422 var rules = getStyleSheetRules(styleSheet); 3423 if(rules != null){ 3424 for(var j = 0; j < rules.length; j ++) { 3425 var result = callback(rules[j]); 3426 if(result !== undefined) 3427 return result; 3428 } 3429 } 3430 } 3431} 3432ASPx.ProcessStyleSheetRules = function(prefix, callback) { 3433 iterateStyleSheetRules(null, function(rule) { 3434 if(!!rule.selectorText && rule.selectorText.indexOf(prefix) === 0) { 3435 var name = rule.selectorText.substring(prefix.length); 3436 var result = callback(name, rule.style, rule); 3437 if(result !== undefined) 3438 return result; 3439 } 3440 }); 3441}; 3442ASPx.ClearCachedCssRules = function(){ 3443 ASPx.cachedCssRules = { }; 3444}; 3445var styleCount = 0; 3446var styleNameCache = { }; 3447ASPx.CreateImportantStyleRule = function(styleSheet, cssText, postfix, prefix) { 3448 styleSheet = styleSheet || ASPx.GetCurrentStyleSheet(); 3449 var cacheKey = (postfix ? postfix + "||" : "") + cssText + (prefix ? "||" + prefix : ""); 3450 if(styleNameCache[cacheKey]) 3451 return styleNameCache[cacheKey]; 3452 prefix = prefix ? prefix + " " : ""; 3453 var className = "dxh" + styleCount + (postfix ? postfix : ""); 3454 ASPx.AddStyleSheetRule(styleSheet, prefix + "." + className, ASPx.CreateImportantCssText(cssText)); 3455 styleCount++; 3456 styleNameCache[cacheKey] = className; 3457 return className; 3458}; 3459ASPx.CreateImportantCssText = function(cssText) { 3460 var newText = ""; 3461 var hasEncodedSemicolon = cssText.indexOf(ASPx.StyleValueEncodedSemicolon) > -1; 3462 var attributes = cssText.split(";"); 3463 for(var i = 0; i < attributes.length; i++) { 3464 var rule = attributes[i]; 3465 if(rule != "") 3466 newText += ASPx.CreateImportantCssRule(rule, hasEncodedSemicolon); 3467 } 3468 return newText; 3469}; 3470ASPx.CreateImportantCssRule = function(rule, hasEncodedSemicolon) { 3471 var result = rule; 3472 if(hasEncodedSemicolon) { 3473 var regex = new RegExp(ASPx.StyleValueEncodedSemicolon, "g"); 3474 result = result.replace(regex, ";"); 3475 } 3476 result = result + " !important;"; 3477 return result; 3478}; 3479ASPx.AddStyleSheetRule = function(styleSheet, selector, cssText){ 3480 if(!cssText) return; 3481 var index = styleSheet.cssRules.length; 3482 styleSheet.insertRule(selector + " { " + cssText + " }", index); 3483 return styleSheet.cssRules[index]; 3484}; 3485ASPx.GetPointerCursor = function() { 3486 return "pointer"; 3487}; 3488ASPx.SetPointerCursor = function(element) { 3489 if(element.style.cursor == "") 3490 element.style.cursor = ASPx.GetPointerCursor(); 3491}; 3492ASPx.SetElementFloat = function(element, value) { 3493 if(ASPx.IsExists(element.style.cssFloat)) 3494 element.style.cssFloat = value; 3495 else if(ASPx.IsExists(element.style.styleFloat)) 3496 element.style.styleFloat = value; 3497 else 3498 Attr.SetAttribute(element.style, "float", value); 3499}; 3500ASPx.GetElementFloat = function(element) { 3501 var currentStyle = ASPx.GetCurrentStyle(element); 3502 if(ASPx.IsExists(currentStyle.cssFloat)) 3503 return currentStyle.cssFloat; 3504 if(ASPx.IsExists(currentStyle.styleFloat)) 3505 return currentStyle.styleFloat; 3506 return Attr.GetAttribute(currentStyle, "float"); 3507}; 3508function getElementDirection(element) { 3509 return ASPx.GetCurrentStyle(element).direction; 3510} 3511ASPx.IsElementRightToLeft = function(element) { 3512 return getElementDirection(element) == "rtl"; 3513}; 3514ASPx.AdjustVerticalMarginsInContainer = function(container) { 3515 var containerBorderAndPaddings = ASPx.GetTopBottomBordersAndPaddingsSummaryValue(container); 3516 var flowElements = [], floatElements = [], floatTextElements = []; 3517 var maxHeight = 0, maxFlowHeight = 0; 3518 for(var i = 0; i < container.childNodes.length; i++) { 3519 var element = container.childNodes[i]; 3520 if(!element.offsetHeight) continue; 3521 ASPx.ClearVerticalMargins(element); 3522 } 3523 for(var i = 0; i < container.childNodes.length; i++) { 3524 var element = container.childNodes[i]; 3525 if(!element.offsetHeight) continue; 3526 var float = ASPx.GetElementFloat(element); 3527 var isFloat = (float === "left" || float === "right"); 3528 if(isFloat) 3529 floatElements.push(element); 3530 else { 3531 flowElements.push(element); 3532 if(element.tagName !== "IMG"){ 3533 if(!ASPx.IsTextWrapped(element)) 3534 element.style.verticalAlign = 'baseline'; 3535 floatTextElements.push(element); 3536 } 3537 if(element.tagName === "DIV") 3538 Attr.ChangeStyleAttribute(element, "float", "left"); 3539 } 3540 if(element.offsetHeight > maxHeight) 3541 maxHeight = element.offsetHeight; 3542 if(!isFloat && element.offsetHeight > maxFlowHeight) 3543 maxFlowHeight = element.offsetHeight; 3544 } 3545 for(var i = 0; i < flowElements.length; i++) 3546 Attr.RestoreStyleAttribute(flowElements[i], "float"); 3547 var containerBorderAndPaddings = ASPx.GetTopBottomBordersAndPaddingsSummaryValue(container); 3548 var containerHeight = container.offsetHeight - containerBorderAndPaddings; 3549 if(maxHeight == containerHeight) { 3550 var verticalAlign = ASPx.GetCurrentStyle(container).verticalAlign; 3551 for(var i = 0; i < floatTextElements.length; i++) 3552 floatTextElements[i].style.verticalAlign = ''; 3553 containerHeight = container.offsetHeight - containerBorderAndPaddings; 3554 for(var i = 0; i < floatElements.length; i++) 3555 adjustVerticalMarginsCore(floatElements[i], containerHeight, verticalAlign, true); 3556 for(var i = 0; i < flowElements.length; i++) { 3557 if(maxFlowHeight != maxHeight) 3558 adjustVerticalMarginsCore(flowElements[i], containerHeight, verticalAlign); 3559 } 3560 } 3561}; 3562ASPx.AdjustVerticalMargins = function(element) { 3563 ASPx.ClearVerticalMargins(element); 3564 var parentElement = element.parentNode; 3565 var parentHeight = parentElement.getBoundingClientRect().height - ASPx.GetTopBottomBordersAndPaddingsSummaryValue(parentElement); 3566 adjustVerticalMarginsCore(element, parentHeight, ASPx.GetCurrentStyle(parentElement).verticalAlign); 3567}; 3568function adjustVerticalMarginsCore(element, parentHeight, verticalAlign, toBottom) { 3569 var marginTop; 3570 if(verticalAlign == "top") 3571 marginTop = 0; 3572 else if(verticalAlign == "bottom") 3573 marginTop = parentHeight - element.getBoundingClientRect().height; 3574 else
3575 marginTop = (parentHeight - element.getBoundingClientRect().height) / 2; 3576 if(marginTop !== 0){ 3577 element.style.marginTop = marginTop + "px"; 3578 } 3579} 3580ASPx.ClearVerticalMargins = function(element) { 3581 element.style.marginTop = ""; 3582 element.style.marginBottom = ""; 3583}; 3584ASPx.AdjustHeightInContainer = function(container) { 3585 var height = container.offsetHeight - ASPx.GetTopBottomBordersAndPaddingsSummaryValue(container); 3586 for(var i = 0; i < container.childNodes.length; i++) { 3587 var element = container.childNodes[i]; 3588 if(!element.offsetHeight) continue; 3589 ASPx.ClearHeight(element); 3590 } 3591 var elements = []; 3592 var childrenHeight = 0; 3593 for(var i = 0; i < container.childNodes.length; i++) { 3594 var element = container.childNodes[i]; 3595 if(!element.offsetHeight) continue; 3596 childrenHeight += element.offsetHeight + ASPx.GetTopBottomMargins(element); 3597 elements.push(element); 3598 } 3599 if(elements.length > 0 && childrenHeight < height) { 3600 var correctedHeight = 0; 3601 for(var i = 0; i < elements.length; i++) { 3602 var elementHeight = 0; 3603 if(i < elements.length - 1){ 3604 var elementHeight = Math.floor(height / elements.length); 3605 correctedHeight += elementHeight; 3606 } 3607 else{ 3608 var elementHeight = height - correctedHeight; 3609 if(elementHeight < 0) elementHeight = 0; 3610 } 3611 adjustHeightCore(elements[i], elementHeight); 3612 } 3613 } 3614}; 3615ASPx.AdjustHeight = function(element) { 3616 ASPx.ClearHeight(element); 3617 var parentElement = element.parentNode; 3618 var height = parentElement.getBoundingClientRect().height - ASPx.GetTopBottomBordersAndPaddingsSummaryValue(parentElement); 3619 adjustHeightCore(element, height); 3620}; 3621function adjustHeightCore(element, height) { 3622 var height = height - ASPx.GetTopBottomBordersAndPaddingsSummaryValue(element); 3623 if(height < 0) height = 0; 3624 element.style.height = height + "px"; 3625} 3626ASPx.ClearHeight = function(element) { 3627 element.style.height = ""; 3628}; 3629ASPx.ShrinkWrappedTextInContainer = function(container) { 3630 if(!container) return; 3631 for(var i = 0; i < container.childNodes.length; i++){ 3632 var child = container.childNodes[i]; 3633 if(child.style && ASPx.IsTextWrapped(child)) { 3634 Attr.ChangeStyleAttribute(child, "width", "1px"); 3635 child.shrinkedTextContainer = true; 3636 } 3637 } 3638}; 3639ASPx.AdjustWrappedTextInContainer = function(container) { 3640 if(!container) return; 3641 var textContainer, leftWidth = 0, rightWidth = 0; 3642 for(var i = 0; i < container.childNodes.length; i++){ 3643 var child = container.childNodes[i]; 3644 if(child.tagName === "BR") 3645 return; 3646 if(!child.tagName) 3647 continue; 3648 if(child.tagName !== "IMG"){ 3649 textContainer = child; 3650 if(ASPx.IsTextWrapped(textContainer)){ 3651 if(!textContainer.shrinkedTextContainer) 3652 textContainer.style.width = ""; 3653 textContainer.style.marginRight = ""; 3654 } 3655 } 3656 else { 3657 if(ASPx.GetElementOffsetWidth(child)=== 0) 3658 Evt.AttachEventToElement(child, "load", function(evt) { ASPx.AdjustWrappedTextInContainer(container); }); 3659 else { 3660 var width = ASPx.GetElementOffsetWidth(child) + ASPx.GetLeftRightMargins(child); 3661 if(textContainer) 3662 rightWidth += width; 3663 else 3664 leftWidth += width; 3665 } 3666 } 3667 } 3668 if(textContainer && ASPx.IsTextWrapped(textContainer)) { 3669 var containerWidth = ASPx.GetElementOffsetWidth(container) - ASPx.GetLeftRightBordersAndPaddingsSummaryValue(container); 3670 if(textContainer.shrinkedTextContainer) { 3671 Attr.RestoreStyleAttribute(textContainer, "width"); 3672 Attr.ChangeStyleAttribute(container, "width", containerWidth + "px"); 3673 } 3674 if(ASPx.GetElementOffsetWidth(textContainer) + leftWidth + rightWidth >= containerWidth) { 3675 if(rightWidth > 0 && !textContainer.shrinkedTextContainer) 3676 textContainer.style.width = (containerWidth - rightWidth) + "px"; 3677 else if(leftWidth > 0){ 3678 if(ASPx.IsElementRightToLeft(container)) 3679 textContainer.style.marginLeft = leftWidth + "px"; 3680 else 3681 textContainer.style.marginRight = leftWidth + "px"; 3682 } 3683 } 3684 } 3685}; 3686ASPx.IsTextWrapped = function(element) { 3687 return element && ASPx.GetCurrentStyle(element).whiteSpace !== "nowrap"; 3688}; 3689ASPx.IsValidPosition = function(pos){ 3690 return pos != ASPx.InvalidPosition && pos != -ASPx.InvalidPosition; 3691}; 3692ASPx.getSpriteMainElement = function(element) { 3693 var cssClassMarker = "dx-acc"; 3694 if(ASPx.ElementContainsCssClass(element, cssClassMarker)) 3695 return element; 3696 if(element.parentNode && ASPx.ElementContainsCssClass(element.parentNode, cssClassMarker)) 3697 return element.parentNode; 3698 return element; 3699}; 3700ASPx.GetAbsoluteX = function(curEl){ 3701 return ASPx.GetAbsolutePositionX(curEl); 3702};
3703ASPx.GetAbsoluteY = function(curEl){ 3704 return ASPx.GetAbsolutePositionY(curEl); 3705}; 3706ASPx.SetAbsoluteX = function(element, x){ 3707 element.style.left = ASPx.PrepareClientPosForElement(x, element, true) + "px"; 3708}; 3709ASPx.SetAbsoluteY = function(element, y){ 3710 element.style.top = ASPx.PrepareClientPosForElement(y, element, false) + "px"; 3711}; 3712ASPx.GetAbsolutePositionX = function(element){ 3713 if(Browser.Firefox && Browser.Version >= 3) 3714 return getAbsolutePositionX_FF3(element); 3715 else if(Browser.Opera) 3716 return getAbsolutePositionX_Opera(element); 3717 else if(Browser.NetscapeFamily && (!Browser.Firefox || Browser.Version < 3)) 3718 return getAbsolutePositionX_NS(element); 3719 else if(Browser.WebKitFamily || Browser.Edge) 3720 return getAbsolutePositionX_FF3(element); 3721 else 3722 return getAbsolutePositionX_Other(element); 3723}; 3724function getAbsolutePositionX_Opera(curEl){ 3725 var isFirstCycle = true; 3726 var pos = getAbsoluteScrollOffset_OperaFF(curEl, true); 3727 while(curEl != null) { 3728 pos += curEl.offsetLeft; 3729 if(!isFirstCycle) 3730 pos -= curEl.scrollLeft; 3731 curEl = curEl.offsetParent; 3732 isFirstCycle = false; 3733 } 3734 pos += document.body.scrollLeft; 3735 return pos; 3736} 3737function getAbsolutePositionX_FF3(element){ 3738 if(element == null) return 0; 3739 var x = element.getBoundingClientRect().left + ASPx.GetDocumentScrollLeft(); 3740 return x; 3741} 3742function getAbsolutePositionX_NS(curEl){ 3743 var pos = getAbsoluteScrollOffset_OperaFF(curEl, true); 3744 var isFirstCycle = true; 3745 while(curEl != null) { 3746 pos += curEl.offsetLeft; 3747 if(!isFirstCycle && curEl.offsetParent != null) 3748 pos -= curEl.scrollLeft; 3749 if(!isFirstCycle && Browser.Firefox){ 3750 var style = ASPx.GetCurrentStyle(curEl); 3751 if(curEl.tagName == "DIV" && style.overflow != "visible") 3752 pos += ASPx.PxToInt(style.borderLeftWidth); 3753 } 3754 isFirstCycle = false; 3755 curEl = curEl.offsetParent; 3756 } 3757 return pos; 3758} 3759function getAbsolutePositionX_Other(curEl){ 3760 var pos = 0; 3761 var isFirstCycle = true; 3762 while(curEl != null) { 3763 pos += curEl.offsetLeft; 3764 if(!isFirstCycle && curEl.offsetParent != null) 3765 pos -= curEl.scrollLeft; 3766 isFirstCycle = false; 3767 curEl = curEl.offsetParent; 3768 } 3769 return pos; 3770} 3771ASPx.GetAbsolutePositionY = function(element){ 3772 if(Browser.Firefox && Browser.Version >= 3) 3773 return getAbsolutePositionY_FF3(element); 3774 else if(Browser.Opera) 3775 return getAbsolutePositionY_Opera(element); 3776 else if(Browser.NetscapeFamily && (!Browser.Firefox || Browser.Version < 3)) 3777 return getAbsolutePositionY_NS(element); 3778 else if(Browser.WebKitFamily || Browser.Edge) 3779 return getAbsolutePositionY_FF3(element); 3780 else 3781 return getAbsolutePositionY_Other(element); 3782}; 3783function getAbsolutePositionY_Opera(curEl){ 3784 var isFirstCycle = true; 3785 if(curEl && curEl.tagName == "TR" && curEl.cells.length > 0) 3786 curEl = curEl.cells[0]; 3787 var pos = getAbsoluteScrollOffset_OperaFF(curEl, false); 3788 while(curEl != null) { 3789 pos += curEl.offsetTop; 3790 if(!isFirstCycle) 3791 pos -= curEl.scrollTop; 3792 curEl = curEl.offsetParent; 3793 isFirstCycle = false; 3794 } 3795 pos += document.body.scrollTop; 3796 return pos; 3797} 3798function getAbsolutePositionY_FF3(element){ 3799 if(element == null) return 0; 3800 var y = element.getBoundingClientRect().top + ASPx.GetDocumentScrollTop(); 3801 return y; 3802} 3803function getAbsolutePositionY_NS(curEl){ 3804 var pos = getAbsoluteScrollOffset_OperaFF(curEl, false); 3805 var isFirstCycle = true; 3806 while(curEl != null) { 3807 pos += curEl.offsetTop; 3808 if(!isFirstCycle && curEl.offsetParent != null) 3809 pos -= curEl.scrollTop; 3810 if(!isFirstCycle && Browser.Firefox){ 3811 var style = ASPx.GetCurrentStyle(curEl); 3812 if(curEl.tagName == "DIV" && style.overflow != "visible") 3813 pos += ASPx.PxToInt(style.borderTopWidth); 3814 } 3815 isFirstCycle = false; 3816 curEl = curEl.offsetParent; 3817 } 3818 return pos; 3819} 3820function getAbsoluteScrollOffset_OperaFF(curEl, isX) { 3821 var pos = 0; 3822 var isFirstCycle = true; 3823 while(curEl != null) { 3824 if(curEl.tagName == "BODY") 3825 break; 3826 var style = ASPx.GetCurrentStyle(curEl); 3827 if(style.position == "absolute") 3828 break; 3829 if(!isFirstCycle && curEl.tagName == "DIV" && (style.position == "" || style.position == "static")) 3830 pos -= isX ? curEl.scrollLeft : curEl.scrollTop; 3831 curEl = curEl.parentNode; 3832 isFirstCycle = false; 3833 } 3834 return pos; 3835} 3836function getAbsolutePositionY_Other(curEl){ 3837 var pos = 0; 3838 var isFirstCycle = true; 3839 while(curEl != null) { 3840 pos += curEl.offsetTop; 3841 if(!isFirstCycle && curEl.offsetParent != null) 3842 pos -= curEl.scrollTop; 3843 isFirstCycle = false; 3844 curEl = curEl.offsetParent; 3845 } 3846 return pos; 3847} 3848function createElementMock(element) { 3849 var div = document.createElement('DIV'); 3850 div.style.top = "0px";
3851 div.style.left = "0px"; 3852 div.visibility = "hidden"; 3853 div.style.position = ASPx.GetCurrentStyle(element).position; 3854 return div; 3855} 3856ASPx.PrepareClientPosElementForOtherParent = function(pos, element, otherParent, isX) { 3857 if(element.parentNode == otherParent) 3858 return ASPx.PrepareClientPosForElement(pos, element, isX); 3859 var elementMock = createElementMock(element); 3860 otherParent.appendChild(elementMock); 3861 var preparedPos = ASPx.PrepareClientPosForElement(pos, elementMock, isX); 3862 otherParent.removeChild(elementMock); 3863 return preparedPos; 3864}; 3865ASPx.PrepareClientPosForElement = function(pos, element, isX) { 3866 pos -= ASPx.GetPositionElementOffset(element, isX); 3867 return pos; 3868}; 3869function getExperimentalPositionOffset(element, isX) { 3870 var div = createElementMock(element); 3871 if(div.style.position == "static") 3872 div.style.position = "absolute"; 3873 element.parentNode.appendChild(div); 3874 var realPos = isX ? ASPx.GetAbsoluteX(div) : ASPx.GetAbsoluteY(div); 3875 element.parentNode.removeChild(div); 3876 return realPos; 3877} 3878ASPx.GetPositionElementOffset = function(element, isX) { 3879 return getExperimentalPositionOffset(element, isX); 3880}; 3881ASPx.GetSizeOfText = function(text, textCss) { 3882 var testContainer = document.createElement("tester"); 3883 var defaultLineHeight = ASPx.Browser.Firefox ? "1" : ""; 3884 testContainer.style.fontSize = textCss.fontSize; 3885 testContainer.style.fontFamily = textCss.fontFamily; 3886 testContainer.style.fontWeight = textCss.fontWeight; 3887 testContainer.style.letterSpacing = textCss.letterSpacing; 3888 testContainer.style.lineHeight = textCss.lineHeight || defaultLineHeight; 3889 testContainer.style.position = "absolute"; 3890 testContainer.style.top = ASPx.InvalidPosition + "px"; 3891 testContainer.style.left = ASPx.InvalidPosition + "px"; 3892 testContainer.style.width = "auto"; 3893 testContainer.style.whiteSpace = "nowrap"; 3894 testContainer.appendChild(document.createTextNode(text)); 3895 var testElement = document.body.appendChild(testContainer); 3896 var size = { 3897 "width": testElement.offsetWidth, 3898 "height": testElement.offsetHeight 3899 }; 3900 document.body.removeChild(testElement); 3901 return size; 3902}; 3903ASPx.PointToPixel = function(points, addPx) { 3904 var result = 0; 3905 try { 3906 var indexOfPt = points.toLowerCase().indexOf("pt"); 3907 if(indexOfPt > -1) 3908 result = parseInt(points.substr(0, indexOfPt)) * 96 / 72; 3909 else 3910 result = parseInt(points) * 96 / 72; 3911 if(addPx) 3912 result = result + "px"; 3913 } catch(e) {} 3914 return result; 3915}; 3916ASPx.PixelToPoint = function(pixels, addPt) { 3917 var result = 0; 3918 try { 3919 var indexOfPx = pixels.toLowerCase().indexOf("px"); 3920 if(indexOfPx > -1) 3921 result = parseInt(pixels.substr(0, indexOfPx)) * 72 / 96; 3922 else 3923 result = parseInt(pixels) * 72 / 96; 3924 if(addPt) 3925 result = result + "pt"; 3926 } catch(e) {} 3927 return result; 3928}; 3929ASPx.PxToInt = function(px) { 3930 return pxToNumber(px, parseInt); 3931}; 3932ASPx.PxToFloat = function(px) { 3933 return pxToNumber(px, parseFloat); 3934}; 3935function pxToNumber(px, parseFunction) { 3936 var result = 0; 3937 if(px != null && px != "") { 3938 try { 3939 var indexOfPx = px.indexOf("px"); 3940 if(indexOfPx > -1) 3941 result = parseFunction(px.substr(0, indexOfPx)); 3942 } catch(e) { } 3943 } 3944 return result; 3945} 3946ASPx.PercentageToFloat = function(perc) { 3947 var result = 0; 3948 if(perc != null && perc != "") { 3949 try { 3950 var indexOfPerc = perc.indexOf("%"); 3951 if(indexOfPerc > -1) 3952 result = parseFloat(perc.substr(0, indexOfPerc)) / 100; 3953 } catch(e) { } 3954 } 3955 return result; 3956}; 3957ASPx.CreateGuid = function() { 3958 return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { 3959 var r = Math.random()*16|0,v=c=='x'?r:r&0x3|0x8; 3960 return v.toString(16); 3961 }); 3962}; 3963ASPx.GetLeftRightBordersAndPaddingsSummaryValue = function(element, currentStyle) { 3964 return ASPx.GetLeftRightPaddings(element, currentStyle) + ASPx.GetHorizontalBordersWidth(element, currentStyle); 3965}; 3966ASPx.GetTopBottomBordersAndPaddingsSummaryValue = function(element, currentStyle) { 3967 return ASPx.GetTopBottomPaddings(element, currentStyle) + ASPx.GetVerticalBordersWidth(element, currentStyle); 3968}; 3969ASPx.GetVerticalBordersWidth = function(element, style) { 3970 if(!ASPx.IsExists(style)) 3971 style = ASPx.GetCurrentStyle(element); 3972 var res = 0; 3973 if(style.borderTopStyle != "none") 3974 res += ASPx.PxToFloat(style.borderTopWidth); 3975 if(style.borderBottomStyle != "none") 3976 res += ASPx.PxToFloat(style.borderBottomWidth);
3977 return res; 3978}; 3979ASPx.GetHorizontalBordersWidth = function(element, style) { 3980 if(!ASPx.IsExists(style)) 3981 style = ASPx.GetCurrentStyle(element); 3982 var res = 0; 3983 if(style.borderLeftStyle != "none") 3984 res += ASPx.PxToFloat(style.borderLeftWidth); 3985 if(style.borderRightStyle != "none") 3986 res += ASPx.PxToFloat(style.borderRightWidth); 3987 return res; 3988}; 3989ASPx.GetTopBottomPaddings = function(element, style) { 3990 var currentStyle = style ? style : ASPx.GetCurrentStyle(element); 3991 return ASPx.PxToInt(currentStyle.paddingTop) + ASPx.PxToInt(currentStyle.paddingBottom); 3992}; 3993ASPx.GetTopPaddings = function(element, style) { 3994 var currentStyle = style ? style : ASPx.GetCurrentStyle(element); 3995 return ASPx.PxToInt(currentStyle.paddingTop); 3996}; 3997ASPx.GetBottomPaddings = function(element, style) { 3998 var currentStyle = style ? style : ASPx.GetCurrentStyle(element); 3999 return ASPx.PxToInt(currentStyle.paddingBottom); 4000}; 4001ASPx.GetLeftRightPaddings = function(element, style) { 4002 var currentStyle = style ? style : ASPx.GetCurrentStyle(element); 4003 return ASPx.PxToInt(currentStyle.paddingLeft) + ASPx.PxToInt(currentStyle.paddingRight); 4004}; 4005ASPx.GetTopBottomMargins = function(element, style) { 4006 var currentStyle = style ? style : ASPx.GetCurrentStyle(element); 4007 return ASPx.PxToInt(currentStyle.marginTop) + ASPx.PxToInt(currentStyle.marginBottom); 4008}; 4009ASPx.GetLeftRightMargins = function(element, style) { 4010 var currentStyle = style ? style : ASPx.GetCurrentStyle(element); 4011 return ASPx.PxToInt(currentStyle.marginLeft) + ASPx.PxToInt(currentStyle.marginRight); 4012}; 4013ASPx.GetClearClientWidth = function(element) { 4014 return ASPx.GetElementOffsetWidth(element)- ASPx.GetLeftRightBordersAndPaddingsSummaryValue(element); 4015}; 4016ASPx.GetClearClientHeight = function(element) { 4017 return ASPx.GetElementOffsetHeight(element) - ASPx.GetTopBottomBordersAndPaddingsSummaryValue(element); 4018}; 4019ASPx.SetOffsetWidth = function(element, widthValue, currentStyle) { 4020 if(!ASPx.IsExists(currentStyle)) 4021 currentStyle = ASPx.GetCurrentStyle(element); 4022 var value = widthValue - ASPx.PxToInt(currentStyle.marginLeft) - ASPx.PxToInt(currentStyle.marginRight); 4023 value -= ASPx.GetLeftRightBordersAndPaddingsSummaryValue(element, currentStyle); 4024 if(value > -1) 4025 element.style.width = value + "px"; 4026}; 4027ASPx.SetOffsetHeight = function(element, heightValue, currentStyle) { 4028 if(!ASPx.IsExists(currentStyle)) 4029 currentStyle = ASPx.GetCurrentStyle(element); 4030 var value = heightValue - ASPx.PxToInt(currentStyle.marginTop) - ASPx.PxToInt(currentStyle.marginBottom); 4031 value -= ASPx.GetTopBottomBordersAndPaddingsSummaryValue(element, currentStyle); 4032 if(value > -1) 4033 element.style.height = value + "px"; 4034}; 4035ASPx.FindOffsetParent = function(element) { 4036 var currentElement = element.parentNode; 4037 while(ASPx.IsExistsElement(currentElement) && currentElement.tagName != "BODY") { 4038 if(ASPx.GetElementOffsetWidth(currentElement) > 0 && ASPx.GetElementOffsetHeight(currentElement) > 0) 4039 return currentElement; 4040 currentElement = currentElement.parentNode; 4041 } 4042 return document.body; 4043}; 4044ASPx.GetDocumentScrollTop = function(){ 4045 if(Browser.WebKitFamily || Browser.Edge) { 4046 if(Browser.MacOSMobilePlatform) 4047 return window.pageYOffset; 4048 if(Browser.WebKitFamily) 4049 return document.documentElement.scrollTop || document.body.scrollTop; 4050 return document.body.scrollTop; 4051 } 4052 else 4053 return document.documentElement.scrollTop; 4054}; 4055ASPx.SetDocumentScrollTop = function(scrollTop) { 4056 if(!Browser.MacOSMobilePlatform && (Browser.Safari || (Browser.Chrome && Browser.Version < 60) || (Browser.Opera && Browser.MajorVersion >= 15) || Browser.Edge)) 4057 document.body.scrollTop = scrollTop; 4058 else 4059 document.documentElement.scrollTop = scrollTop; 4060}; 4061ASPx.GetDocumentScrollLeft = function(){ 4062 if(Browser.Edge) 4063 return document.body ? document.body.scrollLeft : document.documentElement.scrollLeft; 4064 if(Browser.WebKitFamily) 4065 return document.documentElement.scrollLeft || document.body.scrollLeft; 4066 return document.documentElement.scrollLeft; 4067}; 4068ASPx.SetDocumentScrollLeft = function (scrollLeft) { 4069 if(!Browser.MacOSMobilePlatform && (Browser.Safari || (Browser.Chrome && Browser.Version < 60) || (Browser.Opera && Browser.MajorVersion >= 15) || Browser.Edge)) 4070 document.body.scrollLeft = scrollLeft; 4071 else
4072 document.documentElement.scrollLeft = scrollLeft; 4073}; 4074ASPx.GetDocumentClientWidth = function(){ 4075 if(document.documentElement.clientWidth == 0) 4076 return document.body.clientWidth; 4077 else 4078 return document.documentElement.clientWidth; 4079}; 4080ASPx.GetDocumentClientHeight = function() { 4081 if(Browser.Firefox && window.innerHeight - document.documentElement.clientHeight > ASPx.GetVerticalScrollBarWidth()) { 4082 return window.innerHeight; 4083 } else if(Browser.Opera && Browser.Version < 9.6 || document.documentElement.clientHeight == 0) { 4084 return document.body.clientHeight; 4085 } 4086 return document.documentElement.clientHeight; 4087}; 4088ASPx.GetDocumentWidth = function(){ 4089 var bodyWidth = document.body.offsetWidth; 4090 var docWidth = document.documentElement.offsetWidth; 4091 var bodyScrollWidth = document.body.scrollWidth; 4092 var docScrollWidth = document.documentElement.scrollWidth; 4093 return getMaxDimensionOf(bodyWidth, docWidth, bodyScrollWidth, docScrollWidth); 4094}; 4095ASPx.GetDocumentHeight = function(){ 4096 var bodyHeight = document.body.offsetHeight; 4097 var docHeight = document.documentElement.offsetHeight; 4098 var bodyScrollHeight = document.body.scrollHeight; 4099 var docScrollHeight = document.documentElement.scrollHeight; 4100 var maxHeight = getMaxDimensionOf(bodyHeight, docHeight, bodyScrollHeight, docScrollHeight); 4101 if(Browser.Opera && Browser.Version >= 9.6){ 4102 if(Browser.Version < 10) 4103 maxHeight = getMaxDimensionOf(bodyHeight, docHeight, bodyScrollHeight); 4104 var visibleHeightOfDocument = document.documentElement.clientHeight; 4105 if(maxHeight > visibleHeightOfDocument) 4106 maxHeight = getMaxDimensionOf(window.outerHeight, maxHeight); 4107 else 4108 maxHeight = document.documentElement.clientHeight; 4109 return maxHeight; 4110 } 4111 return maxHeight; 4112}; 4113ASPx.GetDocumentMaxClientWidth = function(){ 4114 var bodyWidth = document.body.offsetWidth; 4115 var docWidth = document.documentElement.offsetWidth; 4116 var docClientWidth = document.documentElement.clientWidth; 4117 return getMaxDimensionOf(bodyWidth, docWidth, docClientWidth); 4118}; 4119ASPx.GetDocumentMaxClientHeight = function(){ 4120 var bodyHeight = document.body.offsetHeight; 4121 var docHeight = document.documentElement.offsetHeight; 4122 var docClientHeight = document.documentElement.clientHeight; 4123 return getMaxDimensionOf(bodyHeight, docHeight, docClientHeight); 4124}; 4125ASPx.verticalScrollIsNotHidden = null; 4126ASPx.horizontalScrollIsNotHidden = null; 4127ASPx.GetVerticalScrollIsNotHidden = function() { 4128 if(!ASPx.IsExists(ASPx.verticalScrollIsNotHidden)) 4129 ASPx.verticalScrollIsNotHidden = ASPx.GetCurrentStyle(document.body).overflowY !== "hidden" 4130 && ASPx.GetCurrentStyle(document.documentElement).overflowY !== "hidden"; 4131 return ASPx.verticalScrollIsNotHidden; 4132}; 4133ASPx.GetHorizontalScrollIsNotHidden = function() { 4134 if(!ASPx.IsExists(ASPx.horizontalScrollIsNotHidden)) 4135 ASPx.horizontalScrollIsNotHidden = ASPx.GetCurrentStyle(document.body).overflowX !== "hidden" 4136 && ASPx.GetCurrentStyle(document.documentElement).overflowX !== "hidden"; 4137 return ASPx.horizontalScrollIsNotHidden; 4138}; 4139ASPx.GetCurrentDocumentWidth = function() { 4140 var result = ASPx.GetDocumentClientWidth(); 4141 if(!ASPx.Browser.Safari && ASPx.GetVerticalScrollIsNotHidden() && ASPx.GetDocumentHeight() > ASPx.GetDocumentClientHeight()) 4142 result += ASPx.GetVerticalScrollBarWidth(); 4143 return result; 4144}; 4145ASPx.GetCurrentDocumentHeight = function() { 4146 var result = ASPx.GetDocumentClientHeight(); 4147 if(!ASPx.Browser.Safari && ASPx.GetHorizontalScrollIsNotHidden() && ASPx.GetDocumentWidth() > ASPx.GetDocumentClientWidth()) 4148 result += ASPx.GetVerticalScrollBarWidth(); 4149 return result; 4150}; 4151function getMaxDimensionOf(){ 4152 var max = ASPx.InvalidDimension; 4153 for(var i = 0; i < arguments.length; i++){ 4154 if(max < arguments[i]) 4155 max = arguments[i]; 4156 } 4157 return max; 4158} 4159ASPx.GetClientLeft = function(element) { 4160 return ASPx.IsExists(element.clientLeft) ? element.clientLeft : (ASPx.GetElementOffsetWidth(element)- element.clientWidth) / 2; 4161}; 4162ASPx.GetClientTop = function(element) { 4163 return ASPx.IsExists(element.clientTop) ? element.clientTop : (ASPx.GetElementOffsetHeight(element) - element.clientHeight) / 2; 4164}; 4165var requestAnimationFrameFunc = window.requestAnimationFrame || function(callback) { callback(); }; 4166var cancelAnimationFrameFunc = window.cancelAnimationFrame || function(id) { }; 4167ASPx.CancelAnimationFrame = function(id) { cancelAnimationFrameFunc(id); }; 4168ASPx.RequestAnimationFrame = function (callback) { return requestAnimationFrameFunc(callback); }; 4169ASPx.SetStyles = function(element, styles, makeImportant) { 4170 if(ASPx.IsExists(styles.cssText)) 4171 element.style.cssText = styles.cssText; 4172 if(ASPx.IsExists(styles.className)) { 4173 ASPx.SetClassName(element, styles.className); 4174 } 4175 for(var property in styles) { 4176 if(!styles.hasOwnProperty(property)) 4177 continue; 4178 var value = styles[property]; 4179 switch (property) { 4180 case "cssText": 4181 case "className": 4182 break; 4183 case "float": 4184 ASPx.SetElementFloat(element, value); 4185 break; 4186 case "opacity": 4187 ASPx.SetElementOpacity(element, value); 4188 break; 4189 case "zIndex": 4190 ASPx.SetStylesCore(element, property, value, makeImportant); 4191 break; 4192 default: 4193 ASPx.SetStylesCore(element, property, value + (typeof (value) == "number" ? "px" : ""), makeImportant); 4194 } 4195 } 4196}; 4197ASPx.SetStylesCore = function(element, property, value, makeImportant) { 4198 if(makeImportant) { 4199 var index = property.search("[A-Z]"); 4200 if(index != -1) 4201 property = property.replace(property.charAt(index), "-" + property.charAt(index).toLowerCase()); 4202 if(element.style.setProperty) 4203 element.style.setProperty(property, value, "important"); 4204 else 4205 element.style.cssText += ";" + property + ":" + value + "!important"; 4206 } 4207 else 4208 element.style[property] = value; 4209}; 4210ASPx.RemoveBordersAndShadows = function(el) { 4211 if(!el || !el.style) 4212 return; 4213 el.style.borderWidth = 0; 4214 if(ASPx.IsExists(el.style.boxShadow)) 4215 el.style.boxShadow = "none"; 4216 else if(ASPx.IsExists(el.style.MozBoxShadow)) 4217 el.style.MozBoxShadow = "none"; 4218 else if(ASPx.IsExists(el.style.webkitBoxShadow)) 4219 el.style.webkitBoxShadow = "none"; 4220}; 4221ASPx.GetCellSpacing = function(element) { 4222 var val = parseInt(element.cellSpacing); 4223 if(!isNaN(val)) return val; 4224 val = parseInt(ASPx.GetCurrentStyle(element).borderSpacing); 4225 if(!isNaN(val)) return val; 4226 return 0; 4227}; 4228ASPx.GetInnerScrollPositions = function(element) { 4229 var scrolls = []; 4230 getInnerScrollPositionsCore(element, scrolls); 4231 return scrolls; 4232}; 4233function getInnerScrollPositionsCore(element, scrolls) { 4234 for(var child = element.firstChild; child; child = child.nextSibling) { 4235 var scrollTop = child.scrollTop, 4236 scrollLeft = child.scrollLeft; 4237 if(scrollTop > 0 || scrollLeft > 0) 4238 scrolls.push([child, scrollTop, scrollLeft]); 4239 getInnerScrollPositionsCore(child, scrolls); 4240 } 4241} 4242ASPx.RestoreInnerScrollPositions = function(scrolls) { 4243 for(var i = 0, scrollArr; scrollArr = scrolls[i]; i++) { 4244 if(scrollArr[1] > 0) 4245 scrollArr[0].scrollTop = scrollArr[1]; 4246 if(scrollArr[2] > 0) 4247 scrollArr[0].scrollLeft = scrollArr[2]; 4248 } 4249}; 4250ASPx.GetOuterScrollPosition = function(element) { 4251 while(element && element.tagName !== "BODY") { 4252 var scrollTop = element.scrollTop, 4253 scrollLeft = element.scrollLeft; 4254 if(scrollTop > 0 || scrollLeft > 0) { 4255 return { 4256 scrollTop: scrollTop, 4257 scrollLeft: scrollLeft, 4258 element: element 4259 }; 4260 } 4261 element = element.parentNode; 4262 } 4263 return { 4264 scrollTop: ASPx.GetDocumentScrollTop(), 4265 scrollLeft: ASPx.GetDocumentScrollLeft() 4266 }; 4267}; 4268ASPx.RestoreOuterScrollPosition = function(scrollInfo) { 4269 if(scrollInfo.element) { 4270 if(scrollInfo.scrollTop > 0) 4271 scrollInfo.element.scrollTop = scrollInfo.scrollTop; 4272 if(scrollInfo.scrollLeft > 0) 4273 scrollInfo.element.scrollLeft = scrollInfo.scrollLeft; 4274 } 4275 else { 4276 if(scrollInfo.scrollTop > 0) 4277 ASPx.SetDocumentScrollTop(scrollInfo.scrollTop); 4278 if(scrollInfo.scrollLeft > 0) 4279 ASPx.SetDocumentScrollLeft(scrollInfo.scrollLeft); 4280 } 4281}; 4282ASPx.ChangeElementContainer = function(element, container, savePreviousContainer) { 4283 if(element.parentNode != container) { 4284 var parentNode = element.parentNode; 4285 parentNode.removeChild(element);
4286 container.appendChild(element); 4287 if(savePreviousContainer) 4288 element.previousContainer = parentNode; 4289 } 4290}; 4291ASPx.RestoreElementContainer = function(element) { 4292 if(element.previousContainer) { 4293 ASPx.ChangeElementContainer(element, element.previousContainer, false); 4294 element.previousContainer = null; 4295 } 4296}; 4297ASPx.MoveChildrenToElement = function(sourceElement, destinationElement){ 4298 while(sourceElement.childNodes.length > 0) 4299 destinationElement.appendChild(sourceElement.childNodes[0]); 4300}; 4301ASPx.GetScriptCode = function(script) { 4302 var useFirstChildElement = Browser.Chrome && Browser.Version < 11 || Browser.Safari && Browser.Version < 5; 4303 var text = useFirstChildElement ? script.firstChild.data : script.text; 4304 var comment = "<!--"; 4305 var pos = text.indexOf(comment); 4306 if(pos > -1) 4307 text = text.substr(pos + comment.length); 4308 return text; 4309}; 4310ASPx.AppendScript = function(script) { 4311 var parent = document.getElementsByTagName("head")[0]; 4312 if(!parent) 4313 parent = document.body; 4314 if(parent) 4315 parent.appendChild(script); 4316}; 4317function getFrame(frames, name) { 4318 if(frames[name]) 4319 return frames[name]; 4320 for(var i = 0; i < frames.length; i++) { 4321 try { 4322 var frame = frames[i]; 4323 if(frame.name == name) 4324 return frame; 4325 frame = getFrame(frame.frames, name); 4326 if(frame != null) 4327 return frame; 4328 } catch(e) { 4329 } 4330 } 4331 return null; 4332} 4333ASPx.IsValidElement = function(element) { 4334 if(!element) 4335 return false; 4336 if(!(Browser.Firefox && Browser.Version < 4)) { 4337 if(element.ownerDocument && element.ownerDocument.body && element.ownerDocument.body.compareDocumentPosition) 4338 return element.ownerDocument.body.compareDocumentPosition(element) % 2 === 0; 4339 } 4340 if(!Browser.Opera && element.offsetParent && element.parentNode.tagName) 4341 return true; 4342 while(element != null){ 4343 if(element.tagName == "BODY") 4344 return true; 4345 element = element.parentNode; 4346 } 4347 return false; 4348}; 4349ASPx.IsValidElements = function(elements) { 4350 if(!elements) 4351 return false; 4352 for(var i = 0; i < elements.length; i++) { 4353 if(elements[i] && !ASPx.IsValidElement(elements[i])) 4354 return false; 4355 } 4356 return true; 4357}; 4358ASPx.IsExistsElement = function(element) { 4359 return element && ASPx.IsValidElement(element); 4360}; 4361ASPx.CreateHtmlElementFromString = function(str) { 4362 var dummy = ASPx.CreateHtmlElement(); 4363 setInnerHtmlInternal(dummy, str); 4364 return dummy.firstChild; 4365}; 4366ASPx.CreateHtmlElement = function(tagName, styles) { 4367 var element = document.createElement(tagName || "DIV"); 4368 if(styles) 4369 ASPx.SetStyles(element, styles); 4370 return element; 4371}; 4372ASPx.RestoreElementOriginalWidth = function(element) { 4373 if(!ASPx.IsExistsElement(element)) 4374 return; 4375 element.style.width = element.dxOrigWidth = ASPx.GetElementOriginalWidth(element); 4376}; 4377ASPx.GetElementOriginalWidth = function(element) { 4378 if(!ASPx.IsExistsElement(element)) 4379 return null; 4380 var width; 4381 if(!ASPx.IsExists(element.dxOrigWidth)) { 4382 width = String(element.style.width).length > 0 4383 ? element.style.width 4384 : ASPx.GetElementOffsetWidth(element) + "px"; 4385 } else { 4386 width = element.dxOrigWidth; 4387 } 4388 return width; 4389}; 4390ASPx.DropElementOriginalWidth = function(element) { 4391 if(ASPx.IsExists(element.dxOrigWidth)) 4392 element.dxOrigWidth = null; 4393}; 4394ASPx.GetObjectKeys = function(obj) { 4395 if(!obj) return [ ]; 4396 if(Object.keys) 4397 return Object.keys(obj); 4398 var keys = [ ]; 4399 for(var key in obj) { 4400 if(obj.hasOwnProperty(key)) 4401 keys.push(key); 4402 } 4403 return keys; 4404}; 4405ASPx.ShowErrorAlert = function(message) { 4406 message = ASPx.Str.DecodeHtmlViaTextArea(message); 4407 if(ASPx.IsExists(message) && message !== "") 4408 alert(message); 4409}; 4410ASPx.ShowKBErrorMessage = function(text, kbid) { 4411 ASPx.ShowErrorMessage(text + "https://www.devexpress.com/kbid=" + kbid + "."); 4412}; 4413ASPx.ShowErrorMessage = function(errorMessage) { 4414 var console = window.console; 4415 if(!console || !ASPx.IsFunction(console.error)) 4416 return; 4417 console.error(errorMessage); 4418}; 4419ASPx.IsInteractiveControl = function(element, extremeParent) { 4420 return Data.ArrayIndexOf(["A", "INPUT", "SELECT", "OPTION", "TEXTAREA", "BUTTON", "IFRAME"], element.tagName) > -1; 4421};
4422ASPx.IsUrlContainsClientScript = function(url) { 4423 return url.toLowerCase().indexOf("javascript:") !== -1; 4424}; 4425ASPx.GetMSAjaxRequestManager = function() { 4426 if(window.Sys && Sys.WebForms && Sys.WebForms.PageRequestManager && Sys.WebForms.PageRequestManager.getInstance) 4427 return Sys.WebForms.PageRequestManager.getInstance(); 4428 return null; 4429}; 4430Function.prototype.aspxBind = function(scope) { 4431 var func = this; 4432 return function() { 4433 return func.apply(scope, arguments); 4434 }; 4435}; 4436var FilteringUtils = { }; 4437FilteringUtils.EventKeyCodeChangesTheInput = function(evt) { 4438 if(ASPx.IsPasteShortcut(evt)) 4439 return true; 4440 else if(evt.ctrlKey && !evt.altKey) 4441 return false; 4442 if(ASPx.Browser.AndroidMobilePlatform || ASPx.Browser.MacOSMobilePlatform) return true; 4443 var keyCode = ASPx.Evt.GetKeyCode(evt); 4444 var isSystemKey = ASPx.Key.Windows <= keyCode && keyCode <= ASPx.Key.ContextMenu; 4445 var isFKey = ASPx.Key.F1 <= keyCode && keyCode <= 127; 4446 return ASPx.Key.Delete <= keyCode && !isSystemKey && !isFKey || keyCode == ASPx.Key.Backspace || keyCode == ASPx.Key.Space; 4447}; 4448FilteringUtils.FormatCallbackArg = function(prefix, arg) { 4449 return (ASPx.IsExists(arg) ? prefix + "|" + arg.length + ';' + arg + ';' : ""); 4450}; 4451ASPx.FilteringUtils = FilteringUtils; 4452var FormatStringHelper = { }; 4453FormatStringHelper.PlaceHolderTemplateStruct = function(startIndex, length, index, placeHolderString){ 4454 this.startIndex = startIndex; 4455 this.realStartIndex = 0; 4456 this.length = length; 4457 this.realLength = 0; 4458 this.index = index; 4459 this.placeHolderString = placeHolderString; 4460}; 4461FormatStringHelper.GetPlaceHolderTemplates = function(formatString){ 4462 formatString = this.CollapseDoubleBrackets(formatString); 4463 var templates = this.CreatePlaceHolderTemplates(formatString); 4464 return templates; 4465}; 4466FormatStringHelper.CreatePlaceHolderTemplates = function(formatString){ 4467 var templates = []; 4468 var templateStrings = formatString.match(/{[^}]+}/g); 4469 if(templateStrings != null){ 4470 var pos = 0; 4471 for(var i = 0; i < templateStrings.length; i++){ 4472 var tempString = templateStrings[i]; 4473 var startIndex = formatString.indexOf(tempString, pos); 4474 var length = tempString.length; 4475 var indexString = tempString.slice(1).match(/^[0-9]+/); 4476 var index = parseInt(indexString); 4477 templates.push(new this.PlaceHolderTemplateStruct(startIndex, length, index, tempString)); 4478 pos = startIndex + length; 4479 } 4480 } 4481 return templates; 4482}; 4483FormatStringHelper.CollapseDoubleBrackets = function(formatString){ 4484 formatString = this.CollapseOpenDoubleBrackets(formatString); 4485 formatString = this.CollapseCloseDoubleBrackets(formatString); 4486 return formatString; 4487}; 4488FormatStringHelper.CollapseOpenDoubleBrackets = function(formatString){ 4489 return formatString.replace(/{{/g, "_"); 4490};
4491FormatStringHelper.CollapseCloseDoubleBrackets = function(formatString){ 4492 while(true){ 4493 var index = formatString.lastIndexOf("}}"); 4494 if(index == -1) 4495 break; 4496 else 4497 formatString = formatString.substr(0, index) + "_" + formatString.substr(index + 2); 4498 } 4499 return formatString; 4500}; 4501ASPx.FormatStringHelper = FormatStringHelper; 4502var StartWithFilteringUtils = { }; 4503StartWithFilteringUtils.HighlightSuggestedText = function(input, suggestedText, control, onChangeInput){ 4504 if(this.NeedToLockAndoidKeyEvents(control)) 4505 control.LockAndroidKeyEvents(); 4506 var selInfo = ASPx.Selection.GetInfo(input); 4507 var currentTextLenght = ASPx.Str.GetCoincideCharCount(suggestedText, input.value, 4508 function(text, filter) { 4509 return text.indexOf(filter) == 0; 4510 }); 4511 var suggestedTextLenght = suggestedText.length; 4512 var isSelected = selInfo.startPos == 0 && selInfo.endPos == currentTextLenght && 4513 selInfo.endPos == suggestedTextLenght && input.value == suggestedText; 4514 if(!isSelected) { 4515 input.value = suggestedText; 4516 if(onChangeInput) 4517 onChangeInput(); 4518 if(this.NeedToLockAndoidKeyEvents(control)) { 4519 window.setTimeout(function() { 4520 this.SelectText(input, currentTextLenght, suggestedTextLenght); 4521 control.UnlockAndroidKeyEvents(); 4522 }.aspxBind(this), control.adroidSamsungBugTimeout); 4523 } else 4524 this.SelectText(input, currentTextLenght, suggestedTextLenght); 4525 } 4526}; 4527StartWithFilteringUtils.SelectText = function(input, startPos, stopPos) { 4528 if(startPos < stopPos) 4529 ASPx.Selection.Set(input, startPos, stopPos); 4530}; 4531StartWithFilteringUtils.RollbackOneSuggestedChar = function(input){ 4532 var currentText = input.value; 4533 var cutText = currentText.slice(0, -1); 4534 if(cutText != currentText) 4535 input.value = cutText; 4536}; 4537StartWithFilteringUtils.NeedToLockAndoidKeyEvents = function(control) { 4538 return ASPx.Browser.AndroidMobilePlatform && control && control.LockAndroidKeyEvents; 4539}; 4540ASPx.StartWithFilteringUtils = StartWithFilteringUtils; 4541var ContainsFilteringUtils = { }; 4542ContainsFilteringUtils.ColumnSelectionStruct = function(index, startIndex, length){ 4543 this.index = index; 4544 this.length = length; 4545 this.startIndex = startIndex; 4546}; 4547ContainsFilteringUtils.IsFilterCrossPlaseHolder = function(filterStartIndex, filterEndIndex, template) { 4548 var left = Math.max(filterStartIndex, template.realStartIndex); 4549 var right = Math.min(filterEndIndex, template.realStartIndex + template.realLength); 4550 return left < right; 4551}; 4552ContainsFilteringUtils.GetColumnSelectionsForItem = function(itemValues, formatString, filterString) { 4553 if(formatString == "") 4554 return this.GetSelectionForSingleColumnItem(itemValues, filterString); 4555 var result = []; 4556 var formatedString = ASPx.Formatter.Format(formatString, itemValues); 4557 var filterStartIndex = ASPx.Str.PrepareStringForFilter(formatedString).indexOf(ASPx.Str.PrepareStringForFilter(filterString)); 4558 if(filterStartIndex == -1) return result; 4559 var filterEndIndex = filterStartIndex + filterString.length; 4560 var templates = FormatStringHelper.GetPlaceHolderTemplates(formatString); 4561 this.SupplyTemplatesWithRealValues(itemValues, templates); 4562 for(var i = 0; i < templates.length ; i++) { 4563 if(this.IsFilterCrossPlaseHolder(filterStartIndex, filterEndIndex, templates[i])) 4564 result.push(this.GetColumnSelectionsForItemValue(templates[i], filterStartIndex, filterEndIndex)); 4565 } 4566 return result; 4567}; 4568ContainsFilteringUtils.GetColumnSelectionsForItemValue = function(template, filterStartIndex, filterEndIndex) { 4569 var selectedTextStartIndex = filterStartIndex < template.realStartIndex ? 0 : 4570 filterStartIndex - template.realStartIndex; 4571 var selectedTextEndIndex = filterEndIndex > template.realStartIndex + template.realLength ? template.realLength : 4572 filterEndIndex - template.realStartIndex; 4573 var selectedTextLength = selectedTextEndIndex - selectedTextStartIndex; 4574 return new this.ColumnSelectionStruct(template.index, selectedTextStartIndex, selectedTextLength); 4575}; 4576ContainsFilteringUtils.GetSelectionForSingleColumnItem = function(itemValues, filterString) { 4577 var selectedTextStartIndex = ASPx.Str.PrepareStringForFilter(itemValues[0]).indexOf(ASPx.Str.PrepareStringForFilter(filterString)); 4578 var selectedTextLength = filterString.length; 4579 return [new this.ColumnSelectionStruct(0, selectedTextStartIndex, selectedTextLength)];
4580}; 4581ContainsFilteringUtils.ResetFormatStringIndex = function(formatString, index) { 4582 if(index != 0) 4583 return formatString.replace(index.toString(), "0"); 4584 return formatString; 4585}; 4586ContainsFilteringUtils.SupplyTemplatesWithRealValues = function(itemValues, templates) { 4587 var shift = 0; 4588 for(var i = 0; i < templates.length; i++) { 4589 var formatString = this.ResetFormatStringIndex(templates[i].placeHolderString, templates[i].index); 4590 var currentItemValue = itemValues[templates[i].index]; 4591 templates[i].realLength = ASPx.Formatter.Format(formatString, currentItemValue).length; 4592 templates[i].realStartIndex += templates[i].startIndex + shift; 4593 shift += templates[i].realLength - templates[i].placeHolderString.length; 4594 } 4595}; 4596ContainsFilteringUtils.PrepareElementText = function(itemText) { 4597 return itemText ? itemText.replace(/\&/g, "&").replace(/</g, "<").replace(/>/g, ">") : ''; 4598}; 4599ContainsFilteringUtils.UnselectContainsTextInElement = function(element, selection, highlightTagName) { 4600 var currentText = ASPx.Attr.GetAttribute (element, "DXText"); 4601 if(ASPx.IsExists(currentText)) { 4602 currentText = ContainsFilteringUtils.PrepareElementText(currentText); 4603 ASPx.Security.setInnerHtml(element, currentText === "" ? " " : currentText, ASPx.Security.DataType.Trusted); 4604 } 4605}; 4606ContainsFilteringUtils.ReselectContainsTextInElement = function(element, selection, highlightTagName) { 4607 var currentText = ASPx.GetInnerText(element); 4608 if(!highlightTagName) 4609 highlightTagName = "em"; 4610 highlightTagName = highlightTagName.toLowerCase(); 4611 if(currentText.indexOf("</" + highlightTagName + ">") != -1) 4612 ContainsFilteringUtils.UnselectContainsTextInElement(element, selection, highlightTagName); 4613 return ContainsFilteringUtils.SelectContainsTextInElement(element, selection, highlightTagName); 4614}; 4615ContainsFilteringUtils.SelectContainsTextInElement = function(element, selection, highlightTagName) { 4616 if(selection.startIndex == -1) 4617 return; 4618 var currentText = ASPx.Attr.GetAttribute (element, "DXText"); 4619 if(!ASPx.IsExists(currentText)) ASPx.Attr.SetAttribute (element, "DXText", ASPx.GetInnerText(element)); 4620 if(!highlightTagName) 4621 highlightTagName = "em"; 4622 highlightTagName = highlightTagName.toLowerCase(); 4623 var oldInnerText = ASPx.GetInnerText(element); 4624 var newInnerText = ContainsFilteringUtils.PrepareElementText(oldInnerText.substr(0, selection.startIndex)) + "<" + highlightTagName + ">" + 4625 ContainsFilteringUtils.PrepareElementText(oldInnerText.substr(selection.startIndex, selection.length)) + "</" + highlightTagName + ">" + 4626 ContainsFilteringUtils.PrepareElementText(oldInnerText.substr(selection.startIndex + selection.length)); 4627 ASPx.Security.setInnerHtml(element, newInnerText, ASPx.Security.DataType.Trusted); 4628}; 4629ASPx.ContainsFilteringUtils = ContainsFilteringUtils; 4630ASPx.MakeEqualControlsWidth = function(name1, name2){ 4631 var control1 = ASPx.GetControlCollection().Get(name1); 4632 var control2 = ASPx.GetControlCollection().Get(name2); 4633 if(control1 && control2){ 4634 var width = Math.max(control1.GetWidth(), control2.GetWidth()); 4635 control1.SetWidth(width); 4636 control2.SetWidth(width); 4637 } 4638}; 4639ASPx.HighContrastForeColorHighlightColorMap = { 4640 "#ffff00" : "#008000", 4641 "#00ff00" : "#0000ff", 4642 "#ffffff" : "#00838f", 4643 "#000000" : "#a347ff" 4644}; 4645var BadgeManagerBase = ASPx.CreateClass(null, { 4646 createBadge: function(text, iconCssClass) { 4647 var badge = document.createElement("SPAN"); 4648 ASPx.SetClassName(badge, this.getBadgeClassName()); 4649 if(iconCssClass && iconCssClass.length) 4650 this.setBadgeIconCssClass(badge, iconCssClass); 4651 if(text && text.length) 4652 this.setBadgeText(badge, text); 4653 return badge; 4654 }, 4655 findBadge: function(element) { 4656 if(!element) 4657 return null; 4658 return element.querySelector("." + this.getBadgeClassName()); 4659 }, 4660 setBadgeIconCssClass: function(badge, iconCssClass) { 4661 if(!badge || iconCssClass === undefined) 4662 return; 4663 var iconElement = this.getBadgeIconElement(badge); 4664 if(!iconCssClass) { 4665 if(iconElement) 4666 badge.removeChild(iconElement); 4667 } 4668 else { 4669 if(!iconElement) { 4670 iconElement = document.createElement("SPAN"); 4671 badge.insertBefore(iconElement, badge.childNodes[0]); 4672 } 4673 ASPx.SetClassName(iconElement, iconCssClass + " " + this.getBadgeIconDefaultClassName()); 4674 } 4675 }, 4676 getBadgeIconCssClass: function(element) { 4677 var badge = this.findBadge(element); 4678 if(badge) { 4679 var iconElement = this.getBadgeIconElement(badge); 4680 var regEx = new RegExp("(?:^|\\s)" + this.getBadgeIconDefaultClassName() + "(?!\\S)"); 4681 return iconElement ? ASPx.Str.Trim(ASPx.GetClassName(iconElement).replace(regEx, "")) : ""; 4682 } 4683 return ""; 4684 }, 4685 setBadgeText: function(badge, text) { 4686 if(!badge || text === undefined) 4687 return; 4688 var textElement = this.getBadgeTextElement(badge); 4689 if(!text) { 4690 if(textElement) 4691 badge.removeChild(textElement); 4692 } 4693 else { 4694 if(!textElement) { 4695 textElement = document.createElement("SPAN"); 4696 badge.appendChild(textElement); 4697 } 4698 ASPx.Security.setInnerHtml(textElement, text, ASPx.Security.DataType.Trusted); 4699 } 4700 }, 4701 getBadgeText: function(element) { 4702 var badge = this.findBadge(element); 4703 if(badge) { 4704 var textElement = this.getBadgeTextElement(badge); 4705 return textElement ? ASPx.GetInnerText(textElement) : ""; 4706 } 4707 return ""; 4708 }, 4709 getBadgeClassName: function() { 4710 return ""; 4711 }, 4712 getBadgeIconDefaultClassName: function() { 4713 return ""; 4714 }, 4715 getBadgeIconElement: function(badge) { 4716 return badge.childNodes.length ? badge.querySelector("." + this.getBadgeIconDefaultClassName()) : null; 4717 }, 4718 getBadgeTextElement: function(badge) { 4719 return badge.childNodes.length ? badge.querySelector("span:not(." + this.getBadgeIconDefaultClassName() + ")") : null; 4720 } 4721}); 4722ASPx.BadgeManagerBase = BadgeManagerBase; 4723var BadgeManager = ASPx.CreateClass(BadgeManagerBase, { 4724 getBadgeClassName: function() { 4725 return "dxBadge"; 4726 }, 4727 getBadgeIconDefaultClassName: function() { 4728 return "dxBadgeImage"; 4729 }, 4730 createBadgeForButton: function(button) { 4731 var badge = ASPx.BadgeManager.createBadge(); 4732 var buttonImage = button.GetButtonImage(); 4733 var textContainer = button.GetTextContainer(); 4734 var badgeRightSibling = !!buttonImage ? buttonImage : textContainer; 4735 badgeRightSibling.parentNode.insertBefore(badge, badgeRightSibling); 4736 if(button.IsLink() && buttonImage) 4737 ASPx.SetStyles(badge, { verticalAlign: "middle" }); 4738 return badge; 4739 }, 4740 createBadgeForToolbar: function(toolbarItem) { 4741 var badge = ASPx.BadgeManager.createBadge(); 4742 var itemImage = toolbarItem.GetImage(); 4743 var badgeRightSibling = itemImage; 4744 if(!itemImage) { 4745 var itemContentElement = toolbarItem.menu.GetItemContentElement(toolbarItem.indexPath); 4746 badgeRightSibling = toolbarItem.menu.GetContentTextElement(itemContentElement); 4747 } 4748 badgeRightSibling.parentNode.insertBefore(badge, badgeRightSibling); 4749 return badge; 4750 } 4751}); 4752ASPx.BadgeManager = new BadgeManager(); 4753var AccessibilityUtils = { 4754 isInitialized: false, 4755 highContrastCssClassMarker: "dxHighContrast",
4756 highContrastBackgroundCssClassMarker: "dxHCB", 4757 highContrastDefaultBackgroundColor: "#a347ff", 4758 highContrastThemeActive: false, 4759 accessibleBackgroundCssMarker: ".dx-runtime-background", 4760 createAccessibleBackgrounds: function(control) { 4761 if(!this.highContrastThemeActive || control.accessibleBackgroundsCreated || !control.accessibilityCompliant) 4762 return; 4763 var className = this.accessibleBackgroundCssMarker; 4764 var styleSheetRuleNames = []; 4765 iterateStyleSheetRules(null, function(rule) { 4766 var selectorTxt = rule.selectorText; 4767 if(selectorTxt && selectorTxt.indexOf(className) > -1) 4768 styleSheetRuleNames.push(ASPx.Str.CompleteReplace(selectorTxt, className, "")); 4769 }); 4770 for(var i = 0; i < styleSheetRuleNames.length; i++) { 4771 var name = styleSheetRuleNames[i]; 4772 var rule = ASPx.GetStyleSheetRules(name.substring(1)); 4773 if(rule && rule.style && rule.style.backgroundImage) 4774 this.createAccessibleBackground(control.GetMainElement(), rule.style, name); 4775 } 4776 control.accessibleBackgroundsCreated = true; 4777 }, 4778 createAccessibleBackground: function(container, style, selector) { 4779 if(!container) 4780 return; 4781 var backgroundUrl = style.backgroundImage.substring(5, style.backgroundImage.length - 2); 4782 var elements = container.querySelectorAll(selector); 4783 var accessibleBackgroundClassName = "dx-acc-bi"; 4784 for(var i = 0; i < elements.length; i++) { 4785 var element = elements[i]; 4786 if(ASPx.ElementHasCssClass(element, accessibleBackgroundClassName)) 4787 continue; 4788 var image = null; 4789 if(element.tagName !== "IMG") { 4790 ASPx.AddClassNameToElement(element, accessibleBackgroundClassName); 4791 image = element.ownerDocument.createElement("IMG"); 4792 ASPx.SetStyles(image, { width: "100%", height: "100%" }); 4793 if(element.firstChild) 4794 element.insertBefore(image, element.firstChild); 4795 else 4796 element.appendChild(image); 4797 } else 4798 image = element; 4799 image.src = backgroundUrl; 4800 } 4801 },
4802 createHighContrastBackgroundStyle: function() { 4803 var style = document.createElement('style'); 4804 ASPx.Attr.AppendStyleType(style); 4805 var styleContent = [ 4806 "." + this.highContrastCssClassMarker + " ." + this.highContrastBackgroundCssClassMarker + ":after {", 4807 "border-image: url(" + this.getHighContrastBackgroundUrl() + ") 0 1 0 0 round;", 4808 "}", 4809 ]; 4810 setInnerHtmlInternal(style, styleContent.join('\n')); 4811 document.getElementsByTagName('head')[0].appendChild(style); 4812 }, 4813 getHighContrastBackgroundUrl: function() { 4814 var canvas = document.createElement("canvas"), 4815 ctx = canvas.getContext('2d'); 4816 canvas.width = 1; 4817 canvas.height = 1; 4818 ctx.fillStyle = this.getHighContrastBackgroundColor(); 4819 ctx.fillRect(0, 0, canvas.width, canvas.height); 4820 return canvas.toDataURL(); 4821 }, 4822 getHighContrastBackgroundColor: function() { 4823 var foreColor = ASPx.GetCurrentStyle(document.body).color; 4824 var hexColor = ASPx.Color.ColorToHexadecimal(foreColor); 4825 return ASPx.HighContrastForeColorHighlightColorMap[hexColor] || this.highContrastDefaultBackgroundColor; 4826 }, 4827 initialize: function() { 4828 if(this.isInitialized) 4829 return; 4830 this.isInitialized = true; 4831 this.detectHighContrastTheme(); 4832 if(this.highContrastThemeActive)
4833 this.createHighContrastBackgroundStyle(); 4834 }, 4835 detectHighContrastTheme: function() { 4836 var testElement = document.createElement("DIV"); 4837 ASPx.SetStyles(testElement, { 4838 backgroundColor: "rgb(255, 255, 255)", 4839 display: "none" 4840 }, true); 4841 var docElement = document.documentElement; 4842 docElement.appendChild(testElement); 4843 var actualBackgroundColor = ASPx.GetCurrentStyle(testElement).backgroundColor; 4844 docElement.removeChild(testElement); 4845 if(actualBackgroundColor === "rgb(0, 0, 0)") { 4846 this.highContrastThemeActive = true; 4847 ASPx.AddClassNameToElement(docElement, this.highContrastCssClassMarker); 4848 } 4849 } 4850}; 4851ASPx.AccessibilityUtils = AccessibilityUtils; 4852ASPx.AccessibilityUtils.SendMessageToAssistiveTechnology = function(message) { 4853 var messageParts = ASPx.Ident.IsArray(message) ? message : [message]; 4854 var args = new ASPxClientControlBeforePronounceEventArgs(messageParts, null); 4855 ASPx.AccessibilityPronouncer.EnsureInitialize(); 4856 ASPx.AccessibilityPronouncer.Pronounce(args, ASPx.AccessibilityPronouncerType.live); 4857}; 4858ASPx.AccessibilityUtils.SetFocusAccessible = function(focusableElement) { 4859 if(!focusableElement) 4860 return; 4861 var elementId = focusableElement.id; 4862 if(!elementId) { 4863 var namedParent = ASPx.GetParent(focusableElement, function(element) { 4864 return !!element.id; 4865 }); 4866 if(ASPx.IsExists(namedParent)) 4867 elementId = namedParent.id; 4868 } 4869 var focusableControl = ASPx.GetClientControlByElementID(elementId); 4870 if(focusableControl && focusableControl.OnAssociatedLabelClick) 4871 focusableControl.OnAssociatedLabelClick(focusableElement); 4872 else 4873 window.setTimeout(function() { 4874 ASPx.AccessibilityUtils.SetFocusAccessibleCore(focusableElement); 4875 }, 0); 4876}; 4877ASPx.AccessibilityUtils.SetFocusAccessibleCore = function(focusableElement) { 4878 if(!ASPx.IsExists(focusableElement)) 4879 return; 4880 var isTabIndexChanged = ASPx.ControlTabIndexManager.getInstance().isElementWithChangedIndex(focusableElement); 4881 if(isTabIndexChanged) 4882 return; 4883 if(!ASPx.IsValidElement(focusableElement) && focusableElement.id) 4884 focusableElement = ASPx.GetElementById(focusableElement.id); 4885 if(!ASPx.IsActionElement(focusableElement)) 4886 focusableElement = ASPx.RestoreFocusHelper.findNeighbourFocusElement(focusableElement, document.body); 4887 if(ASPx.IsExistsElement(focusableElement)) 4888 focusableElement.focus(); 4889}; 4890var Security = { 4891 setInnerHtml: function(el, html, dataType) { 4892 if(!html) { 4893 while(el.firstChild) 4894 ASPx.RemoveElement(el.firstChild); 4895 } else 4896 Security.setData(html, function(d) { ASPx.SetInnerHtml.call(window, el, d); }, dataType); 4897 }, 4898 setText: function(control, text, dataType) { Security.setData(text, control.SetText.aspxBind(control), dataType); }, 4899 safeEncodeHtml: function(html) { return ASPx.Str.EncodeHtml(ASPx.Str.DecodeHtml(html)); }, 4900 setData: function(data, dataSetter, dataType) { 4901 if(dataType === undefined) 4902 throw new Error("Specify the dataType"); 4903 if(dataType == Security.DataType.Untrusted) 4904 data = Security.safeEncodeHtml(data); 4905 dataSetter(data); 4906 } 4907}; 4908Security.DataType = { 4909 Trusted: 0, 4910 Untrusted: 1 4911}; 4912ASPx.EnableCssAnimation = true; 4913var AnimationTransitionBase = ASPx.CreateClass(null, { 4914 constructor: function(element, options) { 4915 if(element) { 4916 AnimationTransitionBase.Cancel(element); 4917 this.element = element; 4918 this.element.aspxTransition = this; 4919 } 4920 this.duration = options.duration || AnimationConstants.Durations.DEFAULT; 4921 this.transition = options.transition || AnimationConstants.Transitions.SINE; 4922 this.property = options.property; 4923 this.unit = options.unit || ""; 4924 this.onComplete = options.onComplete; 4925 this.to = null; 4926 this.from = null; 4927 }, 4928 Start: function(from, to) { 4929 if(to != undefined) { 4930 this.to = to; 4931 this.from = from; 4932 this.SetValue(this.from); 4933 } 4934 else 4935 this.to = from; 4936 }, 4937 Cancel: function() { 4938 if(!this.element) 4939 return; 4940 try { 4941 delete this.element.aspxTransition; 4942 } catch(e) { 4943 this.element.aspxTransition = undefined; 4944 } 4945 }, 4946 GetValue: function() { 4947 return this.getValueInternal(this.element, this.property); 4948 }, 4949 SetValue: function(value) { 4950 this.setValueInternal(this.element, this.property, this.unit, value); 4951 }, 4952 setValueInternal: function(element, property, unit, value) { 4953 if(property == "opacity") 4954 AnimationUtils.setOpacity(element, value); 4955 else 4956 element.style[property] = value + unit; 4957 }, 4958 getValueInternal: function(element, property) { 4959 if(property == "opacity") 4960 return ASPx.GetElementOpacity(element); 4961 var value = parseFloat(element.style[property]); 4962 return isNaN(value) ? 0 : value; 4963 }, 4964 performOnComplete: function() { 4965 if(this.onComplete) 4966 this.onComplete(this.element); 4967 }, 4968 getTransition: function() { 4969 return this.transition; 4970 } 4971}); 4972AnimationTransitionBase.Cancel = function(element) { 4973 if(element.aspxTransition) 4974 element.aspxTransition.Cancel(); 4975}; 4976var AnimationConstants = {}; 4977AnimationConstants.Durations = { 4978 SHORT: 200, 4979 DEFAULT: 400, 4980 LONG: 600 4981}; 4982AnimationConstants.Transitions = { 4983 LINER: { 4984 Css: "cubic-bezier(0.250, 0.250, 0.750, 0.750)", 4985 Js: function(progress) { return progress; } 4986 }, 4987 SINE: { 4988 Css: "cubic-bezier(0.470, 0.000, 0.745, 0.715)", 4989 Js: function(progress) { return Math.sin(progress * 1.57); } 4990 }, 4991 POW: { 4992 Css: "cubic-bezier(0.755, 0.050, 0.855, 0.060)", 4993 Js: function(progress) { return Math.pow(progress, 4); } 4994 }, 4995 POW_EASE_OUT: { 4996 Css: "cubic-bezier(0.165, 0.840, 0.440, 1.000)", 4997 Js: function(progress) { return 1 - AnimationConstants.Transitions.POW.Js(1 - progress); } 4998 }, 4999 RIPPLE: { 5000 Css: "cubic-bezier(0.47, 0.06, 0.23, 0.99)", 5001 Js: function(progress) { 5002 return Math.pow((progress), 3) * 0.47 + 3 * progress * Math.pow((1 - progress), 2) * 0.06 + 3 * Math.pow(progress, 2) * 5003 (1 - progress) * 0.23 + 0.99 * Math.pow(progress, 3); 5004 } 5005 } 5006}; 5007var JsAnimationTransition = ASPx.CreateClass(AnimationTransitionBase, { 5008 constructor: function(element, options) { 5009 this.constructor.prototype.constructor.call(this, element, options); 5010 this.onStep = options.onStep; 5011 this.fps = 60; 5012 this.startTime = null; 5013 }, 5014 Start: function(from, to) { 5015 if(from == to) { 5016 this.from = this.to = from; 5017 setTimeout(this.complete.aspxBind(this), 0); 5018 } 5019 else { 5020 AnimationTransitionBase.prototype.Start.call(this, from, to); 5021 if(to == undefined) 5022 this.from = this.GetValue(); 5023 this.initTimer(); 5024 } 5025 }, 5026 Cancel: function() { 5027 AnimationTransitionBase.prototype.Cancel.call(this); 5028 if(this.timerId) 5029 clearInterval(this.timerId); 5030 }, 5031 initTimer: function() { 5032 this.startTime = new Date(); 5033 this.timerId = window.setInterval(function() { this.onTick(); }.aspxBind(this), 1000 / this.fps);
5034 }, 5035 onTick: function() { 5036 var progress = (new Date() - this.startTime) / this.duration; 5037 if(progress >= 1) 5038 this.complete(); 5039 else { 5040 this.update(progress); 5041 if(this.onStep) 5042 this.onStep(); 5043 } 5044 }, 5045 update: function(progress) { 5046 this.SetValue(this.gatCalculatedValue(this.from, this.to, progress)); 5047 }, 5048 complete: function() { 5049 this.Cancel(); 5050 this.update(1); 5051 this.performOnComplete(); 5052 }, 5053 gatCalculatedValue: function(from, to, progress) { 5054 if(progress == 1) 5055 return to; 5056 return from + (to - from) * this.getTransition()(progress); 5057 }, 5058 getTransition: function() { 5059 return this.transition.Js; 5060 } 5061}); 5062var SimpleAnimationTransition = ASPx.CreateClass(JsAnimationTransition, { 5063 constructor: function(options) { 5064 this.constructor.prototype.constructor.call(this, null, options); 5065 this.transition = options.transition || AnimationConstants.Transitions.POW_EASE_OUT; 5066 this.onUpdate = options.onUpdate; 5067 this.lastValue = 0; 5068 }, 5069 SetValue: function(value) { 5070 this.onUpdate(value - this.lastValue); 5071 this.lastValue = value; 5072 }, 5073 GetValue: function() { 5074 return this.lastValue; 5075 }, 5076 performOnComplete: function() { 5077 if(this.onComplete) 5078 this.onComplete(); 5079 } 5080}); 5081var MultipleJsAnimationTransition = ASPx.CreateClass(JsAnimationTransition, { 5082 constructor: function(element, options) { 5083 this.constructor.prototype.constructor.call(this, element, options); 5084 this.properties = {}; 5085 }, 5086 Start: function(properties) { 5087 this.initProperties(properties); 5088 this.initTimer(); 5089 }, 5090 initProperties: function(properties) { 5091 this.properties = properties; 5092 for(var propName in this.properties) 5093 if(properties[propName].from == undefined) 5094 properties[propName].from = this.getValueInternal(this.element, propName); 5095 }, 5096 update: function(progress) { 5097 for(var propName in this.properties) { 5098 if(this.properties.hasOwnProperty(propName)) { 5099 var property = this.properties[propName]; 5100 if(property.from != property.to) 5101 this.setValueInternal(this.element, propName, property.unit, this.gatCalculatedValue(property.from, property.to, progress)); 5102 } 5103 } 5104 } 5105}); 5106var CssAnimationTransition = ASPx.CreateClass(AnimationTransitionBase, { 5107 constructor: function(element, options) { 5108 this.constructor.prototype.constructor.call(this, element, options); 5109 this.transitionPropertyName = AnimationUtils.CurrentTransition.property; 5110 this.eventName = AnimationUtils.CurrentTransition.event; 5111 this.forceTransitionEndByTimer = true; 5112 this.needForceTransitionEndByTimerFlag = options.needForceTransitionEndByTimerFlag; 5113 }, 5114 Start: function(from, to) { 5115 this.forceTransitionEndByTimer = true; 5116 AnimationTransitionBase.prototype.Start.call(this, from, to); 5117 this.startTimerId = window.setTimeout(function() { 5118 if(this.from == this.to) 5119 this.onTransitionEnd(); 5120 else { 5121 var isHidden = ASPx.GetElementOffsetHeight(this.element) == 0 && ASPx.GetElementOffsetWidth(this.element) == 0; 5122 if(!isHidden) 5123 this.prepareElementBeforeAnimation(); 5124 this.SetValue(this.to); 5125 if(isHidden) 5126 this.onTransitionEnd(); 5127 } 5128 }.aspxBind(this), 0); 5129 }, 5130 Cancel: function() { 5131 this.forceTransitionEndByTimer = false; 5132 window.clearTimeout(this.startTimerId); 5133 AnimationTransitionBase.prototype.Cancel.call(this); 5134 ASPx.Evt.DetachEventFromElement(this.element, this.eventName, CssAnimationTransition.transitionEnd); 5135 this.setValueInternal(this.element, this.transitionPropertyName, "", ""); 5136 this.stopAnimation(); 5137 }, 5138 prepareElementBeforeAnimation: function() { 5139 ASPx.Evt.AttachEventToElement(this.element, this.eventName, CssAnimationTransition.transitionEnd); 5140 var dummy = this.element.offsetHeight; 5141 this.element.style[this.transitionPropertyName] = this.getTransitionCssString(); 5142 if(this.needForceTransitionEndByTimer()) { 5143 setTimeout(function() { 5144 if(this.forceTransitionEndByTimer && this.element && this.element.aspxTransition) { 5145 this.element.style[this.transitionPropertyName] = ""; 5146 this.element.aspxTransition.onTransitionEnd(); 5147 } 5148 }.aspxBind(this), this.duration + 100); 5149 } 5150 }, 5151 needForceTransitionEndByTimer: function() { 5152 if(this.needForceTransitionEndByTimerFlag) 5153 return true; 5154 if(ASPx.Browser.Safari && ASPx.Browser.MacOSMobilePlatform && ASPx.Browser.MajorVersion >= 8) 5155 return true; 5156 return ASPx.Browser.AndroidMobilePlatform; 5157 }, 5158 stopAnimation: function() { 5159 this.SetValue(ASPx.GetCurrentStyle(this.element)[this.property]); 5160 }, 5161 onTransitionEnd: function() { 5162 this.Cancel(); 5163 this.performOnComplete(); 5164 }, 5165 getTransition: function() { 5166 return this.transition.Css; 5167 }, 5168 getTransitionCssString: function() { 5169 return this.getTransitionCssStringInternal(this.getCssName(this.property)); 5170 }, 5171 getTransitionCssStringInternal: function(cssProperty) { 5172 return cssProperty + " " + this.duration + "ms " + this.getTransition(); 5173 }, 5174 getCssName: function(property) { 5175 switch(property) { 5176 case "marginLeft": 5177 return "margin-left"; 5178 case "marginTop": 5179 return "margin-top"; 5180 } 5181 return property; 5182 } 5183}); 5184var MultipleCssAnimationTransition = ASPx.CreateClass(CssAnimationTransition, { 5185 constructor: function(element, options) { 5186 this.constructor.prototype.constructor.call(this, element, options); 5187 this.properties = null; 5188 }, 5189 Start: function(properties) { 5190 this.properties = properties; 5191 this.forEachProperties(function(property, propName) { 5192 if(property.from !== undefined) 5193 this.setValueInternal(this.element, propName, property.unit, property.from); 5194 }.aspxBind(this)); 5195 this.prepareElementBeforeAnimation(); 5196 window.setTimeout(function() { 5197 this.forEachProperties(function(property, propName) { 5198 this.setValueInternal(this.element, propName, property.unit, property.to);
5199 }.aspxBind(this)); 5200 }.aspxBind(this), 0); 5201 }, 5202 stopAnimation: function() { 5203 var style = ASPx.GetCurrentStyle(this.element); 5204 this.forEachProperties(function(property, propName) { 5205 this.setValueInternal(this.element, propName, "", style[propName]); 5206 }.aspxBind(this)); 5207 }, 5208 getTransitionCssString: function() { 5209 var str = ""; 5210 this.forEachProperties(function(property, propName) { 5211 str += this.getTransitionCssStringInternal(this.getCssName(propName)) + ","; 5212 }.aspxBind(this)); 5213 str = str.substring(0, str.length - 1); 5214 return str; 5215 }, 5216 forEachProperties: function(func) { 5217 for(var propName in this.properties) { 5218 if(this.properties.hasOwnProperty(propName)) { 5219 var property = this.properties[propName]; 5220 if(property.from == undefined) 5221 property.from = this.getValueInternal(this.element, propName); 5222 if(property.from != property.to) 5223 func(property, propName); 5224 } 5225 } 5226 } 5227}); 5228CssAnimationTransition.transitionEnd = function(evt) { 5229 var element = evt.target; 5230 if(element && element.aspxTransition) 5231 element.aspxTransition.onTransitionEnd(); 5232}; 5233var AnimationUtils = { 5234 CanUseCssTransition: function() { return ASPx.EnableCssAnimation && this.CurrentTransition; }, 5235 CanUseCssTransform: function() { return this.CanUseCssTransition() && this.CurrentTransform; }, 5236 CurrentTransition: (function() { 5237 var transitions = [ 5238 { property: "webkitTransition", event: "webkitTransitionEnd" }, 5239 { property: "MozTransition", event: "transitionend" }, 5240 { property: "OTransition", event: "oTransitionEnd" }, 5241 { property: "transition", event: "transitionend" } 5242 ]; 5243 var fakeElement = document.createElement("DIV"); 5244 for(var i = 0; i < transitions.length; i++) 5245 if(transitions[i].property in fakeElement.style) 5246 return transitions[i]; 5247 })(), 5248 CurrentTransform: (function() { 5249 var transforms = ["transform", "MozTransform", "-webkit-transform", "msTransform", "OTransform"]; 5250 var fakeElement = document.createElement("DIV"); 5251 for(var i = 0; i < transforms.length; i++) 5252 if(transforms[i] in fakeElement.style) 5253 return transforms[i]; 5254 })(), 5255 SetTransformValue: function(element, position, isTop) { 5256 if(this.CanUseCssTransform()) 5257 element.style[this.CurrentTransform] = this.GetTransformCssText(position, isTop); 5258 else 5259 element.style[!isTop ? "left" : "top"] = position + "px"; 5260 }, 5261 GetTransformValue: function(element, isTop) { 5262 if(this.CanUseCssTransform()) { 5263 var cssValue = element.style[this.CurrentTransform]; 5264 return cssValue && cssValue != "none" ? Number(cssValue.replace('matrix(1, 0, 0, 1,', '').replace(')', '').split(',')[!isTop ? 0 : 1]) : 0; 5265 } 5266 else 5267 return !isTop ? element.offsetLeft : element.offsetTop; 5268 }, 5269 GetTransformCssText: function(position, isTop) { 5270 if(!position) 5271 return "none"; 5272 return "matrix(1, 0, 0, 1," + (!isTop ? position : 0) + ", " + (!isTop ? 0 : position) + ")"; 5273 }, 5274 createMultipleAnimationTransition: function (element, options) { 5275 return this.CanUseCssTransition() && !options.onStep ? new MultipleCssAnimationTransition(element, options) : new MultipleJsAnimationTransition(element, options); 5276 }, 5277 createSimpleAnimationTransition: function(options) { 5278 return new SimpleAnimationTransition(options); 5279 }, 5280 createJsAnimationTransition: function(element, options) { 5281 return new JsAnimationTransition(element, options); 5282 }, 5283 createCssAnimationTransition: function(element, options) { 5284 return new CssAnimationTransition(element, options); 5285 }, 5286 setOpacity: function(element, value) { 5287 ASPx.SetElementOpacity(element, value); 5288 } 5289}; 5290var AsyncTracker = function() { 5291 var currentToken, 5292 lockedTokens, 5293 onDoneDelegates, 5294 lockedDelegates; 5295 function clearState() { 5296 currentToken = 1; 5297 lockedTokens = []; 5298 onDoneDelegates = []; 5299 lockedDelegates = {}; 5300 } 5301 clearState(); 5302 var log = function(msg) { }; 5303 function setLog(delegate){ 5304 log = delegate; 5305 } 5306 function getLockToken() { 5307 if(onDoneDelegates.length === 0) 5308 return -1; 5309 var token = currentToken++; 5310 lockedTokens.push(token); 5311 lockedDelegates[token] = []; 5312 for (var i = 0; i < onDoneDelegates.length; i++) { 5313 lockedDelegates[token].push(onDoneDelegates[i]); 5314 } 5315 log("module locks token " + token); 5316 return token; 5317 } 5318 function releaseToken(token) { 5319 if(token < 0) return; 5320 log("module releasing token " + token); 5321 ASPx.Data.ArrayRemove(lockedTokens, token); 5322 delete lockedDelegates[token]; 5323 invokeUnlockedDelegates(); 5324 if(lockedTokens.length === 0) 5325 clearState(); 5326 log("module released token " + token); 5327 } 5328 function invokeUnlockedDelegates() { 5329 var onDoneDelegate; 5330 for (var i = onDoneDelegates.length - 1; i >= 0; i--) { 5331 if(onDoneDelegates[i] && !isDelegateLocked(onDoneDelegates[i])) { 5332 onDoneDelegate = onDoneDelegates[i]; 5333 delete onDoneDelegates[i]; 5334 onDoneDelegate(); 5335 } 5336 } 5337 } 5338 function isDelegateLocked(delegate) { 5339 for (var i = lockedTokens.length - 1; i >= 0; i--) { 5340 var token = lockedTokens[i]; 5341 var delegates = lockedDelegates[token]; 5342 if(delegates) { 5343 for (var j = delegates.length - 1; j >= 0; j--) { 5344 if(delegates[j] && delegates[j] === delegate) 5345 return true; 5346 } 5347 } 5348 } 5349 return false; 5350 } 5351 function track(doDelegate, onDoneDelegate) { 5352 if(onDoneDelegate) 5353 onDoneDelegates.push(onDoneDelegate); 5354 doDelegate(); 5355 if(onDoneDelegate) 5356 invokeUnlockedDelegates(); 5357 } 5358 return { 5359 getLockToken: getLockToken, 5360 releaseToken: releaseToken, 5361 track: track, 5362 setLog:setLog, 5363 }; 5364}; 5365var GetEditorValuesInContainer = function(containerOrId, processInvisibleEditors, needSerialize) { 5366 var container = typeof(containerOrId) === "string" ? ASPx.GetElementById(containerOrId) : containerOrId;
5367 var result = {}; 5368 if(!ASPx.ProcessEditorsInContainer) 5369 return result; 5370 ASPx.ProcessEditorsInContainer(container, function(editor){ 5371 result[editor.name] = GetCorrectedByTypeValue(ASPx.GetEditorValueByControl(editor), needSerialize); 5372 return true; 5373 }, null, null, processInvisibleEditors, false); 5374 return result; 5375}; 5376var SetEditorValues = function(values) { 5377 for(var controlName in values) { 5378 if(values.hasOwnProperty(controlName)) { 5379 var trackedControl = ASPxClientControl.GetControlCollection().Get(controlName); 5380 if(!trackedControl) 5381 continue; 5382 var setValueMethod = trackedControl.SetTokenCollection || trackedControl.SelectValues || trackedControl.SetValue; 5383 if(setValueMethod === trackedControl.SelectValues) 5384 trackedControl.UnselectAll(); 5385 setValueMethod.call(trackedControl, values[controlName]); 5386 } 5387 } 5388}; 5389var GetCorrectedByTypeValue = function(value, needSerialize){ 5390 if(ASPx.Ident.IsArray(value)) 5391 for(var i = 0; i < value.length; i++) 5392 value[i] = GetCorrectedByTypeValue(value[i]); 5393 if(needSerialize && ASPx.Ident.IsDate(value)) 5394 return ASPx.DateUtils.GetInvariantDateTimeString(value); 5395 return value; 5396}; 5397var ListBoxTemporaryCache = ASPx.CreateClass(null, { 5398 constructor: function() { 5399 this.cache = { }; 5400 this.invalidateTimerID = -1; 5401 }, 5402 Get: function(key, getObjectFunc, context, args) { 5403 if(this.invalidateTimerID < 0) { 5404 this.invalidateTimerID = window.setTimeout(function() { 5405 this.Invalidate(); 5406 }.aspxBind(this), 0); 5407 } 5408 if(!ASPx.IsExists(this.cache[key])) { 5409 if(!ASPx.IsExists(args)) 5410 args = [ ]; 5411 this.cache[key] = getObjectFunc.apply(context, args); 5412 } 5413 return this.cache[key]; 5414 }, 5415 Invalidate: function() { 5416 this.cache = { }; 5417 this.invalidateTimerID = ASPx.Timer.ClearTimer(this.invalidateTimerID); 5418 } 5419}); 5420ASPx.GetEditorValueByControl = function(control, needSerialize) { 5421 var result; 5422 if(ASPx.IsMultipleValueOwner(control)) 5423 result = control.GetSelectedValues(); 5424 if(ASPx.IsTokenBox(control)) { 5425 if(needSerialize) 5426 result = control.GetTokenValuesCollection(); 5427 else 5428 result = control.GetTokenCollection(); 5429 } 5430 if(ASPx.IsDropDownEdit(control)) 5431 result = control.GetKeyValue(); 5432 if(ASPx.IsHtmlEditor(control)) 5433 result = control.GetHtml(); 5434 return result || control.GetValue(); 5435}; 5436ASPx.IsMultipleValueOwner = function(control) { 5437 return ASPx.IsListBox(control) || ASPx.IsCheckBoxList(control); 5438}; 5439ASPx.IsCheckBoxList = function(control) { 5440 return control && typeof(ASPxClientCheckBoxList) != "undefined" && control instanceof ASPxClientCheckBoxList; 5441 }; 5442ASPx.IsCheckBox = function(control) { 5443 return control && typeof (ASPxClientCheckBox) != "undefined" && control instanceof ASPxClientCheckBox; 5444}; 5445ASPx.IsListBox = function(control) { 5446 return control && typeof(ASPxClientListBox) != "undefined" && control instanceof ASPxClientListBox; 5447}; 5448ASPx.IsComboBox = function(control) { 5449 return control && typeof(ASPxClientComboBox) != "undefined" && control instanceof ASPxClientComboBox; 5450}; 5451ASPx.IsTokenBox = function(control) { 5452 return control && typeof(ASPxClientTokenBox) != "undefined" && control instanceof ASPxClientTokenBox; 5453}; 5454ASPx.IsDropDownEdit = function(control) { 5455 return control && typeof (ASPxClientDropDownEdit) != "undefined" && control instanceof ASPxClientDropDownEdit; 5456}; 5457ASPx.IsGridLookup = function(control) { 5458 return control && typeof(MVCxClientGridLookup) != "undefined" && control instanceof MVCxClientGridLookup; 5459}; 5460ASPx.IsSpinEdit = function(control) { 5461 return control && typeof(ASPxClientSpinEdit) != "undefined" && control instanceof ASPxClientSpinEdit; 5462}; 5463ASPx.IsHtmlEditor = function(control) { 5464 return control && typeof (ASPxClientHtmlEditor) != "undefined" && control instanceof ASPxClientHtmlEditor; 5465}; 5466ASPx.DatePickerType = { 5467 Days: 0, 5468 Months: 1, 5469 Years: 2, 5470 Decades: 3 5471}; 5472ASPx.FullScreenUtils = { 5473 subscribeChange: function(handler) { 5474 Evt.AttachEventToElement(document, "fullscreenchange", handler); 5475 Evt.AttachEventToElement(document, "msfullscreenchange", handler); 5476 Evt.AttachEventToElement(document, "MSFullscreenChange", handler); 5477 Evt.AttachEventToElement(document, "webkitfullscreenchange", handler); 5478 Evt.AttachEventToElement(document, "mozfullscreenchange", handler); 5479 }, 5480 unsubscribeChange: function(handler) { 5481 Evt.DetachEventFromElement(document, "fullscreenchange", handler); 5482 Evt.DetachEventFromElement(document, "msfullscreenchange", handler); 5483 Evt.DetachEventFromElement(document, "MSFullscreenChange", handler); 5484 Evt.DetachEventFromElement(document, "webkitfullscreenchange", handler); 5485 Evt.DetachEventFromElement(document, "mozfullscreenchange", handler); 5486 }, 5487 setFullscreen: function(on) { 5488 var element = window.self.document.body; 5489 if(on) { 5490 if(element.requestFullscreen) { 5491 element.requestFullscreen(); 5492 } else if(element.mozRequestFullScreen) { 5493 element.mozRequestFullScreen(); 5494 } else if(element.webkitRequestFullscreen) { 5495 element.webkitRequestFullscreen(); 5496 } else if(element.msRequestFullscreen) { 5497 element.msRequestFullscreen(); 5498 } 5499 } else { 5500 if(document.exitFullscreen) { 5501 document.exitFullscreen(); 5502 } else if(document.mozCancelFullScreen) { 5503 document.mozCancelFullScreen(); 5504 } else if(document.webkitCancelFullScreen) { 5505 document.webkitCancelFullScreen(); 5506 } else if(document.msExitFullscreen) { 5507 document.msExitFullscreen(); 5508 } 5509 } 5510 }, 5511 inFullscreen: function() { 5512 var fullscreenElement = document.fullscreenElement || document.msFullscreenElement || document.webkitFullscreenElement; 5513 var isInFullscreen = fullscreenElement === document.body || document.webkitIsFullScreen;
5514 return !!isInFullscreen; 5515 } 5516 }; 5517ASPx.InitializeSVGSprite = function () { 5518 if (ASPx.SVGSprites && ASPx.SVGSprites.length > 0) { 5519 var svgContainer = document.getElementById('svgContainer'); 5520 var hasSvgContainer = !!svgContainer; 5521 if (!hasSvgContainer) { 5522 svgContainer = document.createElement('div'); 5523 svgContainer.id = 'svgContainer'; 5524 svgContainer.style.display = "none"; 5525 document.body.appendChild(svgContainer); 5526 } 5527 for (var i = 0; i < ASPx.SVGSprites.length; i++) { 5528 svgContainer.innerHTML += ASPx.SVGSprites[i]; 5529 } 5530 ASPx.SVGSprites = null; 5531 } 5532}; 5533var GridDynamicStyleSheetHelper = ASPx.CreateClass(null, { 5534 constructor: function() { 5535 this.styleSheet = {}; 5536 this.rules = {}; 5537 this.updateLock = 0; 5538 }, 5539 Update: function(control, styleName, rules) { 5540 var key = control.name + "_" + styleName; 5541 this.BeginUpdate(key); 5542 this.ChangeRules(key, rules); 5543 this.EndUpdate(key); 5544 }, 5545 ChangeRules: function(key, rules) { 5546 if(key && rules) 5547 this.rules[key] = rules; 5548 }, 5549 BeginUpdate: function(key) { 5550 this.updateLock++; 5551 this.RemoveStyleSheetElement(key); 5552 }, 5553 EndUpdate: function(key) { 5554 this.updateLock--; 5555 if(this.updateLock !== 0) 5556 return; 5557 var styleArgs = []; 5558 var controlRules = this.rules[key]; 5559 for(var i = 0; i < controlRules.length; i++) { 5560 var rule = controlRules[i]; 5561 styleArgs.push(rule.selector + " { " + rule.cssText + " } "); 5562 } 5563 this.styleSheet[key] = this.CreateStyleSheet(key, styleArgs.join("")); 5564 }, 5565 CreateStyleSheet: function(key, cssText) { 5566 var container = document.createElement("DIV"); 5567 ASPx.Security.setInnerHtml(container, "<style type='text/css' id='" + key + "'>" + cssText + "</style>", ASPx.Security.DataType.Trusted); 5568 styleSheet = ASPx.GetNodeByTagName(container, "style", 0); 5569 if(styleSheet) 5570 ASPx.GetNodeByTagName(document, "HEAD", 0).appendChild(styleSheet); 5571 return styleSheet; 5572 }, 5573 ClearStyleSheet: function(control, styleName) { 5574 var key = control.name + "_" + styleName; 5575 this.RemoveStyleSheetElement(key); 5576 }, 5577 RemoveStyleSheetElement: function(key) { 5578 if(this.styleSheet[key]) { 5579 ASPx.RemoveElement(this.styleSheet[key]); 5580 delete this.styleSheet[key]; 5581 } 5582 } 5583}); 5584GridDynamicStyleSheetHelper.Instance = new GridDynamicStyleSheetHelper(); 5585ASPx.GridDynamicStyleSheetHelper = GridDynamicStyleSheetHelper; 5586ASPxClientUtils = {}; 5587ASPxClientUtils.agent = Browser.UserAgent; 5588ASPxClientUtils.opera = Browser.Opera; 5589ASPxClientUtils.opera9 = Browser.Opera && Browser.MajorVersion == 9; 5590ASPxClientUtils.safari = Browser.Safari; 5591ASPxClientUtils.safari3 = Browser.Safari && Browser.MajorVersion == 3; 5592ASPxClientUtils.safariMacOS = Browser.Safari && Browser.MacOSPlatform; 5593ASPxClientUtils.chrome = Browser.Chrome; 5594ASPxClientUtils.ie = Browser.IE; 5595ASPxClientUtils.ie7 = Browser.IE && Browser.MajorVersion == 7; 5596ASPxClientUtils.firefox = Browser.Firefox; 5597ASPxClientUtils.firefox3 = Browser.Firefox && Browser.MajorVersion == 3; 5598ASPxClientUtils.mozilla = Browser.Mozilla; 5599ASPxClientUtils.netscape = Browser.Netscape; 5600ASPxClientUtils.browserVersion = Browser.Version; 5601ASPxClientUtils.browserMajorVersion = Browser.MajorVersion; 5602ASPxClientUtils.macOSPlatform = Browser.MacOSPlatform; 5603ASPxClientUtils.windowsPlatform = Browser.WindowsPlatform; 5604ASPxClientUtils.webKitFamily = Browser.WebKitFamily; 5605ASPxClientUtils.netscapeFamily = Browser.NetscapeFamily; 5606ASPxClientUtils.touchUI = Browser.TouchUI; 5607ASPxClientUtils.webKitTouchUI = Browser.WebKitTouchUI; 5608ASPxClientUtils.msTouchUI = Browser.MSTouchUI; 5609ASPxClientUtils.iOSPlatform = Browser.MacOSMobilePlatform; 5610ASPxClientUtils.androidPlatform = Browser.AndroidMobilePlatform; 5611ASPxClientUtils.ArrayInsert = Data.ArrayInsert; 5612ASPxClientUtils.ArrayRemove = Data.ArrayRemove; 5613ASPxClientUtils.ArrayRemoveAt = Data.ArrayRemoveAt; 5614ASPxClientUtils.ArrayClear = Data.ArrayClear; 5615ASPxClientUtils.ArrayIndexOf = Data.ArrayIndexOf; 5616ASPxClientUtils.AttachEventToElement = Evt.AttachEventToElement; 5617ASPxClientUtils.DetachEventFromElement = Evt.DetachEventFromElement; 5618ASPxClientUtils.GetEventSource = Evt.GetEventSource; 5619ASPxClientUtils.GetEventX = Evt.GetEventX; 5620ASPxClientUtils.GetEventY = Evt.GetEventY; 5621ASPxClientUtils.GetKeyCode = Evt.GetKeyCode; 5622ASPxClientUtils.PreventEvent = Evt.PreventEvent; 5623ASPxClientUtils.PreventEventAndBubble = Evt.PreventEventAndBubble; 5624ASPxClientUtils.PreventDragStart = Evt.PreventDragStart; 5625ASPxClientUtils.ClearSelection = Selection.Clear; 5626ASPxClientUtils.IsExists = ASPx.IsExists; 5627ASPxClientUtils.IsFunction = ASPx.IsFunction; 5628ASPxClientUtils.GetAbsoluteX = ASPx.GetAbsoluteX; 5629ASPxClientUtils.GetAbsoluteY = ASPx.GetAbsoluteY; 5630ASPxClientUtils.SetAbsoluteX = ASPx.SetAbsoluteX; 5631ASPxClientUtils.SetAbsoluteY = ASPx.SetAbsoluteY; 5632ASPxClientUtils.GetDocumentScrollTop = ASPx.GetDocumentScrollTop; 5633ASPxClientUtils.GetDocumentScrollLeft = ASPx.GetDocumentScrollLeft; 5634ASPxClientUtils.GetDocumentClientWidth = ASPx.GetDocumentClientWidth; 5635ASPxClientUtils.GetDocumentClientHeight = ASPx.GetDocumentClientHeight; 5636ASPxClientUtils.AddClassNameToElement = ASPx.AddClassNameToElement; 5637ASPxClientUtils.RemoveClassNameFromElement = ASPx.RemoveClassNameFromElement; 5638ASPxClientUtils.ToggleClassName = ASPx.ToggleClassNameToElement; 5639ASPxClientUtils.GetIsParent = ASPx.GetIsParent; 5640ASPxClientUtils.GetParentById = ASPx.GetParentById; 5641ASPxClientUtils.GetParentByTagName = ASPx.GetParentByTagName; 5642ASPxClientUtils.GetParentByClassName = ASPx.GetParentByPartialClassName; 5643ASPxClientUtils.GetChildById = ASPx.GetChildById; 5644ASPxClientUtils.GetChildByTagName = ASPx.GetChildByTagName; 5645ASPxClientUtils.SetCookie = Cookie.SetCookie;
5646ASPxClientUtils.GetCookie = Cookie.GetCookie; 5647ASPxClientUtils.DeleteCookie = Cookie.DelCookie; 5648ASPxClientUtils.GetShortcutCode = ASPx.GetShortcutCode; 5649ASPxClientUtils.GetShortcutCodeByEvent = ASPx.GetShortcutCodeByEvent; 5650ASPxClientUtils.StringToShortcutCode = ASPx.ParseShortcutString; 5651ASPxClientUtils.Trim = Str.Trim; 5652ASPxClientUtils.TrimStart = Str.TrimStart; 5653ASPxClientUtils.TrimEnd = Str.TrimEnd; 5654ASPxClientUtils.GetEditorValuesInContainer = GetEditorValuesInContainer; 5655ASPxClientUtils.SetEditorValues = SetEditorValues; 5656ASPxClientUtils.SendMessageToAssistiveTechnology = ASPx.AccessibilityUtils.SendMessageToAssistiveTechnology; 5657window.ASPxClientUtils = ASPxClientUtils; 5658window.ListBoxTemporaryCache = ListBoxTemporaryCache; 5659ASPx.AnimationUtils = AnimationUtils; 5660ASPx.AnimationTransitionBase = AnimationTransitionBase; 5661ASPx.AnimationConstants = AnimationConstants; 5662ASPx.AsyncTracker = AsyncTracker; 5663ASPx.Security = Security; 5664})(ASPx, dx); 5665
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.