1var ASPx = {}, dx = {}; 2(function () { 3ASPx.EmptyObject = { }; 4ASPx.FalseFunction = function() { return false; } 5ASPx.SSLSecureBlankUrl = '/DXR.axd?r=1_0-vOJRv'; 6ASPx.EmptyImageUrl = '/DXR.axd?r=1_35-vOJRv'; 7ASPx.VersionInfo = 'Version=\'16.2.7.0\', File Version=\'16.2.7.0\', Date Modified=\'25-11-2025 14:14:28\''; 8ASPx.InvalidDimension = -10000; 9ASPx.InvalidPosition = -10000; 10ASPx.AbsoluteLeftPosition = -10000; 11ASPx.EmptyGuid = "00000000-0000-0000-0000-000000000000"; 12ASPx.CallbackSeparator = ":"; 13ASPx.ItemIndexSeparator = "i"; 14ASPx.CallbackResultPrefix = "/*DX*/"; 15ASPx.AccessibilityEmptyUrl = "javascript:;"; 16ASPx.AccessibilityPronounceTimeout = 500; 17ASPx.PossibleNumberDecimalSeparators = [",", "."]; 18ASPx.CultureInfo = { 19 twoDigitYearMax: 2029, 20 ts: ":", 21 ds: "/", 22 am: "AM", 23 pm: "PM", 24 monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", ""], 25 genMonthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "
25November", "December", ""], 26 abbrMonthNames: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", ""], 27 abbrDayNames: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], 28 dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], 29 numDecimalPoint: ".", 30 numPrec: 2, 31 numGroupSeparator: ",", 32 numGroups: [ 3 ], 33 numNegPattern: 1, 34 numPosInf: "Infinity", 35 numNegInf: "-Infinity", 36 numNan: "NaN", 37 currency: "$", 38 currDecimalPoint: ".", 39 currPrec: 2, 40 currGroupSeparator: ",", 41 currGroups: [ 3 ], 42 currPosPattern: 0, 43 currNegPattern: 0, 44 percentPattern: 0, 45 shortTime: "h:mm tt", 46 longTime: "h:mm:ss tt", 47 shortDate: "M/d/yyyy", 48 longDate: "dddd, MMMM d, yyyy", 49 monthDay: "MMMM d", 50 yearMonth: "MMMM yyyy" 51}; 52ASPx.CultureInfo.genMonthNames = ASPx.CultureInfo.monthNames; 53ASPx.Position = { 54 Left: "Left", 55 Right: "Right", 56 Top: "Top", 57 Bottom: "Bottom" 58}; 59var DateUtils = { }; 60DateUtils.GetInvariantDateString = function(date) { 61 if(!date) 62 return "01/01/0001"; 63 var day = date.getDate(); 64 var month = date.getMonth() + 1; 65 var year = date.getFullYear(); 66 var result = ""; 67 if(month < 10) 68 result += "0"; 69 result += month.toString() + "/"; 70 if(day < 10) 71 result += "0"; 72 result += day.toString() + "/"; 73 if(year < 1000) 74 result += "0"; 75 result += year.toString(); 76 return result; 77} 78DateUtils.GetInvariantDateTimeString = function(date) { 79 var dateTimeString = DateUtils.GetInvariantDateString(date); 80 var time = { 81 h: date.getHours(), 82 m: date.getMinutes(), 83 s: date.getSeconds() 84 }; 85 for(var key in time) { 86 var str = time[key].toString(); 87 if(str.length < 2) 88 str = "0" + str; 89 time[key] = str; 90 } 91 dateTimeString += " " + time.h + ":" + time.m + ":" + time.s; 92 var msec = date.getMilliseconds(); 93 if(msec > 0) 94 dateTimeString += "." + ("000" + msec.toString()).substr(-3); 95 return dateTimeString; 96} 97DateUtils.ExpandTwoDigitYear = function(value) { 98 value += 1900; 99 if(value + 99 < ASPx.CultureInfo.twoDigitYearMax) 100 value += 100; 101 return value; 102} 103DateUtils.ToUtcTime = function(date) { 104 var result = new Date(); 105 result.setTime(date.valueOf() + 60000 * date.getTimezoneOffset()); 106 return result; 107} 108DateUtils.ToLocalTime = function(date) { 109 var result = new Date(); 110 result.setTime(date.valueOf() - 60000 * date.getTimezoneOffset()); 111 return result; 112} 113DateUtils.AreDatesEqualExact = function(date1, date2) { 114 if(date1 == null && date2 == null) 115 return true; 116 if(date1 == null || date2 == null) 117 return false; 118 return date1.getTime() == date2.getTime(); 119} 120DateUtils.FixTimezoneGap = function(oldDate, newDate) { 121 var diff = newDate.getHours() - oldDate.getHours(); 122 if(diff == 0) 123 return; 124 var sign = (diff == 1 || diff == -23) ? -1 : 1; 125 var trial = new Date(newDate.getTime() + sign * 3600000); 126 var isDateChangedAsExpected = newDate.getHours() - trial.getHours() === diff; 127 if(isDateChangedAsExpected && (sign > 0 || trial.getDate() == newDate.getDate())) 128 newDate.setTime(trial.getTime()); 129} 130ASPx.DateUtils = DateUtils; 131var Timer = { }; 132Timer.ClearTimer = function(timerID){ 133 if(timerID > -1) 134 window.clearTimeout(timerID); 135 return -1; 136} 137Timer.ClearInterval = function(timerID){ 138 if(timerID > -1) 139 window.clearInterval(timerID); 140 return -1; 141} 142var setControlBoundTimer = function(handler, control, setTimerFunction, clearTimerFunction, delay) { 143 var timerId; 144 var getTimerId = function() { return timerId }; 145 var boundHandler = function() { 146 var controlExists = control && ASPx.GetControlCollection().Get(control.name) === control; 147 if(controlExists) 148 handler.aspxBind(control)(); 149 else 150 clearTimerFunction(getTimerId()); 151 } 152 timerId = setTimerFunction(boundHandler, delay); 153 return timerId; 154} 155Timer.SetControlBoundTimeout = function(handler, control, delay) { 156 return setControlBoundTimer(handler, control, window.setTimeout, Timer.ClearTimer, delay); 157} 158Timer.SetControlBoundInterval = function(handler, control, delay) { 159 return setControlBoundTimer(handler, control, window.setInterval, Timer.ClearInterval, delay); 160} 161Timer.Throttle = function(func, delay) { 162 var isThrottled = false, 163 savedArgs, 164 savedThis = this; 165 function wrapper() { 166 if(isThrottled) { 167 savedArgs = arguments; 168 savedThis = this; 169 return; 170 } 171 func.apply(this, arguments); 172 isThrottled = true; 173 setTimeout(function() { 174 isThrottled = false; 175 if(savedArgs) { 176 wrapper.apply(savedThis, savedArgs); 177 savedArgs = null; 178 } 179 }, delay); 180 } 181 wrapper.cancel = function() { 182 clearTimeout(delay); 183 delay = savedArgs = savedThis = null; 184 }; 185 return wrapper; 186} 187ASPx.Timer = Timer; 188var Browser = { }; 189Browser.UserAgent = navigator.userAgent.toLowerCase(); 190Browser.Mozilla = false; 191Browser.IE = false; 192Browser.Firefox = false; 193Browser.Netscape = false; 194Browser.Safari = false; 195Browser.Chrome = false; 196Browser.Opera = false; 197Browser.Edge = false; 198Browser.Version = undefined; 199Browser.MajorVersion = undefined; 200Browser.WindowsPlatform = false; 201Browser.MacOSPlatform = false; 202Browser.MacOSMobilePlatform = false; 203Browser.AndroidMobilePlatform = false; 204Browser.PlaformMajorVersion = false; 205Browser.WindowsPhonePlatform = false; 206Browser.AndroidDefaultBrowser = false; 207Browser.AndroidChromeBrowser = false; 208Browser.SamsungAndroidDevice = false; 209Browser.WebKitTouchUI = false; 210Browser.MSTouchUI = false; 211Browser.TouchUI = false; 212Browser.WebKitFamily = false; 213Browser.NetscapeFamily = false; 214Browser.HardwareAcceleration = false; 215Browser.VirtualKeyboardSupported = false; 216Browser.Info = ""; 217function indentPlatformMajorVersion(userAgent) { 218 var regex = /(?:(?:windows nt|macintosh|mac os|cpu os|cpu iphone os|android|windows phone|linux) )(\d+)(?:[-0-9_.])*/; 219 var matches = regex.exec(userAgent); 220 if(matches) 221 Browser.PlaformMajorVersion = matches[1]; 222} 223function getIECompatibleVersionString() { 224 if(document.compatible) { 225 for(var i = 0; i < document.compatible.length; i++) 226 if(document.compatible[i].userAgent === "IE" && document.compatible[i].version) 227 return document.compatible[i].version.toLowerCase(); 228 } 229 return ""; 230} 231Browser.IdentUserAgent = function(userAgent, ignoreDocumentMode) { 232 var browserTypesOrderedList = [ "Mozilla", "IE", "Firefox", "Netscape", "Safari", "Chrome", "Opera", "Opera10", "Edge" ]; 233 var defaultBrowserType = "IE"; 234 var defaultPlatform = "Win"; 235 var defaultVersions = { Safari: 2, Chrome: 0.1, Mozilla: 1.9, Net
235scape: 8, Firefox: 2, Opera: 9, IE: 6, Edge: 12 }; 236 if(!userAgent || userAgent.length == 0) { 237 fillUserAgentInfo(browserTypesOrderedList, defaultBrowserType, defaultVersions[defaultBrowserType], defaultPlatform); 238 return; 239 } 240 userAgent = userAgent.toLowerCase(); 241 indentPlatformMajorVersion(userAgent); 242 try { 243 var platformIdentStrings = { 244 "Windows": "Win", 245 "Macintosh": "Mac", 246 "Mac OS": "Mac", 247 "Mac_PowerPC": "Mac", 248 "cpu os": "MacMobile", 249 "cpu iphone os": "MacMobile", 250 "Android": "Android", 251 "!Windows Phone": "WinPhone", 252 "!WPDesktop": "WinPhone", 253 "!ZuneWP": "WinPhone" 254 }; 255 var optSlashOrSpace = "(?:/|\\s*)?"; 256 var version = "(\\d+)(?:\\.((?:\\d+?[1-9])|\\d)0*?)?"; 257 var optVersion = "(?:" + version + ")?"; 258 var patterns = { 259 Safari: "applewebkit(?:.*?(?:version/" + version + "[\\.\\w\\d]*?(?:\\s+mobile\/\\S*)?\\s+safari))?", 260 Chrome: "(?:chrome|crios)(?!frame)" + optSlashOrSpace + optVersion, 261 Mozilla: "mozilla(?:.*rv:" + optVersion + ".*Gecko)?", 262 Netscape: "(?:netscape|navigator)\\d*/?\\s*" + optVersion, 263 Firefox: "firefox" + optSlashOrSpace + optVersion, 264 Opera: "(?:opera|opr)" + optSlashOrSpace + optVersion, 265 Opera10: "opera.*\\s*version" + optSlashOrSpace + optVersion, 266 IE: "msie\\s*" + optVersion, 267 Edge: "edge" + optSlashOrSpace + optVersion 268 }; 269 var browserType; 270 var version = -1; 271 for(var i = 0; i < browserTypesOrderedList.length; i++) { 272 var browserTypeCandidate = browserTypesOrderedList[i]; 273 var regExp = new RegExp(patterns[browserTypeCandidate], "i"); 274 if(regExp.compile) 275 regExp.compile(patterns[browserTypeCandidate], "i"); 276 var matches = regExp.exec(userAgent); 277 if(matches && matches.index >= 0) { 278 if(browserType == "IE" && version >= 11 && browserTypeCandidate == "Safari") 279 continue; 280 browserType = browserTypeCandidate; 281 if(browserType == "Opera10") 282 browserType = "Opera"; 283 var tridentPattern = "trident" + optSlashOrSpace + optVersion; 284 version = Browser.GetBrowserVersion(userAgent, matches, tridentPattern, getIECompatibleVersionString()); 285 if(browserType == "Mozilla" && version >= 11) 286 browserType = "IE"; 287 } 288 } 289 if(!browserType) 290 browserType = defaultBrowserType; 291 var browserVersionDetected = version != -1; 292 if(!browserVersionDetected) 293 version = defaultVersions[browserType]; 294 var platform; 295 var minOccurenceIndex = Number.MAX_VALUE; 296 for(var identStr in platformIdentStrings) { 297 if(!platformIdentStrings.hasOwnProperty(identStr)) continue; 298 var importantIdent = identStr.substr(0,1) == "!"; 299 var occurenceIndex = userAgent.indexOf((importantIdent ? identStr.substr(1) : identStr).toLowerCase()); 300 if(occurenceIndex >= 0 && (occurenceIndex < minOccurenceIndex || importantIdent)) { 301 minOccurenceIndex = importantIdent ? 0 : occurenceIndex; 302 platform = platformIdentStrings[identStr]; 303 } 304 } 305 var samsungPattern = "SM-[A-Z]"; 306 var matches = userAgent.toUpperCase().match(samsungPattern); 307 var isSamsungAndroidDevice = matches && matches.length > 0; 308 if(platform == "WinPhone" && version < 9) 309 version = Math.floor(getVersionFromTrident(userAgent, "trident" + optSlashOrSpace + optVersion)); 310 if(!ignoreDocumentMode && browserType == "IE" && version > 7 && document.documentMode < version) 311 version = document.documentMode; 312 if(platform == "WinPhone") 313 version = Math.max(9, version); 314 if(!platform) 315 platform = defaultPlatform; 316 if(platform == platformIdentStrings["cpu os"] && !browserVersionDetected) 317 version = 4; 318 fillUserAgentInfo(browserTypesOrderedList, browserType, version, platform, isSamsungAndroidDevice); 319 } catch(e) { 320 fillUserAgentInfo(browserTypesOrderedList, defaultBrowserType, defaultVersions[defaultBrowserType], defaultPlatform); 321 } 322} 323function getVersionFromMatches(matches) { 324 var result = -1; 325 var versionStr = ""; 326 if(matches[1]) { 327 versionStr += matches[1]; 328 if(matches[2]) 329 versionStr += "." + matches[2]; 330 } 331 if(versionStr != "") { 332 result = parseFloat(versionStr); 333 if(result == NaN) 334 result = -1; 335 } 336 return result; 337} 338function getVersionFromTrident(userAgent, tridentPattern) { 339 var tridentDiffFromVersion = 4; 340 var matches = new RegExp(tridentPattern, "i").exec(userAgent); 341 return getVersionFromMatches(matches) + tridentDiffFromVersion; 342} 343Browser.GetBrowserVersion = function(userAgent, matches, tridentPattern, ieCompatibleVersionString) { 344 var version = getVersionFromMatches(matches); 345 if(ieCompatibleVersionString) { 346 var versionFromTrident = getVersionFromTrident(userAgent, tridentPattern); 347 if(ieCompatibleVersionString === "edge" || parseInt(ieCompatibleVersionString) === versionFromTrident) 348 return versionFromTrident; 349 } 350 return version; 351} 352function fillUserAgentInfo(browserTypesOrderedList, browserType, version, platform, isSamsungAndroidDevice) { 353 for(var i = 0; i < browserTypesOrderedList.length; i++) { 354 var type = browserTypesOrderedList[i]; 355 Browser[type] = type == browserType; 356 } 357 Browser.Version = Math.floor(10.0 * version) / 10.0; 358 Browser.MajorVersion = Math.floor(Browser.Version); 359 Browser.WindowsPlatform = platform == "Win" || platform == "WinPhone"; 360 Browser.MacOSPlatform = platform == "Mac"; 361 Browser.MacOSMobilePlatform = platform == "MacMobile"; 362 Browser.AndroidMobilePlatform = platform == "Android"; 363 Browser.WindowsPhonePlatform = platform == "WinPhone"; 364 Browser.WebKitFamily = Browser.Safari || Browser.Chrome || Browser.Opera && Browser.MajorVersion >= 15; 365 Browser.NetscapeFamily = Browser.Netscape || Browser.Mozilla || Browser.Firefox; 366 Browser.HardwareAcceleration = (Browser.IE && Browser.MajorVersion >= 9) || (Browser.Firefox && Browser.MajorVersion >= 4) || 367 (Browser.AndroidMobilePlatform && Browser.Chrome) || (Browser.Chrome && Browser.MajorVersion >= 37) || 368 (Browser.Safari && !Browser.WindowsPlatform) || Browser.Edge; 369 Browser.WebKitTouchUI = Browser.MacOSMobilePlatform || Browser.AndroidMobilePlatform; 370 var isIETouchUI = Browser.IE && Browser.MajorVersion > 9 && Browser.WindowsPlatform && Browser.UserAgent.toLowerCase().indexOf("touch") >= 0; 371 Browser.MSTouchUI = isIETouchUI || (Browser.Edge && !!window.navigator.maxTouchPoints); 372 Browser.TouchUI = Browser.WebKitTouchUI || Browser.MSTouchUI; 373 Browser.MobileUI = Browser.WebKitTouchUI || Browser.WindowsPhonePlatform; 374 Browser.AndroidDefaultBrowser = Browser.AndroidMobilePlatform && !Browser.Chrome; 375 Browser.AndroidChromeBrowser = Browser.AndroidMobilePlatform && Browser.Chrome; 376 if(isSamsungAndroidDevice) 377 Browser.SamsungAndroidDevice = isSamsungAndroidDevice; 378 if(Browser.MSTouchUI) { 379 var isARMArchitecture = Browser.UserAgent.toLowerCase().indexOf("arm;") > -1; 380 Browser.VirtualKeyboardSupported = isARMArchitecture || Browser.WindowsPhonePlatform; 381 } else { 382 Browser.VirtualKeyboardSupported = Browser.WebKitTouchUI; 383 } 384 fillDocumentElementBrowserTypeClassNames(browserTypesOrderedList); 385} 386function fillDocumentElementBrowserTypeClassNames(browserTypesOrderedList) { 387 var documentElementClassName = ""; 388 var browserTypeslist = browserTypesOrderedList.concat(["WindowsPlatform", "MacOSPlatform", "MacOSMobilePlatform", "AndroidMobilePlatform", 389 "WindowsPhonePlatform", "WebKitFamily", "WebKitTouchUI", "MSTouchUI", "TouchUI", "AndroidDefaultBrowser"]); 390 for(var i = 0; i < browserTypeslist.length; i++) { 391 var type = browserTypeslist[i]; 392 if(Browser[type]) 393 documentElementClassName += "dx" + type + " "; 394 } 395 documentElementClassName += "dxBrowserVersion-" + Browser.MajorVersion 396 if(document && document.documentElement) { 397 if(document.documentElement.className != "") 398 documentElementClassName = " " + documentElementClassName; 399 document.documentElement.className += documentElementClassName; 400 Browser.Info = documentElementClassName; 401 } 402} 403Browser.IdentUserAgent(Browser.UserAgent); 404ASPx.Browser = Browser; 405ASPx.BlankUrl = Browser.IE ? ASPx.SSLSecureBlankUrl : (Browser.Opera ? "about:blank" : ""); 406var Data = { }; 407Data.ArrayInsert = function(array, element, position){ 408 if(0 <= position && position < array.length){ 409 for(var i = array.length; i > position; i --) 410 array[i] = array[i - 1]; 411 array[position] = element; 412 } 413 else 414 array.push(element); 415} 416Data.ArrayRemove = function(array, element){ 417 var index = Data.ArrayIndexOf(array, element); 418 if(index > -1) Data.ArrayRemoveAt(array, index); 419} 420Data.ArrayRemoveAt = function(array, index){ 421 if(index >= 0 && index < array.length){ 422 for(var i = index; i < array.length - 1; i++) 423 array[i] = array[i + 1];
424 array.pop(); 425 } 426} 427Data.ArrayClear = function(array){ 428 while(array.length > 0) 429 array.pop(); 430} 431Data.ArrayIndexOf = function(array, element, comparer) { 432 if(!comparer) { 433 for(var i = 0; i < array.length; i++) { 434 if(array[i] == element) 435 return i; 436 } 437 } else { 438 for(var i = 0; i < array.length; i++) { 439 if(comparer(array[i], element)) 440 return i; 441 } 442 } 443 return -1; 444} 445Data.ArrayContains = function(array, element) { 446 return Data.ArrayIndexOf(array, element) >= 0; 447} 448Data.ArrayEqual = function(array1, array2) { 449 var count1 = array1.length; 450 var count2 = array2.length; 451 if(count1 != count2) 452 return false; 453 for(var i = 0; i < count1; i++) 454 if(array1[i] != array2[i]) 455 return false; 456 return true; 457} 458Data.ArraySame = function(array1, array2) { 459 if(array1.length !== array2.length) 460 return false; 461 return array1.every(function(elem) { return Data.ArrayContains(array2, elem) }); 462} 463Data.ArrayGetIntegerEdgeValues = function(array) { 464 var arrayToSort = Data.CollectionToArray(array); 465 Data.ArrayIntegerAscendingSort(arrayToSort); 466 return { 467 start: arrayToSort[0], 468 end: arrayToSort[arrayToSort.length - 1] 469 } 470} 471Data.ArrayIntegerAscendingSort = function(array){ 472 Data.ArrayIntegerSort(array); 473} 474Data.ArrayIntegerSort = function(array, desc) { 475 array.sort(function(i1, i2) { 476 var res = 0; 477 if(i1 > i2) 478 res = 1; 479 else if(i1 < i2) 480 res = -1; 481 if(desc) 482 res *= -1; 483 return res; 484 }); 485}, 486Data.CollectionsUnionToArray = function(firstCollection, secondCollection) { 487 var result = []; 488 var firstCollectionLength = firstCollection.length; 489 var secondCollectionLength = secondCollection.length; 490 for(var i = 0; i < firstCollectionLength + secondCollectionLength; i++) { 491 if(i < firstCollectionLength) 492 result.push(firstCollection[i]); 493 else 494 result.push(secondCollection[i - firstCollectionLength]); 495 } 496 return result; 497} 498Data.CollectionToArray = function(collection) { 499 var array = []; 500 for(var i = 0; i < collection.length; i++) 501 array.push(collection[i]); 502 return array; 503} 504Data.CreateHashTableFromArray = function(array) { 505 var hash = []; 506 for(var i = 0; i < array.length; i++) 507 hash[array[i]] = 1; 508 return hash; 509} 510Data.CreateIndexHashTableFromArray = function(array) { 511 var hash = []; 512 for(var i = 0; i < array.length; i++) 513 hash[array[i]] = i; 514 return hash; 515} 516Data.ArrayToHash = function(array, getKeyFunc, getValueFunc) { 517 if(!(array instanceof Array)) 518 return { }; 519 return array.reduce(function(map, element, index) { 520 var key = getKeyFunc(element, index); 521 var value = getValueFunc(element, index); 522 map[key] = value; 523 return map; 524 }, { }); 525} 526var defaultBinarySearchComparer = function(array, index, value) { 527 var arrayElement = array[index]; 528 if(arrayElement == value) 529 return 0; 530 else 531 return arrayElement < value ? -1 : 1; 532}; 533Data.NearestLeftBinarySearchComparer = function(array, index, value) { 534 var arrayElement = array[index]; 535 var leftPoint = arrayElement < value; 536 var lastLeftPoint = leftPoint && index == array.length - 1; 537 var nearestLeftPoint = lastLeftPoint || (leftPoint && array[index + 1] >= value) 538 if(nearestLeftPoint) 539 return 0; 540 else 541 return arrayElement < value ? -1 : 1; 542}; 543Data.ArrayBinarySearch = function(array, value, binarySearchComparer, startIndex, length) { 544 if(!binarySearchComparer) 545 binarySearchComparer = defaultBinarySearchComparer; 546 if(!ASPx.IsExists(startIndex)) 547 startIndex = 0; 548 if(!ASPx.IsExists(length)) 549 length = array.length - startIndex; 550 var endIndex = (startIndex + length) - 1; 551 while(startIndex <= endIndex) { 552 var middle = (startIndex + ((endIndex - startIndex) >> 1)); 553 var compareResult = binarySearchComparer(array, middle, value); 554 if(compareResult == 0) 555 return middle; 556 if(compareResult < 0) 557 startIndex = middle + 1; 558 else 559 endIndex = middle - 1; 560 } 561 return -(startIndex + 1); 562}, 563Data.ArrayFlatten = function(arrayOfArrays) { 564 return [].concat.apply([], arrayOfArrays); 565}, 566Data.GetDistinctArray = function(array) { 567 var resultArray = []; 568 for(var i = 0; i < array.length; i++) { 569 var currentEntry = array[i]; 570 if(Data.ArrayIndexOf(resultArray, currentEntry) == -1) { 571 resultArray.push(currentEntry); 572 } 573 } 574 return resultArray; 575} 576Data.ForEach = function(arr, callback) { 577 if(Array.prototype.forEach) { 578 Array.prototype.forEach.call(arr, callback); 579 } else { 580 for(var i = 0, len = arr.length; i < len; i++) { 581 callback(arr[i], i, arr); 582 } 583 } 584}, 585Data.MergeHashTables = function(target, object) { 586 if(!object || typeof (object) == "string") 587 return target; 588 if(!target) 589 target = {}; 590 for(var key in object) 591 if(key && !(key in target)) 592 target[key] = object[key]; 593 return target; 594} 595Data.Range = function(count, start) { 596 count = parseInt(count) || 0; 597 start = parseInt(start) || 0; 598 if(count < 0) count = 0; 599 if(start < 0) start = 0; 600 return Array.apply(null, Array(count)).map(function(val, i) { return start + i; }); 601} 602ASPx.Data = Data; 603var Cookie = { }; 604Cookie.DelCookie = function(name){ 605 setCookieInternal(name, "", new Date(1970, 1, 1)); 606} 607Cookie.GetCookie = function(name) { 608 name = escape(name); 609 var cookies = document.cookie.split(';'); 610 for(var i = 0; i < cookies.length; i++) { 611 var cookie = Str.Trim(cookies[i]); 612 if(cookie.indexOf(name + "=") == 0) 613 return unescape(cookie.substring(name.length + 1, cookie.length)); 614 else if(cookie.indexOf(name + ";") == 0 || cookie === name) 615 return ""; 616 } 617 return null; 618} 619Cookie.SetCookie = function(name, value, expirationDate){ 620 if(!ASPx.IsExists(value)) { 621 Cookie.DelCookie(name); 622 return; 623 } 624 if(!ASPx.Ident.IsDate(expirationDate)) { 625 expirationDate = new Date(); 626 expirationDate.setFullYear(expirationDate.getFullYear() + 1); 627 } 628 setCookieInternal(name, value, expirationDate); 629} 630function setCookieInternal(name, value, date){ 631 document.cookie = escape(name) + "=" + escape(value.toString()) + "; expires=" + date.toGMTString() + "; path=/"; 632} 633ASPx.Cookie = Cookie;
634ASPx.ImageUtils = { 635 GetImageSrc: function (image){ 636 return image.src; 637 }, 638 SetImageSrc: function(image, src){ 639 if(isSourceResetRequired()) 640 image.src = ""; 641 image.src = src; 642 }, 643 SetSize: function(image, width, height){ 644 image.style.width = width + "px"; 645 image.style.height = height + "px"; 646 }, 647 GetSize: function(image, isWidth){ 648 return (isWidth ? image.offsetWidth : image.offsetHeight); 649 } 650}; 651var Str = { }; 652Str.ApplyReplacement = function(text, replecementTable) { 653 if(typeof(text) != "string") 654 text = text.toString(); 655 for(var i = 0; i < replecementTable.length; i++) { 656 var replacement = replecementTable[i]; 657 text = text.replace(replacement[0], replacement[1]); 658 } 659 return text; 660} 661Str.CompleteReplace = function(text, regexp, newSubStr) { 662 if(typeof(text) != "string") 663 text = text.toString(); 664 var textPrev; 665 do { 666 textPrev = text; 667 text = text.replace(regexp, newSubStr); 668 } while(text != textPrev); 669 return text; 670} 671Str.EncodeHtml = function(html) { 672 return Str.ApplyReplacement(html, [ 673 [ /&/g, '&x;' ], [ /&/g, '&' ], 674 [ /"/g, '"x;' ], [ /"/g, '"' ], 675 [ /</g, '<x;' ], [ /</g, '<' ], 676 [ />/g, '>x;' ], [ />/g, '>' ] 677 ]); 678} 679Str.DecodeHtml = function(html) { 680 return Str.ApplyReplacement(html, [ 681 [ />/g, '>' ], [ />x;/g, '>' ], 682 [ /</g, '<' ], [ /<x;/g, '<' ], 683 [ /"/g, '"' ], [ /"x;/g,'"' ], 684 [ /&/g, '&' ], [ /&x;/g, '&' ] 685 ]); 686} 687Str.TrimStart = function(str) { 688 return trimInternal(str, true); 689} 690Str.TrimEnd = function(str) { 691 return trimInternal(str, false, true); 692} 693Str.Trim = function(str) { 694 return trimInternal(str, true, true); 695} 696var whiteSpaces = { 697 0x0009: 1, 0x000a: 1, 0x000b: 1, 0x000c: 1, 0x000d: 1, 0x0020: 1, 0x0085: 1, 698 0x00a0: 1, 0x1680: 1, 0x180e: 1, 0x2000: 1, 0x2001: 1, 0x2002: 1, 0x2003: 1, 699 0x2004: 1, 0x2005: 1, 0x2006: 1, 0x2007: 1, 0x2008: 1, 0x2009: 1, 0x200a: 1, 700 0x200b: 1, 0x2028: 1, 0x2029: 1, 0x202f: 1, 0x205f: 1, 0x3000: 1 701}; 702var caretWidth = 1; 703function trimInternal(source, trimStart, trimEnd) { 704 var len = source.length; 705 if(!len) 706 return source; 707 if(len < 0xBABA1) { 708 var result = source; 709 if(trimStart) { 710 result = result.replace(/^\s+/, ""); 711 } 712 if(trimEnd) { 713 result = result.replace(/\s+$/, ""); 714 } 715 return result; 716 } else { 717 var start = 0; 718 if(trimEnd) { 719 while(len > 0 && whiteSpaces[source.charCodeAt(len - 1)]) { 720 len--; 721 } 722 } 723 if(trimStart && len > 0) { 724 while(start < len && whiteSpaces[source.charCodeAt(start)]) { 725 start++; 726 } 727 } 728 return source.substring(start, len); 729 } 730} 731Str.Insert = function(str, subStr, index) { 732 var leftText = str.slice(0, index); 733 var rightText = str.slice(index); 734 return leftText + subStr + rightText; 735} 736Str.InsertEx = function(str, subStr, startIndex, endIndex) { 737 var leftText = str.slice(0, startIndex); 738 var rightText = str.slice(endIndex); 739 return leftText + subStr + rightText; 740} 741var greekSLFSigmaChar = String.fromCharCode(962); 742var greekSLSigmaChar = String.fromCharCode(963); 743Str.PrepareStringForFilter = function(s){ 744 s = s.toLowerCase(); 745 if(ASPx.Browser.WebKitFamily) { 746 return s.replace(new RegExp(greekSLFSigmaChar, "g"), greekSLSigmaChar); 747 } 748 return s; 749} 750Str.GetCoincideCharCount = function(text, filter, textMatchingDelegate) { 751 var coincideText = ASPx.Str.PrepareStringForFilter(filter); 752 var originText = ASPx.Str.PrepareStringForFilter(text); 753 while(coincideText != "" && !textMatchingDelegate(originText, coincideText)) { 754 coincideText = coincideText.slice(0, -1); 755 } 756 return coincideText.length; 757} 758ASPx.Str = Str; 759var Xml = { }; 760Xml.Parse = function(xmlStr) { 761 if(window.DOMParser) { 762 var parser = new DOMParser(); 763 return parser.parseFromString(xmlStr, "text/xml"); 764 } 765 else if(window.ActiveXObject) { 766 var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); 767 if(xmlDoc) { 768 xmlDoc.async = false; 769 xmlDoc.loadXML(xmlStr); 770 return xmlDoc; 771 } 772 } 773 return null; 774} 775ASPx.Xml = Xml; 776ASPx.Key = { 777 F1 : 112, 778 F2 : 113, 779 F3 : 114, 780 F4 : 115, 781 F5 : 116, 782 F6 : 117, 783 F7 : 118, 784 F8 : 119,
785 F9 : 120, 786 F10 : 121, 787 F11 : 122, 788 F12 : 123, 789 Ctrl : 17, 790 Shift : 16, 791 Alt : 18, 792 Enter : 13, 793 Home : 36, 794 End : 35, 795 Left : 37, 796 Right : 39, 797 Up : 38, 798 Down : 40, 799 PageUp : 33, 800 PageDown : 34, 801 Esc : 27, 802 Space : 32, 803 Tab : 9, 804 Backspace : 8, 805 Delete : 46, 806 Insert : 45, 807 ContextMenu : 93, 808 Windows : 91, 809 Decimal : 110 810}; 811ASPx.KeyCode = { 812 Backspace : 8, 813 Tab : 9, 814 Enter : 13, 815 Pause : 19, 816 CapsLock : 20, 817 Esc : 27, 818 Space : 32, 819 PageUp : 33, 820 PageDown : 34, 821 End : 35, 822 Home : 36, 823 Left : 37, 824 Up : 38, 825 Right : 39, 826 Down : 40, 827 Insert : 45, 828 Delete : 46, 829 Key_0 : 48, 830 Key_1 : 49, 831 Key_2 : 50, 832 Key_3 : 51, 833 Key_4 : 52, 834 Key_5 : 53, 835 Key_6 : 54, 836 Key_7 : 55, 837 Key_8 : 56, 838 Key_9 : 57, 839 Key_a : 65, 840 Key_b : 66, 841 Key_c : 67, 842 Key_d : 68, 843 Key_e : 69, 844 Key_f : 70, 845 Key_g : 71, 846 Key_h : 72, 847 Key_i : 73, 848 Key_j : 74, 849 Key_k : 75, 850 Key_l : 76, 851 Key_m : 77, 852 Key_n : 78, 853 Key_o : 79, 854 Key_p : 80, 855 Key_q : 81, 856 Key_r : 82, 857 Key_s : 83, 858 Key_t : 84, 859 Key_u : 85, 860 Key_v : 86, 861 Key_w : 87, 862 Key_x : 88, 863 Key_y : 89, 864 Key_z : 90, 865 Windows : 91, 866 ContextMenu : 93, 867 Numpad_0 : 96, 868 Numpad_1 : 97, 869 Numpad_2 : 98, 870 Numpad_3 : 99, 871 Numpad_4 : 100, 872 Numpad_5 : 101, 873 Numpad_6 : 102, 874 Numpad_7 : 103, 875 Numpad_8 : 104, 876 Numpad_9 : 105, 877 Multiply : 106, 878 Add : 107, 879 Subtract : 109, 880 Decimal : 110, 881 Divide : 111, 882 F1 : 112, 883 F2 : 113, 884 F3 : 114, 885 F4 : 115, 886 F5 : 116, 887 F6 : 117, 888 F7 : 118, 889 F8 : 119,
890 F9 : 120, 891 F10 : 121, 892 F11 : 122, 893 F12 : 123, 894 NumLock : 144, 895 ScrollLock : 145, 896 Semicolon : 186, 897 Equals : 187, 898 Comma : 188, 899 Dash : 189, 900 Period : 190, 901 ForwardSlash : 191, 902 GraveAccent : 192, 903 OpenBracket : 219, 904 BackSlash : 220, 905 CloseBracket : 221, 906 SingleQuote : 222 907}; 908ASPx.ScrollBarMode = { Hidden: 0, Visible: 1, Auto: 2 }; 909ASPx.ColumnResizeMode = { None: 0, Control: 1, NextColumn: 2 }; 910var Selection = { }; 911Selection.Set = function(input, startPos, endPos, scrollToSelection) { 912 if(!ASPx.IsExistsElement(input)) 913 return; 914 if(Browser.VirtualKeyboardSupported && (ASPx.GetActiveElement() !== input || ASPx.VirtualKeyboardUI.getInputNativeFocusLocked())) 915 return; 916 var textLen = input.value.length; 917 startPos = ASPx.GetDefinedValue(startPos, 0); 918 endPos = ASPx.GetDefinedValue(endPos, textLen); 919 if(startPos < 0) 920 startPos = 0; 921 if(endPos < 0 || endPos > textLen) 922 endPos = textLen; 923 if(startPos > endPos) 924 startPos = endPos; 925 var makeReadOnly = false; 926 if(Browser.WebKitFamily && input.readOnly) { 927 input.readOnly = false; 928 makeReadOnly = true; 929 } 930 try { 931 if(Browser.Firefox && Browser.Version >= 8) 932 input.setSelectionRange(startPos, endPos, "backward"); 933 else if(Browser.IE && input.createTextRange) { 934 var range = input.createTextRange(); 935 range.collapse(true); 936 range.moveStart("character", startPos); 937 range.moveEnd("character", endPos - startPos); 938 range.select(); 939 } else { 940 forceScrollToSelectionRange(input, startPos, endPos); 941 input.setSelectionRange(startPos, endPos); 942 } 943 if(Browser.Opera || Browser.Firefox || Browser.Chrome) 944 input.focus(); 945 } catch(e) { 946 } 947 if(scrollToSelection && input.tagName == 'TEXTAREA') { 948 var scrollHeight = input.scrollHeight; 949 var approxCaretPos = startPos; 950 var scrollTop = Math.max(Math.round(approxCaretPos * scrollHeight / textLen - input.clientHeight / 2), 0); 951 input.scrollTop = scrollTop; 952 } 953 if(makeReadOnly) 954 input.readOnly = true; 955} 956var getTextWidthBeforePos = function(input, pos) { 957 return ASPx.GetSizeOfText(input.value.toString().substr(0, pos), ASPx.GetCurrentStyle(input)).width; 958} 959var forceScrollToSelectionRange = function(input, startPos, endPos) { 960 var widthBeforeStartPos = getTextWidthBeforePos(input, startPos) - caretWidth; 961 var widthBeforeEndPos = getTextWidthBeforePos(input, endPos) + caretWidth; 962 var inputRawWidth = input.offsetWidth - ASPx.GetLeftRightBordersAndPaddingsSummaryValue(input); 963 if(input.scrollLeft < widthBeforeEndPos - inputRawWidth) 964 input.scrollLeft = widthBeforeEndPos - inputRawWidth; 965 else if(input.scrollLeft > widthBeforeStartPos) 966 input.scrollLeft = widthBeforeStartPos; 967} 968Selection.GetInfo = function(input) { 969 var start, end; 970 if(Browser.IE && Browser.Version < 9) { 971 var range = document.selection.createRange(); 972 var rangeCopy = range.duplicate(); 973 range.move('character', -input.value.length); 974 range.setEndPoint('EndToStart', rangeCopy); 975 start = range.text.length; 976 end = start + rangeCopy.text.length; 977 } else { 978 try { 979 start = input.selectionStart; 980 end = input.selectionEnd; 981 } catch (e) { 982 } 983 } 984 return { startPos: start, endPos: end }; 985} 986Selection.GetExtInfo = function(input) { 987 var start = 0, end = 0, textLen = 0; 988 if(Browser.IE && Browser.Version < 9) { 989 var normalizedValue; 990 var range, textInputRange, textInputEndRange; 991 range = document.selection.createRange(); 992 if(range && range.parentElement() == input) { 993 textLen = input.value.length; 994 normalizedValue = input.value.replace(/\r\n/g, "\n"); 995 textInputRange = input.createTextRange(); 996 textInputRange.moveToBookmark(range.getBookmark()); 997 textInputEndRange = input.createTextRange(); 998 textInputEndRange.collapse(false); 999 if(textInputRange.compareEndPoints("StartToEnd", textInputEndRange) > -1) { 1000 start = textLen; 1001 end = textLen; 1002 } else { 1003 start = normalizedValue.slice(0, start).split("\n").length - textInputRange.moveStart("character", -textLen) -1; 1004 if(textInputRange.compareEndPoints("EndToEnd", textInputEndRange) > -1) 1005 end = textLen; 1006 else 1007 end = normalizedValue.slice(0, end).split("\n").length - textInputRange.moveEnd("character", -textLen) - 1; 1008 } 1009 } 1010 return {startPos: start, endPos: end}; 1011 } 1012 try { 1013 start = input.selectionStart; 1014 end = input.selectionEnd; 1015 } catch (e) { 1016 } 1017 return {startPos: start, endPos: end}; 1018} 1019Selection.SetCaretPosition = function(input, caretPos) { 1020 if(typeof caretPos === "undefined" || caretPos < 0) 1021 caretPos = input.value.length; 1022 Selection.Set(input, caretPos, caretPos, true); 1023} 1024Selection.GetCaretPosition = function(element, isDialogMode) { 1025 var pos = 0; 1026 if("selectionStart" in element) { 1027 pos = element.selectionStart; 1028 } else if("selection" in document) { 1029 element.focus(); 1030 var sel = document.selection.createRange(), 1031 selLength = document.selection.createRange().text.length; 1032 sel.moveStart("character", -element.value.length); 1033 pos = sel.text.length - selLength; 1034 } 1035 if(isDialogMode && !pos) { 1036 pos = element.value.length - 1; 1037 } 1038 return pos; 1039} 1040Selection.Clear = function() { 1041 try { 1042 if(window.getSelection) { 1043 window.getSelection().removeAllRanges(); 1044 } 1045 else if(document.selection) { 1046 if(document.selection.empty) 1047 document.selection.empty(); 1048 else if(document.selection.clear) 1049 document.selection.clear(); 1050 } 1051 } catch(e) { 1052 } 1053} 1054Selection.ClearOnMouseMove = function(evt) { 1055 if(!Browser.IE || (evt.button != 0)) 1056 Selection.Clear(); 1057} 1058Selection.SetElementSelectionEnabled = function(element, value) { 1059 var userSelectValue = value ? "" : "none"; 1060 var func = value ? Evt.DetachEventFromElement : Evt.AttachEventToElement; 1061 if(Browser.Firefox) 1062 element.style.MozUserSelect = userSelectValue; 1063 else if(Browser.WebKitFamily) 1064 element.style.webkitUserSelect = userSelectValue; 1065 else if(Browser.Opera) 1066 func(element, "mousemove", Selection.Clear); 1067 else { 1068 func(element, "selectstart", ASPx.FalseFunction); 1069 func(element, "mousemove", Selection.Clear); 1070 } 1071} 1072Selection.SetElementAsUnselectable = function(element, isWithChild, recursive) { 1073 if(element && element.nodeType == 1) { 1074 element.unselectable = "on"; 1075 if(Browser.NetscapeFamily) 1076 element.onmousedown = ASPx.FalseFunction; 1077 if((Browser.IE && Browser.Version >= 9) || Browser.WebKitFamily) 1078 Evt.AttachEventToElement(element, "mousedown", Evt.PreventEventAndBubble);
1079 if(isWithChild === true){ 1080 for(var j = 0; j < element.childNodes.length; j ++) 1081 Selection.SetElementAsUnselectable(element.childNodes[j], (!!recursive ? true : false), (!!recursive)); 1082 } 1083 } 1084} 1085Selection.AreEqual = function(selection1, selection2) { 1086 return selection1.startPos === selection2.startPos && selection1.endPos === selection2.endPos; 1087} 1088ASPx.Selection = Selection; 1089var MouseScroller = { }; 1090MouseScroller.MinimumOffset = 10; 1091MouseScroller.Create = function(getElement, getScrollXElement, getScrollYElement, needPreventScrolling, vertRecursive, onMouseDown, onMouseMove, onMouseUp, onMouseUpMissed) { 1092 var element = getElement(); 1093 if(!element) 1094 return; 1095 if(!element.dxMouseScroller) 1096 element.dxMouseScroller = new MouseScroller.Extender(getElement, getScrollXElement, getScrollYElement, needPreventScrolling, vertRecursive, onMouseDown, onMouseMove, onMouseUp, onMouseUpMissed); 1097 return element.dxMouseScroller; 1098} 1099MouseScroller.Extender = function(getElement, getScrollXElement, getScrollYElement, needPreventScrolling, vertRecursive, onMouseDown, onMouseMove, onMouseUp, onMouseUpMissed) { 1100 this.getElement = getElement; 1101 this.getScrollXElement = getScrollXElement; 1102 this.getScrollYElement = getScrollYElement; 1103 this.needPreventScrolling = needPreventScrolling; 1104 this.vertRecursive = !!vertRecursive; 1105 this.createHandlers(onMouseDown || function() { }, onMouseMove || function() { }, onMouseUp || function() { }, onMouseUpMissed || function() { }); 1106 this.update() 1107}; 1108MouseScroller.Extender.prototype = { 1109 update: function() { 1110 if(this.element) 1111 Evt.DetachEventFromElement(this.element, ASPx.TouchUIHelper.touchMouseDownEventName, this.mouseDownHandler); 1112 this.element = this.getElement(); 1113 Evt.AttachEventToElement(this.element, ASPx.TouchUIHelper.touchMouseDownEventName, this.mouseDownHandler); 1114 Evt.AttachEventToElement(this.element, "click", this.mouseClickHandler); 1115 if(Browser.MSTouchUI && this.element.className.indexOf(ASPx.TouchUIHelper.msTouchDraggableClassName) < 0) 1116 this.element.className += " " + ASPx.TouchUIHelper.msTouchDraggableClassName; 1117 this.scrollXElement = this.getScrollXElement(); 1118 this.scrollYElement = this.getScrollYElement(); 1119 }, 1120 createHandlers: function(onMouseDown, onMouseMove, onMouseUp, onMouseUpMissed) { 1121 var mouseDownCounter = 0; 1122 this.onMouseDown = onMouseDown; 1123 this.onMouseMove = onMouseMove; 1124 this.onMouseUp = onMouseUp; 1125 this.mouseDownHandler = function(e) { 1126 if(mouseDownCounter++ > 0) { 1127 this.finishScrolling(); 1128 onMouseUpMissed(); 1129 } 1130 var eventSource = Evt.GetEventSource(e); 1131 var requirePreventCustonScroll = ASPx.IsExists(ASPx.TouchUIHelper.RequirePreventCustomScroll) && ASPx.TouchUIHelper.RequirePreventCustomScroll(eventSource, this.element); 1132 if(requirePreventCustonScroll || this.needPreventScrolling && this.needPreventScrolling(eventSource)) 1133 return; 1134 this.scrollableTreeLine = this.GetScrollableElements(); 1135 this.firstX = this.prevX = Evt.GetEventX(e); 1136 this.firstY = this.prevY = Evt.GetEventY(e); 1137 Evt.AttachEventToDocument(ASPx.TouchUIHelper.touchMouseMoveEventName, this.mouseMoveHandler); 1138 Evt.AttachEventToDocument(ASPx.TouchUIHelper.touchMouseUpEventName, this.mouseUpHandler); 1139 this.onMouseDown(e); 1140 }.aspxBind(this); 1141 this.mouseMoveHandler = function(e) { 1142 if(ASPx.TouchUIHelper.isGesture) 1143 return; 1144 var x = Evt.GetEventX(e); 1145 var y = Evt.GetEventY(e); 1146 var xDiff = this.prevX - x; 1147 var yDiff = this.prevY - y; 1148 if(this.vertRecursive) { 1149 var isTopDirection = yDiff < 0; 1150 this.scrollYElement = this.GetElementForVertScrolling(isTopDirection, this.prevIsTopDirection, this.scrollYElement); 1151 this.prevIsTopDirection = isTopDirection; 1152 } 1153 if(this.scrollXElement && xDiff != 0) 1154 this.scrollXElement.scrollLeft += xDiff; 1155 if(this.scrollYElement && yDiff != 0) { 1156 this.scrollYElement.scrollTop += yDiff; 1157 var isOuterScrollableElement = this.scrollableTreeLine[this.scrollableTreeLine.length - 1] == this.scrollYElement; 1158 if(isOuterScrollableElement) 1159 y += yDiff; 1160 } 1161 this.prevX = x; 1162 this.prevY = y; 1163 e.preventDefault(); 1164 this.onMouseMove(e); 1165 }.aspxBind(this); 1166 this.mouseUpHandler = function(e) { 1167 this.finishScrolling(); 1168 this.onMouseUp(e); 1169 }.aspxBind(this); 1170 this.mouseClickHandler = function(e){
1171 if(this.needPreventScrolling && this.needPreventScrolling(Evt.GetEventSource(e))) 1172 return; 1173 var xDiff = this.firstX - Evt.GetEventX(e); 1174 var yDiff = this.firstY - Evt.GetEventY(e); 1175 if(xDiff > MouseScroller.MinimumOffset || yDiff > MouseScroller.MinimumOffset) 1176 return Evt.PreventEventAndBubble(e); 1177 }.aspxBind(this); 1178 this.finishScrolling = function() { 1179 Evt.DetachEventFromDocument(ASPx.TouchUIHelper.touchMouseMoveEventName, this.mouseMoveHandler); 1180 Evt.DetachEventFromDocument(ASPx.TouchUIHelper.touchMouseUpEventName, this.mouseUpHandler); 1181 this.scrollableTreeLine = []; 1182 this.prevIsTopDirection = null; 1183 mouseDownCounter--; 1184 }; 1185 }, 1186 GetScrollableElements: function() { 1187 if(!this.vertRecursive) return [ ]; 1188 var outerScrollableElementTag = ASPx.Browser.IE ? "HTML" : "BODY"; 1189 return ASPx.GetElementTreeLine(this.element, null, function(el) { return el == document; }) 1190 .filter(function(el) { return ASPx.IsScrollableElement(el, false, true) || el.tagName == outerScrollableElementTag }.bind(this)); 1191 }, 1192 GetElementForVertScrolling: function(currentIsTop, prevIsTop, prevElement) { 1193 if(prevElement && currentIsTop === prevIsTop && this.GetVertScrollExcess(prevElement, currentIsTop) > 0) 1194 return prevElement; 1195 for(var i = 0; i < this.scrollableTreeLine.length; i++) { 1196 var element = this.scrollableTreeLine[i]; 1197 var excess = this.GetVertScrollExcess(element, currentIsTop); 1198 if(excess > 0) 1199 return element; 1200 } 1201 return null; 1202 }, 1203 GetVertScrollExcess: function(element, isTop) { 1204 if(isTop) 1205 return element.scrollTop; 1206 var isBodyElement = element.tagName == "BODY"; 1207 var clientHeight = isBodyElement ? ASPx.GetDocumentClientHeight() : element.clientHeight; 1208 return element.scrollHeight - clientHeight - element.scrollTop; 1209 } 1210} 1211ASPx.MouseScroller = MouseScroller; 1212var Evt = { }; 1213Evt.GetEvent = function(evt){ 1214 return (typeof(event) != "undefined" && event != null && Browser.IE) ? event : evt; 1215} 1216Evt.IsEventPrevented = function(evt) { 1217 return evt.defaultPrevented || evt.returnValue === false; 1218} 1219Evt.PreventEvent = function(evt){ 1220 if(evt.preventDefault) 1221 evt.preventDefault(); 1222 else 1223 evt.returnValue = false; 1224 return false; 1225} 1226Evt.PreventEventAndBubble = function(evt){ 1227 Evt.PreventEvent(evt); 1228 if(evt.stopPropagation) 1229 evt.stopPropagation(); 1230 evt.cancelBubble = true; 1231 return false; 1232} 1233Evt.CancelBubble = function(evt){ 1234 evt.cancelBubble = true; 1235 return false; 1236} 1237Evt.PreventImageDragging = function(image) { 1238 if(image) { 1239 if(Browser.NetscapeFamily) 1240 image.onmousedown = function(evt) { 1241 evt.cancelBubble = true; 1242 return false; 1243 }; 1244 else 1245 image.ondragstart = function() { 1246 return false; 1247 }; 1248 } 1249} 1250Evt.PreventDragStart = function(evt) { 1251 evt = Evt.GetEvent(evt); 1252 var element = Evt.GetEventSource(evt); 1253 if(element.releaseCapture) 1254 element.releaseCapture(); 1255 return false; 1256} 1257Evt.PreventElementDrag = function(element) { 1258 if(Browser.IE) 1259 Evt.AttachEventToElement(element, "dragstart", Evt.PreventEvent); 1260 else 1261 Evt.AttachEventToElement(element, "mousedown", Evt.PreventEvent); 1262} 1263Evt.PreventElementDragAndSelect = function(element, skipMouseMove, skipIESelect){ 1264 if(Browser.WebKitFamily) 1265 Evt.AttachEventToElement(element, "selectstart", Evt.PreventEventAndBubble); 1266 if(Browser.IE){ 1267 if(!skipIESelect) 1268 Evt.AttachEventToElement(element, "selectstart", ASPx.FalseFunction); 1269 if(!skipMouseMove) 1270 Evt.AttachEventToElement(element, "mousemove", Selection.ClearOnMouseMove); 1271 Evt.AttachEventToElement(element, "dragstart", Evt.PreventDragStart); 1272 } 1273} 1274Evt.GetEventSource = function(evt){ 1275 if(!ASPx.IsExists(evt)) return null; 1276 return evt.srcElement ? evt.srcElement : evt.target; 1277} 1278Evt.GetKeyCode = function(srcEvt) { 1279 return Browser.NetscapeFamily || Browser.Opera ? srcEvt.which : srcEvt.keyCode; 1280} 1281function clientEventRequiresDocScrollCorrection() { 1282 var isSafariVerLess3 = Browser.Safari && Browser.Version < 3, 1283 isMacOSMobileVerLess51 = Browser.MacOSMobilePlatform && Browser.Version < 5.1; 1284 return Browser.AndroidDefaultBrowser || Browser.AndroidChromeBrowser || !(isSafariVerLess3 || isMacOSMobileVerLess51); 1285} 1286Evt.GetEventX = function(evt){ 1287 if(ASPx.TouchUIHelper.isTouchEvent(evt)) 1288 return ASPx.TouchUIHelper.getEventX(evt); 1289 return evt.clientX + (clientEventRequiresDocScrollCorrection() ? ASPx.GetDocumentScrollLeft() : 0); 1290} 1291Evt.GetEventY = function(evt){ 1292 if(ASPx.TouchUIHelper.isTouchEvent(evt)) 1293 return ASPx.TouchUIHelper.getEventY(evt); 1294 return evt.clientY + (clientEventRequiresDocScrollCorrection() ? ASPx.GetDocumentScrollTop() : 0 ); 1295} 1296Evt.IsLeftButtonPressed = function(evt) { 1297 if(ASPx.TouchUIHelper.isTouchEvent(evt)) 1298 return true; 1299 evt = Evt.GetEvent(evt); 1300 if(!evt) return false; 1301 if(Browser.IE && Browser.Version < 11) { 1302 if(Browser.MSTouchUI) 1303 return true; 1304 return evt.button % 2 == 1; 1305 } else if(Browser.WebKitFamily) { 1306 if(evt.type === "pointermove") 1307 return evt.buttons === 1; 1308 return evt.which == 1; 1309 } else if(Browser.NetscapeFamily || (Browser.IE && Browser.Version >= 11) || Browser.Edge) { 1310 if(evt.type === ASPx.TouchUIHelper.touchMouseMoveEventName) 1311 return evt.buttons === 1; 1312 return evt.which == 1; 1313 } else if(Browser.Opera) 1314 return evt.button == 0; 1315 return true; 1316} 1317Evt.IsRightButtonPressed = function(evt){ 1318 evt = Evt.GetEvent(evt); 1319 if(!ASPx.IsExists(evt)) return false; 1320 if(Browser.IE || Browser.Edge) { 1321 if(evt.type === "pointermove") 1322 return evt.buttons === 2; 1323 return evt.button == 2; 1324 } 1325 else if(Browser.NetscapeFamily || Browser.WebKitFamily) 1326 return evt.which == 3; 1327 else if (Browser.Opera) 1328 return evt.button == 1; 1329 return true; 1330} 1331Evt.GetWheelDelta = function(evt) { 1332 var ret; 1333 if(Browser.NetscapeFamily && Browser.MajorVersion < 17) 1334 ret = -evt.detail; 1335 else if(Browser.Safari) 1336 ret = evt.wheelDelta; 1337 else
1338 ret = -evt.deltaY; 1339 if(Browser.Opera && Browser.Version < 9) 1340 ret = -ret; 1341 return ret; 1342} 1343Evt.IsWheelEventWithDirection = function(evt) { 1344 return ASPx.Data.ArrayContains(["wheel", "mousewheel"], evt.type); 1345} 1346Evt.GetWheelDeltaX = function(evt) { 1347 if(evt.type === "wheel") 1348 return -evt.deltaX; 1349 if(evt.type === "mousewheel") 1350 return evt.wheelDeltaX; 1351} 1352Evt.GetWheelDeltaY = function(evt) { 1353 if(evt.type === "wheel") 1354 return -evt.deltaY; 1355 if(evt.type === "mousewheel") 1356 return evt.wheelDeltaY; 1357} 1358Evt.AttachEventToElement = function(element, eventName, func, onlyBubbling) { 1359 if(element.addEventListener) 1360 element.addEventListener(eventName, func, !onlyBubbling); 1361 else 1362 element.attachEvent("on" + eventName, func); 1363} 1364Evt.DetachEventFromElement = function(element, eventName, func) { 1365 if(element.removeEventListener) 1366 element.removeEventListener(eventName, func, true); 1367 else 1368 element.detachEvent("on" + eventName, func); 1369} 1370Evt.AttachEventToDocument = function(eventName, func) { 1371 var attachingAllowed = ASPx.TouchUIHelper.onEventAttachingToDocument(eventName, func); 1372 if(attachingAllowed) 1373 Evt.AttachEventToDocumentCore(eventName, func); 1374} 1375Evt.AttachEventToDocumentCore = function(eventName, func) { 1376 Evt.AttachEventToElement(document, eventName, func); 1377} 1378Evt.DetachEventFromDocument = function(eventName, func) { 1379 Evt.DetachEventFromDocumentCore(eventName, func); 1380 ASPx.TouchUIHelper.onEventDettachedFromDocument(eventName, func); 1381} 1382Evt.DetachEventFromDocumentCore = function(eventName, func){ 1383 Evt.DetachEventFromElement(document, eventName, func); 1384} 1385Evt.GetMouseWheelEventName = function() { 1386 if(Browser.Safari) 1387 return "mousewheel"; 1388 if(Browser.NetscapeFamily && Browser.MajorVersion < 17) 1389 return "DOMMouseScroll"; 1390 return "wheel"; 1391} 1392Evt.AttachMouseEnterToElement = function (element, onMouseOverHandler, onMouseOutHandler) { 1393 Evt.AttachEventToElement(element, ASPx.TouchUIHelper.pointerEnabled ? ASPx.TouchUIHelper.pointerOverEventName : "mouseover", function (evt) { mouseEnterHandler(evt, element, onMouseOverHandler, onMouseOutHandler); }); 1394 Evt.AttachEventToElement(element, ASPx.TouchUIHelper.pointerEnabled ? ASPx.TouchUIHelper.pointerOutEventName : "mouseout", function (evt) { mouseEnterHandler(evt, element, onMouseOverHandler, onMouseOutHandler); }); 1395} 1396Evt.GetEventRelatedTarget = function(evt, isMouseOverEvent) { 1397 return evt.relatedTarget || (isMouseOverEvent ? evt.srcElement : evt.toElement); 1398} 1399function mouseEnterHandler(evt, element, onMouseOverHandler, onMouseOutHandler) { 1400 var isMouseOverExecuted = !!element.dxMouseOverExecuted; 1401 var isMouseOverEvent = (evt.type == "mouseover" || evt.type == ASPx.TouchUIHelper.pointerOverEventName); 1402 if(isMouseOverEvent && isMouseOverExecuted || !isMouseOverEvent && !isMouseOverExecuted) 1403 return; 1404 var source = Evt.GetEventRelatedTarget(evt, isMouseOverEvent); 1405 if(!ASPx.GetIsParent(element, source)) { 1406 element.dxMouseOverExecuted = isMouseOverEvent; 1407 if(isMouseOverEvent) 1408 onMouseOverHandler(element); 1409 else 1410 onMouseOutHandler(element); 1411 } 1412 else if(isMouseOverEvent && !isMouseOverExecuted) { 1413 element.dxMouseOverExecuted = true; 1414 onMouseOverHandler(element); 1415 } 1416} 1417Evt.DispatchEvent = function(target, eventName, canBubble, cancellable) { 1418 var event; 1419 if(Browser.IE && Browser.Version < 9) { 1420 eventName = "on" + eventName; 1421 if(eventName in target) { 1422 event = document.createEventObject(); 1423 target.fireEvent("on" + eventName, event); 1424 } 1425 } else { 1426 event = document.createEvent("Event"); 1427 event.initEvent(eventName, canBubble || false, cancellable || false); 1428 target.dispatchEvent(event); 1429 } 1430} 1431Evt.EmulateDocumentOnMouseDown = function(evt) { 1432 Evt.EmulateOnMouseDown(document, evt); 1433} 1434Evt.EmulateOnMouseDown = function(element, evt) { 1435 if(Browser.IE && Browser.Version < 9) 1436 element.fireEvent("onmousedown", evt); 1437 else if(!Browser.WebKitFamily){ 1438 var emulatedEvt = document.createEvent("MouseEvents"); 1439 emulatedEvt.initMouseEvent("mousedown", true, true, window, 0, evt.screenX, evt.screenY, 1440 evt.clientX, evt.clientY, evt.ctrlKey, evt.altKey, evt.shiftKey, false, 0, null); 1441 element.dispatchEvent(emulatedEvt); 1442 } 1443} 1444Evt.EmulateOnMouseEvent = function (type, element, evt) { 1445 evt.type = type; 1446 var emulatedEvt = document.createEvent("MouseEvents"); 1447 emulatedEvt.initMouseEvent(type, true, true, window, 0, evt.screenX, evt.screenY, 1448 evt.clientX, evt.clientY, evt.ctrlKey, evt.altKey, evt.shiftKey, false, 0, null); 1449 emulatedEvt.target = element; 1450 element.dispatchEvent(emulatedEvt); 1451} 1452Evt.EmulateMouseClick = function (element, evt) { 1453 var x = element.offsetWidth / 2; 1454 var y = element.offsetHeight / 2; 1455 if (!evt) 1456 evt = { 1457 bubbles: true, 1458 cancelable: true, 1459 view: window, 1460 detail: 1, 1461 screenX: 0, 1462 screenY: 0, 1463 clientX: x, 1464 clientY: y, 1465 ctrlKey: false, 1466 altKey: false, 1467 shiftKey: false, 1468 metaKey: false, 1469 button: 0, 1470 relatedTarget: null 1471 }; 1472 Evt.EmulateOnMouseEvent("mousedown", element, evt); 1473 Evt.EmulateOnMouseEvent("mouseup", element, evt); 1474 Evt.EmulateOnMouseEvent("click", element, evt); 1475} 1476Evt.DoElementClick = function(element) { 1477 try{ 1478 element.click(); 1479 } 1480 catch(e){ 1481 } 1482} 1483Evt.IsActionKeyPressed = function(evt) { 1484 return evt.keyCode === ASPx.Key.Space || 1485 evt.keyCode === ASPx.Key.Enter || 1486 (evt.keyCode === ASPx.Key.Down && evt.altKey); 1487} 1488Evt.InvokeMouseClickByKeyDown = function(evt, handler) { 1489 if(Evt.IsActionKeyPressed(evt)) { 1490 ASPx.Evt.PreventEvent(evt); 1491 if(!handler) 1492 ASPx.Evt.GetEventSource(evt).onclick(); 1493 else 1494 handler(evt); 1495 } 1496} 1497ASPx.Evt = Evt; 1498var Attr = { }; 1499Attr.GetAttribute = function(obj, attrName){ 1500 if(obj.getAttribute) 1501 return obj.getAttribute(attrName); 1502 else if(obj.getPropertyValue) 1503 return obj.getPropertyValue(attrName); 1504 return null; 1505} 1506Attr.SetAttribute = function(obj, attrName, value){ 1507 if(obj.setAttribute) { 1508 if(isSourceResetRequired() && attrName.toLowerCase() === "src") 1509 obj.setAttribute(attrName, ""); 1510 obj.setAttribute(attrName, value); 1511 } else if(obj.setProperty) 1512 obj.setProperty(attrName, value, ""); 1513} 1514Attr.RemoveAttribute = function(obj, attrName){ 1515 if(obj.removeAttribute) 1516 obj.removeAttribute(attrName); 1517 else if(obj.removeProperty) 1518 obj.removeProperty(attrName); 1519} 1520Attr.IsExistsAttribute = function(obj, attrName){ 1521 var value = Attr.GetAttribute(obj, attrName); 1522 return (value != null) && (value !== ""); 1523} 1524Attr.SetOrRemoveAttribute = function(obj, attrName, value) { 1525 if(!value) 1526 Attr.RemoveAttribute(obj, attrName); 1527 else
1528 Attr.SetAttribute(obj, attrName, value); 1529} 1530Attr.SaveAttribute = function(obj, attrName, savedObj, savedAttrName){ 1531 if(!Attr.IsExistsAttribute(savedObj, savedAttrName)){ 1532 var oldValue = Attr.IsExistsAttribute(obj, attrName) ? Attr.GetAttribute(obj, attrName) : ASPx.EmptyObject; 1533 Attr.SetAttribute(savedObj, savedAttrName, oldValue); 1534 } 1535} 1536Attr.SaveStyleAttribute = function(obj, attrName){ 1537 Attr.SaveAttribute(obj.style, attrName, obj, "saved" + attrName); 1538} 1539Attr.ChangeAttributeExtended = function(obj, attrName, savedObj, savedAttrName, newValue){ 1540 Attr.SaveAttribute(obj, attrName, savedObj, savedAttrName); 1541 Attr.SetAttribute(obj, attrName, newValue); 1542} 1543Attr.ChangeAttribute = function(obj, attrName, newValue){ 1544 Attr.ChangeAttributeExtended(obj, attrName, obj, "saved" + attrName, newValue); 1545} 1546Attr.ChangeStyleAttribute = function(obj, attrName, newValue){ 1547 Attr.ChangeAttributeExtended(obj.style, attrName, obj, "saved" + attrName, newValue); 1548} 1549Attr.ResetAttributeExtended = function(obj, attrName, savedObj, savedAttrName){ 1550 Attr.SaveAttribute(obj, attrName, savedObj, savedAttrName); 1551 Attr.SetAttribute(obj, attrName, ""); 1552 Attr.RemoveAttribute(obj, attrName); 1553} 1554Attr.ResetAttribute = function(obj, attrName){ 1555 Attr.ResetAttributeExtended(obj, attrName, obj, "saved" + attrName); 1556} 1557Attr.ResetStyleAttribute = function(obj, attrName){ 1558 Attr.ResetAttributeExtended(obj.style, attrName, obj, "saved" + attrName); 1559} 1560Attr.RestoreAttributeExtended = function(obj, attrName, savedObj, savedAttrName){ 1561 if(Attr.IsExistsAttribute(savedObj, savedAttrName)){ 1562 var oldValue = Attr.GetAttribute(savedObj, savedAttrName); 1563 if(oldValue != ASPx.EmptyObject) 1564 Attr.SetAttribute(obj, attrName, oldValue); 1565 else 1566 Attr.RemoveAttribute(obj, attrName); 1567 Attr.RemoveAttribute(savedObj, savedAttrName); 1568 return true; 1569 } 1570 return false; 1571} 1572Attr.RestoreAttribute = function(obj, attrName){ 1573 return Attr.RestoreAttributeExtended(obj, attrName, obj, "saved" + attrName); 1574} 1575Attr.RestoreStyleAttribute = function(obj, attrName){ 1576 return Attr.RestoreAttributeExtended(obj.style, attrName, obj, "saved" + attrName); 1577} 1578Attr.CopyAllAttributes = function(sourceElem, destElement) { 1579 var attrs = sourceElem.attributes; 1580 for(var n = 0; n < attrs.length; n++) { 1581 var attr = attrs[n]; 1582 if(attr.specified) { 1583 var attrName = attr.nodeName; 1584 var attrValue = sourceElem.getAttribute(attrName, 2); 1585 if(attrValue == null) 1586 attrValue = attr.nodeValue; 1587 destElement.setAttribute(attrName, attrValue, 0); 1588 } 1589 } 1590 if(sourceElem.style.cssText !== '') 1591 destElement.style.cssText = sourceElem.style.cssText; 1592} 1593Attr.RemoveAllAttributes = function(element, excludedAttributes) { 1594 var excludedAttributesHashTable = {}; 1595 if(excludedAttributes) 1596 excludedAttributesHashTable = Data.CreateHashTableFromArray(excludedAttributes); 1597 if(element.attributes) { 1598 var attrArray = element.attributes; 1599 for(var i = 0; i < attrArray.length; i++) { 1600 var attrName = attrArray[i].name; 1601 if(!ASPx.IsExists(excludedAttributesHashTable[attrName.toLowerCase()])) { 1602 try { 1603 attrArray.removeNamedItem(attrName); 1604 } catch (e) { } 1605 } 1606 } 1607 } 1608} 1609Attr.RemoveStyleAttribute = function(element, attrName) { 1610 if(element.style) { 1611 if(Browser.Firefox && element.style[attrName]) 1612 element.style[attrName] = ""; 1613 if(element.style.removeAttribute && element.style.removeAttribute != "") 1614 element.style.removeAttribute(attrName); 1615 else if(element.style.removeProperty && element.style.removeProperty != "") 1616 element.style.removeProperty(attrName); 1617 } 1618} 1619Attr.RemoveAllStyles = function(element) { 1620 if(element.style) { 1621 for(var key in element.style) 1622 Attr.RemoveStyleAttribute(element, key); 1623 Attr.RemoveAttribute(element, "style"); 1624 } 1625} 1626Attr.GetTabIndexAttributeName = function(){ 1627 return Browser.IE ? "tabIndex" : "tabindex"; 1628} 1629Attr.ChangeTabIndexAttribute = function(element){ 1630 var attribute = Attr.GetTabIndexAttributeName(); 1631 if(Attr.GetAttribute(element, attribute) != -1) 1632 Attr.ChangeAttribute(element, attribute, -1); 1633} 1634Attr.SaveTabIndexAttributeAndReset = function(element) { 1635 var attribute = Attr.GetTabIndexAttributeName(); 1636 Attr.SaveAttribute(element, attribute, element, "saved" + attribute); 1637 Attr.SetAttribute(element, attribute, -1); 1638} 1639Attr.RestoreTabIndexAttribute = function(element){ 1640 var attribute = Attr.GetTabIndexAttributeName(); 1641 if(Attr.IsExistsAttribute(element, attribute)) { 1642 if(Attr.GetAttribute(element, attribute) == -1) { 1643 if(Attr.IsExistsAttribute(element, "saved" + attribute)){ 1644 var oldValue = Attr.GetAttribute(element, "saved" + attribute); 1645 if(oldValue != ASPx.EmptyObject) 1646 Attr.SetAttribute(element, attribute, oldValue); 1647 else { 1648 if(Browser.WebKitFamily) 1649 Attr.SetAttribute(element, attribute, 0); 1650 Attr.RemoveAttribute(element, attribute); 1651 } 1652 Attr.RemoveAttribute(element, "saved" + attribute); 1653 } 1654 } 1655 } 1656} 1657Attr.ChangeAttributesMethod = function(enabled){ 1658 return enabled ? Attr.RestoreAttribute : Attr.ResetAttribute; 1659} 1660Attr.InitiallyChangeAttributesMethod = function(enabled){ 1661 return enabled ? Attr.ChangeAttribute : Attr.ResetAttribute; 1662} 1663Attr.ChangeStyleAttributesMethod = function(enabled){ 1664 return enabled ? Attr.RestoreStyleAttribute : Attr.ResetStyleAttribute; 1665} 1666Attr.InitiallyChangeStyleAttributesMethod = function(enabled){ 1667 return enabled ? Attr.ChangeStyleAttribute : Attr.ResetStyleAttribute; 1668} 1669Attr.ChangeEventsMethod = function(enabled){ 1670 return enabled ? Evt.AttachEventToElement : Evt.DetachEventFromElement; 1671} 1672Attr.ChangeDocumentEventsMethod = function(enabled){ 1673 return enabled ? Evt.AttachEventToDocument : Evt.DetachEventFromDocument; 1674} 1675Attr.ChangeCellSpanCount = function(cell, value, isColumnSpan) { 1676 if(!cell) return; 1677 var propertyKey = isColumnSpan ? "colSpan" : "rowSpan"; 1678 var prevValue = cell[propertyKey]; 1679 if(value > 1) 1680 cell[propertyKey] = value; 1681 else if(prevValue !== 1) 1682 Attr.RemoveAttribute(cell, propertyKey); 1683} 1684function isSourceResetRequired() { 1685 return Browser.IE && Browser.MajorVersion >= 11; 1686} 1687ASPx.Attr = Attr; 1688var Aria = { 1689 atomic: "aria-atomic", 1690 checked: "aria-checked", 1691 descendant: "aria-activedescendant", 1692 described: "aria-describedby", 1693 disabled: "aria-disabled", 1694 expanded: "aria-expanded", 1695 haspopup: "aria-haspopup", 1696 invalid: "aria-invalid", 1697 label: "aria-label", 1698 labelled: "aria-labelledby", 1699 level: "aria-level", 1700 owns: "aria-owns", 1701 posinset: "aria-posinset", 1702 role: "role", 1703 selected: "aria-selected", 1704 setsize: "aria-setsize", 1705 valuemax: "aria-valuemax", 1706 valuemin: "aria-valuemin", 1707 valuenow: "aria-valuenow" 1708}; 1709Aria.SetOrRemoveDescendant = function(obj, value) { 1710 ASPx.Attr.SetOrRemoveAttribute(obj, Aria.descendant, value); 1711} 1712Aria.SetOrRemoveLabel = function(obj, value) { 1713 ASPx.Attr.SetOrRemoveAttribute(obj, Aria.label, value); 1714}; 1715Aria.AppendLabel = function(obj, value, checkExists) { 1716 var currentValue = ASPx.Attr.GetAttribute(obj, Aria.label) || ""; 1717 var resultParts = [ ]; 1718 if(currentValue) 1719 resultParts.push(currentValue); 1720 var needAppendValue = value && (!checkExists || currentValue.indexOf(value) == -1); 1721 if(needAppendValue) 1722 resultParts.push(value); 1723 ASPx.Attr.SetAttribute(obj, Aria.label, resultParts.join(" ")); 1724}; 1725Aria.SetOrRemoveLabelled = function(obj, value) { 1726 ASPx.Attr.SetOrRemoveAttribute(obj, Aria.labelled, value); 1727} 1728Aria.SetApplicationRole = function(obj) { 1729 ASPx.Attr.SetAttribute(obj, Aria.role, "application"); 1730} 1731Aria.SetSilence = function(obj) { 1732 ASPx.Attr.SetAttribute(obj, Aria.label, ";"); 1733} 1734Aria.SetExpanded = function(obj, expanded) { 1735 if(!obj || !ASPx.Attr.GetAttribute(obj, Aria.expanded)) return; 1736 Aria.SetBoolAttribute(obj, Aria.expanded, expanded); 1737} 1738Aria.SetAtomic = function(obj, value) { 1739 Aria.SetBoolAttribute(obj, Aria.atomic, value); 1740} 1741Aria.SetBoolAttribute = function(obj, attribute, value) { 1742 if(value) 1743 ASPx.Attr.SetAttribute(obj, attribute, true); 1744 else 1745 ASPx.Attr.SetAttribute(obj, attribute, false); 1746} 1747ASPx.Attr.Aria = Aria; 1748var Color = { }; 1749function _aspxToHex(d) { 1750 return (d < 16) ? ("0" + d.toString(16)) : d.toString(16); 1751} 1752Color.ColorToHexadecimal = function(colorValue) { 1753 if(typeof(colorValue) == "number") { 1754 var r = colorValue & 0xFF; 1755 var g = (colorValue >> 8) & 0xFF; 1756 var b = (colorValue >> 16) & 0xFF; 1757 return "#" + _aspxToHex(r) + _aspxToHex(g) + _aspxToHex(b); 1758 } 1759 if(colorValue && (colorValue.substr(0, 3).toLowerCase() == "rgb")) { 1760 var re = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/; 1761 var regResult = colorValue.toLowerCase().match(re); 1762 if(regResult) { 1763 var r = parseInt(regResult[1]); 1764 var g = parseInt(regResult[2]); 1765 var b = parseInt(regResult[3]);
1766 return "#" + _aspxToHex(r) + _aspxToHex(g) + _aspxToHex(b); 1767 } 1768 return null; 1769 } 1770 if(colorValue && (colorValue.charAt(0) == "#")) 1771 return colorValue; 1772 return null; 1773} 1774Color.Names = { 1775 AddColorNames: function(stringResourcesObj) { 1776 if(stringResourcesObj) { 1777 for(var key in stringResourcesObj) 1778 this[key] = stringResourcesObj[key]; 1779 } 1780 } 1781} 1782ASPx.Color = Color; 1783var Url = { }; 1784Url.Navigate = function(url, target) { 1785 var javascriptPrefix = "javascript:"; 1786 if(!url || url === "") 1787 return; 1788 else if(url.indexOf(javascriptPrefix) != -1) 1789 eval(url.substr(javascriptPrefix.length)); 1790 else { 1791 try{ 1792 if(target != "") 1793 navigateTo(url, target); 1794 else 1795 location.href = url; 1796 } 1797 catch(e){ 1798 } 1799 } 1800} 1801Url.NavigateByLink = function(linkElement) { 1802 Url.Navigate(Attr.GetAttribute(linkElement, "href"), linkElement.target); 1803} 1804Url.GetAbsoluteUrl = function(url) { 1805 if(url) 1806 url = Url.getURLObject(url).href; 1807 return url; 1808} 1809var absolutePathPrefixes = 1810 [ "about:", "file:///", "ftp://", "gopher://", "http://", "https://", "javascript:", "mailto:", "news:", "res://", "telnet://", "view-source:" ]; 1811Url.isAbsoluteUrl = function(url) { 1812 if (url) { 1813 for (var i = 0; i < absolutePathPrefixes.length; i++) { 1814 if(url.indexOf(absolutePathPrefixes[i]) == 0) 1815 return true; 1816 } 1817 } 1818 return false; 1819} 1820Url.getURLObject = function(url) { 1821 var link = document.createElement('A'); 1822 link.href = url || ""; 1823 return { 1824 href: link.href, 1825 protocol: link.protocol, 1826 host: link.host, 1827 port: link.port, 1828 pathname: link.pathname, 1829 search: link.search, 1830 hash: link.hash 1831 }; 1832} 1833Url.getRootRelativeUrl = function(url) { 1834 return getRelativeUrl(url, !Url.isRootRelativeUrl(url), true); 1835} 1836Url.getPathRelativeUrl = function(url) { 1837 return getRelativeUrl(url, !Url.isPathRelativeUrl(url), false); 1838} 1839function getRelativeUrl(url, isValid, isRootRelative) { 1840 if(url && !(/data:([^;]+\/?[^;]*)(;charset=[^;]*)?(;base64,)/.test(url)) && isValid) { 1841 var urlObject = Url.getURLObject(url); 1842 var baseUrlObject = Url.getURLObject(); 1843 if(!Url.isAbsoluteUrl(url) || urlObject.host === baseUrlObject.host && urlObject.protocol === baseUrlObject.protocol) { 1844 url = urlObject.pathname; 1845 if(!isRootRelative) 1846 url = getPathRelativeUrl(baseUrlObject.pathname, url); 1847 url = url + urlObject.search + urlObject.hash; 1848 } 1849 } 1850 return url; 1851} 1852function getPathRelativeUrl(baseUrl, url) { 1853 var requestSegments = getSegments(baseUrl, false); 1854 var urlSegments = getSegments(url, true); 1855 return buildPathRelativeUrl(requestSegments, urlSegments, 0, 0, ""); 1856} 1857function getSegments(url, addTail) { 1858 var segments = []; 1859 var startIndex = 0; 1860 var endIndex = -1; 1861 while ((endIndex = url.indexOf("/", startIndex)) != -1) { 1862 segments.push(url.substring(startIndex, ++endIndex)); 1863 startIndex = endIndex; 1864 } 1865 if(addTail && startIndex < url.length) 1866 segments.push(url.substring(startIndex, url.length)); 1867 return segments; 1868} 1869function buildPathRelativeUrl(requestSegments, urlSegments, reqIndex, urlIndex, buffer) { 1870 if(urlIndex >= urlSegments.length) 1871 return buffer; 1872 if(reqIndex >= requestSegments.length) 1873 return buildPathRelativeUrl(requestSegments, urlSegments, reqIndex, urlIndex + 1, buffer + urlSegments[urlIndex]); 1874 if(requestSegments[reqIndex] === urlSegments[urlIndex] && urlIndex === reqIndex) 1875 return buildPathRelativeUrl(requestSegments, urlSegments, reqIndex + 1, urlIndex + 1, buffer); 1876 return buildPathRelativeUrl(requestSegments, urlSegments, reqIndex + 1, urlIndex, buffer + "../"); 1877} 1878Url.isPathRelativeUrl = function(url) { 1879 return !!url && !Url.isAbsoluteUrl(url) && url.indexOf("/") != 0; 1880} 1881Url.isRootRelativeUrl = function(url) { 1882 return !!url && !Url.isAbsoluteUrl(url) && url.indexOf("/") == 0 && url.indexOf("//") != 0; 1883} 1884function navigateTo(url, target) { 1885 var lowerCaseTarget = target.toLowerCase(); 1886 if("_top" == lowerCaseTarget) 1887 top.location.href = url; 1888 else if("_self" == lowerCaseTarget) 1889 location.href = url; 1890 else if("_search" == lowerCaseTarget) 1891 openInNewWindow(url) 1892 else if("_media" == lowerCaseTarget) 1893 openInNewWindow(url) 1894 else if("_parent" == lowerCaseTarget) 1895 window.parent.location.href = url; 1896 else if("_blank" == lowerCaseTarget) 1897 openInNewWindow(url) 1898 else { 1899 var frame = getFrame(top.frames, target); 1900 if(frame != null) 1901 frame.location.href = url; 1902 else 1903 openInNewWindow(url) 1904 } 1905} 1906function openInNewWindow(url) { 1907 if(ASPx.Browser.Safari) 1908 openInNewWindowViaIframe(url); 1909 else { 1910 var newWindow = window.open(); 1911 newWindow.opener = null; 1912 newWindow.location = url; 1913 } 1914} 1915function openInNewWindowViaIframe(url) { 1916 var iframe = document.createElement('iframe');
1917 iframe.style.display = 'none'; 1918 document.body.appendChild(iframe); 1919 var iframeDoc = iframe.contentDocument || iframe.contentWindow.document; 1920 var openArgs = '"' + url + '"'; 1921 var script = iframeDoc.createElement('script'); 1922 script.type = 'text/javascript'; 1923 script.text = 'window.parent = null; ' + 1924 'window.top = null;' + 1925 'window.frameElement = null;' + 1926 'var child = window.open(' + openArgs + ');' + 1927 'child.opener = null'; 1928 iframeDoc.body.appendChild(script); 1929 document.body.removeChild(iframe); 1930} 1931ASPx.Url = Url; 1932var Office = {} 1933Office.getHandlerResourceUrl = function(pageUrl) { 1934 var url = pageUrl ? pageUrl : document.URL; 1935 if(url.indexOf("?") != -1) 1936 url = url.substring(0, url.indexOf("?")); 1937 if(url.indexOf("#") != -1) 1938 url = url.substring(0, url.indexOf("#")); 1939 if(/.*\.aspx$/.test(url)) 1940 url = url.substring(0, url.lastIndexOf("/") + 1); 1941 else if(url.lastIndexOf("/") != url.length - 1) 1942 url += "/"; 1943 return url; 1944} 1945Office.isBrowserSupportExtendedClientBuffer = function() { 1946 return ASPx.Browser.WebKitFamily || (ASPx.Browser.Firefox && ASPx.Browser.MajorVersion >= 50) || (ASPx.Browser.Edge && ASPx.Browser.MajorVersion >= 14); 1947} 1948ASPx.Office = Office; 1949var Json = { }; 1950function isValid(JsonString) { 1951 return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(JsonString.replace(/"(\\.|[^"\\])*"/g, ''))) 1952} 1953Json.Eval = function(jsonString, controlName) { 1954 if(isValid(jsonString)) 1955 return eval("(" + jsonString + ")"); 1956 else 1957 throw new Error(controlName + " received incorrect JSON-data: " + jsonString); 1958} 1959Json.ToJson = function(param){ 1960 var paramType = typeof(param); 1961 if((paramType == "undefined") || (param == null)) 1962 return null; 1963 if((paramType == "object") && (typeof(param.__toJson) == "function")) 1964 return param.__toJson(); 1965 if((paramType == "number") || (paramType == "boolean")) 1966 return param; 1967 if(param.constructor == Date) 1968 return dateToJson(param); 1969 if(paramType == "string") { 1970 var result = param.replace(/\\/g, "\\\\"); 1971 result = result.replace(/"/g, "\\\""); 1972 result = result.replace(/\n/g, "\\n"); 1973 result = result.replace(/\r/g, "\\r"); 1974 result = result.replace(/</g, "\\u003c"); 1975 result = result.replace(/>/g, "\\u003e"); 1976 return "\"" + result + "\""; 1977 } 1978 if(param.constructor == Array){ 1979 var values = []; 1980 for(var i = 0; i < param.length; i++) { 1981 var jsonValue = Json.ToJson(param[i]); 1982 if(jsonValue === null) 1983 jsonValue = "null"; 1984 values.push(jsonValue); 1985 } 1986 return "[" + values.join(",") + "]"; 1987 } 1988 var exceptKeys = {}; 1989 if(ASPx.Ident.IsArray(param.__toJsonExceptKeys)) 1990 exceptKeys = Data.CreateHashTableFromArray(param.__toJsonExceptKeys); 1991 exceptKeys["__toJsonExceptKeys"] = 1; 1992 var values = []; 1993 for(var key in param){ 1994 if(ASPx.IsFunction(param[key])) 1995 continue; 1996 if(exceptKeys[key] == 1) 1997 continue; 1998 values.push(Json.ToJson(key) + ":" + Json.ToJson(param[key])); 1999 } 2000 return "{" + values.join(",") + "}"; 2001} 2002function dateToJson(date) { 2003 var result = [ 2004 date.getFullYear(), 2005 date.getMonth(), 2006 date.getDate() 2007 ]; 2008 var time = { 2009 h: date.getHours(), 2010 m: date.getMinutes(), 2011 s: date.getSeconds(), 2012 ms: date.getMilliseconds() 2013 }; 2014 if(time.h || time.m || time.s || time.ms) 2015 result.push(time.h); 2016 if(time.m || time.s || time.ms) 2017 result.push(time.m); 2018 if(time.s || time.ms) 2019 result.push(time.s); 2020 if(time.ms) 2021 result.push(time.ms); 2022 return "new Date(" + result.join() + ")"; 2023} 2024ASPx.Json = Json; 2025ASPx.CreateClass = function(parentClass, properties) { 2026 var ret = function() { 2027 if(ret.preparing) 2028 return delete(ret.preparing); 2029 if(ret.constr) { 2030 this.constructor = ret; 2031 ret.constr.apply(this, arguments); 2032 } 2033 } 2034 ret.prototype = {}; 2035 if(parentClass) { 2036 parentClass.preparing = true; 2037 for(var name in parentClass) { 2038 if(parentClass.hasOwnProperty(name) && name != 'constr' && ASPx.IsFunction(parentClass[name]) && !ret[name]) 2039 ret[name] = parentClass[name].aspxBind(parentClass); 2040 } 2041 ret.prototype = new parentClass; 2042 ret.prototype.constructor = parentClass; 2043 ret.constr = parentClass; 2044 } 2045 if(properties) { 2046 var constructorName = "constructor"; 2047 for(var name in properties){ 2048 if(name != constructorName) 2049 ret.prototype[name] = properties[name]; 2050 } 2051 if(properties[constructorName] && properties[constructorName] != Object) 2052 ret.constr = properties[constructorName]; 2053 } 2054 return ret; 2055} 2056ASPx.FormatCallbackArg = function(prefix, arg) { 2057 if(prefix == null && arg == null) 2058 return ""; 2059 if(prefix == null) prefix = ""; 2060 if(arg == null) arg = ""; 2061 if(arg != null && !ASPx.IsExists(arg.length) && ASPx.IsExists(arg.value)) 2062 arg = arg.value; 2063 arg = arg.toString(); 2064 return [prefix, '|', arg.length, '|' , arg].join(''); 2065} 2066ASPx.FormatCallbackArgs = function(callbackData) { 2067 var sb = [ ]; 2068 for(var i = 0; i < callbackData.length; i++) 2069 sb.push(ASPx.FormatCallbackArg(callbackData[i][0], callbackData[i][1])); 2070 return sb.join(""); 2071} 2072ASPx.ParseShortcutString = function(shortcutString) { 2073 if(!shortcutString) 2074 return 0; 2075 var isCtrlKey = false; 2076 var isShiftKey = false; 2077 var isAltKey = false; 2078 var isMetaKey = false; 2079 var keyCode = null; 2080 var shcKeys = shortcutString.toString().split("+"); 2081 if(shcKeys.length > 0) { 2082 for(var i = 0; i < shcKeys.length; i++) { 2083 var key = Str.Trim(shcKeys[i].toUpperCase()); 2084 switch (key) { 2085 case "CTRL": 2086 isCtrlKey = true; 2087 break; 2088 case "SHIFT": 2089 isShiftKey = true; 2090 break; 2091 case "ALT": 2092 isAltKey = true; 2093 break; 2094 case "CMD": 2095 isMetaKey = true; 2096 break; 2097 case "F1": keyCode = ASPx.Key.F1; break; 2098 case "F2": keyCode = ASPx.Key.F2; break; 2099 case "F3": keyCode = ASPx.Key.F3; break; 2100 case "F4": keyCode = ASPx.Key.F4; break; 2101 case "F5": keyCode = ASPx.Key.F5; break; 2102 case "F6": keyCode = ASPx.Key.F6; break; 2103 case "F7": keyCode = ASPx.Key.F7; break; 2104 case "F8": keyCode = ASPx.Key.F8; break; 2105 case "F9": keyCode = ASPx.Key.F9; break; 2106 case "F10": keyCode = ASPx.Key.F10; break; 2107 case "F11": keyCode = ASPx.Key.F11; break; 2108 case "F12": keyCode = ASPx.Key.F12; break; 2109 case "ENTER": keyCode = ASPx.Key.Enter; break; 2110 case "HOME": keyCode = ASPx.Key.Home; break; 2111 case "END": keyCode = ASPx.Key.End; break; 2112 case "LEFT": keyCode = ASPx.Key.Left; break; 2113 case "RIGHT": keyCode = ASPx.Key.Right; break; 2114 case "UP": keyCode = ASPx.Key.Up; break; 2115 case "DOWN": keyCode = ASPx.Key.Down; break; 2116 case "PAGEUP": keyCode = ASPx.Key.PageUp; break; 2117 case "PAGEDOWN": keyCode = ASPx.Key.PageDown; break; 2118 case "SPACE": keyCode = ASPx.Key.Space; break; 2119 case "TAB": keyCode = ASPx.Key.Tab; break; 2120 case "BACK": keyCode = ASPx.Key.Backspace; break; 2121 case "CONTEXT": keyCode = ASPx.Key.ContextMenu; break; 2122 case "ESCAPE": 2123 case "ESC": 2124 keyCode = ASPx.Key.Esc; 2125 break; 2126 case "DELETE": 2127 case "DEL": 2128 keyCode = ASPx.Key.Delete; 2129 break; 2130 case "INSERT": 2131 case "INS": 2132 keyCode = ASPx.Key.Insert; 2133 break; 2134 case "PLUS": 2135 keyCode = "+".charCodeAt(0); 2136 break; 2137 default:
2138 keyCode = key.charCodeAt(0); 2139 break; 2140 } 2141 } 2142 } else 2143 ASPx.ShowErrorAlert("Invalid shortcut"); 2144 return ASPx.GetShortcutCode(keyCode, isCtrlKey, isShiftKey, isAltKey, isMetaKey); 2145} 2146ASPx.GetShortcutCode = function(keyCode, isCtrlKey, isShiftKey, isAltKey, isMetaKey) { 2147 var value = keyCode & 0xFFFF; 2148 var flags = 0; 2149 flags |= isCtrlKey ? 1 << 0 : 0; 2150 flags |= isShiftKey ? 1 << 2 : 0; 2151 flags |= isAltKey ? 1 << 4 : 0; 2152 flags |= isMetaKey ? 1 << 8 : 0; 2153 value |= flags << 16; 2154 return value; 2155} 2156ASPx.GetShortcutCodeByEvent = function(evt) { 2157 return ASPx.GetShortcutCode(Evt.GetKeyCode(evt), evt.ctrlKey, evt.shiftKey, evt.altKey, ASPx.Browser.MacOSPlatform ? evt.metaKey : false); 2158} 2159ASPx.IsPasteShortcut = function(evt) { 2160 if(evt.type === "paste") 2161 return true; 2162 var keyCode = Evt.GetKeyCode(evt); 2163 if(Browser.NetscapeFamily && evt.which == 0) 2164 keyCode = evt.keyCode; 2165 return (evt.ctrlKey && (keyCode == 118 || (keyCode == 86))) || 2166 (evt.shiftKey && !evt.ctrlKey && !evt.altKey && 2167 (keyCode == ASPx.Key.Insert)) ; 2168} 2169ASPx.SetFocus = function(element, selectAction) { 2170 function focusCore(element, selectAction){ 2171 try { 2172 element.focus(); 2173 if(Browser.IE && document.activeElement != element) 2174 element.focus(); 2175 if(selectAction) { 2176 var currentSelection = Selection.GetInfo(element); 2177 if(currentSelection.startPos == currentSelection.endPos) { 2178 switch(selectAction) { 2179 case "start": 2180 Selection.SetCaretPosition(element, 0); 2181 break; 2182 case "all": 2183 Selection.Set(element); 2184 break; 2185 } 2186 } 2187 } 2188 } catch (e) { 2189 } 2190 } 2191 if(ASPxClientUtils.iOSPlatform) 2192 focusCore(element, selectAction); 2193 else { 2194 window.setTimeout(function() { 2195 focusCore(element, selectAction); 2196 }, 100); 2197 } 2198} 2199ASPx.IsFocusableCore = function(element, skipContainerVisibilityCheck) { 2200 var current = element; 2201 while(current && current.nodeType == 1) { 2202 if(current == element || !skipContainerVisibilityCheck(current)) { 2203 if(current.tagName == "BODY") 2204 return true; 2205 if(current.disabled || !ASPx.GetElementDisplay(current) || !ASPx.GetElementVisibility(current)) 2206 return false; 2207 } 2208 current = current.parentNode; 2209 } 2210 return true; 2211} 2212ASPx.IsFocusable = function(element) { 2213 return ASPx.IsFocusableCore(element, ASPx.FalseFunction); 2214} 2215ASPx.IsActionElement = function(element) { 2216 if(!ASPx.IsExistsElement(element)) 2217 return false; 2218 var tabIndex = parseInt(ASPx.Attr.GetAttribute(element, ASPx.Attr.GetTabIndexAttributeName())); 2219 var hasTabIndex = !isNaN(tabIndex); 2220 var hasNonNegativeTabIndex = hasTabIndex && tabIndex > -1; 2221 var hasNegativeTabIndex = hasTabIndex && tabIndex < 0; 2222 var tagName = element.tagName; 2223 var focusableElementTags = ["BUTTON", "SELECT", "TEXTAREA", "OPTION", "IFRAME"]; 2224 var isFocusableCore = ASPx.IsFocusable(element); 2225 var isFocusableTag = focusableElementTags.indexOf(tagName) !== -1; 2226 var isFocusableLink = tagName === "A" && (!!element.href || hasNonNegativeTabIndex); 2227 var isFocusableInput = tagName === "INPUT" && element.type.toLowerCase() !== "hidden"; 2228 var isFocusableByTabIndex = tagName !== "INPUT" && hasNonNegativeTabIndex; 2229 return isFocusableCore && !hasNegativeTabIndex && (isFocusableTag || isFocusableLink || isFocusableInput || isFocusableByTabIndex); 2230}; 2231ASPx.GetCanBeActiveElementsInContainer = function(container) { 2232 var canBeActiveTags = ["INPUT", "A", "UL", "BUTTON", "TEXTAREA", "SELECT", "IFRAME"], 2233 canBeActiveElements = []; 2234 Data.ForEach(canBeActiveTags, function(tag) { 2235 var elements = container.getElementsByTagName(tag); 2236 canBeActiveElements = canBeActiveElements.concat([].slice.call(elements)); 2237 }); 2238 return canBeActiveElements; 2239}; 2240function isActionElementAllowedByPredicate(element, predicate) { 2241 var allowedByPredicate = !predicate || predicate(element); 2242 return allowedByPredicate && ASPx.IsActionElement(element); 2243} 2244ASPx.FindChildActionElements = function(container, predicate) { 2245 return ASPx.GetNodes(container, function(el) { 2246 return isActionElementAllowedByPredicate(el, predicate); 2247 }); 2248} 2249ASPx.FindAllSortedActionElements = function(container, predicate) { 2250 var result = [ ]; 2251 if(!container || !container.getElementsByTagName) return result; 2252 var actionElements = ASPx.FindChildActionElements(container, predicate); 2253 var getTabOrderValue = function(el) { 2254 var tabIndex = parseInt(ASPx.Attr.GetAttribute(el, ASPx.Attr.GetTabIndexAttributeName())); 2255 return isNaN(tabIndex) ? 0 : tabIndex; 2256 } 2257 var positiveTabIndexElements = actionElements.filter(function(x) { return getTabOrderValue(x) > 0; }); 2258 var nonPositiveTabIndexElements = actionElements.filter(function(x) { return getTabOrderValue(x) === 0; }); 2259 var sortedTabIndexElements = positiveTabIndexElements.sort(function(x, y) { return getTabOrderValue(x) - getTabOrderValue(y); }); 2260 result = sortedTabIndexElements.concat(nonPositiveTabIndexElements); 2261 return result; 2262} 2263ASPx.FindFirstChildActionElement = function(container, predicate) { 2264 if(!container || isActionElementAllowedByPredicate(container, predicate)) 2265 return !container ? null : container; 2266 var sortedActionElements = ASPx.FindAllSortedActionElements(container, predicate); 2267 return sortedActionElements[0]; 2268} 2269ASPx.FindLastChildActionElement = function(container, predicate) { 2270 if(!container) 2271 return null; 2272 var sortedActionElements = ASPx.FindAllSortedActionElements(container, predicate); 2273 var actionElement = sortedActionElements[sortedActionElements.length - 1]; 2274 if(!actionElement && isActionElementAllowedByPredicate(container, predicate)) 2275 actionElement = container; 2276 return actionElement; 2277} 2278ASPx.GetParentClientControls = function(name) {
2279 nameParts = name.split("_"); 2280 var result = [ ]; 2281 var controlCollection = ASPx.GetControlCollection(); 2282 for(var i = 1; i <= nameParts.length; i++) { 2283 var controlName = nameParts.slice(0, i).join("_"); 2284 var control = controlCollection.Get(controlName); 2285 if(control) 2286 result.push(control); 2287 } 2288 return result; 2289} 2290ASPx.GetRootClientControl = function(childControlName) { 2291 var parentControls = ASPx.GetParentClientControls(childControlName); 2292 return parentControls[0]; 2293} 2294ASPx.GetClientControlByElementID = function(elementID) { 2295 var parentControls = ASPx.GetParentClientControls(elementID); 2296 return parentControls[parentControls.length - 1]; 2297} 2298ASPx.IsExists = function(obj){ 2299 return (typeof(obj) != "undefined") && (obj != null); 2300} 2301ASPx.IsFunction = function(obj){ 2302 return typeof(obj) == "function"; 2303} 2304ASPx.IsNumber = function(str) { 2305 return !isNaN(parseFloat(str)) && isFinite(str); 2306} 2307ASPx.GetDefinedValue = function(value, defaultValue){ 2308 return (typeof(value) != "undefined") ? value : defaultValue; 2309} 2310ASPx.CorrectJSFloatNumber = function(number) { 2311 var ret = 21; 2312 var numString = number.toPrecision(21); 2313 numString = numString.replace("-", ""); 2314 var integerDigitsCount = numString.indexOf(ASPx.PossibleNumberDecimalSeparators[0]); 2315 if(integerDigitsCount < 0) 2316 integerDigitsCount = numString.indexOf(ASPx.PossibleNumberDecimalSeparators[1]); 2317 var floatDigitsCount = numString.length - integerDigitsCount - 1; 2318 if(floatDigitsCount < 10) 2319 return number; 2320 if(integerDigitsCount > 0) { 2321 ret = integerDigitsCount + 12; 2322 } 2323 var toPrecisionNumber = Math.min(ret, 21); 2324 var newValueString = number.toPrecision(toPrecisionNumber); 2325 return parseFloat(newValueString, 10); 2326} 2327ASPx.CorrectRounding = function(number, step) { 2328 var regex = /[,|.](.*)/, 2329 isFloatValue = regex.test(number), 2330 isFloatStep = regex.test(step); 2331 if(isFloatValue || isFloatStep) { 2332 var valueAccuracy = (isFloatValue) ? regex.exec(number)[0].length - 1 : 0, 2333 stepAccuracy = (isFloatStep) ? regex.exec(step)[0].length - 1 : 0, 2334 accuracy = Math.max(valueAccuracy, stepAccuracy); 2335 var multiplier = Math.pow(10, accuracy); 2336 number = Math.round((number + step) * multiplier) / multiplier; 2337 return number; 2338 } 2339 return number + step; 2340} 2341ASPx.GetActiveElement = function() { 2342 try{ return document.activeElement; } catch(e) { return null; } 2343} 2344var verticalScrollBarWidth; 2345ASPx.GetVerticalScrollBarWidth = function() { 2346 if(typeof(verticalScrollBarWidth) == "undefined") { 2347 var container = document.createElement("DIV"); 2348 container.style.cssText = "position: absolute; top: 0px; left: 0px; visibility: hidden; width: 200px; height: 150px; overflow: hidden; box-sizing: content-box"; 2349 document.body.appendChild(container); 2350 var child = document.createElement("P"); 2351 container.appendChild(child); 2352 child.style.cssText = "width: 100%; height: 200px;"; 2353 var widthWithoutScrollBar = child.offsetWidth; 2354 container.style.overflow = "scroll"; 2355 var widthWithScrollBar = child.offsetWidth; 2356 if(widthWithoutScrollBar == widthWithScrollBar) 2357 widthWithScrollBar = container.clientWidth; 2358 verticalScrollBarWidth = widthWithoutScrollBar - widthWithScrollBar; 2359 document.body.removeChild(container); 2360 } 2361 return verticalScrollBarWidth; 2362} 2363function hideScrollBarCore(element, scrollName) { 2364 if(element.tagName == "IFRAME") { 2365 if((element.scrolling == "yes") || (element.scrolling == "auto")) { 2366 Attr.ChangeAttribute(element, "scrolling", "no"); 2367 return true; 2368 } 2369 } 2370 else if(element.tagName == "DIV") { 2371 if((element.style[scrollName] == "scroll") || (element.style[scrollName] == "auto")) { 2372 Attr.ChangeStyleAttribute(element, scrollName, "hidden"); 2373 return true; 2374 } 2375 } 2376 return false; 2377} 2378function restoreScrollBarCore(element, scrollName) { 2379 if(element.tagName == "IFRAME") 2380 return Attr.RestoreAttribute(element, "scrolling"); 2381 else if(element.tagName == "DIV") 2382 return Attr.RestoreStyleAttribute(element, scrollName); 2383 return false; 2384} 2385ASPx.SetScrollBarVisibilityCore = function(element, scrollName, isVisible) { 2386 return isVisible ? restoreScrollBarCore(element, scrollName) : hideScrollBarCore(element, scrollName); 2387} 2388ASPx.SetScrollBarVisibility = function(element, isVisible) { 2389 if(ASPx.SetScrollBarVisibilityCore(element, "overflow", isVisible)) 2390 return true; 2391 var result = ASPx.SetScrollBarVisibilityCore(element, "overflowX", isVisible) 2392 || ASPx.SetScrollBarVisibilityCore(element, "overflowY", isVisible); 2393 return result; 2394} 2395ASPx.SetInnerHtml = function(element, html) { 2396 if(Browser.IE) { 2397 element.innerHTML = "<em> </em>" + html; 2398 element.removeChild(element.firstChild); 2399 } else 2400 element.innerHTML = html; 2401} 2402ASPx.GetInnerText = function(container) { 2403 if(Browser.Safari && Browser.MajorVersion <= 5) { 2404 var filter = getHtml2PlainTextFilter(); 2405 filter.innerHTML = container.innerHTML; 2406 ASPx.SetElementDisplay(filter, true); 2407 var innerText = filter.innerText; 2408 ASPx.SetElementDisplay(filter, false); 2409 return innerText; 2410 } else if(Browser.NetscapeFamily || Browser.WebKitFamily || (Browser.IE && Browser.Version >= 9) || Browser.Edge) { 2411 return container.textContent; 2412 } else 2413 return container.innerText; 2414} 2415var html2PlainTextFilter = null; 2416function getHtml2PlainTextFilter() { 2417 if(html2PlainTextFilter == null) { 2418 html2PlainTextFilter = document.createElement("DIV"); 2419 html2PlainTextFilter.style.width = "0"; 2420 html2PlainTextFilter.style.height = "0"; 2421 html2PlainTextFilter.style.overflow = "visible"; 2422 ASPx.SetElementDisplay(html2PlainTextFilter, false); 2423 document.body.appendChild(html2PlainTextFilter); 2424 } 2425 return html2PlainTextFilter; 2426} 2427ASPx.CreateHiddenField = function(name, id) { 2428 var input = document.createElement("INPUT"); 2429 input.setAttribute("type", "hidden"); 2430 if(name) 2431 input.setAttribute("name", name); 2432 if(id) 2433 input.setAttribute("id", id); 2434 return input; 2435} 2436ASPx.CloneObject = function(srcObject) { 2437 if(typeof(srcObject) != 'object' || srcObject == null) 2438 return srcObject; 2439 var newObject = { }; 2440 for(var i in srcObject) 2441 newObject[i] = srcObject[i]; 2442 return newObject; 2443} 2444ASPx.IsPercentageSize = function(size) { 2445 return size && size.indexOf('%') != -1; 2446} 2447ASPx.GetElementById = function(id) { 2448 if(document.getElementById) 2449 return document.getElementById(id); 2450 else
2451 return document.all[id]; 2452} 2453ASPx.GetInputElementById = function(id) { 2454 var elem = ASPx.GetElementById(id); 2455 if(!Browser.IE) 2456 return elem; 2457 if(elem) { 2458 if(elem.id == id) 2459 return elem; 2460 else { 2461 for(var i = 1; i < document.all[id].length; i++) { 2462 if(document.all[id][i].id == id) 2463 return document.all[id][i]; 2464 } 2465 } 2466 } 2467 return null; 2468} 2469ASPx.GetElementByIdInDocument = function(documentObj, id) { 2470 if(documentObj.getElementById) 2471 return documentObj.getElementById(id); 2472 else 2473 return documentObj.all[id]; 2474} 2475ASPx.GetIsParent = function(parentElement, element) { 2476 if(!parentElement || !element) 2477 return false; 2478 while(element){ 2479 if(element === parentElement) 2480 return true; 2481 if(element.tagName === "BODY") 2482 return false; 2483 element = element.parentNode; 2484 } 2485 return false; 2486} 2487ASPx.GetParentById = function(element, id) { 2488 element = element.parentNode; 2489 while(element){ 2490 if(element.id === id) 2491 return element; 2492 element = element.parentNode; 2493 } 2494 return null; 2495} 2496ASPx.GetParentByPartialId = function(element, idPart){ 2497 while(element && element.tagName != "BODY") { 2498 if(element.id && element.id.match(idPart)) 2499 return element; 2500 element = element.parentNode; 2501 } 2502 return null; 2503} 2504ASPx.GetParentByTagName = function(element, tagName) { 2505 tagName = tagName.toUpperCase(); 2506 while(element) { 2507 if(element.tagName === "BODY") 2508 return null; 2509 if(element.tagName === tagName) 2510 return element; 2511 element = element.parentNode; 2512 } 2513 return null; 2514} 2515function getParentByClassNameInternal(element, className, selector) { 2516 while(element != null) { 2517 if(element.tagName == "BODY" || element.nodeName == "#document") 2518 return null; 2519 if(selector(element, className)) 2520 return element; 2521 element = element.parentNode; 2522 } 2523 return null; 2524} 2525ASPx.GetParentByPartialClassName = function(element, className) { 2526 return getParentByClassNameInternal(element, className, ASPx.ElementContainsCssClass); 2527} 2528ASPx.GetParentByClassName = function(element, className) { 2529 return getParentByClassNameInternal(element, className, ASPx.ElementHasCssClass); 2530} 2531ASPx.GetParentByTagNameAndAttributeValue = function(element, tagName, attrName, attrValue) { 2532 tagName = tagName.toUpperCase(); 2533 while(element != null) { 2534 if(element.tagName == "BODY") 2535 return null; 2536 if(element.tagName == tagName && element[attrName] == attrValue) 2537 return element; 2538 element = element.parentNode; 2539 } 2540 return null; 2541} 2542ASPx.GetParent = function(element, testFunc){ 2543 if (!ASPx.IsExists(testFunc)) return null; 2544 while(element != null && element.tagName != "BODY"){ 2545 if(testFunc(element)) 2546 return element; 2547 element = element.parentNode; 2548 } 2549 return null; 2550} 2551ASPx.GetElementTreeLine = function(element, stopTagName, stopFunc) { 2552 var result = []; 2553 stopTagName = stopTagName || "BODY"; 2554 while(element != null) { 2555 if(!stopFunc && element.tagName == stopTagName) 2556 break; 2557 if(stopFunc && stopFunc(element)) 2558 break; 2559 result.push(element); 2560 element = element.parentNode; 2561 } 2562 return result; 2563}, 2564ASPx.IsScrollableElement = function(element, isHorzScrollable, isVertScrollable) { 2565 isHorzScrollable = ASPx.IsExists(isHorzScrollable) ? isHorzScrollable : true; 2566 isVertScrollable = ASPx.IsExists(isVertScrollable) ? isVertScrollable : true; 2567 var style = ASPx.GetCurrentStyle(element); 2568 var overflowStyleNames = [ "overflow" ]; 2569 if(isHorzScrollable) 2570 overflowStyleNames.push("overflowX"); 2571 if(isVertScrollable) 2572 overflowStyleNames.push("overflowY"); 2573 for(var i = 0; i < overflowStyleNames.length; i++) 2574 if(style[overflowStyleNames[i]] == "scroll" || style[overflowStyleNames[i]] == "auto") 2575 return true; 2576 return false; 2577}, 2578ASPx.GetPreviousSibling = function(el) { 2579 if(el.previousElementSibling) { 2580 return el.previousElementSibling; 2581 } else { 2582 while(el = el.previousSibling) { 2583 if(el.nodeType === 1) 2584 return el; 2585 } 2586 } 2587} 2588ASPx.ElementHasCssClass = function(element, className) { 2589 try { 2590 var classList = element.classList; 2591 if(!classList) { 2592 if(!element.className) 2593 return false; 2594 var elementClasses = element.className.split(" "); 2595 } 2596 var classNames = className.split(" "); 2597 for(var i = classNames.length - 1; i >= 0; i--) { 2598 if(classList) { 2599 if(!classList.contains(classNames[i])) 2600 return false; 2601 continue; 2602 } 2603 if(Data.ArrayIndexOf(elementClasses, classNames[i]) < 0) 2604 return false; 2605 } 2606 return true; 2607 } catch(e) { 2608 return false; 2609 } 2610} 2611ASPx.ElementContainsCssClass = function(element, className) { 2612 try { 2613 if(!element.className) 2614 return false; 2615 return element.className.indexOf(className) != -1; 2616 } catch(e) { 2617 return false; 2618 } 2619} 2620ASPx.AddClassNameToElement = function (element, className) { 2621 if(!element || typeof(className) !== "string" ) return; 2622 className = className.trim(); 2623 if(!ASPx.ElementHasCssClass(element, className) && className !== "") 2624 element.className = (element.className === "") ? className : element.className + " " + className; 2625} 2626ASPx.RemoveClassNameFromElement = function(element, className) { 2627 if(!element) return; 2628 var updClassName = " " + element.className + " "; 2629 var newClassName = updClassName.replace(" " + className + " ", " "); 2630 if(updClassName.length != newClassName.length) 2631 element.className = Str.Trim(newClassName); 2632} 2633ASPx.GetClassNameList = function(element) { 2634 if(element.classList) 2635 return [ ].slice.call(element.classList); 2636 return element.className.replace(/^\s+|\s+$/g, '').split(/\s+/); 2637} 2638function nodeListToArray(nodeList, filter) { 2639 var result = []; 2640 for(var i = 0, element; element = nodeList[i]; i++) { 2641 if(filter && !filter(element)) 2642 continue; 2643 result.push(element); 2644 } 2645 return result; 2646} 2647function getItemByIndex(collection, index) { 2648 if(!index) index = 0; 2649 if(collection != null && collection.length > index) 2650 return collection[index]; 2651 return null; 2652} 2653ASPx.GetChildNodesByClassName = function(parent, className) { 2654 if(parent.querySelectorAll) { 2655 var children = parent.querySelectorAll('.' + className); 2656 return nodeListToArray(children, function(element) { 2657 return element.parentNode === parent; 2658 }); 2659 } 2660 return ASPx.GetChildNodes(parent, function(elem) { return elem.className && ASPx.ElementHasCssClass(elem, className); }); 2661} 2662ASPx.GetChildNodesByPartialClassName = function(element, className) { 2663 return ASPx.GetChildElementNodesByPredicate(element, 2664 function(child) { 2665 return ASPx.ElementContainsCssClass(child, className); 2666 }); 2667} 2668ASPx.GetChildByPartialClassName = function(element, className, index) { 2669 if(element != null){ 2670 var collection = ASPx.GetChildNodesByPartialClassName(element, className); 2671 return getItemByIndex(collection, index); 2672 } 2673 return null; 2674} 2675ASPx.GetChildByClassName = function(element, className, index) { 2676 if(element != null){ 2677 var collection = ASPx.GetChildNodesByClassName(element, className); 2678 return getItemByIndex(collection, index); 2679 } 2680 return null; 2681} 2682ASPx.GetNodesByPartialClassName = function(element, className) { 2683 if(element.querySelectorAll) { 2684 var list = element.querySelectorAll('*[class*=' + className + ']'); 2685 return nodeListToArray(list); 2686 } 2687 var collection = element.all || element.getElementsByTagName('*'); 2688 var ret = [ ]; 2689 if(collection != null) { 2690 for(var i = 0; i < collection.length; i ++) { 2691 if(ASPx.ElementContainsCssClass(collection[i], className))
2692 ret.push(collection[i]); 2693 } 2694 } 2695 return ret; 2696} 2697ASPx.GetNodesByClassName = function(parent, className) { 2698 if(parent.querySelectorAll) { 2699 var children = parent.querySelectorAll('.' + className); 2700 return nodeListToArray(children); 2701 } 2702 return ASPx.GetNodes(parent, function(elem) { return elem.className && ASPx.ElementHasCssClass(elem, className); }); 2703} 2704ASPx.GetNodeByClassName = function(element, className, index) { 2705 if(element != null){ 2706 var collection = ASPx.GetNodesByClassName(element, className); 2707 return getItemByIndex(collection, index); 2708 } 2709 return null; 2710} 2711ASPx.GetChildById = function(element, id) { 2712 if(element.all) { 2713 var child = element.all[id]; 2714 if(!child) { 2715 child = element.all(id); 2716 if(!child) 2717 return Browser.IE ? document.getElementById(id) : null; 2718 } 2719 if(!ASPx.IsExists(child.length)) 2720 return child; 2721 else 2722 return ASPx.GetElementById(id); 2723 } 2724 else 2725 return ASPx.GetElementById(id); 2726} 2727ASPx.GetNodesByPartialId = function(element, partialName, list) { 2728 if(element.id && element.id.indexOf(partialName) > -1) 2729 list.push(element); 2730 if(element.childNodes) { 2731 for(var i = 0; i < element.childNodes.length; i ++) 2732 ASPx.GetNodesByPartialId(element.childNodes[i], partialName, list); 2733 } 2734} 2735ASPx.GetNodesByTagName = function(element, tagName) { 2736 tagName = tagName.toUpperCase(); 2737 if(element) { 2738 if(element.getElementsByTagName) 2739 return element.getElementsByTagName(tagName); 2740 else if(element.all && element.all.tags !== undefined) 2741 return Browser.Netscape ? element.all.tags[tagName] : element.all.tags(tagName); 2742 } 2743 return null; 2744} 2745ASPx.GetNodeByTagName = function(element, tagName, index) { 2746 if(element != null){ 2747 var collection = ASPx.GetNodesByTagName(element, tagName); 2748 return getItemByIndex(collection, index); 2749 } 2750 return null; 2751} 2752ASPx.GetChildNodesByTagName = function(parent, tagName) { 2753 return ASPx.GetChildNodes(parent, function (child) { return child.tagName === tagName; }); 2754} 2755ASPx.GetChildByTagName = function(element, tagName, index) { 2756 if(element != null){ 2757 var collection = ASPx.GetChildNodesByTagName(element, tagName); 2758 return getItemByIndex(collection, index); 2759 } 2760 return null; 2761} 2762ASPx.RetrieveByPredicate = function(scourceCollection, predicate) { 2763 var result = []; 2764 for(var i = 0; i < scourceCollection.length; i++) { 2765 var element = scourceCollection[i]; 2766 if(!predicate || predicate(element)) 2767 result.push(element); 2768 } 2769 return result; 2770} 2771ASPx.GetChildNodes = function(parent, predicate) { 2772 return ASPx.RetrieveByPredicate(parent.childNodes, predicate); 2773} 2774ASPx.GetNodes = function(parent, predicate) { 2775 var c = parent.all || parent.getElementsByTagName('*'); 2776 return ASPx.RetrieveByPredicate(c, predicate); 2777} 2778ASPx.GetChildElementNodes = function(parent) { 2779 if(!parent) return null; 2780 return ASPx.GetChildNodes(parent, function(e) { return e.nodeType == 1 }) 2781} 2782ASPx.GetChildElementNodesByPredicate = function(parent, predicate) { 2783 if(!parent) return null; 2784 if(!predicate) return ASPx.GetChildElementNodes(parent); 2785 return ASPx.GetChildNodes(parent, function(e) { return e.nodeType == 1 && predicate(e); }) 2786} 2787ASPx.GetTextNode = function(element, index) { 2788 if(element != null){ 2789 var collection = [ ]; 2790 ASPx.GetTextNodes(element, collection); 2791 return getItemByIndex(collection, index); 2792 } 2793 return null; 2794} 2795ASPx.GetTextNodes = function(element, collection) { 2796 for(var i = 0; i < element.childNodes.length; i ++){ 2797 var childNode = element.childNodes[i]; 2798 if(ASPx.IsExists(childNode.nodeValue)) 2799 collection.push(childNode); 2800 ASPx.GetTextNodes(childNode, collection); 2801 } 2802} 2803ASPx.GetNormalizedTextNode = function(element, index) { 2804 var textNode = ASPx.GetTextNode(element, index); 2805 if(textNode != null) 2806 ASPx.MergeAdjacentTextNodes(textNode); 2807 return textNode; 2808} 2809ASPx.MergeAdjacentTextNodes = function(firstTextNode) { 2810 if(!ASPx.IsExists(firstTextNode.nodeValue)) 2811 return; 2812 var textNode = firstTextNode; 2813 while(textNode.nextSibling && ASPx.IsExists(textNode.nextSibling.nodeValue)) { 2814 textNode.nodeValue += textNode.nextSibling.nodeValue; 2815 textNode.parentNode.removeChild(textNode.nextSibling); 2816 } 2817} 2818ASPx.GetElementDocument = function(element) { 2819 return element.document || element.ownerDocument; 2820} 2821ASPx.RemoveElement = function(element) { 2822 if(element && element.parentNode) 2823 element.parentNode.removeChild(element); 2824} 2825ASPx.ReplaceTagName = function(element, newTagName, cloneChilds) { 2826 if(element.nodeType != 1) 2827 return null; 2828 if(element.nodeName == newTagName) 2829 return element; 2830 cloneChilds = cloneChilds !== undefined ? cloneChilds : true; 2831 var doc = element.ownerDocument; 2832 var newElem = doc.createElement(newTagName); 2833 Attr.CopyAllAttributes(element, newElem); 2834 if(cloneChilds) { 2835 for(var i = 0; i < element.childNodes.length; i++) 2836 newElem.appendChild(element.childNodes[i].cloneNode(true)); 2837 } 2838 else { 2839 for(var child; child = element.firstChild; ) 2840 newElem.appendChild(child); 2841 } 2842 element.parentNode.replaceChild(newElem, element); 2843 return newElem; 2844} 2845ASPx.RemoveOuterTags = function(element) { 2846 if(ASPx.Browser.IE) { 2847 element.insertAdjacentHTML( 'beforeBegin', element.innerHTML ) ; 2848 ASPx.RemoveElement(element); 2849 } else { 2850 var docFragment = element.ownerDocument.createDocumentFragment(); 2851 for(var i = 0; i < element.childNodes.length; i++) 2852 docFragment.appendChild(element.childNodes[i].cloneNode(true)); 2853 element.parentNode.replaceChild(docFragment, element); 2854 } 2855} 2856ASPx.WrapElementInNewElement = function(element, newElementTagName) { 2857 var wrapElement = null; 2858 if(Browser.IE) { 2859 var wrapElement = element.ownerDocument.createElement(newElementTagName); 2860 wrapElement.appendChild(element.cloneNode(true)); 2861 element.parentNode.insertBefore(wrapElement, element); 2862 element.parentNode.removeChild(element); 2863 } else { 2864 var docFragment = element.ownerDocument.createDocumentFragment(); 2865 wrapElement = element.ownerDocument.createElement(newElementTagName); 2866 docFragment.appendChild(wrapElement); 2867 wrapElement.appendChild(element.cloneNode(true)); 2868 element.parentNode.replaceChild(docFragment, element); 2869 } 2870 return wrapElement; 2871} 2872ASPx.InsertElementAfter = function(newElement, targetElement) { 2873 var parentElem = targetElement.parentNode; 2874 if(parentElem.childNodes[parentElem.childNodes.length - 1] == targetElement) 2875 parentElem.appendChild(newElement); 2876 else
2877 parentElem.insertBefore(newElement, targetElement.nextSibling); 2878} 2879ASPx.SetElementOpacity = function(element, value) { 2880 var useOpacityStyle = !Browser.IE || Browser.Version > 8; 2881 if(useOpacityStyle){ 2882 element.style.opacity = value; 2883 } else { 2884 if(typeof(element.filters) === "object" && element.filters["DXImageTransform.Microsoft.Alpha"]) 2885 element.filters.item("DXImageTransform.Microsoft.Alpha").Opacity = value*100; 2886 else 2887 element.style.filter = "alpha(opacity=" + (value * 100) + ")"; 2888 } 2889} 2890ASPx.GetElementOpacity = function(element) { 2891 var useOpacityStyle = !Browser.IE || Browser.Version > 8; 2892 if(useOpacityStyle) 2893 return parseFloat(ASPx.GetCurrentStyle(element).opacity); 2894 else { 2895 if(typeof(element.filters) === "object" && element.filters["DXImageTransform.Microsoft.Alpha"]){ 2896 return element.filters.item("DXImageTransform.Microsoft.Alpha").Opacity / 100; 2897 } else { 2898 var alphaValue = ASPx.GetCurrentStyle(element).filter; 2899 var value = alphaValue.replace("alpha(opacity=", ""); 2900 value = value.replace(")", ""); 2901 return parseInt(value) / 100; 2902 } 2903 return 100; 2904 } 2905} 2906ASPx.GetElementDisplay = function(element, isCurrentStyle) { 2907 if (isCurrentStyle) 2908 return ASPx.GetCurrentStyle(element).display != "none"; 2909 return element.style.display != "none"; 2910} 2911ASPx.SetElementDisplay = function(element, value, checkCurrentStyle, makeInline) { 2912 if(!element) return; 2913 if(typeof(value) === "string") 2914 element.style.display = value; 2915 else if(!value) 2916 element.style.display = "none"; 2917 else { 2918 element.style.display = ""; 2919 if(checkCurrentStyle && ASPx.GetCurrentStyle(element).display === "none"){ 2920 var displayAddon = makeInline ? "inline-" : ""; 2921 switch(element.tagName){ 2922 case "TABLE": { 2923 element.style.display = displayAddon + "table"; 2924 break; 2925 } 2926 default: { 2927 element.style.display = displayAddon + "block"; 2928 break; 2929 } 2930 } 2931 } 2932 } 2933} 2934ASPx.GetElementVisibility = function(element, isCurrentStyle) { 2935 if(isCurrentStyle) 2936 return ASPx.GetCurrentStyle(element).visibility != "hidden"; 2937 return element.style.visibility != "hidden"; 2938} 2939ASPx.SetElementVisibility = function(element, value) { 2940 if(!element) return; 2941 if(typeof(value) === "string") 2942 element.style.visibility = value; 2943 else 2944 element.style.visibility = value ? "visible" : "hidden"; 2945} 2946ASPx.IsElementVisible = function(element, isCurrentStyle) { 2947 while(element && element.tagName != "BODY") { 2948 if(!ASPx.GetElementDisplay(element, isCurrentStyle) || (!ASPx.GetElementVisibility(element, isCurrentStyle) && !Attr.IsExistsAttribute(element, "errorFrame"))) 2949 return false; 2950 element = element.parentNode; 2951 } 2952 return true; 2953} 2954ASPx.IsElementDisplayed = function(element) { 2955 while(element && element.tagName != "BODY") { 2956 if(!ASPx.GetElementDisplay(element)) 2957 return false; 2958 element = element.parentNode; 2959 } 2960 return true; 2961} 2962ASPx.AddStyleSheetLinkToDocument = function(doc, linkUrl) { 2963 var newLink = createStyleLink(doc, linkUrl); 2964 var head = ASPx.GetHeadElementOrCreateIfNotExist(doc); 2965 head.appendChild(newLink); 2966} 2967ASPx.GetHeadElementOrCreateIfNotExist = function(doc) { 2968 var elements = ASPx.GetNodesByTagName(doc, "head"); 2969 var head = null; 2970 if(elements.length == 0) { 2971 head = doc.createElement("head"); 2972 head.visibility = "hidden"; 2973 doc.insertBefore(head, doc.body); 2974 } else 2975 head = elements[0]; 2976 return head; 2977} 2978function createStyleLink(doc, url) { 2979 var newLink = doc.createElement("link"); 2980 Attr.SetAttribute(newLink, "href", url); 2981 Attr.SetAttribute(newLink, "type", "text/css"); 2982 Attr.SetAttribute(newLink, "rel", "stylesheet"); 2983 return newLink; 2984} 2985ASPx.GetCurrentStyle = function(element) { 2986 if(element.currentStyle) 2987 return element.currentStyle; 2988 else if(document.defaultView && document.defaultView.getComputedStyle) { 2989 var result = document.defaultView.getComputedStyle(element, null); 2990 if(!result && Browser.Firefox && window.frameElement) { 2991 var changes = []; 2992 var curElement = window.frameElement; 2993 while(!(result = document.defaultView.getComputedStyle(element, null))) { 2994 changes.push([curElement, curElement.style.display]); 2995 ASPx.SetStylesCore(curElement, "display", "block", true); 2996 curElement = curElement.tagName == "BODY" ? curElement.ownerDocument.defaultView.frameElement : curElement.parentNode; 2997 } 2998 result = ASPx.CloneObject(result); 2999 for(var ch, i = 0; ch = changes[i]; i++) 3000 ASPx.SetStylesCore(ch[0], "display", ch[1]); 3001 var reflow = document.body.offsetWidth; 3002 } 3003 return result; 3004 } 3005 return window.getComputedStyle(element, null); 3006} 3007ASPx.CreateStyleSheetInDocument = function(doc) { 3008 if(doc.createStyleSheet) { 3009 try { 3010 return doc.createStyleSheet(); 3011 } 3012 catch(e) { 3013 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 http://www.devexpress.com/Support/Center/p/K18487.aspx."; 3014 throw new Error(message); 3015 } 3016 } 3017 else { 3018 var styleSheet = doc.createElement("STYLE"); 3019 ASPx.GetNodeByTagName(doc, "HEAD", 0).appendChild(styleSheet); 3020 return styleSheet.sheet; 3021 } 3022} 3023ASPx.currentStyleSheet = null; 3024ASPx.GetCurrentStyleSheet = function() { 3025 if(!ASPx.currentStyleSheet) 3026 ASPx.currentStyleSheet = ASPx.CreateStyleSheetInDocument(document); 3027 return ASPx.currentStyleSheet; 3028} 3029function getStyleSheetRules(styleSheet){ 3030 try { 3031 return Browser.IE && Browser.Version == 8 ? styleSheet.rules : styleSheet.cssRules; 3032 } 3033 catch(e) { 3034 return null; 3035 } 3036} 3037ASPx.cachedCssRules = { }; 3038ASPx.GetStyleSheetRules = function (className, stylesStorageDocument) { 3039 if(ASPx.cachedCssRules[className]) { 3040 if(ASPx.cachedCssRules[className] != ASPx.EmptyObject) 3041 return ASPx.cachedCssRules[className]; 3042 return null; 3043 } 3044 var result = iterateStyleSheetRules(stylesStorageDocument, function(rule) { 3045 if(rule.selectorText == "." + className){ 3046 ASPx.cachedCssRules[className] = rule; 3047 return rule; 3048 } 3049 }); 3050 if(ASPx.IsExists(result)) 3051 return result; 3052 ASPx.cachedCssRules[className] = ASPx.EmptyObject; 3053 return null; 3054} 3055function iterateStyleSheetRules(stylesStorageDocument, callback) { 3056 var doc = stylesStorageDocument || document; 3057 for(var i = 0; i < doc.styleSheets.length; i ++){ 3058 var styleSheet = doc.styleSheets[i];
3059 var rules = getStyleSheetRules(styleSheet); 3060 if(rules != null){ 3061 for(var j = 0; j < rules.length; j ++) { 3062 var result = callback(rules[j]); 3063 if(result !== undefined) 3064 return result; 3065 } 3066 } 3067 } 3068}; 3069ASPx.ClearCachedCssRules = function(){ 3070 ASPx.cachedCssRules = { }; 3071} 3072var styleCount = 0; 3073var styleNameCache = { }; 3074ASPx.CreateImportantStyleRule = function(styleSheet, cssText, postfix, prefix) { 3075 styleSheet = styleSheet || ASPx.GetCurrentStyleSheet(); 3076 var cacheKey = (postfix ? postfix + "||" : "") + cssText + (prefix ? "||" + prefix : ""); 3077 if(styleNameCache[cacheKey]) 3078 return styleNameCache[cacheKey]; 3079 prefix = prefix ? prefix + " " : ""; 3080 var className = "dxh" + styleCount + (postfix ? postfix : ""); 3081 ASPx.AddStyleSheetRule(styleSheet, prefix + "." + className, ASPx.CreateImportantCssText(cssText)); 3082 styleCount++; 3083 styleNameCache[cacheKey] = className; 3084 return className; 3085} 3086ASPx.CreateImportantCssText = function(cssText) { 3087 var newText = ""; 3088 var attributes = cssText.split(";"); 3089 for(var i = 0; i < attributes.length; i++){ 3090 if(attributes[i] != "") 3091 newText += attributes[i] + " !important;"; 3092 } 3093 return newText; 3094} 3095ASPx.AddStyleSheetRule = function(styleSheet, selector, cssText){ 3096 if(!cssText) return; 3097 if(Browser.IE) 3098 styleSheet.addRule(selector, cssText); 3099 else 3100 styleSheet.insertRule(selector + " { " + cssText + " }", styleSheet.cssRules.length); 3101} 3102ASPx.GetPointerCursor = function() { 3103 return "pointer"; 3104} 3105ASPx.SetPointerCursor = function(element) { 3106 if(element.style.cursor == "") 3107 element.style.cursor = ASPx.GetPointerCursor(); 3108} 3109ASPx.SetElementFloat = function(element, value) { 3110 if(ASPx.IsExists(element.style.cssFloat)) 3111 element.style.cssFloat = value; 3112 else if(ASPx.IsExists(element.style.styleFloat)) 3113 element.style.styleFloat = value; 3114 else 3115 Attr.SetAttribute(element.style, "float", value); 3116} 3117ASPx.GetElementFloat = function(element) { 3118 var currentStyle = ASPx.GetCurrentStyle(element); 3119 if(ASPx.IsExists(currentStyle.cssFloat)) 3120 return currentStyle.cssFloat; 3121 if(ASPx.IsExists(currentStyle.styleFloat)) 3122 return currentStyle.styleFloat; 3123 return Attr.GetAttribute(currentStyle, "float"); 3124} 3125function getElementDirection(element) { 3126 return ASPx.GetCurrentStyle(element).direction; 3127} 3128ASPx.IsElementRightToLeft = function(element) { 3129 return getElementDirection(element) == "rtl"; 3130} 3131ASPx.AdjustVerticalMarginsInContainer = function(container) { 3132 var containerBorderAndPaddings = ASPx.GetTopBottomBordersAndPaddingsSummaryValue(container); 3133 var flowElements = [], floatElements = [], floatTextElements = []; 3134 var maxHeight = 0, maxFlowHeight = 0; 3135 for(var i = 0; i < container.childNodes.length; i++) { 3136 var element = container.childNodes[i]; 3137 if(!element.offsetHeight) continue; 3138 ASPx.ClearVerticalMargins(element); 3139 } 3140 for(var i = 0; i < container.childNodes.length; i++) { 3141 var element = container.childNodes[i]; 3142 if(!element.offsetHeight) continue; 3143 var float = ASPx.GetElementFloat(element); 3144 var isFloat = (float === "left" || float === "right"); 3145 if(isFloat) 3146 floatElements.push(element) 3147 else { 3148 flowElements.push(element); 3149 if(element.tagName !== "IMG"){ 3150 if(!ASPx.IsTextWrapped(element)) 3151 element.style.verticalAlign = 'baseline'; 3152 floatTextElements.push(element); 3153 } 3154 if(element.tagName === "DIV") 3155 Attr.ChangeStyleAttribute(element, "float", "left"); 3156 } 3157 if(element.offsetHeight > maxHeight) 3158 maxHeight = element.offsetHeight; 3159 if(!isFloat && element.offsetHeight > maxFlowHeight) 3160 maxFlowHeight = element.offsetHeight; 3161 } 3162 for(var i = 0; i < flowElements.length; i++) 3163 Attr.RestoreStyleAttribute(flowElements[i], "float"); 3164 var containerBorderAndPaddings = ASPx.GetTopBottomBordersAndPaddingsSummaryValue(container); 3165 var containerHeight = container.offsetHeight - containerBorderAndPaddings; 3166 if(maxHeight == containerHeight) { 3167 var verticalAlign = ASPx.GetCurrentStyle(container).verticalAlign; 3168 for(var i = 0; i < floatTextElements.length; i++) 3169 floatTextElements[i].style.verticalAlign = ''; 3170 containerHeight = container.offsetHeight - containerBorderAndPaddings; 3171 for(var i = 0; i < floatElements.length; i++) 3172 adjustVerticalMarginsCore(floatElements[i], containerHeight, verticalAlign, true); 3173 for(var i = 0; i < flowElements.length; i++) { 3174 if(maxFlowHeight != maxHeight) 3175 adjustVerticalMarginsCore(flowElements[i], containerHeight, verticalAlign); 3176 } 3177 } 3178} 3179ASPx.AdjustVerticalMargins = function(element) { 3180 ASPx.ClearVerticalMargins(element); 3181 var parentElement = element.parentNode; 3182 var parentHeight = parentElement.offsetHeight - ASPx.GetTopBottomBordersAndPaddingsSummaryValue(parentElement); 3183 adjustVerticalMarginsCore(element, parentHeight, ASPx.GetCurrentStyle(parentElement).verticalAlign); 3184} 3185function adjustVerticalMarginsCore(element, parentHeight, verticalAlign, toBottom) { 3186 var marginTop; 3187 if(verticalAlign == "top") 3188 marginTop = 0; 3189 else if(verticalAlign == "bottom") 3190 marginTop = parentHeight - element.offsetHeight; 3191 else
3192 marginTop = (parentHeight - element.offsetHeight) / 2; 3193 if(marginTop !== 0){ 3194 var marginAttr = (toBottom ? Math.ceil(marginTop) : Math.floor(marginTop)) + "px" 3195 element.style.marginTop = marginAttr; 3196 } 3197} 3198ASPx.ClearVerticalMargins = function(element) { 3199 element.style.marginTop = ""; 3200 element.style.marginBottom = ""; 3201} 3202ASPx.AdjustHeightInContainer = function(container) { 3203 var height = container.offsetHeight - ASPx.GetTopBottomBordersAndPaddingsSummaryValue(container); 3204 for(var i = 0; i < container.childNodes.length; i++) { 3205 var element = container.childNodes[i]; 3206 if(!element.offsetHeight) continue; 3207 ASPx.ClearHeight(element); 3208 } 3209 var elements = []; 3210 var childrenHeight = 0; 3211 for(var i = 0; i < container.childNodes.length; i++) { 3212 var element = container.childNodes[i]; 3213 if(!element.offsetHeight) continue; 3214 childrenHeight += element.offsetHeight + ASPx.GetTopBottomMargins(element); 3215 elements.push(element); 3216 } 3217 if(elements.length > 0 && childrenHeight < height) { 3218 var correctedHeight = 0; 3219 for(var i = 0; i < elements.length; i++) { 3220 var elementHeight = 0; 3221 if(i < elements.length - 1){ 3222 var elementHeight = Math.floor(height / elements.length); 3223 correctedHeight += elementHeight; 3224 } 3225 else{ 3226 var elementHeight = height - correctedHeight; 3227 if(elementHeight < 0) elementHeight = 0; 3228 } 3229 adjustHeightCore(elements[i], elementHeight); 3230 } 3231 } 3232} 3233ASPx.AdjustHeight = function(element) { 3234 ASPx.ClearHeight(element); 3235 var parentElement = element.parentNode; 3236 var height = parentElement.offsetHeight - ASPx.GetTopBottomBordersAndPaddingsSummaryValue(parentElement); 3237 adjustHeightCore(element, height); 3238} 3239function adjustHeightCore(element, height) { 3240 var height = height - ASPx.GetTopBottomBordersAndPaddingsSummaryValue(element); 3241 if(height < 0) height = 0; 3242 element.style.height = height + "px"; 3243} 3244ASPx.ClearHeight = function(element) { 3245 element.style.height = ""; 3246} 3247ASPx.ShrinkWrappedTextInContainer = function(container) { 3248 if(!container) return; 3249 for(var i = 0; i < container.childNodes.length; i++){ 3250 var child = container.childNodes[i]; 3251 if(child.style && ASPx.IsTextWrapped(child)) { 3252 Attr.ChangeStyleAttribute(child, "width", "1px"); 3253 child.shrinkedTextContainer = true; 3254 } 3255 } 3256} 3257ASPx.AdjustWrappedTextInContainer = function(container) { 3258 if(!container) return; 3259 var textContainer, leftWidth = 0, rightWidth = 0; 3260 for(var i = 0; i < container.childNodes.length; i++){ 3261 var child = container.childNodes[i]; 3262 if(child.tagName === "BR") 3263 return; 3264 if(!child.tagName) 3265 continue; 3266 if(child.tagName !== "IMG"){ 3267 textContainer = child; 3268 if(ASPx.IsTextWrapped(textContainer)){ 3269 if(!textContainer.shrinkedTextContainer) 3270 textContainer.style.width = ""; 3271 textContainer.style.marginRight = ""; 3272 } 3273 } 3274 else { 3275 if(child.offsetWidth === 0){ 3276 Evt.AttachEventToElement(child, "load", function (evt) { 3277 ASPx.AdjustWrappedTextInContainer(container); 3278 }); 3279 return; 3280 } 3281 var width = child.offsetWidth + ASPx.GetLeftRightMargins(child); 3282 if(textContainer) 3283 rightWidth += width; 3284 else 3285 leftWidth += width; 3286 } 3287 } 3288 if(textContainer && ASPx.IsTextWrapped(textContainer)) { 3289 var containerWidth = container.offsetWidth - ASPx.GetLeftRightBordersAndPaddingsSummaryValue(container); 3290 if(textContainer.shrinkedTextContainer) { 3291 Attr.RestoreStyleAttribute(textContainer, "width"); 3292 Attr.ChangeStyleAttribute(container, "width", containerWidth + "px"); 3293 } 3294 if(textContainer.offsetWidth + leftWidth + rightWidth >= containerWidth) { 3295 if(rightWidth > 0 && !textContainer.shrinkedTextContainer) 3296 textContainer.style.width = (containerWidth - rightWidth) + "px"; 3297 else if(leftWidth > 0){ 3298 if(ASPx.IsElementRightToLeft(container)) 3299 textContainer.style.marginLeft = leftWidth + "px"; 3300 else 3301 textContainer.style.marginRight = leftWidth + "px"; 3302 } 3303 } 3304 } 3305} 3306ASPx.IsTextWrapped = function(element) { 3307 return element && ASPx.GetCurrentStyle(element).whiteSpace !== "nowrap"; 3308} 3309ASPx.IsValidPosition = function(pos){ 3310 return pos != ASPx.InvalidPosition && pos != -ASPx.InvalidPosition; 3311} 3312ASPx.getSpriteMainElement = function(element) { 3313 var cssClassMarker = "dx-acc"; 3314 if(ASPx.ElementContainsCssClass(element, cssClassMarker)) 3315 return element; 3316 if(element.parentNode && ASPx.ElementContainsCssClass(element.parentNode, cssClassMarker)) 3317 return element.parentNode; 3318 return element; 3319} 3320ASPx.GetAbsoluteX = function(curEl){ 3321 return ASPx.GetAbsolutePositionX(curEl); 3322} 3323ASPx.GetAbsoluteY = function(curEl){ 3324 return ASPx.GetAbsolutePositionY(curEl); 3325} 3326ASPx.SetAbsoluteX = function(element, x){ 3327 element.style.left = ASPx.PrepareClientPosForElement(x, element, true) + "px"; 3328} 3329ASPx.SetAbsoluteY = function(element, y){ 3330 element.style.top = ASPx.PrepareClientPosForElement(y, element, false) + "px"; 3331} 3332ASPx.GetAbsolutePositionX = function(element){ 3333 if(Browser.IE) 3334 return getAbsolutePositionX_IE(element); 3335 else if(Browser.Firefox && Browser.Version >= 3) 3336 return getAbsolutePositionX_FF3(element); 3337 else if(Browser.Opera) 3338 return getAbsolutePositionX_Opera(element); 3339 else if(Browser.NetscapeFamily && (!Browser.Firefox || Browser.Version < 3)) 3340 return getAbsolutePositionX_NS(element); 3341 else if(Browser.WebKitFamily && Browser.WebKitTouchUI) 3342 return getAbsolutePositionX_Opera(element); 3343 else if(Browser.WebKitFamily || Browser.Edge) 3344 return getAbsolutePositionX_FF3(element); 3345 else
3346 return getAbsolutePositionX_Other(element); 3347} 3348function getAbsolutePositionX_Opera(curEl){ 3349 var isFirstCycle = true; 3350 var pos = getAbsoluteScrollOffset_OperaFF(curEl, true); 3351 while(curEl != null) { 3352 pos += curEl.offsetLeft; 3353 if(!isFirstCycle) 3354 pos -= curEl.scrollLeft; 3355 curEl = curEl.offsetParent; 3356 isFirstCycle = false; 3357 } 3358 pos += document.body.scrollLeft; 3359 return pos; 3360} 3361function getAbsolutePositionX_IE(element){ 3362 if(element == null || Browser.IE && element.parentNode == null) return 0; 3363 return element.getBoundingClientRect().left + ASPx.GetDocumentScrollLeft(); 3364} 3365function getAbsolutePositionX_FF3(element){ 3366 if(element == null) return 0; 3367 var x = element.getBoundingClientRect().left + ASPx.GetDocumentScrollLeft(); 3368 return Math.round(x); 3369} 3370function getAbsolutePositionX_NS(curEl){ 3371 var pos = getAbsoluteScrollOffset_OperaFF(curEl, true); 3372 var isFirstCycle = true; 3373 while(curEl != null) { 3374 pos += curEl.offsetLeft; 3375 if(!isFirstCycle && curEl.offsetParent != null) 3376 pos -= curEl.scrollLeft; 3377 if(!isFirstCycle && Browser.Firefox){ 3378 var style = ASPx.GetCurrentStyle(curEl); 3379 if(curEl.tagName == "DIV" && style.overflow != "visible") 3380 pos += ASPx.PxToInt(style.borderLeftWidth); 3381 } 3382 isFirstCycle = false; 3383 curEl = curEl.offsetParent; 3384 } 3385 return pos; 3386} 3387function getAbsolutePositionX_Safari(curEl){ 3388 var pos = getAbsoluteScrollOffset_WebKit(curEl, true); 3389 var isSafariVerNonLessThan3OrChrome = Browser.Safari && Browser.Version >= 3 || Browser.Chrome; 3390 if(curEl != null){ 3391 var isFirstCycle = true; 3392 if(isSafariVerNonLessThan3OrChrome && curEl.tagName == "TD") { 3393 pos += curEl.offsetLeft; 3394 curEl = curEl.offsetParent; 3395 isFirstCycle = false; 3396 } 3397 var hasNonStaticElement = false; 3398 while (curEl != null) { 3399 pos += curEl.offsetLeft; 3400 var style = ASPx.GetCurrentStyle(curEl); 3401 var isNonStatic = style.position !== "" && style.position !== "static"; 3402 if(isNonStatic) 3403 hasNonStaticElement = true; 3404 var safariDisplayTable = Browser.Safari && Browser.Version >= 8 && style.display === "table"; 3405 var posDiv = curEl.tagName == "DIV" && isNonStatic && !safariDisplayTable; 3406 if(!isFirstCycle && (curEl.tagName == "TD" || curEl.tagName == "TABLE" || posDiv)) 3407 pos += curEl.clientLeft; 3408 isFirstCycle = false; 3409 curEl = curEl.offsetParent; 3410 } 3411 if(!hasNonStaticElement && (document.documentElement.style.position === "" || document.documentElement.style.position === "static")) 3412 pos += document.documentElement.offsetLeft; 3413 } 3414 return pos; 3415} 3416function getAbsolutePositionX_Other(curEl){ 3417 var pos = 0; 3418 var isFirstCycle = true; 3419 while(curEl != null) { 3420 pos += curEl.offsetLeft; 3421 if(!isFirstCycle && curEl.offsetParent != null) 3422 pos -= curEl.scrollLeft; 3423 isFirstCycle = false; 3424 curEl = curEl.offsetParent; 3425 } 3426 return pos; 3427} 3428ASPx.GetAbsolutePositionY = function(element){ 3429 if(Browser.IE) 3430 return getAbsolutePositionY_IE(element); 3431 else if(Browser.Firefox && Browser.Version >= 3) 3432 return getAbsolutePositionY_FF3(element); 3433 else if(Browser.Opera) 3434 return getAbsolutePositionY_Opera(element); 3435 else if(Browser.NetscapeFamily && (!Browser.Firefox || Browser.Version < 3)) 3436 return getAbsolutePositionY_NS(element); 3437 else if(Browser.WebKitFamily && Browser.WebKitTouchUI) 3438 return getAbsolutePositionY_Opera(element); 3439 else if(Browser.WebKitFamily || Browser.Edge) 3440 return getAbsolutePositionY_FF3(element); 3441 else 3442 return getAbsolutePositionY_Other(element); 3443} 3444function getAbsolutePositionY_Opera(curEl){ 3445 var isFirstCycle = true; 3446 if(curEl && curEl.tagName == "TR" && curEl.cells.length > 0) 3447 curEl = curEl.cells[0]; 3448 var pos = getAbsoluteScrollOffset_OperaFF(curEl, false); 3449 while(curEl != null) { 3450 pos += curEl.offsetTop; 3451 if(!isFirstCycle) 3452 pos -= curEl.scrollTop; 3453 curEl = curEl.offsetParent; 3454 isFirstCycle = false; 3455 } 3456 pos += document.body.scrollTop; 3457 return pos; 3458} 3459function getAbsolutePositionY_IE(element){ 3460 if(element == null || Browser.IE && element.parentNode == null) return 0; 3461 return element.getBoundingClientRect().top + ASPx.GetDocumentScrollTop(); 3462} 3463function getAbsolutePositionY_FF3(element){ 3464 if(element == null) return 0; 3465 var y = element.getBoundingClientRect().top + ASPx.GetDocumentScrollTop(); 3466 return Math.round(y); 3467} 3468function getAbsolutePositionY_NS(curEl){ 3469 var pos = getAbsoluteScrollOffset_OperaFF(curEl, false); 3470 var isFirstCycle = true; 3471 while(curEl != null) { 3472 pos += curEl.offsetTop; 3473 if(!isFirstCycle && curEl.offsetParent != null) 3474 pos -= curEl.scrollTop; 3475 if(!isFirstCycle && Browser.Firefox){ 3476 var style = ASPx.GetCurrentStyle(curEl); 3477 if(curEl.tagName == "DIV" && style.overflow != "visible") 3478 pos += ASPx.PxToInt(style.borderTopWidth); 3479 } 3480 isFirstCycle = false; 3481 curEl = curEl.offsetParent; 3482 } 3483 return pos; 3484} 3485var WebKit3TDRealInfo = { 3486 GetOffsetTop: function(tdElement){ 3487 switch(ASPx.GetCurrentStyle(tdElement).verticalAlign){ 3488 case "middle": 3489 return Math.round(tdElement.offsetTop - (tdElement.offsetHeight - tdElement.clientHeight )/2 + tdElement.clientTop); 3490 case "bottom": 3491 return tdElement.offsetTop - tdElement.offsetHeight + tdElement.clientHeight + tdElement.clientTop; 3492 } 3493 return tdElement.offsetTop; 3494 }, 3495 GetClientHeight: function(tdElement){
3496 var valign = ASPx.GetCurrentStyle(tdElement).verticalAlign; 3497 switch(valign){ 3498 case "middle": 3499 return tdElement.clientHeight + tdElement.offsetTop * 2; 3500 case "top": 3501 return tdElement.offsetHeight - tdElement.clientTop * 2; 3502 case "bottom": 3503 return tdElement.clientHeight + tdElement.offsetTop; 3504 } 3505 return tdElement.clientHeight; 3506 } 3507} 3508function getAbsolutePositionY_Safari(curEl){ 3509 var pos = getAbsoluteScrollOffset_WebKit(curEl, false); 3510 var isSafariVerNonLessThan3OrChrome = Browser.Safari && Browser.Version >= 3 || Browser.Chrome; 3511 if(curEl != null){ 3512 var isFirstCycle = true; 3513 if(isSafariVerNonLessThan3OrChrome && curEl.tagName == "TD") { 3514 pos += WebKit3TDRealInfo.GetOffsetTop(curEl); 3515 curEl = curEl.offsetParent; 3516 isFirstCycle = false; 3517 } 3518 var hasNonStaticElement = false; 3519 while (curEl != null) { 3520 pos += curEl.offsetTop; 3521 var style = ASPx.GetCurrentStyle(curEl); 3522 var isNonStatic = style.position !== "" && style.position !== "static"; 3523 if(isNonStatic) 3524 hasNonStaticElement = true; 3525 var safariDisplayTable = Browser.Safari && Browser.Version >= 8 && style.display === "table"; 3526 var posDiv = curEl.tagName == "DIV" && isNonStatic && !safariDisplayTable; 3527 if(!isFirstCycle && (curEl.tagName == "TD" || curEl.tagName == "TABLE" || posDiv)) 3528 pos += curEl.clientTop; 3529 isFirstCycle = false; 3530 curEl = curEl.offsetParent; 3531 } 3532 if(!hasNonStaticElement && (document.documentElement.style.position === "" || document.documentElement.style.position === "static")) 3533 pos += document.documentElement.offsetTop; 3534 } 3535 return pos; 3536} 3537function getAbsoluteScrollOffset_OperaFF(curEl, isX) { 3538 var pos = 0; 3539 var isFirstCycle = true; 3540 while(curEl != null) { 3541 if(curEl.tagName == "BODY") 3542 break; 3543 var style = ASPx.GetCurrentStyle(curEl); 3544 if(style.position == "absolute") 3545 break; 3546 if(!isFirstCycle && curEl.tagName == "DIV" && (style.position == "" || style.position == "static")) 3547 pos -= isX ? curEl.scrollLeft : curEl.scrollTop; 3548 curEl = curEl.parentNode; 3549 isFirstCycle = false; 3550 } 3551 return pos; 3552} 3553function getAbsoluteScrollOffset_WebKit(curEl, isX) { 3554 var pos = 0; 3555 var isFirstCycle = true; 3556 var step = 0; 3557 var absoluteWasFoundAtStep = -1; 3558 var isThereFixedParent = false; 3559 while(curEl != null) { 3560 if(curEl.tagName == "BODY") 3561 break; 3562 var style = ASPx.GetCurrentStyle(curEl); 3563 var positionIsDefault = style.position == "" || style.position == "static"; 3564 var absoluteWasFoundAtPreviousStep = absoluteWasFoundAtStep >= 0 && absoluteWasFoundAtStep < step; 3565 var canHaveScrolls = curEl.tagName == "DIV" || curEl.tagName == "SECTION" || curEl.tagName == "FORM"; 3566 if(!isFirstCycle && canHaveScrolls && (!positionIsDefault || !absoluteWasFoundAtPreviousStep)) 3567 pos -= isX ? curEl.scrollLeft : curEl.scrollTop; 3568 if(style.position == "absolute") 3569 absoluteWasFoundAtStep = step; 3570 else if(style.position == "relative") 3571 absoluteWasFoundAtStep = -1; 3572 else if(style.position == "fixed") 3573 isThereFixedParent = true; 3574 curEl = curEl.parentNode; 3575 isFirstCycle = false; 3576 step ++; 3577 } 3578 if(isThereFixedParent) 3579 pos += isX ? ASPx.GetDocumentScrollLeft() : ASPx.GetDocumentScrollTop(); 3580 return pos; 3581} 3582function getAbsolutePositionY_Other(curEl){ 3583 var pos = 0; 3584 var isFirstCycle = true; 3585 while(curEl != null) { 3586 pos += curEl.offsetTop; 3587 if(!isFirstCycle && curEl.offsetParent != null) 3588 pos -= curEl.scrollTop; 3589 isFirstCycle = false; 3590 curEl = curEl.offsetParent; 3591 } 3592 return pos; 3593} 3594function createElementMock(element) { 3595 var div = document.createElement('DIV'); 3596 div.style.top = "0px"; 3597 div.style.left = "0px"; 3598 div.visibility = "hidden"; 3599 div.style.position = ASPx.GetCurrentStyle(element).position; 3600 return div; 3601} 3602ASPx.PrepareClientPosElementForOtherParent = function(pos, element, otherParent, isX) { 3603 if(element.parentNode == otherParent) 3604 return ASPx.PrepareClientPosForElement(pos, element, isX); 3605 var elementMock = createElementMock(element); 3606 otherParent.appendChild(elementMock); 3607 var preparedPos = ASPx.PrepareClientPosForElement(pos, elementMock, isX); 3608 otherParent.removeChild(elementMock); 3609 return preparedPos; 3610} 3611ASPx.PrepareClientPosForElement = function(pos, element, isX) { 3612 pos -= ASPx.GetPositionElementOffset(element, isX); 3613 return pos; 3614} 3615function getExperimentalPositionOffset(element, isX) { 3616 var div = createElementMock(element); 3617 if(div.style.position == "static") 3618 div.style.position = "absolute"; 3619 element.parentNode.appendChild(div); 3620 var realPos = isX ? ASPx.GetAbsoluteX(div) : ASPx.GetAbsoluteY(div); 3621 element.parentNode.removeChild(div); 3622 return Math.round(realPos); 3623} 3624ASPx.GetPositionElementOffset = function(element, isX) { 3625 return getExperimentalPositionOffset(element, isX); 3626} 3627function getPositionElementOffsetCore(element, isX) { 3628 var curEl = element.offsetParent; 3629 var offset = 0; 3630 var scroll = 0; 3631 var isThereFixedParent = false; 3632 var isFixed = false; 3633 var hasDisplayTableParent = false; 3634 var position = ""; 3635 while(curEl != null) { 3636 var tagName = curEl.tagName; 3637 if(tagName == "HTML"){ 3638 break; 3639 } 3640 if(tagName == "BODY"){ 3641 if(!Browser.Opera && !Browser.Chrome && !Browser.Edge){ 3642 var style = ASPx.GetCurrentStyle(curEl); 3643 if(style.position != "" && style.position != "static"){ 3644 offset += ASPx.PxToInt(isX ? style.left : style.top); 3645 offset += ASPx.PxToInt(isX ? style.marginLeft : style.marginTop); 3646 } 3647 } 3648 break; 3649 } 3650 var style = ASPx.GetCurrentStyle(curEl); 3651 isFixed = style.position == "fixed"; 3652 if(isFixed) { 3653 isThereFixedParent = true; 3654 if(Browser.IE) 3655 return getExperimentalPositionOffset(element, isX); 3656 } 3657 hasDisplayTableParent = style.display == "table" && (style.position == "absolute" || style.position == "relative"); 3658 if(hasDisplayTableParent && Browser.IE) 3659 return getExperimentalPositionOffset(element, isX); 3660 if(style.position == "absolute" || isFixed || style.position == "relative") { 3661 offset += isX ? curEl.offsetLeft : curEl.offsetTop; 3662 offset += ASPx.PxToInt(isX ? style.borderLeftWidth : style.borderTopWidth); 3663 } 3664 if(style.position == "relative") 3665 scroll += getElementChainScroll(curEl, curEl.offsetParent, isX); 3666 scroll += isX ? curEl.scrollLeft : curEl.scrollTop; 3667 curEl = curEl.offsetParent; 3668 } 3669 offset -= scroll; 3670 if((Browser.IE || Browser.Firefox && Browser.Version >= 3 || Browser.WebKitFamily || Browser.Edge) && isThereFixedParent) 3671 offset += isX ? ASPx.GetDocumentScrollLeft() : ASPx.GetDocumentScrollTop(); 3672 return offset; 3673} 3674function getElementChainScroll(startElement, endElement, isX){ 3675 var curEl = startElement.parentNode; 3676 var scroll = 0; 3677 while(curEl != endElement){ 3678 scroll += isX ? curEl.scrollLeft : curEl.scrollTop; 3679 curEl = curEl.parentNode; 3680 } 3681 return scroll; 3682} 3683ASPx.GetSizeOfText = function(text, textCss) { 3684 var testContainer = document.createElement("tester"); 3685 var defaultLineHeight = ASPx.Browser.Firefox ? "1" : ""; 3686 testContainer.style.fontSize = textCss.fontSize; 3687 testContainer.style.fontFamily = textCss.fontFamily; 3688 testContainer.style.fontWeight = textCss.fontWeight; 3689 testContainer.style.letterSpacing = textCss.letterSpacing; 3690 testContainer.style.lineHeight = textCss.lineHeight || defaultLineHeight; 3691 testContainer.style.position = "absolute"; 3692 testContainer.style.top = ASPx.InvalidPosition + "px"; 3693 testContainer.style.left = ASPx.InvalidPosition + "px"; 3694 testContainer.style.width = "auto"; 3695 testContainer.style.whiteSpace = "nowrap"; 3696 testContainer.appendChild(document.createTextNode(text)); 3697 var testElement = document.body.appendChild(testContainer); 3698 var size = { 3699 "width": testElement.offsetWidth, 3700 "height": testElement.offsetHeight 3701 }; 3702 document.body.removeChild(testElement); 3703 return size; 3704} 3705ASPx.PointToPixel = function(points, addPx) { 3706 var result = 0; 3707 try { 3708 var indexOfPt = points.toLowerCase().indexOf("pt"); 3709 if(indexOfPt > -1) 3710 result = parseInt(points.substr(0, indexOfPt)) * 96 / 72; 3711 else 3712 result = parseInt(points) * 96 / 72; 3713 if(addPx) 3714 result = result + "px"; 3715 } catch(e) {} 3716 return result; 3717} 3718ASPx.PixelToPoint = function(pixels, addPt) { 3719 var result = 0; 3720 try { 3721 var indexOfPx = pixels.toLowerCase().indexOf("px"); 3722 if(indexOfPx > -1) 3723 result = parseInt(pixels.substr(0, indexOfPx)) * 72 / 96; 3724 else 3725 result = parseInt(pixels) * 72 / 96; 3726 if(addPt) 3727 result = result + "pt"; 3728 } catch(e) {} 3729 return result; 3730} 3731ASPx.PxToInt = function(px) { 3732 return pxToNumber(px, parseInt); 3733} 3734ASPx.PxToFloat = function(px) { 3735 return pxToNumber(px, parseFloat); 3736} 3737function pxToNumber(px, parseFunction) { 3738 var result = 0; 3739 if(px != null && px != "") { 3740 try { 3741 var indexOfPx = px.indexOf("px"); 3742 if(indexOfPx > -1) 3743 result = parseFunction(px.substr(0, indexOfPx)); 3744 } catch(e) { } 3745 } 3746 return result; 3747} 3748ASPx.PercentageToFloat = function(perc) { 3749 var result = 0; 3750 if(perc != null && perc != "") { 3751 try { 3752 var indexOfPerc = perc.indexOf("%"); 3753 if(indexOfPerc > -1) 3754 result = parseFloat(perc.substr(0, indexOfPerc)) / 100; 3755 } catch(e) { } 3756 } 3757 return result; 3758} 3759ASPx.CreateGuid = function() { 3760 return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { 3761 var r = Math.random()*16|0,v=c=='x'?r:r&0x3|0x8; 3762 return v.toString(16); 3763 }); 3764} 3765ASPx.GetLeftRightBordersAndPaddingsSummaryValue = function(element, currentStyle) { 3766 return ASPx.GetLeftRightPaddings(element, currentStyle) + ASPx.GetHorizontalBordersWidth(element, currentStyle); 3767} 3768ASPx.GetTopBottomBordersAndPaddingsSummaryValue = function(element, currentStyle) { 3769 return ASPx.GetTopBottomPaddings(element, currentStyle) + ASPx.GetVerticalBordersWidth(element, currentStyle); 3770} 3771ASPx.GetVerticalBordersWidth = function(element, style) { 3772 if(!ASPx.IsExists(style)) 3773 style = (Browser.IE && Browser.MajorVersion != 9 && window.getComputedStyle) ? window.getComputedStyle(element) : ASPx.GetCurrentStyle(element); 3774 var res = 0; 3775 if(style.borderTopStyle != "none") { 3776 res += ASPx.PxToFloat(style.borderTopWidth); 3777 if(Browser.IE && Browser.MajorVersion < 9) 3778 res += getIe8BorderWidthFromText(style.borderTopWidth); 3779 } 3780 if(style.borderBottomStyle != "none") { 3781 res += ASPx.PxToFloat(style.borderBottomWidth);
3782 if(Browser.IE && Browser.MajorVersion < 9) 3783 res += getIe8BorderWidthFromText(style.borderBottomWidth); 3784 } 3785 return res; 3786} 3787ASPx.GetHorizontalBordersWidth = function(element, style) { 3788 if(!ASPx.IsExists(style)) 3789 style = (Browser.IE && window.getComputedStyle) ? window.getComputedStyle(element) : ASPx.GetCurrentStyle(element); 3790 var res = 0; 3791 if(style.borderLeftStyle != "none") { 3792 res += ASPx.PxToFloat(style.borderLeftWidth); 3793 if(Browser.IE && Browser.MajorVersion < 9) 3794 res += getIe8BorderWidthFromText(style.borderLeftWidth); 3795 } 3796 if(style.borderRightStyle != "none") { 3797 res += ASPx.PxToFloat(style.borderRightWidth); 3798 if(Browser.IE && Browser.MajorVersion < 9) 3799 res += getIe8BorderWidthFromText(style.borderRightWidth); 3800 } 3801 return res; 3802} 3803function getIe8BorderWidthFromText(textWidth) { 3804 var availableWidth = { "thin": 1, "medium" : 3, "thick": 5 }; 3805 var width = availableWidth[textWidth]; 3806 return width ? width : 0; 3807} 3808ASPx.GetTopBottomPaddings = function(element, style) { 3809 var currentStyle = style ? style : ASPx.GetCurrentStyle(element); 3810 return ASPx.PxToInt(currentStyle.paddingTop) + ASPx.PxToInt(currentStyle.paddingBottom); 3811} 3812ASPx.GetLeftRightPaddings = function(element, style) { 3813 var currentStyle = style ? style : ASPx.GetCurrentStyle(element); 3814 return ASPx.PxToInt(currentStyle.paddingLeft) + ASPx.PxToInt(currentStyle.paddingRight); 3815} 3816ASPx.GetTopBottomMargins = function(element, style) { 3817 var currentStyle = style ? style : ASPx.GetCurrentStyle(element); 3818 return ASPx.PxToInt(currentStyle.marginTop) + ASPx.PxToInt(currentStyle.marginBottom); 3819} 3820ASPx.GetLeftRightMargins = function(element, style) { 3821 var currentStyle = style ? style : ASPx.GetCurrentStyle(element); 3822 return ASPx.PxToInt(currentStyle.marginLeft) + ASPx.PxToInt(currentStyle.marginRight); 3823} 3824ASPx.GetClearClientWidth = function(element) { 3825 return element.offsetWidth - ASPx.GetLeftRightBordersAndPaddingsSummaryValue(element); 3826} 3827ASPx.GetClearClientHeight = function(element) { 3828 return element.offsetHeight - ASPx.GetTopBottomBordersAndPaddingsSummaryValue(element); 3829} 3830ASPx.SetOffsetWidth = function(element, widthValue, currentStyle) { 3831 if(!ASPx.IsExists(currentStyle)) 3832 currentStyle = ASPx.GetCurrentStyle(element); 3833 var value = widthValue - ASPx.PxToInt(currentStyle.marginLeft) - ASPx.PxToInt(currentStyle.marginRight); 3834 value -= ASPx.GetLeftRightBordersAndPaddingsSummaryValue(element, currentStyle); 3835 if(value > -1) 3836 element.style.width = value + "px"; 3837} 3838ASPx.SetOffsetHeight = function(element, heightValue, currentStyle) { 3839 if(!ASPx.IsExists(currentStyle)) 3840 currentStyle = ASPx.GetCurrentStyle(element); 3841 var value = heightValue - ASPx.PxToInt(currentStyle.marginTop) - ASPx.PxToInt(currentStyle.marginBottom); 3842 value -= ASPx.GetTopBottomBordersAndPaddingsSummaryValue(element, currentStyle); 3843 if(value > -1) 3844 element.style.height = value + "px"; 3845} 3846ASPx.FindOffsetParent = function(element) { 3847 var currentElement = element.parentNode; 3848 while(ASPx.IsExistsElement(currentElement) && currentElement.tagName != "BODY") { 3849 if(currentElement.offsetWidth > 0 && currentElement.offsetHeight > 0) 3850 return currentElement; 3851 currentElement = currentElement.parentNode; 3852 } 3853 return document.body; 3854} 3855ASPx.GetDocumentScrollTop = function(){ 3856 var isScrollBodyIE = Browser.IE && ASPx.GetCurrentStyle(document.body).overflow == "hidden" && document.body.scrollTop > 0; 3857 if(Browser.WebKitFamily || Browser.Edge || isScrollBodyIE) { 3858 if(Browser.MacOSMobilePlatform) 3859 return window.pageYOffset; 3860 else 3861 return document.body.scrollTop; 3862 } 3863 else 3864 return document.documentElement.scrollTop; 3865} 3866ASPx.SetDocumentScrollTop = function(scrollTop) { 3867 if(Browser.WebKitFamily || Browser.Edge) { 3868 if(Browser.MacOSMobilePlatform) 3869 window.pageYOffset = scrollTop; 3870 else 3871 document.body.scrollTop = scrollTop; 3872 } 3873 else 3874 document.documentElement.scrollTop = scrollTop; 3875} 3876ASPx.GetDocumentScrollLeft = function(){ 3877 var isScrollBodyIE = Browser.IE && ASPx.GetCurrentStyle(document.body).overflow == "hidden" && document.body.scrollLeft > 0; 3878 if(Browser.WebKitFamily || Browser.Edge || isScrollBodyIE || Browser.Opera) 3879 return document.body.scrollLeft; 3880 return document.documentElement.scrollLeft; 3881} 3882ASPx.SetDocumentScrollLeft = function(scrollLeft) { 3883 if(Browser.WebKitFamily || Browser.Edge) { 3884 if(Browser.MacOSMobilePlatform) 3885 window.pageXOffset = scrollLeft; 3886 else 3887 document.body.scrollLeft = scrollLeft; 3888 } 3889 else 3890 document.documentElement.scrollLeft = scrollLeft; 3891} 3892ASPx.GetDocumentClientWidth = function(){ 3893 if(document.documentElement.clientWidth == 0) 3894 return document.body.clientWidth; 3895 else
3896 return document.documentElement.clientWidth; 3897} 3898ASPx.GetDocumentClientHeight = function() { 3899 if(Browser.Firefox && window.innerHeight - document.documentElement.clientHeight > ASPx.GetVerticalScrollBarWidth()) { 3900 return window.innerHeight; 3901 } else if(Browser.Opera && Browser.Version < 9.6 || document.documentElement.clientHeight == 0) { 3902 return document.body.clientHeight 3903 } 3904 return document.documentElement.clientHeight; 3905} 3906ASPx.GetDocumentWidth = function(){ 3907 var bodyWidth = document.body.offsetWidth; 3908 var docWidth = Browser.IE ? document.documentElement.clientWidth : document.documentElement.offsetWidth; 3909 var bodyScrollWidth = document.body.scrollWidth; 3910 var docScrollWidth = document.documentElement.scrollWidth; 3911 return getMaxDimensionOf(bodyWidth, docWidth, bodyScrollWidth, docScrollWidth); 3912} 3913ASPx.GetDocumentHeight = function(){ 3914 var bodyHeight = document.body.offsetHeight; 3915 var docHeight = Browser.IE ? document.documentElement.clientHeight : document.documentElement.offsetHeight; 3916 var bodyScrollHeight = document.body.scrollHeight; 3917 var docScrollHeight = document.documentElement.scrollHeight; 3918 var maxHeight = getMaxDimensionOf(bodyHeight, docHeight, bodyScrollHeight, docScrollHeight); 3919 if(Browser.Opera && Browser.Version >= 9.6){ 3920 if(Browser.Version < 10) 3921 maxHeight = getMaxDimensionOf(bodyHeight, docHeight, bodyScrollHeight); 3922 var visibleHeightOfDocument = document.documentElement.clientHeight; 3923 if(maxHeight > visibleHeightOfDocument) 3924 maxHeight = getMaxDimensionOf(window.outerHeight, maxHeight); 3925 else 3926 maxHeight = document.documentElement.clientHeight; 3927 return maxHeight; 3928 } 3929 return maxHeight; 3930} 3931ASPx.GetDocumentMaxClientWidth = function(){ 3932 var bodyWidth = document.body.offsetWidth; 3933 var docWidth = document.documentElement.offsetWidth; 3934 var docClientWidth = document.documentElement.clientWidth; 3935 return getMaxDimensionOf(bodyWidth, docWidth, docClientWidth); 3936} 3937ASPx.GetDocumentMaxClientHeight = function(){ 3938 var bodyHeight = document.body.offsetHeight; 3939 var docHeight = document.documentElement.offsetHeight; 3940 var docClientHeight = document.documentElement.clientHeight; 3941 return getMaxDimensionOf(bodyHeight, docHeight, docClientHeight); 3942} 3943ASPx.verticalScrollIsNotHidden = null; 3944ASPx.horizontalScrollIsNotHidden = null; 3945ASPx.GetVerticalScrollIsNotHidden = function() { 3946 if(!ASPx.IsExists(ASPx.verticalScrollIsNotHidden)) 3947 ASPx.verticalScrollIsNotHidden = ASPx.GetCurrentStyle(document.body).overflowY !== "hidden" 3948 && ASPx.GetCurrentStyle(document.documentElement).overflowY !== "hidden"; 3949 return ASPx.verticalScrollIsNotHidden; 3950} 3951ASPx.GetHorizontalScrollIsNotHidden = function() { 3952 if(!ASPx.IsExists(ASPx.horizontalScrollIsNotHidden)) 3953 ASPx.horizontalScrollIsNotHidden = ASPx.GetCurrentStyle(document.body).overflowX !== "hidden" 3954 && ASPx.GetCurrentStyle(document.documentElement).overflowX !== "hidden"; 3955 return ASPx.horizontalScrollIsNotHidden; 3956} 3957ASPx.GetCurrentDocumentWidth = function() { 3958 var result = ASPx.GetDocumentClientWidth(); 3959 if(!ASPx.Browser.Safari && ASPx.GetVerticalScrollIsNotHidden() && ASPx.GetDocumentHeight() > ASPx.GetDocumentClientHeight()) 3960 result += ASPx.GetVerticalScrollBarWidth(); 3961 return result; 3962} 3963ASPx.GetCurrentDocumentHeight = function() { 3964 var result = ASPx.GetDocumentClientHeight(); 3965 if(!ASPx.Browser.Safari && ASPx.GetHorizontalScrollIsNotHidden() && ASPx.GetDocumentWidth() > ASPx.GetDocumentClientWidth()) 3966 result += ASPx.GetVerticalScrollBarWidth(); 3967 return result; 3968} 3969function getMaxDimensionOf(){ 3970 var max = ASPx.InvalidDimension; 3971 for(var i = 0; i < arguments.length; i++){ 3972 if(max < arguments[i]) 3973 max = arguments[i]; 3974 } 3975 return max; 3976} 3977ASPx.GetClientLeft = function(element){ 3978 return ASPx.IsExists(element.clientLeft) ? element.clientLeft : (element.offsetWidth - element.clientWidth) / 2; 3979} 3980ASPx.GetClientTop = function(element){ 3981 return ASPx.IsExists(element.clientTop) ? element.clientTop : (element.offsetHeight - element.clientHeight) / 2; 3982} 3983ASPx.SetStyles = function(element, styles, makeImportant) { 3984 if(ASPx.IsExists(styles.cssText)) 3985 element.style.cssText = styles.cssText; 3986 if(ASPx.IsExists(styles.className)) 3987 element.className = styles.className; 3988 for(var property in styles) { 3989 if(!styles.hasOwnProperty(property)) 3990 continue; 3991 var value = styles[property]; 3992 switch (property) { 3993 case "cssText": 3994 case "className": 3995 break; 3996 case "float": 3997 ASPx.SetElementFloat(element, value); 3998 break; 3999 case "opacity": 4000 ASPx.SetElementOpacity(element, value); 4001 break; 4002 case "zIndex": 4003 ASPx.SetStylesCore(element, property, value, makeImportant); 4004 break; 4005 case "fontWeight": 4006 if(ASPx.Browser.IE && ASPx.Browser.Version < 9 && typeof(styles[property]) == "number") 4007 value = styles[property].toString(); 4008 default: 4009 ASPx.SetStylesCore(element, property, value + (typeof (value) == "number" ? "px" : ""), makeImportant); 4010 } 4011 } 4012} 4013ASPx.SetStylesCore = function(element, property, value, makeImportant) { 4014 if(makeImportant) { 4015 var index = property.search("[A-Z]"); 4016 if(index != -1) 4017 property = property.replace(property.charAt(index), "-" + property.charAt(index).toLowerCase()); 4018 if(element.style.setProperty) 4019 element.style.setProperty(property, value, "important"); 4020 else 4021 element.style.cssText += ";" + property + ":" + value + "!important"; 4022 } 4023 else 4024 element.style[property] = value; 4025} 4026ASPx.RemoveBordersAndShadows = function(el) { 4027 if(!el || !el.style) 4028 return; 4029 el.style.borderWidth = 0; 4030 if(ASPx.IsExists(el.style.boxShadow)) 4031 el.style.boxShadow = "none"; 4032 else if(ASPx.IsExists(el.style.MozBoxShadow)) 4033 el.style.MozBoxShadow = "none"; 4034 else if(ASPx.IsExists(el.style.webkitBoxShadow)) 4035 el.style.webkitBoxShadow = "none"; 4036} 4037ASPx.GetCellSpacing = function(element) { 4038 var val = parseInt(element.cellSpacing); 4039 if(!isNaN(val)) return val; 4040 val = parseInt(ASPx.GetCurrentStyle(element).borderSpacing); 4041 if(!isNaN(val)) return val; 4042 return 0; 4043} 4044ASPx.GetInnerScrollPositions = function(element) { 4045 var scrolls = []; 4046 getInnerScrollPositionsCore(element, scrolls); 4047 return scrolls; 4048} 4049function getInnerScrollPositionsCore(element, scrolls) { 4050 for(var child = element.firstChild; child; child = child.nextSibling) { 4051 var scrollTop = child.scrollTop, 4052 scrollLeft = child.scrollLeft; 4053 if(scrollTop > 0 || scrollLeft > 0) 4054 scrolls.push([child, scrollTop, scrollLeft]); 4055 getInnerScrollPositionsCore(child, scrolls); 4056 } 4057} 4058ASPx.RestoreInnerScrollPositions = function(scrolls) { 4059 for(var i = 0, scrollArr; scrollArr = scrolls[i]; i++) { 4060 if(scrollArr[1] > 0) 4061 scrollArr[0].scrollTop = scrollArr[1]; 4062 if(scrollArr[2] > 0) 4063 scrollArr[0].scrollLeft = scrollArr[2]; 4064 } 4065} 4066ASPx.GetOuterScrollPosition = function(element) { 4067 while(element.tagName !== "BODY") { 4068 var scrollTop = element.scrollTop, 4069 scrollLeft = element.scrollLeft; 4070 if(scrollTop > 0 || scrollLeft > 0) { 4071 return { 4072 scrollTop: scrollTop, 4073 scrollLeft: scrollLeft, 4074 element: element 4075 }; 4076 } 4077 element = element.parentNode; 4078 } 4079 return { 4080 scrollTop: ASPx.GetDocumentScrollTop(), 4081 scrollLeft: ASPx.GetDocumentScrollLeft() 4082 }; 4083} 4084ASPx.RestoreOuterScrollPosition = function(scrollInfo) { 4085 if(scrollInfo.element) { 4086 if(scrollInfo.scrollTop > 0) 4087 scrollInfo.element.scrollTop = scrollInfo.scrollTop; 4088 if(scrollInfo.scrollLeft > 0) 4089 scrollInfo.element.scrollLeft = scrollInfo.scrollLeft; 4090 } 4091 else { 4092 if(scrollInfo.scrollTop > 0) 4093 ASPx.SetDocumentScrollTop(scrollInfo.scrollTop); 4094 if(scrollInfo.scrollLeft > 0) 4095 ASPx.SetDocumentScrollLeft(scrollInfo.scrollLeft); 4096 } 4097} 4098ASPx.ChangeElementContainer = function(element, container, savePreviousContainer) { 4099 if(element.parentNode != container) { 4100 var parentNode = element.parentNode; 4101 parentNode.removeChild(element);
4102 container.appendChild(element); 4103 if(savePreviousContainer) 4104 element.previousContainer = parentNode; 4105 } 4106} 4107ASPx.RestoreElementContainer = function(element) { 4108 if(element.previousContainer) { 4109 ASPx.ChangeElementContainer(element, element.previousContainer, false); 4110 element.previousContainer = null; 4111 } 4112} 4113ASPx.MoveChildrenToElement = function(sourceElement, destinationElement){ 4114 while(sourceElement.childNodes.length > 0) 4115 destinationElement.appendChild(sourceElement.childNodes[0]); 4116} 4117ASPx.GetScriptCode = function(script) { 4118 var useFirstChildElement = Browser.Chrome && Browser.Version < 11 || Browser.Safari && Browser.Version < 5; 4119 var text = useFirstChildElement ? script.firstChild.data : script.text; 4120 var comment = "<!--"; 4121 var pos = text.indexOf(comment); 4122 if(pos > -1) 4123 text = text.substr(pos + comment.length); 4124 return text; 4125} 4126ASPx.AppendScript = function(script) { 4127 var parent = document.getElementsByTagName("head")[0]; 4128 if(!parent) 4129 parent = document.body; 4130 if(parent) 4131 parent.appendChild(script); 4132} 4133function getFrame(frames, name) { 4134 if(frames[name]) 4135 return frames[name]; 4136 for(var i = 0; i < frames.length; i++) { 4137 try { 4138 var frame = frames[i]; 4139 if(frame.name == name) 4140 return frame; 4141 frame = getFrame(frame.frames, name); 4142 if(frame != null) 4143 return frame; 4144 } catch(e) { 4145 } 4146 } 4147 return null; 4148} 4149ASPx.IsValidElement = function(element) { 4150 if(!element) 4151 return false; 4152 if(!(Browser.Firefox && Browser.Version < 4)) { 4153 if(element.ownerDocument && element.ownerDocument.body && element.ownerDocument.body.compareDocumentPosition) 4154 return element.ownerDocument.body.compareDocumentPosition(element) % 2 === 0; 4155 } 4156 if(!Browser.Opera && !(Browser.IE && Browser.Version < 9) && element.offsetParent && element.parentNode.tagName) 4157 return true; 4158 while(element != null){ 4159 if(element.tagName == "BODY") 4160 return true; 4161 element = element.parentNode; 4162 } 4163 return false; 4164} 4165ASPx.IsValidElements = function(elements) { 4166 if(!elements) 4167 return false; 4168 for(var i = 0; i < elements.length; i++) { 4169 if(elements[i] && !ASPx.IsValidElement(elements[i])) 4170 return false; 4171 } 4172 return true; 4173} 4174ASPx.IsExistsElement = function(element) { 4175 return element && ASPx.IsValidElement(element); 4176} 4177ASPx.CreateHtmlElementFromString = function(str) { 4178 var dummy = ASPx.CreateHtmlElement(); 4179 dummy.innerHTML = str; 4180 return dummy.firstChild; 4181} 4182ASPx.CreateHtmlElement = function(tagName, styles) { 4183 var element = document.createElement(tagName || "DIV"); 4184 if(styles) 4185 ASPx.SetStyles(element, styles); 4186 return element; 4187} 4188ASPx.RestoreElementOriginalWidth = function(element) { 4189 if(!ASPx.IsExistsElement(element)) 4190 return; 4191 element.style.width = element.dxOrigWidth = ASPx.GetElementOriginalWidth(element); 4192} 4193ASPx.GetElementOriginalWidth = function(element) { 4194 if(!ASPx.IsExistsElement(element)) 4195 return null; 4196 var width; 4197 if(!ASPx.IsExists(element.dxOrigWidth)) { 4198 width = String(element.style.width).length > 0 4199 ? element.style.width 4200 : element.offsetWidth + "px"; 4201 } else { 4202 width = element.dxOrigWidth; 4203 } 4204 return width; 4205} 4206ASPx.DropElementOriginalWidth = function(element) { 4207 if(ASPx.IsExists(element.dxOrigWidth)) 4208 element.dxOrigWidth = null; 4209} 4210ASPx.GetObjectKeys = function(obj) { 4211 if(!obj) return [ ]; 4212 if(Object.keys) 4213 return Object.keys(obj); 4214 var keys = [ ]; 4215 for(var key in obj) { 4216 if(obj.hasOwnProperty(key)) 4217 keys.push(key); 4218 } 4219 return keys; 4220} 4221ASPx.ShowErrorAlert = function(message) { 4222 var textArea = document.createElement("TEXTAREA"); 4223 textArea.innerHTML = message; 4224 message = textArea.value; 4225 if(ASPx.IsExists(message) && message !== "") 4226 alert(message); 4227}; 4228ASPx.ShowKBErrorMessage = function(text, kbid) { 4229 var console = window.console; 4230 if(!console || !ASPx.IsFunction(console.error)) 4231 return; 4232 console.error(text + "https://www.devexpress.com/kbid=" + kbid + "."); 4233}; 4234ASPx.IsInteractiveControl = function(element, extremeParent) { 4235 return Data.ArrayIndexOf(["A", "INPUT", "SELECT", "OPTION", "TEXTAREA", "BUTTON", "IFRAME"], element.tagName) > -1; 4236} 4237ASPx.IsUrlContainsClientScript = function(url) { 4238 return url.toLowerCase().indexOf("javascript:") !== -1; 4239} 4240Function.prototype.aspxBind = function(scope) { 4241 var func = this; 4242 return function() { 4243 return func.apply(scope, arguments); 4244 }; 4245}; 4246var FilteringUtils = { }; 4247FilteringUtils.EventKeyCodeChangesTheInput = function(evt) { 4248 if(ASPx.IsPasteShortcut(evt)) 4249 return true; 4250 else if(evt.ctrlKey && !evt.altKey) 4251 return false; 4252 if(ASPx.Browser.AndroidMobilePlatform || ASPx.Browser.MacOSMobilePlatform) return true; 4253 var keyCode = ASPx.Evt.GetKeyCode(evt); 4254 var isSystemKey = ASPx.Key.Windows <= keyCode && keyCode <= ASPx.Key.ContextMenu; 4255 var isFKey = ASPx.Key.F1 <= keyCode && keyCode <= 127; 4256 return ASPx.Key.Delete <= keyCode && !isSystemKey && !isFKey || keyCode == ASPx.Key.Backspace || keyCode == ASPx.Key.Space; 4257} 4258FilteringUtils.FormatCallbackArg = function(prefix, arg) { 4259 return (ASPx.IsExists(arg) ? prefix + "|" + arg.length + ';' + arg + ';' : ""); 4260} 4261ASPx.FilteringUtils = FilteringUtils; 4262var FormatStringHelper = { }; 4263FormatStringHelper.PlaceHolderTemplateStruct = function(startIndex, length, index, placeHolderString){ 4264 this.startIndex = startIndex; 4265 this.realStartIndex = 0; 4266 this.length = length; 4267 this.realLength = 0; 4268 this.index = index; 4269 this.placeHolderString = placeHolderString; 4270} 4271FormatStringHelper.GetPlaceHolderTemplates = function(formatString){ 4272 formatString = this.CollapseDoubleBrackets(formatString); 4273 var templates = this.CreatePlaceHolderTemplates(formatString); 4274 return templates; 4275} 4276FormatStringHelper.CreatePlaceHolderTemplates = function(formatString){ 4277 var templates = []; 4278 var templateStrings = formatString.match(/{[^}]+}/g); 4279 if(templateStrings != null){ 4280 var pos = 0; 4281 for(var i = 0; i < templateStrings.length; i++){ 4282 var tempString = templateStrings[i]; 4283 var startIndex = formatString.indexOf(tempString, pos); 4284 var length = tempString.length; 4285 var indexString = tempString.slice(1).match(/^[0-9]+/); 4286 var index = parseInt(indexString); 4287 templates.push(new this.PlaceHolderTemplateStruct(startIndex, length, index, tempString)); 4288 pos = startIndex + length; 4289 } 4290 } 4291 return templates; 4292} 4293FormatStringHelper.CollapseDoubleBrackets = function(formatString){ 4294 formatString = this.CollapseOpenDoubleBrackets(formatString); 4295 formatString = this.CollapseCloseDoubleBrackets(formatString); 4296 return formatString; 4297} 4298FormatStringHelper.CollapseOpenDoubleBrackets = function(formatString){ 4299 return formatString.replace(/{{/g, "_"); 4300} 4301FormatStringHelper.CollapseCloseDoubleBrackets = function(formatString){ 4302 while(true){ 4303 var index = formatString.lastIndexOf("}}"); 4304 if(index == -1) 4305 break; 4306 else 4307 formatString = formatString.substr(0, index) + "_" + formatString.substr(index + 2); 4308 } 4309 return formatString; 4310} 4311ASPx.FormatStringHelper = FormatStringHelper; 4312var StartWithFilteringUtils = { }; 4313StartWithFilteringUtils.HighlightSuggestedText = function(input, suggestedText, control){ 4314 if(this.NeedToLockAndoidKeyEvents(control)) 4315 control.LockAndroidKeyEvents(); 4316 var selInfo = ASPx.Selection.GetInfo(input); 4317 var currentTextLenght = ASPx.Str.GetCoincideCharCount(suggestedText, input.value, 4318 function(text, filter) { 4319 return text.indexOf(filter) == 0; 4320 }); 4321 var suggestedTextLenght = suggestedText.length; 4322 var isSelected = selInfo.startPos == 0 && selInfo.endPos == currentTextLenght && 4323 selInfo.endPos == suggestedTextLenght && input.value == suggestedText; 4324 if(!isSelected) { 4325 input.value = suggestedText; 4326 if(this.NeedToLockAndoidKeyEvents(control)) { 4327 window.setTimeout(function() { 4328 this.SelectText(input, currentTextLenght, suggestedTextLenght); 4329 control.UnlockAndroidKeyEvents(); 4330 }.aspxBind(this), control.adroidSamsungBugTimeout); 4331 } else 4332 this.SelectText(input, currentTextLenght, suggestedTextLenght); 4333 } 4334} 4335StartWithFilteringUtils.SelectText = function(input, startPos, stopPos) { 4336 if(startPos < stopPos) 4337 ASPx.Selection.Set(input, startPos, stopPos); 4338} 4339StartWithFilteringUtils.RollbackOneSuggestedChar = function(input){ 4340 var currentText = input.value; 4341 var cutText = currentText.slice(0, -1); 4342 if(cutText != currentText) 4343 input.value = cutText; 4344} 4345StartWithFilteringUtils.NeedToLockAndoidKeyEvents = function(control) { 4346 return ASPx.Browser.AndroidMobilePlatform && control && control.LockAndroidKeyEvents; 4347} 4348ASPx.StartWithFilteringUtils = StartWithFilteringUtils; 4349var ContainsFilteringUtils = { }; 4350ContainsFilteringUtils.ColumnSelectionStruct = function(index, startIndex, length){ 4351 this.index = index; 4352 this.length = length; 4353 this.startIndex = startIndex; 4354} 4355ContainsFilteringUtils.IsFilterCrossPlaseHolder = function(filterStartIndex, filterEndIndex, template) { 4356 var left = Math.max(filterStartIndex, template.realStartIndex); 4357 var right = Math.min(filterEndIndex, template.realStartIndex + template.realLength); 4358 return left < right; 4359} 4360ContainsFilteringUtils.GetColumnSelectionsForItem = function(itemValues, formatString, filterString) { 4361 if(formatString == "") 4362 return this.GetSelectionForSingleColumnItem(itemValues, filterString); 4363 var result = []; 4364 var formatedString = ASPx.Formatter.Format(formatString, itemValues); 4365 var filterStartIndex = ASPx.Str.PrepareStringForFilter(formatedString).indexOf(ASPx.Str.PrepareStringForFilter(filterString)); 4366 if(filterStartIndex == -1) return result; 4367 var filterEndIndex = filterStartIndex + filterString.length; 4368 var templates = FormatStringHelper.GetPlaceHolderTemplates(formatString);
4369 this.SupplyTemplatesWithRealValues(itemValues, templates); 4370 for(var i = 0; i < templates.length ; i++) { 4371 if(this.IsFilterCrossPlaseHolder(filterStartIndex, filterEndIndex, templates[i])) 4372 result.push(this.GetColumnSelectionsForItemValue(templates[i], filterStartIndex, filterEndIndex)); 4373 } 4374 return result; 4375} 4376ContainsFilteringUtils.GetColumnSelectionsForItemValue = function(template, filterStartIndex, filterEndIndex) { 4377 var selectedTextStartIndex = filterStartIndex < template.realStartIndex ? 0 : 4378 filterStartIndex - template.realStartIndex; 4379 var selectedTextEndIndex = filterEndIndex > template.realStartIndex + template.realLength ? template.realLength : 4380 filterEndIndex - template.realStartIndex; 4381 var selectedTextLength = selectedTextEndIndex - selectedTextStartIndex; 4382 return new this.ColumnSelectionStruct(template.index, selectedTextStartIndex, selectedTextLength); 4383}, 4384ContainsFilteringUtils.GetSelectionForSingleColumnItem = function(itemValues, filterString) { 4385 var selectedTextStartIndex = ASPx.Str.PrepareStringForFilter(itemValues[0]).indexOf(ASPx.Str.PrepareStringForFilter(filterString)); 4386 var selectedTextLength = filterString.length; 4387 return [new this.ColumnSelectionStruct(0, selectedTextStartIndex, selectedTextLength)]; 4388} 4389ContainsFilteringUtils.ResetFormatStringIndex = function(formatString, index) { 4390 if(index != 0) 4391 return formatString.replace(index.toString(), "0"); 4392 return formatString; 4393}, 4394ContainsFilteringUtils.SupplyTemplatesWithRealValues = function(itemValues, templates) { 4395 var shift = 0; 4396 for(var i = 0; i < templates.length; i++) { 4397 var formatString = this.ResetFormatStringIndex(templates[i].placeHolderString, templates[i].index); 4398 var currentItemValue = itemValues[templates[i].index]; 4399 templates[i].realLength = ASPx.Formatter.Format(formatString, currentItemValue).length; 4400 templates[i].realStartIndex += templates[i].startIndex + shift; 4401 shift += templates[i].realLength - templates[i].placeHolderString.length; 4402 } 4403} 4404ContainsFilteringUtils.PrepareElementText = function(itemText) { 4405 return itemText ? itemText.replace(/\&/g, "&").replace(/</g, "<").replace(/>/g, ">") : ''; 4406} 4407ContainsFilteringUtils.UnselectContainsTextInElement = function(element, selection, highlightTagName) { 4408 var currentText = ASPx.Attr.GetAttribute (element, "DXText"); 4409 if(ASPx.IsExists(currentText)) { 4410 currentText = ContainsFilteringUtils.PrepareElementText(currentText); 4411 ASPx.SetInnerHtml(element, currentText === "" ? " " : currentText); 4412 } 4413} 4414ContainsFilteringUtils.ReselectContainsTextInElement = function(element, selection, highlightTagName) { 4415 var currentText = ASPx.GetInnerText(element); 4416 if(!highlightTagName) 4417 highlightTagName = "em"; 4418 highlightTagName = highlightTagName.toLowerCase(); 4419 if(currentText.indexOf("</" + highlightTagName + ">") != -1) 4420 ContainsFilteringUtils.UnselectContainsTextInElement(element, selection, highlightTagName); 4421 return ContainsFilteringUtils.SelectContainsTextInElement(element, selection, highlightTagName); 4422} 4423ContainsFilteringUtils.SelectContainsTextInElement = function(element, selection, highlightTagName) { 4424 if(selection.startIndex == -1) 4425 return; 4426 var currentText = ASPx.Attr.GetAttribute (element, "DXText"); 4427 if(!ASPx.IsExists(currentText)) ASPx.Attr.SetAttribute (element, "DXText", ASPx.GetInnerText(element)); 4428 if(!highlightTagName) 4429 highlightTagName = "em"; 4430 highlightTagName = highlightTagName.toLowerCase(); 4431 var oldInnerText = ASPx.GetInnerText(element); 4432 var newInnerText = ContainsFilteringUtils.PrepareElementText(oldInnerText.substr(0, selection.startIndex)) + "<" + highlightTagName + ">" + 4433 oldInnerText.substr(selection.startIndex, selection.length) + "</" + highlightTagName + ">" + 4434 ContainsFilteringUtils.PrepareElementText(oldInnerText.substr(selection.startIndex + selection.length)); 4435 ASPx.SetInnerHtml(element, newInnerText); 4436} 4437ASPx.ContainsFilteringUtils = ContainsFilteringUtils; 4438ASPx.MakeEqualControlsWidth = function(name1, name2){ 4439 var control1 = ASPx.GetControlCollection().Get(name1); 4440 var control2 = ASPx.GetControlCollection().Get(name2); 4441 if(control1 && control2){
4442 var width = Math.max(control1.GetWidth(), control2.GetWidth()); 4443 control1.SetWidth(width); 4444 control2.SetWidth(width); 4445 } 4446} 4447var AccessibilityUtils = { 4448 isInitialized: false, 4449 highContrastCssClassMarker: "dxHighContrast", 4450 highContrastThemeActive: false, 4451 accessibleBackgroundCssMarker: ".dx-runtime-background", 4452 createAccessibleBackgrounds: function(control) { 4453 if(!this.highContrastThemeActive || control.accessibleBackgroundsCreated || !control.accessibilityCompliant) 4454 return; 4455 var className = this.accessibleBackgroundCssMarker; 4456 var styleSheetRuleNames = []; 4457 iterateStyleSheetRules(null, function(rule) { 4458 var selectorTxt = rule.selectorText; 4459 if(selectorTxt && selectorTxt.indexOf(className) > -1) 4460 styleSheetRuleNames.push(ASPx.Str.CompleteReplace(selectorTxt, className, "")); 4461 }); 4462 for(var i = 0; i < styleSheetRuleNames.length; i++) { 4463 var name = styleSheetRuleNames[i]; 4464 var rule = ASPx.GetStyleSheetRules(name.substring(1)); 4465 if(rule && rule.style && rule.style.backgroundImage) 4466 this.createAccessibleBackground(control.GetMainElement(), rule.style, name); 4467 } 4468 control.accessibleBackgroundsCreated = true; 4469 }, 4470 createAccessibleBackground: function(container, style, selector) { 4471 if(!container) 4472 return; 4473 var backgroundUrl = style.backgroundImage.substring(5, style.backgroundImage.length - 2); 4474 var elements = container.querySelectorAll(selector); 4475 var accessibleBackgroundClassName = "dx-acc-bi"; 4476 for(var i = 0; i < elements.length; i++) { 4477 var element = elements[i]; 4478 if(ASPx.ElementHasCssClass(element, accessibleBackgroundClassName)) 4479 continue; 4480 var image = null; 4481 if(element.tagName !== "IMG") { 4482 ASPx.AddClassNameToElement(element, accessibleBackgroundClassName); 4483 image = element.ownerDocument.createElement("IMG"); 4484 ASPx.SetStyles(image, { width: element.offsetWidth, height: element.offsetHeight }); 4485 if(element.firstChild) 4486 element.insertBefore(image, element.firstChild); 4487 else 4488 element.appendChild(image); 4489 } else 4490 image = element; 4491 image.src = backgroundUrl; 4492 } 4493 }, 4494 initialize: function() { 4495 if(!this.isInitialized) { 4496 this.isInitialized = true; 4497 this.detectHighContrastTheme(); 4498 } 4499 }, 4500 detectHighContrastTheme: function() { 4501 var testElement = document.createElement("DIV"); 4502 ASPx.SetStyles(testElement, { 4503 backgroundImage: "url('" + ASPx.EmptyImageUrl + "')", 4504 display: "none" 4505 }, true); 4506 var docElement = document.documentElement; 4507 docElement.appendChild(testElement); 4508 var actualBackgroundImg = ASPx.GetCurrentStyle(testElement).backgroundImage; 4509 docElement.removeChild(testElement); 4510 if(actualBackgroundImg === "none") { 4511 this.highContrastThemeActive = true; 4512 ASPx.AddClassNameToElement(docElement, this.highContrastCssClassMarker); 4513 } 4514 } 4515}; 4516ASPx.AccessibilityUtils = AccessibilityUtils; 4517ASPx.AccessibilityUtils.SendMessageToAssistiveTechnology = function(message) { 4518 var messageParts = ASPx.Ident.IsArray(message) ? message : [message]; 4519 var args = new ASPxClientControlBeforePronounceEventArgs(messageParts, null); 4520 ASPx.AccessibilityPronouncer.EnsureInitialize(); 4521 ASPx.AccessibilityPronouncer.Pronounce(args, ASPx.AccessibilityPronouncerType.live); 4522}; 4523ASPx.AccessibilityUtils.SetFocusAccessible = function(focusableElement) { 4524 if(!focusableElement) 4525 return; 4526 var elementId = focusableElement.id; 4527 if(!elementId) { 4528 var namedParent = ASPx.GetParent(focusableElement, function(element) { 4529 return !!element.id; 4530 }); 4531 if(ASPx.IsExists(namedParent)) 4532 elementId = namedParent.id; 4533 } 4534 var focusableControl = ASPx.GetClientControlByElementID(elementId); 4535 if(focusableControl && focusableControl.OnAssociatedLabelClick) 4536 focusableControl.OnAssociatedLabelClick(focusableElement); 4537 else 4538 window.setTimeout(function() { 4539 ASPx.AccessibilityUtils.SetFocusAccessibleCore(focusableElement); 4540 }, 0); 4541} 4542ASPx.AccessibilityUtils.SetFocusAccessibleCore = function(focusableElement) { 4543 if(!ASPx.IsExists(focusableElement)) 4544 return; 4545 if(!ASPx.IsValidElement(focusableElement) && focusableElement.id) 4546 focusableElement = ASPx.GetElementById(focusableElement.id); 4547 if(!ASPx.IsActionElement(focusableElement)) 4548 focusableElement = ASPx.RestoreFocusHelper.findNeighbourFocusElement(focusableElement, document.body); 4549 if(ASPx.IsExistsElement(focusableElement)) 4550 focusableElement.focus(); 4551} 4552ASPx.EnableCssAnimation = true; 4553var AnimationTransitionBase = ASPx.CreateClass(null, { 4554 constructor: function(element, options) { 4555 if(element) { 4556 AnimationTransitionBase.Cancel(element); 4557 this.element = element; 4558 this.element.aspxTransition = this; 4559 } 4560 this.duration = options.duration || AnimationConstants.Durations.DEFAULT; 4561 this.transition = options.transition || AnimationConstants.Transitions.SINE; 4562 this.property = options.property; 4563 this.unit = options.unit || ""; 4564 this.onComplete = options.onComplete; 4565 this.to = null; 4566 this.from = null; 4567 }, 4568 Start: function(from, to) { 4569 if(to != undefined) { 4570 this.to = to; 4571 this.from = from; 4572 this.SetValue(this.from); 4573 } 4574 else 4575 this.to = from; 4576 }, 4577 Cancel: function() { 4578 if(!this.element) 4579 return; 4580 try { 4581 delete this.element.aspxTransition; 4582 } catch(e) { 4583 this.element.aspxTransition = undefined; 4584 } 4585 }, 4586 GetValue: function() { 4587 return this.getValueInternal(this.element, this.property); 4588 }, 4589 SetValue: function(value) { 4590 this.setValueInternal(this.element, this.property, this.unit, value); 4591 }, 4592 setValueInternal: function(element, property, unit, value) { 4593 if(property == "opacity") 4594 AnimationUtils.setOpacity(element, value); 4595 else 4596 element.style[property] = value + unit; 4597 }, 4598 getValueInternal: function(element, property) { 4599 if(property == "opacity") 4600 return ASPx.GetElementOpacity(element); 4601 var value = parseFloat(element.style[property]); 4602 return isNaN(value) ? 0 : value; 4603 }, 4604 performOnComplete: function() { 4605 if(this.onComplete) 4606 this.onComplete(this.element); 4607 }, 4608 getTransition: function() { 4609 return this.transition; 4610 } 4611}); 4612AnimationTransitionBase.Cancel = function(element) { 4613 if(element.aspxTransition) 4614 element.aspxTransition.Cancel(); 4615}; 4616var AnimationConstants = {}; 4617AnimationConstants.Durations = { 4618 SHORT: 200, 4619 DEFAULT: 400, 4620 LONG: 600 4621}; 4622AnimationConstants.Transitions = { 4623 LINER: { 4624 Css: "cubic-bezier(0.250, 0.250, 0.750, 0.750)", 4625 Js: function(progress) { return progress; } 4626 }, 4627 SINE: { 4628 Css: "cubic-bezier(0.470, 0.000, 0.745, 0.715)", 4629 Js: function(progress) { return Math.sin(progress * 1.57); } 4630 }, 4631 POW: { 4632 Css: "cubic-bezier(0.755, 0.050, 0.855, 0.060)", 4633 Js: function(progress) { return Math.pow(progress, 4); } 4634 }, 4635 POW_EASE_OUT: { 4636 Css: "cubic-bezier(0.165, 0.840, 0.440, 1.000)", 4637 Js: function(progress) { return 1 - AnimationConstants.Transitions.POW.Js(1 - progress); } 4638 }, 4639 RIPPLE: { 4640 Css: "cubic-bezier(0.47, 0.06, 0.23, 0.99)", 4641 Js: function(progress) { 4642 return Math.pow((progress), 3) * 0.47 + 3 * progress * Math.pow((1 - progress), 2) * 0.06 + 3 * Math.pow(progress, 2) * 4643 (1 - progress) * 0.23 + 0.99 * Math.pow(progress, 3); 4644 } 4645 } 4646}; 4647var JsAnimationTransition = ASPx.CreateClass(AnimationTransitionBase, { 4648 constructor: function(element, options) { 4649 this.constructor.prototype.constructor.call(this, element, options); 4650 this.onStep = options.onStep; 4651 this.fps = 60; 4652 this.startTime = null; 4653 }, 4654 Start: function(from, to) { 4655 if(from == to) { 4656 this.from = this.to = from; 4657 setTimeout(this.complete.aspxBind(this), 0); 4658 } 4659 else { 4660 AnimationTransitionBase.prototype.Start.call(this, from, to); 4661 if(to == undefined) 4662 this.from = this.GetValue(); 4663 this.initTimer(); 4664 } 4665 }, 4666 Cancel: function() { 4667 AnimationTransitionBase.prototype.Cancel.call(this); 4668 if(this.timerId) 4669 clearInterval(this.timerId); 4670 }, 4671 initTimer: function() { 4672 this.startTime = new Date(); 4673 this.timerId = window.setInterval(function() { this.onTick(); }.aspxBind(this), 1000 / this.fps);
4674 }, 4675 onTick: function() { 4676 var progress = (new Date() - this.startTime) / this.duration; 4677 if(progress >= 1) 4678 this.complete(); 4679 else { 4680 this.update(progress); 4681 if(this.onStep) 4682 this.onStep(); 4683 } 4684 }, 4685 update: function(progress) { 4686 this.SetValue(this.gatCalculatedValue(this.from, this.to, progress)); 4687 }, 4688 complete: function() { 4689 this.Cancel(); 4690 this.update(1); 4691 this.performOnComplete(); 4692 }, 4693 gatCalculatedValue: function(from, to, progress) { 4694 if(progress == 1) 4695 return to; 4696 return from + (to - from) * this.getTransition()(progress); 4697 }, 4698 getTransition: function() { 4699 return this.transition.Js; 4700 } 4701}); 4702var SimpleAnimationTransition = ASPx.CreateClass(JsAnimationTransition, { 4703 constructor: function(options) { 4704 this.constructor.prototype.constructor.call(this, null, options); 4705 this.transition = options.transition || AnimationConstants.Transitions.POW_EASE_OUT; 4706 this.onUpdate = options.onUpdate; 4707 this.lastValue = 0; 4708 }, 4709 SetValue: function(value) { 4710 this.onUpdate(value - this.lastValue); 4711 this.lastValue = value; 4712 }, 4713 GetValue: function() { 4714 return this.lastValue; 4715 }, 4716 performOnComplete: function() { 4717 if(this.onComplete) 4718 this.onComplete(); 4719 } 4720}); 4721var MultipleJsAnimationTransition = ASPx.CreateClass(JsAnimationTransition, { 4722 constructor: function(element, options) { 4723 this.constructor.prototype.constructor.call(this, element, options); 4724 this.properties = {}; 4725 }, 4726 Start: function(properties) { 4727 this.initProperties(properties); 4728 this.initTimer(); 4729 }, 4730 initProperties: function(properties) { 4731 this.properties = properties; 4732 for(var propName in this.properties) 4733 if(properties[propName].from == undefined) 4734 properties[propName].from = this.getValueInternal(this.element, propName); 4735 }, 4736 update: function(progress) { 4737 for(var propName in this.properties) { 4738 var property = this.properties[propName]; 4739 if(property.from != property.to) 4740 this.setValueInternal(this.element, propName, property.unit, this.gatCalculatedValue(property.from, property.to, progress)); 4741 } 4742 } 4743}); 4744var CssAnimationTransition = ASPx.CreateClass(AnimationTransitionBase, { 4745 constructor: function(element, options) { 4746 this.constructor.prototype.constructor.call(this, element, options); 4747 this.transitionPropertyName = AnimationUtils.CurrentTransition.property; 4748 this.eventName = AnimationUtils.CurrentTransition.event; 4749 }, 4750 Start: function(from, to) { 4751 AnimationTransitionBase.prototype.Start.call(this, from, to); 4752 this.startTimerId = window.setTimeout(function() { 4753 if(this.from == this.to) 4754 this.onTransitionEnd(); 4755 else { 4756 var isHidden = this.element.offsetHeight == 0 && this.element.offsetWidth == 0; 4757 if(!isHidden) 4758 this.prepareElementBeforeAnimation(); 4759 this.SetValue(this.to); 4760 if(isHidden) 4761 this.onTransitionEnd(); 4762 } 4763 }.aspxBind(this), 0); 4764 }, 4765 Cancel: function() { 4766 window.clearTimeout(this.startTimerId); 4767 AnimationTransitionBase.prototype.Cancel.call(this); 4768 ASPx.Evt.DetachEventFromElement(this.element, this.eventName, CssAnimationTransition.transitionEnd); 4769 this.stopAnimation(); 4770 this.setValueInternal(this.element, this.transitionPropertyName, "", ""); 4771 }, 4772 prepareElementBeforeAnimation: function() { 4773 ASPx.Evt.AttachEventToElement(this.element, this.eventName, CssAnimationTransition.transitionEnd); 4774 var tmpH = this.element.offsetHeight; 4775 this.element.style[this.transitionPropertyName] = this.getTransitionCssString(); 4776 if(ASPx.Browser.Safari && ASPx.Browser.MacOSMobilePlatform && ASPx.Browser.MajorVersion >= 8) 4777 setTimeout(function() { 4778 if(this.element && this.element.aspxTransition) { 4779 this.element.style[this.transitionPropertyName] = ""; 4780 this.element.aspxTransition.onTransitionEnd(); 4781 } 4782 }.aspxBind(this), this.duration + 100); 4783 }, 4784 stopAnimation: function() { 4785 this.SetValue(ASPx.GetCurrentStyle(this.element)[this.property]); 4786 }, 4787 onTransitionEnd: function() { 4788 this.Cancel(); 4789 this.performOnComplete(); 4790 }, 4791 getTransition: function() { 4792 return this.transition.Css; 4793 }, 4794 getTransitionCssString: function() { 4795 return this.getTransitionCssStringInternal(this.getCssName(this.property)); 4796 }, 4797 getTransitionCssStringInternal: function(cssProperty) { 4798 return cssProperty + " " + this.duration + "ms " + this.getTransition(); 4799 }, 4800 getCssName: function(property) { 4801 switch(property) { 4802 case "marginLeft": 4803 return "margin-left"; 4804 case "marginTop": 4805 return "margin-top" 4806 } 4807 return property; 4808 } 4809}); 4810var MultipleCssAnimationTransition = ASPx.CreateClass(CssAnimationTransition, { 4811 constructor: function(element, options) { 4812 this.constructor.prototype.constructor.call(this, element, options); 4813 this.properties = null; 4814 }, 4815 Start: function(properties) { 4816 this.properties = properties; 4817 this.forEachProperties(function(property, propName) { 4818 if(property.from !== undefined) 4819 this.setValueInternal(this.element, propName, property.unit, property.from); 4820 }.aspxBind(this)); 4821 this.prepareElementBeforeAnimation(); 4822 window.setTimeout(function() { 4823 this.forEachProperties(function(property, propName) { 4824 this.setValueInternal(this.element, propName, property.unit, property.to);
4825 }.aspxBind(this)); 4826 }.aspxBind(this), 0); 4827 }, 4828 stopAnimation: function() { 4829 var style = ASPx.GetCurrentStyle(this.element); 4830 this.forEachProperties(function(property, propName) { 4831 this.setValueInternal(this.element, propName, "", style[propName]); 4832 }.aspxBind(this)); 4833 }, 4834 getTransitionCssString: function() { 4835 var str = ""; 4836 this.forEachProperties(function(property, propName) { 4837 str += this.getTransitionCssStringInternal(this.getCssName(propName)) + ","; 4838 }.aspxBind(this)); 4839 str = str.substring(0, str.length - 1); 4840 return str; 4841 }, 4842 forEachProperties: function(func) { 4843 for(var propName in this.properties) { 4844 var property = this.properties[propName]; 4845 if(property.from == undefined) 4846 property.from = this.getValueInternal(this.element, propName); 4847 if(property.from != property.to) 4848 func(property, propName); 4849 } 4850 } 4851}); 4852CssAnimationTransition.transitionEnd = function(evt) { 4853 var element = evt.target; 4854 if(element && element.aspxTransition) 4855 element.aspxTransition.onTransitionEnd(); 4856} 4857var AnimationUtils = { 4858 CanUseCssTransition: function() { return ASPx.EnableCssAnimation && this.CurrentTransition }, 4859 CanUseCssTransform: function() { return this.CanUseCssTransition() && this.CurrentTransform }, 4860 CurrentTransition: (function() { 4861 if(ASPx.Browser.IE) 4862 return null; 4863 var transitions = [ 4864 { property: "webkitTransition", event: "webkitTransitionEnd" }, 4865 { property: "MozTransition", event: "transitionend" }, 4866 { property: "OTransition", event: "oTransitionEnd" }, 4867 { property: "transition", event: "transitionend" } 4868 ] 4869 var fakeElement = document.createElement("DIV"); 4870 for(var i = 0; i < transitions.length; i++) 4871 if(transitions[i].property in fakeElement.style) 4872 return transitions[i]; 4873 })(), 4874 CurrentTransform: (function() { 4875 var transforms = ["transform", "MozTransform", "-webkit-transform", "msTransform", "OTransform"]; 4876 var fakeElement = document.createElement("DIV"); 4877 for(var i = 0; i < transforms.length; i++) 4878 if(transforms[i] in fakeElement.style) 4879 return transforms[i]; 4880 })(), 4881 SetTransformValue: function(element, position, isTop) { 4882 if(this.CanUseCssTransform()) 4883 element.style[this.CurrentTransform] = this.GetTransformCssText(position, isTop); 4884 else 4885 element.style[!isTop ? "left" : "top"] = position + "px"; 4886 }, 4887 GetTransformValue: function(element, isTop) { 4888 if(this.CanUseCssTransform()) { 4889 var cssValue = element.style[this.CurrentTransform]; 4890 return cssValue ? Number(cssValue.replace('matrix(1, 0, 0, 1,', '').replace(')', '').split(',')[!isTop ? 0 : 1]) : 0; 4891 } 4892 else 4893 return !isTop ? element.offsetLeft : element.offsetTop; 4894 }, 4895 GetTransformCssText: function(position, isTop) { 4896 return "matrix(1, 0, 0, 1," + (!isTop ? position : 0) + ", " + (!isTop ? 0 : position) + ")"; 4897 }, 4898 createMultipleAnimationTransition: function (element, options) { 4899 return this.CanUseCssTransition() && !options.onStep ? new MultipleCssAnimationTransition(element, options) : new MultipleJsAnimationTransition(element, options); 4900 }, 4901 createSimpleAnimationTransition: function(options) { 4902 return new SimpleAnimationTransition(options); 4903 }, 4904 createJsAnimationTransition: function(element, options) { 4905 return new JsAnimationTransition(element, options); 4906 }, 4907 createCssAnimationTransition: function(element, options) { 4908 return new CssAnimationTransition(element, options); 4909 }, 4910 setOpacity: function(element, value) { 4911 ASPx.SetElementOpacity(element, value); 4912 } 4913}; 4914ASPxClientUtils = {}; 4915ASPxClientUtils.agent = Browser.UserAgent; 4916ASPxClientUtils.opera = Browser.Opera; 4917ASPxClientUtils.opera9 = Browser.Opera && Browser.MajorVersion == 9; 4918ASPxClientUtils.safari = Browser.Safari; 4919ASPxClientUtils.safari3 = Browser.Safari && Browser.MajorVersion == 3; 4920ASPxClientUtils.safariMacOS = Browser.Safari && Browser.MacOSPlatform; 4921ASPxClientUtils.chrome = Browser.Chrome; 4922ASPxClientUtils.ie = Browser.IE; 4923; 4924ASPxClientUtils.ie7 = Browser.IE && Browser.MajorVersion == 7; 4925ASPxClientUtils.firefox = Browser.Firefox; 4926ASPxClientUtils.firefox3 = Browser.Firefox && Browser.MajorVersion == 3; 4927ASPxClientUtils.mozilla = Browser.Mozilla; 4928ASPxClientUtils.netscape = Browser.Netscape; 4929ASPxClientUtils.browserVersion = Browser.Version; 4930ASPxClientUtils.browserMajorVersion = Browser.MajorVersion; 4931ASPxClientUtils.macOSPlatform = Browser.MacOSPlatform; 4932ASPxClientUtils.windowsPlatform = Browser.WindowsPlatform; 4933ASPxClientUtils.webKitFamily = Browser.WebKitFamily; 4934ASPxClientUtils.netscapeFamily = Browser.NetscapeFamily; 4935ASPxClientUtils.touchUI = Browser.TouchUI; 4936ASPxClientUtils.webKitTouchUI = Browser.WebKitTouchUI; 4937ASPxClientUtils.msTouchUI = Browser.MSTouchUI; 4938ASPxClientUtils.iOSPlatform = Browser.MacOSMobilePlatform; 4939ASPxClientUtils.androidPlatform = Browser.AndroidMobilePlatform; 4940ASPxClientUtils.ArrayInsert = Data.ArrayInsert; 4941ASPxClientUtils.ArrayRemove = Data.ArrayRemove; 4942ASPxClientUtils.ArrayRemoveAt = Data.ArrayRemoveAt; 4943ASPxClientUtils.ArrayClear = Data.ArrayClear; 4944ASPxClientUtils.ArrayIndexOf = Data.ArrayIndexOf; 4945ASPxClientUtils.AttachEventToElement = Evt.AttachEventToElement; 4946ASPxClientUtils.DetachEventFromElement = Evt.DetachEventFromElement; 4947ASPxClientUtils.GetEventSource = Evt.GetEventSource; 4948ASPxClientUtils.GetEventX = Evt.GetEventX; 4949ASPxClientUtils.GetEventY = Evt.GetEventY; 4950ASPxClientUtils.GetKeyCode = Evt.GetKeyCode; 4951ASPxClientUtils.PreventEvent = Evt.PreventEvent; 4952ASPxClientUtils.PreventEventAndBubble = Evt.PreventEventAndBubble; 4953ASPxClientUtils.PreventDragStart = Evt.PreventDragStart; 4954ASPxClientUtils.ClearSelection = Selection.Clear; 4955ASPxClientUtils.IsExists = ASPx.IsExists; 4956ASPxClientUtils.IsFunction = ASPx.IsFunction; 4957ASPxClientUtils.GetAbsoluteX = ASPx.GetAbsoluteX; 4958ASPxClientUtils.GetAbsoluteY = ASPx.GetAbsoluteY; 4959ASPxClientUtils.SetAbsoluteX = ASPx.SetAbsoluteX; 4960ASPxClientUtils.SetAbsoluteY = ASPx.SetAbsoluteY; 4961ASPxClientUtils.GetDocumentScrollTop = ASPx.GetDocumentScrollTop; 4962ASPxClientUtils.GetDocumentScrollLeft = ASPx.GetDocumentScrollLeft; 4963ASPxClientUtils.GetDocumentClientWidth = ASPx.GetDocumentClientWidth; 4964ASPxClientUtils.GetDocumentClientHeight = ASPx.GetDocumentClientHeight; 4965ASPxClientUtils.GetIsParent = ASPx.GetIsParent; 4966ASPxClientUtils.GetParentById = ASPx.GetParentById; 4967ASPxClientUtils.GetParentByTagName = ASPx.GetParentByTagName; 4968ASPxClientUtils.GetParentByClassName = ASPx.GetParentByPartialClassName; 4969ASPxClientUtils.GetChildById = ASPx.GetChildById; 4970ASPxClientUtils.GetChildByTagName = ASPx.GetChildByTagName; 4971ASPxClientUtils.SetCookie = Cookie.SetCookie;
4972ASPxClientUtils.GetCookie = Cookie.GetCookie; 4973ASPxClientUtils.DeleteCookie = Cookie.DelCookie; 4974ASPxClientUtils.GetShortcutCode = ASPx.GetShortcutCode; 4975ASPxClientUtils.GetShortcutCodeByEvent = ASPx.GetShortcutCodeByEvent; 4976ASPxClientUtils.StringToShortcutCode = ASPx.ParseShortcutString; 4977ASPxClientUtils.Trim = Str.Trim; 4978ASPxClientUtils.TrimStart = Str.TrimStart; 4979ASPxClientUtils.TrimEnd = Str.TrimEnd; 4980ASPxClientUtils.SendMessageToAssistiveTechnology = ASPx.AccessibilityUtils.SendMessageToAssistiveTechnology; 4981window.ASPxClientUtils = ASPxClientUtils; 4982ASPx.AnimationUtils = AnimationUtils; 4983ASPx.AnimationTransitionBase = AnimationTransitionBase; 4984ASPx.AnimationConstants = AnimationConstants; 4985})(); 4986 4987(function () { 4988ASPx.classesScriptParsed = false; 4989ASPx.documentLoaded = false; 4990ASPx.CallbackType = { 4991 Data: "d", 4992 Common: "c" 4993}; 4994ASPx.callbackState = { 4995 aborted: "aborted", 4996 inTurn: "inTurn", 4997 sent: "sent" 4998}; 4999var ASPxClientEvent = ASPx.CreateClass(null, { 5000 constructor: function() { 5001 this.handlerInfoList = []; 5002 this.firingIndex = -1; 5003 }, 5004 AddHandler: function(handler, executionContext) { 5005 if(typeof(executionContext) == "undefined") 5006 executionContext = null; 5007 this.RemoveHandler(handler, executionContext); 5008 var handlerInfo = ASPxClientEvent.CreateHandlerInfo(handler, executionContext); 5009 this.handlerInfoList.push(handlerInfo); 5010 }, 5011 RemoveHandler: function(handler, executionContext) { 5012 this.removeHandlerByCondition(function(handlerInfo) { 5013 return handlerInfo.handler == handler && 5014 (!executionContext || handlerInfo.executionContext == executionContext); 5015 }); 5016 }, 5017 removeHandlerByCondition: function(predicate) { 5018 for(var i = this.handlerInfoList.length - 1; i >= 0; i--) { 5019 var handlerInfo = this.handlerInfoList[i]; 5020 if(predicate(handlerInfo)) { 5021 ASPx.Data.ArrayRemoveAt(this.handlerInfoList, i); 5022 if(i <= this.firingIndex) 5023 this.firingIndex--; 5024 } 5025 } 5026 }, 5027 removeHandlerByControlName: function(controlName) { 5028 this.removeHandlerByCondition(function(handlerInfo) { 5029 return handlerInfo.executionContext && 5030 handlerInfo.executionContext.name === controlName; 5031 }); 5032 }, 5033 ClearHandlers: function() { 5034 this.handlerInfoList.length = 0; 5035 }, 5036 FireEvent: function(obj, args) { 5037 for(this.firingIndex = 0; this.firingIndex < this.handlerInfoList.length; this.firingIndex++) { 5038 var handlerInfo = this.handlerInfoList[this.firingIndex]; 5039 handlerInfo.handler.call(handlerInfo.executionContext, obj, args); 5040 } 5041 }, 5042 InsertFirstHandler: function(handler, executionContext){ 5043 if(typeof(executionContext) == "undefined") 5044 executionContext = null; 5045 var handlerInfo = ASPxClientEvent.CreateHandlerInfo(handler, executionContext); 5046 ASPx.Data.ArrayInsert(this.handlerInfoList, handlerInfo, 0); 5047 }, 5048 IsEmpty: function() { 5049 return this.handlerInfoList.length == 0; 5050 } 5051}); 5052ASPxClientEvent.CreateHandlerInfo = function(handler, executionContext) { 5053 return { 5054 handler: handler, 5055 executionContext: executionContext 5056 }; 5057}; 5058var ASPxClientEventArgs = ASPx.CreateClass(null, { 5059 constructor: function() { 5060 } 5061}); 5062ASPxClientEventArgs.Empty = new ASPxClientEventArgs(); 5063var ASPxClientCancelEventArgs = ASPx.CreateClass(ASPxClientEventArgs, { 5064 constructor: function(){ 5065 this.constructor.prototype.constructor.call(this); 5066 this.cancel = false; 5067 } 5068}); 5069var ASPxClientProcessingModeEventArgs = ASPx.CreateClass(ASPxClientEventArgs, { 5070 constructor: function(processOnServer){ 5071 this.constructor.prototype.constructor.call(this); 5072 this.processOnServer = processOnServer; 5073 } 5074}); 5075var ASPxClientProcessingModeCancelEventArgs = ASPx.CreateClass(ASPxClientProcessingModeEventArgs, { 5076 constructor: function(processOnServer){ 5077 this.constructor.prototype.constructor.call(this, processOnServer); 5078 this.cancel = false; 5079 } 5080}); 5081var OrderedMap = ASPx.CreateClass(null, { 5082 constructor: function(){ 5083 this.entries = {}; 5084 this.firstEntry = null; 5085 this.lastEntry = null; 5086 }, 5087 add: function(key, element) { 5088 var entry = this.addEntry(key, element); 5089 this.entries[key] = entry; 5090 }, 5091 remove: function(key) { 5092 var entry = this.entries[key]; 5093 if(entry === undefined) 5094 return; 5095 this.removeEntry(entry); 5096 delete this.entries[key]; 5097 }, 5098 clear: function() { 5099 this.markAllEntriesAsRemoved(); 5100 this.entries = {}; 5101 this.firstEntry = null; 5102 this.lastEntry = null; 5103 }, 5104 get: function(key) { 5105 var entry = this.entries[key]; 5106 return entry ? entry.value : undefined; 5107 }, 5108 forEachEntry: function(processFunc, context) { 5109 context = context || this; 5110 for(var entry = this.firstEntry; entry; entry = entry.next) { 5111 if(entry.removed) 5112 continue; 5113 if(processFunc.call(context, entry.key, entry.value)) 5114 return; 5115 } 5116 }, 5117 addEntry: function(key, element) { 5118 var entry = { key: key, value: element, next: null, prev: null }; 5119 if(!this.firstEntry) 5120 this.firstEntry = entry; 5121 else { 5122 entry.prev = this.lastEntry; 5123 this.lastEntry.next = entry; 5124 } 5125 this.lastEntry = entry; 5126 return entry; 5127 }, 5128 removeEntry: function(entry) { 5129 if(this.firstEntry == entry) 5130 this.firstEntry = entry.next; 5131 if(this.lastEntry == entry) 5132 this.lastEntry = entry.prev; 5133 if(entry.prev) 5134 entry.prev.next = entry.next; 5135 if(entry.next) 5136 entry.next.prev = entry.prev; 5137 entry.removed = true; 5138 }, 5139 markAllEntriesAsRemoved: function() { 5140 for(var entry = this.firstEntry; entry; entry = entry.next) 5141 entry.removed = true; 5142 } 5143}); 5144var CollectionBase = ASPx.CreateClass(null, { 5145 constructor: function(){ 5146 this.elementsMap = new OrderedMap(); 5147 this.isASPxClientCollection = true; 5148 }, 5149 Add: function(key, element) { 5150 this.elementsMap.add(key, element); 5151 }, 5152 Remove: function(key) { 5153 this.elementsMap.remove(key); 5154 }, 5155 Clear: function(){ 5156 this.elementsMap.clear(); 5157 }, 5158 Get: function(key){ 5159 return this.elementsMap.get(key); 5160 } 5161}); 5162var GarbageCollector = ASPx.CreateClass(null, { 5163 constructor: function() { 5164 this.interval = 5000; 5165 this.intervalID = window.setInterval(function(){ this.CollectObjects(); }.aspxBind(this), this.interval); 5166 }, 5167 CollectObjects: function(){ 5168 if(ASPx.GetControlCollection().InCallback()) return; 5169 ASPx.GetControlCollectionCollection().RemoveDisposedControls(); 5170 if(typeof(ASPx.GetStateController) != "undefined") 5171 ASPx.GetStateController().RemoveDisposedItems();
5172 if(ASPx.TableScrollHelperCollection) 5173 ASPx.TableScrollHelperCollection.RemoveDisposedObjects(); 5174 if(ASPx.Ident.scripts.ASPxClientRatingControl) 5175 ASPxClientRatingControl.RemoveDisposedElementUnderCursor(); 5176 var postHandler = aspxGetPostHandler(); 5177 if(postHandler) 5178 postHandler.RemoveDisposedFormsFromCache(); 5179 } 5180}); 5181var gcCollector = new GarbageCollector(); 5182var ControlTree = ASPx.CreateClass(null, { 5183 constructor: function(controlCollection, container) { 5184 this.container = container; 5185 this.domMap = { }; 5186 this.rootNode = this.createNode(null, null); 5187 this.createControlTree(controlCollection, container); 5188 }, 5189 forEachControl: function(collapseControls, processFunc) { 5190 var observer = _aspxGetDomObserver(); 5191 observer.pause(this.container, true); 5192 var documentScrollInfo; 5193 if(collapseControls) { 5194 documentScrollInfo = ASPx.GetOuterScrollPosition(document.body); 5195 this.collapseControls(this.rootNode); 5196 } 5197 var adjustNodes = [], 5198 autoHeightNodes = []; 5199 var requireReAdjust = this.forEachControlCore(this.rootNode, collapseControls, processFunc, adju
5199stNodes, autoHeightNodes); 5200 if(requireReAdjust) 5201 this.forEachControlsBackward(adjustNodes, collapseControls, processFunc); 5202 else { 5203 for(var i = 0, node; node = autoHeightNodes[i]; i++) 5204 node.control.AdjustAutoHeight(); 5205 } 5206 if(collapseControls) 5207 ASPx.RestoreOuterScrollPosition(documentScrollInfo); 5208 observer.resume(this.container, true); 5209 }, 5210 forEachControlCore: function(node, collapseControls, processFunc, adjustNodes, autoHeightNodes) { 5211 var requireReAdjust = false, 5212 size, newSize; 5213 if(node.control) { 5214 var checkReadjustment = collapseControls && node.control.IsControlCollapsed() && node.control.CanCauseReadjustment(); 5215 if(checkReadjustment) 5216 size = node.control.GetControlPercentMarkerSize(false, true); 5217 if(node.control.IsControlCollapsed() && !node.control.IsExpandableByAdjustment()) 5218 node.control.ExpandControl(); 5219 node.control.isInsideHierarchyAdjustment = true; 5220 processFunc(node.control); 5221 node.control.isInsideHierarchyAdjustment = false; 5222 if(checkReadjustment) { 5223 newSize = node.control.GetControlPercentMarkerSize(false, true); 5224 requireReAdjust = size.width !== newSize.width; 5225 } 5226 if(node.control.sizingConfig.supportAutoHeight) 5227 autoHeightNodes.push(node); 5228 node.control.ResetControlPercentMarkerSize(); 5229 } 5230 for(var childNode, i = 0; childNode = node.children[i]; i++) 5231 requireReAdjust = this.forEachControlCore(childNode, collapseControls, processFunc, adju
5231stNodes, autoHeightNodes) || requireReAdjust; 5232 adjustNodes.push(node); 5233 return requireReAdjust; 5234 }, 5235 forEachControlsBackward: function(adjustNodes, collapseControls, processFunc) { 5236 for(var i = 0, node; node = adjustNodes[i]; i++) 5237 this.forEachControlsBackwardCore(node, collapseControls, processFunc); 5238 }, 5239 forEachControlsBackwardCore: function(node, collapseControls, processFunc) { 5240 if(node.control) 5241 processFunc(node.control); 5242 if(node.children.length > 1) { 5243 for(var i = 0, childNode; childNode = node.children[i]; i++) { 5244 if(childNode.control) 5245 processFunc(childNode.control); 5246 } 5247 } 5248 }, 5249 collapseControls: function(node) { 5250 for(var childNode, i = 0; childNode = node.children[i]; i++) 5251 this.collapseControls(childNode); 5252 if(node.control && node.control.NeedCollapseControl()) 5253 node.control.CollapseControl(); 5254 }, 5255 createControlTree: function(controlCollection, container) { 5256 controlCollection.ProcessControlsInContainer(container, function(control) { 5257 control.RegisterInControlTree(this); 5258 }.aspxBind(this)); 5259 var fixedNodes = []; 5260 var fixedNodesChildren = []; 5261 for(var domElementID in this.domMap) { 5262 if(!this.domMap.hasOwnProperty(domElementID)) continue; 5263 var node = this.domMap[domElementID]; 5264 var controlOwner = node.control ? node.control.controlOwner : null; 5265 if(controlOwner && this.domMap[controlOwner.name]) 5266 continue; 5267 if(this.isFixedNode(node)) 5268 fixedNodes.push(node); 5269 else { 5270 var parentNode = this.findParentNode(domElementID); 5271 parentNode = parentNode || this.rootNode; 5272 if(this.isFixedNode(parentNode)) 5273 fixedNodesChildren.push(node); 5274 else { 5275 var childNode = node.mainNode || node; 5276 this.addChildNode(parentNode, childNode); 5277 } 5278 } 5279 } 5280 for(var i = fixedNodes.length - 1; i >= 0; i--) 5281 this.insertChildNode(this.rootNode, fixedNodes[i], 0); 5282 for(var i = fixedNodesChildren.length - 1; i >= 0; i--) 5283 this.insertChildNode(this.rootNode, fixedNodesChildren[i], 0); 5284 }, 5285 findParentNode: function(id) { 5286 var element = document.getElementById(id).parentNode; 5287 while(element && element.tagName !== "BODY") { 5288 if(element.id) { 5289 var parentNode = this.domMap[element.id]; 5290 if(parentNode) 5291 return parentNode; 5292 } 5293 element = element.parentNode; 5294 } 5295 return null; 5296 }, 5297 addChildNode: function(node, childNode) { 5298 if(!childNode.parentNode) { 5299 node.children.push(childNode); 5300 childNode.parentNode = node; 5301 } 5302 }, 5303 insertChildNode: function(node, childNode, index) { 5304 if(!childNode.parentNode) { 5305 ASPx.Data.ArrayInsert(node.children, childNode, index); 5306 childNode.parentNode = node; 5307 } 5308 }, 5309 addRelatedNode: function(node, relatedNode) { 5310 this.addChildNode(node, relatedNode); 5311 relatedNode.mainNode = node; 5312 }, 5313 isFixedNode: function(node) { 5314 var control = node.mainNode ? node.mainNode.control : node.control; 5315 return control && control.HasFixedPosition(); 5316 }, 5317 createNode: function(domElementID, control) { 5318 var node = { 5319 control: control, 5320 children: [], 5321 parentNode: null, 5322 mainNode: null 5323 }; 5324 if(domElementID) 5325 this.domMap[domElementID] = node; 5326 return node; 5327 } 5328}); 5329function _aspxFunctionIsInCallstack(currentCallee, targetFunction, depthLimit) { 5330 var candidate = currentCallee; 5331 var depth = 0; 5332 while(candidate && depth <= depthLimit) { 5333 candidate = candidate.caller; 5334 if(candidate == targetFunction) 5335 return true; 5336 depth++; 5337 } 5338 return false; 5339} 5340ASPx.Evt.AttachEventToElement(window, "load", aspxClassesWindowOnLoad); 5341function aspxClassesWindowOnLoad(evt){ 5342 ASPx.documentLoaded = true; 5343 _aspxSweepDuplicatedLinks(); 5344 ResourceManager.SynchronizeResources(); 5345 var externalScriptProcessor = GetExternalScriptProcessor(); 5346 if(externalScriptProcessor) 5347 externalScriptProcessor.ShowErrorMessages(); 5348 ASPx.AccessibilityUtils.initialize(); 5349 ASPx.GetControlCollection().Initialize(); 5350 _aspxInitializeScripts(); 5351 _aspxInitializeLinks(); 5352 _aspxInitializeFocus(); 5353} 5354Ident = { }; 5355Ident.IsDate = function(obj) { 5356 return obj && obj.constructor == Date; 5357}; 5358Ident.IsRegExp = function(obj) { 5359 return obj && obj.constructor === RegExp; 5360}; 5361Ident.IsArray = function(obj) { 5362 return obj && obj.constructor == Array; 5363};
5364Ident.IsASPxClientCollection = function(obj) { 5365 return obj && obj.isASPxClientCollection; 5366}; 5367Ident.IsASPxClientControl = function(obj) { 5368 return obj && obj instanceof ASPxClientControlBase; 5369}; 5370Ident.IsASPxClientEdit = function(obj) { 5371 return obj && obj.isASPxClientEdit; 5372}; 5373Ident.IsFocusableElementRegardlessTabIndex = function (element) { 5374 var tagName = element.tagName; 5375 return tagName == "TEXTAREA" || tagName == "INPUT" || tagName == "A" || 5376 tagName == "SELECT" || tagName == "IFRAME" || tagName == "OBJECT"; 5377}; 5378Ident.isDialogInvisibleControl = function(control) { 5379 return !!ASPx.Dialog && ASPx.Dialog.isDialogInvisibleControl(control); 5380}; 5381Ident.scripts = {}; 5382if(ASPx.IsFunction(window.WebForm_InitCallbackAddField)) { 5383 (function() { 5384 var original = window.WebForm_InitCallbackAddField; 5385 window.WebForm_InitCallbackAddField = function(name, value) { 5386 if(typeof(name) == "string" && name) 5387 original.apply(null, arguments); 5388 }; 5389 })(); 5390} 5391ASPx.FireDefaultButton = function(evt, buttonID) { 5392 if(_aspxIsDefaultButtonEvent(evt, buttonID)) { 5393 var defaultButton = ASPx.GetElementById(buttonID); 5394 if(defaultButton && defaultButton.click) { 5395 if(ASPx.IsFocusable(defaultButton)) 5396 defaultButton.focus(); 5397 ASPx.Evt.DoElementClick(defaultButton); 5398 ASPx.Evt.PreventEventAndBubble(evt); 5399 return false; 5400 } 5401 } 5402 return true; 5403} 5404function _aspxIsDefaultButtonEvent(evt, defaultButtonID) { 5405 if(evt.keyCode != ASPx.Key.Enter) 5406 return false; 5407 var srcElement = ASPx.Evt.GetEventSource(evt); 5408 if(!srcElement || srcElement.id === defaultButtonID) 5409 return true; 5410 var tagName = srcElement.tagName; 5411 var type = srcElement.type; 5412 return tagName != "TEXTAREA" && tagName != "BUTTON" && tagName != "A" && 5413 (tagName != "INPUT" || type != "checkbox" && type != "radio" && type != "button" && type != "submit" && type != "reset"); 5414} 5415var PostHandler = ASPx.CreateClass(null, { 5416 constructor: function() { 5417 this.Post = new ASPxClientEvent(); 5418 this.PostFinalization = new ASPxClientEvent(); 5419 this.observableForms = []; 5420 this.dxCallbackTriggers = {}; 5421 this.lastSubmitElementName = null; 5422 this.beforeOnSubmit = function() { }; 5423 this.ReplaceGlobalPostFunctions(); 5424 this.HandleDxCallbackBeginning(); 5425 this.HandleMSAjaxRequestBeginning(); 5426 }, 5427 Update: function() { 5428 this.ReplaceFormsSubmit(true); 5429 }, 5430 ProcessPostRequest: function(ownerID, isCallback, isMSAjaxRequest, isDXCallback) { 5431 this.cancelPostProcessing = false; 5432 this.isMSAjaxRequest = isMSAjaxRequest; 5433 if(this.SkipRaiseOnPost(ownerID, isCallback, isDXCallback)) 5434 return; 5435 var args = new PostHandlerOnPostEventArgs(ownerID, isCallback, isMSAjaxRequest, isDXCallback); 5436 this.Post.FireEvent(this, args); 5437 this.cancelPostProcessing = args.cancel; 5438 if(!args.cancel) 5439 this.PostFinalization.FireEvent(this, args); 5440 }, 5441 SkipRaiseOnPost: function(ownerID, isCallback, isDXCallback) { 5442 if(!isCallback) 5443 return false; 5444 var dxOwner = isDXCallback && ASPx.GetControlCollection().GetByName(ownerID); 5445 if(dxOwner) { 5446 this.dxCallbackTriggers[dxOwner.uniqueID] = true; 5447 return false; 5448 } 5449 if(this.dxCallbackTriggers[ownerID]) { 5450 this.dxCallbackTriggers[ownerID] = false; 5451 return true; 5452 } 5453 return false; 5454 }, 5455 ReplaceGlobalPostFunctions: function() { 5456 if(ASPx.IsFunction(window.__doPostBack)) 5457 this.ReplaceDoPostBack(); 5458 if(ASPx.IsFunction(window.WebForm_DoCallback)) 5459 this.ReplaceDoCallback(); 5460 this.ReplaceFormsSubmit(); 5461 }, 5462 HandleDxCallbackBeginning: function() { 5463 ASPx.GetControlCollection().BeforeInitCallback.AddHandler(function(s, e) { 5464 aspxRaisePostHandlerOnPost(e.callbackOwnerID, true, false, true); 5465 }); 5466 }, 5467 HandleMSAjaxRequestBeginning: function() { 5468 if(window.Sys && Sys.WebForms && Sys.WebForms.PageRequestManager && Sys.WebForms.PageRequestManager.getInstance) { 5469 var pageRequestManager = Sys.WebForms.PageRequestManager.getInstance(); 5470 if(pageRequestManager != null && Ident.IsArray(pageRequestManager._onSubmitStatements)) { 5471 pageRequestManager._onSubmitStatements.unshift(function() { 5472 var postbackSettings = Sys.WebForms.PageRequestManager.getInstance()._postBackSettings; 5473 var postHandler = aspxGetPostHandler(); 5474 aspxRaisePostHandlerOnPost(postbackSettings.asyncTarget, true, true); 5475 return !postHandler.cancelPostProcessing; 5476 });
5477 } 5478 } 5479 }, 5480 ReplaceDoPostBack: function() { 5481 var original = __doPostBack; 5482 __doPostBack = function(eventTarget, eventArgument) { 5483 var postHandler = aspxGetPostHandler(); 5484 aspxRaisePostHandlerOnPost(eventTarget); 5485 if(postHandler.cancelPostProcessing) 5486 return; 5487 ASPxClientControl.postHandlingLocked = true; 5488 original(eventTarget, eventArgument); 5489 delete ASPxClientControl.postHandlingLocked; 5490 }; 5491 }, 5492 ReplaceDoCallback: function() { 5493 var original = WebForm_DoCallback; 5494 WebForm_DoCallback = function(eventTarget, eventArgument, eventCallback, context, errorCallback, useAsync) { 5495 var postHandler = aspxGetPostHandler(); 5496 aspxRaisePostHandlerOnPost(eventTarget, true); 5497 if(postHandler.cancelPostProcessing) 5498 return; 5499 return original(eventTarget, eventArgument, eventCallback, context, errorCallback, useAsync); 5500 }; 5501 }, 5502 ReplaceFormsSubmit: function(checkObservableCollection) { 5503 for(var i = 0; i < document.forms.length; i++) { 5504 var form = document.forms[i]; 5505 if(checkObservableCollection && ASPx.Data.ArrayIndexOf(this.observableForms, form) >= 0) 5506 continue; 5507 if(form.submit) 5508 this.ReplaceFormSubmit(form); 5509 this.ReplaceFormOnSumbit(form); 5510 this.observableForms.push(form); 5511 } 5512 }, 5513 ReplaceFormSubmit: function(form) { 5514 var originalSubmit = form.submit; 5515 form.submit = function() { 5516 var postHandler = aspxGetPostHandler(); 5517 aspxRaisePostHandlerOnPost(); 5518 if(postHandler.cancelPostProcessing) 5519 return false; 5520 var callee = arguments.callee; 5521 this.submit = originalSubmit; 5522 var submitResult = this.submit(); 5523 this.submit = callee; 5524 return submitResult; 5525 }; 5526 form = null; 5527 }, 5528 ReplaceFormOnSumbit: function(form) { 5529 var originalSubmit = form.onsubmit; 5530 form.onsubmit = function() { 5531 var postHandler = aspxGetPostHandler(); 5532 postHandler.beforeOnSubmit(); 5533 if(postHandler.isMSAjaxRequest) 5534 postHandler.isMsAjaxRequest = false; 5535 else 5536 aspxRaisePostHandlerOnPost(postHandler.GetLastSubmitElementName()); 5537 if(postHandler.cancelPostProcessing) 5538 return false; 5539 return ASPx.IsFunction(originalSubmit) 5540 ? originalSubmit.apply(this, arguments) 5541 : true; 5542 }; 5543 form = null; 5544 }, 5545 SetBeforeOnSubmit: function(action) { 5546 this.beforeOnSubmit = action; 5547 }, 5548 SetLastSubmitElementName: function(elementName) { 5549 this.lastSubmitElementName = elementName; 5550 }, 5551 GetLastSubmitElementName: function() { 5552 return this.lastSubmitElementName; 5553 }, 5554 RemoveDisposedFormsFromCache: function(){ 5555 for(var i = 0; this.observableForms && i < this.observableForms.length; i++){ 5556 var form = this.observableForms[i]; 5557 if(!ASPx.IsExistsElement(form)){ 5558 ASPx.Data.ArrayRemove(this.observableForms, form); 5559 i--; 5560 } 5561 } 5562 } 5563}); 5564function aspxRaisePostHandlerOnPost(ownerID, isCallback, isMSAjaxRequest, isDXCallback) { 5565 if(ASPxClientControl.postHandlingLocked) return; 5566 var postHandler = aspxGetPostHandler(); 5567 if(postHandler) 5568 postHandler.ProcessPostRequest(ownerID, isCallback, isMSAjaxRequest, isDXCallback); 5569} 5570var aspxPostHandler; 5571function aspxGetPostHandler() { 5572 if(!aspxPostHandler) 5573 aspxPostHandler = new PostHandler(); 5574 return aspxPostHandler; 5575} 5576var PostHandlerOnPostEventArgs = ASPx.CreateClass(ASPxClientCancelEventArgs, { 5577 constructor: function(ownerID, isCallback, isMSAjaxCallback, isDXCallback){ 5578 this.constructor.prototype.constructor.call(this); 5579 this.ownerID = ownerID; 5580 this.isCallback = !!isCallback; 5581 this.isDXCallback = !!isDXCallback; 5582 this.isMSAjaxCallback = !!isMSAjaxCallback; 5583 } 5584}); 5585var ResourceManager = { 5586 HandlerStr: "DXR.axd?r=", 5587 ResourceHashes: {}, 5588 SynchronizeResources: function(method){ 5589 if(!method){ 5590 method = function(name, resource) { 5591 this.UpdateInputElements(name, resource); 5592 }.aspxBind(this); 5593 } 5594 var resources = this.GetResourcesData(); 5595 for(var name in resources) 5596 method(name, resources[name]); 5597 }, 5598 GetResourcesData: function(){ 5599 return { 5600 DXScript: this.GetResourcesElementsString(_aspxGetIncludeScripts(), "src", "DXScript"), 5601 DXCss: this.GetResourcesElementsString(_aspxGetLinks(), "href", "DXCss") 5602 }; 5603 }, 5604 GetResourcesElementsString: function(elements, urlAttr, id){ 5605 if(!this.ResourceHashes[id]) 5606 this.ResourceHashes[id] = {}; 5607 var hash = this.ResourceHashes[id]; 5608 for(var i = 0; i < elements.length; i++) { 5609 var resourceUrl = ASPx.Attr.GetAttribute(elements[i], urlAttr); 5610 if(resourceUrl) { 5611 var pos = resourceUrl.indexOf(this.HandlerStr); 5612 if(pos > -1){ 5613 var list = resourceUrl.substr(pos + this.HandlerStr.length); 5614 var ampPos = list.lastIndexOf("-"); 5615 if(ampPos > -1) 5616 list = list.substr(0, ampPos);
5617 var indexes = list.split(","); 5618 for(var j = 0; j < indexes.length; j++) 5619 hash[indexes[j]] = indexes[j]; 5620 } 5621 else 5622 hash[resourceUrl] = resourceUrl; 5623 } 5624 } 5625 var array = []; 5626 for(var key in hash) 5627 array.push(key); 5628 return array.join(","); 5629 }, 5630 UpdateInputElements: function(typeName, list){ 5631 for(var i = 0; i < document.forms.length; i++){ 5632 var inputElement = document.forms[i][typeName]; 5633 if(!inputElement) 5634 inputElement = this.CreateInputElement(document.forms[i], typeName); 5635 inputElement.value = list; 5636 } 5637 }, 5638 CreateInputElement: function(form, typeName){ 5639 var inputElement = ASPx.CreateHiddenField(typeName, typeName); 5640 form.appendChild(inputElement); 5641 return inputElement; 5642 } 5643}; 5644ASPx.includeScriptPrefix = "dxis_"; 5645ASPx.startupScriptPrefix = "dxss_"; 5646var includeScriptsCache = {}; 5647var createdIncludeScripts = []; 5648var appendedScriptsCount = 0; 5649var callbackOwnerNames = []; 5650var scriptsRestartHandlers = { }; 5651function _aspxIsKnownIncludeScript(script) { 5652 return !!includeScriptsCache[script.src]; 5653} 5654function _aspxCacheIncludeScript(script) { 5655 includeScriptsCache[script.src] = 1; 5656} 5657function _aspxProcessScriptsAndLinks(ownerName, isCallback) { 5658 if(!ASPx.documentLoaded) return; 5659 _aspxProcessScripts(ownerName, isCallback); 5660 getLinkProcessor().process(); 5661 ASPx.ClearCachedCssRules(); 5662} 5663function _aspxGetStartupScripts() { 5664 return _aspxGetScriptsCore(ASPx.startupScriptPrefix); 5665} 5666function _aspxGetIncludeScripts() { 5667 return _aspxGetScriptsCore(ASPx.includeScriptPrefix); 5668} 5669function _aspxGetScriptsCore(prefix) { 5670 var result = []; 5671 var scripts = document.getElementsByTagName("SCRIPT"); 5672 for(var i = 0; i < scripts.length; i++) { 5673 if(scripts[i].id.indexOf(prefix) == 0) 5674 result.push(scripts[i]); 5675 } 5676 return result; 5677} 5678function _aspxGetLinks() { 5679 var result = []; 5680 var links = document.getElementsByTagName("LINK");; 5681 for(var i = 0; i < links.length; i++) 5682 result[i] = links[i]; 5683 return result; 5684} 5685function _aspxIsLinksLoaded() { 5686 var links = _aspxGetLinks(); 5687 for(var i = 0, link; link = links[i]; i++) { 5688 if(link.readyState && link.readyState.toLowerCase() == "loading") 5689 return false; 5690 } 5691 return true; 5692} 5693function _aspxInitializeLinks() { 5694 var links = _aspxGetLinks(); 5695 for(var i = 0; i < links.length; i++) 5696 links[i].loaded = true; 5697} 5698var scriptExecutedAttrName = "data-executed"; 5699function isScriptExecuted(script) { 5700 return ASPx.Attr.GetAttribute(script, scriptExecutedAttrName); 5701} 5702function markScriptAsExecuted(script) { 5703 ASPx.Attr.SetAttribute(script, scriptExecutedAttrName, true); 5704} 5705function _aspxInitializeScripts() { 5706 var scripts = _aspxGetIncludeScripts(); 5707 for(var i = 0; i < scripts.length; i++) 5708 _aspxCacheIncludeScript(scripts[i]); 5709 var startupScripts = _aspxGetStartupScripts(); 5710 for(var i = 0; i < startupScripts.length; i++) 5711 markScriptAsExecuted(startupScripts[i]); 5712} 5713function _aspxSweepDuplicatedLinks() { 5714 var hash = { }; 5715 var links = _aspxGetLinks(); 5716 for(var i = 0; i < links.length; i++) { 5717 var href = links[i].href; 5718 if(!href) 5719 continue; 5720 if(hash[href]){ 5721 if((ASPx.Browser.IE || !hash[href].loaded) && links[i].loaded) { 5722 ASPx.RemoveElement(hash[href]); 5723 hash[href] = links[i]; 5724 } 5725 else 5726 ASPx.RemoveElement(links[i]); 5727 } 5728 else 5729 hash[href] = links[i]; 5730 } 5731} 5732function _aspxSweepDuplicatedScripts() { 5733 var hash = { }; 5734 var scripts = _aspxGetIncludeScripts(); 5735 for(var i = 0; i < scripts.length; i++) { 5736 var src = scripts[i].src; 5737 if(!src) continue; 5738 if(hash[src]) 5739 ASPx.RemoveElement(scripts[i]); 5740 else 5741 hash[src] = scripts[i]; 5742 } 5743} 5744function _aspxProcessScripts(ownerName, isCallback) { 5745 var scripts = _aspxGetIncludeScripts(); 5746 var previousCreatedScript = null; 5747 var firstCreatedScript = null; 5748 for(var i = 0; i < scripts.length; i++) { 5749 var script = scripts[i]; 5750 if(script.src == "") continue; 5751 if(_aspxIsKnownIncludeScript(script)) 5752 continue; 5753 var createdScript = document.createElement("script"); 5754 createdScript.type = "text/javascript"; 5755 createdScript.src = script.src; 5756 createdScript.id = script.id; 5757 function AreScriptsEqual(script1, script2) { 5758 return script1.src == script2.src; 5759 } 5760 if(ASPx.Data.ArrayIndexOf(createdIncludeScripts, createdScript, AreScriptsEqual) >= 0) 5761 continue; 5762 createdIncludeScripts.push(createdScript); 5763 ASPx.RemoveElement(script); 5764 if(ASPx.Browser.IE && ASPx.Browser.Version < 9) { 5765 createdScript.onreadystatechange = new Function("ASPx.OnScriptReadyStateChangedCallback(this, " + isCallback + ");"); 5766 } else if(ASPx.Browser.Edge || ASPx.Browser.WebKitFamily || (ASPx.Browser.Firefox && ASPx.Browser.Version >= 4) || ASPx.Browser.IE && ASPx.Browser.Version >= 9) { 5767 createdScript.onload = new Function("ASPx.OnScriptLoadCallback(this, " + isCallback + ");"); 5768 if(firstCreatedScript == null) 5769 firstCreatedScript = createdScript; 5770 createdScript.nextCreatedScript = null; 5771 if(previousCreatedScript != null) 5772 previousCreatedScript.nextCreatedScript = createdScript; 5773 previousCreatedScript = createdScript; 5774 } else { 5775 createdScript.onload = new Function("ASPx.OnScriptLoadCallback(this);"); 5776 ASPx.AppendScript(createdScript); 5777 _aspxCacheIncludeScript(createdScript); 5778 } 5779 } 5780 if(firstCreatedScript != null) { 5781 ASPx.AppendScript(firstCreatedScript); 5782 _aspxCacheIncludeScript(firstCreatedScript); 5783 } 5784 if(isCallback)
5785 callbackOwnerNames.push(ownerName); 5786 if(createdIncludeScripts.length == 0) { 5787 var newLinks = ASPx.GetNodesByTagName(document.body, "link"); 5788 var needProcessLinks = isCallback && newLinks.length > 0; 5789 if(needProcessLinks) 5790 needProcessLinks = getLinkProcessor().addLinks(newLinks); 5791 if(!needProcessLinks) 5792 ASPx.FinalizeScriptProcessing(isCallback); 5793 } 5794} 5795ASPx.FinalizeScriptProcessing = function(isCallback) { 5796 createdIncludeScripts = []; 5797 appendedScriptsCount = 0; 5798 var linkProcessor = getLinkProcessor(); 5799 if(linkProcessor.hasLinks()) 5800 _aspxSweepDuplicatedLinks(); 5801 linkProcessor.reset(); 5802 _aspxSweepDuplicatedScripts(); 5803 _aspxRunStartupScripts(isCallback); 5804 ResourceManager.SynchronizeResources(); 5805} 5806var startupScriptsRunning = false; 5807function _aspxRunStartupScripts(isCallback) { 5808 startupScriptsRunning = true; 5809 try { 5810 _aspxRunStartupScriptsCore(); 5811 } 5812 finally { 5813 startupScriptsRunning = false; 5814 } 5815 if(ASPx.documentLoaded) { 5816 ASPx.GetControlCollection().InitializeElements(isCallback); 5817 for(var key in scriptsRestartHandlers) 5818 scriptsRestartHandlers[key](); 5819 _aspxRunEndCallbackScript(); 5820 } 5821} 5822function _aspxIsStartupScriptsRunning(isCallback) { 5823 return startupScriptsRunning; 5824} 5825function _aspxRunStartupScriptsCore() { 5826 var scripts = _aspxGetStartupScripts(); 5827 var code; 5828 for(var i = 0; i < scripts.length; i++){ 5829 if(!isScriptExecuted(scripts[i])) { 5830 code = ASPx.GetScriptCode(scripts[i]); 5831 eval(code); 5832 markScriptAsExecuted(scripts[i]); 5833 } 5834 } 5835} 5836function _aspxRunEndCallbackScript() { 5837 while(callbackOwnerNames.length > 0) { 5838 var callbackOwnerName = callbackOwnerNames.pop(); 5839 var callbackOwner = ASPx.GetControlCollection().Get(callbackOwnerName); 5840 if(callbackOwner) 5841 callbackOwner.DoEndCallback(); 5842 } 5843} 5844ASPx.OnScriptReadyStateChangedCallback = function(scriptElement, isCallback) { 5845 if(scriptElement.readyState == "loaded") { 5846 _aspxCacheIncludeScript(scriptElement); 5847 for(var i = 0; i < createdIncludeScripts.length; i++) { 5848 var script = createdIncludeScripts[i]; 5849 if(_aspxIsKnownIncludeScript(script)) { 5850 if(!isScriptExecuted(script)) { 5851 markScriptAsExecuted(script); 5852 ASPx.AppendScript(script); 5853 appendedScriptsCount++; 5854 } 5855 } else 5856 break; 5857 } 5858 if(createdIncludeScripts.length == appendedScriptsCount) 5859 ASPx.FinalizeScriptProcessing(isCallback); 5860 } 5861} 5862ASPx.OnScriptLoadCallback = function(scriptElement, isCallback) { 5863 appendedScriptsCount++; 5864 if(scriptElement.nextCreatedScript) { 5865 ASPx.AppendScript(scriptElement.nextCreatedScript); 5866 _aspxCacheIncludeScript(scriptElement.nextCreatedScript); 5867 } 5868 if(createdIncludeScripts.length == appendedScriptsCount) 5869 ASPx.FinalizeScriptProcessing(isCallback); 5870} 5871function _aspxAddScriptsRestartHandler(objectName, handler) { 5872 scriptsRestartHandlers[objectName] = handler; 5873} 5874function _aspxMoveLinkElements() { 5875 var head = ASPx.GetNodesByTagName(document, "head")[0]; 5876 var bodyLinks = ASPx.GetNodesByTagName(document.body, "link"); 5877 if(head && bodyLinks.length > 0){ 5878 var headLinks = ASPx.GetNodesByTagName(head, "link"); 5879 var dxLinkAnchor = head.firstChild; 5880 for(var i = 0; i < headLinks.length; i++){ 5881 if(headLinks[i].href.indexOf(ResourceManager.HandlerStr) > -1) 5882 dxLinkAnchor = headLinks[i].nextSibling; 5883 } 5884 while(bodyLinks.length > 0) 5885 head.insertBefore(bodyLinks[0], dxLinkAnchor); 5886 } 5887} 5888var LinkProcessor = ASPx.CreateClass(null, { 5889 constructor: function() { 5890 this.loadedLinkCount = 0; 5891 this.linkInfos = []; 5892 this.loadingObservationTimerID = -1; 5893 }, 5894 process: function() { 5895 if(this.hasLinks()) { 5896 if(this.isLinkLoadEventSupported()) 5897 this.processViaLoadEvent(); 5898 else 5899 this.processViaTimer(); 5900 } 5901 else 5902 _aspxSweepDuplicatedLinks(); 5903 _aspxMoveLinkElements(); 5904 }, 5905 addLinks: function(links) { 5906 var prevLinkCount = this.linkInfos.length; 5907 for(var i = 0; i < links.length; i++) { 5908 var link = links[i]; 5909 if(link.loaded || link.rel != "stylesheet" || link.type != "text/css" || link.href.toLowerCase().indexOf("dxr.axd?r=") == -1) 5910 continue; 5911 var linkInfo = { 5912 link: link, 5913 href: link.href 5914 }; 5915 this.linkInfos.push(linkInfo); 5916 } 5917 return prevLinkCount != this.linkInfos.length; 5918 }, 5919 hasLinks: function() { 5920 return this.linkInfos.length > 0;
5921 }, 5922 reset: function() { 5923 this.linkInfos = []; 5924 this.loadedLinkCount = 0; 5925 }, 5926 processViaLoadEvent: function() { 5927 for(var i = 0, linkInfo; linkInfo = this.linkInfos[i]; i++) { 5928 if(ASPx.Browser.IE && ASPx.Browser.Version < 9) { 5929 var that = this; 5930 linkInfo.link.onreadystatechange = function() { that.onLinkReadyStateChanged(this); }; 5931 } 5932 else 5933 linkInfo.link.onload = this.onLinkLoad.aspxBind(this); 5934 } 5935 }, 5936 isLinkLoadEventSupported: function() { 5937 return !(ASPx.Browser.Chrome && ASPx.Browser.MajorVersion < 19 || ASPx.Browser.Firefox && ASPx.Browser.MajorVersion < 9 || 5938 ASPx.Browser.Safari && ASPx.Browser.MajorVersion < 6 || ASPx.Browser.AndroidDefaultBrowser && ASPx.Browser.MajorVersion < 4.4); 5939 }, 5940 processViaTimer: function() { 5941 if(this.loadingObservationTimerID == -1) 5942 this.onLinksLoadingObserve(); 5943 }, 5944 onLinksLoadingObserve: function() { 5945 if(this.getIsAllLinksLoaded()) { 5946 this.loadingObservationTimerID = -1; 5947 this.onAllLinksLoad(); 5948 } 5949 else 5950 this.loadingObservationTimerID = window.setTimeout(this.onLinksLoadingObserve.aspxBind(this), 100); 5951 }, 5952 getIsAllLinksLoaded: function() { 5953 var styleSheets = document.styleSheets; 5954 var loadedLinkHrefs = { }; 5955 for(var i = 0; i < styleSheets.length; i++) { 5956 var styleSheet = styleSheets[i]; 5957 try { 5958 if(styleSheet.cssRules) 5959 loadedLinkHrefs[styleSheet.href] = 1; 5960 } 5961 catch(ex) { } 5962 } 5963 var loadedLinksCount = 0; 5964 for(var i = 0, linkInfo; linkInfo = this.linkInfos[i]; i++) { 5965 if(loadedLinkHrefs[linkInfo.href]) 5966 loadedLinksCount++; 5967 } 5968 return loadedLinksCount == this.linkInfos.length; 5969 }, 5970 onAllLinksLoad: function() { 5971 this.reset(); 5972 _aspxSweepDuplicatedLinks(); 5973 if(createdIncludeScripts.length == 0) 5974 ASPx.FinalizeScriptProcessing(true); 5975 }, 5976 onLinkReadyStateChanged: function(linkElement) { 5977 if(linkElement.readyState == "complete") 5978 this.onLinkLoadCore(linkElement); 5979 }, 5980 onLinkLoad: function(evt) { 5981 var linkElement = ASPx.Evt.GetEventSource(evt); 5982 this.onLinkLoadCore(linkElement); 5983 }, 5984 onLinkLoadCore: function(linkElement) { 5985 if(!this.hasLinkElement(linkElement)) return; 5986 this.loadedLinkCount++; 5987 if(!ASPx.Browser.Firefox && this.loadedLinkCount == this.linkInfos.length || 5988 ASPx.Browser.Firefox && this.loadedLinkCount == 2 * this.linkInfos.length) { 5989 this.onAllLinksLoad(); 5990 } 5991 }, 5992 hasLinkElement: function(linkElement) { 5993 for(var i = 0, linkInfo; linkInfo = this.linkInfos[i]; i++) { 5994 if(linkInfo.link == linkElement) 5995 return true; 5996 } 5997 return false; 5998 } 5999}); 6000var linkProcessor = null; 6001function getLinkProcessor() { 6002 if(linkProcessor == null) 6003 linkProcessor = new LinkProcessor(); 6004 return linkProcessor; 6005} 6006var IFrameHelper = ASPx.CreateClass(null, { 6007 constructor: function(params) { 6008 this.params = params || {}; 6009 this.params.src = this.params.src || ""; 6010 this.CreateElements(); 6011 }, 6012 CreateElements: function() { 6013 var elements = IFrameHelper.Create(this.params); 6014 this.containerElement = elements.container; 6015 this.iframeElement = elements.iframe; 6016 this.AttachOnLoadHandler(this, this.iframeElement); 6017 this.SetLoading(true); 6018 if(this.params.onCreate) 6019 this.params.onCreate(this.containerElement, this.iframeElement); 6020 }, 6021 AttachOnLoadHandler: function(instance, element) { 6022 ASPx.Evt.AttachEventToElement(element, "load", function() { 6023 instance.OnLoad(element); 6024 }); 6025 }, 6026 OnLoad: function(element) { 6027 this.SetLoading(false, element); 6028 if(!element.preventCustomOnLoad && this.params.onLoad) 6029 this.params.onLoad(); 6030 }, 6031 IsLoading: function(element) { 6032 element = element || this.iframeElement; 6033 if(element) 6034 return element.loading; 6035 return false; 6036 }, 6037 SetLoading: function(value, element) { 6038 element = element || this.iframeElement; 6039 if(element) 6040 element.loading = value; 6041 }, 6042 GetContentUrl: function() { 6043 return this.params.src; 6044 }, 6045 SetContentUrl: function(url, preventBrowserCaching) { 6046 if(url) { 6047 this.params.src = url; 6048 if(preventBrowserCaching) 6049 url = IFrameHelper.AddRandomParamToUrl(url);
6050 this.SetLoading(true); 6051 this.iframeElement.src = url; 6052 } 6053 }, 6054 RefreshContentUrl: function() { 6055 if(this.IsLoading()) 6056 return; 6057 this.SetLoading(true); 6058 var oldContainerElement = this.containerElement; 6059 var oldIframeElement = this.iframeElement; 6060 var postfix = "_del" + Math.floor(Math.random()*100000).toString(); 6061 if(this.params.id) 6062 oldIframeElement.id = this.params.id + postfix; 6063 if(this.params.name) 6064 oldIframeElement.name = this.params.name + postfix; 6065 ASPx.SetStyles(oldContainerElement, { height: 0 }); 6066 this.CreateElements(); 6067 oldIframeElement.preventCustomOnLoad = true; 6068 oldIframeElement.src = ASPx.BlankUrl; 6069 window.setTimeout(function() { 6070 oldContainerElement.parentNode.removeChild(oldContainerElement); 6071 }, 10000); 6072 } 6073}); 6074IFrameHelper.Create = function(params) { 6075 var iframeHtmlStringParts = [ "<iframe frameborder='0'" ]; 6076 if(params) { 6077 if(params.id) 6078 iframeHtmlStringParts.push(" id='", params.id, "'"); 6079 if(params.name) 6080 iframeHtmlStringParts.push(" name='", params.name, "'"); 6081 if(params.title) 6082 iframeHtmlStringParts.push(" title='", params.title, "'"); 6083 if(params.scrolling) 6084 iframeHtmlStringParts.push(" scrolling='", params.scrolling, "'"); 6085 if(params.src) 6086 iframeHtmlStringParts.push(" src='", params.src, "'"); 6087 } 6088 iframeHtmlStringParts.push("></iframe>"); 6089 var containerElement = ASPx.CreateHtmlElementFromString("<div style='border-width: 0px; padding: 0px; margin: 0px'></div>"); 6090 var iframeElement = ASPx.CreateHtmlElementFromString(iframeHtmlStringParts.join("")); 6091 containerElement.appendChild(iframeElement); 6092 return { 6093 container: containerElement, 6094 iframe: iframeElement 6095 }; 6096}; 6097IFrameHelper.AddRandomParamToUrl = function(url) { 6098 var prefix = url.indexOf("?") > -1 6099 ? "&" 6100 : "?"; 6101 var param = prefix + Math.floor(Math.random()*100000).toString(); 6102 var anchorIndex = url.indexOf("#"); 6103 return anchorIndex == -1 6104 ? url + param 6105 : url.substr(0, anchorIndex) + param + url.substr(anchorIndex); 6106}; 6107IFrameHelper.GetWindow = function(name) { 6108 if(ASPx.Browser.IE) 6109 return window.frames[name].window; 6110 else{ 6111 var frameElement = document.getElementById(name); 6112 return (frameElement != null) ? frameElement.contentWindow : null; 6113 } 6114}; 6115IFrameHelper.GetDocument = function(name) { 6116 var frameElement; 6117 if(ASPx.Browser.IE) { 6118 frameElement = window.frames[name]; 6119 return (frameElement != null) ? frameElement.document : null; 6120 } 6121 else { 6122 frameElement = document.getElementById(name); 6123 return (frameElement != null) ? frameElement.contentDocument : null; 6124 } 6125}; 6126IFrameHelper.GetDocumentBody = function(name) { 6127 var doc = IFrameHelper.GetDocument(name); 6128 return (doc != null) ? doc.body : null; 6129}; 6130IFrameHelper.GetDocumentHead = function (name) { 6131 var doc = IFrameHelper.GetDocument(name); 6132 return (doc != null) ? doc.head || doc.getElementsByTagName('head')[0] : null; 6133}; 6134IFrameHelper.GetElement = function(name) { 6135 if(ASPx.Browser.IE) 6136 return window.frames[name].window.frameElement; 6137 else 6138 return document.getElementById(name); 6139}; 6140var KbdHelper = ASPx.CreateClass(null, { 6141 constructor: function(control) { 6142 this.control = control; 6143 }, 6144 Init: function() { 6145 KbdHelper.GlobalInit(); 6146 var elements = this.getFocusableElements(); 6147 for(var i = 0; i < elements.length; i++) { 6148 var element = elements[i]; 6149 element.tabIndex = Math.max(element.tabIndex, 0); 6150 var instance = this; 6151 ASPx.Evt.AttachEventToElement(element, "click", function(e) { 6152 instance.HandleClick(e); 6153 }); 6154 ASPx.Evt.AttachEventToElement(element, "focus", function(e) { 6155 if(!instance.CanFocus(e)) 6156 return true; 6157 KbdHelper.active = instance; 6158 }); 6159 ASPx.Evt.AttachEventToElement(element, "blur", function () { 6160 instance.onBlur(); 6161 }); 6162 } 6163 }, 6164 getFocusableElements: function() { 6165 return [this.GetFocusableElement()]; 6166 }, 6167 GetFocusableElement: function() { return this.control.GetMainElement(); }, 6168 canHandleNoFocusAction: function() { 6169 var focusableElements = this.getFocusableElements(); 6170 for(var i = 0; i < focusableElements.length; i++) { 6171 if(focusableElements[i] === _aspxGetFocusedElement()) 6172 return false; 6173 } 6174 return true; 6175 }, 6176 CanFocus: function(e) { 6177 var tag = ASPx.Evt.GetEventSource(e).tagName; 6178 if(tag == "A" || tag == "TEXTAREA" || tag == "INPUT" || tag == "SELECT" || tag == "IFRAME" || tag == "OBJECT") 6179 return false; 6180 return true; 6181 }, 6182 HandleClick: function(e) { 6183 if(!this.CanFocus(e)) 6184 return; 6185 this.Focus(); 6186 }, 6187 Focus: function() { 6188 try { 6189 this.GetFocusableElement().focus(); 6190 } catch(e) { 6191 } 6192 }, 6193 onBlur: function(){ 6194 delete KbdHelper.active; 6195 }, 6196 HandleKeyDown: function(e) { }, 6197 HandleKeyPress: function(e) { }, 6198 HandleKeyUp: function (e) { }, 6199 HandleNoFocusAction: function(e) { }, 6200 FocusByAccessKey: function () { } 6201}); 6202KbdHelper.GlobalInit = function() { 6203 if(KbdHelper.ready) 6204 return; 6205 ASPx.Evt.AttachEventToDocument("keydown", KbdHelper.OnKeyDown); 6206 ASPx.Evt.AttachEventToDocument("keypress", KbdHelper.OnKeyPress); 6207 ASPx.Evt.AttachEventToDocument("keyup", KbdHelper.OnKeyUp); 6208 KbdHelper.ready = true; 6209}; 6210KbdHelper.swallowKey = false; 6211KbdHelper.accessKeys = { }; 6212KbdHelper.ProcessKey = function(e, actionName) { 6213 if(!KbdHelper.active) 6214 return; 6215 if (KbdHelper.active.canHandleNoFocusAction()) { 6216 KbdHelper.active["HandleNoFocusAction"](e, actionName); 6217 return; 6218 } 6219 var ctl = KbdHelper.active.control; 6220 if(ctl !== ASPx.GetControlCollection().Get(ctl.name)) { 6221 delete KbdHelper.active; 6222 return; 6223 } 6224 if(!KbdHelper.swallowKey) 6225 KbdHelper.swallowKey = KbdHelper.active[actionName](e); 6226 if(KbdHelper.swallowKey) 6227 ASPx.Evt.PreventEvent(e); 6228};
6229KbdHelper.OnKeyDown = function(e) { 6230 KbdHelper.swallowKey = false; 6231 if(KbdHelper.TryAccessKey(KbdHelper.getKeyName(e))) 6232 ASPx.Evt.PreventEvent(e); 6233 else 6234 KbdHelper.ProcessKey(e, "HandleKeyDown"); 6235}; 6236KbdHelper.OnKeyPress = function(e) { KbdHelper.ProcessKey(e, "HandleKeyPress"); }; 6237KbdHelper.OnKeyUp = function(e) { KbdHelper.ProcessKey(e, "HandleKeyUp"); }; 6238KbdHelper.RegisterAccessKey = function(obj) { 6239 if(obj.accessKey) 6240 var key = "CtrlShift" + obj.accessKey; 6241 else if(obj.keyTipModeShortcut) 6242 var key = obj.keyTipModeShortcut; 6243 if(!key) return; 6244 KbdHelper.accessKeys[key.toLowerCase()] = obj.name; 6245}; 6246KbdHelper.TryAccessKey = function(code) { 6247 var key = code.toLowerCase ? code.toLowerCase() : String.fromCharCode(code).toLowerCase(); 6248 var name = KbdHelper.accessKeys[key]; 6249 if(!name) return false; 6250 var obj = ASPx.GetControlCollection().Get(name); 6251 return KbdHelper.ClickAccessKey(obj); 6252}; 6253KbdHelper.ClickAccessKey = function (control) { 6254 if (!control) return false; 6255 var el = control.GetMainElement(); 6256 if (!el) return false; 6257 el.focus(); 6258 setTimeout(function () { 6259 if (KbdHelper.active && KbdHelper.active.FocusByAccessKey) 6260 KbdHelper.active.FocusByAccessKey(); 6261 }.aspxBind(this), 100); 6262 return true; 6263}; 6264KbdHelper.getKeyName = function(e) { 6265 var name = ""; 6266 if(e.altKey) 6267 name += "Alt"; 6268 if(e.ctrlKey) 6269 name += "Ctrl"; 6270 if(e.shiftKey) 6271 name += "Shift"; 6272 var keyCode = e.key || e.code || String.fromCharCode(ASPx.Evt.GetKeyCode(e)); 6273 if(keyCode.match(/key/i)) 6274 name += keyCode.replace(/key/i, ""); 6275 else if(keyCode.match(/digit/i)) 6276 name += keyCode.replace(/digit/i, ""); 6277 else if(keyCode.match(/arrow/i)) 6278 name += keyCode.replace(/arrow/i, ""); 6279 else if(keyCode.match(/ins/i)) 6280 name += "Ins" 6281 else if(keyCode.match(/del/i)) 6282 name += "Del" 6283 else if(keyCode.match(/back/i)) 6284 name += "Back" 6285 else if(!keyCode.match(/alt/i) && !keyCode.match(/control/i) && !keyCode.match(/shift/i)) 6286 name += keyCode; 6287 return name.replace(/^a-zA-Z0-9/, ""); 6288}; 6289AccessKeysHelper = ASPx.CreateClass(KbdHelper, { 6290 constructor: function (control) { 6291 this.constructor.prototype.constructor.call(this, control); 6292 this.accessKeysVisible = false; 6293 this.activeKey = null; 6294 this.accessKey = new AccessKey(control.accessKey); 6295 this.accessKeys = this.accessKey.accessKeys; 6296 this.charIndex = 0; 6297 this.onFocusByAccessKey = null; 6298 this.onClose = null; 6299 this.manualStopProcessing = false; 6300 this.isActive = false; 6301 }, 6302 Init: function (control) { 6303 KbdHelper.prototype.Init.call(this); 6304 KbdHelper.RegisterAccessKey(control); 6305 }, 6306 Add: function (accessKey) { 6307 this.accessKey.Add(accessKey); 6308 }, 6309 HandleKeyDown: function (e) { 6310 var control = this.control; 6311 var keyCode = ASPx.Evt.GetKeyCode(e); 6312 var restoreFocus = false; 6313 var stopProcessing = this.processKeyDown(keyCode); 6314 if (stopProcessing.value) { 6315 this.stopProcessing(); 6316 if(this.onClosedOnEscape && (keyCode == ASPx.Key.Esc || stopProcessing.fireEvent)) 6317 this.onClosedOnEscape(); 6318 } 6319 return stopProcessing; 6320 }, 6321 HandleNoFocusAction: function (e, actionName) { 6322 var keyCode = ASPx.Evt.GetKeyCode(e); 6323 if (this.onClosedOnEscape && keyCode == ASPx.Key.Esc && actionName == "HandleKeyDown") 6324 this.onClosedOnEscape(); 6325 }, 6326 Activate: function () { 6327 KbdHelper.ClickAccessKey(this.control); 6328 }, 6329 Stop: function() { 6330 this.stopProcessing(); 6331 }, 6332 stopProcessing: function () { 6333 this.HideAccessKeys(); 6334 if (KbdHelper.active && this.isActive) { 6335 this.isActive = false; 6336 KbdHelper.active.control.GetMainElement().blur(); 6337 delete KbdHelper.active; 6338 } 6339 }, 6340 onBlur: function () { 6341 if (this.manualStopProcessing) { 6342 this.manualStopProcessing = false; 6343 return; 6344 } 6345 this.HideAccessKeys(); 6346 KbdHelper.prototype.onBlur.call(this); 6347 }, 6348 processKeyDown: function (keyCode) { 6349 switch (keyCode) { 6350 case ASPx.Key.Left: 6351 this.TryMoveFocusLeft(); 6352 return { value: false }; 6353 case ASPx.Key.Right: 6354 this.TryMoveFocusRight(); 6355 return { value: false }; 6356 case ASPx.Key.Esc: 6357 if(this.control.hideAllPopups) 6358 this.control.hideAllPopups(true, true); 6359 if(this.activeKey) 6360 this.activeKey = this.activeKey.Return(); 6361 this.charIndex = 0; 6362 if (!this.activeKey) 6363 return { value: true }; 6364 break; 6365 case ASPx.Key.Enter: 6366 return { value: true }; 6367 default: 6368 var char = String.fromCharCode(keyCode).toUpperCase(); 6369 var needToContinue = { value: false }; 6370 if(this.activeKey) 6371 var keyResult = this.activeKey.TryAccessKey(char, this.charIndex, needToContinue); 6372 if (needToContinue.value) { 6373 this.charIndex++; 6374 return { value: false };; 6375 } 6376 this.charIndex = 0; 6377 if(keyResult !== undefined) 6378 this.activeKey = keyResult; 6379 else 6380 return { value: true, fireEvent: true }; 6381 if (!this.activeKey || !this.activeKey.accessKeys || this.activeKey.accessKeys.length == 0) { 6382 if (this.activeKey && this.activeKey.manualStopProcessing) { 6383 this.manualStopProcessing = true; 6384 break; 6385 } 6386 return { value: true, fireEvent: true }; 6387 } 6388 } 6389 return { value: false }; 6390 }, 6391 TryMoveFocusLeft: function (modifier) {}, 6392 TryMoveFocusRight: function (modifier) {}, 6393 TryMoveFocusUp: function (modifier) {},
6394 TryMoveFocusDown: function (modifier) {}, 6395 FocusByAccessKey: function () { 6396 if (this.onFocusByAccessKey) 6397 this.onFocusByAccessKey(); 6398 this.HideAccessKeys(); 6399 KbdHelper.prototype.FocusByAccessKey.call(this); 6400 this.activeKey = this.accessKey; 6401 this.activeKey.execute(); 6402 this.isActive = true; 6403 }, 6404 HideAccessKeys: function(){ 6405 this.hideAccessKeys(this.accessKey); 6406 }, 6407 hideAccessKeys: function (accessKey) { 6408 for (var i = 0, ak; ak = accessKey.accessKeys[i]; i++) { 6409 this.hideAccessKeys(ak); 6410 } 6411 if (accessKey) 6412 accessKey.hide(); 6413 }, 6414 HandleClick: function(e) { 6415 KbdHelper.prototype.HandleClick.call(this, e); 6416 this.stopProcessing(); 6417 } 6418}); 6419AccessKey = ASPx.CreateClass(null, { 6420 constructor: function (popupItem, getPopupElement, keyTipElement, key, onlyClick, manualStopProcessing) { 6421 this.key = key ? key : keyTipElement ? ASPxClientUtils.Trim(ASPx.GetInnerText(keyTipElement)) : null; 6422 this.popupItem = popupItem; 6423 this.getPopupElement = getPopupElement; 6424 this.keyTipElement = keyTipElement; 6425 this.accessKeys = []; 6426 this.needShowChilds = true; 6427 this.parent = null; 6428 this.onlyClick = onlyClick; 6429 this.manualStopProcessing = manualStopProcessing; 6430 }, 6431 Add: function (accessKey) { 6432 this.accessKeys.push(accessKey); 6433 accessKey.parent = this; 6434 }, 6435 TryAccessKey: function (char, index, needToContinue) { 6436 if (!this.accessKeys || this.accessKeys.length == 0) 6437 return; 6438 for (var i = 0, accessKey; accessKey = this.accessKeys[i]; i++) { 6439 if (accessKey.key[index] == char && accessKey.isVisible()) { 6440 if (accessKey.key[index + 1]) { 6441 needToContinue.value = true; 6442 } 6443 else { 6444 accessKey.execute(); 6445 return accessKey; 6446 } 6447 } else { 6448 accessKey.hide(); 6449 } 6450 } 6451 for (var i = 0, accessKey; accessKey = this.accessKeys[i]; i++) { 6452 var key = accessKey.TryAccessKey(char, index, needToContinue); 6453 if (key) 6454 return key; 6455 } 6456 return; 6457 }, 6458 isVisible: function(){ 6459 return ASPx.GetElementVisibility(this.keyTipElement); 6460 }, 6461 Return: function () { 6462 this.hideChildAccessKeys(); 6463 if (this.parent) { 6464 this.parent.showAccessKeys(true); 6465 } 6466 return this.parent; 6467 }, 6468 execute: function () { 6469 this.hideAll(); 6470 if (this.popupItem && this.popupItem.accessKeyClick && !this.onlyClick) 6471 this.popupItem.accessKeyClick(); 6472 if (this.getPopupElement && this.onlyClick) 6473 ASPx.Evt.EmulateMouseClick(this.getPopupElement()); 6474 if (this.accessKeys) 6475 setTimeout(function () { 6476 this.showAccessKeys(true); 6477 }.aspxBind(this), 100); 6478 }, 6479 showAccessKeys: function (directShow) { 6480 if (!directShow && !this.needShowChilds) 6481 return; 6482 for (var i = 0; i < this.accessKeys.length; i++) { 6483 var accessKey = this.accessKeys[i]; 6484 if (accessKey) { 6485 var popupElement = accessKey.getPopupElement ? accessKey.getPopupElement() : null; 6486 if (popupElement && ASPx.IsElementVisible(popupElement, true)) { 6487 this.show(accessKey); 6488 } 6489 accessKey.showAccessKeys(); 6490 } 6491 } 6492 }, 6493 show: function (accessKey) { 6494 var keyTipElement = accessKey.keyTipElement; 6495 var popupElement = accessKey.getPopupElement(); 6496 var top = ASPx.GetAbsolutePositionY(popupElement); 6497 var left = ASPx.GetAbsolutePositionX(popupElement); 6498 if (accessKey.popupItem.getAccessKeyPosition) 6499 switch (accessKey.popupItem.getAccessKeyPosition()) { 6500 case "AboveRight": 6501 left = left + popupElement.offsetWidth - keyTipElement.offsetWidth / 3; 6502 top = top - keyTipElement.offsetHeight / 2; 6503 break; 6504 case "Right": 6505 left = left + popupElement.offsetWidth - keyTipElement.offsetWidth / 3;
6506 top = top + popupElement.offsetHeight / 2 - keyTipElement.offsetHeight / 2; 6507 break; 6508 case "BelowRight": 6509 left = left + popupElement.offsetWidth - keyTipElement.offsetWidth / 3; 6510 top = top + keyTipElement.offsetHeight / 2; 6511 break; 6512 default: 6513 top = top + popupElement.offsetHeight; 6514 left = left + popupElement.offsetWidth / 2 - keyTipElement.offsetWidth / 2; 6515 break; 6516 } 6517 else { 6518 top = top + popupElement.offsetHeight; 6519 left = left + popupElement.offsetWidth / 2 - keyTipElement.offsetWidth / 2; 6520 } 6521 ASPx.SetAbsoluteY(keyTipElement, top); 6522 ASPx.SetAbsoluteX(keyTipElement, left); 6523 ASPx.SetElementVisibility(keyTipElement, true); 6524 }, 6525 hide: function () { 6526 if (this.keyTipElement) 6527 ASPx.SetElementVisibility(this.keyTipElement, false); 6528 }, 6529 hideChildAccessKeys: function () { 6530 this.hideAccessKeys(this.accessKeys); 6531 }, 6532 hideAccessKeys: function (accessKeys) { 6533 if (accessKeys) { 6534 for (var i = 0, accessKey; accessKey = accessKeys[i]; i++) { 6535 if (accessKey.keyTipElement) 6536 accessKey.hide(); 6537 accessKey.hideChildAccessKeys(); 6538 } 6539 } 6540 }, 6541 hideAll: function () { 6542 this.getRoot(this).hideChildAccessKeys(); 6543 }, 6544 getRoot: function (accessKey) { 6545 if (!accessKey.parent) 6546 return accessKey; 6547 return this.getRoot(accessKey.parent); 6548 } 6549}); 6550var focusedElement = null; 6551function aspxOnElementFocused(evt) { 6552 evt = ASPx.Evt.GetEvent(evt); 6553 if(evt && evt.target) 6554 focusedElement = evt.target; 6555} 6556function _aspxInitializeFocus() { 6557 if(!ASPx.GetActiveElement()) 6558 ASPx.Evt.AttachEventToDocument("focus", aspxOnElementFocused); 6559} 6560function _aspxGetFocusedElement() { 6561 var activeElement = ASPx.GetActiveElement(); 6562 return activeElement ? activeElement : focusedElement; 6563} 6564CheckBoxCheckState = { 6565 Checked : "Checked", 6566 Unchecked : "Unchecked", 6567 Indeterminate : "Indeterminate" 6568}; 6569CheckBoxInputKey = { 6570 Checked : "C", 6571 Unchecked : "U", 6572 Indeterminate : "I" 6573}; 6574var CheckableElementStateController = ASPx.CreateClass(null, { 6575 constructor: function(imageProperties) { 6576 this.checkBoxStates = []; 6577 this.imageProperties = imageProperties; 6578 }, 6579 GetValueByInputKey: function(inputKey) { 6580 return this.GetFirstValueBySecondValue("Value", "StateInputKey", inputKey); 6581 }, 6582 GetInputKeyByValue: function(value) { 6583 return this.GetFirstValueBySecondValue("StateInputKey", "Value", value); 6584 }, 6585 GetImagePropertiesNumByInputKey: function(value) { 6586 return this.GetFirstValueBySecondValue("ImagePropertiesNumber", "StateInputKey", value); 6587 }, 6588 GetNextCheckBoxValue: function(currentValue, allowGrayed) { 6589 var currentInputKey = this.GetInputKeyByValue(currentValue); 6590 var nextInputKey = ''; 6591 switch(currentInputKey) { 6592 case CheckBoxInputKey.Checked: 6593 nextInputKey = CheckBoxInputKey.Unchecked; break; 6594 case CheckBoxInputKey.Unchecked: 6595 nextInputKey = allowGrayed ? CheckBoxInputKey.Indeterminate : CheckBoxInputKey.Checked; break; 6596 case CheckBoxInputKey.Indeterminate: 6597 nextInputKey = CheckBoxInputKey.Checked; break; 6598 } 6599 return this.GetValueByInputKey(nextInputKey); 6600 }, 6601 GetCheckStateByInputKey: function(inputKey) { 6602 switch(inputKey) { 6603 case CheckBoxInputKey.Checked: 6604 return CheckBoxCheckState.Checked; 6605 case CheckBoxInputKey.Unchecked: 6606 return CheckBoxCheckState.Unchecked; 6607 case CheckBoxInputKey.Indeterminate: 6608 return CheckBoxCheckState.Indeterminate; 6609 } 6610 }, 6611 GetValueByCheckState: function(checkState) { 6612 switch(checkState) { 6613 case CheckBoxCheckState.Checked: 6614 return this.GetValueByInputKey(CheckBoxInputKey.Checked); 6615 case CheckBoxCheckState.Unchecked: 6616 return this.GetValueByInputKey(CheckBoxInputKey.Unchecked); 6617 case CheckBoxCheckState.Indeterminate: 6618 return this.GetValueByInputKey(CheckBoxInputKey.Indeterminate); 6619 } 6620 }, 6621 GetFirstValueBySecondValue: function(firstValueName, secondValueName, secondValue) { 6622 return this.GetValueByFunc(firstValueName, 6623 function(checkBoxState) { return checkBoxState[secondValueName] === secondValue; }); 6624 }, 6625 GetValueByFunc: function(valueName, func) { 6626 for(var i = 0; i < this.checkBoxStates.length; i++) { 6627 if(func(this.checkBoxStates[i])) 6628 return this.checkBoxStates[i][valueName]; 6629 } 6630 }, 6631 AssignElementClassName: function(element, cssClassPropertyKey, disabledCssClassPropertyKey, assignedClassName) { 6632 var classNames = [ ]; 6633 for(var i = 0; i < this.imageProperties[cssClassPropertyKey].length; i++) { 6634 classNames.push(this.imageProperties[disabledCssClassPropertyKey][i]); 6635 classNames.push(this.imageProperties[cssClassPropertyKey][i]); 6636 } 6637 var elementClassName = element.className; 6638 for(var i = 0; i < classNames.length; i++) { 6639 var className = classNames[i]; 6640 var index = elementClassName.indexOf(className); 6641 if(index > -1) 6642 elementClassName = elementClassName.replace((index == 0 ? '' : ' ') + className, ""); 6643 } 6644 elementClassName += " " + assignedClassName; 6645 element.className = elementClassName; 6646 }, 6647 UpdateInternalCheckBoxDecoration: function(mainElement, inputKey, enabled) { 6648 var imagePropertiesNumber = this.GetImagePropertiesNumByInputKey(inputKey); 6649 for(var imagePropertyKey in this.imageProperties) { 6650 var propertyValue = this.imageProperties[imagePropertyKey][imagePropertiesNumber]; 6651 propertyValue = propertyValue || !isNaN(propertyValue) ? propertyValue : ""; 6652 switch(imagePropertyKey) { 6653 case "0" : mainElement.title = propertyValue; break; 6654 case "1" : mainElement.style.width = propertyValue + (propertyValue != "" ? "px" : ""); break; 6655 case "2" : mainElement.style.height = propertyValue + (propertyValue != "" ? "px" : ""); break; 6656 } 6657 if(enabled) { 6658 switch(imagePropertyKey) {
6659 case "3" : this.SetImageSrc(mainElement, propertyValue); break; 6660 case "4" : 6661 this.AssignElementClassName(mainElement, "4", "8", propertyValue); 6662 break; 6663 case "5" : this.SetBackgroundPosition(mainElement, propertyValue, true); break; 6664 case "6" : this.SetBackgroundPosition(mainElement, propertyValue, false); break; 6665 } 6666 } else { 6667 switch(imagePropertyKey) { 6668 case "7" : this.SetImageSrc(mainElement, propertyValue); break; 6669 case "8" : 6670 this.AssignElementClassName(mainElement, "4", "8", propertyValue); 6671 break; 6672 case "9" : this.SetBackgroundPosition(mainElement, propertyValue, true); break; 6673 case "10" : this.SetBackgroundPosition(mainElement, propertyValue, false); break; 6674 } 6675 } 6676 } 6677 }, 6678 SetImageSrc: function(mainElement, src) { 6679 if(src === ""){ 6680 mainElement.style.backgroundImage = ""; 6681 mainElement.style.backgroundPosition = ""; 6682 } 6683 else{ 6684 mainElement.style.backgroundImage = "url('" + src + "')"; 6685 this.SetBackgroundPosition(mainElement, 0, true); 6686 this.SetBackgroundPosition(mainElement, 0, false); 6687 } 6688 }, 6689 SetBackgroundPosition: function(element, value, isX) { 6690 if(value === "") { 6691 element.style.backgroundPosition = value; 6692 return; 6693 } 6694 if(element.style.backgroundPosition === "") 6695 element.style.backgroundPosition = isX ? "-" + value.toString() + "px 0px" : "0px -" + value.toString() + "px"; 6696 else { 6697 var position = element.style.backgroundPosition.split(' '); 6698 element.style.backgroundPosition = isX ? '-' + value.toString() + "px " + position[1] : position[0] + " -" + value.toString() + "px"; 6699 } 6700 }, 6701 AddState: function(value, stateInputKey, imagePropertiesNumber) { 6702 this.checkBoxStates.push({ 6703 "Value" : value, 6704 "StateInputKey" : stateInputKey, 6705 "ImagePropertiesNumber" : imagePropertiesNumber 6706 }); 6707 }, 6708 GetAriaCheckedValue: function(state) { 6709 switch(state) { 6710 case ASPx.CheckBoxCheckState.Checked: return "true"; 6711 case ASPx.CheckBoxCheckState.Unchecked: return "false"; 6712 case ASPx.CheckBoxCheckState.Indeterminate: return "mixed"; 6713 default: return ""; 6714 } 6715 } 6716}); 6717CheckableElementStateController.Create = function(imageProperties, valueChecked, valueUnchecked, valueGrayed, allowGrayed) { 6718 var stateController = new CheckableElementStateController(imageProperties); 6719 stateController.AddState(valueChecked, CheckBoxInputKey.Checked, 0); 6720 stateController.AddState(valueUnchecked, CheckBoxInputKey.Unchecked, 1); 6721 if(typeof(valueGrayed) != "undefined") 6722 stateController.AddState(valueGrayed, CheckBoxInputKey.Indeterminate, allowGrayed ? 2 : 1); 6723 stateController.allowGrayed = allowGrayed; 6724 return stateController; 6725}; 6726var CheckableElementHelper = ASPx.CreateClass(null, { 6727 InternalCheckBoxInitialize: function(internalCheckBox) { 6728 this.AttachToMainElement(internalCheckBox); 6729 this.AttachToInputElement(internalCheckBox); 6730 }, 6731 AttachToMainElement: function(internalCheckBox) { 6732 var instance = this; 6733 if(internalCheckBox.mainElement) { 6734 ASPx.Evt.AttachEventToElement(internalCheckBox.mainElement, "click", 6735 function (evt) { 6736 instance.InvokeClick(internalCheckBox, evt); 6737 if(!internalCheckBox.disableCancelBubble) 6738 return ASPx.Evt.PreventEventAndBubble(evt); 6739 } 6740 ); 6741 ASPx.Evt.AttachEventToElement(internalCheckBox.mainElement, "mousedown", 6742 function (evt) { 6743 internalCheckBox.Refocus(); 6744 } 6745 ); 6746 ASPx.Evt.PreventElementDragAndSelect(internalCheckBox.mainElement, true); 6747 } 6748 }, 6749 AttachToInputElement: function(internalCheckBox) { 6750 var instance = this; 6751 if(internalCheckBox.inputElement && internalCheckBox.mainElement) { 6752 var checkableElement = internalCheckBox.accessibilityCompliant ? internalCheckBox.mainElement : internalCheckBox.inputElement; 6753 ASPx.Evt.AttachEventToElement(checkableElement, "focus", 6754 function (evt) { 6755 if(!internalCheckBox.enabled) 6756 checkableElement.blur(); 6757 else 6758 internalCheckBox.OnFocus(); 6759 } 6760 ); 6761 ASPx.Evt.AttachEventToElement(checkableElement, "blur", 6762 function (evt) { 6763 internalCheckBox.OnLostFocus(); 6764 } 6765 ); 6766 ASPx.Evt.AttachEventToElement(checkableElement, "keyup", 6767 function (evt) { 6768 if(ASPx.Evt.GetKeyCode(evt) == ASPx.Key.Space) 6769 instance.InvokeClick(internalCheckBox, evt); 6770 } 6771 ); 6772 ASPx.Evt.AttachEventToElement(checkableElement, "keydown", 6773 function (evt) { 6774 if(ASPx.Evt.GetKeyCode(evt) == ASPx.Key.Space) 6775 return ASPx.Evt.PreventEvent(evt); 6776 } 6777 ); 6778 } 6779 }, 6780 IsKBSInputWrapperExist: function() { 6781 return ASPx.Browser.Opera || ASPx.Browser.WebKitFamily; 6782 }, 6783 GetICBMainElementByInput: function(icbInputElement) { 6784 return this.IsKBSInputWrapperExist() ? icbInputElement.parentNode.parentNode : icbInputElement.parentNode; 6785 }, 6786 InvokeClick: function(internalCheckBox, evt) { 6787 if(internalCheckBox.enabled && !internalCheckBox.readOnly) { 6788 var inputElementValue = internalCheckBox.inputElement.value; 6789 var focusableElement = internalCheckBox.accessibilityCompliant ? internalCheckBox.mainElement : internalCheckBox.inputElement; 6790 focusableElement.focus(); 6791 if(!ASPx.Browser.IE) 6792 internalCheckBox.inputElement.value = inputElementValue; 6793 this.InvokeClickCore(internalCheckBox, evt) 6794 } 6795 }, 6796 InvokeClickCore: function(internalCheckBox, evt) { 6797 internalCheckBox.OnClick(evt); 6798 } 6799}); 6800CheckableElementHelper.Instance = new CheckableElementHelper(); 6801var CheckBoxInternal = ASPx.CreateClass(null, { 6802 constructor: function(inputElement, stateController, allowGrayed, allowGrayedByClick, helper, container, storeValueInInput, key, disableCancelBubble, 6803 accessibilityCompliant) { 6804 this.inputElement = inputElement; 6805 this.mainElement = helper.GetICBMainElementByInput(this.inputElement); 6806 this.name = (key ? key : this.inputElement.id) + CheckBoxInternal.GetICBMainElementPostfix(); 6807 this.mainElement.id = this.name; 6808 this.stateController = stateController; 6809 this.container = container; 6810 this.allowGrayed = allowGrayed; 6811 this.allowGrayedByClick = allowGrayedByClick; 6812 this.autoSwitchEnabled = true; 6813 this.storeValueInInput = !!storeValueInInput; 6814 this.storedInputKey = !this.storeValueInInput ? this.inputElement.value : null; 6815 this.disableCancelBubble = !!disableCancelBubble; 6816 this.accessibilityCompliant = accessibilityCompliant; 6817 this.focusDecoration = null; 6818 this.focused = false; 6819 this.focusLocked = false; 6820 this.enabled = !this.mainElement.className.match(/dxWeb_\w+Disabled(\b|_)/); 6821 this.readOnly = false; 6822 this.CheckedChanged = new ASPxClientEvent(); 6823 this.Focus = new ASPxClientEvent(); 6824 this.LostFocus = new ASPxClientEvent(); 6825 helper.InternalCheckBoxInitialize(this); 6826 }, 6827 ChangeInputElementTabIndex: function() { 6828 var changeMethod = this.enabled ? ASPx.Attr.RestoreTabIndexAttribute : ASPx.Attr.SaveTabIndexAttributeAndReset; 6829 changeMethod(this.inputElement); 6830 }, 6831 CreateFocusDecoration: function(focusedStyle) { 6832 this.focusDecoration = new EditorStyleDecoration(this); 6833 this.focusDecoration.AddStyle('F', focusedStyle[0], focusedStyle[1]); 6834 this.focusDecoration.AddPostfix(""); 6835 }, 6836 UpdateFocusDecoration: function() { 6837 this.focusDecoration.Update(); 6838 }, 6839 StoreInputKey: function(inputKey) { 6840 if(this.storeValueInInput) 6841 this.inputElement.value = inputKey; 6842 else 6843 this.storedInputKey = inputKey; 6844 }, 6845 GetStoredInputKey: function() { 6846 if(this.storeValueInInput) 6847 return this.inputElement.value; 6848 else 6849 return this.storedInputKey; 6850 }, 6851 OnClick: function(e) { 6852 if(this.autoSwitchEnabled) { 6853 var currentValue = this.GetValue(); 6854 var value = this.stateController.GetNextCheckBoxValue(currentValue, this.allowGrayedByClick && this.allowGrayed); 6855 this.SetValue(value); 6856 } 6857 this.CheckedChanged.FireEvent(this, e); 6858 }, 6859 OnFocus: function() { 6860 if(!this.IsFocusLocked()) { 6861 this.focused = true; 6862 this.UpdateFocusDecoration(); 6863 this.Focus.FireEvent(this, null); 6864 } else 6865 this.UnlockFocus(); 6866 }, 6867 OnLostFocus: function() { 6868 if(!this.IsFocusLocked()) { 6869 this.focused = false; 6870 this.UpdateFocusDecoration(); 6871 this.LostFocus.FireEvent(this, null); 6872 } 6873 }, 6874 Refocus: function() { 6875 if(this.focused) {
6876 this.LockFocus(); 6877 this.inputElement.blur(); 6878 if(ASPx.Browser.MacOSMobilePlatform) { 6879 window.setTimeout(function() { 6880 ASPx.SetFocus(this.inputElement); 6881 }, 100); 6882 } else { 6883 ASPx.SetFocus(this.inputElement); 6884 } 6885 } 6886 }, 6887 LockFocus: function() { 6888 this.focusLocked = true; 6889 }, 6890 UnlockFocus: function() { 6891 this.focusLocked = false; 6892 }, 6893 IsFocusLocked: function() { 6894 if(!!ASPx.Attr.GetAttribute(this.mainElement, ASPx.Attr.GetTabIndexAttributeName())) 6895 return false; 6896 return this.focusLocked; 6897 }, 6898 SetValue: function(value) { 6899 var currentValue = this.GetValue(); 6900 if(currentValue !== value) { 6901 var newInputKey = this.stateController.GetInputKeyByValue(value); 6902 if(newInputKey) { 6903 this.StoreInputKey(newInputKey); 6904 this.stateController.UpdateInternalCheckBoxDecoration(this.mainElement, newInputKey, this.enabled); 6905 } 6906 } 6907 if(this.accessibilityCompliant) { 6908 var state = this.GetCurrentCheckState(); 6909 var value = this.stateController.GetAriaCheckedValue(state); 6910 if(this.mainElement.attributes["aria-checked"] !== undefined) 6911 this.mainElement.setAttribute("aria-checked", value); 6912 if(this.mainElement.attributes["aria-selected"] !== undefined) 6913 this.mainElement.setAttribute("aria-selected", value); 6914 } 6915 }, 6916 GetValue: function() { 6917 return this.stateController.GetValueByInputKey(this.GetCurrentInputKey()); 6918 }, 6919 GetCurrentCheckState: function() { 6920 return this.stateController.GetCheckStateByInputKey(this.GetCurrentInputKey()); 6921 }, 6922 GetCurrentInputKey: function() { 6923 return this.GetStoredInputKey(); 6924 }, 6925 GetChecked: function() { 6926 return this.GetCurrentInputKey() === CheckBoxInputKey.Checked; 6927 }, 6928 SetChecked: function(checked) { 6929 var newValue = this.stateController.GetValueByCheckState(checked ? CheckBoxCheckState.Checked : CheckBoxCheckState.Unchecked); 6930 this.SetValue(newValue); 6931 }, 6932 SetEnabled: function(enabled) { 6933 if(this.enabled != enabled) { 6934 this.enabled = enabled; 6935 this.stateController.UpdateInternalCheckBoxDecoration(this.mainElement, this.GetCurrentInputKey(), this.enabled); 6936 this.ChangeInputElementTabIndex(); 6937 } 6938 }, 6939 GetEnabled: function() { 6940 return this.enabled; 6941 } 6942}); 6943CheckBoxInternal.GetICBMainElementPostfix = function() { 6944 return "_D"; 6945}; 6946var CheckBoxInternalCollection = ASPx.CreateClass(CollectionBase, { 6947 constructor: function(imageProperties, allowGrayed, storeValueInInput, helper, disableCancelBubble, accessibilityCompliant) { 6948 this.constructor.prototype.constructor.call(this); 6949 this.stateController = allowGrayed 6950 ? CheckableElementStateController.Create(imageProperties, CheckBoxInputKey.Checked, CheckBoxInputKey.Unchecked, CheckBoxInputKey.Indeterminate, true) 6951 : CheckableElementStateController.Create(imageProperties, CheckBoxInputKey.Checked, CheckBoxInputKey.Unchecked); 6952 this.helper = helper || CheckableElementHelper.Instance; 6953 this.storeValueInInput = !!storeValueInInput; 6954 this.disableCancelBubble = !!disableCancelBubble; 6955 this.accessibilityCompliant = accessibilityCompliant; 6956 }, 6957 Add: function(key, inputElement, container) { 6958 this.Remove(key); 6959 var checkBox = this.CreateInternalCheckBox(key, inputElement, container); 6960 CollectionBase.prototype.Add.call(this, key, checkBox); 6961 return checkBox; 6962 }, 6963 SetImageProperties: function(imageProperties) { 6964 this.stateController.imageProperties = imageProperties; 6965 }, 6966 CreateInternalCheckBox: function(key, inputElement, container) { 6967 return new CheckBoxInternal(inputElement, this.stateController, this.stateController.allowGrayed, false, this.helper, container, 6968 this.storeValueInInput, key, this.disableCancelBubble, this.accessibilityCompliant); 6969 } 6970}); 6971var EditorStyleDecoration = ASPx.CreateClass(null, { 6972 constructor: function(editor) { 6973 this.editor = editor; 6974 this.postfixList = [ ]; 6975 this.styles = { }; 6976 this.innerStyles = { }; 6977 this.nullTextClassName = ""; 6978 this.lockUpdate = false; 6979 }, 6980 GetStyleSheet: function() { 6981 return ASPx.GetCurrentStyleSheet(); 6982 }, 6983 AddPostfix: function(value, applyClass, applyBorders, applyBackgroun
6983d) { 6984 this.postfixList.push(value); 6985 }, 6986 AddStyle: function(key, className, cssText) { 6987 this.styles[key] = this.CreateRule(className, cssText); 6988 this.innerStyles[key] = this.CreateRule("", this.FilterInnerCss(cssText)); 6989 }, 6990 CreateRule: function(className, cssText) { 6991 return ASPx.Str.Trim(className + " " + ASPx.CreateImportantStyleRule(this.GetStyleSheet(), cssText)); 6992 }, 6993 GetElementByPostfix: function(postfix) { 6994 return ASPx.GetElementById(this.editor.name + postfix); 6995 }, 6996 LockUpdate: function() { 6997 this.lockUpdate = true; 6998 }, 6999 UnlockUpdate: function() { 7000 this.lockUpdate = false; 7001 }, 7002 IsUpdateLocked: function() { 7003 return this.lockUpdate; 7004 }, 7005 Update: function() { 7006 if(this.IsUpdateLocked()) 7007 return; 7008 this.UpdateCore(); 7009 }, 7010 UpdateCore: function() { 7011 for(var i = 0; i < this.postfixList.length; i++) { 7012 var postfix = this.postfixList[i]; 7013 var inner = postfix.length > 0; 7014 var element = this.GetElementByPostfix(postfix); 7015 if(element) { 7016 this.ApplyInvalidStyle(element, inner); 7017 this.ApplyFocusedStyle(element, inner); 7018 this.ApplyNullTextStyle(element, inner); 7019 } 7020 } 7021 }, 7022 ApplyInvalidStyle: function(element, inner) { 7023 if(this.HasDecoration("I")) { 7024 var isValid = this.editor.GetIsValid(); 7025 this.ApplyDecoration("I", element, inner, !isValid); 7026 } 7027 }, 7028 ApplyFocusedStyle: function(element, inner) { 7029 if(this.HasDecoration("F")) 7030 this.ApplyDecoration("F", element, inner, this.editor.focused); 7031 }, 7032 ApplyNullTextStyle: function(element, inner) { 7033 if(!this.HasDecoration("N")) 7034 return; 7035 var apply = !this.editor.focused; 7036 if(apply) { 7037 if(this.editor.CanApplyNullTextDecoration) { 7038 apply = this.editor.CanApplyNullTextDecoration(); 7039 } else { 7040 var value = this.editor.GetValue(); 7041 apply = apply && (value == null || value === ""); 7042 } 7043 } 7044 if(apply) 7045 ASPx.Attr.ChangeAttribute(element, "spellcheck", "false"); 7046 else 7047 ASPx.Attr.RestoreAttribute(element, "spellcheck"); 7048 this.ApplyDecoration("N", element, inner, apply); 7049 }, 7050 HasDecoration: function(key) { 7051 return !!this.styles[key]; 7052 }, 7053 ApplyNullTextClassName: function(active) { 7054 var nullTextClassName = this.GetNullTextClassName(); 7055 var editorMainElement = this.editor.GetMainElement(); 7056 if (active) 7057 ASPx.AddClassNameToElement(editorMainElement, nullTextClassName); 7058 else 7059 ASPx.RemoveClassNameFromElement(editorMainElement, nullTextClassName); 7060 }, 7061 GetNullTextClassName: function () { 7062 if (!this.nullTextClassName) 7063 this.InitializeNullTextClassName(); 7064 return this.nullTextClassName; 7065 }, 7066 InitializeNullTextClassName: function () { 7067 var nullTextStyle = this.styles["N"]; 7068 if (nullTextStyle) { 7069 var nullTextStyleClassNames = nullTextStyle.split(" "); 7070 for (var i = 0; i < nullTextStyleClassNames.length; i++) 7071 if (nullTextStyleClassNames[i].match("dxeNullText")) 7072 this.nullTextClassName = nullTextStyleClassNames[i]; 7073 } 7074 }, 7075 ApplyDecoration: function(key, element, inner, active) { 7076 var value = inner ? this.innerStyles[key] : this.styles[key]; 7077 ASPx.RemoveClassNameFromElement(element, value); 7078 if(ASPx.Browser.IE && ASPx.Browser.MajorVersion >= 11) 7079 var reflow = element.offsetWidth; 7080 if(active) { 7081 ASPx.AddClassNameToElement(element, value); 7082 if(ASPx.Browser.IE && ASPx.Browser.Version > 10 && element.border != null) { 7083 var border = parseInt(element.border) || 0; 7084 element.border = 1; 7085 element.border = border; 7086 } 7087 } 7088 }, 7089 FilterInnerCss: function(css) { 7090 return css.replace(/(border|background-image)[^:]*:[^;]+/gi, ""); 7091 } 7092}); 7093var TouchUIHelper = { 7094 isGesture: false, 7095 isMouseEventFromScrolling: false, 7096 isNativeScrollingAllowed: true, 7097 clickSensetivity: 10, 7098 documentTouchHandlers: {}, 7099 documentEventAttachingAllowed: true, 7100 msTouchDraggableClassName: "dxMSTouchDraggable", 7101 touchMouseDownEventName: ASPx.Browser.WebKitTouchUI ? "touchstart" : (ASPx.Browser.Edge && ASPx.Browser.MSTouchUI && window.PointerEvent ? "pointerdown" : "mousedown"), 7102 touchMouseUpEventName: ASPx.Browser.WebKitTouchUI ? "touchend" : (ASPx.Browser.Edge && ASPx.Browser.MSTouchUI && window.PointerEvent ? "pointerup" : "mouseup"), 7103 touchMouseMoveEventName: ASPx.Browser.WebKitTouchUI ? "touchmove" : (ASPx.Browser.Edge && ASPx.Browser.MSTouchUI && window.PointerEvent ? "pointermove" : "mousemove"), 7104 isTouchEvent: function(evt) { 7105 if(!evt) return false; 7106 return ASPx.Browser.WebKitTouchUI && ASPx.IsExists(evt.changedTouches); 7107 }, 7108 isTouchEventName: function(eventName) { 7109 return ASPx.Browser.WebKitTouchUI && (eventName.indexOf("touch") > -1 || eventName.indexOf("gesture") > -1); 7110 }, 7111 getEventX: function(evt) { 7112 return ASPx.Browser.IE ? evt.pageX : evt.changedTouches[0].pageX; 7113 }, 7114 getEventY: function (evt) { 7115 return ASPx.Browser.IE ? evt.pageY :evt.changedTouches[0].pageY; 7116 }, 7117 getWebkitMajorVersion: function(){ 7118 if(!this.webkitMajorVersion){ 7119 var regExp = new RegExp("applewebkit/(\\d+)", "i"); 7120 var matches = regExp.exec(ASPx.Browser.UserAgent); 7121 if(matches && matches.index >= 1) 7122 this.webkitMajorVersion = matches[1]; 7123 } 7124 return this.webkitMajorVersion; 7125 }, 7126 getIsLandscapeOrientation: function(){ 7127 if(ASPx.Browser.MacOSMobilePlatform || ASPx.Browser.AndroidMobilePlatform) 7128 return Math.abs(window.orientation) == 90; 7129 return ASPx.GetDocumentClientWidth() > ASPx.GetDocumentClientHeight(); 7130 }, 7131 nativeScrollingSupported: function() { 7132 var allowedSafariVersion = ASPx.Browser.Version >= 5.1 && ASPx.Browser.Version < 8; 7133 var allowedWebKitVersion = this.getWebkitMajorVersion() >
7133 533 && (ASPx.Browser.Chrome || this.getWebkitMajorVersion() < 600); 7134 return (ASPx.Browser.MacOSMobilePlatform && (allowedSafariVersion || allowedWebKitVersion)) 7135 || (ASPx.Browser.AndroidMobilePlatform && ASPx.Browser.PlaformMajorVersion >= 3) || (ASPx.Browser.MSTouchUI && (!ASPx.Browser.WindowsPhonePlatform || !ASPx.Browser.IE)); 7136 }, 7137 makeScrollableIfRequired: function(element, options) { 7138 if(ASPx.Browser.WebKitTouchUI && element) { 7139 var overflow = ASPx.GetCurrentStyle(element).overflow; 7140 if(element.tagName == "DIV" && overflow != "hidden" && overflow != "visible" ){ 7141 return this.MakeScrollable(element); 7142 } 7143 } 7144 }, 7145 preventScrollOnEvent: function(evt){ 7146 }, 7147 handleFastTapIfRequired: function(evt, action, preventCommonClickEvents) { 7148 if(ASPx.Browser.WebKitTouchUI && evt.type == 'touchstart' && action) { 7149 this.FastTapHelper.HandleFastTap(evt, action, preventCommonClickEvents); 7150 return true; 7151 } 7152 return false; 7153 }, 7154 ensureDocumentSizesCorrect: function (){ 7155 return (document.documentElement.clientWidth - document.documentElement.clientHeight) / (screen.width - screen.height) > 0; 7156 }, 7157 ensureOrientationChanged: function(onOrientationChangedFunction){ 7158 if(ASPxClientUtils.iOSPlatform || this.ensureDocumentSizesCorrect()) 7159 onOrientationChangedFunction(); 7160 else { 7161 window.setTimeout(function(){ 7162 this.ensureOrientationChanged(onOrientationChangedFunction); 7163 }.aspxBind(this), 100); 7164 } 7165 }, 7166 onEventAttachingToDocument: function(eventName, func){ 7167 if(ASPx.Browser.MacOSMobilePlatform && this.isTouchEventName(eventName)) { 7168 if(!this.documentTouchHandlers[eventName]) 7169 this.documentTouchHandlers[eventName] = []; 7170 this.documentTouchHandlers[eventName].push(func); 7171 return this.documentEventAttachingAllowed; 7172 } 7173 return true; 7174 }, 7175 onEventDettachedFromDocument: function(eventName, func){ 7176 if(ASPx.Browser.MacOSMobilePlatform && this.isTouchEventName(eventName)) { 7177 var handlers = this.documentTouchHandlers[eventName]; 7178 if(handlers) 7179 ASPx.Data.ArrayRemove(handlers, func); 7180 } 7181 }, 7182 processDocumentTouchEventHandlers: function(proc) { 7183 var touchEventNames = ["touchstart", "touchend", "touchmove", "gesturestart", "gestureend"]; 7184 for(var i = 0; i < touchEventNames.length; i++) { 7185 var eventName = touchEventNames[i]; 7186 var handlers = this.documentTouchHandlers[eventName]; 7187 if(handlers) { 7188 for(var j = 0; j < handlers.length; j++) { 7189 proc(eventName,handlers[j]); 7190 } 7191 } 7192 } 7193 }, 7194 removeDocumentTouchEventHandlers: function() { 7195 if(ASPx.Browser.MacOSMobilePlatform) { 7196 this.documentEventAttachingAllowed = false; 7197 this.processDocumentTouchEventHandlers(ASPx.Evt.DetachEventFromDocumentCore); 7198 } 7199 }, 7200 restoreDocumentTouchEventHandlers: function () { 7201 if(ASPx.Browser.MacOSMobilePlatform) { 7202 this.documentEventAttachingAllowed = true; 7203 this.processDocumentTouchEventHandlers(ASPx.Evt.AttachEventToDocumentCore); 7204 } 7205 }, 7206 IsNativeScrolling: function() { 7207 return TouchUIHelper.nativeScrollingSupported() && TouchUIHelper.isNativeScrollingAllowed; 7208 }, 7209 pointerEnabled: !!(window.PointerEvent || window.MSPointerEvent), 7210 pointerDownEventName: window.PointerEvent ? "pointerdown" : "MSPointerDown", 7211 pointerUpEventName: window.PointerEvent ? "pointerup" : "MSPointerUp", 7212 pointerCancelEventName: window.PointerEvent ? "pointercancel" : "MSPointerCancel", 7213 pointerMoveEventName: window.PointerEvent ? "pointermove" : "MSPointerMove", 7214 pointerOverEventName: window.PointerEvent ? "pointerover" : "MSPointerOver", 7215 pointerOutEventName: window.PointerEvent ? "pointerout" : "MSPointerOut", 7216 pointerType: { 7217 Touch: (ASPx.Browser.IE && ASPx.Browser.Version == 10) ? 2 : "touch", 7218 Pen: (ASPx.Browser.IE && ASPx.Browser.Version == 10) ? 3 : "pen", 7219 Mouse: (ASPx.Browser.IE && ASPx.Browser.Version == 10) ? 4 : "mouse" 7220 }, 7221 msGestureEnabled: !!(window.PointerEvent || window.MSPointerEvent) && typeof(MSGesture) != "undefined", 7222 msTouchCreateGesturesWrapper: function(element, onTap){ 7223 if(!TouchUIHelper.msGestureEnabled) 7224 return; 7225 var gesture = new MSGesture(); 7226 gesture.target = element; 7227 ASPx.Evt.AttachEventToElement(element, TouchUIHelper.pointerDownEventName, function(evt){ 7228 gesture.addPointer(evt.pointerId); 7229 }); 7230 ASPx.Evt.AttachEventToElement(element, TouchUIHelper.pointerUpEventName, function(evt){ 7231 gesture.stop(); 7232 }); 7233 if(onTap) 7234 ASPx.Evt.AttachEventToElement(element, "MSGestureTap", onTap); 7235 return gesture; 7236 } 7237}; 7238var CacheHelper = {}; 7239CacheHelper.GetCachedValueCore = function(obj, key, func, cacheObj, fillValueMethod) { 7240 if(!cacheObj) 7241 cacheObj = obj;
7242 if(!cacheObj.cache) 7243 cacheObj.cache = {}; 7244 if(!key) 7245 key = "default"; 7246 fillValueMethod(obj, key, func, cacheObj); 7247 return cacheObj.cache[key]; 7248}; 7249CacheHelper.GetCachedValue = function(obj, key, func, cacheObj) { 7250 return CacheHelper.GetCachedValueCore(obj, key, func, cacheObj, 7251 function(obj, key, func, cacheObj) { 7252 if(!ASPx.IsExists(cacheObj.cache[key])) 7253 cacheObj.cache[key] = func.apply(obj, []); 7254 }); 7255}; 7256CacheHelper.GetCachedElement = function(obj, key, func, cacheObj) { 7257 return CacheHelper.GetCachedValueCore(obj, key, func, cacheObj, 7258 function(obj, key, func, cacheObj) { 7259 if(!ASPx.IsValidElement(cacheObj.cache[key])) 7260 cacheObj.cache[key] = func.apply(obj, []); 7261 }); 7262}; 7263CacheHelper.GetCachedElements = function(obj, key, func, cacheObj) { 7264 return CacheHelper.GetCachedValueCore(obj, key, func, cacheObj, 7265 function(obj, key, func, cacheObj) { 7266 if(!ASPx.IsValidElements(cacheObj.cache[key])){ 7267 var elements = func.apply(obj, []); 7268 if(!Ident.IsArray(elements)) 7269 elements = [elements]; 7270 cacheObj.cache[key] = elements; 7271 } 7272 }); 7273}; 7274CacheHelper.GetCachedElementById = function(obj, id, cacheObj) { 7275 return CacheHelper.GetCachedElement(obj, id, function() { return ASPx.GetElementById(id); }, cacheObj); 7276}; 7277CacheHelper.GetCachedChildById = function(obj, parent, id, cacheObj) { 7278 return CacheHelper.GetCachedElement(obj, id, function() { return ASPx.GetChildById(parent, id); }, cacheObj); 7279}; 7280CacheHelper.DropCachedValue = function(cacheObj, key) { 7281 cacheObj.cache[key] = null; 7282}; 7283CacheHelper.DropCache = function(cacheObj) { 7284 cacheObj.cache = null; 7285}; 7286var DomObserver = ASPx.CreateClass(null, { 7287 constructor: function() { 7288 this.items = { }; 7289 }, 7290 subscribe: function(elementID, callbackFunc) { 7291 var item = this.items[elementID]; 7292 if(item) 7293 this.unsubscribe(elementID); 7294 item = { 7295 elementID: elementID, 7296 callbackFunc: callbackFunc, 7297 pauseCount: 0 7298 }; 7299 this.prepareItem(item); 7300 this.items[elementID] = item; 7301 }, 7302 prepareItem: function(item) { 7303 }, 7304 unsubscribe: function(elementID) { 7305 this.items[elementID] = null; 7306 }, 7307 getItemElement: function(item) { 7308 var element = this.getElementById(item.elementID); 7309 if(element) 7310 return element; 7311 this.unsubscribe(item.elementID); 7312 return null; 7313 }, 7314 getElementById: function(elementID) { 7315 var element = document.getElementById(elementID); 7316 return element && ASPx.IsValidElement(element) ? element : null; 7317 }, 7318 pause: function(element, includeSubtree) { 7319 this.changeItemsState(element, includeSubtree, true); 7320 }, 7321 resume: function(element, includeSubtree) { 7322 this.changeItemsState(element, includeSubtree, false); 7323 }, 7324 forEachItem: function(processFunc, context) { 7325 context = context || this; 7326 for(var itemName in this.items) { 7327 if(!this.items.hasOwnProperty(itemName)) 7328 continue; 7329 var item = this.items[itemName]; 7330 if(item) { 7331 var needBreak = processFunc.call(context, item); 7332 if(needBreak) 7333 return; 7334 } 7335 } 7336 }, 7337 changeItemsState: function(element, includeSubtree, pause) { 7338 this.forEachItem(function(item) { 7339 if(!element) 7340 this.changeItemState(item, pause); 7341 else { 7342 var itemElement = this.getItemElement(item); 7343 if(itemElement && (element == itemElement || (includeSubtree && ASPx.GetIsParent(element, itemElement)))) { 7344 this.changeItemState(item, pause); 7345 if(!includeSubtree) 7346 return true; 7347 } 7348 } 7349 }.aspxBind(this)); 7350 }, 7351 changeItemState: function(item, pause) { 7352 if(pause) 7353 this.pauseItem(item) 7354 else 7355 this.resumeItem(item); 7356 }, 7357 pauseItem: function(item) { 7358 item.paused = true; 7359 item.pauseCount++; 7360 }, 7361 resumeItem: function(item) { 7362 if(item.pauseCount > 0) { 7363 if(item.pauseCount == 1) 7364 item.paused = false; 7365 item.pauseCount--; 7366 } 7367 } 7368}); 7369DomObserver.IsMutationObserverAvailable = function() { 7370 return !!window.MutationObserver; 7371}; 7372var TimerObserver = ASPx.CreateClass(DomObserver, { 7373 constructor: function() { 7374 this.constructor.prototype.constructor.call(this); 7375 this.timerID = -1; 7376 this.observationTimeout = 300; 7377 }, 7378 subscribe: function(elementID, callbackFunc) { 7379 DomObserver.prototype.subscribe.call(this, elementID, callbackFunc); 7380 if(!this.isActivated()) 7381 this.startObserving(); 7382 }, 7383 isActivated: function() { 7384 return this.timerID !== -1; 7385 }, 7386 startObserving: function() { 7387 if(this.isActivated()) 7388 window.clearTimeout(this.timerID); 7389 this.timerID = window.setTimeout(this.onTimeout, this.observationTimeout); 7390 }, 7391 onTimeout: function() { 7392 var observer = _aspxGetDomObserver(); 7393 observer.doObserve(); 7394 observer.startObserving(); 7395 }, 7396 doObserve: function() { 7397 if(!ASPx.documentLoaded) return; 7398 this.forEachItem(function(item) { 7399 if(!item.paused) 7400 this.doObserveForItem(item); 7401 }.aspxBind(this)); 7402 }, 7403 doObserveForItem: function(item) { 7404 var element = this.getItemElement(item); 7405 if(element) 7406 item.callbackFunc.call(this, element); 7407 } 7408}); 7409var MutationObserver = ASPx.CreateClass(DomObserver, { 7410 constructor: function() { 7411 this.constructor.prototype.constructor.call(this); 7412 this.callbackTimeout = 10; 7413 }, 7414 prepareItem: function(item) { 7415 item.callbackTimerID = -1; 7416 var target = this.getElementById(item.elementID); 7417 if(!target) 7418 return; 7419 var observerCallbackFunc = function() { 7420 if(item.callbackTimerID === -1) { 7421 var timeoutHander = function() { 7422 item.callbackTimerID = -1; 7423 item.callbackFunc.call(this, target); 7424 }.aspxBind(this); 7425 item.callbackTimerID = window.setTimeout(timeoutHander, this.callbackTimeout); 7426 } 7427 }.aspxBind(this); 7428 var observer = new window.MutationObserver(observerCallbackFunc); 7429 var config = { attributes: true, childList: true, characterData: true, subtree: true }; 7430 observer.observe(target, config); 7431 item.observer = observer; 7432 item.config = config; 7433 }, 7434 unsubscribe: function(elementID) { 7435 var item = this.items[elementID]; 7436 if(item) { 7437 item.observer.disconnect(); 7438 item.observer = null; 7439 } 7440 DomObserver.prototype.unsubscribe.call(this, elementID); 7441 }, 7442 pauseItem: function(item) { 7443 DomObserver.prototype.pauseItem.call(this, item); 7444 item.observer.disconnect(); 7445 }, 7446 resumeItem: function(item) { 7447 DomObserver.prototype.resumeItem.call(this, item); 7448 if(!item.paused) { 7449 var target = this.getItemElement(item); 7450 if(target) 7451 item.observer.observe(target, item.config); 7452 } 7453 } 7454}); 7455var domObserver = null; 7456function _aspxGetDomObserver() { 7457 if(domObserver == null) 7458 domObserver = DomObserver.IsMutationObserverAvailable() ? new MutationObserver() : new TimerObserver(); 7459 return domObserver; 7460}; 7461var ControlUpdateWatcher = ASPx.CreateClass(null, { 7462 constructor: function() { 7463 this.helpers = { }; 7464 this.clearLockerTimerID = -1; 7465 this.clearLockerTimerDelay = 15; 7466 this.postProcessing = false; 7467 this.init(); 7468 }, 7469 init: function() { 7470 var postHandler = aspxGetPostHandler(); 7471 postHandler.Post.AddHandler(this.OnPost, this); 7472 }, 7473 Add: function(helper) { 7474 this.helpers[helper.GetName()] = helper; 7475 },
7476 CanSendCallback: function(dxCallbackOwner, arg) { 7477 this.LockConfirmOnBeforeWindowUnload(); 7478 var modifiedHelpers = this.FilterModifiedHelpersByDXCallbackOwner(this.GetModifiedHelpers(), dxCallbackOwner, arg); 7479 if(modifiedHelpers.length === 0) return true; 7480 var modifiedHelpersInfo = this.GetToConfirmAndToResetLists(modifiedHelpers, dxCallbackOwner.name); 7481 if(!modifiedHelpersInfo) return true; 7482 if(modifiedHelpersInfo.toConfirm.length === 0) { 7483 this.ResetClientChanges(modifiedHelpersInfo.toReset); 7484 return true; 7485 } 7486 var helper = modifiedHelpersInfo.toConfirm[0]; 7487 if(!confirm(helper.GetConfirmUpdateText())) 7488 return false; 7489 this.ResetClientChanges(modifiedHelpersInfo.toReset); 7490 return true; 7491 }, 7492 OnPost: function(s, e) { 7493 if(e.isDXCallback) return; 7494 this.postProcessing = true; 7495 this.LockConfirmOnBeforeWindowUnload(); 7496 var modifiedHelpersInfo = this.GetModifedHelpersInfo(e); 7497 if(!modifiedHelpersInfo) return; 7498 if(modifiedHelpersInfo.toConfirm.length === 0) { 7499 this.ResetClientChanges(modifiedHelpersInfo.toReset); 7500 return; 7501 } 7502 var helper = modifiedHelpersInfo.toConfirm[0]; 7503 if(!confirm(helper.GetConfirmUpdateText())) { 7504 e.cancel = true; 7505 this.finishPostProcessing(); 7506 } 7507 if(!e.cancel) 7508 this.ResetClientChanges(modifiedHelpersInfo.toReset); 7509 }, 7510 finishPostProcessing: function() { 7511 this.postProcessing = false; 7512 }, 7513 GetModifedHelpersInfo: function(e) { 7514 var modifiedHelpers = this.FilterModifiedHelpers(this.GetModifiedHelpers(), e); 7515 if(modifiedHelpers.length === 0) return; 7516 return this.GetToConfirmAndToResetLists(modifiedHelpers, e && e.ownerID); 7517 }, 7518 GetToConfirmAndToResetLists: function(modifiedHelpers, ownerID) { 7519 var resetList = [ ]; 7520 var confirmList = [ ]; 7521 for(var i = 0; i < modifiedHelpers.length; i++) { 7522 var helper = modifiedHelpers[i]; 7523 if(!helper.GetConfirmUpdateText()) { 7524 resetList.push(helper); 7525 continue; 7526 } 7527 if(helper.CanShowConfirm(ownerID)) { 7528 resetList.push(helper); 7529 confirmList.push(helper); 7530 } 7531 } 7532 return { toConfirm: confirmList, toReset: resetList }; 7533 }, 7534 FilterModifiedHelpers: function(modifiedHelpers, e) { 7535 if(modifiedHelpers.length === 0) 7536 return [ ]; 7537 if(this.RequireProcessUpdatePanelCallback(e)) 7538 return this.FilterModifiedHelpersByUpdatePanels(modifiedHelpers); 7539 if(this.postProcessing) 7540 return this.FilterModifiedHelpersByPostback(modifiedHelpers); 7541 return modifiedHelpers; 7542 }, 7543 FilterModifiedHelpersByDXCallbackOwner: function(modifiedHelpers, dxCallbackOwner, arg) { 7544 var result = [ ]; 7545 for(var i = 0; i < modifiedHelpers.length; i++) { 7546 var helper = modifiedHelpers[i]; 7547 if(helper.NeedConfirmOnCallback(dxCallbackOwner, arg)) 7548 result.push(helper); 7549 } 7550 return result; 7551 }, 7552 FilterModifiedHelpersByUpdatePanels: function(modifiedHelpers) { 7553 var result = [ ]; 7554 var updatePanels = this.GetUpdatePanelsWaitedForUpdate(); 7555 for(var i = 0; i < updatePanels.length; i++) { 7556 var panelID = updatePanels[i].replace(/\$/g, "_"); 7557 var panel = ASPx.GetElementById(panelID); 7558 if(!panel) continue; 7559 for(var j = 0; j < modifiedHelpers.length; j++) { 7560 var helper = modifiedHelpers[j]; 7561 if(ASPx.GetIsParent(panel, helper.GetControlMainElement())) 7562 result.push(helper); 7563 } 7564 } 7565 return result; 7566 }, 7567 FilterModifiedHelpersByPostback: function(modifiedHelpers) { 7568 var result = [ ]; 7569 for(var i = 0; i < modifiedHelpers.length; i++) { 7570 var helper = modifiedHelpers[i]; 7571 if(helper.NeedConfirmOnPostback()) 7572 result.push(helper); 7573 } 7574 return result; 7575 }, 7576 RequireProcessUpdatePanelCallback: function(e) { 7577 var rManager = this.GetMSRequestManager(); 7578 if(rManager && e && e.isMSAjaxCallback) 7579 return rManager._postBackSettings.async; 7580 return false; 7581 }, 7582 GetUpdatePanelsWaitedForUpdate: function() { 7583 var rManager = this.GetMSRequestManager(); 7584 if(!rManager) return [ ]; 7585 var panelUniqueIDs = rManager._postBackSettings.panelsToUpdate || [ ]; 7586 var panelClientIDs = [ ]; 7587 for(var i = 0; i < panelUniqueIDs.length; i++) { 7588 var index = ASPx.Data.ArrayIndexOf(rManager._updatePanelIDs, panelUniqueIDs[i]); 7589 if(index >= 0) 7590 panelClientIDs.push(rManager._updatePanelClientIDs[index]); 7591 } 7592 return panelClientIDs; 7593 }, 7594 GetMSRequestManager: function() { 7595 if(window.Sys && Sys.WebForms && Sys.WebForms.PageRequestManager && Sys.WebForms.PageRequestManager.getInstance) 7596 return Sys.WebForms.PageRequestManager.getInstance(); 7597 return null; 7598 }, 7599 GetModifiedHelpers: function() { 7600 var result = [ ]; 7601 for(var key in this.helpers) { 7602 var helper = this.helpers[key]; 7603 if(helper.HasChanges()) 7604 result.push(helper); 7605 } 7606 return result; 7607 }, 7608 ResetClientChanges: function(modifiedHelpers) { 7609 for(var i = 0; i < modifiedHelpers.length; i++) 7610 modifiedHelpers[i].ResetClientChanges(); 7611 }, 7612 GetConfirmUpdateMessage: function() { 7613 if(this.confirmOnWindowUnloadLocked) return; 7614 var modifiedHelpersInfo = this.GetModifedHelpersInfo(); 7615 if(!modifiedHelpersInfo || modifiedHelpersInfo.toConfirm.length === 0) 7616 return; 7617 var helper = modifiedHelpersInfo.toConfirm[0]; 7618 return helper.GetConfirmUpdateText(); 7619 }, 7620 LockConfirmOnBeforeWindowUnload: function() { 7621 this.confirmOnWindowUnloadLocked = true; 7622 this.clearLockerTimerID = ASPx.Timer.ClearTimer(this.clearLockerTimerID); 7623 this.clearLockerTimerID = window.setTimeout(function() { 7624 this.confirmOnWindowUnloadLocked = false; 7625 }.aspxBind(this), this.clearLockerTimerDelay); 7626 }, 7627 OnWindowBeforeUnload: function(e) { 7628 var confirmMessage = this.GetConfirmUpdateMessage(); 7629 if(confirmMessage) 7630 e.returnValue = confirmMessage; 7631 this.finishPostProcessing(); 7632 return confirmMessage; 7633 }, 7634 OnWindowUnload: function(e) { 7635 if(this.confirmOnWindowUnloadLocked) return; 7636 var modifiedHelpersInfo = this.GetModifedHelpersInfo(); 7637 if(!modifiedHelpersInfo) return; 7638 this.ResetClientChanges(modifiedHelpersInfo.toReset); 7639 }, 7640 OnMouseDown: function(e) { 7641 if(ASPx.Browser.IE) 7642 this.PreventBeforeUnloadOnLinkClick(e); 7643 }, 7644 OnFocusIn: function(e) { 7645 if(ASPx.Browser.IE) 7646 this.PreventBeforeUnloadOnLinkClick(e); 7647 }, 7648 PreventBeforeUnloadOnLinkClick: function(e) { 7649 if(ASPx.GetObjectKeys(this.helpers).length == 0) 7650 return; 7651 var link = ASPx.GetParentByTagName(ASPx.Evt.GetEventSource(e), "A"); 7652 if(!link || link.dxgvLinkClickHanlderAssigned) 7653 return; 7654 var url = ASPx.Attr.GetAttribute(link, "href"); 7655 if(!url || url.indexOf("javascript:") < 0) 7656 return; 7657 ASPx.Evt.AttachEventToElement(link, "click", function(ev) { return ASPx.Evt.PreventEvent(ev); }); 7658 link.dxgvLinkClickHanlderAssigned = true; 7659 } 7660}); 7661ControlUpdateWatcher.Instance = null; 7662ControlUpdateWatcher.getInstance = function () { 7663 if (!ControlUpdateWatcher.Instance) { 7664 ControlUpdateWatcher.Instance = new ControlUpdateWatcher(); 7665 ASPx.Evt.AttachEventToElement(window, "beforeunload", function(e) { 7666 return ControlUpdateWatcher.Instance.OnWindowBeforeUnload(e); 7667 }); 7668 ASPx.Evt.AttachEventToElement(window, "unload", function(e) { 7669 ControlUpdateWatcher.Instance.OnWindowUnload(e); 7670 }); 7671 ASPx.Evt.AttachEventToDocument("mousedown", function(e) { 7672 ControlUpdateWatcher.Instance.OnMouseDown(e); 7673 }); 7674 ASPx.Evt.AttachEventToDocument("focusin", function(e) { 7675 ControlUpdateWatcher.Instance.OnFocusIn(e); 7676 }); 7677 } 7678 return ControlUpdateWatcher.Instance; 7679}; 7680var UpdateWatcherHelper = ASPx.CreateClass(null, { 7681 constructor: function(owner) { 7682 this.owner = owner; 7683 this.ownerWatcher = ControlUpdateWatcher.getInstance(); 7684 this.ownerWatcher.Add(this); 7685 }, 7686 GetName: function() { 7687 return this.owner.name; 7688 }, 7689 GetControlMainElement: function() { 7690 return this.owner.GetMainElement(); 7691 }, 7692 GetControlParentForm: function(){ 7693 return ASPx.GetParentByTagName(this.GetControlMainElement(), "FORM"); 7694 }, 7695 CanShowConfirm: function(requestOwnerID) { 7696 return true; 7697 }, 7698 HasChanges: function() { 7699 return false; 7700 }, 7701 GetConfirmUpdateText: function() { 7702 return ""; 7703 }, 7704 NeedConfirmOnCallback: function(dxCallbackOwner) { 7705 return true; 7706 }, 7707 NeedConfirmOnPostback: function() { 7708 if(ASPx.IsUploadSubmitRequest) 7709 return !ASPx.IsUploadSubmitRequest(this.GetControlParentForm(
7709)); 7710 return true; 7711 }, 7712 ResetClientChanges: function() { 7713 }, 7714 ConfirmOnCustomControlEvent: function() { 7715 var confirmMessage = this.GetConfirmUpdateText(); 7716 if(confirmMessage) 7717 return confirm(confirmMessage); 7718 return false; 7719 } 7720}); 7721var ControlCallbackHandlersQueue = ASPx.CreateClass(null, { 7722 constructor: function (owner) { 7723 this.owner = owner; 7724 this.handlerInfos = []; 7725 }, 7726 addCallbackHandler: function(handlerInfo) { 7727 this.handlerInfos.push(handlerInfo); 7728 }, 7729 executeCallbacksHandlers: function() { 7730 for(var i = 0, handlerInfo; handlerInfo = this.handlerInfos[i]; i++) 7731 handlerInfo.handler.call(this.owner, handlerInfo.result); 7732 this.handlerInfos = []; 7733 } 7734}); 7735var ControlCallbackQueueHelper = ASPx.CreateClass(null, { 7736 constructor: function (owner) { 7737 this.owner = owner; 7738 this.pendingCallbacks = []; 7739 this.receivedCallbacks = []; 7740 this.attachEvents(); 7741 }, 7742 showLoadingElements: function () { 7743 this.owner.ShowLoadingDiv(); 7744 if (this.owner.IsCallbackAnimationEnabled()) 7745 this.owner.StartBeginCallbackA
7745nimation(); 7746 else 7747 this.owner.ShowLoadingElementsInternal(); 7748 }, 7749 attachEvents: function () { 7750 this.owner.EndCallback.AddHandler(this.onEndCallback.aspxBind(this)); 7751 this.owner.CallbackError.AddHandler(this.onCallbackError.aspxBind(this)); 7752 }, 7753 detachEvents: function () { 7754 this.owner.EndCallback.RemoveHandler(this.onEndCallback); 7755 this.owner.CallbackError.RemoveHandler(this.onCallbackError); 7756 }, 7757 onCallbackError: function (owner, result) { 7758 this.sendErrorToChildControl(result); 7759 }, 7760 ignoreDuplicates: function () { 7761 return true; 7762 }, 7763 hasDuplicate: function (arg) { 7764 for (var i in this.pendingCallbacks) { 7765 if (this.pendingCallbacks.hasOwnProperty(i) && this.pendingCallbacks[i].arg == arg && this.pendingCallbacks[i].state != ASPx.callbackState.aborted) 7766 return true; 7767 } 7768 return false; 7769 }, 7770 getToken: function (halperContext, callbackInfo) { 7771 return { 7772 cancel: function () { 7773 if (callbackInfo.state == ASPx.callbackState.sent) { 7774 callbackInfo.state = ASPx.callbackState.aborted; 7775 halperContext.sendNext(); 7776 } 7777 if (callbackInfo.state == ASPx.callbackState.inTurn) 7778 ASPx.Data.ArrayRemove(halperContext.pendingCallbacks, callbackInfo); 7779 }, 7780 callbackId: -1 7781 } 7782 }, 7783 sendCallback: function (arg, handlerContext, handler, commandName) { 7784 if (this.ignoreDuplicates() && this.hasDuplicate(arg)) 7785 return false; 7786 var handlerContext = handlerContext || this.owner; 7787 var callbackInfo = { 7788 arg: arg, 7789 handlerContext: handlerContext, 7790 handler: handler || handlerContext.OnCallback, 7791 state: ASPx.callbackState.inTurn, callbackId: -1 7792 }; 7793 this.pendingCallbacks.push(callbackInfo); 7794 if (!this.hasActiveCallback()) { 7795 callbackInfo.callbackId = this.owner.CreateCallback(arg, commandName); 7796 callbackInfo.state = ASPx.callbackState.sent; 7797 } 7798 return this.getToken(this, callbackInfo); 7799 }, 7800 hasActiveCallback: function () { 7801 return this.getCallbacksInfoByState(ASPx.callbackState.sent).length > 0; 7802 }, 7803 sendNext: function () { 7804 var nextCallbackInfo = this.getCallbacksInfoByState(ASPx.callbackState.inTurn)[0]; 7805 if (nextCallbackInfo) { 7806 nextCallbackInfo.callbackId = this.owner.CreateCallback(nextCallbackInfo.arg); 7807 nextCallbackInfo.state = ASPx.callbackState.sent; 7808 return nextCallbackInfo.callbackId; 7809 } 7810 }, 7811 onEndCallback: function () { 7812 if (!this.owner.isErrorOnCallback && this.hasPendingCallbacks()) { 7813 var curCallbackId; 7814 var curCallbackInfo; 7815 var handlerContext; 7816 for (var i in this.receivedCallbacks) { 7817 if(!this.receivedCallbacks.hasOwnProperty(i)) 7818 continue; 7819 curCallbackId = this.receivedCallbacks[i]; 7820 curCallbackInfo = this.getCallbackInfoById(curCallbackId); 7821 if (curCallbackInfo.state != ASPx.callbackState.aborted) { 7822 handlerContext = curCallbackInfo.handlerContext; 7823 if (handlerContext.OnEndCallback) 7824 handlerContext.OnEndCallback(); 7825 this.sendNext(); 7826 } 7827 ASPx.Data.ArrayRemove(this.pendingCallbacks, curCallbackInfo); 7828 } 7829 ASPx.Data.ArrayClear(this.receivedCallbacks); 7830 } 7831 }, 7832 hasPendingCallbacks: function () { 7833 return this.pendingCallbacks && this.pendingCallbacks.length && this.pendingCallbacks.length > 0; 7834 }, 7835 processCallback: function (result, callbackId) { 7836 this.receivedCallbacks.push(callbackId); 7837 if (this.hasPendingCallbacks()) { 7838 var callbackInfo = this.getCallbackInfoById(callbackId); 7839 if (callbackInfo.state != ASPx.callbackState.aborted) 7840 callbackInfo.handler.call(callbackInfo.handlerContext, result); 7841 } 7842 }, 7843 getCallbackInfoById: function (id) { 7844 for (var i in this.pendingCallbacks) { 7845 if (this.pendingCallbacks.hasOwnProperty(i) && this.pendingCallbacks[i].callbackId == id) 7846 return this.pendingCallbacks[i]; 7847 } 7848 }, 7849 getCallbacksInfoByState: function (state) { 7850 var result = []; 7851 for (var i in this.pendingCallbacks) { 7852 if (this.pendingCallbacks.hasOwnProperty(i) && this.pendingCallbacks[i].state == state) 7853 result.push(this.pendingCallbacks[i]); 7854 } 7855 return result; 7856 }, 7857 sendErrorToChildControl: function (callbackObj) { 7858 if (!this.hasPendingCallbacks()) 7859 return; 7860 var callbackInfo = this.getCallbackInfoById(callbackObj.callbackId || 0); 7861 if (!callbackInfo) 7862 return; 7863 var hasChildControlHandler = (callbackInfo.handlerContext != this.owner) && callbackInfo.handlerContext.OnCallbackError; 7864 if (hasChildControlHandler) 7865 callbackInfo.handlerContext.OnCallbackError.call(callbackInfo.handlerContext, callbackObj.message, callbackObj.data); 7866 } 7867}); 7868var AccessibilityHelperBase = ASPx.CreateClass(null, { 7869 constructor: function(control) { 7870 this.control = control; 7871 this.timerID = -1; 7872 this.pronounceMessageTimeout = 500; 7873 this.activeItem = this.getItems()[0]; 7874 this.pronounceIsStarted = false; 7875 }, 7876 PronounceMessage: function(text, activeItemArgs, inactiveItemArgs, mainElementArgs, ownerMainElement) { 7877 this.timerID = ASPx.Timer.ClearTimer(this.timerID); 7878 this.pronounceIsStarted = true; 7879 this.timerID = window.setTimeout(function() { 7880 this.PronounceMessageCore(text, activeItemArgs, inactiveItemArgs, mainElementArgs, ownerMainElement); 7881 }.aspxBind(this), this.getPronounceTimeout()); 7882 }, 7883 PronounceMessageCore: function(text, activeItemArgs, inactiveItemArgs, mainElementArgs, ownerMainElement) { 7884 if(!this.getItems()) 7885 return; 7886 this.toogleItem(); 7887 var mainElement = this.getMainElement(); 7888 var activeItem = this.getItem(true); 7889 var inactiveItem = this.getItem(); 7890 if(ASPx.Attr.GetAttribute(mainElement, "role") != "application") 7891 mainElementArgs = this.addArguments(mainElementArgs, { "aria-activedescendant" : activeItem.id }); 7892 var messageAttrObj = {}; 7893 var activeItemRole = ASPx.Attr.GetAttribute(activeItem, "role"); 7894 var attrName = activeItemRole == "combobox" ? "aria-label" : "innerHtml"; 7895 messageAttrObj[attrName] = ASPx.Str.EncodeHtml(text); 7896 activeItemArgs = this.addArguments(activeItemArgs, messageAttrObj); 7897 messageAttrObj[attrName] = ""; 7898 inactiveItemArgs = this.addArguments(inactiveItemArgs, messageAttrObj); 7899 var errorTextElement = null;
7900 if(this.control.GetErrorCell()) { 7901 errorTextElement = this.getAriaExplanatoryTextManager().GetErrorTextElement(); 7902 activeItemArgs = this.addArguments(activeItemArgs, {"aria-invalid" : !this.control.isValid ? "true" : "" }); 7903 mainElementArgs = this.addArguments(mainElementArgs, { "aria-invalid" : "" }); 7904 inactiveItemArgs = this.addArguments(inactiveItemArgs, { "aria-invalid" : "" }); 7905 } 7906 this.changeActivityAttributes(activeItem, activeItemArgs); 7907 if(errorTextElement) { 7908 this.getAriaExplanatoryTextManager().SetOrRemoveText([activeItem], errorTextElement, !this.control.isValid, false, true); 7909 this.getAriaExplanatoryTextManager().SetOrRemoveText([mainElement, inactiveItem], errorTextElement, false, false, false); 7910 } 7911 this.changeActivityAttributes(mainElement, mainElementArgs); 7912 if(!!ownerMainElement && ASPx.Attr.GetAttribute(ownerMainElement, "role") != "application") 7913 this.changeActivityAttributes(ownerMainElement, { "aria-activedescendant": activeItem.id }); 7914 this.changeActivityAttributes(inactiveItem, inactiveItemArgs); 7915 this.pronounceIsStarted = false; 7916 }, 7917 GetActiveElement: function(inputIsMainElement) { 7918 if(this.pronounceIsStarted) return null; 7919 var mainElement = inputIsMainElement ? this.control.GetInputElement() : this.getMainElement(); 7920 var activeElementId = ASPx.Attr.GetAttribute(mainElement, 'aria-activedescendant'); 7921 return activeElementId ? ASPx.GetElementById(activeElementId) : mainElement; 7922 }, 7923 getMainElement: function() { 7924 if(!ASPx.IsExistsElement(this.mainElement)) 7925 this.mainElement = this.control.GetAccessibilityAssistantElement(); 7926 return this.mainElement; 7927 }, 7928 getItems: function() { 7929 if(!ASPx.IsExistsElement(this.items)) 7930 this.items = ASPx.GetChildElementNodes(this.getMainElement()); 7931 return this.items; 7932 }, 7933 getItem: function(isActive) { 7934 if(isActive) 7935 return this.activeItem; 7936 var items = this.getItems(); 7937 return items[0] === this.activeItem ? items[1] : items[0]; 7938 }, 7939 getAriaExplanatoryTextManager: function() { return this.control.ariaExplanatoryTextManager; }, 7940 getPronounceTimeout: function() { return this.pronounceMessageTimeout; }, 7941 toogleItem: function() { 7942 this.activeItem = this.getItem(); 7943 }, 7944 addArguments: function(targetArgs, newArgs) { 7945 if(!targetArgs) targetArgs = { }; 7946 for(var key in newArgs) { 7947 if(!targetArgs.hasOwnProperty(key)) 7948 targetArgs[key] = newArgs[key]; 7949 } 7950 return targetArgs; 7951 }, 7952 changeActivityAttributes: function(element, args) { 7953 if(!element) 7954 return; 7955 for(var key in args) { 7956 var value = args[key]; 7957 if(key == "innerHtml") 7958 ASPx.SetInnerHtml(element, value); 7959 else { 7960 var action = value !== "" ? ASPx.Attr.SetAttribute : ASPx.Attr.RemoveAttribute; 7961 action(element, key, value); 7962 } 7963 } 7964 } 7965}); 7966var AccessibilityPronouncer = ASPx.CreateClass(null, { 7967 constructor: function() { 7968 this.pronouncerId = "dxPronouncer"; 7969 this.initialized = false; 7970 this.focusableMessageElement = null; 7971 this.messageElement = null; 7972 this.pronouncers = { 7973 live: new AccessibilityLivePronouncer(this), 7974 descendant: new AccessibilityDescendantPronouncer(this) 7975 } 7976 }, 7977 Pronounce: function(args, type) { 7978 this.pronouncers[type].Pronounce(args); 7979 }, 7980 EnsureInitialize: function() { 7981 if(!this.initialized) 7982 this.initialize(); 7983 }, 7984 RemoveState: function() { 7985 for(var pronouncer in this.pronouncers) 7986 pronouncer.RemoveState(); 7987 }, 7988 RestoreControlState: function(type, mainElement) { 7989 this.pronouncers[type].RestoreControlState(mainElement); 7990 }, 7991 RestoreElementsState: function(type, elements) { 7992 this.pronouncers[type].RestoreElementsState(elements); 7993 }, 7994 RestoreElementState: function(type, element) { 7995 this.pronouncers[type].RestoreElementState(element); 7996 }, 7997 initialize: function() { 7998 this.createFocusableMessageElement(); 7999 this.createMessageElement(); 8000 this.prepareFocusableMessageElement(); 8001 this.setAttributesForKeyboardNavigation(); 8002 this.initialized = true; 8003 }, 8004 createFocusableMessageElement: function() { 8005 var focusableMessageElement = document.createElement("DIV"); 8006 document.body.appendChild(focusableMessageElement); 8007 this.focusableMessageElement = focusableMessageElement; 8008 }, 8009 prepareFocusableMessageElement: function() { 8010 this.focusableMessageElement.className = "dxAIFME"; 8011 this.preventPageScrollingOnSpace(); 8012 }, 8013 preventPageScrollingOnSpace: function() { 8014 ASPx.Evt.AttachEventToElement(this.focusableMessageElement, 'keydown', function (evt) { 8015 if(ASPx.Evt.GetKeyCode(evt) == ASPx.Key.Space) 8016 return ASPx.Evt.PreventEventAndBubble(evt); 8017 }); 8018 }, 8019 setAttributesForKeyboardNavigation: function() { 8020 ASPx.Attr.Aria.SetApplicationRole(this.focusableMessageElement); 8021 ASPx.Attr.Aria.SetSilence(this.focusableMessageElement); 8022 }, 8023 createMessageElement: function() { 8024 var messageElement = document.createElement("DIV"); 8025 messageElement.id = this.pronouncerId; 8026 ASPx.Attr.SetAttribute(messageElement, "role", "note"); 8027 this.focusableMessageElement.appendChild(messageElement); 8028 this.messageElement = messageElement; 8029 }, 8030 getMessage: function(messagePartsArg) { 8031 var messageParts = messagePartsArg.filter(function(x) { return ASPx.IsExists(x); }); 8032 return messageParts.join(", "); 8033 } 8034}); 8035var AccessibilityPronouncerBase = ASPx.CreateClass(null, { 8036 constructor: function() { 8037 this.state = { }; 8038 }, 8039 Pronounce: function(args) { 8040 var messageElement = this.getMessageElement(); 8041 ASPx.Attr.Aria.SetOrRemoveLabel(messageElement); 8042 ASPx.SetInnerHtml(messageElement, ""); 8043 this.PronounceCore(args); 8044 }, 8045 PronounceCore: function(args) { }, 8046 SaveElementState: function(element) {
8047 if(this.state[element.id]) 8048 return; 8049 this.state[element.id] = { 8050 element: element, 8051 descendant: ASPx.Attr.GetAttribute(element, ASPx.Attr.Aria.descendant) 8052 } 8053 }, 8054 RemoveState: function() { 8055 this.state = { }; 8056 }, 8057 RestoreControlState: function(mainElement) { 8058 for(var elementInfo in this.state) { 8059 var element = this.state[elementInfo].element; 8060 if(!mainElement || ASPx.GetIsParent(mainElement, element)) 8061 this.RestoreElementState(element); 8062 } 8063 }, 8064 RestoreElementsState: function(elements) { 8065 for(var i = 0; i < elements.length; i++) 8066 this.RestoreElementState(elements[i]); 8067 }, 8068 RestoreElementState: function(element) { 8069 var elementState = this.state[element.id]; 8070 if(!elementState) 8071 return; 8072 var messageElement = this.getMessageElement(); 8073 ASPx.Attr.Aria.SetOrRemoveDescendant(element, elementState.descendant); 8074 delete this.state[element.id]; 8075 }, 8076 getMessage: function(args) { 8077 return ASPx.AccessibilityPronouncer.getMessage(args.messageParts); 8078 }, 8079 getMessageElement: function() { 8080 return ASPx.AccessibilityPronouncer.messageElement; 8081 }, 8082 getFocusableMessageElement: function() { 8083 return ASPx.AccessibilityPronouncer.focusableMessageElement; 8084 } 8085}); 8086var AccessibilityLivePronouncer = ASPx.CreateClass(AccessibilityPronouncerBase, { 8087 constructor: function() { 8088 this.constructor.prototype.constructor.call(this); 8089 }, 8090 PronounceCore: function(args) { 8091 var message = this.getMessage(args); 8092 var messageElement = this.getMessageElement(); 8093 ASPx.Attr.SetAttribute(this.getFocusableMessageElement(), "aria-live", "assertive"); 8094 ASPx.Attr.Aria.SetAtomic(this.getFocusableMessageElement(), "true"); 8095 ASPx.SetInnerHtml(messageElement, ASPx.Str.EncodeHtml(message)); 8096 } 8097}); 8098var AccessibilityDescendantPronouncer = ASPx.CreateClass(AccessibilityPronouncerBase, { 8099 constructor: function() { 8100 this.constructor.prototype.constructor.call(this); 8101 }, 8102 PronounceCore: function(args) { 8103 var message = this.getMessage(args); 8104 var activeElement = ASPx.GetActiveElement(); 8105 var messageElement = this.getMessageElement(); 8106 this.SaveElementState(activeElement); 8107 ASPx.Attr.RemoveAttribute(this.getFocusableMessageElement(), "aria-live"); 8108 ASPx.Attr.RemoveAttribute(this.getFocusableMessageElement(), "aria-atomic"); 8109 ASPx.Attr.Aria.SetOrRemoveLabel(messageElement, message); 8110 ASPx.Attr.Aria.SetOrRemoveDescendant(activeElement, messageElement.id); 8111 } 8112}); 8113ASPx.AccessibilityPronouncerType = { 8114 live: "live", 8115 descendant: "descendant" 8116}; 8117ASPx.AccessibilityPronouncer = new AccessibilityPronouncer(); 8118var RestoreFocusHelper = ASPx.CreateClass(null, { 8119 constructor: function() { 8120 this.excludedIDs = [ "DXCBtn" ]; 8121 this.pronouncerType = ASPx.AccessibilityPronouncerType.live; 8122 this.callbackQueue = []; 8123 this.Initialize(); 8124 }, 8125 Initialize: function() { 8126 var that = this; 8127 ASPx.Evt.AttachEventToDocumentCore("DOMContentLoaded", function() { 8128 ASPxClientControl.GetControlCollection().BeginCallback.AddHandler(that.OnBeginCallback, that); 8129 ASPxClientControl.GetControlCollection().EndCallback.AddHandler(that.OnEndCallback, that); 8130 }); 8131 }, 8132 OnBeginCallback: function(s, e) { 8133 var control = e.control; 8134 if(!control.allowRestoreFocusOnCallbacks()) 8135 return; 8136 control.cpFocusTreeLine = this.getFocusTreeLine(control); 8137 var controlHasCallbackTreeLine = this.callbackQueueContainsTreeLine(control); 8138 this.pushTreeLineInfoIntoCallbackQueue(control); 8139 if(control.cpFocusTreeLine && !controlHasCallbackTreeLine) 8140 control.SendMessageToAssistiveTechnology(this.getDefaultCallbackMessage()); 8141 }, 8142 OnEndCallback: function(s, e) { 8143 var control = e.control; 8144 if(!control.allowRestoreFocusOnCallbacks()) 8145 return; 8146 var treeLineInfo = this.shiftTreeLineInfoFromCallbackQueue(control); 8147 if(treeLineInfo.queueLength == 0) { 8148 if(!control.cpFocusTreeLine && treeLineInfo.treeLine) 8149 control.cpFocusTreeLine = treeLineInfo.treeLine; 8150 var focusElement = this.findFocusElement(control); 8151 if(!this.handleActivePopupWindow(focusElement)) 8152 ASPx.AccessibilityUtils.SetFocusAccessible(focusElement); 8153 delete control.cpFocusTreeLine; 8154 } 8155 }, 8156 pushTreeLineInfoIntoCallbackQueue: function(control) { 8157 var controlTreeLine = control.cpFocusTreeLine ? control.cpFocusTreeLine.slice(0) : null; 8158 if(!this.callbackQueue[control.name]) 8159 this.callbackQueue[control.name] = []; 8160 this.callbackQueue[control.name].push(controlTreeLine); 8161 }, 8162 shiftTreeLineInfoFromCallbackQueue: function(control) { 8163 var treeLineInfo = { queueLength: 0, treeLine: null }; 8164 var treeLines = this.callbackQueue[control.name]; 8165 if(treeLines && treeLines.length > 0) { 8166 treeLineInfo.treeLine = treeLines.shift(); 8167 var linesCount = treeLines.length; 8168 treeLineInfo.queueLength = linesCount; 8169 if(linesCount > 0 && !treeLines[0] && treeLineInfo.treeLine) 8170 treeLines[0] = treeLineInfo.treeLine.slice(0); 8171 } 8172 return treeLineInfo; 8173 }, 8174 callbackQueueContainsTreeLine: function(control) { 8175 var treeLines = this.callbackQueue[control.name]; 8176 if(!treeLines || treeLines.length == 0) 8177 return false; 8178 if(treeLines[treeLines.length - 1]) 8179 return true; 8180 return false; 8181 }, 8182 getDefaultCallbackMessage: function() { 8183 return ASPx.AccessibilitySR.DefaultCallbackMessage; 8184 }, 8185 handleActivePopupWindow: function(focusElement) { 8186 if(!ASPx.GetPopupControlCollection) 8187 return false; 8188 var activePopupWindow = ASPx.GetPopupControlCollection().GetCurrentActiveWindowElement(); 8189 if(activePopupWindow) { 8190 var popupInfo = ASPx.GetPopupControlCollection().GetPopupWindowFromID(activePopupWindow.id); 8191 if(popupInfo.popupControl.setFocusOnCallback && !popupInfo.popupControl.accessibleFocusElement) { 8192 popupInfo.popupControl.accessibleFocusElement = focusElement; 8193 return true; 8194 } 8195 } 8196 return false; 8197 }, 8198 getFocusTreeLine: function(control) { 8199 var element = document.activeElement; 8200 var mainElement = control.GetMainElement(); 8201 if(!ASPx.GetIsParent(mainElement, element)) { 8202 var treeInfo = this.findFocusedControlElement(mainElement, element); 8203 element = treeInfo.focusElement; 8204 mainElement = treeInfo.rootElement; 8205 } 8206 return this.getTreeLineCore(mainElement, element); 8207 }, 8208 getTreeLineCore: function(mainElement, element) { 8209 if(!element) return null; 8210 treeLine = [ ]; 8211 while(element) { 8212 treeLine.push({
8213 id: element.id, 8214 tagName: element.tagName, 8215 index: ASPx.Data.ArrayIndexOf(element.parentNode.childNodes, element) 8216 }); 8217 if(element === mainElement || element === document.body) 8218 break; 8219 element = element.parentNode; 8220 } 8221 return treeLine; 8222 }, 8223 findFocusedControlElement: function(mainElement, activeElement) { 8224 var element = null; 8225 var parentElement = mainElement; 8226 var focusedEditor = ASPx.IsExists(ASPx.GetFocusedEditor) ? ASPx.GetFocusedEditor() : null; 8227 if(focusedEditor && ASPx.GetIsParent(mainElement, focusedEditor.GetMainElement())) 8228 element = focusedEditor.GetFocusableInputElement(); 8229 else { 8230 if(mainElement && activeElement) { 8231 var mainControl = ASPx.GetClientControlByElementID(mainElement.id); 8232 var parentControls = ASPx.GetParentClientControls(activeElement.id); 8233 for(var i = parentControls.length - 1; i > -1; i--) { 8234 if(mainControl.name == parentControls[i].name) { 8235 element = activeElement; 8236 var rootIndex = i > 0 ? i - 1 : i; 8237 parentElement = parentControls[rootIndex].GetMainElement(); 8238 if(!parentElement && parentControls[rootIndex].GetCurrentWindowElement) 8239 parentElement = parentControls[rootIndex].GetCurrentWindowElement(); 8240 break; 8241 } 8242 } 8243 } 8244 } 8245 return { focusElement: element, rootElement: parentElement }; 8246 }, 8247 findFocusElement: function(control) { 8248 if(!control.cpFocusTreeLine) 8249 return; 8250 var treeLine = control.cpFocusTreeLine.slice(0); 8251 var focusElementParent = this.findFocusElementParentById(treeLine); 8252 if(!focusElementParent) 8253 return; 8254 return this.findFocusElementFromDOMTree(treeLine, focusElementParent); 8255 }, 8256 findFocusElementParentById: function(treeLine) { 8257 for(var i = 0; i < treeLine.length; i++) { 8258 var id = treeLine[i].id; 8259 if(!this.isValidId(id)) 8260 continue; 8261 var element = document.getElementById(id); 8262 if(element) { 8263 treeLine.splice(i, treeLine.length - i); 8264 treeLine.reverse(); 8265 return element; 8266 } 8267 } 8268 return null; 8269 }, 8270 findFocusElementFromDOMTree: function(treeLine, focusElementParent) { 8271 var element = focusElementParent; 8272 for(var i = 0; i < treeLine.length; i++) { 8273 var info = treeLine[i]; 8274 if(info.index >= element.childNodes.length) { 8275 element = element.childNodes.length > 0 ? element.childNodes[element.childNodes.length - 1] : null; 8276 return this.findNeighbourFocusElement(element, focusElementParent); 8277 } 8278 var child = element.childNodes[info.index]; 8279 if(child.tagName !== info.tagName) 8280 return this.findNeighbourFocusElement(child, focusElementParent); 8281 element = child; 8282 } 8283 return element; 8284 }, 8285 findNeighbourFocusElement: function(element, focusElementParent) { 8286 if(!element || !element.parentNode) return null; 8287 var neighbours = element.parentNode.childNodes; 8288 var indices = this.calcLeftRightIndices(ASPx.Data.ArrayIndexOf(neighbours, element), neighbours.length); 8289 for(var i = 0; i < indices.length; i++) { 8290 var index = indices[i]; 8291 var actionElement = ASPx.FindFirstChildActionElement(neighbours[index]); 8292 if(actionElement) 8293 return actionElement; 8294 } 8295 if(element === focusElementParent) 8296 return null; 8297 return this.findNeighbourFocusElement(element.parentNode, focusElementParent); 8298 }, 8299 calcLeftRightIndices: function(startIndex, count) { 8300 var indices = [ ]; 8301 var incSides = [ 0, 0 ]; 8302 var index = startIndex; 8303 for(var i = 0; i < count; i++) { 8304 indices.push(index); 8305 var even = i % 2 === 0; 8306 var nextIndex = this.calcNextIndex(startIndex, count, incSides, even); 8307 if(nextIndex < 0) 8308 nextIndex = this.calcNextIndex(startIndex, count, incSides, !even); 8309 index = nextIndex; 8310 } 8311 return indices; 8312 }, 8313 calcNextIndex: function(startIndex, count, incSides, even) { 8314 var sideIndex = even ? 0 : 1; 8315 var inc = incSides[sideIndex]; 8316 inc += even ? -1 : 1; 8317 var nextIndex = startIndex + inc; 8318 if(nextIndex >= 0 && nextIndex < count) { 8319 incSides[sideIndex] = inc; 8320 return nextIndex; 8321 } 8322 return -1; 8323 }, 8324 isValidId: function(id) { 8325 return id && !this.isExcludedId(id); 8326 }, 8327 isExcludedId: function(id) { 8328 var result = false; 8329 for(var i = 0; i < this.excludedIDs.length; i++) { 8330 if(id.indexOf(this.excludedIDs[i]) > -1) { 8331 result = true; 8332 break; 8333 } 8334 } 8335 return result; 8336 } 8337}); 8338var EventStorage = ASPx.CreateClass(null, { 8339 constructor: function() { 8340 this.bag = { }; 8341 }, 8342 Save: function(e, data, overwrite) { 8343 var key = this.getEventKey(e); 8344 if(this.bag.hasOwnProperty(key) && !overwrite) 8345 return; 8346 this.bag[key] = data; 8347 window.setTimeout(function() { delete this.bag[key]; }.aspxBind(this), 100); 8348 }, 8349 Load: function(e) { 8350 var key = this.getEventKey(e); 8351 return this.bag[key]; 8352 }, 8353 getEventKey: function(e) { 8354 if(ASPx.IsExists(e.timeStamp)) 8355 return e.timeStamp.toString(); 8356 var eventSource = ASPx.Evt.GetEventSource(e); 8357 var type = e.type.toString(); 8358 return eventSource ? type + "_" + eventSource.uniqueID.toString() : type; 8359 } 8360}); 8361ASPx.RestoreFocusHelper = new RestoreFocusHelper(); 8362EventStorage.Instance = null; 8363EventStorage.getInstance = function() { 8364 if(!EventStorage.Instance) 8365 EventStorage.Instance = new EventStorage(); 8366 return EventStorage.Instance; 8367}; 8368var GetGlobalObject = function(objectName) { 8369 var fields = objectName.split('.'); 8370 var obj = window[fields[0]]; 8371 for(var i = 1;
8371 obj && i < fields.length; i++) { 8372 obj = obj[fields[i]]; 8373 } 8374 return obj; 8375} 8376var GetExternalScriptProcessor = function() { 8377 return ASPx.ExternalScriptProcessor ? ASPx.ExternalScriptProcessor.getInstance() : null; 8378} 8379var ThemesWithRipple = ['Material']; 8380var RippleHelper = { 8381 rippleTargetClassName: "dxRippleTarget", 8382 rippleTargetExternalClassName: "dxRippleTargetExternal", 8383 rippleContainerClassName: "dxRippleContainer", 8384 rippleClassName: "dxRipple", 8385 touchRadius: -1, 8386 isMobileExternalRipple: null, 8387 zoom: 1, 8388 Init: function() { 8389 if(this.getIsRippleFunctionalityEnabled()) { 8390 setTimeout(function() { 8391 this.calcTouchRadius(); 8392 }.aspxBind(this), 0); 8393 } 8394 }, 8395 calcTouchRadius: function() { 8396 var testBlock = document.createElement("DIV"); 8397 ASPx.SetStyles(testBlock, { 8398 height: "1in", 8399 width: "1in", 8400 left: "-100%", 8401 top: "-100%", 8402 position: "absolute" 8403 }); 8404 document.body.appendChild(testBlock); 8405 this.touchRadius = (1.8 / 2.54) * Math.max(testBlock.offsetWidth, testBlock.offsetHeight); 8406 document.body.removeChild(testBlock); 8407 }, 8408 isRippleFunctionalityEnabled: null, 8409 checkRippleFunctionality: function() { 8410 if(ASPx.Browser.Safari && ASPx.Browser.Version <= 5.1) 8411 return false; 8412 try { 8413 if(document.styleSheets) { 8414 for(var i = 0; i < document.styleSheets.length; i++) { 8415 var styleSheet = document.styleSheets[i]; 8416 if(styleSheet.cssRules) { 8417 for(var j = 0; j < styleSheet.cssRules.length; j++) 8418 for(var k = 0; k < ThemesWithRipple.length; k++) 8419 if(styleSheet.cssRules[j].cssText.indexOf(ThemesWithRipple[k]) !== -1) 8420 return true; 8421 } 8422 } 8423 } 8424 } 8425 catch(exc) { } 8426 return false; 8427 }, 8428 ReInit: function() { 8429 this.isRippleFunctionalityEnabled = null; 8430 this.Init(); 8431 }, 8432 onDocumentMouseDown: function(evt) { 8433 if(RippleHelper.getIsRippleFunctionalityEnabled()) 8434 RippleHelper.processMouseDown(evt); 8435 }, 8436 getIsRippleFunctionalityEnabled: function() { 8437 if(!ASPx.IsExists(this.isRippleFunctionalityEnabled)) 8438 this.isRippleFunctionalityEnabled = this.checkRippleFunctionality(); 8439 return this.isRippleFunctionalityEnabled; 8440 }, 8441 createTargetInfo: function(target) { 8442 return { 8443 x: ASPx.GetAbsoluteX(target), 8444 y: ASPx.GetAbsoluteY(target), 8445 width: target.offsetWidth, 8446 height: target.offsetHeight, 8447 classNames: ASPx.GetClassNameList(target), 8448 getTarget: function() { return target; }, 8449 getRect: function() { return {x: this.x, y: this.y, width: this.width, height: this.height }; } 8450 }; 8451 }, 8452 createEventInfo: function(evt) { 8453 return { x: this.getEventX(evt), y: this.getEventY(evt) }; 8454 }, 8455 processMouseDown: function(evt) { 8456 var evtSource = ASPx.Evt.GetEventSource(evt); 8457 var rippleTarget = this.getRippleTargetElement(evtSource); 8458 if(this.needToProcessRipple(rippleTarget, evtSource)) 8459 this.processRipple(this.createTargetInfo(rippleTarget), this.createEventInfo(evt)); 8460 }, 8461 getRippleTargetElement: function(evtSource) { 8462 if(this.hasRippleMarker(evtSource)) 8463 return evtSource; 8464 if(evtSource.tagName && evtSource.tagName.toLowerCase() == "input" && ASPx.ElementContainsCssClass(evtSource, "dxTI")) { 8465 var elements = ASPx.GetChildElementNodesByPredicate(evtSource.parentNode.parentNode, function(element) { 8466 return this.hasRippleMarker(element); 8467 }.aspxBind(this)); 8468 return elements && elements[0]; 8469 } 8470 return ASPx.GetParent(evtSource, function(element) { 8471 return this.hasRippleMarker(element); 8472 }.aspxBind(this)); 8473 }, 8474 hasRippleMarker: function(element) { 8475 if(!ASPx.IsExistsElement(element)) 8476 return false; 8477 var computedStyles = window.getComputedStyle(element, ":before"); 8478 if(ASPx.IsExists(computedStyles)) { 8479 var content = computedStyles.getPropertyValue("content"); 8480 if(content.indexOf(this.rippleTargetExternalClassName) > -1) { 8481 ASPx.AddClassNameToElement(element, this.rippleTargetExternalClassName); 8482 return true; 8483 } 8484 return content.indexOf(this.rippleTargetClassName) > -1; 8485 } 8486 return false; 8487 }, 8488 needToProcessRipple: function(rippleTarget, evtSource) { 8489 if(!rippleTarget || !ASPx.AnimationUtils) 8490 return false; 8491 var isClearButton = ASPx.ElementContainsCssClass(rippleTarget, "dxeButton") && rippleTarget.id && rippleTarget.id.indexOf("B-100") !== -1; 8492 var isEmptyCalendarDay = ASPx.ElementContainsCssClass(rippleTarget, "dxeCalendarDay") && ASPx.Str.Trim(rippleTarget.textContent) == ""; 8493 var rippleIsForbidden = isClearButton || isEmptyCalendarDay || ASPx.GetParentByPartialClassName(rippleTarget, "Disabled") || 8494 ASPx.ElementContainsCssClass(rippleTarget, "dxgvBatchEditCell") || ASPx.ElementContainsCssClass(rippleTarget, "dxcvEditForm") || 8495 ASPx.GetParentByPartialClassName(evtSource, "dxcvFocusedCell"); 8496 return !rippleIsForbidden; 8497 }, 8498 hasBothOverflow: function(style) { 8499 return style.overflow == "scroll" || style.overflow == "auto" || style.overflow == "hidden"; 8500 }, 8501 hasOverflowX: function(style) { 8502 return style.overflowX == "scroll" || style.overflowX == "auto" || style.overflowX == "hidden"; 8503 }, 8504 hasOverflowY: function(style) { 8505 return style.overflowY == "scroll" || style.overflowY == "auto" || style.overflowY == "hidden"; 8506 }, 8507 getExternalRippleContainerSize: function(targetRect) { 8508 if(ASPx.Browser.MobileUI) { 8509 var origTouchRadius = this.getOriginTouchRadius(); 8510 if(origTouchRadius < targetRect.width || origTouchRadius < targetRect.height) 8511 origTouchRadius = Math.max(targetRect.width, targetRect.height); 8512 return {x: targetRect.x + (targetRect.width - origTouchRadius) / 2, y: targetRect.y + (targetRect.height - origTouchRadius) / 2, width: origTouchRadius, height: origTouchRadius }; 8513 } 8514 var result = { x: 0, y: 0, width: 0, height: 0 }; 8515 var diff = targetRect.width - targetRect.height; 8516 if(diff > 0) { 8517 result.x = targetRect.x; 8518 result.y = targetRect.y - diff / 2; 8519 result.width = targetRect.width; 8520 result.height = targetRect.width; 8521 } else { 8522 result.x = targetRect.x + diff / 2; 8523 result.y = targetRect.y; 8524 result.width = targetRect.height; 8525 result.height = targetRect.height; 8526 } 8527 return result; 8528 }, 8529 getInternalContainerSize: function(targetInfo) { 8530 var parentWithOverflow = RippleHelper.getParentWithOverflow(targetInfo.getTarget()); 8531 if(!ASPx.IsExists(parentWithOverflow)) 8532 return targetInfo; 8533 var parentWithOverflowStyle = ASPx.GetCurrentStyle(parentWithOverflow); 8534 var bothOverflow = this.hasBothOverflow(parentWithOverflowStyle); 8535 var overflowX = this.hasOverflowX(parentWithOverflowStyle); 8536 var overflowY = this.hasOverflowY(parentWithOverflowStyle); 8537 var parentRect = { 8538 x: ASPx.GetAbsoluteX(parentWithOverflow), 8539 y: ASPx.GetAbsoluteY(parentWithOverflow), 8540 width: parentWithOverflow.offsetWidth, 8541 height: parentWithOverflow.offsetHeight 8542 }; 8543 return this.getInternalContainerSizeCore(targetInfo, parentRect, bothOverflow, overflowX, overflowY); 8544 }, 8545 getInternalContainerSizeCore: function(targetRect, parentRect, bothOverflow, overflowX, overflowY) { 8546 var result = {}; 8547 ASPx.Data.MergeHashTables(result, targetRect); 8548 if(bothOverflow || overflowX) { 8549 result.x = targetRect.x < parentRect.x ? parentRect.x : targetRect.x; 8550 if(targetRect.x + targetRect.width > parentRect.x + parentRect.width) 8551 result.width = parentRect.x + parentRect.width - targetRect.x; 8552 if(parentRect.x > targetRect.x) 8553 result.width -= (parentRect.x - targetRect.x); 8554 } 8555 if(bothOverflow || overflowY) { 8556 result.y = targetRect.y < parentRect.y ? parentRect.y : targetRect.y; 8557 if(targetRect.y + targetRect.height > parentRect.y + parentRect.height) 8558 result.height = parentRect.y + parentRect.height - targetRect.y; 8559 if(parentRect.y > targetRect.y) 8560 result.height -= (parentRect.y - targetRect.y); 8561 } 8562 return result; 8563 }, 8564 calculateRippleContainerSize: function(targetInfo, isExternalRipple) { 8565 return isExternalRipple ? this.getExternalRippleContainerSize(targetInfo) : this.getInternalContainerSize(targetInfo); 8566 }, 8567 getParentWithOverflow: function(rippleTarget) { 8568 var result = ASPx.GetParent(rippleTarget, function(element) { 8569 var elementStyle = ASPx.GetCurrentStyle(element); 8570 return this.hasBothOverflow(elementStyle) || this.hasOverflowX(elementStyle) || this.hasOverflowY(elementStyle); 8571 }.aspxBind(this)); 8572 return result; 8573 }, 8574 getDuration: function(targetInfo) { 8575 return this.IsExternalRipple(targetInfo) || ASPx.Browser.MobileUI ? 650 : 450; 8576 }, 8577 createRippleTransition: function(container, rippleElement, radius, targetInfo) { 8578 var rippleSize = 2 * radius; 8579 var transitionProperties = { 8580 width: { from: 0, to: rippleSize, transition: ASPx.AnimationConstants.Transitions.RIPPLE, propName: "width", unit: "px" }, 8581 height: { from: 0, to: rippleSize, transition: ASPx.AnimationConstants.Transitions.RIPPLE, propName: "height", unit: "px" }, 8582 marginLeft: { from: 0, to: -rippleSize / 2, transition: ASPx.AnimationConstants.Transitions.RIPPLE, propName: "marginLeft", unit: "px" }, 8583 marginTop: { from: 0, to: -rippleSize / 2, transition: ASPx.AnimationConstants.Transitions.RIPPLE, propName: "marginTop", unit: "px" }, 8584 opacity: { from: 1, to: 0.05, transition: ASPx.AnimationConstants.Transitions.RIPPLE, propName: "o
8584pacity", unit: "%" } 8585 }; 8586 var rippleTransition = ASPx.AnimationUtils.createMultipleAnimationTransition(rippleElement, { 8587 transition: ASPx.AnimationConstants.Transitions.RIPPLE, 8588 duration: this.getDuration(targetInfo), 8589 onComplete: function(element) { 8590 ASPx.RemoveElement(container); 8591 } 8592 }); 8593 rippleTransition.Start(transitionProperties); 8594 }, 8595 calculateRadius: function(isExternalRipple, posX, posY, containerRect) { 8596 var radius = -1; 8597 if(isExternalRipple) { 8598 if(ASPx.Browser.MobileUI) 8599 radius = this.getOriginTouchRadius() / 2; 8600 else 8601 radius = Math.max(containerRect.height, containerRect.width); 8602 } else { 8603 var width1 = posX - containerRect.x; 8604 var width2 = containerRect.width - width1; 8605 var height1 = posY - containerRect.y; 8606 var height2 = containerRect.height - height1; 8607 var rippleWidth = Math.max(width1, width2); 8608 var rippleHeight = Math.max(height1, height2); 8609 radius = Math.sqrt(Math.pow(rippleHeight, 2) + Math.pow(rippleWidth, 2)); 8610 } 8611 return radius; 8612 }, 8613 createRippleElement: function(container, rippleCenter) { 8614 var rippleElement = document.createElement("DIV"); 8615 rippleElement.className = this.rippleClassName; 8616 container.appendChild(rippleElement); 8617 ASPxClientUtils.SetAbsoluteX(rippleElement, rippleCenter.x); 8618 ASPxClientUtils.SetAbsoluteY(rippleElement, rippleCenter.y); 8619 return rippleElement; 8620 }, 8621 processRipple: function(targetInfo, eventInfo) { 8622 this.initRippleProcess(); 8623 var isExternalRipple = this.IsExternalRipple(targetInfo); 8624 var rippleCenter = this.getRippleCenter(targetInfo.getRect(), eventInfo, isExternalRipple); 8625 var container = this.createRippleContainer(targetInfo, isExternalRipple); 8626 var rippleElement = this.createRippleElement(container, rippleCenter); 8627 var radius = this.calculateRadius(isExternalRipple, rippleCenter.x, rippleCenter.y, this.getElementRect(container)); 8628 this.createRippleTransition(container, rippleElement, radius, targetInfo); 8629 }, 8630 initRippleProcess: function() { 8631 this.isMobileExternalRipple = null; 8632 this.zoom = screen.width / window.innerWidth; 8633 }, 8634 getRippleCenter: function(targetInfo, eventInfo, isExternalRipple) { 8635 var posX = 0; 8636 var posY = 0; 8637 if(isExternalRipple) { 8638 posX = targetInfo.x + targetInfo.width / 2; 8639 posY = targetInfo.y + targetInfo.height / 2; 8640 } else { 8641 posX = eventInfo.x; 8642 posY = eventInfo.y; 8643 } 8644 return {x: posX, y: posY}; 8645 }, 8646 createRippleContainer: function(targetInfo, isExternalRipple) { 8647 var containerParent = targetInfo.getTarget(); 8648 if(!containerParent) 8649 return; 8650 var containerTagName = containerParent.tagName == "TR" ? "TD" : "DIV"; 8651 var container = document.createElement(containerTagName); 8652 container.className = this.rippleContainerClassName; 8653 if(containerParent.parentNode && containerParent.tagName == "IMG") 8654 containerParent = containerParent.parentNode; 8655 containerParent.appendChild(container); 8656 if(isExternalRipple) 8657 container.style.borderRadius = "50%"; 8658 var containerRect = this.calculateRippleContainerSize(targetInfo, isExternalRipple); 8659 this.assignContainerSettings(container, containerRect); 8660 return container; 8661 }, 8662 assignContainerSettings: function(container, containerRect) { 8663 var properties = { 8664 height: containerRect.height, 8665 width: containerRect.width, 8666 left: ASPx.PrepareClientPosForElement(containerRect.x, container, true), 8667 top: ASPx.PrepareClientPosForElement(containerRect.y, container, false) 8668 }; 8669 if(ASPx.Browser.MobileUI) 8670 ASPx.Data.MergeHashTables(properties, {marginTop: 0, marginLeft: 0 }); 8671 ASPx.SetStyles(container, properties, ASPx.Browser.MobileUI); 8672 }, 8673 IsExternalRipple: function(targetInfo) { 8674 var hasExternalRippleClassName = ASPx.ElementContainsCssClass(targetInfo.getTarget(), this.rippleTargetExternalClassName); 8675 if(!ASPx.Browser.MobileUI) 8676 return hasExternalRippleClassName; 8677 return hasExternalRippleClassName || this.IsMobileExternalRipple(targetInfo); 8678 }, 8679 IsMobileExternalRipple: function(targetInfo) { 8680 if(this.isMobileExternalRipple == null) { 8681 var originTouchRadius = this.getOriginTouchRadius(); 8682 this.isMobileExternalRipple = ASPx.Browser.MobileUI && targetInfo.width < originTouchRadius && targetInfo.height < originTouchRadius; 8683 } 8684 return this.isMobileExternalRipple; 8685 }, 8686 RemoveRippleContainer: function(element) { 8687 var childs = ASPx.GetChildNodesByClassName(element, this.rippleContainerClassName); 8688 var rippleContainer = childs.length > 0 ? childs[0] : null; 8689 if(rippleContainer != null) 8690 rippleContainer.parentNode.removeChild(rippleContainer); 8691 }, 8692 getEventX: function(evt) { 8693 return ASPxClientUtils.GetEventX(evt); 8694 }, 8695 getEventY: function(evt) { 8696 return ASPxClientUtils.GetEventY(evt); 8697 }, 8698 getOriginTouchRadius: function() { 8699 return this.touchRadius / this.zoom; 8700 }, 8701 getElementRect: function(element) { 8702 return { x: ASPx.GetAbsoluteX(element), y: ASPx.GetAbsoluteY(element), width: element.offsetWidth, height: element.offsetHeight }; 8703 } 8704} 8705var AccessibilitySR = { 8706 AddStringResources: function(stringResourcesObj) { 8707 if(stringResourcesObj) { 8708 for(var key in stringResourcesObj) 8709 this[key] = stringResourcesObj[key]; 8710 } 8711 } 8712}; 8713ASPx.CollectionBase = CollectionBase; 8714ASPx.FunctionIsInCallstack = _aspxFunctionIsInCallstack; 8715ASPx.RaisePostHandlerOnPost = aspxRaisePostHandlerOnPost; 8716ASPx.GetPostHandler = aspxGetPostHandler; 8717ASPx.ProcessScriptsAndLinks = _aspxProcessScriptsAndLinks; 8718ASPx.InitializeLinks = _aspxInitializeLinks; 8719ASPx.InitializeScripts = _aspxInitializeScripts; 8720ASPx.RunStartupScripts = _aspxRunStartupScripts; 8721ASPx.IsStartupScriptsRunning = _aspxIsStartupScriptsRunning; 8722ASPx.AddScriptsRestartHandler = _aspxAddScriptsRestartHandler; 8723ASPx.GetFocusedElement = _aspxGetFocusedElement; 8724ASPx.GetDomObserver = _aspxGetDomObserver;
8725ASPx.CacheHelper = CacheHelper; 8726ASPx.ControlTree = ControlTree; 8727ASPx.ControlCallbackHandlersQueue = ControlCallbackHandlersQueue; 8728ASPx.ResourceManager = ResourceManager; 8729ASPx.UpdateWatcherHelper = UpdateWatcherHelper; 8730ASPx.EventStorage = EventStorage; 8731ASPx.GetGlobalObject = GetGlobalObject; 8732ASPx.GetExternalScriptProcessor = GetExternalScriptProcessor; 8733ASPx.CheckBoxCheckState = CheckBoxCheckState; 8734ASPx.CheckBoxInputKey = CheckBoxInputKey; 8735ASPx.CheckableElementStateController = CheckableElementStateController; 8736ASPx.CheckableElementHelper = CheckableElementHelper; 8737ASPx.CheckBoxInternal = CheckBoxInternal; 8738ASPx.CheckBoxInternalCollection = CheckBoxInternalCollection; 8739ASPx.ControlCallbackQueueHelper = ControlCallbackQueueHelper; 8740ASPx.EditorStyleDecoration = EditorStyleDecoration; 8741ASPx.AccessibilitySR = AccessibilitySR; 8742ASPx.KbdHelper = KbdHelper; 8743ASPx.AccessKeysHelper = AccessKeysHelper; 8744ASPx.AccessKey = AccessKey; 8745ASPx.IFrameHelper = IFrameHelper; 8746ASPx.Ident = Ident; 8747ASPx.TouchUIHelper = TouchUIHelper; 8748ASPx.ControlUpdateWatcher = ControlUpdateWatcher; 8749ASPx.AccessibilityHelperBase = AccessibilityHelperBase; 8750ASPx.RippleHelper = RippleHelper; 8751ASPx.ThemesWithRipple = ThemesWithRipple; 8752window.ASPxClientEvent = ASPxClientEvent; 8753window.ASPxClientEventArgs = ASPxClientEventArgs; 8754window.ASPxClientCancelEventArgs = ASPxClientCancelEventArgs; 8755window.ASPxClientProcessingModeEventArgs = ASPxClientProcessingModeEventArgs; 8756window.ASPxClientProcessingModeCancelEventArgs = ASPxClientProcessingModeCancelEventArgs; 8757ASPx.Evt.AttachEventToDocument(TouchUIHelper.touchMouseDownEventName, RippleHelper.onDocumentMouseDown); 8758ASPx.classesScriptParsed = true; 8759})(); 8760 8761(function () { 8762ASPx.StateItemsExist = false; 8763ASPx.FocusedItemKind = "FocusedStateItem"; 8764ASPx.HoverItemKind = "HoverStateItem"; 8765ASPx.PressedItemKind = "PressedStateItem"; 8766ASPx.SelectedItemKind = "SelectedStateItem"; 8767ASPx.DisabledItemKind = "DisabledStateItem"; 8768ASPx.CachedStatePrefix = "cached"; 8769ASPxStateItem = ASPx.CreateClass(null, { 8770 constructor: function(name, classNames, cssTexts, postfixes, imageObjs, imagePostfixes, kind, disableApplyingStyleToLink){ 8771 this.name = name; 8772 this.classNames = classNames; 8773 this.customClassNames = []; 8774 this.resultClassNames = []; 8775 this.cssTexts = cssTexts; 8776 this.postfixes = postfixes; 8777 this.imageObjs = imageObjs; 8778 this.imagePostfixes = imagePostfixes; 8779 this.kind = kind; 8780 this.classNamePostfix = kind.substr(0, 1).toLowerCase(); 8781 this.enabled = true; 8782 this.needRefreshBetweenElements = false; 8783 this.elements = null; 8784 this.images = null; 8785 this.links = []; 8786 this.linkColor = null; 8787 this.linkTextDecoration = null; 8788 this.disableApplyingStyleToLink = !!disableApplyingStyleToLink; 8789 }, 8790 GetCssText: function(index){ 8791 if(ASPx.IsExists(this.cssTexts[index])) 8792 return this.cssTexts[index]; 8793 return this.cssTexts[0]; 8794 }, 8795 CreateStyleRule: function(index){ 8796 if(this.GetCssText(index) == "") return ""; 8797 var styleSheet = ASPx.GetCurrentStyleSheet(); 8798 if(styleSheet) 8799 return ASPx.CreateImportantStyleRule(styleSheet, this.GetCssText(index), this.classNamePostfix); 8800 return ""; 8801 }, 8802 GetClassName: function(index){ 8803 if(ASPx.IsExists(this.classNames[index])) 8804 return this.classNames[index]; 8805 return this.classNames[0]; 8806 }, 8807 GetResultClassName: function(index){ 8808 if(!ASPx.IsExists(this.resultClassNames[index])) { 8809 if(!ASPx.IsExists(this.customClassNames[index])) 8810 this.customClassNames[index] = this.CreateStyleRule(index); 8811 if(this.GetClassName(index) != "" && this.customClassNames[index] != "") 8812 this.resultClassNames[index] = this.GetClassName(index) + " " + this.customClassNames[index]; 8813 else if(this.GetClassName(index) != "") 8814 this.resultClassNames[index] = this.GetClassName(index); 8815 else if(this.customClassNames[index] != "") 8816 this.resultClassNames[index] = this.customClassNames[index]; 8817 else 8818 this.resultClassNames[index] = ""; 8819 } 8820 return this.resultClassNames[index]; 8821 }, 8822 GetElements: function(element){ 8823 if(!this.elements || !ASPx.IsValidElements(this.elements)){ 8824 if(this.postfixes && this.postfixes.length > 0){ 8825 this.elements = [ ]; 8826 var parentNode = element.parentNode; 8827 if(parentNode){
8828 for(var i = 0; i < this.postfixes.length; i++){ 8829 var id = this.name + this.postfixes[i]; 8830 this.elements[i] = ASPx.GetChildById(parentNode, id); 8831 if(!this.elements[i]) 8832 this.elements[i] = ASPx.GetElementById(id); 8833 } 8834 } 8835 } 8836 else 8837 this.elements = [element]; 8838 } 8839 return this.elements; 8840 }, 8841 GetImages: function(element){ 8842 if(!this.images || !ASPx.IsValidElements(this.images)){ 8843 this.images = [ ]; 8844 if(this.imagePostfixes && this.imagePostfixes.length > 0){ 8845 var elements = this.GetElements(element); 8846 for(var i = 0; i < this.imagePostfixes.length; i++){ 8847 var id = this.name + this.imagePostfixes[i]; 8848 for(var j = 0; j < elements.length; j++){ 8849 if(!elements[j]) continue; 8850 if(elements[j].id == id) 8851 this.images[i] = elements[j]; 8852 else 8853 this.images[i] = ASPx.GetChildById(elements[j], id); 8854 if(this.images[i]) 8855 break; 8856 } 8857 } 8858 } 8859 } 8860 return this.images; 8861 }, 8862 Apply: function(element){ 8863 if(!this.enabled) return; 8864 try{ 8865 this.ApplyStyle(element); 8866 if(this.imageObjs && this.imageObjs.length > 0) 8867 this.ApplyImage(element); 8868 if(ASPx.Browser.IE && ASPx.Browser.MajorVersion >= 11) 8869 this.ForceRedrawAppearance(element); 8870 } 8871 catch(e){ 8872 } 8873 }, 8874 ApplyStyle: function(element){ 8875 var elements = this.GetElements(element); 8876 for(var i = 0; i < elements.length; i++){ 8877 if(!elements[i]) continue; 8878 var className = elements[i].className.replace(this.GetResultClassName(i), ""); 8879 elements[i].className = ASPx.Str.Trim(className) + " " + this.GetResultClassName(i); 8880 if(!ASPx.Browser.Opera || ASPx.Browser.Version >= 9) 8881 this.ApplyStyleToLinks(elements, i); 8882 } 8883 }, 8884 ApplyStyleToLinks: function(elements, index){ 8885 if(this.disableApplyingStyleToLink) 8886 return; 8887 if(!ASPx.IsValidElements(this.links[index])) 8888 this.links[index] = ASPx.GetNodesByTagName(elements[index], "A"); 8889 for(var i = 0; i < this.links[index].length; i++) 8890 this.ApplyStyleToLinkElement(this.links[index][i], index); 8891 }, 8892 ApplyStyleToLinkElement: function(link, index){ 8893 if(this.GetLinkColor(index) != "") 8894 ASPx.Attr.ChangeAttributeExtended(link.style, "color", link, "saved" + this.kind + "Color", this.GetLinkColor(index)); 8895 if(this.GetLinkTextDecoration(index) != "") 8896 ASPx.Attr.ChangeAttributeExtended(link.style, "textDecoration", link, "saved" + this.kind + "TextDecoration", this.GetLinkTextDecoration(index)); 8897 }, 8898 ApplyImage: function(element){ 8899 var images = this.GetImages(element); 8900 for(var i = 0; i < images.length; i++){ 8901 if(!images[i] || !this.imageObjs[i]) continue; 8902 var useSpriteImage = typeof(this.imageObjs[i]) != "string"; 8903 var newUrl = "", newCssClass = "", newBackground = ""; 8904 if(useSpriteImage){ 8905 newUrl = ASPx.EmptyImageUrl; 8906 if(this.imageObjs[i].spriteCssClass) 8907 newCssClass = this.imageObjs[i].spriteCssClass;
8908 if(this.imageObjs[i].spriteBackground) 8909 newBackground = this.imageObjs[i].spriteBackground; 8910 } 8911 else{ 8912 newUrl = this.imageObjs[i]; 8913 if(ASPx.Attr.IsExistsAttribute(images[i].style, "background")) 8914 newBackground = " "; 8915 } 8916 if(newUrl != "") 8917 ASPx.Attr.ChangeAttributeExtended(images[i], "src", images[i], "saved" + this.kind + "Src", newUrl); 8918 if(newCssClass != "") 8919 this.ApplyImageClassName(images[i], newCssClass); 8920 if(newBackground != ""){ 8921 if(ASPx.Browser.WebKitFamily) { 8922 var savedBackground = ASPx.Attr.GetAttribute(images[i].style, "background"); 8923 if(!useSpriteImage) 8924 savedBackground += " " + images[i].style["backgroundPosition"]; 8925 ASPx.Attr.SetAttribute(images[i], "saved" + this.kind + "Background", savedBackground); 8926 ASPx.Attr.SetAttribute(images[i].style, "background", newBackground); 8927 } 8928 else 8929 ASPx.Attr.ChangeAttributeExtended(images[i].style, "background", images[i], "saved" + this.kind + "Background", newBackground); 8930 } 8931 } 8932 }, 8933 ApplyImageClassName: function(element, newClassName){ 8934 if(ASPx.Attr.GetAttribute(element, "saved" + this.kind + "ClassName")) 8935 this.CancelImageClassName(element); 8936 var className = element.className 8937 ASPx.Attr.SetAttribute(element, "saved" + this.kind + "ClassName", className); 8938 element.className = className + " " + newClassName; 8939 }, 8940 Cancel: function(element){ 8941 if(!this.enabled) return; 8942 try{ 8943 if(this.imageObjs && this.imageObjs.length > 0) 8944 this.CancelImage(element); 8945 this.CancelStyle(element); 8946 } 8947 catch(e){ 8948 } 8949 }, 8950 CancelStyle: function(element){ 8951 var elements = this.GetElements(element); 8952 for(var i = 0; i < elements.length; i++){ 8953 if(!elements[i]) continue; 8954 var className = ASPx.Str.Trim(elements[i].className.replace(this.GetResultClassName(i), "")); 8955 elements[i].className = className; 8956 if(!ASPx.Browser.Opera || ASPx.Browser.Version >= 9) 8957 this.CancelStyleFromLinks(elements, i); 8958 } 8959 }, 8960 CancelStyleFromLinks: function(elements, index){ 8961 if(this.disableApplyingStyleToLink) 8962 return; 8963 if(!ASPx.IsValidElements(this.links[index])) 8964 this.links[index] = ASPx.GetNodesByTagName(elements[index], "A"); 8965 for(var i = 0; i < this.links[index].length; i++) 8966 this.CancelStyleFromLinkElement(this.links[index][i], index); 8967 }, 8968 CancelStyleFromLinkElement: function(link, index){ 8969 if(this.GetLinkColor(index) != "") 8970 ASPx.Attr.RestoreAttributeExtended(link.style, "color", link, "saved" + this.kind + "Color"); 8971 if(this.GetLinkTextDecoration(index) != "") 8972 ASPx.Attr.RestoreAttributeExtended(link.style, "textDecoration", link, "saved" + this.kind + "TextDecoration"); 8973 }, 8974 CancelImage: function(element){ 8975 var images = this.GetImages(element); 8976 for(var i = 0; i < images.length; i++){ 8977 if(!images[i] || !this.imageObjs[i]) continue; 8978 ASPx.Attr.RestoreAttributeExtended(images[i], "src", images[i], "saved" + this.kind + "Src"); 8979 this.CancelImageClassName(images[i]); 8980 ASPx.Attr.RestoreAttributeExtended(images[i].style, "background", images[i], "saved" + this.kind + "Background"); 8981 } 8982 }, 8983 CancelImageClassName: function(element){ 8984 var savedClassName = ASPx.Attr.GetAttribute(element, "saved" + this.kind + "ClassName"); 8985 if(ASPx.IsExists(savedClassName)) { 8986 element.className = savedClassName; 8987 ASPx.Attr.RemoveAttribute(element, "saved" + this.kind + "ClassName"); 8988 } 8989 }, 8990 Clone: function(){ 8991 return new ASPxStateItem(this.name, this.classNames, this.cssTexts, this.postfixes, 8992 this.imageObjs, this.imagePostfixes, this.kind, this.disableApplyingStyleToLink); 8993 }, 8994 IsChildElement: function(element){ 8995 if(element != null){ 8996 var elements = this.GetElements(element); 8997 for(var i = 0; i < elements.length; i++){ 8998 if(!elements[i]) continue; 8999 if(ASPx.GetIsParent(elements[i], element)) 9000 return true; 9001 } 9002 } 9003 return false; 9004 }, 9005 ForceRedrawAppearance: function(element) { 9006 if(!aspxGetStateController().IsForceRedrawAppearanceLocked()) { 9007 var value = element.style.opacity; 9008 element.style.opacity = "0.7777"; 9009 var dummy = element.offsetWidth; 9010 element.style.opacity = value; 9011 } 9012 }, 9013 GetLinkColor: function(index){ 9014 if(!ASPx.IsExists(this.linkColor)){ 9015 var rule = ASPx.GetStyleSheetRules(this.customClassNames[index]); 9016 this.linkColor = rule ? rule.style.color : null; 9017 if(!ASPx.IsExists(this.linkColor)){ 9018 var rule = ASPx.GetStyleSheetRules(this.GetClassName(index)); 9019 this.linkColor = rule ? rule.style.color : null; 9020 } 9021 if(this.linkColor == null) 9022 this.linkColor = ""; 9023 } 9024 return this.linkColor; 9025 }, 9026 GetLinkTextDecoration: function(index){ 9027 if(!ASPx.IsExists(this.linkTextDecoration)){ 9028 var rule = ASPx.GetStyleSheetRules(this.customClassNames[index]); 9029 this.linkTextDecoration = rule ? rule.style.textDecoration : null; 9030 if(!ASPx.IsExists(this.linkTextDecoration)){ 9031 var rule = ASPx.GetStyleSheetRules(this.GetClassName(index)); 9032 this.linkTextDecoration = rule ? rule.style.textDecoration : null; 9033 } 9034 if(this.linkTextDecoration == null) 9035 this.linkTextDecoration = ""; 9036 } 9037 return this.linkTextDecoration; 9038 } 9039}); 9040ASPxClientStateEventArgs = ASPx.CreateClass(null, { 9041 constructor: function(item, element){ 9042 this.item = item; 9043 this.element = element; 9044 this.toElement = null; 9045 this.fromElement = null; 9046 this.htmlEvent = null; 9047 } 9048}); 9049ASPxStateController = ASPx.CreateClass(null, { 9050 constructor: function(){ 9051 this.focusedItems = { }; 9052 this.hoverItems = { }; 9053 this.pressedItems = { }; 9054 this.selectedItems = { }; 9055 this.disabledItems = { }; 9056 this.disabledScheme = {}; 9057 this.currentFocusedElement = null; 9058 this.currentFocusedItemName = null; 9059 this.currentHoverElement = null; 9060 this.currentHoverItemName = null; 9061 this.currentPressedElement = null; 9062 this.currentPressedItemName = null; 9063 this.savedCurrentPressedElement = null; 9064 this.savedCurrentMouseMoveSrcElement = null; 9065 this.forceRedrawAppearanceLockCount = 0; 9066 this.AfterSetFocusedState = new ASPxClientEvent(); 9067 this.AfterClearFocusedState = new ASPxClientEvent(); 9068 this.AfterSetHoverState = new ASPxClientEvent(); 9069 this.AfterClearHoverState = new ASPxClientEvent(); 9070 this.AfterSetPressedState = new ASPxClientEvent(); 9071 this.AfterClearPressedState = new ASPxClientEvent(); 9072 this.AfterDisabled = new ASPxClientEvent(); 9073 this.AfterEnabled = new ASPxClientEvent(); 9074 this.BeforeSetFocusedState = new ASPxClientEvent(); 9075 this.BeforeClearFocusedState = new ASPxClientEvent(); 9076 this.BeforeSetHoverState = new ASPxClientEvent(); 9077 this.BeforeClearHoverState = new ASPxClientEvent(); 9078 this.BeforeSetPressedState = new ASPxClientEvent(); 9079 this.BeforeClearPressedState = new ASPxClientEvent(); 9080 this.BeforeDisabled = new ASPxClientEvent(); 9081 this.BeforeEnabled = new ASPxClientEvent(); 9082 this.FocusedItemKeyDown = new ASPxClientEvent(); 9083 }, 9084 AddHoverItem: function(name, classNames, cssTexts, postfixes, imageObjs, imagePostfixes, disableApplyingStyleToLink){ 9085 this.AddItem(this.hoverItems, name, classNames, cssTexts, postfixes, imageObjs, imagePostfixes, ASPx.HoverItemKind, disableApplyingStyleToLink); 9086 this.AddItem(this.focusedItems, name, classNames, cssTexts, postfixes, imageObjs, imagePostfixes, ASPx.FocusedItemKind, disableApplyingStyleToLink); 9087 }, 9088 AddPressedItem: function(name, classNames, cssTexts, postfixes, imageObjs, imagePostfixes ,disableApplyingStyleToLink){ 9089 this.AddItem(this.pressedItems, name, classNames, cssTexts, postfixes, imageObjs, imagePostfixes, ASPx.PressedItemKind, disableApplyingStyleToLink); 9090 }, 9091 AddSelectedItem: function(name, classNames, cssTexts, postfixes, imageObjs, imagePostfixes, disableApplyingStyleToLink){ 9092 this.AddItem(this.selectedItems, name, classNames, cssTexts, postfixes, imageObjs, imagePostfixes, ASPx.SelectedItemKind, disableApplyingStyleToLink); 9093 }, 9094 AddDisabledItem: function (name, classNames, cssTexts, postfixes, imageObjs, imagePostfixes, disableApplyingStyleToLink, rootId) { 9095 this.AddItem(this.disabledItems, name, classNames, cssTexts, postfixes, imageObjs, imagePostfixes, 9096 ASPx.DisabledItemKind, disableApplyingStyleToLink, this.addIdToDisabledItemScheme, rootId); 9097 }, 9098 addIdToDisabledItemScheme: function(rootId, childId) { 9099 if (!rootId) 9100 return; 9101 if (!this.disabledScheme[rootId]) 9102 this.disabledScheme[rootId] = [rootId];
9103 if (childId && (rootId != childId) && ASPx.Data.ArrayIndexOf(this.disabledScheme[rootId], childId) == -1) 9104 this.disabledScheme[rootId].push(childId); 9105 }, 9106 removeIdFromDisabledItemScheme: function(rootId, childId) { 9107 if (!rootId || !this.disabledScheme[rootId]) 9108 return; 9109 ASPx.Data.ArrayRemove(this.disabledScheme[rootId], childId); 9110 if (this.disabledScheme[rootId].length == 0) 9111 delete this.disabledScheme[rootId]; 9112 }, 9113 AddItem: function (items, name, classNames, cssTexts, postfixes, imageObjs, imagePostfixes, kind, disableApplyingStyleToLink, onAdd, rootId) { 9114 var stateItem = new ASPxStateItem(name, classNames, cssTexts, postfixes, imageObjs, imagePostfixes, kind, disableApplyingStyleToLink); 9115 if (postfixes && postfixes.length > 0) { 9116 for (var i = 0; i < postfixes.length; i++) { 9117 items[name + postfixes[i]] = stateItem; 9118 if (onAdd) 9119 onAdd.call(this, rootId, name + postfixes[i]); 9120 } 9121 } 9122 else { 9123 if (onAdd) 9124 onAdd.call(this, rootId, name); 9125 items[name] = stateItem; 9126 } 9127 ASPx.StateItemsExist = true; 9128 }, 9129 RemoveHoverItem: function(name, postfixes){ 9130 this.RemoveItem(this.hoverItems, name, postfixes); 9131 this.RemoveItem(this.focusedItems, name, postfixes); 9132 }, 9133 RemovePressedItem: function(name, postfixes){ 9134 this.RemoveItem(this.pressedItems, name, postfixes); 9135 }, 9136 RemoveSelectedItem: function(name, postfixes){ 9137 this.RemoveItem(this.selectedItems, name, postfixes); 9138 }, 9139 RemoveDisabledItem: function (name, postfixes, rootId) { 9140 this.RemoveItem(this.disabledItems, name, postfixes, this.removeIdFromDisabledItemScheme, rootId); 9141 }, 9142 RemoveItem: function (items, name, postfixes, onRemove, rootId) { 9143 if (postfixes && postfixes.length > 0) { 9144 for (var i = 0; i < postfixes.length; i++) { 9145 delete items[name + postfixes[i]]; 9146 if (onRemove) 9147 onRemove.call(this, rootId, name + postfixes[i]); 9148 } 9149 } 9150 else { 9151 delete items[name]; 9152 if (onRemove) 9153 onRemove.call(this, rootId, name); 9154 } 9155 }, 9156 RemoveDisposedItems: function(){ 9157 this.RemoveDisposedItemsByType(this.hoverItems); 9158 this.RemoveDisposedItemsByType(this.pressedItems); 9159 this.RemoveDisposedItemsByType(this.focusedItems); 9160 this.RemoveDisposedItemsByType(this.selectedItems); 9161 this.RemoveDisposedItemsByType(this.disabledItems); 9162 this.RemoveDisposedItemsByType(this.disabledScheme); 9163 }, 9164 RemoveDisposedItemsByType: function(items){ 9165 for(var key in items) { 9166 var item = items[key]; 9167 var element = document.getElementById(key); 9168 if(!element || !ASPx.IsValidElement(element)) 9169 delete items[key]; 9170 try{ 9171 if(item && item.elements) { 9172 for(var i = 0; i < item.elements.length; i++) { 9173 if(!ASPx.IsValidElements(item.links[i])) 9174 item.links[i] = null; 9175 } 9176 } 9177 } 9178 catch(e){ 9179 } 9180 } 9181 }, 9182 GetFocusedElement: function(srcElement){ 9183 return this.GetItemElement(srcElement, this.focusedItems, ASPx.FocusedItemKind); 9184 }, 9185 GetHoverElement: function(srcElement){ 9186 return this.GetItemElement(srcElement, this.hoverItems, ASPx.HoverItemKind); 9187 }, 9188 GetPressedElement: function(srcElement){ 9189 return this.GetItemElement(srcElement, this.pressedItems, ASPx.PressedItemKind); 9190 }, 9191 GetSelectedElement: function(srcElement){ 9192 return this.GetItemElement(srcElement, this.selectedItems, ASPx.SelectedItemKind); 9193 }, 9194 GetDisabledElement: function(srcElement){ 9195 return this.GetItemElement(srcElement, this.disabledItems, ASPx.DisabledItemKind); 9196 }, 9197 GetItemElement: function(srcElement, items, kind){ 9198 if(srcElement && srcElement[ASPx.CachedStatePrefix + kind]){ 9199 var cachedElement = srcElement[ASPx.CachedStatePrefix + kind]; 9200 if(cachedElement != ASPx.EmptyObject) 9201 return cachedElement; 9202 return null; 9203 } 9204 var element = srcElement; 9205 while(element != null) { 9206 var item = items[element.id]; 9207 if(item){ 9208 this.CacheItemElement(srcElement, kind, element); 9209 element[kind] = item; 9210 return element; 9211 } 9212 element = element.parentNode; 9213 } 9214 this.CacheItemElement(srcElement, kind, ASPx.EmptyObject); 9215 return null; 9216 }, 9217 CacheItemElement: function(srcElement, kind, value){ 9218 if(srcElement && !srcElement[ASPx.CachedStatePrefix + kind]) 9219 srcElement[ASPx.CachedStatePrefix + kind] = value; 9220 }, 9221 DoSetFocusedState: function(element, fromElement){ 9222 var item = element[ASPx.FocusedItemKind]; 9223 if(item){ 9224 var args = new ASPxClientStateEventArgs(item, element); 9225 args.fromElement = fromElement; 9226 this.BeforeSetFocusedState.FireEvent(this, args); 9227 item.Apply(element); 9228 this.AfterSetFocusedState.FireEvent(this, args); 9229 } 9230 }, 9231 DoClearFocusedState: function(element, toElement){ 9232 var item = element[ASPx.FocusedItemKind]; 9233 if(item){ 9234 var args = new ASPxClientStateEventArgs(item, element); 9235 args.toElement = toElement; 9236 this.BeforeClearFocusedState.FireEvent(this, args); 9237 item.Cancel(element); 9238 this.AfterClearFocusedState.FireEvent(this, args); 9239 } 9240 }, 9241 DoSetHoverState: function(element, fromElement){ 9242 var item = element[ASPx.HoverItemKind]; 9243 if(item){ 9244 var args = new ASPxClientStateEventArgs(item, element); 9245 args.fromElement = fromElement; 9246 this.BeforeSetHoverState.FireEvent(this, args); 9247 item.Apply(element); 9248 this.AfterSetHoverState.FireEvent(this, args); 9249 } 9250 }, 9251 DoClearHoverState: function(element, toElement){ 9252 var item = element[ASPx.HoverItemKind]; 9253 if(item){ 9254 var args = new ASPxClientStateEventArgs(item, element); 9255 args.toElement = toElement; 9256 this.BeforeClearHoverState.FireEvent(this, args); 9257 item.Cancel(element); 9258 this.AfterClearHoverState.FireEvent(this, args); 9259 } 9260 }, 9261 DoSetPressedState: function(element){ 9262 var item = element[ASPx.PressedItemKind]; 9263 if(item){ 9264 var args = new ASPxClientStateEventArgs(item, element); 9265 this.BeforeSetPressedState.FireEvent(this, args); 9266 item.Apply(element); 9267 this.AfterSetPressedState.FireEvent(this, args); 9268 } 9269 }, 9270 DoClearPressedState: function(element){ 9271 var item = element[ASPx.PressedItemKind]; 9272 if(item){ 9273 var args = new ASPxClientStateEventArgs(item, element); 9274 this.BeforeClearPressedState.FireEvent(this, args); 9275 item.Cancel(element); 9276 this.AfterClearPressedState.FireEvent(this, args); 9277 } 9278 }, 9279 SetCurrentFocusedElement: function(element){ 9280 if(this.currentFocusedElement && !ASPx.IsValidElement(this.currentFocusedElement)){ 9281 this.currentFocusedElement = null; 9282 this.currentFocusedItemName = ""; 9283 } 9284 if(this.currentFocusedElement != element){ 9285 var oldCurrentFocusedElement = this.currentFocusedElement; 9286 var item = (element != null) ? element[ASPx.FocusedItemKind] : null; 9287 var itemName = (item != null) ? item.name : ""; 9288 if(this.currentFocusedItemName != itemName){ 9289 if(this.currentHoverItemName != "") 9290 this.SetCurrentHoverElement(null); 9291 if(this.currentFocusedElement != null) 9292 this.DoClearFocusedState(this.currentFocusedElement, element); 9293 this.currentFocusedElement = element; 9294 item = (element != null) ? element[ASPx.FocusedItemKind] : null; 9295 this.currentFocusedItemName = (item != null) ? item.name : ""; 9296 if(this.currentFocusedElement != null) 9297 this.DoSetFocusedState(this.currentFocusedElement, oldCurrentFocusedElement); 9298 } 9299 } 9300 }, 9301 SetCurrentHoverElement: function(element){ 9302 if(this.currentHoverElement && !ASPx.IsValidElement(this.currentHoverElement)){ 9303 this.currentHoverElement = null; 9304 this.currentHoverItemName = ""; 9305 } 9306 var item = (element != null) ? element[ASPx.HoverItemKind] : null; 9307 if(item && !item.enabled) { 9308 element = this.GetItemElement(element.parentNode, this.hoverItems, ASPx.HoverItemKind); 9309 item = (element != null) ? element[ASPx.HoverItemKind] : null; 9310 } 9311 if(this.currentHoverElement != element){ 9312 var oldCurrentHoverElement = this.currentHoverElement, 9313 itemName = (item != null) ? item.name : ""; 9314 if(this.currentHoverItemName != itemName || (item != null && item.needRefreshBetweenElements)){ 9315 if(this.currentHoverElement != null) 9316 this.DoClearHoverState(this.currentHoverElement, element); 9317 item = (element != null) ? element[ASPx.HoverItemKind] : null; 9318 if(item == null || item.enabled){ 9319 this.currentHoverElement = element; 9320 this.currentHoverItemName = (item != null) ? item.name : ""; 9321 if(this.currentHoverElement != null) 9322 this.DoSetHoverState(this.currentHoverElement, oldCurrentHoverElement); 9323 } 9324 } 9325 } 9326 }, 9327 SetCurrentPressedElement: function(element){ 9328 if(this.currentPressedElement && !ASPx.IsValidElement(this.currentPressedElement)){ 9329 this.currentPressedElement = null; 9330 this.currentPressedItemName = ""; 9331 } 9332 if(this.currentPressedElement != element){ 9333 if(this.currentPressedElement != null) 9334 this.DoClearPressedState(this.currentPressedElement); 9335 var item = (element != null) ? element[ASPx.PressedItemKind] : null; 9336 if(item == null || item.enabled){ 9337 this.currentPressedElement = element; 9338 this.currentPressedItemName = (item != null) ? item.name : ""; 9339 if(this.currentPressedElement != null) 9340 this.DoSetPressedState(this.currentPressedElement); 9341 } 9342 } 9343 }, 9344 SetCurrentFocusedElementBySrcElement: function(srcElement){ 9345 var element = this.GetFocusedElement(srcElement); 9346 this.SetCurrentFocusedElement(element); 9347 }, 9348 SetCurrentHoverElementBySrcElement: function(srcElement){ 9349 var element = this.GetHoverElement(srcElement); 9350 this.SetCurrentHoverElement(element); 9351 }, 9352 SetCurrentPressedElementBySrcElement: function(srcElement){ 9353 var element = this.GetPressedElement(srcElement); 9354 this.SetCurrentPressedElement(element); 9355 }, 9356 SetPressedElement: function (element) { 9357 this.SetCurrentHoverElement(null); 9358 this.SetCurrentPressedElementBySrcElement(element); 9359 this.savedCurrentPressedElement = this.currentPressedElement; 9360 }, 9361 SelectElement: function (element) { 9362 var item = element[ASPx.SelectedItemKind]; 9363 if(item) 9364 item.Apply(element); 9365 }, 9366 SelectElementBySrcElement: function(srcElement){ 9367 var element = this.GetSelectedElement(srcElement); 9368 if(element != null) this.SelectElement(element); 9369 }, 9370 DeselectElement: function(element){ 9371 var item = element[ASPx.SelectedItemKind]; 9372 if(item) 9373 item.Cancel(element); 9374 }, 9375 DeselectElementBySrcElement: function(srcElement){ 9376 var element = this.GetSelectedElement(srcElement); 9377 if(element != null) this.DeselectElement(element); 9378 }, 9379 SetElementEnabled: function(element, enable){ 9380 if(enable) 9381 this.EnableElement(element); 9382 else 9383 this.DisableElement(element); 9384 }, 9385 SetElementWithChildNodesEnabled: function (parentName, enabled) { 9386 var procFunct = (enabled ? this.EnableElement : this.DisableElement); 9387 var childItems = this.disabledScheme[parentName]; 9388 if (childItems && childItems.length > 0) 9389 for (var i = 0; i < childItems.length; i++) { 9390 procFunct.call(this, document.getElementById(childItems[i])); 9391 } 9392 }, 9393 DisableElement: function (element) { 9394 var element = this.GetDisabledElement(element); 9395 if(element != null) { 9396 var item = element[ASPx.DisabledItemKind]; 9397 if(item){ 9398 var args = new ASPxClientStateEventArgs(item, element); 9399 this.BeforeDisabled.FireEvent(this, args); 9400 if(item.name == this.currentPressedItemName) 9401 this.SetCurrentPressedElement(null); 9402 if(item.name == this.currentHoverItemName) 9403 this.SetCurrentHoverElement(null); 9404 item.Apply(element); 9405 this.SetMouseStateItemsEnabled(item.name, item.postfixes, false); 9406 this.AfterDisabled.FireEvent(this, args); 9407 } 9408 } 9409 }, 9410 EnableElement: function(element){ 9411 var element = this.GetDisabledElement(element); 9412 if(element != null) { 9413 var item = element[ASPx.DisabledItemKind]; 9414 if(item){ 9415 var args = new ASPxClientStateEventArgs(item, element); 9416 this.BeforeEnabled.FireEvent(this, args); 9417 item.Cancel(element); 9418 this.SetMouseStateItemsEnabled(item.name, item.postfixes, true); 9419 this.AfterEnabled.FireEvent(this, args); 9420 } 9421 } 9422 }, 9423 SetMouseStateItemsEnabled: function(name, postfixes, enabled){ 9424 if(postfixes && postfixes.length > 0){ 9425 for(var i = 0; i < postfixes.length; i ++){ 9426 this.SetItemsEnabled(this.hoverItems, name + postfixes[i], enabled); 9427 this.SetItemsEnabled(this.pressedItems, name + postfixes[i], enabled); 9428 this.SetItemsEnabled(this.focusedItems, name + postfixes[i], enabled); 9429 } 9430 } 9431 else{ 9432 this.SetItemsEnabled(this.hoverItems, name, enabled); 9433 this.SetItemsEnabled(this.pressedItems, name, enabled); 9434 this.SetItemsEnabled(this.focusedItems, name, enabled); 9435 } 9436 }, 9437 SetItemsEnabled: function(items, name, enabled){ 9438 if(items[name]) 9439 items[name].enabled = enabled; 9440 }, 9441 OnFocusMove: function(evt){ 9442 var element = ASPx.Evt.GetEventSource(evt); 9443 aspxGetStateController().SetCurrentFocusedElementBySrcElement(element); 9444 }, 9445 OnMouseMove: function(evt, checkElementChanged){ 9446 var srcElement = ASPx.Evt.GetEventSource(evt); 9447 if(checkElementChanged && srcElement == this.savedCurrentMouseMoveSrcElement) return; 9448 this.savedCurrentMouseMoveSrcElement = srcElement; 9449 if(ASPx.Browser.IE && !ASPx.Evt.IsLeftButtonPressed(evt) && this.savedCurrentPressedElement != null) 9450 this.ClearSavedCurrentPressedElement(); 9451 if(this.savedCurrentPressedElement == null) 9452 this.SetCurrentHoverElementBySrcElement(srcElement); 9453 else{ 9454 var element = this.GetPressedElement(srcElement); 9455 if(element != this.currentPressedElement){ 9456 if(element == this.savedCurrentPressedElement) 9457 this.SetCurrentPressedElement(this.savedCurrentPressedElement); 9458 else 9459 this.SetCurrentPressedElement(null); 9460 } 9461 } 9462 }, 9463 OnMouseDown: function(evt){ 9464 if(!ASPx.Evt.IsLeftButtonPressed(evt)) return; 9465 var srcElement = ASPx.Evt.GetEventSource(evt); 9466 this.OnMouseDownOnElement(srcElement); 9467 }, 9468 OnMouseDownOnElement: function (element) { 9469 if(this.GetPressedElement(element) == null) return; 9470 this.SetPressedElement(element); 9471 }, 9472 OnMouseUp: function(evt){ 9473 var srcElement = ASPx.Evt.GetEventSource(evt); 9474 this.OnMouseUpOnElement(srcElement); 9475 }, 9476 OnMouseUpOnElement: function(element){ 9477 if(this.savedCurrentPressedElement == null) return; 9478 this.ClearSavedCurrentPressedElement(); 9479 this.SetCurrentHoverElementBySrcElement(element); 9480 }, 9481 OnMouseOver: function(evt){ 9482 var element = ASPx.Evt.GetEventSource(evt); 9483 if(element && element.tagName == "IFRAME") 9484 this.OnMouseMove(evt, true); 9485 }, 9486 OnKeyDown: function(evt){ 9487 var element = this.GetFocusedElement(ASPx.Evt.GetEventSource(evt)); 9488 if(element != null && element == this.currentFocusedElement) { 9489 var item = element[ASPx.FocusedItemKind]; 9490 if(item){ 9491 var args = new ASPxClientStateEventArgs(item, element); 9492 args.htmlEvent = evt; 9493 this.FocusedItemKeyDown.FireEvent(this, args); 9494 } 9495 } 9496 }, 9497 OnSelectStart: function(evt){ 9498 if(this.savedCurrentPressedElement) { 9499 ASPx.Selection.Clear(); 9500 return false; 9501 } 9502 }, 9503 ClearSavedCurrentPressedElement: function() { 9504 this.savedCurrentPressedElement = null; 9505 this.SetCurrentPressedElement(null); 9506 }, 9507 ClearCache: function(srcElement, kind) { 9508 if(srcElement[ASPx.CachedStatePrefix + kind]) 9509 srcElement[ASPx.CachedStatePrefix + kind] = null; 9510 }, 9511 ClearElementCache: function(srcElement) { 9512 this.ClearCache(srcElement, ASPx.FocusedItemKind); 9513 this.ClearCache(srcElement, ASPx.HoverItemKind); 9514 this.ClearCache(srcElement, ASPx.PressedItemKind); 9515 this.ClearCache(srcElement, ASPx.SelectedItemKind); 9516 this.ClearCache(srcElement, ASPx.DisabledItemKind); 9517 }, 9518 LockForceRedrawAppearance: function() { 9519 this.forceRedrawAppearanceLockCount++; 9520 }, 9521 UnlockForceRedrawAppearance: function() { 9522 this.forceRedrawAppearanceLockCount--; 9523 }, 9524 IsForceRedrawAppearanceLocked: function() { 9525 return this.forceRedrawAppearanceLockCount > 0; 9526 } 9527}); 9528var stateController = null; 9529function aspxGetStateController(){ 9530 if(stateController == null) 9531 stateController = new ASPxStateController(); 9532 return stateController; 9533} 9534function aspxAddStateItems(method, namePrefix, classes, disableApplyingStyleToLink){ 9535 for(var i = 0; i < classes.length; i ++){ 9536 for(var j = 0; j < classes[i][2].length; j ++) { 9537 var name = namePrefix; 9538 if(classes[i][2][j]) 9539 name += "_" + classes[i][2][j]; 9540 var postfixes = classes[i][3] || null; 9541 var imag
9541eObjs = (classes[i][4] && classes[i][4][j]) || null; 9542 var imagePostfixes = classes[i][5] || null; 9543 method.call(aspxGetStateController(), name, classes[i][0], classes[i][1], postfixes, imageObjs, imagePostfixes, disableApplyingStyleToLink, namePrefix); 9544 } 9545 } 9546} 9547ASPx.AddHoverItems = function(namePrefix, classes, disableApplyingStyleToLink){ 9548 aspxAddStateItems(aspxGetStateController().AddHoverItem, namePrefix, classes, disableApplyingStyleToLink); 9549} 9550ASPx.AddPressedItems = function(namePrefix, classes, disableApplyingStyleToLink){ 9551 aspxAddStateItems(aspxGetStateController().AddPressedItem, namePrefix, classes, disableApplyingStyleToLink); 9552} 9553ASPx.AddSelectedItems = function(namePrefix, classes, disableApplyingStyleToLink){ 9554 aspxAddStateItems(aspxGetStateController().AddSelectedItem, namePrefix, classes, disableApplyingStyleToLink); 9555} 9556ASPx.AddDisabledItems = function(namePrefix, classes, disableApplyingStyleToLink){ 9557 aspxAddStateItems(aspxGetStateController().AddDisabledItem, namePrefix, classes, disableApplyingStyleToLink); 9558} 9559function aspxRemoveStateItems(method, namePrefix, classes){ 9560 for(var i = 0; i < classes.length; i ++){ 9561 for(var j = 0; j < classes[i][0].length; j ++) { 9562 var name = namePrefix; 9563 if(classes[i][0][j]) 9564 name += "_" + classes[i][0][j]; 9565 method.call(aspxGetStateController(), name, classes[i][1], namePrefix); 9566 } 9567 } 9568} 9569ASPx.RemoveHoverItems = function(namePrefix, classes){ 9570 aspxRemoveStateItems(aspxGetStateController().RemoveHoverItem, namePrefix, classes); 9571} 9572ASPx.RemovePressedItems = function(namePrefix, classes){ 9573 aspxRemoveStateItems(aspxGetStateController().RemovePressedItem, namePrefix, classes); 9574} 9575ASPx.RemoveSelectedItems = function(namePrefix, classes){ 9576 aspxRemoveStateItems(aspxGetStateController().RemoveSelectedItem, namePrefix, classes); 9577} 9578ASPx.RemoveDisabledItems = function(namePrefix, classes){ 9579 aspxRemoveStateItems(aspxGetStateController().RemoveDisabledItem, namePrefix, classes); 9580} 9581ASPx.AddAfterClearFocusedState = function(handler){ 9582 aspxGetStateController().AfterClearFocusedState.AddHandler(handler); 9583} 9584ASPx.AddAfterSetFocusedState = function(handler){ 9585 aspxGetStateController().AfterSetFocusedState.AddHandler(handler); 9586} 9587ASPx.AddAfterClearHoverState = function(handler){ 9588 aspxGetStateController().AfterClearHoverState.AddHandler(handler); 9589} 9590ASPx.AddAfterSetHoverState = function(handler){ 9591 aspxGetStateController().AfterSetHoverState.AddHandler(handler); 9592} 9593ASPx.AddAfterClearPressedState = function(handler){ 9594 aspxGetStateController().AfterClearPressedState.AddHandler(handler); 9595} 9596ASPx.AddAfterSetPressedState = function(handler){ 9597 aspxGetStateController().AfterSetPressedState.AddHandler(handler); 9598} 9599ASPx.AddAfterDisabled = function(handler){ 9600 aspxGetStateController().AfterDisabled.AddHandler(handler); 9601} 9602ASPx.AddAfterEnabled = function(handler){ 9603 aspxGetStateController().AfterEnabled.AddHandler(handler); 9604} 9605ASPx.AddBeforeClearFocusedState = function(handler){ 9606 aspxGetStateController().BeforeClearFocusedState.AddHandler(handler); 9607} 9608ASPx.AddBeforeSetFocusedState = function(handler){ 9609 aspxGetStateController().BeforeSetFocusedState.AddHandler(handler); 9610} 9611ASPx.AddBeforeClearHoverState = function(handler){ 9612 aspxGetStateController().BeforeClearHoverState.AddHandler(handler); 9613} 9614ASPx.AddBeforeSetHoverState = function(handler){ 9615 aspxGetStateController().BeforeSetHoverState.AddHandler(handler); 9616} 9617ASPx.AddBeforeClearPressedState = function(handler){ 9618 aspxGetStateController().BeforeClearPressedState.AddHandler(handler); 9619} 9620ASPx.AddBeforeSetPressedState = function(handler){ 9621 aspxGetStateController().BeforeSetPressedState.AddHandler(handler); 9622} 9623ASPx.AddBeforeDisabled = function(handler){ 9624 aspxGetStateController().BeforeDisabled.AddHandler(handler); 9625} 9626ASPx.AddBeforeEnabled = function(handler){ 9627 aspxGetStateController().BeforeEnabled.AddHandler(handler); 9628} 9629ASPx.AddFocusedItemKeyDown = function(handler){ 9630 aspxGetStateController().FocusedItemKeyDown.AddHandler(handler); 9631} 9632ASPx.SetHoverState = function(element){ 9633 aspxGetStateController().SetCurrentHoverElementBySrcElement(element); 9634} 9635ASPx.ClearHoverState = function(evt){ 9636 aspxGetStateController().SetCurrentHoverElementBySrcElement(null); 9637} 9638ASPx.UpdateHoverState = function(evt){ 9639 aspxGetStateController().OnMouseMove(evt, false); 9640} 9641ASPx.SetFocusedState = function(element){ 9642 aspxGetStateController().SetCurrentFocusedElementBySrcElement(element); 9643} 9644ASPx.ClearFocusedState = function(evt){ 9645 aspxGetStateController().SetCurrentFocusedElementBySrcElement(null); 9646} 9647ASPx.UpdateFocusedState = function(evt){ 9648 aspxGetStateController().OnFocusMove(evt); 9649} 9650ASPx.AccessibilityMarkerClass = "dxalink"; 9651ASPx.AssignAccessibilityEventsToChildrenLinks = function(container, clearFocusedStateOnMouseOut){ 9652 var links = ASPx.GetNodesByPartialClassName(container, ASPx.AccessibilityMarkerClass); 9653 for(var i = 0; i < links.length; i++) 9654 ASPx.AssignAccessibilityEventsToLink(links[i], clearFocusedStateOnMouseOut); 9655} 9656ASPx.AssignAccessibilityEventsToLink = function(link, clearFocusedStateOnMouseOut) { 9657 if(!ASPx.ElementContainsCssClass(link, ASPx.AccessibilityMarkerClass)) 9658 return; 9659 ASPx.Evt.AttachEventToElement(link, "focus", function(e) { ASPx.UpdateFocusedState(e); }); 9660 var clearFocusedStateHandler = function(e) { ASPx.ClearFocusedState(e); }; 9661 ASPx.Evt.AttachEventToElement(link, "blur", clearFocusedStateHandler); 9662 if(clearFocusedStateOnMouseOut) 9663 ASPx.Evt.AttachEventToElement(link, "mouseout", clearFocusedStateHandler); 9664} 9665ASPx.Evt.AttachEventToDocument("mousemove", function(evt) { 9666 if(ASPx.classesScriptParsed && ASPx.StateItemsExist) 9667 aspxGetStateController().OnMouseMove(evt, true); 9668}); 9669ASPx.Evt.AttachEventToDocument(ASPx.TouchUIHelper.touchMouseDownEventName, function(evt) { 9670 if(ASPx.classesScriptParsed && ASPx.StateItemsExist) 9671 aspxGetStateController().OnMouseDown(evt); 9672}); 9673ASPx.Evt.AttachEventToDocument(ASPx.TouchUIHelper.touchMouseUpEventName, function(evt) { 9674 if(ASPx.classesScriptParsed && ASPx.StateItemsExist) 9675 aspxGetStateController().OnMouseUp(evt); 9676}); 9677ASPx.Evt.AttachEventToDocument("mouseover", function(evt) { 9678 if(ASPx.classesScriptParsed && ASPx.StateItemsExist) 9679 aspxGetStateController().OnMouseOver(evt); 9680}); 9681ASPx.Evt.AttachEventToDocument("keydown", function(evt) { 9682 if(ASPx.classesScriptParsed && ASPx.StateItemsExist) 9683 aspxGetStateController().OnKeyDown(evt); 9684}); 9685ASPx.Evt.AttachEventToDocument("selectstart", function(evt) { 9686 if(ASPx.classesScriptParsed && ASPx.StateItemsExist) 9687 return aspxGetStateController().OnSelectStart(evt); 9688}); 9689ASPx.GetStateController = aspxGetStateController; 9690})(); 9691(function () { 9692 if (typeof ASPx == "undefined") { 9693 window.ASPx = {}; 9694 } 9695 ASPx.ASPxImageLoad = {}; 9696 ASPx.ASPxImageLoad.dxDefaultLoadingImageCssClass = "dxe-loadingImage"; 9697 ASPx.ASPxImageLoad.OnLoad = function (image, customLoadingImage, isOldIE, customBackgroun
9697dImageUrl) { 9698 image.dxCustomBackgroundImageUrl = ""; 9699 image.dxShowLoadingImage = true; 9700 image.dxCustomLoadingImage = customLoadingImage; 9701 if (customBackgroundImageUrl != "") 9702 image.dxCustomBackgroundImageUrl = "url('" + customBackgroundImageUrl + "')"; 9703 ASPx.ASPxImageLoad.prepareImageBackground(image, isOldIE); 9704 ASPx.ASPxImageLoad.removeHandlers(image); 9705 image.className = image.className.replace(ASPx.ASPxImageLoad.dxDefaultLoadingImageCssClass, ""); 9706 }; 9707 ASPx.ASPxImageLoad.removeASPxImageBackground = function (image, isOldIE) { 9708 if (isOldIE) 9709 image.style.removeAttribute("background-image"); 9710 else 9711 image.style.backgroundImage = ""; 9712 }; 9713 ASPx.ASPxImageLoad.prepareImageBackground = function (image, isOldIE) { 9714 ASPx.ASPxImageLoad.removeASPxImageBackground(image, isOldIE); 9715 if (image.dxCustomBackgroundImageUrl != "") 9716 image.style.backgroundImage = image.dxCustomBackgroundImageUrl; 9717 }; 9718 ASPx.ASPxImageLoad.removeHandlers = function (image) { 9719 image.removeAttribute("onload"); 9720 image.removeAttribute("onabort"); 9721 image.removeAttribute("onerror"); 9722 }; 9723})(); 9724(function () { 9725var ASPxClientBeginCallbackEventArgs = ASPx.CreateClass(ASPxClientEventArgs, { 9726 constructor: function(command){ 9727 this.constructor.prototype.constructor.call(this); 9728 this.command = command; 9729 } 9730}); 9731var ASPxClientGlobalBeginCallbackEventArgs = ASPx.CreateClass(ASPxClientBeginCallbackEventArgs, { 9732 constructor: function(control, command){ 9733 this.constructor.prototype.constructor.call(this, command); 9734 this.control = control; 9735 } 9736}); 9737var ASPxClientEndCallbackEventArgs = ASPx.CreateClass(ASPxClientEventArgs, { 9738 constructor: function(){ 9739 this.constructor.prototype.constructor.call(this); 9740 } 9741}); 9742var ASPxClientGlobalEndCallbackEventArgs = ASPx.CreateClass(ASPxClientEndCallbackEventArgs, { 9743 constructor: function(control){ 9744 this.constructor.prototype.constructor.call(this); 9745 this.control = control; 9746 } 9747}); 9748var ASPxClientCustomDataCallbackEventArgs = ASPx.CreateClass(ASPxClientEventArgs, { 9749 constructor: function(result) { 9750 this.constructor.prototype.constructor.call(this); 9751 this.result = result; 9752 } 9753}); 9754var ASPxClientCallbackErrorEventArgs = ASPx.CreateClass(ASPxClientEventArgs, { 9755 constructor: function (message, callbackId) { 9756 this.constructor.prototype.constructor.call(this); 9757 this.message = message; 9758 this.handled = false; 9759 this.callbackId = callbackId; 9760 } 9761}); 9762var ASPxClientGlobalCallbackErrorEventArgs = ASPx.CreateClass(ASPxClientCallbackErrorEventArgs, { 9763 constructor: function (control, message, callbackId) { 9764 this.constructor.prototype.constructor.call(this, message, callbackId); 9765 this.control = control; 9766 } 9767}); 9768var ASPxClientValidationCompletedEventArgs = ASPx.CreateClass(ASPxClientEventArgs, { 9769 constructor: function (container, validationGroup, invisibleControlsValidated, isValid, firstInvalidControl, firstVisibleInvalidControl) { 9770 this.constructor.prototype.constructor.call(this); 9771 this.container = container; 9772 this.validationGroup = validationGroup; 9773 this.invisibleControlsValidated = invisibleControlsValidated; 9774 this.isValid = isValid; 9775 this.firstInvalidControl = firstInvalidControl; 9776 this.firstVisibleInvalidControl = firstVisibleInvalidControl; 9777 } 9778}); 9779var ASPxClientControlsInitializedEventArgs = ASPx.CreateClass(ASPxClientEventArgs, { 9780 constructor: function(isCallback) { 9781 this.isCallback = isCallback; 9782 } 9783}); 9784var ASPxClientControlBeforePronounceEventArgs = ASPx.CreateClass(ASPxClientEventArgs, { 9785 constructor: function(messageParts, control){ 9786 this.constructor.prototype.constructor.call(this); 9787 this.messageParts = messageParts; 9788 this.control = control; 9789 } 9790}); 9791var BeforeInitCallbackEventArgs = ASPx.CreateClass(ASPxClientEventArgs, { 9792 constructor: function(callbackOwnerID){ 9793 this.constructor.prototype.constructor.call(this); 9794 this.callbackOwnerID = callbackOwnerID; 9795 } 9796}); 9797var ASPxClientControlBase = ASPx.CreateClass(null, { 9798 constructor: function(name){ 9799 this.name = name; 9800 this.uniqueID = name; 9801 this.globalName = name; 9802 this.stateObject = null; 9803 this.encodeHtml = true; 9804 this.enabled = true; 9805 this.clientEnabled = true; 9806 this.savedClientEnabled = true; 9807 this.clientVisible = true; 9808 this.accessibilityCompliant = false; 9809 this.autoPostBack = false; 9810 this.allowMultipleCallbacks = true; 9811 this.callBack = null;
9812 this.enableCallbackAnimation = false; 9813 this.enableSlideCallbackAnimation = false; 9814 this.slideAnimationDirection = null; 9815 this.beginCallbackAnimationProcessing = false; 9816 this.endCallbackAnimationProcessing = false; 9817 this.savedCallbackResult = null; 9818 this.savedCallbacks = null; 9819 this.isCallbackAnimationPrevented = false; 9820 this.lpDelay = 300; 9821 this.lpTimer = -1; 9822 this.requestCount = 0; 9823 this.enableSwipeGestures = false; 9824 this.disableSwipeGestures = false; 9825 this.supportGestures = false; 9826 this.repeatedGestureValue = 0; 9827 this.repeatedGestureCount = 0; 9828 this.isInitialized = false; 9829 this.initialFocused = false; 9830 this.leadingAfterInitCall = ASPxClientControl.LeadingAfterInitCallConsts.None; 9831 this.serverEvents = []; 9832 this.loadingPanelElement = null; 9833 this.loadingDivElement = null; 9834 this.hasPhantomLoadingElements = false; 9835 this.mainElement = null; 9836 this.touchUIMouseScroller = null; 9837 this.hiddenFields = { }; 9838 this.callbackHandlersQueue = new ASPx.ControlCallbackHandlersQueue(this); 9839 this.Init = new ASPxClientEvent(); 9840 this.BeginCallback = new ASPxClientEvent(); 9841 this.EndCallback = new ASPxClientEvent(); 9842 this.EndCallbackAnimationStart = new ASPxClientEvent(); 9843 this.CallbackError = new ASPxClientEvent(); 9844 this.CustomDataCallback = new ASPxClientEvent(); 9845 this.BeforePronounce = new ASPxClientEvent(); 9846 aspxGetControlCollection().Add(this); 9847 }, 9848 Initialize: function() { 9849 if(this.callBack != null) 9850 this.InitializeCallBackData(); 9851 if (this.useCallbackQueue()) 9852 this.callbackQueueHelper = new ASPx.ControlCallbackQueueHelper(this); 9853 ASPx.AccessibilityUtils.createAccessibleBackgrounds(this); 9854 if(this.accessibilityCompliant) 9855 ASPx.AccessibilityPronouncer.EnsureInitialize(); 9856 }, 9857 InlineInitialize: function() { 9858 this.savedClientEnabled = this.clientEnabled; 9859 }, 9860 InitializeGestures: function() { 9861 if(this.isSwipeGesturesEnabled() && this.supportGestures) { 9862 ASPx.GesturesHelper.AddSwipeGestureHandler(this.name, 9863 function() { return this.GetCallbackAnimationElement(); }.aspxBind(this), 9864 function(evt) { return this.CanHandleGestureCore(evt); }.aspxBind(this), 9865 function(value) { return this.AllowStartGesture(); }.aspxBind(this), 9866 function(value) { return this.StartGesture(); }.aspxBind(this), 9867 function(value) { return this.AllowExecuteGesture(value); }.aspxBind(this), 9868 function(value) { this.ExecuteGesture(value); }.aspxBind(this), 9869 function(value) { this.CancelGesture(value); }.aspxBind(this), 9870 this.GetDefaultanimationEngineType() 9871 ); 9872 if(ASPx.Browser.MSTouchUI) 9873 this.touchUIMouseScroller = ASPx.MouseScroller.Create( 9874 function() { return this.GetCallbackAnimationElement(); }.aspxBind(this), 9875 function() { return null; }, 9876 function() { return this.GetCallbackAnimationElement(); }.aspxBind(this), 9877 function(element) { return this.NeedPreventTouchUIMouseScrolling(element); }.aspxBind(this), 9878 true 9879 ); 9880 } 9881 }, 9882 isSwipeGesturesEnabled: function() { 9883 return !this.disableSwipeGestures && (this.enableSwipeGestures || ASPx.Browser.TouchUI); 9884 }, 9885 isSlideCallbackAnimationEnabled: function() { 9886 return this.enableSlideCallbackAnimation || this.isSwipeGesturesEnabled(); 9887 }, 9888 InitGlobalVariable: function(varName){ 9889 if(!window) return; 9890 this.globalName = varName; 9891 window[varName] = this; 9892 }, 9893 SetProperties: function(properties, obj){ 9894 if(!obj) obj = this; 9895 for(var name in properties){ 9896 if(properties.hasOwnProperty(name)) 9897 obj[name] = properties[name]; 9898 } 9899 }, 9900 SetEvents: function(events, obj){ 9901 if(!obj) obj = this; 9902 for(var name in events){ 9903 if(events.hasOwnProperty(name) && obj[name] && obj[name].AddHandler) 9904 obj[name].AddHandler(events[name]); 9905 } 9906 }, 9907 InitializeProperties: function(properties){ 9908 }, 9909 useCallbackQueue: function(){ 9910 return false; 9911 }, 9912 NeedPreventTouchUIMouseScrolling: function(element) { 9913 return false; 9914 }, 9915 InitailizeFocus: function() { 9916 if(this.initialFocused && this.IsVisible()) 9917 this.Focus(); 9918 }, 9919 AfterCreate: function() { 9920 this.InlineInitialize(); 9921 this.InitializeGestures(); 9922 }, 9923 AfterInitialize: function() { 9924 this.initializeAriaDescriptor(); 9925 this.InitailizeFocus(); 9926 this.isInitialized = true; 9927 this.RaiseInit(); 9928 if(this.savedCallbacks) { 9929 for(var i = 0; i < this.savedCallbacks.length; i++) 9930 this.CreateCallbackInternal(this.savedCallbacks[i].arg, this.savedCallbacks[i].command, 9931 false, this.savedCallbacks[i].callbackInfo); 9932 this.savedCallbacks = null; 9933 } 9934 }, 9935 InitializeCallBackData: function() { 9936 }, 9937 IsDOMDisposed: function() { 9938 return !ASPx.IsExistsElement(this.GetMainElement()); 9939 }, 9940 initializeAriaDescriptor: function() { 9941 if(this.ariaDescription) { 9942 var descriptionObject = ASPx.Json.Eval(this.ariaDescription) 9943 if(descriptionObject) { 9944 this.ariaDescriptor = new AriaDescriptor(this, descriptionObject); 9945 this.applyAccessibilityAttributes(this.ariaDescriptor); 9946 } 9947 } 9948 }, 9949 applyAccessibilityAttributes: function() { }, 9950 setAriaDescription: function(selector, argsList) { 9951 if(this.ariaDescriptor) 9952 this.ariaDescriptor.setDescription(selector, argsList || [[]]); 9953 }, 9954 allowRestoreFocusOnCallbacks: function(){ 9955 return this.accessibilityCompliant; 9956 }, 9957 HtmlEncode: function(text) { 9958 return this.encodeHtml ? ASPx.Str.EncodeHtml(text) : text; 9959 }, 9960 IsServerEventAssigned: function(eventName){ 9961 return ASPx.Data.ArrayIndexOf(this.serverEvents, eventName) >= 0; 9962 }, 9963 OnPost: function(args){ 9964 this.UpdateStateObject(); 9965 if(this.stateObject != null) 9966 this.UpdateStateHiddenField(); 9967 }, 9968 OnPostFinalization: function(args){ 9969 }, 9970 UpdateStateObject: function(){ 9971 }, 9972 UpdateStateObjectWithObject: function(obj){ 9973 if(!obj) return; 9974 if(!this.stateObject) 9975 this.stateObject = { }; 9976 for(var key in obj)
9977 this.stateObject[key] = obj[key]; 9978 }, 9979 UpdateStateHiddenField: function(){ 9980 var stateHiddenField = this.GetStateHiddenField() 9981 if(stateHiddenField) { 9982 var stateObjectStr = ASPx.Json.ToJson(this.stateObject); 9983 stateHiddenField.value = ASPx.Str.EncodeHtml(stateObjectStr); 9984 } 9985 }, 9986 GetStateHiddenField: function() { 9987 return this.GetHiddenField(this.GetStateHiddenFieldName(), this.GetStateHiddenFieldID(), 9988 this.GetStateHiddenFieldParent(), this.GetStateHiddenFieldOrigin()); 9989 }, 9990 GetStateHiddenFieldName: function() { 9991 return this.uniqueID; 9992 }, 9993 GetStateHiddenFieldID: function() { 9994 return this.name + "_State"; 9995 }, 9996 GetStateHiddenFieldOrigin: function() { 9997 return this.GetMainElement(); 9998 }, 9999 GetStateHiddenFieldParent: function() { 10000 var element = this.GetStateHiddenFieldOrigin(); 10001 return element ? element.parentNode : null; 10002 }, 10003 GetHiddenField: function(name, id, parent, beforeElement) { 10004 var hiddenField = this.hiddenFields[id]; 10005 if(!hiddenField || !ASPx.IsValidElement(hiddenField)) { 10006 if(parent) { 10007 var existingHiddenField = ASPx.GetElementById(this.GetStateHiddenFieldID()); 10008 this.hiddenFields[id] = hiddenField = existingHiddenField || ASPx.CreateHiddenField(name, id); 10009 if(existingHiddenField) 10010 return existingHiddenField; 10011 if(beforeElement) 10012 parent.insertBefore(hiddenField, beforeElement) 10013 else 10014 parent.appendChild(hiddenField); 10015 } 10016 } 10017 return hiddenField; 10018 }, 10019 GetChildElement: function(idPostfix){ 10020 var mainElement = this.GetMainElement(); 10021 if(idPostfix.charAt && idPostfix.charAt(0) !== "_") 10022 idPostfix = "_" + idPostfix; 10023 return mainElement ? ASPx.CacheHelper.GetCachedChildById(this, mainElement, this.name + idPostfix) : null; 10024 }, 10025 getChildControl: function(idPostfix) { 10026 var result = null; 10027 var childControlId = this.getChildControlUniqueID(idPostfix); 10028 ASPx.GetControlCollection().ProcessControlsInContainer(this.GetMainElement(), function(control) { 10029 if(control.uniqueID == childControlId) 10030 result = control; 10031 }); 10032 return result; 10033 }, 10034 getChildControlUniqueID: function(idPostfix) { 10035 idPostfix = idPostfix.split("_").join("$"); 10036 if(idPostfix.charAt && idPostfix.charAt(0) !== "$") 10037 idPostfix = "$" + idPostfix; 10038 return this.uniqueID + idPostfix; 10039 }, 10040 getInnerControl: function(idPostfix) { 10041 var name = this.name + idPostfix; 10042 var result = window[name]; 10043 return result && Ident.IsASPxClientControl(result) 10044 ? result 10045 : null; 10046 }, 10047 GetParentForm: function(){ 10048 return ASPx.GetParentByTagName(this.GetMainElement(), "FORM"); 10049 }, 10050 GetMainElement: function(){ 10051 if(!ASPx.IsExistsElement(this.mainElement)) 10052 this.mainElement = ASPx.GetElementById(this.name); 10053 return this.mainElement; 10054 }, 10055 IsLoadingContainerVisible: function(){ 10056 return this.IsVisible(); 10057 }, 10058 GetLoadingPanelElement: function(){ 10059 return ASPx.GetElementById(this.name + "_LP"); 10060 }, 10061 GetClonedLoadingPanel: function(){ 10062 return document.getElementById(this.GetLoadingPanelElement().id + "V"); 10063 }, 10064 CloneLoadingPanel: function(element, parent) { 10065 var clone = element.cloneNode(true); 10066 clone.id = element.id + "V"; 10067 parent.appendChild(clone); 10068 return clone; 10069 }, 10070 CreateLoadingPanelWithoutBordersInsideContainer: function(container) { 10071 var loadingPanel = this.CreateLoadingPanelInsideContainer(container, false, true, true); 10072 var contentStyle = ASPx.GetCurrentStyle(container); 10073 if(!loadingPanel || !contentStyle) 10074 return; 10075 var elements = [ ]; 10076 var table = (loadingPanel.tagName == "TABLE") ? loadingPanel : ASPx.GetNodeByTagName(loadingPanel, "TABLE", 0); 10077 if(table != null) 10078 elements.push(table); 10079 else 10080 elements.push(loadingPanel); 10081 var cells = ASPx.GetNodesByTagName(loadingPanel, "TD"); 10082 if(!cells) cells = [ ]; 10083 for(var i = 0; i < cells.length; i++) 10084 elements.push(cells[i]); 10085 for(var i = 0; i < elements.length; i++) { 10086 var el = elements[i]; 10087 el.style.backgroundColor = contentStyle.backgroundColor; 10088 ASPx.RemoveBordersAndShadows(el); 10089 } 10090 }, 10091 CreateLoadingPanelInsideContainer: function(parentElement, hideContent, collapseHeight, collapseWidth) { 10092 if(this.ShouldHideExistingLoadingElements()) 10093 this.HideLoadingPanel(); 10094 if(parentElement == null) 10095 return null; 10096 if(!this.IsLoadingContainerVisible()) { 10097 this.hasPhantomLoadingElements = true; 10098 return null; 10099 } 10100 var element = this.GetLoadingPanelElement(); 10101 if(element != null){ 10102 var width = collapseWidth ? 0 : ASPx.GetClearClientWidth(parentElement); 10103 var height = collapseHeight ? 0 : ASPx.GetClearClientHeight(parentElement); 10104 if(hideContent){ 10105 for(var i = parentElement.childNodes.length - 1; i > -1; i--){ 10106 if(parentElement.childNodes[i].style) 10107 parentElement.childNodes[i].style.display = "none"; 10108 else if(parentElement.childNodes[i].nodeType == 3) 10109 parentElement.removeChild(parentElement.childNodes[i]); 10110 } 10111 } 10112 else 10113 parentElement.innerHTML = ""; 10114 var table = document.createElement("TABLE"); 10115 parentElement.appendChild(table); 10116 table.border = 0; 10117 table.cellPadding = 0; 10118 table.cellSpacing = 0; 10119 ASPx.SetStyles(table, { 10120 width: (width > 0) ? width : "100%", 10121 height: (height > 0) ? height : "100%" 10122 }); 10123 var tbody = document.createElement("TBODY"); 10124 table.appendChild(tbody); 10125 var tr = document.createElement("TR"); 10126 tbody.appendChild(tr); 10127 var td = document.createElement("TD"); 10128 tr.appendChild(td); 10129 td.align = "center"; 10130 td.vAlign = "middle"; 10131 element = this.CloneLoadingPanel(element, td); 10132 ASPx.SetElementDisplay(element, true, true); 10133 this.loadingPanelElement = element; 10134 return element; 10135 } else 10136 parentElement.innerHTML = " "; 10137 return null; 10138 }, 10139 CreateLoadingPanelWithAbsolutePosition: function(parentElement, offsetElement) { 10140 if(this.ShouldHideExistingLoadingElements()) 10141 this.HideLoadingPanel(); 10142 if(parentElement == null) 10143 return null; 10144 if(!this.IsLoadingContainerVisible()) { 10145 this.hasPhantomLoadingElements = true; 10146 return null; 10147 } 10148 if(!offsetElement) 10149 offsetElement = parentElement; 10150 var element = this.GetLoadingPanelElement(); 10151 if(element != null) { 10152 element = this.CloneLoadingPanel(element, parentElement); 10153 ASPx.SetStyles(element, { 10154 position: "absolute" 10155 }); 10156 ASPx.SetElementDisplay(element, true, true); 10157 ASPx.Evt.AttachEventToElement(element, ASPx.Evt.GetMouseWheelEventName(), ASPx.Evt.PreventEvent);
10158 this.SetLoadingPanelLocation(offsetElement, element); 10159 this.loadingPanelElement = element; 10160 return element; 10161 } 10162 return null; 10163 }, 10164 CreateLoadingPanelInline: function(parentElement, centerInParent){ 10165 if(this.ShouldHideExistingLoadingElements()) 10166 this.HideLoadingPanel(); 10167 if(parentElement == null) 10168 return null; 10169 if(!this.IsLoadingContainerVisible()) { 10170 this.hasPhantomLoadingElements = true; 10171 return null; 10172 } 10173 var element = this.GetLoadingPanelElement(); 10174 if(element != null) { 10175 element = this.CloneLoadingPanel(element, parentElement); 10176 if(centerInParent){ 10177 ASPx.SetElementDisplay(element, true, true, true); 10178 parentElement.style.textAlign = "center"; 10179 } 10180 else 10181 ASPx.SetElementDisplay(element, true); 10182 this.loadingPanelElement = element; 10183 return element; 10184 } 10185 return null; 10186 }, 10187 ShowLoadingPanel: function() { 10188 }, 10189 ShowLoadingElements: function() { 10190 if(this.InCallback() || this.lpTimer > -1) return; 10191 this.ShowLoadingDiv(); 10192 if(this.IsCallbackAnimationEnabled())
10193 this.StartBeginCallbackAnimation(); 10194 else 10195 this.ShowLoadingElementsInternal(); 10196 }, 10197 ShowLoadingElementsInternal: function() { 10198 if(this.lpDelay > 0 && !this.IsCallbackAnimationEnabled()) 10199 this.lpTimer = window.setTimeout(function() { 10200 this.ShowLoadingPanelOnTimer(); 10201 }.aspxBind(this), this.lpDelay); 10202 else { 10203 this.RestoreLoadingDivOpacity(); 10204 this.ShowLoadingPanel(); 10205 } 10206 }, 10207 GetLoadingPanelOffsetElement: function (baseElement) { 10208 if(this.IsCallbackAnimationEnabled()) { 10209 var element = this.GetLoadingPanelCallbackAnimationOffsetElement(); 10210 if(element) { 10211 var container = typeof(ASPx.AnimationHelper) != "undefined" ? ASPx.AnimationHelper.findSlideAnimationContainer(element) : null; 10212 if(container) 10213 return container.parentNode.parentNode; 10214 else 10215 return element; 10216 } 10217 } 10218 return baseElement; 10219 }, 10220 GetLoadingPanelCallbackAnimationOffsetElement: function () { 10221 return this.GetCallbackAnimationElement(); 10222 }, 10223 IsCallbackAnimationEnabled: function () { 10224 return (this.enableCallbackAnimation || this.isSlideCallbackAnimationEnabled()) && !this.isCallbackAnimationPrevented; 10225 }, 10226 GetDefaultanimationEngineType: function() { 10227 return ASPx.AnimationEngineType.DEFAULT; 10228 },
10229 StartBeginCallbackAnimation: function () { 10230 this.beginCallbackAnimationProcessing = true; 10231 this.isCallbackFinished = false; 10232 var element = this.GetCallbackAnimationElement(); 10233 if(element && this.isSlideCallbackAnimationEnabled() && this.slideAnimationDirection) 10234 ASPx.AnimationHelper.slideOut(element, this.slideAnimationDirection, this.FinishBeginCallbackAnimation.aspxBind(this), this.GetDefaultanimationEngineType()); 10235 else if(element && this.enableCallbackAnimation) 10236 ASPx.AnimationHelper.fadeOut(element, this.FinishBeginCallbackAnimation.aspxBind(this)); 10237 else 10238 this.FinishBeginCallbackAnimation(); 10239 }, 10240 CancelBeginCallbackAnimation: function() { 10241 if(this.beginCallbackAnimationProcessing) { 10242 this.beginCallbackAnimationProcessing = false; 10243 var element = this.GetCallbackAnimationElement(); 10244 ASPx.AnimationHelper.cancelAnimation(element); 10245 } 10246 }, 10247 FinishBeginCallbackAnimation: function () { 10248 this.beginCallbackAnimationProcessing = false; 10249 if(!this.isCallbackFinished) 10250 this.ShowLoadingElementsInternal(); 10251 else { 10252 this.DoCallback(this.savedCallbackResult); 10253 this.savedCallbackResult = null; 10254 } 10255 },
10256 CheckBeginCallbackAnimationInProgress: function(callbackResult) { 10257 if(this.beginCallbackAnimationProcessing) { 10258 this.savedCallbackResult = callbackResult; 10259 this.isCallbackFinished = true; 10260 return true; 10261 } 10262 return false; 10263 }, 10264 StartEndCallbackAnimation: function () { 10265 this.HideLoadingPanel(); 10266 this.SetInitialLoadingDivOpacity(); 10267 this.RaiseEndCallbackAnimationStart(); 10268 this.endCallbackAnimationProcessing = true; 10269 var element = this.GetCallbackAnimationElement(); 10270 if(element && this.isSlideCallbackAnimationEnabled() && this.slideAnimationDirection) 10271 ASPx.AnimationHelper.slideIn(element, this.slideAnimationDirection, this.FinishEndCallbackAnimation.aspxBind(this), this.GetDefaultanimationEngineType()); 10272 else if(element && this.enableCallbackAnimation) 10273 ASPx.AnimationHelper.fadeIn(element, this.FinishEndCallbackAnimation.aspxBind(this)); 10274 else 10275 this.FinishEndCallbackAnimation(); 10276 this.slideAnimationDirection = null; 10277 }, 10278 FinishEndCallbackAnimation: function () { 10279 this.DoEndCallback(); 10280 this.endCallbackAnimationProcessing = false; 10281 this.CheckRepeatGesture(); 10282 }, 10283 CheckEndCallbackAnimationNeeded: function() { 10284 if(!this.endCallbackAnimationProcessing && this.requestCount == 1) { 10285 this.StartEndCallbackAnimation(); 10286 return true; 10287 } 10288 return false; 10289 }, 10290 PreventCallbackAnimation: function() { 10291 this.isCallbackAnimationPrevented = true; 10292 }, 10293 GetCallbackAnimationElement: function() { 10294 return null; 10295 }, 10296 AssignSlideAnimationDirectionByPagerArgument: function(arg, currentPageIndex) { 10297 this.slideAnimationDirection = null; 10298 if(this.isSlideCallbackAnimationEnabled() && typeof(ASPx.AnimationHelper) != "undefined") { 10299 if(arg == PagerCommands.Next || arg == PagerCommands.Last) 10300 this.slideAnimationDirection = ASPx.AnimationHelper.SLIDE_LEFT_DIRECTION; 10301 else if(arg == PagerCommands.First || arg == PagerCommands.Prev) 10302 this.slideAnimationDirection = ASPx.AnimationHelper.SLIDE_RIGHT_DIRECTION; 10303 else if(!isNaN(currentPageIndex) && arg.indexOf(PagerCommands.PageNumber) == 0) { 10304 var newPageIndex = parseInt(arg.substring(2)); 10305 if(!isNaN(newPageIndex)) 10306 this.slideAnimationDirection = newPageIndex < currentPageIndex ? ASPx.AnimationHelper.SLIDE_RIGHT_DIRECTION : ASPx.AnimationHelper.SLIDE_LEFT_DIRECTION; 10307 } 10308 } 10309 }, 10310 TryShowPhantomLoadingElements: function () { 10311 if(this.hasPhantomLoadingElements && this.InCallback()) { 10312 this.hasPhantomLoadingElements = false; 10313 this.ShowLoadingDivAndPanel(); 10314 } 10315 }, 10316 ShowLoadingDivAndPanel: function () { 10317 this.ShowLoadingDiv(); 10318 this.RestoreLoadingDivOpacity(); 10319 this.ShowLoadingPanel(); 10320 }, 10321 HideLoadingElements: function() {
10322 this.CancelBeginCallbackAnimation(); 10323 this.HideLoadingPanel(); 10324 this.HideLoadingDiv(); 10325 }, 10326 ShowLoadingPanelOnTimer: function() { 10327 this.ClearLoadingPanelTimer(); 10328 if(!this.IsDOMDisposed()) { 10329 this.RestoreLoadingDivOpacity(); 10330 this.ShowLoadingPanel(); 10331 } 10332 }, 10333 ClearLoadingPanelTimer: function() { 10334 this.lpTimer = ASPx.Timer.ClearTimer(this.lpTimer); 10335 }, 10336 HideLoadingPanel: function() { 10337 this.ClearLoadingPanelTimer(); 10338 this.hasPhantomLoadingElements = false; 10339 if(ASPx.IsExistsElement(this.loadingPanelElement)) { 10340 ASPx.RemoveElement(this.loadingPanelElement); 10341 this.loadingPanelElement = null; 10342 } 10343 }, 10344 SetLoadingPanelLocation: function(offsetElement, loadingPanel, x, y, offsetX, offsetY) { 10345 if(!ASPx.IsExists(x) || !ASPx.IsExists(y)){ 10346 var x1 = ASPx.GetAbsoluteX(offsetElement); 10347 var y1 = ASPx.GetAbsoluteY(offsetElement); 10348 var x2 = x1; 10349 var y2 = y1; 10350 if(offsetElement == document.body){ 10351 x2 += ASPx.GetDocumentMaxClientWidth(); 10352 y2 += ASPx.GetDocumentMaxClientHeight(); 10353 } 10354 else{ 10355 x2 += offsetElement.offsetWidth; 10356 y2 += offsetElement.offsetHeight; 10357 } 10358 if(x1 < ASPx.GetDocumentScrollLeft()) 10359 x1 = ASPx.GetDocumentScrollLeft(); 10360 if(y1 < ASPx.GetDocumentScrollTop()) 10361 y1 = ASPx.GetDocumentScrollTop(); 10362 if(x2 > ASPx.GetDocumentScrollLeft() + ASPx.GetDocumentClientWidth()) 10363 x2 = ASPx.GetDocumentScrollLeft() + ASPx.GetDocumentClientWidth(); 10364 if(y2 > ASPx.GetDocumentScrollTop() + ASPx.GetDocumentClientHeight()) 10365 y2 = ASPx.GetDocumentScrollTop() + ASPx.GetDocumentClientHeight(); 10366 x = x1 + ((x2 - x1 - loadingPanel.offsetWidth) / 2); 10367 y = y1 + ((y2 - y1 - loadingPanel.offsetHeight) / 2); 10368 } 10369 if(ASPx.IsExists(offsetX) && ASPx.IsExists(offsetY)){ 10370 x += offsetX; 10371 y += offsetY; 10372 } 10373 x = ASPx.PrepareClientPosForElement(x, loadingPanel, true); 10374 y = ASPx.PrepareClientPosForElement(y, loadingPanel, false); 10375 if(ASPx.Browser.IE && ASPx.Browser.Version > 8 && (y - Math.floor(y) === 0.5)) 10376 y = Math.ceil(y); 10377 ASPx.SetStyles(loadingPanel, { left: x, top: y }); 10378 }, 10379 GetLoadingDiv: function(){ 10380 return ASPx.GetElementById(this.name + "_LD"); 10381 }, 10382 CreateLoadingDiv: function(parentElement, offsetElement){ 10383 if(this.ShouldHideExistingLoadingElements()) 10384 this.HideLoadingDiv(); 10385 if(parentElement == null) 10386 return null; 10387 if(!this.IsLoadingContainerVisible()) { 10388 this.hasPhantomLoadingElements = true; 10389 return null; 10390 } 10391 if(!offsetElement) 10392 offsetElement = parentElement; 10393 var div = this.GetLoadingDiv(); 10394 if(div != null){ 10395 div = div.cloneNode(true); 10396 parentElement.appendChild(div); 10397 ASPx.SetElementDisplay(div, true, true); 10398 ASPx.Evt.AttachEventToElement(div, ASPx.TouchUIHelper.touchMouseDownEventName, ASPx.Evt.PreventEvent); 10399 ASPx.Evt.AttachEventToElement(div, ASPx.TouchUIHelper.touchMouseMoveEventName, ASPx.Evt.PreventEvent); 10400 ASPx.Evt.AttachEventToElement(div, ASPx.TouchUIHelper.touchMouseUpEventName, ASPx.Evt.PreventEvent); 10401 ASPx.Evt.AttachEventToElement(div, ASPx.Evt.GetMouseWheelEventName(), ASPx.Evt.PreventEvent); 10402 this.SetLoadingDivBounds(offsetElement, div); 10403 this.loadingDivElement = div; 10404 this.SetInitialLoadingDivOpacity(); 10405 return div; 10406 } 10407 return null; 10408 }, 10409 SetInitialLoadingDivOpacity: function() { 10410 if(!this.loadingDivElement) return; 10411 ASPx.Attr.SaveStyleAttribute(this.loadingDivElement, "opacity"); 10412 ASPx.Attr.SaveStyleAttribute(this.loadingDivElement, "filter"); 10413 ASPx.SetElementOpacity(this.loadingDivElement, 0.01); 10414 }, 10415 RestoreLoadingDivOpacity: function() { 10416 if(!this.loadingDivElement) return; 10417 ASPx.Attr.RestoreStyleAttribute(this.loadingDivElement, "opacity"); 10418 ASPx.Attr.RestoreStyleAttribute(this.loadingDivElement, "filter"); 10419 }, 10420 SetLoadingDivBounds: function(offsetElement, loadingDiv) { 10421 var absX = (offsetElement == document.body) ? 0 : ASPx.GetAbsoluteX(offsetElement); 10422 var absY = (offsetElement == document.body) ? 0 : ASPx.GetAbsoluteY(offsetElement); 10423 ASPx.SetStyles(loadingDiv, { 10424 left: ASPx.PrepareClientPosForElement(absX, loadingDiv, true), 10425 top: ASPx.PrepareClientPosForElement(absY, loadingDiv, false) 10426 }); 10427 var width = (offsetElement == document.body) ? ASPx.GetDocumentWidth() : offsetElement.offsetWidth; 10428 var height = (offsetElement == document.body) ? ASPx.GetDocumentHeight() : offsetElement.offsetHeight; 10429 if(height < 0) 10430 height = 0; 10431 ASPx.SetStyles(loadingDiv, { width: width, height: height });
10432 var correctedWidth = 2 * width - loadingDiv.offsetWidth; 10433 if(correctedWidth <= 0) correctedWidth = width; 10434 var correctedHeight = 2 * height - loadingDiv.offsetHeight; 10435 if(correctedHeight <= 0) correctedHeight = height; 10436 ASPx.SetStyles(loadingDiv, { width: correctedWidth, height: correctedHeight }); 10437 }, 10438 ShowLoadingDiv: function() { 10439 }, 10440 HideLoadingDiv: function() { 10441 this.hasPhantomLoadingElements = false; 10442 if(ASPx.IsExistsElement(this.loadingDivElement)){ 10443 ASPx.RemoveElement(this.loadingDivElement); 10444 this.loadingDivElement = null; 10445 } 10446 }, 10447 CanHandleGesture: function(evt) { 10448 return false; 10449 }, 10450 CanHandleGestureCore: function(evt) { 10451 var source = ASPx.Evt.GetEventSource(evt); 10452 if(ASPx.GetIsParent(this.loadingPanelElement, source) || ASPx.GetIsParent(this.loadingDivElement, source)) 10453 return true; 10454 var callbackAnimationElement = this.GetCallbackAnimationElement(); 10455 if(!callbackAnimationElement) 10456 return false; 10457 var animationContainer = ASPx.AnimationHelper.getSlideAnimationContainer(callbackAnimationElement, false, false); 10458 if(animationContainer && ASPx.GetIsParent(animationContainer, source) && !ASPx.GetIsParent(animationContainer.childNodes[0], source)) 10459 return true; 10460 return this.CanHandleGesture(evt); 10461 }, 10462 AllowStartGesture: function() {
10463 return !this.beginCallbackAnimationProcessing && !this.endCallbackAnimationProcessing; 10464 }, 10465 StartGesture: function() { 10466 }, 10467 AllowExecuteGesture: function(value) { 10468 return false; 10469 }, 10470 ExecuteGesture: function(value) { 10471 }, 10472 CancelGesture: function(value) { 10473 if(this.repeatedGestureCount === 0) { 10474 this.repeatedGestureValue = value; 10475 this.repeatedGestureCount = 1; 10476 } 10477 else { 10478 if(this.repeatedGestureValue * value > 0) 10479 this.repeatedGestureCount++; 10480 else 10481 this.repeatedGestureCount--; 10482 if(this.repeatedGestureCount === 0) 10483 this.repeatedGestureCount = 0; 10484 } 10485 }, 10486 CheckRepeatGesture: function() { 10487 if(this.repeatedGestureCount !== 0) { 10488 if(this.AllowExecuteGesture(this.repeatedGestureValue)) 10489 this.ExecuteGesture(this.repeatedGestureValue, this.repeatedGestureCount); 10490 this.repeatedGestureValue = 0; 10491 this.repeatedGestureCount = 0; 10492 } 10493 }, 10494 AllowExecutePagerGesture: function (pageIndex, pageCount, value) { 10495 if(pageIndex < 0) return false; 10496 if(pageCount <= 1) return false; 10497 if(value > 0 && pageIndex === 0) return false; 10498 if(value < 0 && pageIndex === pageCount - 1) return false; 10499 return true; 10500 }, 10501 ExecutePagerGesture: function(pageIndex, pageCount, value, count, method) { 10502 if(!count) count = 1; 10503 var pageIndex = pageIndex + (value < 0 ? count : -count); 10504 if(pageIndex < 0) pageIndex = 0; 10505 if(pageIndex > pageCount - 1) pageIndex = pageCount - 1; 10506 method(PagerCommands.PageNumber + pageIndex); 10507 }, 10508 RaiseInit: function(){ 10509 if(!this.Init.IsEmpty()){ 10510 var args = new ASPxClientEventArgs(); 10511 this.Init.FireEvent(this, args); 10512 } 10513 }, 10514 RaiseBeginCallbackInternal: function(command){ 10515 if(!this.BeginCallback.IsEmpty()){ 10516 var args = new ASPxClientBeginCallbackEventArgs(command); 10517 this.BeginCallback.FireEvent(this, args); 10518 } 10519 }, 10520 RaiseEndCallbackInternal: function() { 10521 if(!this.EndCallback.IsEmpty()){ 10522 var args = new ASPxClientEndCallbackEventArgs(); 10523 this.EndCallback.FireEvent(this, args); 10524 } 10525 }, 10526 RaiseCallbackErrorInternal: function(message, callbackId) { 10527 if(!this.CallbackError.IsEmpty()) { 10528 var args = new ASPxClientCallbackErrorEventArgs(message, callbackId); 10529 this.CallbackError.FireEvent(this, args); 10530 if(args.handled) 10531 return { isHandled: true, errorMessage: args.message }; 10532 } 10533 }, 10534 RaiseBeginCallback: function(command){ 10535 this.RaiseBeginCallbackInternal(command); 10536 aspxGetControlCollection().RaiseBeginCallback(this, command); 10537 }, 10538 RaiseEndCallback: function(){ 10539 this.RaiseEndCallbackInternal(); 10540 aspxGetControlCollection().RaiseEndCallback(this); 10541 }, 10542 RaiseCallbackError: function (message, callbackId) { 10543 var result = this.RaiseCallbackErrorInternal(message, callbackId); 10544 if(!result) 10545 result = aspxGetControlCollection().RaiseCallbackError(this, message, callbackId); 10546 return result; 10547 }, 10548 RaiseEndCallbackAnimationStart: function(){ 10549 if(!this.EndCallbackAnimationStart.IsEmpty()){ 10550 var args = new ASPxClientEventArgs(); 10551 this.EndCallbackAnimationStart.FireEvent(this, args); 10552 } 10553 }, 10554 RaiseBeforePronounce: function(message) { 10555 var args = new ASPxClientControlBeforePronounceEventArgs(message, this); 10556 if(!this.BeforePronounce.IsEmpty()) 10557 this.BeforePronounce.FireEvent(this, args); 10558 return args; 10559 }, 10560 SendMessageToAssistiveTechnology: function(message) { 10561 if(!this.accessibilityCompliant) 10562 return; 10563 this.PronounceMessageInternal(message, ASPx.AccessibilityPronouncerType.live); 10564 }, 10565 PronounceMessageInternal: function(messageArg, type) { 10566 var message = messageArg; 10567 if(!ASPx.Ident.IsArray(messageArg)) 10568 message = [messageArg]; 10569 var args = this.RaiseBeforePronounce(message); 10570 ASPx.AccessibilityPronouncer.Pronounce(args, type); 10571 }, 10572 IsVisible: function() { 10573 var element = this.GetMainElement(); 10574 return ASPx.IsElementVisible(element); 10575 }, 10576 IsDisplayedElement: function(element) { 10577 while(element && element.tagName != "BODY") { 10578 if(!ASPx.GetElementDisplay(element)) 10579 return false; 10580 element = element.parentNode; 10581 } 10582 return true; 10583 }, 10584 IsDisplayed: function() { 10585 return this.IsDisplayedElement(this.GetMainElement()); 10586 }, 10587 IsHiddenElement: function(element) { 10588 return element && element.offsetWidth == 0 && element.offsetHeight == 0; 10589 }, 10590 IsHidden: function() { 10591 return this.IsHiddenElement(this.GetMainElement()); 10592 }, 10593 Focus: function() { 10594 }, 10595 GetClientVisible: function(){ 10596 return this.GetVisible(); 10597 }, 10598 SetClientVisible: function(visible){ 10599 this.SetVisible(visible); 10600 }, 10601 GetVisible: function(){ 10602 return this.clientVisible; 10603 }, 10604 SetVisible: function(visible){ 10605 if(this.clientVisible != visible){ 10606 this.clientVisible = visible; 10607 ASPx.SetElementDisplay(this.GetMainElement(), visible); 10608 if(visible) { 10609 this.AdjustControl(); 10610 var mainElement = this.GetMainElement(); 10611 if(mainElement) 10612 aspxGetControlCollection().AdjustControls(mainElement); 10613 } 10614 } 10615 }, 10616 GetEnabled: function() { 10617 return this.clientEnabled; 10618 }, 10619 SetEnabled: function(enabled) { 10620 this.clientEnabled = enabled; 10621 if(ASPxClientControl.setEnabledLocked) 10622 return; 10623 else
10624 ASPxClientControl.setEnabledLocked = true; 10625 this.savedClientEnabled = enabled; 10626 aspxGetControlCollection().ProcessControlsInContainer(this.GetMainElement(), function(control) { 10627 if(ASPx.IsFunction(control.SetEnabled)) 10628 control.SetEnabled(enabled && control.savedClientEnabled); 10629 }); 10630 delete ASPxClientControl.setEnabledLocked; 10631 }, 10632 InCallback: function() { 10633 return this.requestCount > 0; 10634 }, 10635 DoBeginCallback: function(command) { 10636 this.RaiseBeginCallback(command || ""); 10637 aspxGetControlCollection().Before_WebForm_InitCallback(this.name); 10638 if(typeof(WebForm_InitCallback) != "undefined" && WebForm_InitCallback) { 10639 __theFormPostData = ""; 10640 __theFormPostCollection = [ ]; 10641 this.ClearPostBackEventInput("__EVENTTARGET"); 10642 this.ClearPostBackEventInput("__EVENTARGUMENT"); 10643 WebForm_InitCallback(); 10644 this.savedFormPostData = __theFormPostData; 10645 this.savedFormPostCollection = __theFormPostCollection; 10646 } 10647 }, 10648 ClearPostBackEventInput: function(id){ 10649 var element = ASPx.GetElementById(id); 10650 if(element != null) element.value = ""; 10651 }, 10652 PerformDataCallback: function(arg, handler) { 10653 this.CreateCustomDataCallback(arg, "", handler); 10654 }, 10655 sendCallbackViaQueue: function (prefix, arg, showLoadingPanel, context, handler) { 10656 if (!this.useCallbackQueue()) 10657 return false; 10658 var context = context || this; 10659 var token = this.callbackQueueHelper.sendCallback(ASPx.FormatCallbackArg(prefix, arg), context, handler || context.OnCallback, prefix); 10660 if (showLoadingPanel) 10661 this.callbackQueueHelper.showLoadingElements(); 10662 return token; 10663 }, 10664 CreateCallback: function (arg, command, handler) { 10665 var callbackInfo = this.CreateCallbackInfo(ASPx.CallbackType.Common, handler || null); 10666 var callbackID = this.CreateCallbackByInfo(arg, command, callbackInfo); 10667 return callbackID; 10668 }, 10669 CreateCustomDataCallback: function(arg, command, handler) { 10670 var callbackInfo = this.CreateCallbackInfo(ASPx.CallbackType.Data, handler); 10671 this.CreateCallbackByInfo(arg, command, callbackInfo); 10672 }, 10673 CreateCallbackByInfo: function(arg, command, callbackInfo) { 10674 if(!this.CanCreateCallback()) return; 10675 var callbackID; 10676 if(typeof(WebForm_DoCallback) != "undefined" && WebForm_DoCallback && ASPx.documentLoaded) 10677 callbackID = this.CreateCallbackInternal(arg, command, true, callbackInfo); 10678 else { 10679 if(!this.savedCallbacks) 10680 this.savedCallbacks = []; 10681 var callbackInfo = { arg: arg, command: command, callbackInfo: callbackInfo }; 10682 if(this.allowMultipleCallbacks) 10683 this.savedCallbacks.push(callbackInfo); 10684 else 10685 this.savedCallbacks[0] = callbackInfo; 10686 } 10687 return callbackID; 10688 }, 10689 CreateCallbackInternal: function(arg, command, viaTimer, callbackInfo) { 10690 var watcher = ASPx.ControlUpdateWatcher.getInstance(); 10691 if(watcher && !watcher.CanSendCallback(this, arg)) { 10692 this.CancelCallbackInternal(); 10693 return; 10694 } 10695 this.requestCount++; 10696 this.DoBeginCallback(command); 10697 if(typeof(arg) == "undefined") 10698 arg = ""; 10699 if(typeof(command) == "undefined") 10700 command = ""; 10701 var callbackID = this.SaveCallbackInfo(callbackInfo); 10702 if(viaTimer) 10703 window.setTimeout(function() { this.CreateCallbackCore(arg, command, callbackID); }.aspxBind(this), 0); 10704 else 10705 this.CreateCallbackCore(arg, command, callbackID); 10706 return callbackID; 10707 }, 10708 CancelCallbackInternal: function() { 10709 this.CancelCallbackCore(); 10710 this.HideLoadingElements(); 10711 }, 10712 CancelCallbackCore: function() { 10713 }, 10714 CreateCallbackCore: function(arg, command, callbackID) { 10715 var callBackMethod = this.GetCallbackMethod(command); 10716 __theFormPostData = this.savedFormPostData; 10717 __theFormPostCollection = this.savedFormPostCollection; 10718 callBackMethod.call(this, this.GetSerializedCallbackInfoByID(callbackID) + arg); 10719 }, 10720 GetCallbackMethod: function(command){ 10721 return this.callBack; 10722 }, 10723 CanCreateCallback: function() { 10724 return !this.InCallback() || (this.allowMultipleCallbacks && !this.beginCallbackA
10724nimationProcessing && !this.endCallbackAnimationProcessing); 10725 }, 10726 DoLoadCallbackScripts: function() { 10727 ASPx.ProcessScriptsAndLinks(this.name, true); 10728 }, 10729 DoEndCallback: function() { 10730 if(this.IsCallbackAnimationEnabled() && this.CheckEndCallbackAnimationNeeded()) 10731 return; 10732 this.requestCount--; 10733 if (this.requestCount < 1) 10734 this.callbackHandlersQueue.executeCallbacksHandlers(); 10735 if(this.HideLoadingPanelOnCallback() && this.requestCount < 1) 10736 this.HideLoadingElements(); 10737 if(this.isSwipeGesturesEnabled() && this.supportGestures) { 10738 ASPx.GesturesHelper.UpdateSwipeAnimationContainer(this.name); 10739 if(this.touchUIMouseScroller) 10740 this.touchUIMouseScroller.update(); 10741 } 10742 this.isCallbackAnimationPrevented = false; 10743 this.OnCallbackFinalized(); 10744 this.AssignEllipsisTooltips(); 10745 this.RaiseEndCallback(); 10746 }, 10747 DoFinalizeCallback: function() { 10748 }, 10749 OnCallbackFinalized: function() { 10750 }, 10751 AssignEllipsisTooltips: function() { }, 10752 HideLoadingPanelOnCallback: function() { 10753 return true; 10754 }, 10755 ShouldHideExistingLoadingElements: function() { 10756 return true; 10757 }, 10758 EvalCallbackResult: function(resultString){ 10759 return eval(resultString); 10760 }, 10761 DoCallback: function(result) { 10762 if(this.IsCallbackAnimationEnabled() && this.CheckBeginCallbackA
10762nimationInProgress(result)) 10763 return; 10764 result = ASPx.Str.Trim(result); 10765 if(result.indexOf(ASPx.CallbackResultPrefix) != 0) 10766 this.ProcessCallbackGeneralError(result); 10767 else { 10768 var resultObj = null; 10769 try { 10770 resultObj = this.EvalCallbackResult(result); 10771 } 10772 catch(e) { 10773 } 10774 if(resultObj) { 10775 ASPx.CacheHelper.DropCache(this); 10776 if(resultObj.redirect){ 10777 if(!ASPx.Browser.IE) 10778 window.location.href = resultObj.redirect; 10779 else { 10780 var fakeLink = document.createElement("a"); 10781 fakeLink.href = resultObj.redirect; 10782 document.body.appendChild(fakeLink); 10783 try { fakeLink.click(); } catch(e){ } 10784 } 10785 } 10786 else if(ASPx.IsExists(resultObj.generalError)){ 10787 this.ProcessCallbackGeneralError(resultObj.generalError); 10788 } 10789 else { 10790 var errorObj = resultObj.error; 10791 if(errorObj) 10792 this.ProcessCallbackError(errorObj,resultObj.id); 10793 else { 10794 if(resultObj.cp) { 10795 for(var name in resultObj.cp) 10796 this[name] = resultObj.cp[name]; 10797 } 10798 var callbackInfo = this.DequeueCallbackInfo(resultObj.id); 10799 if(callbackInfo && callbackInfo.type == ASPx.CallbackType.Data) 10800 this.ProcessCustomDataCallback(resultObj.result, callbackInfo); 10801 else { 10802 if (this.useCallbackQueue() && this.callbackQueueHelper.getCallbackInfoById(resultObj.id)) 10803 this.callbackQueueHelper.processCallback(resultObj.result, resultObj.id); 10804 else { 10805 this.ProcessCallback(resultObj.result, resultObj.id); 10806 if(callbackInfo && callbackInfo.handler) { 10807 var handlerInfo = { handler: callbackInfo.handler, result: resultObj.result.data }; 10808 this.callbackHandlersQueue.addCallbackHandler(handlerInfo); 10809 } 10810 } 10811 } 10812 } 10813 } 10814 } 10815 } 10816 this.DoLoadCallbackScripts(); 10817 }, 10818 DoCallbackError: function(result) { 10819 this.HideLoadingElements(); 10820 this.ProcessCallbackGeneralError(result); 10821 }, 10822 DoControlClick: function(evt) { 10823 this.OnControlClick(ASPx.Evt.GetEventSource(evt), evt); 10824 }, 10825 ProcessCallback: function (result, callbackId) { 10826 this.OnCallback(result, callbackId); 10827 }, 10828 ProcessCustomDataCallback: function(result, callbackInfo) { 10829 if(callbackInfo.handler != null) 10830 callbackInfo.handler(this, result); 10831 this.RaiseCustomDataCallback(result); 10832 }, 10833 RaiseCustomDataCallback: function(result) { 10834 if(!this.CustomDataCallback.IsEmpty()) { 10835 var arg = new ASPxClientCustomDataCallbackEventArgs(result); 10836 this.CustomDataCallback.FireEvent(this, arg); 10837 } 10838 }, 10839 OnCallback: function(result) { 10840 }, 10841 CreateCallbackInfo: function(type, handler) { 10842 return { type: type, handler: handler }; 10843 }, 10844 GetSerializedCallbackInfoByID: function(callbackID) { 10845 return this.GetCallbackInfoByID(callbackID).type + callbackID + ASPx.CallbackSeparator; 10846 }, 10847 SaveCallbackInfo: function(callbackInfo) { 10848 var activeCallbacksInfo = this.GetActiveCallbacksInfo(); 10849 for(var i = 0; i < activeCallbacksInfo.length; i++) { 10850 if(activeCallbacksInfo[i] == null) { 10851 activeCallbacksInfo[i] = callbackInfo; 10852 return i; 10853 } 10854 } 10855 activeCallbacksInfo.push(callbackInfo); 10856 return activeCallbacksInfo.length - 1; 10857 }, 10858 GetActiveCallbacksInfo: function() { 10859 var persistentProperties = this.GetPersistentProperties(); 10860 if(!persistentProperties.activeCallbacks) 10861 persistentProperties.activeCallbacks = [ ]; 10862 return persistentProperties.activeCallbacks; 10863 }, 10864 GetPersistentProperties: function() { 10865 var storage = _aspxGetPersistentControlPropertiesStorage(); 10866 var persistentProperties = storage[this.name]; 10867 if(!persistentProperties) { 10868 persistentProperties = { }; 10869 storage[this.name] = persistentProperties; 10870 } 10871 return persistentProperties; 10872 }, 10873 GetCallbackInfoByID: function(callbackID) { 10874 return this.GetActiveCallbacksInfo()[callbackID]; 10875 }, 10876 DequeueCallbackInfo: function(index) { 10877 var activeCallbacksInfo = this.GetActiveCallbacksInfo(); 10878 if(index < 0 || index >= activeCallbacksInfo.length) 10879 return null; 10880 var result = activeCallbacksInfo[index]; 10881 activeCallbacksInfo[index] = null; 10882 return result; 10883 }, 10884 ProcessCallbackError: function (errorObj, callbackId) { 10885 var data = ASPx.IsExists(errorObj.data) ? errorObj.data : null; 10886 var result = this.RaiseCallbackError(errorObj.message, callbackId); 10887 if(result.isHandled) 10888 this.OnCallbackErrorAfterUserHandle(result.errorMessage, data); 10889 else 10890 this.OnCallbackError(result.errorMessage, data); 10891 }, 10892 OnCallbackError: function(errorMessage, data) { 10893 if(errorMessage) 10894 ASPx.ShowErrorAlert(errorMessage); 10895 }, 10896 OnCallbackErrorAfterUserHandle: function(errorMessage, data) { 10897 }, 10898 ProcessCallbackGeneralError: function(errorMessage) { 10899 var result = this.RaiseCallbackError(errorMessage); 10900 if(!result.isHandled) 10901 this.OnCallbackGeneralError(result.errorMessage); 10902 }, 10903 OnCallbackGeneralError: function(errorMessage) { 10904 this.OnCallbackError(errorMessage, null); 10905 }, 10906 SendPostBack: function(params) { 10907 if(typeof(__doPostBack) != "undefined") 10908 __doPostBack(this.uniqueID, params); 10909 else{
10910 var form = this.GetParentForm(); 10911 if(form) form.submit(); 10912 } 10913 }, 10914 IsValidInstance: function () { 10915 return aspxGetControlCollection().GetByName(this.name) === this; 10916 }, 10917 OnDispose: function() { 10918 var varName = this.globalName; 10919 if(varName && varName !== "" && window && window[varName] && window[varName] == this){ 10920 try{ 10921 delete window[varName]; 10922 } 10923 catch(e){ } 10924 } 10925 if(this.callbackQueueHelper) 10926 this.callbackQueueHelper.detachEvents(); 10927 }, 10928 OnGlobalControlsInitialized: function(args) { 10929 }, 10930 OnGlobalBrowserWindowResized: function(args) { 10931 }, 10932 OnGlobalBeginCallback: function(args) { 10933 }, 10934 OnGlobalEndCallback: function(args) { 10935 }, 10936 OnGlobalCallbackError: function(args) { 10937 }, 10938 OnGlobalValidationCompleted: function(args) { 10939 }, 10940 DOMContentLoaded: function() { }, 10941 IsStateControllerEnabled: function() { return false; }, 10942 InitializeDOM: function() { 10943 var mainElement = this.GetMainElement(); 10944 if(mainElement) 10945 mainElement["dxinit"] = true; 10946 }, 10947 IsDOMInitialized: function() { 10948 var mainElement = this.GetMainElement(); 10949 return mainElement && mainElement["dxinit"]; 10950 }, 10951 AdjustControl: function(nestedCall) { }, 10952 OnBrowserWindowResizeInternal: function(e) { }, 10953 RegisterInControlTree: function(tree) { } 10954}); 10955ASPxClientControlBase.Cast = function(obj) { 10956 if(typeof obj == "string") 10957 return window[obj]; 10958 return obj; 10959}; 10960var persistentControlPropertiesStorage = null; 10961function _aspxGetPersistentControlPropertiesStorage() { 10962 if(persistentControlPropertiesStorage == null) 10963 persistentControlPropertiesStorage = { }; 10964 return persistentControlPropertiesStorage; 10965} 10966var ELLIPSIS_MARKER_CLASS = "dx-ellipsis"; 10967var ELLIPSIS_TOOLTIP_MARKER_ATTR = "dxEllipsisTitle"; 10968var ASPxClientControl = ASPx.CreateClass(ASPxClientControlBase, { 10969 constructor: function(name){ 10970 this.constructor.prototype.constructor.call(this, name); 10971 this.rtl = false; 10972 this.enableEllipsis = false; 10973 this.isNative = false; 10974 this.isControlCollapsed = false; 10975 this.isInsideHierarchyAdjustment = false; 10976 this.controlOwner = null; 10977 this.adjustedSizes = { }; 10978 this.dialogContentHashTable = { }; 10979 this.renderIFrameForPopupElements = false; 10980 this.widthValueSetInPercentage = false; 10981 this.heightValueSetInPercentage = false; 10982 this.verticalAlignedElements = { }; 10983 this.wrappedTextContainers = { }; 10984 this.scrollPositionState = { }; 10985 this.sizingConfig = { 10986 allowSetWidth: true, 10987 allowSetHeight: true, 10988 correction : false, 10989 adjustControl : false, 10990 supportPercentHeight: false, 10991 supportAutoHeight: false 10992 }; 10993 this.percentSizeConfig = { 10994 width: -1, 10995 height: -1, 10996 markerWidth: -1, 10997 markerHeight: -1 10998 }; 10999 }, 11000 InlineInitialize: function() { 11001 this.InitializeDOM(); 11002 ASPxClientControlBase.prototype.InlineInitialize.call(this); 11003 }, 11004 AfterCreate: function() { 11005 ASPxClientControlBase.prototype.AfterCreate.call(this); 11006 if(!this.CanInitializeAdjustmentOnDOMContentLoaded() || ASPx.IsStartupScriptsRunning()) 11007 this.InitializeAdjustment(); 11008 }, 11009 DOMContentLoaded: function() { 11010 if(this.CanInitializeAdjustmentOnDOMContentLoaded()) 11011 this.InitializeAdjustment(); 11012 }, 11013 CanInitializeAdjustmentOnDOMContentLoaded: function() { 11014 return !ASPx.Browser.IE || ASPx.Browser.Version >= 10; 11015 }, 11016 InitializeAdjustment: function() { 11017 this.UpdateAdjustmentFlags(); 11018 this.AdjustControl(); 11019 }, 11020 AfterInitialize: function() { 11021 this.AdjustControl(); 11022 ASPxClientControlBase.prototype.AfterInitialize.call(this); 11023 }, 11024 IsStateControllerEnabled: function(){ 11025 return typeof(ASPx.GetStateController) != "undefined" && ASPx.GetStateController(); 11026 }, 11027 GetWidth: function() { 11028 return this.GetMainElement().offsetWidth; 11029 }, 11030 GetHeight: function() { 11031 return this.GetMainElement().offsetHeight; 11032 }, 11033 SetWidth: function(width) { 11034 if(this.sizingConfig.allowSetWidth) 11035 this.SetSizeCore("width", width, "GetWidth", false); 11036 }, 11037 SetHeight: function(height) { 11038 if(this.sizingConfig.allowSetHeight) 11039 this.SetSizeCore("height", height, "GetHeight", false); 11040 }, 11041 SetSizeCore: function(sizePropertyName, size, getFunctionName, corrected) { 11042 if(size < 0) 11043 return; 11044 this.GetMainElement().style[sizePropertyName] = size + "px"; 11045 this.UpdateAdjustmentFlags(sizePropertyName); 11046 if(this.sizingConfig.adjustControl) 11047 this.AdjustControl(true); 11048 if(this.sizingConfig.correction && !corrected) { 11049 var realSize = this[getFunctionName](); 11050 if(realSize != size) { 11051 var correctedSize = size - (realSize - size); 11052 this.SetSizeCore(sizePropertyName, correctedSize, getFunctionName, true); 11053 } 11054 } 11055 }, 11056 AdjustControl: function(nestedCall) { 11057 if(this.IsAdjustmentRequired() && (!ASPxClientControl.adjustControl
11057Locked || nestedCall)) { 11058 ASPxClientControl.adjustControlLocked = true; 11059 try { 11060 if(!this.IsAdjustmentAllowed()) 11061 return; 11062 this.AdjustControlCore(); 11063 this.UpdateAdjustedSizes(); 11064 } 11065 finally { 11066 delete ASPxClientControl.adjustControlLocked; 11067 } 11068 } 11069 this.AssignEllipsisTooltips(); 11070 this.TryShowPhantomLoadingElements(); 11071 }, 11072 ResetControlAdjustment: function () { 11073 this.adjustedSizes = { }; 11074 }, 11075 UpdateAdjustmentFlags: function(sizeProperty) { 11076 var mainElement = this.GetMainElement(); 11077 if(mainElement) { 11078 var mainElementStyle = ASPx.GetCurrentStyle(mainElement); 11079 this.UpdatePercentSizeConfig([mainElementStyle.width, mainElement.style.width], [mainElementStyle.height, mainElement.style.height], sizeProperty); 11080 } 11081 }, 11082 UpdatePercentSizeConfig: function(widths, heights, modifyStyleProperty) { 11083 switch(modifyStyleProperty) { 11084 case "width": 11085 this.UpdatePercentWidthConfig(widths); 11086 break; 11087 case "height": 11088 this.UpdatePercentHeightConfig(heights); 11089 break; 11090 default: 11091 this.UpdatePercentWidthConfig(widths); 11092 this.UpdatePercentHeightConfig(heights); 11093 break; 11094 } 11095 this.ResetControlPercentMarkerSize(); 11096 }, 11097 UpdatePercentWidthConfig: function(widths) { 11098 this.widthValueSetInPercentage = false; 11099 for(var i = 0; i < widths.length; i++) { 11100 if(this.IsPercentageWidth(widths[i])) { 11101 this.percentSizeConfig.width = widths[i]; 11102 this.widthValueSetInPercentage = true; 11103 break; 11104 } 11105 } 11106 }, 11107 IsPercentageWidth: function(width) { return ASPx.IsPercentageSize(width); }, 11108 UpdatePercentHeightConfig: function(heights) { 11109 this.heightValueSetInPercentage = false; 11110 for(var i = 0; i < heights.length; i++) { 11111 if(ASPx.IsPercentageSize(heights[i])) { 11112 this.percentSizeConfig.height = heights[i]; 11113 this.heightValueSetInPercentage = true; 11114 break; 11115 } 11116 } 11117 }, 11118 GetAdjustedSizes: function() { 11119 var mainElement = this.GetMainElement(); 11120 if(mainElement) 11121 return { width: mainElement.offsetWidth, height: mainElement.offsetHeight }; 11122 return { width: 0, height: 0 }; 11123 }, 11124 IsAdjusted: function() { 11125 return (this.adjustedSizes.width && this.adjustedSizes.width > 0) && (this.adjustedSizes.height && this.adjustedSizes.height > 0); 11126 }, 11127 IsAdjustmentRequired: function() { 11128 if(!this.IsAdjusted()) 11129 return true; 11130 if(this.widthValueSetInPercentage) 11131 return true; 11132 if(this.heightValueSetInPercentage) 11133 return true; 11134 var sizes = this.GetAdjustedSizes(); 11135 for(var name in sizes){ 11136 if(this.adjustedSizes[name] !== sizes[name]) 11137 return true; 11138 } 11139 return false; 11140 }, 11141 IsAdjustmentAllowed: function() { 11142 var mainElement = this.GetMainElement(); 11143 return mainElement && this.IsDisplayed() && !this.IsHidden() && this.IsDOMInitialized(); 11144 }, 11145 UpdateAdjustedSizes: function() { 11146 var sizes = this.GetAdjustedSizes(); 11147 for(var name in sizes) 11148 this.adjustedSizes[name] = sizes[name]; 11149 }, 11150 AdjustControlCore: function() { 11151 }, 11152 AdjustAutoHeight: function() { 11153 }, 11154 IsControlCollapsed: function() { 11155 return this.isControlCollapsed; 11156 }, 11157 NeedCollapseControl: function() { 11158 return this.NeedCollapseControlCore() && this.IsAdjustmentRequired() && this.IsAdjustmentAllowed(); 11159 }, 11160 NeedCollapseControlCore: function() { 11161 return false; 11162 }, 11163 CollapseEditor: function() { 11164 }, 11165 CollapseControl: function() { 11166 this.SaveScrollPositions(); 11167 var mainElement = this.GetMainElement(), 11168 marker = this.GetControlPercentSizeMarker(); 11169 marker.style.height = this.heightValueSetInPercentage && this.sizingConfig.supportPercentHeight 11170 ? this.percentSizeConfig.height 11171 : (mainElement.offsetHeight + "px"); 11172 mainElement.style.display = "none"; 11173 this.isControlCollapsed = true; 11174 }, 11175 ExpandControl: function() { 11176 var mainElement = this.GetMainElement(); 11177 mainElement.style.display = ""; 11178 this.GetControlPercentSizeMarker().style.height = "0px"; 11179 this.isControlCollapsed = false; 11180 this.RestoreScrollPositions(); 11181 }, 11182 CanCauseReadjustment: function() { 11183 return this.NeedCollapseControlCore(); 11184 }, 11185 IsExpandableByAdjustment: function() { 11186 return false; 11187 }, 11188 HasFixedPosition: function() { 11189 return false; 11190 }, 11191 SaveScrollPositions: function() { 11192 var mainElement = this.GetMainElement(); 11193 this.scrollPositionState.outer = ASPx.GetOuterScrollPosition(mainElement.parentNode); 11194 this.scrollPositionState.inner = ASPx.GetInnerScrollPositions(mainElement); 11195 }, 11196 RestoreScrollPositions: function() { 11197 ASPx.RestoreOuterScrollPosition(this.scrollPositionState.outer); 11198 ASPx.RestoreInnerScrollPositions(this.scrollPositionState.inner); 11199 }, 11200 GetControlPercentSizeMarker: function() { 11201 if(this.percentSizeMarker === undefined) { 11202 this.percentSizeMarker = ASPx.CreateHtmlElementFromString("<div style='height:0px;font-size:0px;line-height:0;width:100%;'></div>"); 11203 ASPx.InsertElementAfter(this.percentSizeMarker, this.GetMainElement()); 11204 } 11205 return this.percentSizeMarker; 11206 }, 11207 KeepControlPercentSizeMarker: function(needCollapse, needCalculateHeight) { 11208 var mainElement = this.GetMainElement(), 11209 marker = this.GetControlPercentSizeMarker(), 11210 markerHeight; 11211 if(needCollapse) 11212 this.CollapseControl(); 11213 if(this.widthValueSetInPercentage && marker.style.width !== this.percentSizeConfig.width) 11214 marker.style.width = this.percentSizeConfig.width; 11215 if(needCalculateHeight) { 11216 if(this.IsControlCollapsed()) 11217 markerHeight = marker.style.height; 11218 marker.style.height = this.percentSizeConfig.height; 11219 } 11220 this.percentSizeConfig.markerWidth = marker.offsetWidth; 11221 if(needCalculateHeight) { 11222 this.percentSizeConfig.markerHeight = marker.offsetHeight; 11223 if(this.IsControlCollapsed()) 11224 marker.style.height = markerHeight; 11225 else 11226 marker.style.height = "0px"; 11227 } 11228 if(needCollapse) 11229 this.ExpandControl(); 11230 }, 11231 ResetControlPercentMarkerSize: function() { 11232 this.percentSizeConfig.markerWidth = -1; 11233 this.percentSizeConfig.markerHeight = -1; 11234 }, 11235 GetControlPercentMarkerSize: function(hideControl, force) { 11236 var needCalculateHeight = this.heightValueSetInPercentage && this.sizingConfig.supp
11236ortPercentHeight; 11237 if(force || this.percentSizeConfig.markerWidth < 1 || (needCalculateHeight && this.percentSizeConfig.markerHeight < 1)) 11238 this.KeepControlPercentSizeMarker(hideControl && !this.IsControlCollapsed(), needCalculateHeight); 11239 return { 11240 width: this.percentSizeConfig.markerWidth, 11241 height: this.percentSizeConfig.markerHeight 11242 }; 11243 }, 11244 AssignEllipsisTooltips: function() { 11245 if(this.RequireAssignTooltips()) 11246 this.AssignEllipsisTooltipsCore(); 11247 }, 11248 AssignEllipsisTooltipsCore: function(rootElement, reassingExistingTooltips) { 11249 var requirePaddingManipulation = ASPx.Browser.IE || ASPx.Browser.Edge || ASPx.Browser.Firefox; 11250 rootElement = rootElement || this.GetMainElement(); 11251 var nodes = this.GetEllipsisNodes(rootElement); 11252 var nodeInfos = []; 11253 var nodesCount = nodes.length; 11254 for(var i = 0; i < nodesCount; i++) { 11255 var node = nodes[i]; 11256 var info = { node: node }; 11257 if(requirePaddingManipulation) { 11258 var style = ASPx.GetCurrentStyle(node); 11259 info.paddingLeft = node.style.paddingLeft; 11260 info.totalPadding = ASPx.GetLeftRightPaddings(node, style); 11261 } 11262 nodeInfos.push(info); 11263 } 11264 if(requirePaddingManipulation) { 11265 for(var i = 0; i < nodesCount; i++) { 11266 var info = nodeInfos[i]; 11267 ASPx.SetStyles(info.node, { paddingLeft: info.totalPadding }, true); 11268 } 11269 } 11270 for(var i = 0; i < nodesCount; i++) { 11271 var info = nodeInfos[i]; 11272 var node = info.node; 11273 info.isTextShortened = node.scrollWidth > node.clientWidth; 11274 info.hasTitle = !!node.title; 11275 if(!info.hasTitle || reassingExistingTooltips) 11276 info.title = this.GetEllipsisTooltipText(node); 11277 } 11278 for(var i = 0; i < nodesCount; i++) { 11279 var info = nodeInfos[i]; 11280 var node = info.node; 11281 if(info.isTextShortened && info.title) { 11282 ASPx.Attr.SetAttribute(node, "title", info.title); 11283 ASPx.Attr.SetAttribute(node, ELLIPSIS_TOOLTIP_MARKER_ATTR, true); 11284 } 11285 if(!info.isTextShortened && info.hasTitle) 11286 ASPx.Attr.RemoveAttribute(node, "title"); 11287 } 11288 if(requirePaddingManipulation) { 11289 for(var i = 0; i < nodesCount; i++) { 11290 var info = nodeInfos[i]; 11291 var node = info.node; 11292 node.style.paddingLeft = info.paddingLeft; 11293 } 11294 } 11295 }, 11296 GetEllipsisNodes: function(element) { 11297 var ellipsibleNodes = ASPx.Data.CollectionToArray(ASPx.GetNodesByClassName(element, ELLIPSIS_MARKER_CLASS)); 11298 if(ASPx.ElementHasCssClass(element, ELLIPSIS_MARKER_CLASS)) 11299 ellipsibleNodes.push(element); 11300 return ellipsibleNodes.filter(function(node) { 11301 return !ASPx.Attr.IsExistsAttribute(node, "title") || ASPx.Attr.IsExistsAttribute(node, ELLIPSIS_TOOLTIP_MARKER_ATTR); 11302 }); 11303 }, 11304 GetEllipsisTooltipText: function(element) { 11305 if(element && ASPx.IsExists(element.innerText)) 11306 return element.innerText; 11307 return ASPx.GetInnerText(element); 11308 }, 11309 RequireAssignTooltips: function() { 11310 return this.enableEllipsis && !ASPx.Browser.MobileUI; 11311 }, 11312 OnBrowserWindowResize: function(e) { 11313 }, 11314 OnBrowserWindowResizeInternal: function(e){ 11315 if(this.BrowserWindowResizeSubscriber()) 11316 this.OnBrowserWindowResize(e); 11317 }, 11318 BrowserWindowResizeSubscriber: function() { 11319 return this.widthValueSetInPercentage || !this.IsAdjusted(); 11320 }, 11321 ShrinkWrappedText: function(getElements, key, reCorrect) { 11322 if(!ASPx.Browser.Safari) return; 11323 var elements = ASPx.CacheHelper.GetCachedElements(this, key, getElements, this.wrappedTextContainers); 11324 for(var i = 0; i < elements.length; i++) 11325 this.ShrinkWrappedTextInContainer(elements[i], reCorrect); 11326 }, 11327 ShrinkWrappedTextInContainer: function(container, reCorrect) { 11328 if(!ASPx.Browser.Safari || !container || (container.dxWrappedTextShrinked && !reCorrect) || container.offsetWidth === 0) return; 11329 ASPx.ShrinkWrappedTextInContainer(container); 11330 container.dxWrappedTextShrinked = true; 11331 }, 11332 CorrectWrappedText: function(getElements, key, reCorrect) { 11333 var elements = ASPx.CacheHelper.GetCachedElements(this, key, getElements, this.wrappedTextContainers); 11334 for(var i = 0; i < elements.length; i++) 11335 this.CorrectWrappedTextInContainer(elements[i], reCorrect); 11336 }, 11337 CorrectWrappedTextInContainer: function(container, reCorrect) { 11338 if(!container || (container.dxWrappedTextCorrected && !reCorrect) || container.offsetWidth === 0) return; 11339 ASPx.AdjustWrappedTextInContainer(container); 11340 container.dxWrappedTextCorrected = true; 11341 }, 11342 CorrectVerticalAlignment: function(alignMethod, getElements, key, reAlign) { 11343 var elements = ASPx.CacheHelper.GetCachedElements(this, key, getElements, this.verticalAlignedElements); 11344 for(var i = 0; i < elements.length; i++) 11345 this.CorrectElementVerticalAlignment(alignMethod, elements[i], reAlign); 11346 }, 11347 CorrectElementVerticalAlignment: function(alignMethod, element, reAlign) { 11348 if(!element || (element.dxVerticalAligned && !reAlign) || element.offsetHeight === 0) return; 11349 alignMethod(element); 11350 element.dxVerticalAligned = true; 11351 }, 11352 ClearVerticalAlignedElementsCache: function() { 11353 ASPx.CacheHelper.DropCache(this.verticalAlignedElements); 11354 }, 11355 ClearWrappedTextContainersCache: function() {
11356 ASPx.CacheHelper.DropCache(this.wrappedTextContainers); 11357 }, 11358 AdjustPagerControls: function() { 11359 if(typeof(ASPx.GetPagersCollection) != "undefined") 11360 ASPx.GetPagersCollection().AdjustControls(this.GetMainElement()); 11361 }, 11362 RegisterInControlTree: function(tree) { 11363 var mainElement = this.GetMainElement(); 11364 if(mainElement && mainElement.id) 11365 tree.createNode(mainElement.id, this); 11366 }, 11367 GetItemElementName: function(element) { 11368 var name = ""; 11369 if(element.id) 11370 name = element.id.substring(this.name.length + 1); 11371 return name; 11372 }, 11373 GetLinkElement: function(element) { 11374 if(element == null) return null; 11375 return (element.tagName == "A") ? element : ASPx.GetNodeByTagName(element, "A", 0); 11376 }, 11377 GetInternalHyperlinkElement: function(parentElement, index) { 11378 var element = ASPx.GetNodeByTagName(parentElement, "A", index); 11379 if(element == null) 11380 element = ASPx.GetNodeByTagName(parentElement, "SPAN", index); 11381 return element; 11382 }, 11383 OnControlClick: function(clickedElement, htmlEvent) { 11384 } 11385}); 11386ASPxClientControl.Cast = function(obj) { 11387 if(typeof obj == "string") 11388 return window[obj]; 11389 return obj; 11390}; 11391ASPxClientControl.AdjustControls = function(container, collapseControls){ 11392 aspxGetControlCollection().AdjustControls(container, collapseControls); 11393}; 11394ASPxClientControl.GetControlCollection = function(){ 11395 return aspxGetControlCollection(); 11396}
11397ASPxClientControl.LeadingAfterInitCallConsts = { 11398 None: 0, 11399 Direct: 1, 11400 Reverse: 2 11401}; 11402var ASPxClientComponent = ASPx.CreateClass(ASPxClientControl, { 11403 constructor: function (name) { 11404 this.constructor.prototype.constructor.call(this, name); 11405 }, 11406 IsDOMDisposed: function() { 11407 return false; 11408 } 11409}); 11410var ASPxClientControlCollection = ASPx.CreateClass(ASPx.CollectionBase, { 11411 constructor: function(){ 11412 this.constructor.prototype.constructor.call(this); 11413 this.prevWndWidth = ""; 11414 this.prevWndHeight = ""; 11415 this.requestCountInternal = 0; 11416 this.BeforeInitCallback = new ASPxClientEvent(); 11417 this.ControlsInitialized = new ASPxClientEvent(); 11418 this.BrowserWindowResized = new ASPxClientEvent(); 11419 this.BeginCallback = new ASPxClientEvent(); 11420 this.EndCallback = new ASPxClientEvent(); 11421 this.CallbackError = new ASPxClientEvent(); 11422 this.ValidationCompleted = new ASPxClientEvent(); 11423 aspxGetControlCollectionCollection().Add(this); 11424 }, 11425 Add: function(element) { 11426 var existsElement = this.Get(element.name); 11427 if(existsElement && existsElement !== element) 11428 this.Remove(existsElement); 11429 ASPx.CollectionBase.prototype.Add.call(this, element.name, element); 11430 }, 11431 Remove: function(element) { 11432 if(element && element instanceof ASPxClientControl) 11433 element.OnDispose(); 11434 ASPx.CollectionBase.prototype.Remove.call(this, element.name); 11435 }, 11436 GetGlobal: function(name) { 11437 var result = window[name]; 11438 return result && Ident.IsASPxClientControl(result) 11439 ? result 11440 : null; 11441 }, 11442 GetByName: function(name){ 11443 return this.Get(name) || this.GetGlobal(name); 11444 }, 11445 GetCollectionType: function(){ 11446 return ASPxClientControlCollection.BaseCollectionType; 11447 }, 11448 GetControlsByPredicate: function(predicate) { 11449 var result = []; 11450 this.ForEachControl(function(control) { 11451 if(!predicate || predicate(control)) 11452 result.push(control); 11453 }); 11454 return result; 11455 }, 11456 GetControlsByType: function(type) { 11457 return this.GetControlsByPredicate(function(control) { 11458 return type && (control instanceof type); 11459 }); 11460 }, 11461 ForEachControl: function(action, context) { 11462 context = context || this; 11463 this.elementsMap.forEachEntry(function(name, control) { 11464 if(Ident.IsASPxClientControl(control)) 11465 return action.call(context, control); 11466 }, context); 11467 }, 11468 forEachControlHierarchy: function(container, context, collapseControls, processFunc) { 11469 context = context || this; 11470 var controlTree = new ASPx.ControlTree(this, container); 11471 controlTree.forEachControl(collapseControls, function(control) { 11472 processFunc.call(context, control); 11473 }); 11474 }, 11475 AdjustControls: function(container, collapseControls) { 11476 container = container || null; 11477 window.setTimeout(function() { 11478 this.AdjustControlsCore(container, collapseControls); 11479 }.aspxBind(this), 0); 11480 }, 11481 AdjustControlsCore: function(container, collapseControls) { 11482 this.forEachControlHierarchy(container, this, collapseControls, function(control) { 11483 control.AdjustControl(); 11484 }); 11485 }, 11486 CollapseControls: function(container) { 11487 this.ProcessControlsInContainer(container, function(control) { 11488 if(control.isASPxClientEdit) 11489 control.CollapseEditor(); 11490 else if(!!window.ASPxClientRibbon && control instanceof ASPxClientRibbon) 11491 control.CollapseControl(); 11492 }); 11493 }, 11494 AtlasInitialize: function(isCallback) { 11495 if(ASPx.Browser.IE && ASPx.Browser.MajorVersion < 9) { 11496 var func = function() { 11497 if(_aspxIsLinksLoaded()) 11498 ASPx.ProcessScriptsAndLinks("", isCallback); 11499 else 11500 setTimeout(func, 100); 11501 } 11502 func(); 11503 } 11504 else 11505 ASPx.ProcessScriptsAndLinks("", isCallback); 11506 }, 11507 DOMContentLoaded: function() { 11508 this.ForEachControl(function(control){ 11509 control.DOMContentLoaded(); 11510 }); 11511 }, 11512 Initialize: function() { 11513 ASPx.GetPostHandler().Post.AddHandler( 11514 function(s, e) { this.OnPost(e); }.aspxBind(this) 11515 ); 11516 ASPx.GetPostHandler().PostFinalization.AddHandler( 11517 function(s, e) { this.OnPostFinalization(e); }.aspxBind(this) 11518 ); 11519 this.InitializeElements(false ); 11520 if(typeof(Sys) != "undefined" && typeof(Sys.Application) != "undefined") { 11521 var checkIsInitialized = function() { 11522 if(Sys.Application.get_isInitialized()) 11523 Sys.Application.add_load(aspxCAInit); 11524 else 11525 setTimeout(checkIsInitialized, 0); 11526 } 11527 checkIsInitialized(); 11528 } 11529 this.InitWindowSizeCache(); 11530 }, 11531 InitializeElements: function(isCallback) { 11532 this.ForEachControl(function(control){ 11533 if(!control.isInitialized) 11534 control.Initialize(); 11535 }); 11536 this.AfterInitializeElementsLeadingCall(); 11537 this.AfterInitializeElements(); 11538 this.RaiseControlsInitialized(isCallback); 11539 }, 11540 AfterInitializeElementsLeadingCall: function() { 11541 var controls = {}; 11542 controls[ASPxClientControl.LeadingAfterInitCallConsts.Direct] = [];
11543 controls[ASPxClientControl.LeadingAfterInitCallConsts.Reverse] = []; 11544 this.ForEachControl(function(control) { 11545 if(control.leadingAfterInitCall != ASPxClientControl.LeadingAfterInitCallConsts.None && !control.isInitialized) 11546 controls[control.leadingAfterInitCall].push(control); 11547 }); 11548 var directInitControls = controls[ASPxClientControl.LeadingAfterInitCallConsts.Direct], 11549 reverseInitControls = controls[ASPxClientControl.LeadingAfterInitCallConsts.Reverse]; 11550 for(var i = 0, control; control = directInitControls[i]; i++) 11551 control.AfterInitialize(); 11552 for(var i = reverseInitControls.length - 1, control; control = reverseInitControls[i]; i--) 11553 control.AfterInitialize(); 11554 }, 11555 AfterInitializeElements: function() { 11556 this.ForEachControl(function(control) { 11557 if(control.leadingAfterInitCall == ASPxClientControl.LeadingAfterInitCallConsts.None && !control.isInitialized) 11558 control.AfterInitialize(); 11559 }); 11560 ASPx.RippleHelper.Init(); 11561 }, 11562 DoFinalizeCallback: function() { 11563 this.ForEachControl(function(control){ 11564 control.DoFinalizeCallback(); 11565 }); 11566 }, 11567 ProcessControlsInContainer: function(container, processFunc) { 11568 this.ForEachControl(function(control){ 11569 if(!container || this.IsControlInContainer(container, control)) 11570 processFunc(control); 11571 }); 11572 }, 11573 IsControlInContainer: function(container, control) { 11574 if(control.GetMainElement) { 11575 var mainElement = control.GetMainElement(); 11576 if(mainElement && (mainElement != container)) { 11577 if(ASPx.GetIsParent(container, mainElement)) 11578 return true; 11579 } 11580 } 11581 return false; 11582 }, 11583 RaiseControlsInitialized: function(isCallback) { 11584 if(typeof(isCallback) == "undefined") 11585 isCallback = true; 11586 var args = new ASPxClientControlsInitializedEventArgs(isCallback); 11587 if(!this.ControlsInitialized.IsEmpty()) 11588 this.ControlsInitialized.FireEvent(this, args); 11589 this.ForEachControl(function(control){ 11590 control.OnGlobalControlsInitialized(args); 11591 }); 11592 }, 11593 RaiseBrowserWindowResized: function() { 11594 var args = new ASPxClientEventArgs(); 11595 if(!this.BrowserWindowResized.IsEmpty()) 11596 this.BrowserWindowResized.FireEvent(this, args); 11597 this.ForEachControl(function(control){ 11598 control.OnGlobalBrowserWindowResized(args); 11599 }); 11600 }, 11601 RaiseBeginCallback: function (control, command) { 11602 var args = new ASPxClientGlobalBeginCallbackEventArgs(control, command); 11603 if(!this.BeginCallback.IsEmpty()) 11604 this.BeginCallback.FireEvent(this, args); 11605 this.ForEachControl(function(control){ 11606 control.OnGlobalBeginCallback(args); 11607 }); 11608 this.IncrementRequestCount(); 11609 }, 11610 RaiseEndCallback: function (control) { 11611 var args = new ASPxClientGlobalEndCallbackEventArgs(control); 11612 if (!this.EndCallback.IsEmpty()) 11613 this.EndCallback.FireEvent(this, args); 11614 this.ForEachControl(function(control){ 11615 control.OnGlobalEndCallback(args); 11616 }); 11617 this.DecrementRequestCount(); 11618 }, 11619 InCallback: function() { 11620 return this.requestCountInternal > 0; 11621 }, 11622 RaiseCallbackError: function (control, message, callbackId) { 11623 var args = new ASPxClientGlobalCallbackErrorEventArgs(control, message, callbackId); 11624 if (!this.CallbackError.IsEmpty()) 11625 this.CallbackError.FireEvent(this, args); 11626 this.ForEachControl(function(control){ 11627 control.OnGlobalCallbackError(args); 11628 }); 11629 if(args.handled) 11630 return { isHandled: true, errorMessage: args.message }; 11631 return { isHandled: false, errorMessage: message }; 11632 }, 11633 RaiseValidationCompleted: function (container, validationGroup, invisibleControlsValidated, isValid, firstInvalidControl, firstVisibleInvalidControl) { 11634 var args = new ASPxClientValidationCompletedEventArgs(container, validationGroup, invisibleControlsValidated, isValid, firstInvalidControl, firstVisibleInvalidControl); 11635 if (!this.ValidationCompleted.IsEmpty()) 11636 this.ValidationCompleted.FireEvent(this, args); 11637 this.ForEachControl(function(control){ 11638 control.OnGlobalValidationCompleted(args); 11639 }); 11640 }, 11641 Before_WebForm_InitCallback: function(callbackOwnerID){ 11642 var args = new BeforeInitCallbackEventArgs(callbackOwnerID); 11643 this.BeforeInitCallback.FireEvent(this, args); 11644 }, 11645 InitWindowSizeCache: function(){ 11646 this.prevWndWidth = ASPx.GetDocumentClientWidth(); 11647 this.prevWndHeight = ASPx.GetDocumentClientHeight(); 11648 }, 11649 OnBrowserWindowResize: function(evt){ 11650 var shouldIgnoreNestedEvents = ASPx.Browser.IE && ASPx.Browser.MajorVersion == 8; 11651 if(shouldIgnoreNestedEvents) { 11652 if(this.prevWndWidth === "" || this.prevWndHeight === "" || this.browserWindowResizeLocked) 11653 return; 11654 this.browserWindowResizeLocked = true; 11655 } 11656 this.OnBrowserWindowResizeCore(evt); 11657 if(shouldIgnoreNestedEvents) 11658 this.browserWindowResizeLocked = false; 11659 }, 11660 OnBrowserWindowResizeCore: function(htmlEvent){ 11661 var args = this.CreateOnBrowserWindowResizeEventArgs(htmlEvent); 11662 if(this.CalculateIsBrowserWindowSizeChanged()) { 11663 this.forEachControlHierarchy(null, this, true, function(control) { 11664 if(control.IsDOMInitialized()) 11665 control.OnBrowserWindowResizeInternal(args); 11666 }); 11667 this.RaiseBrowserWindowResized(); 11668 } 11669 }, 11670 CreateOnBrowserWindowResizeEventArgs: function(htmlEvent){ 11671 return { 11672 htmlEvent: htmlEvent, 11673 wndWidth: ASPx.GetDocumentClientWidth(), 11674 wndHeight: ASPx.GetDocumentClientHeight(), 11675 prevWndWidth: this.prevWndWidth, 11676 prevWndHeight: this.prevWndHeight 11677 } 11678 }, 11679 CalculateIsBrowserWindowSizeChanged: function(){ 11680 var wndWidth = ASPx.GetDocumentClientWidth(); 11681 var wndHeight = ASPx.GetDocumentClientHeight(); 11682 var isBrowserWindowSizeChanged = (this.prevWndWidth != wndWidth) || (this.prevWndHeight != wndHeight); 11683 if(isBrowserWindowSizeChanged){ 11684 this.prevWndWidth = wndWidth; 11685 this.prevWndHeight = wndHeight; 11686 return true; 11687 } 11688 return false; 11689 }, 11690 OnPost: function(args){ 11691 this.ForEachControl(function(control) { 11692 control.OnPost(args); 11693 }, null); 11694 }, 11695 OnPostFinalization: function(args){ 11696 this.ForEachControl(function(control) { 11697 control.OnPostFinalization(args); 11698 }, null); 11699 }, 11700 IncrementRequestCount: function() { 11701 this.requestCountInternal++; 11702 }, 11703 DecrementRequestCount: function() { 11704 this.requestCountInternal--; 11705 }, 11706 ResetRequestCount: function() { 11707 this.requestCountInternal = 0; 11708 } 11709}); 11710ASPxClientControlCollection.BaseCollectionType = "Control"; 11711var controlCollection = null; 11712function aspxGetControlCollection(){ 11713 if(controlCollection == null) 11714 controlCollection = new ASPxClientControlCollection(); 11715 return controlCollection; 11716} 11717var ControlCollectionCollection = ASPx.CreateClass(ASPx.CollectionBase, { 11718 constructor: function(){ 11719 this.constructor.prototype.constructor.call(this); 11720 }, 11721 Add: function(element) { 11722 var key = element.GetCollectionType(); 11723 if(!key) throw "The collection type isn't specified."; 11724 if(this.Get(key)) throw "The collection with type='" + key + "' already exists.";
11725 ASPx.CollectionBase.prototype.Add.call(this, key, element); 11726 }, 11727 RemoveDisposedControls: function(){ 11728 var baseCollection = this.Get(ASPxClientControlCollection.BaseCollectionType); 11729 var disposedControls = []; 11730 baseCollection.elementsMap.forEachEntry(function(name, control) { 11731 if(!ASPx.Ident.IsASPxClientControl(control)) return; 11732 if(control.IsDOMDisposed()) 11733 disposedControls.push(control); 11734 }); 11735 for(var i = 0; i < disposedControls.length; i++) { 11736 this.elementsMap.forEachEntry(function(key, collection) { 11737 if(ASPx.Ident.IsASPxClientCollection(collection)) 11738 collection.Remove(disposedControls[i]); 11739 }); 11740 } 11741 } 11742}); 11743var controlCollectionCollection = null; 11744function aspxGetControlCollectionCollection(){ 11745 if(controlCollectionCollection == null) 11746 controlCollectionCollection = new ControlCollectionCollection(); 11747 return controlCollectionCollection; 11748} 11749var AriaDescriptionAttributes = { 11750 Role: "0", 11751 AriaLabel: "1", 11752 TabIndex: "2", 11753 AriaOwns: "3", 11754 AriaDescribedBy: "4", 11755 AriaDisabled: "5", 11756 AriaHasPopup: "6", 11757 AriaLevel: "7" 11758}; 11759var AriaDescriptor = ASPx.CreateClass(null, { 11760 constructor: function(ownerControl, description) { 11761 this.ownerControl = ownerControl; 11762 this.rootElement = ownerControl.GetMainElement(); 11763 this.description = description; 11764 }, 11765 setDescription: function(name, argList) { 11766 var description = this.findChildDescription(name); 11767 if(description) { 11768 var elements = name ? this.rootElement.querySelectorAll(this.getDescriptionSelector(description)) : [this.rootElement]; 11769 for(var i = 0; i < elements.length; i++) 11770 this.applyDescriptionToElement(elements[i], description, argList[i] || argList[0]); 11771 } 11772 }, 11773 getDescriptionName: function(description) { 11774 return description.n; 11775 }, 11776 getDescriptionSelector: function(description) { 11777 return description.s; 11778 }, 11779 findChildDescription: function(name) { 11780 if(name === this.getDescriptionName(this.description)) 11781 return this.description; 11782 var childCollection = this.description.c || []; 11783 for(var i = 0; i < childCollection.length; i++) { 11784 var childDescription = childCollection[i]; 11785 if(this.getDescriptionName(childDescription) === name) 11786 return childDescription; 11787 } 11788 return null; 11789 }, 11790 applyDescriptionToElement: function(element, description, args) { 11791 if(!description || !element) 11792 return; 11793 this.trySetAriaOwnsAttribute(element, description); 11794 this.trySetAriaDescribedByAttribute(element, description); 11795 this.trySetAttribute(element, description, AriaDescriptionAttributes.Role, "role"); 11796 this.trySetAttribute(element, description, AriaDescriptionAttributes.TabIndex, "tabindex"); 11797 this.trySetAttribute(element, description, AriaDescriptionAttributes.AriaLevel, "aria-level"); 11798 this.executeOnDescription(description, AriaDescriptionAttributes.AriaLabel, function(value) { 11799 ASPx.Attr.SetAttribute(element, "aria-label", ASPx.Str.ApplyReplacement(value, args)); 11800 }); 11801 this.executeOnDescription(description, AriaDescriptionAttributes.AriaDisabled, function(value) { 11802 ASPx.Attr.SetAttribute(element, "aria-disabled", !!value); 11803 }); 11804 this.executeOnDescription(description, AriaDescriptionAttributes.AriaHasPopup, function(value) { 11805 ASPx.Attr.SetAttribute(element, "aria-haspopup", !!value); 11806 }); 11807 }, 11808 trySetAriaDescribedByAttribute: function(element, description) { 11809 this.executeOnDescription(description, AriaDescriptionAttributes.AriaDescribedBy, function(selectorInfo) { 11810 var descriptor = this.getNodesBySelector(element, selectorInfo.descriptorSelector)[0]; 11811 var target = this.getNodesBySelector(element, selectorInfo.targetSelector)[0]; 11812 if(!target || !descriptor) 11813 return; 11814 ASPx.Attr.SetAttribute(target, "aria-describedby", this.getNodeId(descriptor)); 11815 }); 11816 }, 11817 trySetAriaOwnsAttribute: function(element, description) { 11818 this.executeOnDescription(description, AriaDescriptionAttributes.AriaOwns, function(selector) { 11819 var ownedNodes = this.getNodesBySelector(element, selector); 11820 var ariaOwnsAttributeValue = ""; 11821 for(var i = 0; i < ownedNodes.length; i++) 11822 ariaOwnsAttributeValue += (this.getNodeId(ownedNodes[i]) + (i != ownedNodes.length - 1 ? " " : "")); 11823 ASPx.Attr.SetAttribute(element, "aria-owns", ariaOwnsAttributeValue); 11824 }); 11825 }, 11826 trySetAttribute: function(element, description, ariaAttribute, attributeName) { 11827 this.executeOnDescription(description, ariaAttribute, function(value) { 11828 ASPx.Attr.SetAttribute(element, attributeName, description[ariaAttribute]); 11829 }); 11830 }, 11831 executeOnDescription: function(description, ariaDescAttr, callback) { 11832 var descInfo = description[ariaDescAttr]; 11833 if(ASPx.IsExists(descInfo)) 11834 callback.aspxBind(this)(descInfo); 11835 }, 11836 getNodesBySelector: function(element, selector) {
11837 var id = element.id || ""; 11838 var childNodes = element.querySelectorAll("#" + this.getNodeId(element) + " > " + selector); 11839 ASPx.Attr.SetOrRemoveAttribute(element, "id", id); 11840 return childNodes; 11841 }, 11842 getNodeId: function(node) { 11843 if(!node.id) 11844 node.id = this.createRandomId(); 11845 return node.id; 11846 }, 11847 createRandomId: function() { 11848 return "r" + ASPx.CreateGuid(); 11849 } 11850}); 11851PagerCommands = { 11852 Next : "PBN", 11853 Prev : "PBP", 11854 Last : "PBL", 11855 First : "PBF", 11856 PageNumber : "PN", 11857 PageSize : "PSP" 11858}; 11859ASPx.Callback = function(result, context){ 11860 var collection = aspxGetControlCollection(); 11861 collection.DoFinalizeCallback(); 11862 var control = collection.Get(context); 11863 if(control != null) 11864 control.DoCallback(result); 11865 ASPx.RippleHelper.ReInit(); 11866} 11867ASPx.CallbackError = function(result, context){ 11868 var control = aspxGetControlCollection().Get(context); 11869 if(control != null) 11870 control.DoCallbackError(result, false); 11871} 11872ASPx.CClick = function(name, evt) { 11873 var control = aspxGetControlCollection().Get(name); 11874 if(control != null) control.DoControlClick(evt); 11875} 11876function aspxCAInit() { 11877 var isAppInit = typeof(Sys$_Application$initialize) != "undefined" && 11878 ASPx.FunctionIsInCallstack(arguments.callee, Sys$_Application$initialize, 10 ); 11879 aspxGetControlCollection().AtlasInitialize(!isAppInit); 11880} 11881ASPx.Evt.AttachEventToElement(window, "resize", aspxGlobalWindowResize); 11882function aspxGlobalWindowResize(evt){ 11883 aspxGetControlCollection().OnBrowserWindowResize(evt); 11884} 11885ASPx.Evt.AttachEventToElement(window.document, "DOMContentLoaded", aspxClassesDOMContentLoaded); 11886function aspxClassesDOMContentLoaded(evt){ 11887 aspxGetControlCollection().DOMContentLoaded(); 11888} 11889ASPx.GetControlCollection = aspxGetControlCollection; 11890ASPx.GetControlCollectionCollection = aspxGetControlCollectionCollection; 11891ASPx.GetPersistentControlPropertiesStorage = _aspxGetPersistentControlPropertiesStorage; 11892ASPx.PagerCommands = PagerCommands; 11893window.ASPxClientBeginCallbackEventArgs = ASPxClientBeginCallbackEventArgs; 11894window.ASPxClientGlobalBeginCallbackEventArgs = ASPxClientGlobalBeginCallbackEventArgs; 11895window.ASPxClientEndCallbackEventArgs = ASPxClientEndCallbackEventArgs; 11896window.ASPxClientGlobalEndCallbackEventArgs = ASPxClientGlobalEndCallbackEventArgs; 11897window.ASPxClientCallbackErrorEventArgs = ASPxClientCallbackErrorEventArgs; 11898window.ASPxClientGlobalCallbackErrorEventArgs = ASPxClientGlobalCallbackErrorEventArgs; 11899window.ASPxClientCustomDataCallbackEventArgs = ASPxClientCustomDataCallbackEventArgs; 11900window.ASPxClientValidationCompletedEventArgs = ASPxClientValidationCompletedEventArgs; 11901window.ASPxClientControlsInitializedEventArgs = ASPxClientControlsInitializedEventArgs; 11902window.ASPxClientControlBeforePronounceEventArgs = ASPxClientControlBeforePronounceEventArgs; 11903window.ASPxClientControlCollection = ASPxClientControlCollection; 11904window.ASPxClientControlBase = ASPxClientControlBase; 11905window.ASPxClientControl = ASPxClientControl; 11906window.ASPxClientComponent = ASPxClientComponent; 11907})(); 11908(function () { 11909 var PositionAnimationTransition = ASPx.CreateClass(ASPx.AnimationTransitionBase, { 11910 constructor: function (element, options) { 11911 this.constructor.prototype.constructor.call(this, element, options); 11912 this.direction = options.direction; 11913 this.animationTransition = this.createAnimationTransition(); 11914 AnimationHelper.appendWKAnimationClassNameIfRequired(this.element); 11915 }, 11916 Start: function (to) { 11917 var from = this.GetValue(); 11918 if(ASPx.AnimationUtils.CanUseCssTransform()) { 11919 from = this.convertPosToCssTransformPos(from); 11920 to = this.convertPosToCssTransformPos(to); 11921 } 11922 this.animationTransition.Start(from, to); 11923 }, 11924 SetValue: function (value) { 11925 ASPx.AnimationUtils.SetTransformValue(this.element, value, this.direction == AnimationHelper.SLIDE_VERTICAL_DIRECTION); 11926 }, 11927 GetValue: function () { 11928 return ASPx.AnimationUtils.GetTransformValue(this.element, this.direction == AnimationHelper.SLIDE_VERTICAL_DIRECTION); 11929 }, 11930 createAnimationTransition: function () { 11931 var transition = ASPx.AnimationUtils.CanUseCssTransform() ? this.createTransformAnimationTransition() : this.createPositionAnimationTransition(); 11932 transition.transition = ASPx.AnimationConstants.Transitions.POW_EASE_OUT; 11933 return transition; 11934 }, 11935 createTransformAnimationTransition: function () { 11936 return ASPx.AnimationUtils.createCssAnimationTransition(this.element, { 11937 property: ASPx.AnimationUtils.CanUseCssTransform(), 11938 duration: this.duration, 11939 onComplete: this.onComplete 11940 }); 11941 }, 11942 createPositionAnimationTransition: function () { 11943 return AnimationHelper.createAnimationTransition(this.element, { 11944 property: this.direction == AnimationHelper.SLIDE_VERTICAL_DIRECTION ? "top" : "left", 11945 unit: "px", 11946 duration: this.duration, 11947 onComplete: this.onComplete 11948 }); 11949 }, 11950 convertPosToCssTransformPos: function (position) { 11951 return ASPx.AnimationUtils.GetTransformCssText(position, this.direction == AnimationHelper.SLIDE_VERTICAL_DIRECTION); 11952 } 11953 }); 11954 var AnimationHelper = { 11955 SLIDE_HORIZONTAL_DIRECTION: 0, 11956 SLIDE_VERTICAL_DIRECTION: 1, 11957 SLIDE_TOP_DIRECTION: 0, 11958 SLIDE_RIGHT_DIRECTION: 1, 11959 SLIDE_BOTTOM_DIRECTION: 2, 11960 SLIDE_LEFT_DIRECTION: 3, 11961 SLIDE_CONTAINER_CLASS: "dxAC", 11962 MAXIMUM_DEPTH: 3, 11963 createAnimationTransition: function (element, options) { 11964 if(options.onStep) 11965 options.animationEngine = "js"; 11966 switch (options.animationEngine) { 11967 case "js": 11968 return ASPx.AnimationUtils.createJsAnimationTransition(element, options); 11969 case "css": 11970 return ASPx.AnimationUtils.createCssAnimationTransition(element, options); 11971 default: 11972 return ASPx.AnimationUtils.CanUseCssTransition() ? ASPx.AnimationUtils.createCssAnimationTransition(element, options) : 11973 ASPx.AnimationUtils.createJsAnimationTransition(element, options); 11974 } 11975 }, 11976 createMultipleAnimationTransition: function (element, options) { 11977 return ASPx.AnimationUtils.createMultipleAnimationTransition(element, options); 11978 }, 11979 createSimpleAnimationTransition: function (options) { 11980 return ASPx.AnimationUtils.createSimpleAnimationTransition(options); 11981 }, 11982 cancelAnimation: function (element) { 11983 ASPx.AnimationTransitionBase.Cancel(element); 11984 }, 11985 fadeIn: function (element, onComplete, duration) { 11986 AnimationHelper.fadeTo(element, { 11987 from: 0, to: 1, 11988 onComplete: onComplete, 11989 duration: duration || ASPx.AnimationConstants.Durations.DEFAULT 11990 }); 11991 }, 11992 fadeOut: function (element, onComplete, duration) { 11993 AnimationHelper.fadeTo(element, { 11994 from: ASPx.GetElementOpacity(element), to: 0, 11995 onComplete: onComplete, 11996 duration: duration || ASPx.AnimationConstants.Durations.DEFAULT 11997 }); 11998 }, 11999 fadeTo: function (element, options) { 12000 options.property = "opacity"; 12001 if(!options.duration) 12002 options.duration = ASPx.AnimationConstants.Durations.SHORT; 12003 var transition = AnimationHelper.createAnimationTransition(element, options); 12004 if(!ASPx.IsExists(options.from)) 12005 options.from = transition.GetValue(); 12006 transition.Start(options.from, options.to); 12007 }, 12008 slideIn: function (element, direction, onComplete, animationEngineType) { 12009 AnimationHelper.setOpacity(element, 1); 12010 var animationContainer = AnimationHelper.getSlideAnimationContainer(element, true, true); 12011 var pos = AnimationHelper.getSlideInStartPos(animationContainer, direction); 12012 var transition = AnimationHelper.createSlideTransition(animationContainer, direction, 12013 function (el) { 12014 AnimationHelper.resetSlideAnimationContainerSize(animationContainer); 12015 if(onComplete) 12016 onComplete(el); 12017 }, animationEngineType); 12018 transition.Start(pos, 0); 12019 }, 12020 slideOut: function (element, direction, onComplete, animationEngineType) { 12021 var animationContainer = AnimationHelper.getSlideAnimationContainer(element, true, true);
12022 var pos = AnimationHelper.getSlideOutFinishPos(animationContainer, direction); 12023 var transition = AnimationHelper.createSlideTransition(animationContainer, direction, 12024 function (el) { 12025 AnimationHelper.setOpacity(el.firstChild, 0); 12026 if(onComplete) 12027 onComplete(el); 12028 }, animationEngineType); 12029 transition.Start(pos); 12030 }, 12031 slideTo: function (element, options) { 12032 if(!ASPx.IsExists(options.direction)) 12033 options.direction = AnimationHelper.SLIDE_HORIZONTAL_DIRECTION; 12034 var transition = new PositionAnimationTransition(element, options); 12035 transition.Start(options.to); 12036 }, 12037 setOpacity: function (element, value) { 12038 ASPx.AnimationUtils.setOpacity(element, value); 12039 }, 12040 appendWKAnimationClassNameIfRequired: function (element) { 12041 if(ASPx.AnimationUtils.CanUseCssTransform() && ASPx.Browser.WebKitFamily && !ASPx.ElementHasCssClass(element, "dx-wbv")) 12042 element.className += " dx-wbv"; 12043 }, 12044 findSlideAnimationContainer: function (element) { 12045 var container = element 12046 for(var i = 0; i < AnimationHelper.MAXIMUM_DEPTH; i++) { 12047 if(container.tagName == "BODY") 12048 return null; 12049 if(ASPx.ElementHasCssClass(container, AnimationHelper.SLIDE_CONTAINER_CLASS)) 12050 return container; 12051 container = container.parentNode; 12052 } 12053 return null; 12054 }, 12055 createSlideAnimationContainer: function (element) { 12056 var rootContainer = document.createElement("DIV"); 12057 ASPx.SetStyles(rootContainer, { 12058 className: AnimationHelper.SLIDE_CONTAINER_CLASS, 12059 overflow: "hidden" 12060 }); 12061 var elementContainer = document.createElement("DIV"); 12062 rootContainer.appendChild(elementContainer); 12063 var parentNode = element.parentNode; 12064 parentNode.insertBefore(rootContainer, element); 12065 elementContainer.appendChild(element); 12066 return rootContainer; 12067 }, 12068 getSlideAnimationContainer: function (element, create, fixSize) { 12069 if(!element) return; 12070 var width = element.offsetWidth; 12071 var height = element.offsetHeight; 12072 var container; 12073 if(element.className == AnimationHelper.SLIDE_CONTAINER_CLASS) 12074 container = element; 12075 if(!container) 12076 container = AnimationHelper.findSlideAnimationContainer(element); 12077 if(!container && create) 12078 container = AnimationHelper.createSlideAnimationContainer(element); 12079 if(container && fixSize) { 12080 ASPx.SetStyles(container, { 12081 width: width, height: height 12082 }); 12083 ASPx.SetStyles(container.firstChild, { 12084 width: width, height: height 12085 }); 12086 } 12087 return container; 12088 }, 12089 resetSlideAnimationContainerSize: function (container) { 12090 ASPx.SetStyles(container, { 12091 width: "", height: "" 12092 }); 12093 ASPx.SetStyles(container.firstChild, { 12094 width: "", height: "" 12095 }); 12096 }, 12097 getModifyProperty: function (direction) { 12098 if(direction == AnimationHelper.SLIDE_TOP_DIRECTION || direction == AnimationHelper.SLIDE_BOTTOM_DIRECTION) 12099 return "marginTop"; 12100 return "marginLeft"; 12101 }, 12102 createSlideTransition: function (animationContainer, direction, complete, animationEngineType) { 12103 var animationEngine = ""; 12104 switch(animationEngineType) { 12105 case AnimationEngineType.JS: 12106 animationEngine = "js"; 12107 break; 12108 case AnimationEngineType.CSS: 12109 animationEngine = "css"; 12110 break; 12111 } 12112 return AnimationHelper.createAnimationTransition(animationContainer.firstChild, { 12113 unit: "px", 12114 property: AnimationHelper.getModifyProperty(direction), 12115 onComplete: complete, 12116 animationEngine: animationEngine 12117 }); 12118 }, 12119 getSlideInStartPos: function (animationContainer, direction) { 12120 switch (direction) { 12121 case AnimationHelper.SLIDE_TOP_DIRECTION: 12122 return animationContainer.offsetHeight; 12123 case AnimationHelper.SLIDE_LEFT_DIRECTION: 12124 return animationContainer.offsetWidth; 12125 case AnimationHelper.SLIDE_RIGHT_DIRECTION: 12126 return -animationContainer.offsetWidth; 12127 case AnimationHelper.SLIDE_BOTTOM_DIRECTION: 12128 return -animationContainer.offsetHeight; 12129 } 12130 }, 12131 getSlideOutFinishPos: function (animationContainer, direction) { 12132 switch (direction) { 12133 case AnimationHelper.SLIDE_TOP_DIRECTION: 12134 return -animationContainer.offsetHeight; 12135 case AnimationHelper.SLIDE_LEFT_DIRECTION: 12136 return -animationContainer.offsetWidth; 12137 case AnimationHelper.SLIDE_RIGHT_DIRECTION: 12138 return animationContainer.offsetWidth; 12139 case AnimationHelper.SLIDE_BOTTOM_DIRECTION: 12140 return animationContainer.offsetHeight; 12141 } 12142 } 12143 }; 12144 var GestureHandler = ASPx.CreateClass(null, { 12145 constructor: function (getAnimationElement, canHandle, allowStart) { 12146 this.getAnimationElement = getAnimationElement; 12147 this.canHandle = canHandle; 12148 this.allowStart = allowStart; 12149 this.startMousePosX = 0; 12150 this.startMousePosY = 0; 12151 this.startTime = null; 12152 this.isEventsPrevented = false; 12153 this.savedElements = []; 12154 }, 12155 OnSelectStart: function(evt) { 12156 ASPx.Evt.PreventEvent(evt); 12157 }, 12158 OnDragStart: function(evt) { 12159 ASPx.Evt.PreventEvent(evt); 12160 }, 12161 OnMouseDown: function (evt) { 12162 this.startMousePosX = ASPx.Evt.GetEventX(evt); 12163 this.startMousePosY = ASPx.Evt.GetEventY(evt); 12164 this.startTime = new Date(); 12165 }, 12166 OnMouseMove: function(evt) { 12167 if(!ASPx.Browser.MobileUI) 12168 ASPx.Selection.Clear(); 12169 if(Math.abs(this.GetCurrentDistanceX(evt)) < GestureHandler.SLIDER_MIN_START_DISTANCE && Math.abs(this.GetCurrentDistanceY(evt)) < GestureHandler.SLIDER_MIN_START_DISTANCE) 12170 GesturesHelper.isExecutedGesture = false; 12171 }, 12172 OnMouseUp: function (evt) { 12173 }, 12174 CanHandleEvent: function (evt) { 12175 return !this.canHandle || this.canHandle(evt); 12176 }, 12177 IsStartAllowed: function(value) { 12178 return !this.allowStart || this.allowStart(value); 12179 }, 12180 RollbackGesture: function () { 12181 }, 12182 GetRubberPosition: function (position) { 12183 return position / GestureHandler.FACTOR_RUBBER; 12184 }, 12185 GetCurrentDistanceX: function (evt) { 12186 return ASPx.Evt.GetEventX(evt) - this.startMousePosX; 12187 }, 12188 GetCurrentDistanceY: function (evt) { 12189 return ASPx.Evt.GetEventY(evt) - this.startMousePosY; 12190 }, 12191 GetDistanceLimit: function () { 12192 return (new Date() - this.startTime) < GestureHandler.MAX_TIME_SPAN ? GestureHandler.MIN_DISTANCE_LIMIT : GestureHandler.MAX_DISTANCE_LIMIT; 12193 }, 12194 GetContainerElement: function () { 12195 }, 12196 AttachPreventEvents: function (evt) { 12197 if(!this.isEventsPrevented) { 12198 var element = ASPx.Evt.GetEventSource(evt); 12199 var container = this.GetContainerElement(); 12200 while(element && element != container) { 12201 ASPx.Evt.AttachEventToElement(element, "mouseup", ASPx.Evt.PreventEvent); 12202 ASPx.Evt.AttachEventToElement(element, "click", ASPx.Evt.PreventEvent); 12203 this.savedElements.push(element); 12204 element = element.parentNode; 12205 } 12206 this.isEventsPrevented = true; 12207 } 12208 }, 12209 DetachPreventEvents: function () { 12210 if(this.isEventsPrevented) { 12211 window.setTimeout(function () { 12212 while(this.savedElements.length > 0) { 12213 var element = this.savedElements.pop(); 12214 ASPx.Evt.DetachEventFromElement(element, "mouseup", ASPx.Evt.PreventEvent); 12215 ASPx.Evt.DetachEventFromElement(element, "click", ASPx.Evt.PreventEvent); 12216 } 12217 }.aspxBind(this), 0); 12218 this.isEventsPrevented = false; 12219 } 12220 } 12221 }); 12222 GestureHandler.MAX_DISTANCE_LIMIT = 70; 12223 GestureHandler.MIN_DISTANCE_LIMIT = 10; 12224 GestureHandler.MIN_START_DISTANCE = 0; 12225 GestureHandler.SLIDER_MIN_START_DISTANCE = 5; 12226 GestureHandler.MAX_TIME_SPAN = 300; 12227 GestureHandler.FACTOR_RUBBER = 4; 12228 GestureHandler.RETURN_ANIMATION_DURATION = 150; 12229 var SwipeSlideGestureHandler = ASPx.CreateClass(GestureHandler, { 12230 constructor: function (getAnimationElement, direction, canHandle, backward, forward, rollback, move) { 12231 this.constructor.prototype.constructor.call(this, getAnimationElement, canHandle); 12232 this.slideElement = this.getAnimationElement(); 12233 this.container = this.slideElement.parentNode; 12234 this.direction = direction; 12235 this.backward = backward; 12236 this.forward = forward; 12237 this.rollback = rollback; 12238 this.slideElementSize = 0; 12239 this.containerElementSize = 0; 12240 this.startSliderElementPosition = 0; 12241 this.centeredSlideElementPosition = 0; 12242 }, 12243 OnMouseDown: function (evt) { 12244 GestureHandler.prototype.OnMouseDown.call(this, evt); 12245 this.slideElementSize = this.GetElementSize(); 12246 this.startSliderElementPosition = this.GetElementPosition(); 12247 this.containerElementSize = this.GetContainerElementSize(); 12248 if(this.slideElementSize <= this.containerElementSize) 12249 this.centeredSlideElementPosition = (this.containerElementSize - this.slideElementSize) / 2; 12250 }, 12251 OnMouseMove: function (evt) { 12252 GestureHandler.prototype.OnMouseMove.call(this, evt); 12253 if(!ASPx.Browser.TouchUI && !ASPx.GetIsParent(this.container, ASPx.Evt.GetEventSource(evt))) { 12254 GesturesHelper.OnDocumentMouseUp(evt); 12255 return; 12256 } 12257 var distance = this.GetCurrentDistance(evt); 12258 if(Math.abs(distance) < GestureHandler.SLIDER_MIN_START_DISTANCE || ASPx.TouchUIHelper.isGesture) 12259 return; 12260 this.SetElementPosition(this.GetCalculatedPosition(distance)); 12261 this.AttachPreventEvents(evt); 12262 ASPx.Evt.PreventEvent(evt); 12263 }, 12264 GetCalculatedPosition: function (distance) { 12265 ASPx.AnimationTransitionBase.Cancel(this.slideElement); 12266 var position = this.startSliderElementPosition + distance, 12267 maxPosition = -(this.slideElementSize - this.containerElementSize), 12268 minPosition = 0; 12269 if(this.centeredSlideElementPosition > 0) 12270 position = this.GetRubberPosition(distance) + this.centeredSlideElementPosition; 12271 else if(position > minPosition) 12272 position = this.GetRubberPosition(distance); 12273 else if(position < maxPosition) 12274 position = this.GetRubberPosition(distance) + maxPosition; 12275 return position; 12276 }, 12277 OnMouseUp: function (evt) { 12278 this.DetachPreventEvents(); 12279 if(this.GetCurrentDistance(evt) != 0) 12280 this.OnMouseUpCore(evt); 12281 }, 12282 OnMouseUpCore: function (evt) { 12283 var distance = this.GetCurrentDistance(evt); 12284 if(this.centeredSlideElementPosition > 0 || this.CheckSlidePanelIsOutOfBounds()) 12285 this.PerformRollback(); 12286 else 12287 this.PerformAction(distance); 12288 }, 12289 PerformAction: function (distance) { 12290 if(Math.abs(distance) < this.GetDistanceLimit()) 12291 this.PerformRollback(); 12292 else if(distance < 0) 12293 this.PerformForward(); 12294 else 12295 this.PerformBackward(); 12296 }, 12297 PerformBackward: function () { 12298 this.backward(); 12299 }, 12300 PerformForward: function () { 12301 this.forward(); 12302 }, 12303 PerformRollback: function () { 12304 this.rollback(); 12305 }, 12306 CheckSlidePanelIsOutOfBounds: function () { 12307 var minOffset = -(this.slideElementSize - this.containerElementSize), maxOffset = 0; 12308 var position = null, slideElementPos = this.GetElementPosition(); 12309 if(slideElementPos > maxOffset || slideElementPos < minOffset) 12310 return true; 12311 return false; 12312 }, 12313 GetContainerElement: function () { 12314 return this.container; 12315 }, 12316 GetElementSize: function () { 12317 return this.IsHorizontalDirection() ? this.slideElement.offsetWidth : this.slideElement.offsetHeight; 12318 }, 12319 GetContainerElementSize: function () { 12320 return this.IsHorizontalDirection() ? ASPx.GetClearClientWidth(this.container) : ASPx.GetClearClientHeight(this.container); 12321 }, 12322 GetCurrentDistance: function (evt) { 12323 return this.IsHorizontalDirection() ? this.GetCurrentDistanceX(evt) : this.GetCurrentDistanceY(evt); 12324 }, 12325 GetElementPosition: function () { 12326 return ASPx.AnimationUtils.GetTransformValue(this.slideElement, !this.IsHorizontalDirection()); 12327 }, 12328 SetElementPosition: function (position) { 12329 ASPx.AnimationUtils.SetTransformValue(this.slideElement, position, !this.IsHorizontalDirection()); 12330 }, 12331 IsHorizontalDirection: function () { 12332 return this.direction == AnimationHelper.SLIDE_HORIZONTAL_DIRECTION; 12333 } 12334 }); 12335 var SwipeSimpleSlideGestureHandler = ASPx.CreateClass(SwipeSlideGestureHandler, { 12336 constructor: function (getAnimationElement, direction, canHandle, backward, forward, rollback, updatePosition) { 12337 this.constructor.prototype.constructor.call(this, getAnimationElement, direction, canHandle, backward, forward, rollback); 12338 this.container = this.slideElement; 12339 this.updatePosition = updatePosition; 12340 this.prevDistance = 0; 12341 }, 12342 OnMouseDown: function (evt) { 12343 GestureHandler.prototype.OnMouseDown.call(this, evt); 12344 this.prevDistance = 0; 12345 }, 12346 OnMouseUpCore: function (evt) { 12347 this.PerformAction(this.GetCurrentDistance(evt)); 12348 }, 12349 PerformAction: function (distance) { 12350 if(Math.abs(distance) < this.GetDistanceLimit()) 12351 this.PerformRollback(); 12352 else if(distance < 0) 12353 this.PerformForward(); 12354 else 12355 this.PerformBackward(); 12356 }, 12357 GetCalculatedPosition: function (distance) { 12358 var position = distance - this.prevDistance; 12359 this.prevDistance = distance; 12360 return position; 12361 }, 12362 SetElementPosition: function (position) { 12363 this.updatePosition(position); 12364 } 12365 }); 12366 var SwipeGestureHandler = ASPx.CreateClass(GestureHandler, { 12367 constructor: function (getAnimationElement, canHandle, allowStart, start, allowComplete, complete, cancel, animationEngineType) { 12368 this.constructor.prototype.constructor.call(this, getAnimationElement, canHandle, allowStart); 12369 this.start = start; 12370 this.allowComplete = allowComplete; 12371 this.complete = complete; 12372 this.cancel = cancel; 12373 this.animationTween = null; 12374 this.currentDistanceX = 0; 12375 this.currentDistanceY = 0; 12376 this.tryStartGesture = false; 12377 this.tryStartScrolling = false; 12378 this.animationEngineType = animationEngineType; 12379 this.UpdateAnimationContainer(); 12380 }, 12381 UpdateAnimationContainer: function () { 12382 this.animationContainer = AnimationHelper.getSlideAnimationContainer(this.getAnimationElement(), true, false); 12383 }, 12384 CanHandleEvent: function (evt) { 12385 if(GestureHandler.prototype.CanHandleEvent.call(this, evt)) 12386 return true; 12387 return this.animationTween && this.animationContainer && ASPx.GetIsParent(this.animationContainer, ASPx.Evt.GetEventSource(evt)); 12388 }, 12389 OnMouseDown: function (evt) { 12390 GestureHandler.prototype.OnMouseDown.call(this, evt); 12391 if(this.animationTween) 12392 this.animationTween.Cancel(); 12393 this.currentDistanceX = 0; 12394 this.currentDistanceY = 0; 12395 this.tryStartGesture = false; 12396 this.tryStartScrolling = false; 12397 }, 12398 OnMouseMove: function (evt) { 12399 GestureHandler.prototype.OnMouseMove.call(this, evt);
12400 var isZoomGestureConflict = evt.touches && evt.touches.length > 1; 12401 if (isZoomGestureConflict) 12402 return false; 12403 this.currentDistanceX = this.GetCurrentDistanceX(evt); 12404 this.currentDistanceY = this.GetCurrentDistanceY(evt); 12405 if(!this.animationTween && !this.tryStartScrolling && (Math.abs(this.currentDistanceX) > 12406 GestureHandler.MIN_START_DISTANCE || Math.abs(this.currentDistanceY) > GestureHandler.MIN_START_DISTANCE)) { 12407 if(Math.abs(this.currentDistanceY) < Math.abs(this.currentDistanceX)) { 12408 this.tryStartGesture = true; 12409 if(this.IsStartAllowed(this.currentDistanceX)) { 12410 this.animationContainer = AnimationHelper.getSlideAnimationContainer(this.getAnimationElement(), true, true); 12411 this.animationTween = AnimationHelper.createSlideTransition(this.animationContainer, AnimationHelper.SLIDE_LEFT_DIRECTION, 12412 function () { 12413 AnimationHelper.resetSlideAnimationContainerSize(this.animationContainer); 12414 this.animationContainer = null; 12415 this.animationTween = null; 12416 }.aspxBind(this), this.animationEngineType); 12417 this.PerformStart(this.currentDistanceX); 12418 this.AttachPreventEvents(evt); 12419 } 12420 } 12421 else 12422 this.tryStartScrolling = true; 12423 } 12424 if(this.animationTween) { 12425 if(this.allowComplete && !this.allowComplete(this.currentDistanceX)) 12426 this.currentDistanceX = this.GetRubberPosition(this.currentDistanceX); 12427 this.animationTween.SetValue(this.currentDistanceX); 12428 } 12429 if(!this.tryStartScrolling && !ASPx.TouchUIHelper.isGesture && evt.touches && evt.touches.length < 2) 12430 ASPx.Evt.PreventEvent(evt); 12431 }, 12432 OnMouseUp: function (evt) { 12433 if(!this.animationTween) { 12434 if(this.tryStartGesture) 12435 this.PerformCancel(this.currentDistanceX); 12436 } 12437 else { 12438 if(Math.abs(this.currentDistanceX) < this.GetDistanceLimit()) 12439 this.RollbackGesture(); 12440 else { 12441 if(this.IsCompleteAllowed(this.currentDistanceX)) { 12442 this.PerformComplete(this.currentDistanceX); 12443 this.animationContainer = null; 12444 this.animationTween = null; 12445 } 12446 else 12447 this.RollbackGesture(); 12448 } 12449 } 12450 this.DetachPreventEvents(); 12451 this.tryStartGesture = false; 12452 this.tryStartScrolling = false; 12453 }, 12454 PerformStart: function (value) { 12455 if(this.start) 12456 this.start(value); 12457 }, 12458 IsCompleteAllowed: function (value) { 12459 return !this.allowComplete || this.allowComplete(value); 12460 }, 12461 PerformComplete: function (value) { 12462 if(this.complete) 12463 this.complete(value); 12464 }, 12465 PerformCancel: function (value) { 12466 if(this.cancel) 12467 this.cancel(value); 12468 }, 12469 RollbackGesture: function () { 12470 this.animationTween.Start(this.currentDistanceX, 0); 12471 }, 12472 ResetGestureElementPosition: function () { 12473 if (this.currentDistanceX === 0) return; 12474 var container = AnimationHelper.getSlideAnimationContainer(this.getAnimationElement()); 12475 var onComplete = function () { AnimationHelper.resetSlideAnimationContainerSize(container); }; 12476 var animation = AnimationHelper.createSlideTransition(container, AnimationHelper.SLIDE_LEFT_DIRECTION, onComplete, this.animationEngineType); 12477 animation.Start(this.currentDistanceX, 0); 12478 }, 12479 GetContainerElement: function () { 12480 return this.animationContainer; 12481 } 12482 }); 12483 var GesturesHelper = { 12484 handlers: {}, 12485 activeHandler: null, 12486 isAttachedEvents: false, 12487 isExecutedGesture: false, 12488 AddSwipeGestureHandler: function (id, getAnimationElement, canHandle, allowStart, start, allowComplete, complete, cancel, animationEngineType) { 12489 this.handlers[id] = new SwipeGestureHandler(getAnimationElement, canHandle, allowStart, start, allowComplete, complete, cancel, animationEngineType); 12490 }, 12491 UpdateSwipeAnimationContainer: function (id) { 12492 if(this.handlers[id]) 12493 this.handlers[id].UpdateAnimationContainer(); 12494 }, 12495 AddSwipeSlideGestureHandler: function (id, getAnimationElement, direction, canHandle, backward, forward, rollback, updatePosition) { 12496 if(updatePosition) 12497 this.handlers[id] = new SwipeSimpleSlideGestureHandler(getAnimationElement, direction, canHandle, backward, forward, rollback, updatePosition); 12498 else 12499 this.handlers[id] = new SwipeSlideGestureHandler(getAnimationElement, direction, canHandle, backward, forward, rollback); 12500 }, 12501 getParentDXEditorWithSwipeGestures: function(element) { 12502 return ASPx.GetParent(element, function(parent) {
12503 var parentObj = ASPx.GetControlCollection().Get(parent.id); 12504 return parentObj && parentObj.supportGestures && parentObj.isSwipeGesturesEnabled(); 12505 }); 12506 }, 12507 canHandleMouseDown: function(evt) { 12508 if(!ASPx.Evt.IsLeftButtonPressed(evt)) 12509 return false; 12510 var element = ASPx.Evt.GetEventSource(evt); 12511 var dxFocusedEditor = ASPx.Ident.scripts.ASPxClientEdit && ASPx.GetFocusedEditor(); 12512 if(dxFocusedEditor && dxFocusedEditor.IsEditorElement(element)) { 12513 var elementParentDXEditorWithSwipeGestures = GesturesHelper.getParentDXEditorWithSwipeGestures(element); 12514 if(!elementParentDXEditorWithSwipeGestures || !dxFocusedEditor.IsEditorElement(elementParentDXEditorWithSwipeGestures)) 12515 return false; 12516 } 12517 var isTextEditor = element.tagName == "TEXTAREA" || element.tagName == "INPUT" && ASPx.Attr.GetAttribute(element, "type") == "text"; 12518 if(isTextEditor && document.activeElement == element) 12519 return false; 12520 return true; 12521 }, 12522 OnDocumentDragStart: function(evt) { 12523 if(GesturesHelper.activeHandler) 12524 GesturesHelper.activeHandler.OnDragStart(evt); 12525 }, 12526 OnDocumentSelectStart: function(evt) { 12527 if(GesturesHelper.activeHandler) 12528 GesturesHelper.activeHandler.OnSelectStart(evt); 12529 }, 12530 OnDocumentMouseDown: function (evt) { 12531 if(!GesturesHelper.canHandleMouseDown(evt)) 12532 return; 12533 GesturesHelper.activeHandler = GesturesHelper.FindHandler(evt); 12534 if(GesturesHelper.activeHandler) 12535 GesturesHelper.activeHandler.OnMouseDown(evt); 12536 }, 12537 OnDocumentMouseMove: function (evt) { 12538 if(GesturesHelper.activeHandler) { 12539 GesturesHelper.isExecutedGesture = true; 12540 GesturesHelper.activeHandler.OnMouseMove(evt); 12541 } 12542 }, 12543 OnDocumentMouseUp: function (evt) { 12544 if(GesturesHelper.activeHandler) { 12545 GesturesHelper.activeHandler.OnMouseUp(evt); 12546 GesturesHelper.activeHandler = null; 12547 window.setTimeout(function () { GesturesHelper.isExecutedGesture = false; }, 0); 12548 } 12549 }, 12550 AttachEvents: function () { 12551 if(!GesturesHelper.isAttachedEvents) { 12552 GesturesHelper.Attach(ASPx.Evt.AttachEventToElement); 12553 GesturesHelper.isAttachedEvents = true; 12554 } 12555 }, 12556 DetachEvents: function () { 12557 if(GesturesHelper.isAttachedEvents) { 12558 GesturesHelper.Attach(ASPx.Evt.DetachEventFromElement); 12559 GesturesHelper.isAttachedEvents = false; 12560 } 12561 }, 12562 Attach: function (changeEventsMethod) { 12563 var doc = window.document; 12564 changeEventsMethod(doc, ASPx.TouchUIHelper.touchMouseDownEventName, GesturesHelper.OnDocumentMouseDown); 12565 changeEventsMethod(doc, ASPx.TouchUIHelper.touchMouseMoveEventName, GesturesHelper.OnDocumentMouseMove); 12566 changeEventsMethod(doc, ASPx.TouchUIHelper.touchMouseUpEventName, GesturesHelper.OnDocumentMouseUp); 12567 if(!ASPx.Browser.MobileUI) { 12568 changeEventsMethod(doc, "selectstart", GesturesHelper.OnDocumentSelectStart); 12569 changeEventsMethod(doc, "dragstart", GesturesHelper.OnDocumentDragStart); 12570 } 12571 }, 12572 FindHandler: function (evt) { 12573 var handlers = []; 12574 for(var id in GesturesHelper.handlers) { 12575 var handler = GesturesHelper.handlers[id]; 12576 if(handler.CanHandleEvent && handler.CanHandleEvent(evt)) 12577 handlers.push(handler); 12578 } 12579 if(!handlers.length) 12580 return null; 12581 handlers.sort(function (a, b) { 12582 return ASPx.GetIsParent(a.getAnimationElement(), b.getAnimationElement()) ? 1 : -1; 12583 }); 12584 return handlers[0]; 12585 }, 12586 IsExecutedGesture: function () { 12587 return GesturesHelper.isExecutedGesture; 12588 } 12589 }; 12590 GesturesHelper.AttachEvents(); 12591 var AnimationEngineType = { 12592 "JS": 0, 12593 "CSS": 1, 12594 "DEFAULT" : 2 12595 } 12596 ASPx.AnimationEngineType = AnimationEngineType; 12597 ASPx.AnimationHelper = AnimationHelper; 12598 ASPx.GesturesHelper = GesturesHelper; 12599})(); 12600(function() { 12601 var ASPxClientImageControlBase = ASPx.CreateClass(null, { 12602 constructor: function(control) { 12603 this.control = control; 12604 this.Initialize(); 12605 this.CreateControlHierarchy(); 12606 this.PrepareControlHierarchy(); 12607 if(this.IsEnabled()) 12608 this.InitializeHandlers(); 12609 }, 12610 Initialize: function() { 12611 }, 12612 CreateControlHierarchy: function() { 12613 }, 12614 PrepareControlHierarchy: function() { 12615 }, 12616 AdjustControl: function() { 12617 }, 12618 InitializeHandlers: function() { 12619 }, 12620 IsEnabled: function() { 12621 return this.control.enabled; 12622 } 12623 }); 12624 var ImageSizeModeEnum = { 12625 ActualSizeOrFit: 0, 12626 FitProportional: 1, 12627 FitAndCrop: 2 12628 }; 12629 var RenderMode = { 12630 Image: 0, 12631 Canvas: 1 12632 }; 12633 var Utils = { 12634 versions: {}, 12635 GetKey: function(image) { 12636 return image.id + image.className; 12637 }, 12638 RemoveLoadingGif: function(element) { 12639 ASPx.SetStyles(element, { backgroundImage: "url(" + ASPx.EmptyImageUrl + ")" }); 12640 }, 12641 IsImageLoaded: function(image) { 12642 return image.complete && ((ASPx.Browser.IE && ASPx.Browser.MajorVersion < 9) || image.naturalWi
12642dth !== undefined); 12643 }, 12644 IsEmptyImageSource: function(image) { 12645 return !ASPx.Attr.GetAttribute(image, "src"); 12646 }, 12647 IsNotEmptyImageSize: function(image) { 12648 return image.naturalWidth && image.naturalHeight || image.width && image.height ? true : false; 12649 }, 12650 TryGetImageSize: function(image, onComplete) { 12651 var fakeImage = new Image(); 12652 ASPx.Evt.AttachEventToElement(fakeImage, "load", function(evt) { 12653 var img = evt.srcElement || this; 12654 image.width = fakeImage.width; 12655 image.height = fakeImage.height; 12656 image.naturalWidth = fakeImage.width; 12657 image.naturalHeight = fakeImage.height; 12658 onComplete(); 12659 }); 12660 fakeImage.src = image.src; 12661 }, 12662 ChangeImageSource: function(image, src, onComplete) { 12663 var keyVersion = Utils.GetKey(image); 12664 Utils.versions[keyVersion] = (Utils.versions[keyVersion] + 1) || 0; 12665 var currentVersion = Utils.versions[keyVersion]; 12666 var newImage = document.createElement("IMG"); 12667 newImage.id = image.id; 12668 newImage.className = image.className; 12669 newImage.alt = image.alt; 12670 ASPx.Evt.AttachEventToElement(newImage, "load", function(evt) { 12671 if(Utils.versions[keyVersion] == currentVersion) { 12672 image.parentNode.appendChild(newImage); 12673 ASPx.RemoveElement(image); 12674 onComplete(); 12675 } 12676 }); 12677 newImage.src = src; 12678 } 12679 }; 12680 var ResizeUtils = { 12681 ResizeImage: function(image, options) { 12682 if(ASPx.Browser.IE && ASPx.Browser.MajorVersion < 9 && !Utils.IsNotEmptyImageSize(image) || !Utils.IsNotEmptyImageSize(image)) 12683 Utils.TryGetImageSize(image, function() { ResizeUtils.ResizeImageCore(image, options); }); 12684 else 12685 ResizeUtils.ResizeImageCore(image, options); 12686 }, 12687 ResizeImageCore: function(image, options) { 12688 var parent = image.parentNode; 12689 var canvas = ResizeUtils.GetCanvas(parent); 12690 var sizeMode = options.sizeMode == undefined ? ImageSizeModeEnum.ActualSizeOrFit : options.sizeMode; 12691 var properties = ResizeUtils.GetImageProperties(image.naturalWidth || image.width, image.naturalHeight || image.height, options.width, options.height, sizeMode); 12692 var useCanvas = properties.renderMode == RenderMode.Canvas && (options.canUseCanvas == undefined ? true : options.canUseCanvas); 12693 if(useCanvas) { 12694 if(canvas) { 12695 canvas.width = options.width; 12696 canvas.height = options.height; 12697 ResizeUtils.DrawImage(canvas, image, properties); 12698 } 12699 else {
12700 canvas = ResizeUtils.CreateCanvas(parent, options.width, options.height, image, properties); 12701 ASPx.RemoveElement(image); 12702 } 12703 } 12704 else { 12705 if(canvas) 12706 ASPx.RemoveElement(canvas); 12707 ResizeUtils.SetImageProperties(image, properties, options.rtl); 12708 } 12709 if(options.onEndResize) 12710 options.onEndResize(canvas || image, useCanvas); 12711 }, 12712 SetImageProperties: function(image, properties, rtl) { 12713 var style = { 12714 marginTop: properties.y, display: "" 12715 }; 12716 if(rtl) 12717 style.marginRight = properties.x; 12718 else 12719 style.marginLeft = properties.x; 12720 if(ASPx.Browser.IE && ASPx.Browser.MajorVersion < 9) { 12721 image.naturalWidth = image.width; 12722 image.naturalHeight = image.height; 12723 } 12724 image.width = properties.w; 12725 image.height = properties.h; 12726 ASPx.SetStyles(image, style); 12727 }, 12728 GetImageProperties: function(naturalWidth, naturalHeight, width, height, sizeMode) { 12729 var properties = {}; 12730 switch (sizeMode) { 12731 case ImageSizeModeEnum.FitAndCrop: 12732 properties = ResizeUtils.GetFitAndCropImageProperties(naturalWidth, naturalHeight, width, height); 12733 break; 12734 case ImageSizeModeEnum.FitProportional: 12735 properties = ResizeUtils.GetFitProportionalImageProperties(naturalWidth, naturalHeight, width, height); 12736 break; 12737 case ImageSizeModeEnum.ActualSizeOrFit: 12738 properties = ResizeUtils.GetActualSizeOrFitImageProperties(naturalWidth, naturalHeight, width, height); 12739 break; 12740 } 12741 properties.renderMode = RenderMode.Image;
12742 if(window.HTMLCanvasElement && (naturalWidth > width * 2 || naturalHeight > height * 2)) { 12743 if(ASPx.Browser.MacOSMobilePlatform && (naturalWidth > 2200 || naturalHeight > 2200)) 12744 properties.renderMode = RenderMode.Image; 12745 else 12746 properties.renderMode = RenderMode.Canvas; 12747 } 12748 return properties; 12749 }, 12750 GetFitAndCropImageProperties: function(naturalWidth, naturalHeight, width, height) { 12751 var ratio = naturalWidth / naturalHeight; 12752 naturalWidth = width; 12753 naturalHeight = naturalWidth / ratio; 12754 if(naturalHeight < height) { 12755 naturalHeight = height; 12756 naturalWidth = naturalHeight * ratio; 12757 } 12758 var left = -(naturalWidth - width) / 2; 12759 var top = -(naturalHeight - height) / 2; 12760 return ResizeUtils.CreateImagePropertiesObject(naturalWidth, naturalHeight, left, top); 12761 }, 12762 GetFitProportionalImageProperties: function(naturalWidth, naturalHeight, width, height) { 12763 var ratio = naturalWidth / naturalHeight; 12764 naturalWidth = width; 12765 naturalHeight = naturalWidth / ratio; 12766 if(naturalHeight > height) { 12767 naturalHeight = height; 12768 naturalWidth = naturalHeight * ratio; 12769 } 12770 var left = (width - naturalWidth) / 2; 12771 var top = (height - naturalHeight) / 2; 12772 return ResizeUtils.CreateImagePropertiesObject(naturalWidth, naturalHeight, left, top); 12773 }, 12774 GetActualSizeOrFitImageProperties: function(naturalWidth, naturalHeight, width, height) { 12775 if(naturalWidth > width || naturalHeight > height) 12776 return ResizeUtils.GetFitProportionalImageProperties(naturalWidth, naturalHeight, width, height); 12777 return ResizeUtils.CreateImagePropertiesObject(naturalWidth, naturalHeight, (width - naturalWidth) / 2, (height - naturalHeight) / 2); 12778 }, 12779 CreateImagePropertiesObject: function(w, h, x, y) { 12780 var obj = { w: w, h: h, x: x, y: y }; 12781 obj.w = Math.round(obj.w); 12782 obj.h = Math.round(obj.h); 12783 obj.x = Math.round(obj.x); 12784 obj.y = Math.round(obj.y); 12785 return obj; 12786 }, 12787 GetCanvas: function (container) { 12788 return ASPx.GetChildByTagName(container, "CANVAS"); 12789 }, 12790 CreateCanvas: function(container, width, height, image, properties) { 12791 var canvas = document.createElement("CANVAS"); 12792 canvas.width = width; 12793 canvas.height = height; 12794 container.appendChild(canvas); 12795 if(image && properties) 12796 ResizeUtils.DrawImage(canvas, image, properties); 12797 return canvas; 12798 }, 12799 DrawImage: function(canvas, image, properties) { 12800 var context = canvas.getContext("2d"); 12801 context.drawImage(image, properties.x, properties.y, properties.w, properties.h); 12802 } 12803 }; 12804 ASPx.ImageControlUtils = {}; 12805 ASPx.ImageControlUtils.ResizeImage = ResizeUtils.ResizeImage; 12806 ASPx.ImageControlUtils.RemoveLoadingGif = Utils.RemoveLoadingGif; 12807 ASPx.ImageControlUtils.IsImageLoaded = Utils.IsImageLoaded; 12808 ASPx.ImageControlUtils.IsEmptyImageSource = Utils.IsEmptyImageSource; 12809 ASPx.ImageControlUtils.IsNotEmptyImageSize = Utils.IsNotEmptyImageSize; 12810 ASPx.ImageControlUtils.ChangeImageSource = Utils.ChangeImageSource; 12811 ASPx.ImageControlUtils.TryGetImageSize = Utils.TryGetImageSize; 12812 ASPx.ImageControlUtils.ImageSizeModeEnum = ImageSizeModeEnum; 12813 window.ASPxClientImageControlBase = ASPxClientImageControlBase; 12814})(); 12815(function () { 12816 var CssClassesConstants = {}; 12817 CssClassesConstants.Prefix = "dxis-"; 12818 CssClassesConstants.OverlayElementCssClass = CssClassesConstants.Prefix + "overlayElement"; 12819 CssClassesConstants.TextAreaCssClassName = CssClassesConstants.Prefix + "itemTextArea"; 12820 CssClassesConstants.ImageAreaSlidePanelCssClassName = CssClassesConstants.Prefix + "slidePanel"; 12821 CssClassesConstants.NavigationBarHoverStateElementCssClassName = CssClassesConstants.Prefix + "nbHoverItem"; 12822 CssClassesConstants.NavigationBarSelectedStateCssClassName = " " + CssClassesConstants.Prefix + "selected"; 12823 CssClassesConstants.NavigationBarHoverStateCssClassName = CssClassesConstants.Prefix + "hover"; 12824 CssClassesConstants.NavigationBarSlidePanelCssClassName = CssClassesConstants.Prefix + "nbSlidePanel"; 12825 CssClassesConstants.NavigationBarSlidePanelWrapperCssClassName = CssClassesConstants.Prefix + "nbSlidePanelWrapper";
12826 CssClassesConstants.PassePartoutCssClassName = CssClassesConstants.Prefix + "passePartout"; 12827 CssClassesConstants.ItemHyperLinkCssClassName = CssClassesConstants.Prefix + "hl"; 12828 CssClassesConstants.PlayPauseWrapperCssClassName = CssClassesConstants.Prefix + "playPauseBtnWrapper"; 12829 CssClassesConstants.NavigationButtonUpWrapperCssClassName = CssClassesConstants.Prefix + "prevBtnVertWrapper"; 12830 CssClassesConstants.NavigationButtonDownWrapperCssClassName = CssClassesConstants.Prefix + "nextBtnVertWrapper"; 12831 CssClassesConstants.NavigationButtonBackwardWrapperCssClassName = CssClassesConstants.Prefix + "prevBtnHorWrapper"; 12832 CssClassesConstants.NavigationButtonForwardWrapperCssClassName = CssClassesConstants.Prefix + "nextBtnHorWrapper"; 12833 CssClassesConstants.NavigationButtonUpOutsideWrapperCssClassName = CssClassesConstants.Prefix + "prevBtnVertOutsideWrapper"; 12834 CssClassesConstants.NavigationButtonDownOutsideWrapperCssClassName = CssClassesConstants.Prefix + "nextBtnVertOutsideWrapper"; 12835 CssClassesConstants.NavigationButtonBackwardOutsideWrapperCssClassName = CssClassesConstants.Prefix + "prevBtnHorOutsideWrapper"; 12836 CssClassesConstants.NavigationButtonForwardOutsideWrapperCssClassName = CssClassesConstants.Prefix + "nextBtnHorOutsideWrapper"; 12837 CssClassesConstants.NavigationButtonWrapperHoverCssClassPostfix = "Hover"; 12838 CssClassesConstants.NavigationButtonWrapperPressedCssClassPostfix = "Pressed"; 12839 CssClassesConstants.NavigationButtonWrapperDisabledCssClassPostfix = "Disabled"; 12840 CssClassesConstants.ImageZoomNavigatorCssClassName = CssClassesConstants.Prefix + "zoomNavigator"; 12841 CssClassesConstants.LoadingElement = "dx-is-loading"; 12842 var LoadModeEnum = { 12843 AllImages: 0, 12844 DynamicLoadAndCache: 1, 12845 DynamicLoad: 2 12846 }; 12847 var AnimationTypeEnum = { 12848 Slide: 0, 12849 Fade: 1, 12850 None: 2 12851 }; 12852 var AnimationDirectionEnum = { 12853 Horizontal: 0, 12854 Vertical: 1 12855 }; 12856 var NavigationBarPositionEnum = { 12857 Bottom: 0, 12858 Top: 1, 12859 Left: 2, 12860 Right: 3 12861 }; 12862 var NavigationBarModeEnum = { 12863 Thumbnails: 0, 12864 Dots: 1 12865 }; 12866 var ElementVisibilityModeEnum = { 12867 None: 0, 12868 Faded: 1, 12869 OnMouseOver: 2, 12870 Always: 3 12871 }; 12872 var NavigationBarPagingModeEnum = { 12873 Page: 0, 12874 Single: 1 12875 }; 12876 var ExtremeItemClickModeEnum = { 12877 SelectAndSlide: 0, 12878 Select: 1 12879 }; 12880 var NavigationBarButtonPositionEnum = { 12881 Inside: 0, 12882 Outside: 1 12883 }; 12884 var ActiveItemChangeActionEnum = { 12885 Click: 0, 12886 Hover: 1 12887 }; 12888 var NavigationButtonVisibilityModeEnum = { 12889 Auto: 0, 12890 Always: 1 12891 }; 12892 var FadedDefaultOpacity = 0.3; 12893 var SizeUtils = { 12894 GetClientWidth: function (element, clear) { 12895 return clear ? ASPx.GetClearClientWidth(element) : element.offsetWidth; 12896 }, 12897 GetClientHeight: function (element, clear) { 12898 return clear ? ASPx.GetClearClientHeight(element) : element.offsetHeight; 12899 } 12900 }; 12901 var MouseEnterHelper = { 12902 data: [], 12903 AddHandler: function (element, mouseOver, mouseOut) { 12904 var dataItem = this.GetDataItem(element); 12905 if(!dataItem) 12906 dataItem = this.CreateDataItem(element, mouseOver, mouseOut); 12907 dataItem.mouseOverHandlers.push(mouseOver); 12908 dataItem.mouseOutHandlers.push(mouseOut); 12909 }, 12910 GetDataItem: function (element) { 12911 for(var i = 0; i < this.data.length; i++) { 12912 var dataItem = this.data[i]; 12913 if(dataItem && dataItem.element == element) 12914 return dataItem; 12915 } 12916 return null; 12917 }, 12918 CreateDataItem: function (element, mouseOver, mouseOut) { 12919 var dataItem = { element: element, mouseOverHandlers: [mouseOver], mouseOutHandlers: [mouseOut] }; 12920 this.data.push(dataItem); 12921 ASPx.Evt.AttachMouseEnterToElement(element, MouseEnterHelper.OnMouseOverHandler, MouseEnterHelper.OnMouseOutHandler); 12922 return dataItem; 12923 }, 12924 OnMouseOverHandler: function (element) { 12925 MouseEnterHelper.PerformHandlers(MouseEnterHelper.GetDataItem(element).mouseOverHandlers); 12926 }, 12927 OnMouseOutHandler: function (element) { 12928 MouseEnterHelper.PerformHandlers(MouseEnterHelper.GetDataItem(element).mouseOutHandlers); 12929 }, 12930 PerformHandlers: function (array) { 12931 for(var i = 0; i < array.length; i++) 12932 array[i]();
12933 } 12934 }; 12935 var ControlBase = ASPx.CreateClass(ASPxClientImageControlBase, { 12936 constructor: function (imageSlider) { 12937 this.constructor.prototype.constructor.call(this, imageSlider); 12938 }, 12939 AdjustControl: function () { 12940 this.CalculateSize(); 12941 }, 12942 ResetControlStyle: function () { 12943 }, 12944 CalculateSize: function () { 12945 }, 12946 InitializeHandlers: function () { 12947 }, 12948 IsAdjustedSize: function () { 12949 return this.GetImageSlider().IsAdjusted(); 12950 }, 12951 GetImageSlider: function () { 12952 return this.control; 12953 }, 12954 GetClientControlName: function () { 12955 return this.GetImageSlider().name; 12956 }, 12957 IsHorizontalNavigation: function () { 12958 return this.GetImageSlider().navDirection == AnimationDirectionEnum.Horizontal; 12959 }, 12960 GetAnimationType: function () { 12961 return this.GetImageSlider().GetAnimationType(); 12962 }, 12963 IsRtl: function (withoutHorizontalNavigation) { 12964 var value = !!this.GetImageSlider().rtl; 12965 if(!withoutHorizontalNavigation) 12966 value = value && this.IsHorizontalNavigation(); 12967 return value; 12968 }, 12969 CreateDiv: function () { 12970 return document.createElement("DIV"); 12971 }, 12972 GetStateController: function () { 12973 return typeof (ASPx.GetStateController) != "undefined" ? ASPx.GetStateController() : null; 12974 }, 12975 PatchElementForMSTouch: function (element) { 12976 if(ASPx.Browser.MSTouchUI) 12977 element.className += " " + ASPx.TouchUIHelper.msTouchDraggableClassName; 12978 } 12979 }); 12980 var ButtonBase = ASPx.CreateClass(ControlBase, { 12981 constructor: function (itemsOwner) { 12982 this.itemsOwner = itemsOwner; 12983 this.defaultOpacity = 0; 12984 this.isLeftButtonPressed = false; 12985 this.visibility = true; 12986 this.constructor.prototype.constructor.call(this, itemsOwner.GetImageSlider()); 12987 }, 12988 Initialize: function () { 12989 if(this.GetVisibilityMode() == ElementVisibilityModeEnum.Faded) 12990 this.defaultOpacity = FadedDefaultOpacity; 12991 }, 12992 GetOwner: function () { 12993 return this.itemsOwner; 12994 }, 12995 GetContainer: function () { 12996 return this.GetOwner().GetButtonsContainer() 12997 }, 12998 GetMouseUpElement: function () { 12999 return this.GetContainer(); 13000 }, 13001 GetVisibilityMode: function () { 13002 return 0; 13003 }, 13004 CanHandle: function () { 13005 return this.GetOwner().CanHandleButtons(); 13006 }, 13007 PrepareControlHierarchy: function () { 13008 if(this.GetVisibilityMode() == ElementVisibilityModeEnum.Always) 13009 return; 13010 var elements = this.GetAnimationElements(); 13011 for(var i = 0; i < elements.length; i++) { 13012 ASPx.SetStyles(elements[i], { opacity: this.defaultOpacity }); 13013 this.PatchElementForMSTouch(elements[i]); 13014 } 13015 }, 13016 InitializeHandlers: function () { 13017 ASPx.Evt.AttachEventToElement(this.GetMouseUpElement(), ASPx.TouchUIHelper.touchMouseDownEventName, function (evt) { 13018 this.isLeftButtonPressed = ASPx.Evt.IsLeftButtonPressed(evt); 13019 }.aspxBind(this)); 13020 ASPx.Evt.AttachEventToElement(this.GetMouseUpElement(), ASPx.Browser.TouchUI ? ASPx.TouchUIHelper.touchMouseUpEventName : "click", function (evt) { 13021 if(this.visibility && this.isLeftButtonPressed && this.CanHandle()) 13022 this.OnMouseUp(evt); 13023 }.aspxBind(this)); 13024 if(!ASPx.Browser.TouchUI && this.GetVisibilityMode() != ElementVisibilityModeEnum.Always) 13025 MouseEnterHelper.AddHandler(this.GetContainer(), function () { this.Appear() }.aspxBind(this), function () { this.Disappear() }.aspxBind(this)); 13026 }, 13027 OnMouseUp: function (evt) { 13028 }, 13029 Appear: function () { 13030 this.Animate(1); 13031 }, 13032 Disappear: function () { 13033 this.Animate(this.defaultOpacity); 13034 }, 13035 GetAnimationElements: function () { 13036 return []; 13037 }, 13038 Animate: function (value) { 13039 var elements = this.GetAnimationElements(); 13040 var hasAnimation = this.GetAnimationType() != AnimationTypeEnum.None; 13041 for(var i = 0; i < elements.length; i++) { 13042 if(hasAnimation) 13043 ASPx.AnimationHelper.fadeTo(elements[i], { to: value }); 13044 else 13045 ASPx.SetStyles(elements[i], { opacity: value }); 13046 } 13047 }, 13048 SetInnerHtml: function (element, html) { 13049 element.innerHTML = html; 13050 } 13051 }); 13052 var SlideShowButton = ASPx.CreateClass(ButtonBase, { 13053 constructor: function (itemsOwner) { 13054 this.wrapperElement = null; 13055 this.playButton = null; 13056 this.pauseButton = null; 13057 this.itemsOwner = itemsOwner; 13058 this.constructor.prototype.constructor.call(this, itemsOwner); 13059 }, 13060 GetMouseUpElement: function () { 13061 return this.wrapperElement; 13062 }, 13063 GetAnimationElements: function () { 13064 return [this.wrapperElement]; 13065 }, 13066 GetVisibilityMode: function () { 13067 return this.GetImageSlider().playPauseBtnVbl; 13068 }, 13069 CreateControlHierarchy: function () { 13070 var slider = this.GetImageSlider(); 13071 this.wrapperElement = this.CreateDiv(); 13072 this.wrapperElement.innerHTML = slider.playBH + slider.pauseBH; 13073 this.playButton = this.wrapperElement.children[0]; 13074 this.pauseButton = this.wrapperElement.children[1]; 13075 this.GetContainer().appendChild(this.wrapperElement); 13076 }, 13077 PrepareControlHierarchy: function () { 13078 ButtonBase.prototype.PrepareControlHierarchy.call(this);
13079 this.wrapperElement.className = CssClassesConstants.PlayPauseWrapperCssClassName; 13080 this.SetButtonState(true); 13081 }, 13082 IsPlaying: function () { 13083 return this.GetImageSlider().IsSlideShowPlaying(); 13084 }, 13085 OnMouseUp: function (evt) { 13086 var slider = this.GetImageSlider(); 13087 if(this.IsPlaying()) 13088 slider.Pause() 13089 else 13090 slider.Play() 13091 }, 13092 SetButtonState: function (play) { 13093 ASPx.SetElementDisplay(this.playButton, play); 13094 ASPx.SetElementDisplay(this.pauseButton, !play); 13095 } 13096 }); 13097 var NavigationButtons = ASPx.CreateClass(ButtonBase, { 13098 constructor: function (itemsOwner) { 13099 this.prevButtonEnable = true; 13100 this.nextButtonEnable = true; 13101 this.prevButton = null; 13102 this.nextButton = null; 13103 this.prevButtonWrapper = null; 13104 this.nextButtonWrapper = null; 13105 this.constructor.prototype.constructor.call(this, itemsOwner); 13106 }, 13107 GetUniqueId: function () { 13108 return this.GetOwner().GetUniqueId(); 13109 }, 13110 IsEnablePagingByClick: function () { 13111 return this.GetOwner().IsEnablePagingByClick(); 13112 }, 13113 IsHorizontal: function () { 13114 return this.GetOwner().IsHorizontalNavigation(); 13115 }, 13116 GetVisibilityMode: function () { 13117 return this.GetOwner().GetNavigationBtnsVisibilityMode(); 13118 }, 13119 OnPrevButtonMouseUp: function (evt) { 13120 if(this.prevButtonEnable) 13121 this.GetOwner().PerformBackward(); 13122 return ASPx.Evt.PreventEvent(evt); 13123 }, 13124 OnNextButtonMouseUp: function (evt) { 13125 if(this.nextButtonEnable) 13126 this.GetOwner().PerformForward(); 13127 return ASPx.Evt.PreventEvent(evt); 13128 }, 13129 CreateControlHierarchy: function () { 13130 this.prevButtonWrapper = this.CreateDiv(); 13131 this.nextButtonWrapper = this.CreateDiv(); 13132 this.SetInnerHtml(this.prevButtonWrapper, this.GetOwner().GetPrevButtonHtml()); 13133 this.SetInnerHtml(this.nextButtonWrapper, this.GetOwner().GetNextButtonHtml()); 13134 this.prevButton = this.prevButtonWrapper.firstChild; 13135 this.nextButton = this.nextButtonWrapper.firstChild; 13136 var container = this.GetContainer(); 13137 container.appendChild(this.prevButtonWrapper); 13138 container.appendChild(this.nextButtonWrapper); 13139 }, 13140 PrepareControlHierarchy: function () { 13141 ButtonBase.prototype.PrepareControlHierarchy.call(this); 13142 this.SetId(this.prevButtonWrapper, "nbwb"); 13143 this.SetId(this.nextButtonWrapper, "nbwf"); 13144 this.PrepareButtonWrapper(this.prevButtonWrapper, this.GetPrevButtonWrapperCssClassName()); 13145 this.PrepareButtonWrapper(this.nextButtonWrapper, this.GetNextButtonWrapperCssClassName()); 13146 }, 13147 GetPrevButtonWrapperCssClassName: function () { 13148 return this.IsHorizontal() ? 13149 CssClassesConstants.NavigationButtonBackwardWrapperCssClassName : CssClassesConstants.NavigationButtonUpWrapperCssClassName; 13150 }, 13151 GetNextButtonWrapperCssClassName: function () { 13152 return this.IsHorizontal() ? 13153 CssClassesConstants.NavigationButtonForwardWrapperCssClassName : CssClassesConstants.NavigationButtonDownWrapperCssClassName; 13154 }, 13155 PrepareButtonWrapper: function (wrapper, className) { 13156 wrapper.className = className; 13157 var stateController = this.GetStateController(); 13158 if(stateController) { 13159 if(this.IsEnabled()) { 13160 stateController.AddHoverItem(wrapper.id, [className + CssClassesConstants.NavigationButtonWrapperHoverCssClassPostfix], [""], [""], null, null, false); 13161 stateController.AddPressedItem(wrapper.id, [className + CssClassesConstants.NavigationButtonWrapperPressedCssClassPostfix], [""], [""], null, null, false); 13162 } 13163 stateController.AddDisabledItem(wrapper.id, [className + CssClassesConstants.NavigationButtonWrapperDisabledCssClassPostfix], [""], [""], null, null, false); 13164 } 13165 }, 13166 SetId: function (element, id) { 13167 element.id = this.GetClientControlName() + this.GetOwner().GetUniqueId() + id; 13168 }, 13169 OnMouseUp: function (evt) { 13170 var value = true; 13171 var container = this.GetContainer(); 13172 var source = ASPx.Evt.GetEventSource(evt); 13173 if(this.IsEnablePagingByClick() && !this.IsSlideShowButton(source) && !ASPx.IsInteractiveControl(source)) { 13174 var containerSize = this.IsHorizontal() ? container.offsetWidth : container.offsetHeight; 13175 var leftLimitPos = containerSize * 0.35, 13176 rightLimitPos = containerSize * 0.65; 13177 var mousePosInElement = this.IsHorizontal() ? ASPx.Evt.GetEventX(evt) - ASPx.GetAbsolutePositionX(container) : ASPx.Evt.GetEventY(evt) - ASPx.GetAbsolutePositionY(container); 13178 if(mousePosInElement < leftLimitPos) 13179 value = this.OnPrevButtonMouseUp(evt); 13180 else if(mousePosInElement > rightLimitPos) 13181 value = this.OnNextButtonMouseUp(evt); 13182 } 13183 else { 13184 if(source == this.prevButtonWrapper || source == this.prevButton) 13185 value = this.OnPrevButtonMouseUp(evt); 13186 else if(source == this.nextButtonWrapper || source == this.nextButton) 13187 value = this.OnNextButtonMouseUp(evt); 13188 } 13189 return value; 13190 }, 13191 IsSlideShowButton: function (element) {
13192 var className = CssClassesConstants.PlayPauseWrapperCssClassName; 13193 return element.className == className || element.parentNode.className == className; 13194 }, 13195 SetEnablePrevButton: function (enable) { 13196 this.prevButtonEnable = enable; 13197 var stateController = this.GetStateController(); 13198 if(stateController) { 13199 stateController.SetElementEnabled(this.prevButtonWrapper, enable); 13200 stateController.SetElementEnabled(this.prevButton, enable); 13201 } 13202 }, 13203 SetEnableNextButton: function (enable) { 13204 this.nextButtonEnable = enable; 13205 var stateController = this.GetStateController(); 13206 if(stateController) { 13207 stateController.SetElementEnabled(this.nextButtonWrapper, enable); 13208 stateController.SetElementEnabled(this.nextButton, enable); 13209 } 13210 }, 13211 SetVisibilityButtons: function (visible) { 13212 if(this.visibility == visible) 13213 return; 13214 this.visibility = visible; 13215 ASPx.SetElementDisplay(this.prevButtonWrapper, this.visibility); 13216 ASPx.SetElementDisplay(this.nextButtonWrapper, this.visibility); 13217 }, 13218 GetVisibilityButtons: function () { 13219 return this.visibility; 13220 }, 13221 GetAnimationElements: function () { 13222 return [this.prevButtonWrapper, this.nextButtonWrapper]; 13223 }, 13224 GetPrevButtonWrapperSize: function () { 13225 return this.GetButtonSize(this.prevButtonWrapper); 13226 }, 13227 GetNextButtonWrapperSize: function () { 13228 return this.GetButtonSize(this.nextButtonWrapper); 13229 }, 13230 GetButtonSize: function (element) { 13231 return { width: element.offsetWidth, height: element.offsetHeight }; 13232 } 13233 }); 13234 var OutsideNavigationButtons = ASPx.CreateClass(NavigationButtons, { 13235 constructor: function (itemsOwner) { 13236 this.constructor.prototype.constructor.call(this, itemsOwner); 13237 }, 13238 GetAnimationElements: function () { 13239 return []; 13240 }, 13241 GetPrevButtonWrapperCssClassName: function () { 13242 return this.IsHorizontal() ? 13243 CssClassesConstants.NavigationButtonBackwardOutsideWrapperCssClassName : CssClassesConstants.NavigationButtonUpOutsideWrapperCssClassName; 13244 }, 13245 GetNextButtonWrapperCssClassName: function () { 13246 return this.IsHorizontal() ? 13247 CssClassesConstants.NavigationButtonForwardOutsideWrapperCssClassName : CssClassesConstants.NavigationButtonDownOutsideWrapperCssClassName; 13248 } 13249 }); 13250 var ItemsOwnerBase = ASPx.CreateClass(ControlBase, { 13251 constructor: function (imageSlider) { 13252 this.activeItemIndex = 0; 13253 this.prevItemIndex = -1; 13254 this.fullItemWidth = 0; 13255 this.fullItemHeight = 0; 13256 this.clearItemWidth = 0; 13257 this.clearItemHeight = 0; 13258 this.itemElementsManager = null; 13259 this.navigationButtons = null; 13260 this.slidePanelElement = null; 13261 this.constructor.prototype.constructor.call(this, imageSlider); 13262 }, 13263 Initialize: function () { 13264 this.activeItemIndex = this.GetRtlIndex(this.GetImageSlider().activeItemIndex); 13265 if(this.IsRtl()) 13266 this.prevItemIndex = this.activeItemIndex + 1; 13267 }, 13268 GetRtlIndex: function (index) { 13269 if(this.IsRtl()) 13270 return this.GetItemCount() - 1 - index; 13271 return index; 13272 }, 13273 ForEachItem: function (func) { 13274 var count = this.GetItemCount(); 13275 if(!this.IsRtl()) { 13276 for(var i = 0; i < count ; i++) 13277 func.call(this, i); 13278 } 13279 else { 13280 for(var i = count - 1; i >= 0; i--) 13281 func.call(this, i); 13282 } 13283 }, 13284 GetUniqueId: function () { 13285 return ""; 13286 }, 13287 IsAccessibilityCompliant: function () { 13288 return this.GetImageSlider().accessibilityCompliant; 13289 }, 13290 GetItemElementsManager: function () { 13291 if(!this.itemElementsManager) 13292 this.itemElementsManager = this.CreateItemElementsManager(); 13293 return this.itemElementsManager; 13294 }, 13295 CreateItemElementsManager: function () { 13296 return new ItemElementsManagerBase(this); 13297 }, 13298 GetTemplate: function (index) { 13299 return this.IsValidItemIndex(index) ? this.GetItem(index).tpl : null; 13300 }, 13301 GetNavigateUrl: function (index) { 13302 return this.IsValidItemIndex(index) ? this.GetItem(index).u : null; 13303 }, 13304 GetImageSrc: function (index) { 13305 return this.IsValidItemIndex(index) ? this.GetItem(index).s : null; 13306 }, 13307 GetItemAlternateText: function (index) { 13308 if(this.IsValidItemIndex(index)) { 13309 var item = this.GetItem(index); 13310 return item.t || item.at || ""; 13311 } 13312 return ""; 13313 }, 13314 GetItem: function (index) { 13315 return this.GetImageSlider().GetItemInternal(this.GetRtlIndex(index)); 13316 }, 13317 GetItemCount: function () { 13318 return this.GetImageSlider().GetItemCount(); 13319 }, 13320 SetActiveItemIndex: function (index, preventAnimation) { 13321 if(!this.IsEnabled() || !this.IsValidItemIndex(index) || index == this.GetActiveItemIndex()) 13322 return; 13323 this.prevItemIndex = this.GetActiveItemIndex(); 13324 this.activeItemIndex = index;
13325 this.SetActiveItemIndexInternal(index, preventAnimation); 13326 }, 13327 SetActiveItemIndexInternal: function (index, preventAnimation) { 13328 this.UpdateNavigationButtonsState(); 13329 }, 13330 GetActiveItemIndex: function () { 13331 return this.activeItemIndex; 13332 }, 13333 GetPrevItemIndex: function () { 13334 return this.prevItemIndex; 13335 }, 13336 GetItemElement: function (index) { 13337 return this.IsValidItemIndex(index) ? this.GetItemElementsManager().GetCollection()[index] : null; 13338 }, 13339 GetImageElement: function (index) { 13340 return ASPx.GetChildByTagName(this.GetItemElement(index), "IMG"); 13341 }, 13342 GetCanvasElement: function (index) { 13343 return ASPx.GetChildByTagName(this.GetItemElement(index), "CANVAS"); 13344 }, 13345 GetHyperLinkElement: function (index) { 13346 return ASPx.GetChildByClassName(this.GetItemElement(index), CssClassesConstants.ItemHyperLinkCssClassName); 13347 }, 13348 GetImageContainerElement: function (index) { 13349 return this.GetHyperLinkElement(index) || this.GetItemElement(index); 13350 }, 13351 GetItemElementSize: function (clear) { 13352 return this.IsHorizontalNavigation() ? this.GetItemElementWidth(clear) : this.GetItemElementHeight(clear); 13353 }, 13354 GetItemElementWidth: function (clear) { 13355 return clear ? this.clearItemWidth : this.fullItemWidth; 13356 }, 13357 GetItemElementHeight: function (clear) { 13358 return clear ? this.clearItemHeight : this.fullItemHeight; 13359 }, 13360 GetSlidePanelElement: function () { 13361 return this.slidePanelElement; 13362 }, 13363 GetItemsContainer: function () { 13364 return null; 13365 }, 13366 StopPlayingWhenPaging: function () { 13367 this.GetImageSlider().StopPlayingWhenPaging(); 13368 }, 13369 CanCreateNavigationButtons: function () { 13370 return true; 13371 }, 13372 CreateNavigationButtons: function () { 13373 if(this.GetNavigationBtnsVisibilityMode() == ElementVisibilityModeEnum.None) 13374 return null; 13375 return new NavigationButtons(this); 13376 }, 13377 GetNavigationBtnsVisibilityMode: function () { 13378 return this.GetImageSlider().navBtnsVbl; 13379 }, 13380 UpdateNavigationButtonsState: function () { 13381 return false; 13382 }, 13383 GetButtonsContainer: function () { 13384 return null; 13385 }, 13386 GetPrevButtonHtml: function () { 13387 return ""; 13388 }, 13389 GetNextButtonHtml: function () { 13390 return ""; 13391 }, 13392 CanHandleButtons: function () { 13393 return !this.IsExecutedGesture(); 13394 }, 13395 IsExecutedGesture: function () { 13396 return ASPx.GesturesHelper.IsExecutedGesture(); 13397 }, 13398 IsEnablePagingByClick: function () { 13399 return false; 13400 }, 13401 SetEnablePrevButton: function (enabled) { 13402 if(this.navigationButtons) 13403 this.navigationButtons.SetEnablePrevButton(enabled); 13404 }, 13405 SetEnableNextButton: function (enabled) { 13406 if(this.navigationButtons) 13407 this.navigationButtons.SetEnableNextButton(enabled); 13408 }, 13409 SetVisibilityButtons: function (visible) { 13410 if(this.navigationButtons) 13411 this.navigationButtons.SetVisibilityButtons(visible); 13412 }, 13413 PerformBackward: function () { 13414 }, 13415 PerformForward: function () { 13416 }, 13417 PerformRollBack: function () { 13418 }, 13419 GetEnableLoopNavigation: function () { 13420 return false; 13421 }, 13422 GetImageLoadMode: function () { 13423 return this.GetImageSlider().imageLoadMode; 13424 }, 13425 UpdateItemElementsIfRequired: function () { 13426 this.GetItemElementsManager().UpdateHierarchyIfRequired(); 13427 }, 13428 UpdateItemElementsAfterDelayIfRequired: function () { 13429 this.GetItemElementsManager().UpdateHierarchyAfterDelayIfRequired(); 13430 }, 13431 IsNeedCreateHyperLink: function () { 13432 return true; 13433 }, 13434 GetTarget: function () { 13435 return this.GetImageSlider().target; 13436 }, 13437 CreateTemplates: function () { 13438 this.ForEachItem(function (i) { 13439 var template = this.GetTemplate(i); 13440 if(template) { 13441 var itemElement = this.GetItemElement(i); 13442 var child = itemElement.firstChild ? itemElement.firstChild.cloneNode(true) : null; 13443 itemElement.innerHTML = template; 13444 if(child) 13445 itemElement.appendChild(child); 13446 } 13447 }); 13448 }, 13449 CreateControlHierarchy: function () { 13450 this.CreateControlHierarchyInternal(); 13451 if(this.CanCreateNavigationButtons()) 13452 this.navigationButtons = this.CreateNavigationButtons(); 13453 this.GetItemElementsManager().CreateItemsIfRequired(); 13454 }, 13455 CreateControlHierarchyInternal: function () { 13456 }, 13457 CreateItemElements: function () { 13458 this.ForEachItem(function (i) { 13459 this.GetItemsContainer().appendChild(this.CreateItemElement(i)); 13460 }); 13461 }, 13462 CreateItemElement: function (index) { 13463 var itemElement = this.CreateDiv(); 13464 if(!this.GetTemplate(index)) { 13465 var hyperLinkElement = this.CreateHyperLinkElement(index); 13466 if(hyperLinkElement) 13467 itemElement.appendChild(hyperLinkElement); 13468 } 13469 return itemElement; 13470 }, 13471 CreateImageElement: function (index) { 13472 var image = new Image(); 13473 ASPx.SetElementDisplay(image, false); 13474 this.AttachLoadEvent(image); 13475 this.GetImageContainerElement(index).appendChild(image); 13476 image.dxIndex = index; 13477 image.dxImageSlider = this; 13478 image.src = this.GetImageSrc(index); 13479 image.alt = this.IsAccessibilityCompliant() ? this.GetItemAlternateText(index) : ""; 13480 return image; 13481 }, 13482 CreateHyperLinkElement: function (index) { 13483 var url = this.GetNavigateUrl(index); 13484 if(!this.IsNeedCreateHyperLink() || !url) 13485 return null; 13486 var element = document.createElement("A"); 13487 element.target = this.GetTarget();
13488 element.className = CssClassesConstants.ItemHyperLinkCssClassName; 13489 element.href = url; 13490 return element; 13491 }, 13492 PrepareControlHierarchy: function () { 13493 this.GetItemElementsManager().PrepareItemsIfRequired(); 13494 }, 13495 PrepareItemElements: function () { 13496 this.ForEachItem(function (i) { 13497 this.PrepareItemElement(i); 13498 }); 13499 }, 13500 PrepareItemElement: function (index) { 13501 var itemElement = this.GetItemElement(index); 13502 ASPx.SetStyles(itemElement, { 13503 className: this.GetItemElementCssClass(), 13504 cssText: this.GetItemElementStyle() 13505 }); 13506 if(this.GetTemplate(index)) 13507 ASPx.ImageControlUtils.RemoveLoadingGif(itemElement); 13508 }, 13509 AdjustControl: function () { 13510 ControlBase.prototype.AdjustControl.call(this); 13511 if(this.navigationButtons) 13512 this.navigationButtons.AdjustControl(); 13513 this.AdjustControlInternal(); 13514 this.SetActiveItemIndexInternal(this.GetActiveItemIndex(), true); 13515 }, 13516 AdjustControlInternal: function () { 13517 this.AdjustItemElements(); 13518 }, 13519 AdjustItemElements: function () { 13520 this.GetItemElementsManager().AdjustItemsIfRequired(); 13521 }, 13522 CalculateSize: function () { 13523 var fakeElement = this.CreateDiv(); 13524 ASPx.SetStyles(fakeElement, { 13525 className: this.GetItemElementCssClass(), 13526 cssText: this.GetItemElementStyle() 13527 }); 13528 this.CalculateItemElementSize(fakeElement); 13529 ASPx.RemoveElement(fakeElement); 13530 }, 13531 CalculateItemElementSize: function (element) { 13532 }, 13533 AdjustItemElement: function (index) { 13534 ASPx.SetStyles(this.GetItemElement(index), { 13535 width: this.GetItemElementWidth(true), 13536 height: this.GetItemElementHeight(true) 13537 }); 13538 }, 13539 AdjustImageElement: function (index) { 13540 if(this.GetTemplate(index) || !this.GetImageSrc(index)) 13541 return; 13542 var image = this.GetImageElement(index); 13543 if(!image) 13544 image = this.CreateImageElement(index); 13545 else if(ASPx.ImageControlUtils.IsImageLoaded(image)) 13546 this.ResizeImage(image, index); 13547 }, 13548 GetItemElementCssClass: function () { 13549 return ""; 13550 }, 13551 GetItemElementStyle: function () { 13552 return ""; 13553 }, 13554 ResizeImage: function (image, index) { 13555 ASPx.ImageControlUtils.ResizeImage(image, { 13556 width: this.GetItemElementWidth(true), 13557 height: this.GetItemElementHeight(true), 13558 sizeMode: this.GetImageSizeMode(), 13559 rtl: this.IsRtl(true), 13560 onEndResize: function(element, isCanvas) { 13561 if(isCanvas) 13562 this.PrepareCanvasElement(index); 13563 }.aspxBind(this), 13564 canUseCanvas: !this.IsAccessibilityCompliant() 13565 }); 13566 }, 13567 PrepareCanvasElement: function (index) { 13568 }, 13569 GetImageSizeMode: function () { 13570 return this.GetImageSlider().imageSizeMode; 13571 }, 13572 GetSwipeGestureElement: function () { 13573 return this.GetSlidePanelElement(); 13574 }, 13575 CanCreateSwipeGestureHandler: function () { 13576 return false; 13577 }, 13578 CreateSwipeGestureHandler: function () { 13579 ASPx.GesturesHelper.AddSwipeSlideGestureHandler( 13580 this.GetClientControlName() + this.GetUniqueId(), 13581 function () { return this.GetSwipeGestureElement(); }.aspxBind(this), 13582 this.IsHorizontalNavigation() ? ASPx.AnimationHelper.SLIDE_HORIZONTAL_DIRECTION : ASPx.AnimationHelper.SLIDE_VERTICAL_DIRECTION, 13583 function (evt) { return this.CanHandleSwipeGesture(evt); }.aspxBind(this), 13584 function () { this.PerformBackward(); }.aspxBind(this), 13585 function () { this.PerformForward(); }.aspxBind(this), 13586 function () { this.PerformRollBack(); }.aspxBind(this) 13587 ); 13588 }, 13589 CanHandleSwipeGesture: function (evt) { 13590 return !!ASPx.GetIsParent(this.GetSwipeGestureElement(), ASPx.Evt.GetEventSource(evt)); 13591 }, 13592 InitializeHandlers: function () { 13593 if(this.GetImageSlider().allowMouseWheel && !(ASPx.Browser.Edge && ASPx.Browser.MSTouchUI)) 13594 ASPx.Evt.AttachEventToElement(this.GetItemsContainer(), ASPx.Evt.GetMouseWheelEventName(), function (evt) { this.OnMouseWheel(evt); }.aspxBind(this)); 13595 if(this.CanCreateSwipeGestureHandler() && this.GetImageSlider().enablePagingGestures) 13596 this.CreateSwipeGestureHandler(); 13597 }, 13598 AttachLoadEvent: function (image) { 13599 ASPx.Evt.AttachEventToElement(image, "load", _onImageLoad); 13600 }, 13601 DetachLoadEvents: function (image) { 13602 ASPx.Evt.DetachEventFromElement(image, "load", _onImageLoad); 13603 }, 13604 OnMouseWheel: function (evt) { 13605 if(!this.IsFocused()) 13606 return; 13607 if(ASPx.Evt.GetWheelDelta(evt) > 0) 13608 this.PerformBackward(); 13609 else 13610 this.PerformForward(); 13611 return ASPx.Evt.PreventEvent(evt); 13612 }, 13613 OnImageLoad: function (image) { 13614 this.InitializeImage(image); 13615 this.ResizeImage(image, image.dxIndex); 13616 ASPx.ImageControlUtils.RemoveLoadingGif(this.GetItemElement(image.dxIndex)); 13617 }, 13618 InitializeImage: function (image) {
13619 if(image.naturalWidth && image.naturalHeight) 13620 return; 13621 image.naturalWidth = image.width; 13622 image.naturalHeight = image.height; 13623 }, 13624 GetElementTransformPosition: function (element) { 13625 return ASPx.AnimationUtils.GetTransformValue(element, !this.IsHorizontalNavigation()); 13626 }, 13627 SetElementTransformPosition: function (element, position) { 13628 ASPx.AnimationUtils.SetTransformValue(element, position, !this.IsHorizontalNavigation()); 13629 }, 13630 GetWidth: function () { 13631 return 0; 13632 }, 13633 GetHeight: function () { 13634 return 0; 13635 }, 13636 IsFocused: function () { 13637 return this.GetImageSlider().IsFocused(); 13638 }, 13639 CreateDocumentFragment: function () { 13640 var fragment = null; 13641 if(document.createDocumentFragment) 13642 fragment = document.createDocumentFragment(); 13643 return fragment; 13644 }, 13645 IsValidItemIndex: function (index) { 13646 if(index >= 0 && index < this.GetItemCount()) 13647 return true; 13648 return false; 13649 } 13650 }); 13651 function _onImageLoad(evt) { 13652 var image = evt.srcElement || this; 13653 if(!image.dxImageSlider) 13654 return; 13655 var imageSlider = image.dxImageSlider; 13656 imageSlider.DetachLoadEvents(image); 13657 if(!image.parentNode) return; 13658 imageSlider.OnImageLoad(image); 13659 } 13660 var ImageAreaStrategy = ASPx.CreateClass(ItemsOwnerBase, { 13661 constructor: function (imageSlider) { 13662 this.currentItemTextElementOpacity = 0; 13663 this.defaultItemTextElementOpacity = 0; 13664 this.touchDeviceElementsVisible = false; 13665 this.imageAreaStyleSize = { width: "", height: "" }; 13666 this.imageAreaElement = null; 13667 this.slideShowButton = null; 13668 this.overlayLinkElement = null; 13669 this.overlayImageElement = null; 13670 this.constructor.prototype.constructor.call(this, imageSlider); 13671 }, 13672 Initialize: function () { 13673 ItemsOwnerBase.prototype.Initialize.call(this); 13674 if(this.GetItemTextVisibilityMode() == ElementVisibilityModeEnum.Faded) 13675 this.defaultItemTextElementOpacity = FadedDefaultOpacity; 13676 else if(ASPx.Browser.Firefox) 13677 this.defaultItemTextElementOpacity = 0.01; 13678 this.currentItemTextElementOpacity = this.defaultItemTextElementOpacity; 13679 }, 13680 GetUniqueId: function () { 13681 return "_ia_"; 13682 }, 13683 CreateItemElementsManager: function () { 13684 return new ImageAreaItemElementsManager(this); 13685 }, 13686 GetTextTemplate: function (index) { 13687 return this.GetItem(index).ttpl; 13688 }, 13689 GetItemText: function (index) { 13690 return this.IsValidItemIndex(index) ? this.GetItem(index).t : null; 13691 }, 13692 SetSlideShowButtonState: function (play) { 13693 if(this.slideShowButton) 13694 this.slideShowButton.SetButtonState(play); 13695 }, 13696 IsEnablePagingByClick: function () { 13697 return this.GetImageSlider().enablePagingByClick; 13698 }, 13699 GetButtonsContainer: function () { 13700 return this.GetImageSlider().GetPassePartoutElement(); 13701 }, 13702 GetPrevButtonHtml: function () { 13703 return this.GetImageSlider().pbh; 13704 }, 13705 GetNextButtonHtml: function () { 13706 return this.GetImageSlider().nbh; 13707 }, 13708 UpdateNavigationButtonsState: function () { 13709 if(this.navigationButtons) { 13710 if(this.GetItemCount() == 1) 13711 this.SetVisibilityButtons(false); 13712 else { 13713 var currentItemIndex = this.GetActiveItemIndex(); 13714 this.SetEnablePrevButton(currentItemIndex != 0); 13715 this.SetEnableNextButton(currentItemIndex != this.GetItemCount() - 1); 13716 } 13717 } 13718 return false; 13719 }, 13720 PerformBackward: function () { 13721 this.StopPlayingWhenPaging(); 13722 var index = this.GetActiveItemIndex(); 13723 index--; 13724 if(index < 0 && this.GetEnableLoopNavigation()) 13725 index = this.GetItemCount() - 1; 13726 this.GetImageSlider().SetActiveItemIndexInternal(index); 13727 }, 13728 PerformForward: function () { 13729 this.StopPlayingWhenPaging(); 13730 var index = this.GetActiveItemIndex(); 13731 index++; 13732 if(index == this.GetItemCount() && this.GetEnableLoopNavigation()) 13733 index = 0; 13734 this.GetImageSlider().SetActiveItemIndexInternal(index); 13735 }, 13736 PerformRollBack: function () {
13737 this.SetActiveItemIndexInternal(this.GetActiveItemIndex(), false); 13738 }, 13739 CreateControlHierarchy: function () { 13740 ItemsOwnerBase.prototype.CreateControlHierarchy.call(this); 13741 this.CreateOverlayElements(); 13742 }, 13743 CreateTemplates: function () { 13744 ItemsOwnerBase.prototype.CreateTemplates.call(this); 13745 this.ForEachItem(function (i) { 13746 var template = this.GetTextTemplate(i); 13747 if(template) 13748 this.GetItemTextElement(i).innerHTML = template; 13749 }); 13750 }, 13751 CreateControlHierarchyInternal: function () { 13752 ItemsOwnerBase.prototype.CreateControlHierarchyInternal.call(this); 13753 this.CreateImageAreaElement(); 13754 this.CreateSlideShowButton(); 13755 }, 13756 CreateImageAreaElement: function () { 13757 this.imageAreaElement = document.createElement("DIV"); 13758 this.GetImageSlider().GetPassePartoutElement().appendChild(this.imageAreaElement); 13759 }, 13760 CreateSlideShowButton: function () { 13761 if(this.GetImageSlider().playPauseBtnVbl != ElementVisibilityModeEnum.None) 13762 this.slideShowButton = new SlideShowButton(this); 13763 }, 13764 CreateOverlayElements: function () { 13765 var itemsContainer = this.GetItemsContainer(); 13766 if(!itemsContainer) 13767 return; 13768 if(this.GetImageSlider().HasNavigateUrls()) { 13769 this.overlayLinkElement = document.createElement("A"); 13770 itemsContainer.insertBefore(this.overlayLinkElement, itemsContainer.firstChild); 13771 this.overlayLinkElement.className = CssClassesConstants.OverlayElementCssClass; 13772 this.overlayLinkElement.target = this.GetTarget(); 13773 } 13774 this.overlayImageElement = document.createElement("IMG"); 13775 this.overlayImageElement.src = ASPx.EmptyImageUrl; 13776 this.overlayImageElement.alt = ""; 13777 if(this.overlayLinkElement) 13778 this.overlayLinkElement.appendChild(this.overlayImageElement); 13779 else { 13780 this.overlayImageElement.className = CssClassesConstants.OverlayElementCssClass; 13781 itemsContainer.insertBefore(this.overlayImageElement, itemsContainer.firstChild); 13782 } 13783 }, 13784 UpdateOverlayParameters: function () { 13785 var activeItemIndex = this.GetActiveItemIndex(); 13786 var currentItem = this.GetItem(activeItemIndex); 13787 if(this.overlayLinkElement) { 13788 if(!currentItem.u) 13789 this.overlayLinkElement.removeAttribute("href"); 13790 else if(this.overlayLinkElement.href != currentItem.u) 13791 this.overlayLinkElement.href = currentItem.u; 13792 } 13793 if(this.overlayImageElement) { 13794 if(currentItem.s) 13795 this.overlayImageElement.src = currentItem.s; 13796 if(currentItem.tpl) 13797 this.overlayImageElement.style.display = "none"; 13798 else { 13799 this.overlayImageElement.style.display = ""; 13800 this.overlayImageElement.alt = this.IsAccessibilityCompliant() ? this.GetItemAlternateText(activeItemIndex) : ""; 13801 } 13802 } 13803 }, 13804 PrepareControlHierarchy: function () { 13805 ItemsOwnerBase.prototype.PrepareControlHierarchy.call(this); 13806 this.UpdateOverlayParameters(); 13807 var imageAreaElement = this.GetImageAreaElement(); 13808 ASPx.SetStyles(imageAreaElement, { 13809 className: this.GetImageSlider().imgAreaCssCl, 13810 cssText: this.GetImageSlider().imgAreaStyle 13811 }); 13812 this.imageAreaStyleSize = { 13813 width: imageAreaElement.style.width, 13814 height: imageAreaElement.style.height 13815 }; 13816 this.GetItemsContainer().style.zIndex = "0"; 13817 }, 13818 AdjustControl: function (width, height) { 13819 this.AdjustImageAreaElement(width, height); 13820 ItemsOwnerBase.prototype.AdjustControl.call(this); 13821 }, 13822 AdjustImageAreaElement: function (width, height) { 13823 var imageAreaElement = this.GetImageAreaElement(); 13824 if(!imageAreaElement.style.width) { 13825 ASPx.SetStyles(imageAreaElement, { width: width }); 13826 if(imageAreaElement.offsetWidth > width) 13827 ASPx.SetStyles(imageAreaElement, { width: width - (imageAreaElement.offsetWidth - width) }); 13828 } 13829 if(!imageAreaElement.style.height) { 13830 ASPx.SetStyles(imageAreaElement, { height: height }); 13831 if(imageAreaElement.offsetHeight > height) 13832 ASPx.SetStyles(imageAreaElement, { height: height - (imageAreaElement.offsetHeight - height) }); 13833 } 13834 if(imageAreaElement.offsetHeight < height) 13835 ASPx.SetStyles(imageAreaElement, { top: (height - imageAreaElement.offsetHeight) / 2 }); 13836 }, 13837 ResetControlStyle: function () { 13838 var imageAreaElement = this.GetImageAreaElement(); 13839 ASPx.SetStyles(imageAreaElement, this.imageAreaStyleSize); 13840 ASPx.SetStyles(imageAreaElement, { top: 0 }); 13841 }, 13842 IsNeedCreateHyperLink: function () { 13843 return false; 13844 }, 13845 SetActiveItemIndexInternal: function (index, preventAnimation) { 13846 ItemsOwnerBase.prototype.SetActiveItemIndexInternal.call(this, index, preventAnimation); 13847 this.UpdateOverlayParameters(); 13848 }, 13849 CalculateItemElementSize: function (fakeElement) { 13850 var imageArea = this.GetImageAreaElement(); 13851 imageArea.appendChild(fakeElement); 13852 this.fullItemWidth = SizeUtils.GetClientWidth(imageArea, true); 13853 this.fullItemHeight = SizeUtils.GetClientHeight(imageArea, true); 13854 ASPx.SetStyles(fakeElement, { 13855 width: this.fullItemWidth, 13856 height: this.fullItemHeight 13857 }); 13858 this.clearItemWidth = this.fullItemWidth - (SizeUtils.GetClientWidth(fakeElement) - this.fullItemWidth);
13859 this.clearItemHeight = this.fullItemHeight - (SizeUtils.GetClientHeight(fakeElement) - this.fullItemHeight); 13860 }, 13861 CreateItemElement: function (index) { 13862 var itemElement = ItemsOwnerBase.prototype.CreateItemElement.call(this, index); 13863 var textElement = this.CreateItemTextElement(index); 13864 if(!textElement) 13865 return itemElement; 13866 itemElement.appendChild(textElement); 13867 return itemElement; 13868 }, 13869 CreateItemTextElement: function (index) { 13870 var text = this.GetItemText(index); 13871 var textTemplate = this.GetTextTemplate(index); 13872 if(this.GetItemTextVisibilityMode() == ElementVisibilityModeEnum.None || (!text && !textTemplate)) 13873 return null; 13874 var itemTextElement = this.CreateDiv(); 13875 if(!textTemplate) 13876 itemTextElement.innerHTML = text; 13877 ASPx.SetStyles(itemTextElement, { className: this.GetImageSlider().itemTxtCssCl }); 13878 return itemTextElement; 13879 }, 13880 PrepareItemTextElement: function (index) { 13881 var itemTextElement = this.GetItemTextElement(index); 13882 if(itemTextElement) { 13883 var style = { cssText: this.GetImageSlider().itemTxtStyle, zIndex: 2, className: itemTextElement.className + " dx-wbv" }; 13884 if(this.GetItemTextVisibilityMode() != ElementVisibilityModeEnum.Always) 13885 style.opacity = this.currentItemTextElementOpacity; 13886 ASPx.SetStyles(itemTextElement, style); 13887 } 13888 }, 13889 PrepareItemElement: function (index) { 13890 ItemsOwnerBase.prototype.PrepareItemElement.call(this, index); 13891 this.PrepareItemTextElement(index); 13892 }, 13893 GetItemElementCssClass: function () { 13894 return this.GetImageSlider().itemCssCl; 13895 }, 13896 GetItemElementStyle: function () { 13897 return this.GetImageSlider().itemStyle; 13898 }, 13899 PrepareCanvasElement: function (index) { 13900 var canvas = this.GetCanvasElement(index); 13901 canvas.style.position = "absolute"; 13902 canvas.style.zIndex = "0"; 13903 }, 13904 GetItemTextElement: function (index) { 13905 var itemElement = this.GetItemElement(index); 13906 return itemElement ? ASPx.GetChildByClassName(itemElement, CssClasse
13906sConstants.TextAreaCssClassName) : null; 13907 }, 13908 GetImageAreaElement: function () { 13909 return this.imageAreaElement; 13910 }, 13911 GetItemTextVisibilityMode: function () { 13912 return this.GetImageSlider().itemTxtVbl; 13913 }, 13914 GetNavigationBarStrategy: function () { 13915 return this.GetImageSlider().GetNavigationBarStrategy(); 13916 }, 13917 HasMouseOverForTouchDevice: function () { 13918 if(!ASPx.Browser.TouchUI) 13919 return false; 13920 return this.HasMouseOverImageAreaNavigationButtons() || this.HasMouseOverNavigationBarNavigationButtons() || this.HasMouseOverTextArea() || this.HasMouseOverSlideShowButton(); 13921 }, 13922 HasMouseOverImageAreaNavigationButtons: function () { 13923 return this.IsMouseOverOrFaded(this.GetNavigationBtnsVisibilityMode()); 13924 }, 13925 HasMouseOverNavigationBarNavigationButtons: function () { 13926 var navigationBar = this.GetNavigationBarStrategy(); 13927 if(!navigationBar) 13928 return false; 13929 return this.IsMouseOverOrFaded(navigationBar.GetNavigationBtnsVisibilityMode()); 13930 }, 13931 HasMouseOverTextArea: function () { 13932 return this.IsMouseOverOrFaded(this.GetItemTextVisibilityMode()); 13933 }, 13934 HasMouseOverSlideShowButton: function () { 13935 return this.IsMouseOverOrFaded(this.GetImageSlider().playPauseBtnVbl); 13936 }, 13937 IsMouseOverOrFaded: function (visibility) { 13938 return visibility == ElementVisibilityModeEnum.Faded || visibility == ElementVisibilityModeEnum.OnMouseOver; 13939 }, 13940 InitializeHandlers: function () { 13941 ItemsOwnerBase.prototype.InitializeHandlers.call(this); 13942 var imageSlider = this.GetImageSlider(); 13943 imageSlider.StrategiesCreated.AddHandler(function () { 13944 if(this.CanHandleClickEvent()) 13945 ASPx.Evt.AttachEventToElement(this.GetImageAreaElement(), ASPx.Browser.TouchUI ? ASPx.TouchUIHelper.touchMouseUpEventName : "click", function (evt) { this.OnImageAreaClick(evt); }.aspxBind(this)); 13946 }.aspxBind(this)); 13947 if(!ASPx.Browser.TouchUI && this.IsMouseOverOrFaded(this.GetItemTextVisibilityMode())) 13948 MouseEnterHelper.AddHandler( 13949 imageSlider.GetPassePartoutElement(), 13950 function () { this.AppearTextElements(); }.aspxBind(this), 13951 function () { this.DisappearTextElements(); }.aspxBind(this) 13952 ); 13953 }, 13954 CanHandleClickEvent: function () { 13955 var imageSlider = this.GetImageSlider(); 13956 return !imageSlider.ItemClick.IsEmpty() || imageSlider.HasNavigateUrls() || this.HasMouseOverForTouchDevice(); 13957 }, 13958 OnImageAreaClick: function (evt) { 13959 this.GetImageSlider().RaiseItemClick(); 13960 if(!this.HasMouseOverForTouchDevice()) 13961 return; 13962 if(this.touchDeviceElementsVisible) { 13963 if(this.HasMouseOverTextArea()) 13964 this.DisappearTextElements(); 13965 if(this.HasMouseOverImageAreaNavigationButtons()) 13966 this.navigationButtons.Disappear(); 13967 if(this.HasMouseOverNavigationBarNavigationButtons()) 13968 this.GetNavigationBarStrategy().navigationButtons.Disappear(); 13969 if(this.HasMouseOverSlideShowButton()) 13970 this.slideShowButton.Disappear(); 13971 } 13972 else { 13973 if(this.HasMouseOverTextArea()) 13974 this.AppearTextElements(); 13975 if(this.HasMouseOverImageAreaNavigationButtons()) 13976 this.navigationButtons.Appear(); 13977 if(this.HasMouseOverNavigationBarNavigationButtons()) 13978 this.GetNavigationBarStrategy().navigationButtons.Appear(); 13979 if(this.HasMouseOverSlideShowButton()) 13980 this.slideShowButton.Appear(); 13981 } 13982 this.touchDeviceElementsVisible = !this.touchDeviceElementsVisible; 13983 }, 13984 AppearTextElements: function () { 13985 this.FadeItemTextElements(1); 13986 }, 13987 DisappearTextElements: function () { 13988 this.FadeItemTextElements(this.defaultItemTextElementOpacity); 13989 }, 13990 FadeItemTextElements: function (value) { 13991 this.currentItemTextElementOpacity = value; 13992 var activeItemIndex = this.GetActiveItemIndex(); 13993 this.ForEachItem(function (i) { 13994 var preventAnimation = true; 13995 if(i == activeItemIndex && this.GetAnimationType() != AnimationTypeEnum.None) 13996 preventAnimation = false; 13997 this.FadeItemTextElement(i, preventAnimation); 13998 }); 13999 }, 14000 FadeItemTextElement: function (index, preventAnimation) { 14001 var textElement = this.GetItemTextElement(index); 14002 if(!textElement) 14003 return; 14004 if(preventAnimation) 14005 ASPx.SetStyles(textElement, { opacity: this.currentItemTextElementOpacity }) 14006 else 14007 ASPx.AnimationHelper.fadeTo(textElement, { to: this.currentItemTextElementOpacity }); 14008 }, 14009 GetWidth: function () { 14010 return SizeUtils.GetClientWidth(this.GetImageAreaElement()); 14011 }, 14012 GetHeight: function () { 14013 return SizeUtils.GetClientHeight(this.GetImageAreaElement()); 14014 } 14015 }); 14016 var SlideImageAreaStrategy = ASPx.CreateClass(ImageAreaStrategy, { 14017 constructor: function (imageSlider) { 14018 this.constructor.prototype.constructor.call(this, imageSlider); 14019 }, 14020 SetActiveItemIndexInternal: function (index, preventAnimation) { 14021 ImageAreaStrategy.prototype.SetActiveItemIndexInternal.call(this, index, preventAnimation); 14022 this.UpdateItemElementsAfterDelayIfRequired(); 14023 var position = this.GetItemElementPosition(index); 14024 if(preventAnimation) { 14025 this.SetElementTransformPosition(this.GetSlidePanelElement(), position); 14026 this.UpdateItemElementsIfRequired(); 14027 } 14028 else 14029 ASPx.AnimationHelper.slideTo(this.GetSlidePanelElement(), { 14030 to: position, duration: this.GetImageSlider().animationDuration, 14031 direction: this.IsHorizontalNavigation() ? ASPx.AnimationHelper.SLIDE_HORIZONTAL_DIRECTION : ASPx.AnimationHelper.SLIDE_VERTICAL_DIRECTION, 14032 onComplete: function () { this.UpdateItemElementsIfRequired(); }.aspxBind(this) 14033 });
14034 }, 14035 PerformRollBack: function () { 14036 this.SetActiveItemIndexInternal(this.GetActiveItemIndex(), false); 14037 }, 14038 CreateControlHierarchyInternal: function () { 14039 ImageAreaStrategy.prototype.CreateControlHierarchyInternal.call(this); 14040 this.slidePanelElement = this.CreateDiv(); 14041 this.GetImageAreaElement().appendChild(this.slidePanelElement); 14042 }, 14043 PrepareControlHierarchy: function () { 14044 ImageAreaStrategy.prototype.PrepareControlHierarchy.call(this); 14045 var slideElement = this.GetSlidePanelElement(); 14046 slideElement.className = CssClassesConstants.ImageAreaSlidePanelCssClassName; 14047 this.PatchElementForMSTouch(slideElement); 14048 }, 14049 AdjustControlInternal: function () { 14050 ImageAreaStrategy.prototype.AdjustControlInternal.call(this); 14051 var horizontal = this.IsHorizontalNavigation(); 14052 var width = horizontal ? this.GetItemCount() * this.GetItemElementWidth() : this.GetItemElementWidth(); 14053 var height = !horizontal ? this.GetItemCount() * this.GetItemElementHeight() : this.GetItemElementHeight(); 14054 ASPx.SetStyles(this.GetSlidePanelElement(), { 14055 width: width, 14056 height: height 14057 }); 14058 }, 14059 AdjustItemElement: function (index) { 14060 ImageAreaStrategy.prototype.AdjustItemElement.call(this, index); 14061 var itemElement = this.GetItemElement(index); 14062 var position = this.IsHorizontalNavigation() ? this.GetItemElementWidth() * index : this.GetItemElementHeight() * index; 14063 if(this.IsHorizontalNavigation()) 14064 ASPx.SetStyles(itemElement, { left: position }); 14065 else 14066 ASPx.SetStyles(itemElement, { top: position }); 14067 }, 14068 GetItemsContainer: function () { 14069 return this.GetSlidePanelElement(); 14070 }, 14071 CanCreateSwipeGestureHandler: function () { 14072 return true; 14073 }, 14074 IsEnablePagingByClick: function () { 14075 var imageSlider = this.GetImageSlider(); 14076 return imageSlider.ItemClick.IsEmpty() && !imageSlider.HasNavigateUrls() && ImageAreaStrategy.prototype.IsEnablePagingByClick.call(this); 14077 }, 14078 OnImageAreaClick: function (evt) { 14079 if(this.IsExecutedGesture()) 14080 return ASPx.Evt.PreventEventAndBubble(evt); 14081 else 14082 ImageAreaStrategy.prototype.OnImageAreaClick.call(this, evt); 14083 }, 14084 GetItemElementPosition: function (index) { 14085 return this.IsHorizontalNavigation() ? -(index * this.GetItemElementWidth()) : -(index * this.GetItemElementHeight()); 14086 } 14087 }); 14088 var SlideLoopNavigationImageAreaStrategy = ASPx.CreateClass(SlideImageAreaStrategy, { 14089 constructor: function (imageSlider) { 14090 this.simpleTransition = null; 14091 this.constructor.prototype.constructor.call(this, imageSlider); 14092 }, 14093 CreateItemElementsManager: function () { 14094 return new LoopImageAreaItemElementsManager(this); 14095 }, 14096 GetEnableLoopNavigation: function () { 14097 return true; 14098 }, 14099 StartSlideSimpleTransition: function (from, to, preventAnimation) { 14100 this.UpdateItemsPosition(to - from, preventAnimation); 14101 if(!preventAnimation) { 14102 this.simpleTransition = ASPx.AnimationHelper.createSimpleAnimationTransition({ 14103 duration: this.GetImageSlider().animationDuration, 14104 onUpdate: function (value) { 14105 this.UpdateItemsPosition(value, true); 14106 }.aspxBind(this) 14107 }); 14108 this.simpleTransition.Start(from, to); 14109 } 14110 }, 14111 StopSimpleTransition: function () { 14112 if(this.simpleTransition) { 14113 this.simpleTransition.Cancel(); 14114 this.simpleTransition = null; 14115 } 14116 }, 14117 UpdateItemsPosition: function (value, needApplyPositions) { 14118 this.ForEachItem(function (i) { 14119 var element = this.GetItemElement(i); 14120 if(element) { 14121 element.dxPosition = element.dxPosition + value; 14122 if(needApplyPositions) 14123 this.SetItemPosition(element); 14124 } 14125 }); 14126 }, 14127 OnMouseMoveUpdatePosition: function (position) { 14128 this.StopSimpleTransition(); 14129 var itemSize = this.GetItemElementSize(); 14130 this.ForEachItem(function (i) { 14131 var element = this.GetItemElement(i); 14132 if(element) 14133 element.dxPosition = element.dxPosition + position; 14134 }); 14135 this.ForEachItem(function (i) { 14136 var element = this.GetItemElement(i); 14137 if(!element) 14138 return; 14139 this.SetItemPosition(element); 14140 if(element.dxPosition < 0 && ((element.dxPosition + itemSize) > 0)) { 14141 var index = i + 1; 14142 if(index == this.GetItemCount()) 14143 index = 0; 14144 var nextItem = this.GetItemElement(index); 14145 nextItem.dxPosition = element.dxPosition + itemSize; 14146 this.SetItemPosition(nextItem); 14147 } 14148 if(element.dxPosition < itemSize && ((element.dxPosition + itemSize) > itemSize)) { 14149 var index = i - 1; 14150 if(index < 0) 14151 index = this.GetItemCount() - 1; 14152 var nextItem = this.GetItemElement(index); 14153 nextItem.dxPosition = element.dxPosition - itemSize; 14154 this.SetItemPosition(nextItem); 14155 } 14156 }); 14157 }, 14158 SetItemPosition: function (itemElement) { 14159 this.SetElementTransformPosition(itemElement, itemElement.dxPosition); 14160 }, 14161 SetActiveItemIndexInternal: function (index, preventAnimation, isRollback) { 14162 ImageAreaStrategy.prototype.SetActiveItemIndexInternal.call(this, index, preventAnimation); 14163 this.StopSimpleTransition(); 14164 this.UpdateItemElementsIfRequired(); 14165 var currentIndex = this.GetPrevItemIndex(); 14166 if(currentIndex == -1 || this.IsRtl() && currentIndex == this.GetItemCount()) 14167 currentIndex = index; 14168 if(!isRollback) { 14169 var isLeft = currentIndex > index; 14170 if(currentIndex == 0 && index == this.GetItemCount() - 1) 14171 isLeft = true; 14172 if(currentIndex == this.GetItemCount() - 1 && index == 0) 14173 isLeft = false; 14174 var prevItem = this.GetItemElement(currentIndex); 14175 var nextIndex = isLeft ? currentIndex - 1 : currentIndex + 1; 14176 for(var i = 1; i < this.GetItemCount() ; i++) { 14177 if(isLeft && nextIndex < 0) 14178 nextIndex = this.GetItemCount() - 1; 14179 else if(nextIndex == this.GetItemCount()) 14180 nextIndex = 0; 14181 var nextItem = this.GetItemElement(nextIndex); 14182 if(nextItem) { 14183 nextItem.dxPosition = (isLeft ? -1 : 1) * (this.GetItemElementSize() * i) + prevItem.dxPosition; 14184 this.SetItemPosition(nextItem); 14185 } 14186 nextIndex = isLeft ? nextIndex - 1 : nextIndex + 1; 14187 } 14188 } 14189 var offset = this.GetItemElement(index).dxPosition; 14190 this.StartSlideSimpleTransition(offset, 0, preventAnimation); 14191 }, 14192 PerformRollBack: function () {
14193 this.SetActiveItemIndexInternal(this.GetActiveItemIndex(), false, true); 14194 }, 14195 CreateControlHierarchyInternal: function () { 14196 ImageAreaStrategy.prototype.CreateControlHierarchyInternal.call(this); 14197 }, 14198 PrepareControlHierarchy: function () { 14199 ImageAreaStrategy.prototype.PrepareControlHierarchy.call(this); 14200 this.PatchElementForMSTouch(this.GetImageAreaElement()); 14201 }, 14202 AdjustControlInternal: function () { 14203 ImageAreaStrategy.prototype.AdjustControlInternal.call(this); 14204 }, 14205 AdjustItemElement: function (index) { 14206 ImageAreaStrategy.prototype.AdjustItemElement.call(this, index); 14207 var itemElement = this.GetItemElement(index); 14208 itemElement.dxPosition = this.IsHorizontalNavigation() ? this.GetItemElementWidth() * index : this.GetItemElementHeight() * index;; 14209 this.SetItemPosition(itemElement); 14210 }, 14211 CreateSwipeGestureHandler: function () { 14212 ASPx.GesturesHelper.AddSwipeSlideGestureHandler( 14213 this.GetClientControlName() + this.GetUniqueId(), 14214 function () { return this.GetSwipeGestureElement(); }.aspxBind(this), 14215 this.IsHorizontalNavigation() ? ASPx.AnimationHelper.SLIDE_HORIZONTAL_DIRECTION : ASPx.AnimationHelper.SLIDE_VERTICAL_DIRECTION, 14216 function (evt) { return this.CanHandleSwipeGesture(evt); }.aspxBind(this), 14217 function () { this.PerformBackward(); }.aspxBind(this), 14218 function () { this.PerformForward(); }.aspxBind(this), 14219 function () { this.PerformRollBack(); }.aspxBind(this), 14220 function (position) { this.OnMouseMoveUpdatePosition(position); }.aspxBind(this) 14221 ); 14222 }, 14223 UpdateOverlayParameters: function () { 14224 SlideImageAreaStrategy.prototype.UpdateOverlayParameters.call(this); 14225 if(this.overlayImageElement) { 14226 var textElement = this.GetItemTextElement(this.GetActiveItemIndex()); 14227 if(textElement) 14228 this.overlayImageElement.style.height = (this.GetImageAreaElement().offsetHeight - textElement.offsetHeight) + "px"; 14229 } 14230 }, 14231 GetSwipeGestureElement: function () { 14232 return this.GetImageAreaElement(); 14233 }, 14234 GetItemsContainer: function () { 14235 return this.GetImageAreaElement(); 14236 }, 14237 UpdateNavigationButtonsState: function () { 14238 return false; 14239 } 14240 }); 14241 FadeImageAreaStrategy = ASPx.CreateClass(ImageAreaStrategy, { 14242 constructor: function (imageSlider) { 14243 this.constructor.prototype.constructor.call(this, imageSlider); 14244 }, 14245 SetActiveItemIndexInternal: function (index, preventAnimation) { 14246 ImageAreaStrategy.prototype.SetActiveItemIndexInternal.call(this, index, preventAnimation); 14247 this.UpdateItemElementsIfRequired(); 14248 var appearItem = this.GetItemElement(index); 14249 var disapperItem = this.GetItemElement(this.GetPrevItemIndex()); 14250 if(preventAnimation) { 14251 this.SetVisible(appearItem); 14252 if(disapperItem) 14253 this.SetInvisible(disapperItem); 14254 } 14255 else { 14256 var duration = this.GetImageSlider().animationDuration; 14257 ASPx.SetElementDisplay(appearItem, true); 14258 ASPx.AnimationHelper.fadeTo(disapperItem, { 14259 to: 0, duration: duration, 14260 onComplete: function (el) { ASPx.SetElementDisplay(el, false); } 14261 }); 14262 ASPx.AnimationHelper.fadeTo(appearItem, { 14263 to: 1, duration: duration 14264 }); 14265 } 14266 }, 14267 UpdateNavigationButtonsState: function () { 14268 if(!this.GetEnableLoopNavigation()) 14269 return ImageAreaStrategy.prototype.UpdateNavigationButtonsState.call(this); 14270 return false; 14271 }, 14272 AdjustItemElement: function (index) { 14273 ImageAreaStrategy.prototype.AdjustItemElement.call(this, index); 14274 this.SetInvisible(this.GetItemElement(index)); 14275 }, 14276 GetEnableLoopNavigation: function () { 14277 return this.GetImageSlider().enableLoopNavigation; 14278 }, 14279 CanCreateSwipeGestureHandler: function () { 14280 return true; 14281 }, 14282 GetSwipeGestureElement: function () { 14283 return this.GetImageAreaElement(); 14284 }, 14285 OnImageAreaClick: function (evt) { 14286 if(this.IsExecutedGesture()) 14287 return ASPx.Evt.PreventEventAndBubble(evt); 14288 else 14289 ImageAreaStrategy.prototype.OnImageAreaClick.call(this, evt); 14290 }, 14291 CreateSwipeGestureHandler: function () { 14292 ASPx.GesturesHelper.AddSwipeSlideGestureHandler( 14293 this.GetClientControlName() + this.GetUniqueId(), 14294 function () { return this.GetSwipeGestureElement(); }.aspxBind(this), 14295 this.IsHorizontalNavigation() ? ASPx.AnimationHelper.SLIDE_HORIZONTAL_DIRECTION : ASPx.AnimationHelper.SLIDE_VERTICAL_DIRECTION, 14296 function (evt) { return this.CanHandleSwipeGesture(evt); }.aspxBind(this), 14297 function () { this.PerformBackward(); }.aspxBind(this), 14298 function () { this.PerformForward(); }.aspxBind(this), 14299 function () { }, 14300 function () { } 14301 ); 14302 }, 14303 GetItemsContainer: function () { 14304 return this.GetImageAreaElement(); 14305 }, 14306 SetVisible: function (element) { 14307 ASPx.SetStyles(element, { 14308 display: "", 14309 opacity: 1 14310 }); 14311 }, 14312 SetInvisible: function (element) { 14313 ASPx.SetStyles(element, { 14314 display: "none", 14315 opacity: 0 14316 }); 14317 } 14318 }); 14319 var NoneImageAreaStrategy = ASPx.CreateClass(FadeImageAreaStrategy, { 14320 constructor: function (imageSlider) { 14321 this.constructor.prototype.constructor.call(this, imageSlider); 14322 }, 14323 SetActiveItemIndexInternal: function (index, preventAnimation) { 14324 FadeImageAreaStrategy.prototype.SetActiveItemIndexInternal.call(this, index, true); 14325 } 14326 }); 14327 var NavigationBarStrategy = ASPx.CreateClass(ItemsOwnerBase, { 14328 constructor: function (imageSlider) { 14329 this.navigationBarElement = null; 14330 this.slidePanelWrapperElement = null; 14331 this.lastSlideItemsPortionDate = new Date(); 14332 this.slideElementPosition = 0; 14333 this.constructor.prototype.constructor.call(this, imageSlider); 14334 }, 14335 GetUniqueId: function () { 14336 return "_nb_"; 14337 }, 14338 IsHorizontalNavigation: function () { 14339 var position = this.GetPositionMode(); 14340 return position == NavigationBarPositionEnum.Top || position == NavigationBarPositionEnum.Bottom; 14341 }, 14342 IsNeedCreateHyperLink: function () { 14343 return false; 14344 }, 14345 GetLoadingElement: function (index) { 14346 return null; 14347 }, 14348 CreateItemElementsManager: function () { 14349 return new NavigationBarItemElementsManager(this); 14350 }, 14351 GetTemplate: function (index) { 14352 return this.GetItem(index).tmtpl; 14353 }, 14354 GetImageSrc: function (index) { 14355 var thumbnailImageSrc = this.GetItem(index).ts; 14356 if(thumbnailImageSrc) 14357 return thumbnailImageSrc; 14358 return this.GetItem(index).s; 14359 }, 14360 SetActiveItemIndexInternal: function (index, preventAnimation) { 14361 var snapToLeft = this.IsSnapToLeft(index); 14362 var nextIndex = snapToLeft ? index - 1 : index + 1; 14363 if(this.GetImageSlider().extremeItemClickMode == ExtremeItemClickModeEnum.Select || !this.IsValidItemIndex(nextIndex)) 14364 nextIndex = index; 14365 if(!this.IsVisibleItemElement(nextIndex, true)) 14366 this.SlideToItem(nextIndex, snapToLeft, preventAnimation);
14367 this.SetActiveItemVisually(index, preventAnimation); 14368 }, 14369 IsVisibleItemElement: function (index, considerSize) { 14370 var slideWrapperElementSize = this.GetElementSize(this.GetSlidePanelWrapperElement()); 14371 var itemPosition = (this.GetItemElementSize() + this.GetItemSpacing()) * index; 14372 var itemPositionInSlideWrapper = this.ConvertItemPositionToSlideWrapperPosition(itemPosition); 14373 if(considerSize) 14374 return itemPositionInSlideWrapper >= 0 && itemPositionInSlideWrapper + this.GetItemElementSize() <= slideWrapperElementSize; 14375 return itemPositionInSlideWrapper + this.GetItemElementSize() >= 0 && itemPositionInSlideWrapper <= slideWrapperElementSize; 14376 }, 14377 IsSnapToLeft: function (index) { 14378 var slideWrapperElementSize = this.GetElementSize(this.GetSlidePanelWrapperElement()); 14379 var itemPosition = (this.GetItemElementSize() + this.GetItemSpacing()) * index; 14380 var lastItemSize = this.GetItemElementSize() + (index != this.GetItemCount() - 1 ? this.GetItemSpacing() : 0); 14381 return this.ConvertItemPositionToSlideWrapperPosition(itemPosition + lastItemSize) < (slideWrapperElementSize / 2); 14382 }, 14383 ConvertItemPositionToSlideWrapperPosition: function (itemPosition) { 14384 return this.GetElementTransformPosition(this.GetSlidePanelElement()) + itemPosition; 14385 }, 14386 SlideToItem: function (index, snapToLeft, preventAnimation) { 14387 this.UpdateItemElementsAfterDelayIfRequired(); 14388 this.CalculateSlideElementPosition(index, snapToLeft); 14389 this.PerformSlideAction(preventAnimation); 14390 }, 14391 CalculateSlideElementPosition: function (index, snapToLeft) { 14392 var slideWrapperElementSize = this.GetElementSize(this.GetSlidePanelWrapperElement()); 14393 var itemPosition = (this.GetItemElementSize() + this.GetItemSpacing()) * index; 14394 if(snapToLeft) { 14395 this.slideElementPosition = -itemPosition; 14396 var limitPosition = -(this.GetElementSize(this.GetSlidePanelElement()) - this.GetElementSize(this.GetSlidePanelWrapperElement())); 14397 var next = this.GetElementTransformPosition(this.GetSlidePanelElement()) > this.slideElementPosition; 14398 if(this.slideElementPosition < limitPosition || next && Math.abs(-limitPosition + this.slideElementPosition) < this.GetItemElementSize()) 14399 this.slideElementPosition = limitPosition; 14400 } 14401 else { 14402 this.slideElementPosition = slideWrapperElementSize - (itemPosition + this.GetItemElementSize()); 14403 var prev = this.GetElementTransformPosition(this.GetSlidePanelElement()) < this.slideElementPosition; 14404 if(this.slideElementPosition > 0 || prev && this.slideElementPosition > -this.GetItemElementSize()) 14405 this.slideElementPosition = 0; 14406 } 14407 }, 14408 PerformSlideAction: function (preventAnimation) { 14409 this.UpdateNavigationButtonsState(); 14410 if(preventAnimation) 14411 this.SetElementTransformPosition(this.GetSlidePanelElement(), this.slideElementPosition); 14412 else { 14413 ASPx.AnimationHelper.slideTo(this.GetSlidePanelElement(), { 14414 to: this.slideElementPosition, callBack: function () { this.UpdateItemElementsIfRequired(); }.aspxBind(this), 14415 duration: this.IsSinglePagingMode() ? 300 : ASPx.AnimationConstants.Durations.Default, 14416 direction: this.IsHorizontalNavigation() ? ASPx.AnimationHelper.SLIDE_HORIZONTAL_DIRECTION : ASPx.AnimationHelper.SLIDE_VERTICAL_DIRECTION 14417 }); 14418 } 14419 }, 14420 SetActiveItemVisually: function (index, preventAnimation) { 14421 }, 14422 GetNavigationBtnsVisibilityMode: function () { 14423 return this.GetImageSlider().thumbNavBtnsVbl; 14424 }, 14425 GetButtonsContainer: function () { 14426 return this.GetNavigationBarElement(); 14427 }, 14428 GetPrevButtonHtml: function () { 14429 return this.GetImageSlider().nbpbh; 14430 }, 14431 GetNextButtonHtml: function () { 14432 return this.GetImageSlider().nbnbh; 14433 }, 14434 UpdateNavigationButtonsState: function () { 14435 if(this.navigationButtons) { 14436 var oldButtonsVisibility = this.navigationButtons.GetVisibilityButtons(); 14437 if(this.IsWrapperOverlapsItemCollection()) 14438 this.SetVisibilityButtons(false); 14439 else { 14440 this.SetVisibilityButtons(true); 14441 var minOffset = -(this.GetElementSize(this.GetSlidePanelElement(), false) - this.GetElementSize(this.GetSlidePanelWrapperElement(), true)), maxOffset = 0; 14442 this.SetEnablePrevButton(this.slideElementPosition != maxOffset); 14443 this.SetEnableNextButton(this.slideElementPosition != minOffset); 14444 } 14445 return oldButtonsVisibility != this.navigationButtons.GetVisibilityButtons(); 14446 } 14447 return false; 14448 }, 14449 PerformBackward: function () { 14450 if(this.IsSinglePagingMode()) 14451 this.SlideItemsPortionSingleMode(true); 14452 else 14453 this.SlideItemsPortionPageMode(true); 14454 }, 14455 PerformForward: function () { 14456 if(this.IsSinglePagingMode()) 14457 this.SlideItemsPortionSingleMode(false); 14458 else 14459 this.SlideItemsPortionPageMode(false); 14460 }, 14461 PerformRollBack: function () { 14462 var position = this.GetElementTransformPosition(this.GetSlidePanelElement()); 14463 var slidePanelElementSize = this.GetElementSize(this.GetSlidePanelElement()); 14464 var slidePanelWrapperElementSize = this.GetElementSize(this.GetSlidePanelWrapperElement()); 14465 var minPosition = slidePanelWrapperElementSize - slidePanelElementSize; 14466 if(this.IsWrapperOverlapsItemCollection()) 14467 this.slideElementPosition = (slidePanelWrapperElementSize - slidePanelElementSize) / 2; 14468 else if(position > 0) 14469 this.slideElementPosition = 0; 14470 else if(position < minPosition) 14471 this.slideElementPosition = minPosition; 14472 this.PerformSlideAction(); 14473 }, 14474 SlideItemsPortionPageMode: function (backward) { 14475 var index = backward ? 0 : this.GetItemCount() - 1; 14476 var lastIndex = backward ? this.GetItemCount() - 1 : 0; 14477 var previousInvisibleIndex = index; 14478 while(index != lastIndex) { 14479 if(this.IsVisibleItemElement(index, true)) { 14480 this.SlideToItem(previousInvisibleIndex, !backward); 14481 break; 14482 } 14483 previousInvisibleIndex = index; 14484 index += backward ? 1 : -1; 14485 } 14486 }, 14487 SlideItemsPortionSingleMode: function (backward) { 14488 var index = backward ? 0 : this.GetItemCount() - 1; 14489 var lastIndex = backward ? this.GetItemCount() - 1 : 0; 14490 var previousInvisibleIndex = index; 14491 var considerSize = new Date() - this.lastSlideItemsPortionDate < 350 ? false : true; 14492 while(index != lastIndex) { 14493 if(this.IsVisibleItemElement(index, considerSize)) { 14494 this.SlideToItem(previousInvisibleIndex, backward); 14495 break; 14496 } 14497 previousInvisibleIndex = index; 14498 index += backward ? 1 : -1; 14499 } 14500 this.lastSlideItemsPortionDate = new Date(); 14501 }, 14502 CreateControlHierarchyInternal: function () { 14503 ItemsOwnerBase.prototype.CreateControlHierarchyInternal.call(this); 14504 var mainElement = this.GetMainElement(); 14505 this.navigationBarElement = this.CreateDiv(); 14506 this.slidePanelWrapperElement = this.CreateDiv(); 14507 switch (this.GetPositionMode()) { 14508 case NavigationBarPositionEnum.Top: 14509 case NavigationBarPositionEnum.Left: 14510 var passePartour = this.GetImageSlider().GetPassePartoutElement(); 14511 if(passePartour) { 14512 mainElement.insertBefore(this.navigationBarElement, passePartour); 14513 break; 14514 } 14515 case NavigationBarPositionEnum.Bottom: 14516 case NavigationBarPositionEnum.Right: 14517 mainElement.appendChild(this.navigationBarElement); 14518 break; 14519 } 14520 this.slidePanelElement = this.CreateDiv(); 14521 this.slidePanelWrapperElement.appendChild(this.slidePanelElement); 14522 this.navigationBarElement.appendChild(this.slidePanelWrapperElement); 14523 }, 14524 GetItemsContainer: function () { 14525 return this.GetSlidePanelElement(); 14526 }, 14527 PrepareControlHierarchy: function () { 14528 ItemsOwnerBase.prototype.PrepareControlHierarchy.call(this); 14529 this.PrepareNavigationBarElement(); 14530 this.PrepareSlidePanelElement(); 14531 }, 14532 PrepareNavigationBarElement: function () { 14533 var navigationBarElement = this.GetNavigationBarElement(); 14534 ASPx.SetStyles(navigationBarElement, { 14535 className: this.GetImageSlider().navBarCssCl, 14536 cssText: this.GetImageSlider().navBarStyle 14537 }); 14538 }, 14539 PrepareSlidePanelElement: function () { 14540 var slideElement = this.GetSlidePanelElement();
14541 slideElement.className = CssClassesConstants.NavigationBarSlidePanelCssClassName; 14542 this.GetSlidePanelWrapperElement().className = CssClassesConstants.NavigationBarSlidePanelWrapperCssClassName; 14543 this.PatchElementForMSTouch(slideElement); 14544 }, 14545 AdjustControlInternal: function () { 14546 ItemsOwnerBase.prototype.AdjustControlInternal.call(this); 14547 this.AdjustNavigationBarElement(); 14548 this.AdjustSlidePanelElement(); 14549 this.UpdateItemElementsIfRequired(); 14550 if(this.UpdateNavigationButtonsState()) 14551 this.AdjustNavigationBarElement(); 14552 }, 14553 AdjustItemElements: function () { 14554 if(!this.IsAdjustedSize()) { 14555 ItemsOwnerBase.prototype.AdjustItemElements.call(this); 14556 var horizontal = this.IsHorizontalNavigation(); 14557 var width = horizontal ? this.GetItemCount() * this.GetItemWidthWithSpacing() - this.GetItemSpacing() : this.GetItemElementWidth(); 14558 var height = horizontal ? this.GetItemElementHeight() : this.GetItemCount() * this.GetItemHeightWithSpacing() - this.GetItemSpacing(); 14559 ASPx.SetStyles(this.GetSlidePanelElement(), { width: width, height: height }); 14560 } 14561 }, 14562 AdjustNavigationBarElement: function () { 14563 var styles = this.GetNavigationBarElementsStyles(); 14564 ASPx.SetStyles(this.GetNavigationBarElement(), styles.navBarStyle); 14565 ASPx.SetStyles(this.GetSlidePanelWrapperElement(), styles.wrapperStyle); 14566 }, 14567 GetNavigationBarElementsStyles: function () { 14568 var isHorizontal = this.IsHorizontalNavigation(); 14569 var styles = {}; 14570 if(this.CanUseVisibleItemCount()) 14571 styles = { 14572 width: isHorizontal ? this.GetItemWidthWithSpacing() * this.GetVisibleItemCount() - this.GetItemSpacing() : this.GetItemElementWidth(), 14573 height: isHorizontal ? this.GetItemElementHeight() : this.GetItemHeightWithSpacing() * this.GetVisibleItemCount() - this.GetItemSpacing() 14574 }; 14575 else { 14576 var navigationBar = this.GetNavigationBarElement(); 14577 var mainElementWidth = SizeUtils.GetClientWidth(this.GetMainElement(), true); 14578 var mainElementHeight = SizeUtils.GetClientHeight(this.GetMainElement(), true); 14579 styles = { 14580 width: this.IsHorizontalNavigation() ? mainElementWidth : this.GetItemElementWidth(), 14581 height: this.IsHorizontalNavigation() ? this.GetItemElementHeight() : mainElementHeight 14582 }; 14583 ASPx.SetStyles(navigationBar, styles); 14584 styles.width = this.IsHorizontalNavigation() ? mainElementWidth - (navigationBar.offsetWidth - mainElementWidth) : this.GetItemElementWidth(); 14585 styles.height = this.IsHorizontalNavigation() ? this.GetItemElementHeight() : mainElementHeight - (navigationBar.offsetHeight - mainElementHeight); 14586 } 14587 return { 14588 navBarStyle: { 14589 width: styles.width, 14590 height: styles.height 14591 }, 14592 wrapperStyle: { 14593 width: styles.width, 14594 height: styles.height 14595 } 14596 }; 14597 }, 14598 CanUseVisibleItemCount: function () { 14599 return !this.GetImageSlider().showImageArea && this.GetVisibleItemCount() > 0; 14600 }, 14601 AdjustSlidePanelElement: function () { 14602 this.slideElementPosition = this.GetPostDataOffset(); 14603 if(this.IsWrapperOverlapsItemCollection()) 14604 this.slideElementPosition = (this.GetElementSize(this.GetSlidePanelWrapperElement()) - this.GetElementSize(this.GetSlidePanelElement())) / 2; 14605 this.SetElementTransformPosition(this.GetSlidePanelElement(), this.slideElementPosition); 14606 }, 14607 IsWrapperOverlapsItemCollection: function() { 14608 return this.GetElementSize(this.GetSlidePanelWrapperElement()) > this.GetElementSize(this.GetSlidePanelElement()); 14609 }, 14610 GetPostDataOffset: function () { 14611 var offset = this.IsAdjustedSize() ? 0 : this.GetImageSlider().navBarOffset; 14612 if(offset == 0 && this.IsRtl()) 14613 offset = this.GetElementSize(this.GetSlidePanelWrapperElement()) - this.GetElementSize(this.GetSlidePanelElement()); 14614 return offset; 14615 }, 14616 PrepareItemElement: function (index) { 14617 ItemsOwnerBase.prototype.PrepareItemElement.call(this, index); 14618 this.GetItemElement(index).itemIndex = index; 14619 }, 14620 AdjustItemElement: function (index) { 14621 ItemsOwnerBase.prototype.AdjustItemElement.call(this, index); 14622 ASPx.SetStyles(this.GetItemElement(index), this.IsHorizontalNavigation() ? { left
14622: this.GetItemWidthWithSpacing() * index } : { top: this.GetItemHeightWithSpacing() * index }); 14623 }, 14624 CalculateSize: function () { 14625 if(!this.IsAdjustedSize()) 14626 ItemsOwnerBase.prototype.CalculateSize.call(this); 14627 }, 14628 CalculateItemElementSize: function (fakeElement) { 14629 this.GetNavigationBarElement().appendChild(fakeElement); 14630 this.fullItemWidth = SizeUtils.GetClientWidth(fakeElement); 14631 this.fullItemHeight = SizeUtils.GetClientHeight(fakeElement); 14632 this.clearItemWidth = SizeUtils.GetClientWidth(fakeElement, true); 14633 this.clearItemHeight = SizeUtils.GetClientHeight(fakeElement, true); 14634 }, 14635 ResetControlStyle: function () { 14636 ASPx.SetStyles(this.GetNavigationBarElement(), { width: 0, height: 0 }); 14637 }, 14638 CanCreateSwipeGestureHandler: function () { 14639 return true; 14640 }, 14641 CanHandleSwipeGesture: function(evt) { 14642 return !this.IsWrapperOverlapsItemCollection() && ItemsOwnerBase.prototype.CanHandleSwipeGesture.call(this, evt); 14643 }, 14644 InitializeHandlers: function () { 14645 ItemsOwnerBase.prototype.InitializeHandlers.call(this); 14646 ASPx.Evt.AttachEventToElement(this.GetSlidePanelElement(), this.GetMouseUpEventName(), function (evt) { this.OnNavigationBarMouseUp(evt); }.aspxBind(this)); 14647 }, 14648 OnNavigationBarMouseUp: function (evt) { 14649 if(this.CanCandleMouseUpEvent(evt)) { 14650 var index = this.GetItemIndexFromEvent(evt); 14651 if(index != -1) { 14652 this.GetImageSlider().SetActiveItemIndexInternal(index); 14653 this.StopPlayingWhenPaging(); 14654 this.GetImageSlider().RaiseThumbnailItemClick(); 14655 } 14656 } 14657 }, 14658 GetMouseUpEventName: function () { 14659 return ASPx.TouchUIHelper.touchMouseUpEventName; 14660 }, 14661 CanCandleMouseUpEvent: function (evt) { 14662 return !this.IsExecutedGesture() && ASPx.Evt.IsLeftButtonPressed(evt); 14663 }, 14664 GetItemIndexFromEvent: function (evt) { 14665 var itemElement = ASPx.GetParentByClassName(ASPx.Evt.GetEventSource(evt),this.GetItemElementCssClass()); 14666 return itemElement ? itemElement.itemIndex : -1; 14667 }, 14668 GetImageSizeMode: function () { 14669 return this.GetImageSlider().thumbImageSizeMode; 14670 }, 14671 GetMainElement: function () { 14672 return this.GetImageSlider().GetMainElement(); 14673 }, 14674 GetSlidePanelWrapperElement: function () { 14675 return this.slidePanelWrapperElement; 14676 }, 14677 GetNavigationBarElement: function () { 14678 return this.navigationBarElement; 14679 }, 14680 GetElementSize: function (element, clear) { 14681 return this.IsHorizontalNavigation() ? SizeUtils.GetClientWidth(element, clear) : SizeUtils.GetClientHeight(element, clear); 14682 }, 14683 GetItemWidthWithSpacing: function () { 14684 return this.GetItemElementWidth() + this.GetItemSpacing(); 14685 }, 14686 GetItemHeightWithSpacing: function () { 14687 return this.GetItemElementHeight() + this.GetItemSpacing(); 14688 }, 14689 GetPositionMode: function () { 14690 return this.GetImageSlider().GetNavigationBarPosition(); 14691 }, 14692 GetItemSpacing: function () { 14693 return this.GetImageSlider().itemSpacing; 14694 }, 14695 IsSinglePagingMode: function () { 14696 return this.GetImageSlider().navBarPagingMode == NavigationBarPagingModeEnum.Single; 14697 }, 14698 GetVisibleItemCount: function () { 14699 return this.GetImageSlider().visibleItemsCount; 14700 }, 14701 GetSlideElementPosition: function () { 14702 return Math.round(this.slideElementPosition); 14703 }, 14704 GetWidth: function () { 14705 var navigationBarElement = this.GetNavigationBarElement(); 14706 var currentStyle = ASPx.GetCurrentStyle(navigationBarElement); 14707 var width = SizeUtils.GetClientWidth(navigationBarElement) + ASPx.PxToInt(currentStyle.marginLeft) + ASPx.PxToInt(currentStyle.marginRight); 14708 return width > 0 ? width : 0; 14709 }, 14710 GetHeight: function () { 14711 var navigationBarElement = this.GetNavigationBarElement(); 14712 var currentStyle = ASPx.GetCurrentStyle(navigationBarElement); 14713 var height = SizeUtils.GetClientHeight(navigationBarElement) + ASPx.PxToInt(currentStyle.marginTop) + ASPx.PxToInt(currentStyle.marginBottom); 14714 return height > 0 ? height : 0; 14715 } 14716 }); 14717 var NavigationBarThumbnailStrategy = ASPx.CreateClass(NavigationBarStrategy, { 14718 constructor: function (imageSlider) { 14719 this.selectedStateElement = null; 14720 this.hoverStateElementSize = {}; 14721 this.innerHoverStateElementSize = {}; 14722 this.loadingElenentSize = {}; 14723 this.setActiveIndexCounter = 0; 14724 this.constructor.prototype.constructor.call(this, imageSlider); 14725 }, 14726 BeginSetActiveIndex: function () { 14727 this.setActiveIndexCounter++; 14728 }, 14729 EndSetActiveIndex: function () { 14730 this.setActiveIndexCounter--; 14731 }, 14732 NeedOffsetCorrection: function () { 14733 return this.setActiveIndexCounter > 0 && this.GetImageSlider().extremeItemClickMode == ExtremeItemClickModeEnum.SelectAndSlide; 14734 }, 14735 GetNavigationButtonsPosition: function () { 14736 return this.GetImageSlider().thumbNavBtnsPos; 14737 }, 14738 GetItemIndexFromEvent: function(evt) { 14739 var result = NavigationBarStrategy.prototype.GetItemIndexFromEvent.call(this, evt); 14740 if(result == -1) { 14741 var eventSource = ASPx.Evt.GetEventSource(evt); 14742 var selectedItem = this.GetSelectedStateElement(); 14743 if (eventSource.parentNode == selectedItem || eventSource == selectedItem) 14744 result = this.GetRtlIndex(this.GetImageSlider().GetActiveItemIndex()); 14745 } 14746 return result; 14747 }, 14748 SetActiveItemIndexInternal: function (index, preventAnimation) { 14749 this.BeginSetActiveIndex(); 14750 NavigationBarStrategy.prototype.SetActiveItemIndexInternal.call(this, index, preventAnimation); 14751 this.EndSetActiveIndex(); 14752 }, 14753 SetActiveItemVisually: function (index, preventAnimation) { 14754 this.SelectItemElement(index); 14755 this.MoveSelectedItem(index, preventAnimation); 14756 }, 14757 SelectItemElement: function (index) { 14758 var currentItemElement = this.GetItemElement(index); 14759 var prevItemElement = this.GetItemElement(this.GetPrevItemIndex()); 14760 if(prevItemElement) 14761 prevItemElement.className = prevItemElement.className.replace(CssClasse
14761sConstants.NavigationBarSelectedStateCssClassName, ""); 14762 if(currentItemElement && !ASPx.ElementContainsCssClass(currentItemElement, CssClassesConstants.NavigationBarSelectedStateCssClassName)) 14763 currentItemElement.className += CssClassesConstants.NavigationBarSelectedStateCssClassName; 14764 }, 14765 MoveSelectedItem: function (index, preventAnimation) { 14766 var selectedStateElement = this.GetSelectedStateElement(); 14767 var position = (this.GetItemElementSize() + this.GetItemSpacing()) * index; 14768 preventAnimation = this.GetImageSlider().disableSelectedStateAnimation || preventAnimation; 14769 if(preventAnimation) 14770 this.SetElementTransformPosition(selectedStateElement, position); 14771 else 14772 ASPx.AnimationHelper.slideTo(selectedStateElement, { 14773 to: position, 14774 direction: this.IsHorizontalNavigation() ? ASPx.AnimationHelper.SLIDE_HORIZONTAL_DIRECTION : ASPx.AnimationHelper.SLIDE_VERTICAL_DIRECTION 14775 }); 14776 }, 14777 SlideItemsPortionPageMode: function (backward) { 14778 this.PerformSlideToExtremeInvisibleElement(backward, true, !backward); 14779 }, 14780 PerformRollBack: function () { 14781 NavigationBarStrategy.prototype.PerformRollBack.call(this); 14782 }, 14783 UpdateItemElementsIfRequired: function () { 14784 NavigationBarStrategy.prototype.UpdateItemElementsIfRequired.call(this); 14785 if(this.GetImageLoadMode() != LoadModeEnum.AllImages) 14786 this.SelectItemElement(this.GetActiveItemIndex()); 14787 }, 14788 CanCreateNavigationButtons: function () { 14789 if(!this.CanUseVisibleItemCount()) 14790 return true; 14791 return this.GetVisibleItemCount() < this.GetItemCount(); 14792 }, 14793 CreateNavigationButtons: function () { 14794 if(this.GetNavigationBtnsVisibilityMode() == ElementVisibilityModeEnum.None) 14795 return null; 14796 if(this.GetNavigationButtonsPosition() == NavigationBarButtonPositionEnum.Outside) 14797 return new OutsideNavigationButtons(this); 14798 return new NavigationButtons(this); 14799 }, 14800 CreateControlHierarchy: function () { 14801 NavigationBarStrategy.prototype.CreateControlHierarchy.call(this); 14802 this.CreateSelectedStateElement(); 14803 }, 14804 CreateItemElement: function (index) { 14805 var itemElement = NavigationBarStrategy.prototype.CreateItemElement.call(this, index); 14806 itemElement.appendChild(this.CreateLoadingElement()); 14807 if(this.IsEnabled() && !ASPx.Browser.TouchUI) 14808 itemElement.appendChild(this.CreateHoverStateElement()); 14809 return itemElement; 14810 }, 14811 CreateLoadingElement: function(itemElement) { 14812 var element = this.CreateDiv(); 14813 element.className = CssClassesConstants.LoadingElement; 14814 return element; 14815 }, 14816 CreateHoverStateElement: function (itemElement) { 14817 var element = this.CreateDiv(); 14818 element.className = CssClassesConstants.NavigationBarHoverStateElementCssClassName; 14819 element.appendChild(this.CreateDiv()); 14820 return element; 14821 }, 14822 CreateSelectedStateElement: function () { 14823 this.selectedStateElement = this.CreateDiv(); 14824 this.selectedStateElement.appendChild(this.CreateDiv()); 14825 this.GetSlidePanelElement().appendChild(this.selectedStateElement); 14826 }, 14827 PrepareControlHierarchy: function () { 14828 NavigationBarStrategy.prototype.PrepareControlHierarchy.call(this); 14829 ASPx.SetStyles(this.GetSelectedStateElement(), { 14830 className: this.GetImageSlider().thSelCssCl, 14831 cssText: this.GetImageSlider().thSelStyle 14832 }); 14833 }, 14834 PrepareItemElement: function (index) { 14835 NavigationBarStrategy.prototype.PrepareItemElement.call(this, index); 14836 var stateController = this.GetStateController(); 14837 if(this.IsEnabled() && !ASPx.Browser.TouchUI && stateController && this.GetEnableItemHoverState()) { 14838 var itemElement = this.GetItemElement(index); 14839 itemElement.id = this.GetClientControlName() + "_nb_" + index; 14840 stateController.AddHoverItem(itemElement.id, [CssClassesConstants.NavigationBarHoverStateCssClassName], [""], [""], null, null, false); 14841 } 14842 }, 14843 GetEnableItemHoverState: function () { 14844 return true; 14845 }, 14846 CalculateItemElementSize: function (fakeElement) { 14847 NavigationBarStrategy.prototype.CalculateItemElementSize.call(this, fakeElement); 14848 if(this.IsEnabled() && !ASPx.Browser.TouchUI) 14849 this.CalculateHoverStateElement(fakeElement); 14850 this.CalculateLoadingElement(fakeElement); 14851 }, 14852 CalculateHoverStateElement: function (fakeElement) { 14853 var actualWidth = this.GetItemElementWidth(); 14854 var actualHeight = this.GetItemElementHeight(); 14855 var hoverStateElement = this.CreateHoverStateElement(); 14856 fakeElement.appendChild(hoverStateElement); 14857 ASPx.SetStyles(hoverStateElement, { display: "block" });
14858 this.hoverStateElementSize = this.GetBorderBoxSize(hoverStateElement, this.GetItemElementWidth(), this.GetItemElementHeight()); 14859 var innerDiv = this.GetFirstChild(hoverStateElement); 14860 this.innerHoverStateElementSize = this.GetBorderBoxSize(innerDiv, this.hoverStateElementSize.width, this.hoverStateElementSize.height); 14861 }, 14862 CalculateLoadingElement: function(fakeElement) { 14863 var loadingElement = this.CreateLoadingElement(); 14864 fakeElement.appendChild(loadingElement); 14865 this.loadingElenentSize.width = loadingElement.offsetWidth; 14866 this.loadingElenentSize.height = loadingElement.offsetHeight; 14867 }, 14868 AdjustControlInternal: function () { 14869 NavigationBarStrategy.prototype.AdjustControlInternal.call(this); 14870 this.AdjustSelectedStateElement(); 14871 }, 14872 AdjustItemElement: function (index) { 14873 NavigationBarStrategy.prototype.AdjustItemElement.call(this, index); 14874 if(this.IsEnabled() && !ASPx.Browser.TouchUI) 14875 this.AdjustHoverStateElement(index); 14876 this.AdjustLoadingElement(index); 14877 }, 14878 AdjustLoadingElement: function(index) { 14879 var loadingElement = this.GetLoadingElement(index); 14880 loadingElement.style.left = (this.GetItemElementWidth() - this.loadingElenentSize.width) / 2 + "px"; 14881 loadingElement.style.top = (this.GetItemElementHeight() - this.loadingElenentSize.height) / 2 + "px"; 14882 }, 14883 AdjustHoverStateElement: function (index) { 14884 var hoverStateElement = this.GetHoverStateElement(index); 14885 ASPx.SetStyles(hoverStateElement, this.hoverStateElementSize); 14886 ASPx.SetStyles(this.GetFirstChild(hoverStateElement), this.innerHoverStateElementSize); 14887 }, 14888 AdjustSelectedStateElement: function () { 14889 var selectedStateElement = this.GetSelectedStateElement(); 14890 var size = this.GetBorderBoxSize(selectedStateElement, this.GetItemElementWidth(), this.GetItemElementHeight()); 14891 ASPx.SetStyles(selectedStateElement, size); 14892 var innerDiv = this.GetFirstChild(selectedStateElement); 14893 size = this.GetBorderBoxSize(selectedStateElement, size.width, size.height); 14894 ASPx.SetStyles(innerDiv, size); 14895 }, 14896 GetHoverStateElement: function (index) { 14897 return ASPx.GetChildByClassName(this.GetItemElement(index), CssClassesConstants.NavigationBarHoverStateElementCssClassName); 14898 }, 14899 GetLoadingElement: function (index) { 14900 return ASPx.GetChildByClassName(this.GetItemElement(index), CssClassesConstants.LoadingElement); 14901 }, 14902 GetSelectedStateElement: function () { 14903 return this.selectedStateElement; 14904 }, 14905 GetItemElementCssClass: function () { 14906 return this.GetImageSlider().thCssCl; 14907 }, 14908 GetItemElementStyle: function () { 14909 return this.GetImageSlider().thStyle; 14910 }, 14911 CalculateSlideElementPosition: function (index, snapToLeft) { 14912 var prevSlideElementPosition = this.slideElementPosition; 14913 NavigationBarStrategy.prototype.CalculateSlideElementPosition.call(this, index, snapToLeft); 14914 this.slideElementPosition = this.CorrectSelectAndSlideOffsetPosition(index, prevSlideElementPosition, this.slideElementPosition); 14915 }, 14916 IsSnapToLeft: function (index) { 14917 var shownItemIndexes = this.GetShownItemIndexes(true); 14918 for(var i = 0; i < shownItemIndexes.length; i++) 14919 if(shownItemIndexes[i] == index) 14920 return i < shownItemIndexes.length / 2; 14921 return index < shownItemIndexes[0]; 14922 }, 14923 SlideItemsPortionSingleMode: function (backward) { 14924 var considerSize = new Date() - this.lastSlideItemsPortionDate >= 350; 14925 this.PerformSlideToExtremeInvisibleElement(backward, considerSize, backward); 14926 this.lastSlideItemsPortionDate = new Date(); 14927 }, 14928 PerformSlideToExtremeInvisibleElement: function (backward, considerSize, preventAnimation) { 14929 var shownItemIndexes = this.GetShownItemIndexes(false); 14930 var lastIndex = backward ? -1 : this.GetItemCount(); 14931 var incValue = backward ? -1 : 1; 14932 for(var index = shownItemIndexes[backward ? 0 : shownItemIndexes.length - 1]; index != lastIndex; index += incValue) 14933 if(!this.IsVisibleItemElement(index, considerSize)) { 14934 this.SlideToItem(index, preventAnimation); 14935 break; 14936 } 14937 }, 14938 GetShownItemIndexes: function (getUncroppedItems) { 14939 var result = []; 14940 var itemSize = this.GetItemElementSize(); 14941 var constOffset = this.GetElementTransformPosition(this.GetSlidePanelElement()); 14942 var itemFullSize = itemSize + this.GetItemSpacing(); 14943 var minValue = getUncroppedItems ? -1 : -itemSize; 14944 var maxValue = getUncroppedItems ? this.GetSlidePanelWrapperSize() - itemSize + 1 : this.GetSlidePanelWrapperSize(); 14945 var tempValue = null; 14946 for(var index = 0; index < this.GetItemCount() ; index++) { 14947 tempValue = constOffset + itemFullSize * index; 14948 if(tempValue > minValue && tempValue < maxValue) 14949 result.push(index); 14950 } 14951 return result; 14952 }, 14953 OnImageLoad: function (image) { 14954 NavigationBarStrategy.prototype.OnImageLoad.call(this, image); 14955 var element = this.GetLoadingElement(image.dxIndex); 14956 if(element) 14957 element.style.display = "none"; 14958 }, 14959 CorrectSelectAndSlideOffsetPosition: function (nextItemIndex, prevPos, nextPos) { 14960 var index = this.GetActiveItemIndex(); 14961 if(!this.NeedOffsetCorrection() || nextItemIndex == index) 14962 return nextPos; 14963 var itemElementSize = this.GetItemElementSize(); 14964 var sliderWrapperSize = this.GetSlidePanelWrapperSize(); 14965 if(sliderWrapperSize < (itemElementSize * 3)) { 14966 var offsetDelta = Math.abs(Math.abs(nextPos) - Math.abs(prevPos)); 14967 var itemSpacing = this.GetItemSpacing(); 14968 var itemPosition = (itemElementSize + itemSpacing) * index;
14969 var itemPositionInSlideWrapper = this.ConvertItemPositionToSlideWrapperPosition(itemPosition) + 14970 (nextItemIndex < index ? offsetDelta : -offsetDelta); 14971 nextPos += (sliderWrapperSize - itemElementSize) / 2 - itemPositionInSlideWrapper; 14972 } 14973 return nextPos; 14974 }, 14975 GetBorderBoxSize: function (element, width, height) { 14976 ASPx.SetStyles(element, { width: width, height: height }); 14977 if(element.offsetWidth > width) 14978 width -= element.offsetWidth - width; 14979 if(element.offsetHeight > height) 14980 height -= element.offsetHeight - height; 14981 return { width: width, height: height }; 14982 }, 14983 GetFirstChild: function (parent) { 14984 return parent.children[0]; 14985 }, 14986 GetSlidePanelWrapperSize: function () { 14987 return this.GetElementSize(this.GetSlidePanelWrapperElement()); 14988 }, 14989 GetNavigationBarElementsStyles: function () { 14990 var styles = NavigationBarStrategy.prototype.GetNavigationBarElementsStyles.call(this); 14991 if(this.GetNavigationButtonsPosition() == NavigationBarButtonPositionEnum.Outside && this.navigationButtons) { 14992 var prevButtonSize = this.navigationButtons.GetPrevButtonWrapperSize(); 14993 var nextButtonSize = this.navigationButtons.GetNextButtonWrapperSize(); 14994 var isHorizontal = this.IsHorizontalNavigation(); 14995 var styleName = isHorizontal ? "width" : "height"; 14996 if(this.CanUseVisibleItemCount()) 14997 styles.navBarStyle[styleName] += prevButtonSize[styleName] + nextButtonSize[styleName]; 14998 else 14999 styles.wrapperStyle[styleName] -= prevButtonSize[styleName] + nextButtonSize[styleName]; 15000 styles.wrapperStyle[isHorizontal ? "left" : "top"] = prevButtonSize[styleName]; 15001 } 15002 return styles; 15003 } 15004 }); 15005 var NavigationBarDotsStrategy = ASPx.CreateClass(NavigationBarStrategy, { 15006 constructor: function (imageSlider) { 15007 this.cloneElement = null; 15008 this.constructor.prototype.constructor.call(this, imageSlider); 15009 }, 15010 Initialize: function () { 15011 NavigationBarStrategy.prototype.Initialize.call(this); 15012 this.cloneElement = ASPx.CreateHtmlElementFromString(this.GetImageSlider().dbh); 15013 }, 15014 SetActiveItemVisually: function (index, preventAnimation) { 15015 var stateController = this.GetStateController(); 15016 if(stateController) { 15017 if(this.GetPrevItemIndex() != -1) 15018 stateController.DeselectElementBySrcElement(this.GetItemElement(this.GetPrevItemIndex())); 15019 stateController.SelectElementBySrcElement(this.GetItemElement(index)); 15020 } 15021 }, 15022 GetImageLoadMode: function () { 15023 return LoadModeEnum.AllImages; 15024 }, 15025 OnNavigationBarMouseUp: function (evt) { 15026 ASPx.ClearHoverState(); 15027 NavigationBarStrategy.prototype.OnNavigationBarMouseUp.call(this, evt); 15028 }, 15029 CanCandleMouseUpEvent: function (evt) { 15030 if(ASPx.Browser.IE && ASPx.Browser.Version < 9) 15031 return !this.IsExecutedGesture(); 15032 return NavigationBarStrategy.prototype.CanCandleMouseUpEvent.call(this, evt); 15033 }, 15034 GetMouseUpEventName: function () { 15035 return ASPx.Browser.IE && ASPx.Browser.Version < 9 ? "click" : ASPx.TouchUIHelper.touchMouseUpEventName; 15036 }, 15037 GetNavigationBtnsVisibilityMode: function () { 15038 return ElementVisibilityModeEnum.None; 15039 }, 15040 CreateItemElement: function (index) { 15041 var itemElement = this.CreateDiv(); 15042 itemElement.id = this.GetItemElementId(index); 15043 return itemElement; 15044 }, 15045 PrepareControlHierarchy: function () { 15046 NavigationBarStrategy.prototype.PrepareControlHierarchy.call(this); 15047 var imageSlider = this.GetImageSlider(); 15048 var stateController = this.GetStateController(); 15049 if(!stateController) 15050 return; 15051 this.ForEachItem(function (i) { 15052 if(this.IsEnabled()) { 15053 stateController.AddHoverItem(this.GetItemElementId(i), [imageSlider.dotHCssCl], [imageSlider.dotHStyle], 15054 null, [imageSlider.dotHSprt], [""], false); 15055 stateController.AddPressedItem(this.GetItemElementId(i), [imageSlider.dotPCssCl], [imageSlider.dotPStyle], 15056 null, [imageSlider.dotPSprt], [""], false); 15057 } 15058 stateController.AddSelectedItem(this.GetItemElementId(i), [imageSlider.dotSCssCl], [imageSlider.dotSStyle], 15059 null, [imageSlider.dotSSprt], [""], false); 15060 }); 15061 }, 15062 AdjustImageElement: function (index) { 15063 }, 15064 GetItemElementCssClass: function () { 15065 return this.cloneElement.className; 15066 }, 15067 GetItemElementStyle: function () { 15068 return this.cloneElement.style.cssText; 15069 }, 15070 GetItemElementId: function (index) { 15071 return this.GetClientControlName() + "_dot_" + index; 15072 } 15073 }); 15074 var ItemElementsManagerBase = ASPx.CreateClass(null, { 15075 constructor: function (itemsOwner) { 15076 this.itemsOwner = itemsOwner; 15077 this.timerId == -1 15078 this.itemCollection = []; 15079 }, 15080 GetOwner: function () { 15081 return this.itemsOwner; 15082 }, 15083 GetCollection: function () {
15084 if(this.IsEnablePartialLoading()) 15085 return this.itemCollection; 15086 return ASPx.GetChildNodesByTagName(this.GetOwner().GetItemsContainer(), "DIV"); 15087 }, 15088 HasItem: function (index) { 15089 return !!this.GetCollection()[index]; 15090 }, 15091 SaveItem: function (index, item) { 15092 if(this.IsEnablePartialLoading()) 15093 this.itemCollection[index] = item; 15094 }, 15095 GetImageLoadMode: function () { 15096 return this.GetOwner().GetImageLoadMode(); 15097 }, 15098 IsEnablePartialLoading: function () { 15099 return this.GetImageLoadMode() != LoadModeEnum.AllImages; 15100 }, 15101 CreateItemsIfRequired: function () { 15102 if(this.GetImageLoadMode() == LoadModeEnum.AllImages) 15103 this.GetOwner().CreateItemElements(); 15104 }, 15105 PrepareItemsIfRequired: function () { 15106 if(this.GetImageLoadMode() == LoadModeEnum.AllImages) 15107 this.GetOwner().PrepareItemElements(); 15108 }, 15109 AdjustItemsIfRequired: function () { 15110 var owner = this.GetOwner(); 15111 for(var i = 0; i < owner.GetItemCount() ; i++) { 15112 if(this.IsEnablePartialLoading() && !this.HasItem(i)) 15113 continue; 15114 this.GetOwner().AdjustItemElement(i); 15115 this.GetOwner().AdjustImageElement(i); 15116 } 15117 }, 15118 UpdateHierarchyIfRequired: function () { 15119 if(this.IsEnablePartialLoading()) { 15120 this.timerId = ASPx.Timer.ClearTimer(this.timerId); 15121 this.UpdateHierarchyCore(); 15122 } 15123 }, 15124 CreateItemAndAppend: function (index, parent) { 15125 var owner = this.GetOwner(); 15126 var element = owner.CreateItemElement(index); 15127 this.SaveItem(index, element); 15128 parent.appendChild(element); 15129 owner.PrepareItemElement(index); 15130 owner.AdjustItemElement(index); 15131 owner.AdjustImageElement(index); 15132 }, 15133 RemoveItem: function (index) { 15134 if(this.GetImageLoadMode() == LoadModeEnum.DynamicLoadAndCache) 15135 return; 15136 var owner = this.GetOwner(); 15137 var element = owner.GetItemElement(index); 15138 if(element) { 15139 var image = owner.GetImageElement(index); 15140 if(image) 15141 owner.DetachLoadEvents(image); 15142 this.itemCollection[index] = undefined; 15143 ASPx.RemoveElement(element); 15144 } 15145 }, 15146 UpdateHierarchyCore: function () { 15147 ; 15148 }, 15149 GetDelay: function () { 15150 return 450; 15151 }, 15152 UpdateHierarchyAfterDelayIfRequired: function () { 15153 if(this.IsEnablePartialLoading() && this.timerId == -1) 15154 this.timerId = window.setTimeout(function () { this.UpdateHierarchyIfRequired(); }.aspxBind(this), this.GetDelay()); 15155 } 15156 }); 15157 var ImageAreaItemElementsManager = ASPx.CreateClass(ItemElementsManagerBase, { 15158 constructor: function (imageAreaStrategy) { 15159 this.constructor.prototype.constructor.call(this, imageAreaStrategy); 15160 }, 15161 GetDelay: function () { 15162 return this.GetOwner().GetImageSlider().animationDuration + 50; 15163 }, 15164 UpdateHierarchyCore: function () { 15165 var owner = this.GetOwner(); 15166 var activeItemIndex = owner.GetActiveItemIndex(); 15167 var prevItemIndex = owner.GetPrevItemIndex(); 15168 if(prevItemIndex == -1) 15169 prevItemIndex = 0; 15170 var isForwardDirection = (activeItemIndex - prevItemIndex) >= 0; 15171 var fragment = owner.CreateDocumentFragment(); 15172 var itemsContainer = owner.GetItemsContainer(); 15173 if(!this.HasItem(activeItemIndex)) 15174 this.CreateItemAndAppend(activeItemIndex, fragment || itemsContainer); 15175 if(this.CanUpdateItemElements(isForwardDirection, isForwardDirection ? activeItemIndex + 1 : activeItemIndex - 1)) { 15176 for(var i = 0; i < owner.GetItemCount() ; i++) { 15177 if(this.CanRemoveItem(i, activeItemIndex, prevItemIndex, isForwardDirection)) 15178 this.RemoveItem(i); 15179 else if(!this.HasItem(i)) 15180 this.CreateItemAndAppend(i, fragment || itemsContainer); 15181 } 15182 } 15183 if(fragment) 15184 itemsContainer.appendChild(fragment); 15185 }, 15186 CanRemoveItem: function (index, activeItemIndex, prevItemIndex, forwardDirection) { 15187 var visibleItemCount = 6; 15188 var result = forwardDirection ? (index < activeItemIndex || index > (activeItemIndex + visibleItemCount)) : 15189 (index > activeItemIndex || index < (activeItemIndex - visibleItemCount)); 15190 return result && prevItemIndex != index; 15191 }, 15192 CanUpdateItemElements: function (forwardDirection, followingItemIndex) { 15193 return forwardDirection ? followingItemIndex < this.GetOwner().GetItemCount() && !this.HasItem(followingItemIndex) : 15194 followingItemIndex > 0 && !this.HasItem(followingItemIndex); 15195 } 15196 }); 15197 var LoopImageAreaItemElementsManager = ASPx.CreateClass(ItemElementsManagerBase, { 15198 constructor: function (imageAreaStrategy) { 15199 this.constructor.prototype.constructor.call(this, imageAreaStrategy); 15200 }, 15201 UpdateHierarchyCore: function () { 15202 var owner = this.GetOwner(); 15203 var activeIndex = owner.GetActiveItemIndex(); 15204 var fragment = owner.CreateDocumentFragment(); 15205 var itemsContainer = owner.GetItemsContainer(); 15206 if(!this.HasItem(activeIndex)) 15207 this.CreateItemAndAppend(activeIndex, fragment || itemsContainer); 15208 var activeItem = owner.GetItemElement(activeIndex); 15209 var nextIndex = activeIndex + 1; 15210 if(nextIndex == owner.GetItemCount()) 15211 nextIndex = 0; 15212 if(!this.HasItem(nextIndex)) { 15213 this.CreateItemAndAppend(nextIndex, fragment || itemsContainer); 15214 var item = owner.GetItemElement(nextIndex); 15215 item.dxPosition = activeItem.dxPosition + owner.GetItemElementSize(); 15216 owner.SetItemPosition(item); 15217 } 15218 var prevIndex = activeIndex - 1; 15219 var prevIndex = activeIndex - 1; 15220 if(prevIndex < 0) 15221 prevIndex = owner.GetItemCount() - 1; 15222 if(!this.HasItem(prevIndex)) { 15223 this.CreateItemAndAppend(prevIndex, fragment || itemsContainer); 15224 var item = owner.GetItemElement(prevIndex); 15225 item.dxPosition = activeItem.dxPosition - owner.GetItemElementSize(); 15226 owner.SetItemPosition(item); 15227 } 15228 for(var i = 0; i < owner.GetItemCount() ; i++) 15229 if(i != activeIndex && i != prevIndex && i != nextIndex && owner.GetPrevItemIndex() != i && owner.GetItemElement(i)) 15230 this.RemoveItem(i); 15231 if(fragment) 15232 itemsContainer.appendChild(fragment); 15233 } 15234 }); 15235 var NavigationBarItemElementsManager = ASPx.CreateClass(ItemElementsManagerBase, { 15236 constructor: function (navigationBarStrategy) { 15237 this.constructor.prototype.constructor.call(this, navigationBarStrategy); 15238 }, 15239 CreateDummyItem: function (index, parent) { 15240 if(!this.HasItem(index)) 15241 this.CreateAndPrepareItemElement(index, parent); 15242 else if(this.GetImageLoadMode() != LoadModeEnum.DynamicLoadAndCache) { 15243 var owner = this.GetOwner(); 15244 var element = owner.GetItemElement(index); 15245 if(element) { 15246 element.style.backgroundImage = ""; 15247 var image = owner.GetImageElement(index); 15248 if(image) 15249 owner.DetachLoadEvents(image); 15250 ASPx.RemoveElement(image); 15251 ASPx.RemoveElement(owner.GetCanvasElement(index)); 15252 var el = owner.GetLoadingElement(index) 15253 if(el) el.style.display = ""; 15254 } 15255 this.SetDummyFlagToElement(index, true); 15256 } 15257 }, 15258 SetDummyFlagToElement: function (index, isDummy) { 15259 var element = this.GetOwner().GetItemElement(index); 15260 if(element) 15261 element.isDummy = isDummy; 15262 }, 15263 IsElementDummy: function (index) { 15264 var element = this.GetOwner().GetItemElement(index); 15265 if(element) 15266 return !!element.isDummy; 15267 return false; 15268 }, 15269 CreateItemAndAppend: function (index, parent) { 15270 if(!this.HasItem(index)) 15271 this.CreateAndPrepareItemElement(index, parent); 15272 if(this.IsElementDummy(index)) { 15273 this.SetDummyFlagToElement(index, false); 15274 this.GetOwner().AdjustImageElement(index); 15275 } 15276 }, 15277 CreateAndPrepareItemElement: function (index, parent) { 15278 var owner = this.GetOwner(); 15279 var element = owner.CreateItemElement(index); 15280 this.SaveItem(index, element); 15281 parent.appendChild(element); 15282 owner.PrepareItemElement(index); 15283 owner.AdjustItemElement(index); 15284 this.SetDummyFlagToElement(index, true); 15285 }, 15286 UpdateHierarchyCore: function () { 15287 var owner = this.GetOwner(); 15288 var navigationBarSize = owner.GetElementSize(owner.GetSlidePanelWrapperElement()), 15289 slidePanelPosition = owner.GetElementTransformPosition(owner.GetSlidePanelElement()); 15290 var fragment = owner.CreateDocumentFragment(); 15291 var itemsContainer = owner.GetItemsContainer(); 15292 var itemFullSize = owner.GetItemElementSize() + owner.GetItemSpacing(); 15293 var lPos = Math.min(-navigationBarSize * 0.3, -itemFullSize); 15294 var rPos = Math.max(navigationBarSize * 1.3, navigationBarSize + itemFullSize); 15295 var lDummyPos = lPos - navigationBarSize; 15296 var rDummyPos = rPos + navigationBarSize; 15297 var itemPos = 0; 15298 for(var i = 0; i < owner.GetItemCount() ; i++) { 15299 itemPos = slidePanelPosition + itemFullSize * i; 15300 if(itemPos > lDummyPos && itemPos < rDummyPos && (itemPos < lPos || itemPos > rPos)) 15301 this.CreateDummyItem(i, fragment || itemsContainer); 15302 else { 15303 if(itemPos <= lDummyPos || itemPos >= rDummyPos) 15304 this.RemoveItem(i); 15305 else 15306 this.CreateItemAndAppend(i, fragment || itemsContainer); 15307 } 15308 } 15309 if(fragment) 15310 itemsContainer.appendChild(fragment); 15311 } 15312 }); 15313 var ASPxClientImageSlider = ASPx.CreateClass(ASPxClientControl, { 15314 constructor: function (name) { 15315 this.constructor.prototype.constructor.call(this, name); 15316 this.activeItemIndex = 0; 15317 this.imageAreaStrategy = null; 15318 this.navigationBarStrategy = null; 15319 this.passePartoutElement = null; 15320 this.hiddenField = null; 15321 this.slideShowEnabled = false; 15322 this.templateCreated = false; 15323 this.timerID = -1; 15324 this.defaultControlSize = { width: "", height: "" }; 15325 this.showImageArea = true; 15326 this.showNavBar = true; 15327 this.seoFriendlyItems = []; 15328 this.items = []; 15329 this.enableLoopNavigation = false; 15330 this.enableKeyboardSupport = true; 15331 this.enablePagingByClick = true; 15332 this.enablePagingGestures = true; 15333 this.extremeItemClickMode = 0; 15334 this.animationDuration = 400; 15335 this.allowMouseWheel = false; 15336 this.imageLoadMode = 1; 15337 this.imageSizeMode = ASPx.ImageControlUtils.ImageSizeModeEnum.ActualSizeOrFit; 15338 this.thumbImageSizeMode = ASPx.ImageControlUtils.ImageSizeModeEnum.FitAndCrop; 15339 this.animationType = 0; 15340 this.navDirection = 0; 15341 this.itemSpacing = 5; 15342 this.target = ""; 15343 this.hasNavigateUrls = false; 15344 this.hasTemplates = false; 15345 this.navBtnsVbl = 2; 15346 this.itemTxtVbl = 3; 15347 this.interval = 5000; 15348 this.autoPlay = false; 15349 this.stopPlayingWhenPaging = false; 15350 this.stopPlayingWhenPagingExecuted = false; 15351 this.pausePlayingWhenMouseOver = false; 15352 this.playPauseBtnVbl = 0; 15353 this.visibleItemsCount = 0; 15354 this.navBarPos = 0; 15355 this.navBarPagingMode = 0; 15356 this.thumbNavBtnsVbl = 2; 15357 this.thumbNavBtnsPos = 0; 15358 this.navBarOffset = 0; 15359 this.passePartoutStyle = ""; 15360 this.imgAreaCssCl = ""; 15361 this.imgAreaStyle = ""; 15362 this.itemCssCl = ""; 15363 this.itemStyle = ""; 15364 this.navBarCssCl = ""; 15365 this.navBarStyle = ""; 15366 this.thCssCl = ""; 15367 this.thStyle = ""; 15368 this.thSelCssCl = ""; 15369 this.thSelStyle = ""; 15370 this.itemTxtCssCl = ""; 15371 this.itemTxtStyle = ""; 15372 this.dotHSprt = null; 15373 this.dotHCssCl = ""; 15374 this.dotHStyle = ""; 15375 this.dotPSprt = null; 15376 this.dotPCssCl = ""; 15377 this.dotPStyle = ""; 15378 this.dotSSprt = null; 15379 this.dotSCssCl = ""; 15380 this.dotSStyle = ""; 15381 this.dbh = ""; 15382 this.playBH = ""; 15383 this.pauseBH = ""; 15384 this.pbh = ""; 15385 this.nbh = ""; 15386 this.nbpbh = ""; 15387 this.nbnbh = ""; 15388 this.sizingConfig.adjustControl = true; 15389 this.disableSelectedStateAnimation = false;
15390 this.ActiveItemChanged = new ASPxClientEvent(); 15391 this.ItemClick = new ASPxClientEvent(); 15392 this.ThumbnailItemClick = new ASPxClientEvent(); 15393 this.StrategiesCreated = new ASPxClientEvent(); 15394 }, 15395 InlineInitialize: function () { 15396 ASPxClientControl.prototype.InlineInitialize.call(this); 15397 this.PopulateItemsSeoMode(); 15398 }, 15399 Initialize: function () { 15400 ASPxClientControl.prototype.Initialize.call(this); 15401 if(this.hasTemplates) 15402 for(var i = 0; i < this.seoFriendlyItems.length; i++) { 15403 this.items[i].s = this.seoFriendlyItems[i].s; 15404 this.items[i].ts = this.seoFriendlyItems[i].ts; 15405 this.items[i].t = this.seoFriendlyItems[i].t; 15406 this.items[i].u = this.seoFriendlyItems[i].u; 15407 } 15408 this.seoFriendlyItems = null; 15409 this.CreateControlHierarchy(); 15410 this.PrepareControlHierarchy(); 15411 this.InitializeElementsSize(); 15412 }, 15413 PopulateItemsSeoMode: function () { 15414 var elements = ASPx.GetNodesByTagName(this.GetMainElement(), "IMG"); 15415 if(elements.length > 0) 15416 this.populateItemCollection(elements, this.hasTemplates ? this.seoFriendlyItems : this.items); 15417 }, 15418 populateItemCollection: function(imageCollection, itemsCollection, image) { 15419 var index = 0; 15420 while(image = imageCollection[0]) { 15421 var collectionItem = (itemsCollection[index] || (itemsCollection[index] = {})); 15422 collectionItem.s = ASPx.Attr.GetAttribute(image, "src"); 15423 collectionItem.t = ASPx.Attr.GetAttribute(image, "alt"); 15424 if(image.parentNode.tagName == "A") { 15425 collectionItem.u = ASPx.Attr.GetAttribute(image.parentNode, "href"); 15426 ASPx.RemoveElement(image.parentNode); 15427 } else 15428 ASPx.RemoveElement(image); 15429 index++; 15430 } 15431 }, 15432 InitializeElementsSize: function () { 15433 var mainElement = this.GetMainElement(); 15434 this.defaultControlSize = { 15435 width: mainElement.style.width, 15436 height: mainElement.style.height 15437 }; 15438 }, 15439 AfterInitialize: function () { 15440 ASPxClientControl.prototype.AfterInitialize.call(this); 15441 this.InitializeHandlers(); 15442 }, 15443 InitializeHandlers: function () { 15444 if(ASPx.Browser.TouchUI) 15445 return; 15446 if(this.enableKeyboardSupport) { 15447 var element = this.GetMainElement(); 15448 ASPx.Evt.AttachEventToElement(element, "keydown", function (evt) { this.OnKeyDown(evt) }.aspxBind(this)); 15449 ASPx.Evt.AttachEventToElement(element, "mousedown", function(evt) { 15450 if(!ASPx.Ident.IsFocusableElementRegardlessTabIndex(ASPx.Evt.GetEventSource(evt))) 15451 this.Focus(); 15452 }.aspxBind(this)); 15453 } 15454 if(this.pausePlayingWhenMouseOver) 15455 MouseEnterHelper.AddHandler(this.GetMainElement(), function () { 15456 if(this.slideShowEnabled) 15457 this.PauseInternal(); 15458 }.aspxBind(this), function () { 15459 if(this.slideShowEnabled && !this.stopPlayingWhenPagingExecuted) 15460 this.PlayInternal(); 15461 }.aspxBind(this)); 15462 }, 15463 GetNavigationBarOffset: function(){ 15464 var offset = 0; 15465 var navigationBar = this.GetNavigationBarStrategy(); 15466 if(navigationBar) 15467 offset = navigationBar.GetSlideElementPosition(); 15468 return isNaN(offset) ? 0 : offset; 15469 }, 15470 UpdateStateObject: function(){ 15471 this.UpdateStateObjectWithObject({ activeItemIndex: this.GetActiveItemIndex(), navigationBarOffset: this.GetNavigationBarOffset() }); 15472 }, 15473 CreateTemplates: function () { 15474 var imageArea = this.GetImageAreaStrategy(); 15475 if(imageArea) 15476 imageArea.CreateTemplates(); 15477 var navigationBar = this.GetNavigationBarStrategy(); 15478 if(navigationBar) 15479 navigationBar.CreateTemplates(); 15480 ASPx.ProcessScriptsAndLinks(this.name); 15481 this.templateCreated = true; 15482 }, 15483 AdjustControlCore: function () { 15484 this.AdjustControlCoreInternal(); 15485 if(this.HasTemplates() && !this.templateCreated) 15486 window.setTimeout(function () { this.CreateTemplates(); }.aspxBind(this), 0); 15487 }, 15488 SetSizeCore: function(sizePropertyName, size, getFunctionName, corrected) { 15489 this.defaultControlSize[sizePropertyName] = size; 15490 ASPxClientControl.prototype.SetSizeCore.call(this, sizePropertyName, size, getFunctionName, corrected); 15491 }, 15492 AdjustControlCoreInternal: function () { 15493 this.AllowRubberLayout(); 15494 var mainElementStyle = { 15495 width: SizeUtils.GetClientWidth(this.GetMainElement(), true), 15496 height: SizeUtils.GetClientHeight(this.GetMainElement(), true) 15497 }; 15498 var passePartourStyle = { 15499 width: mainElementStyle.width, 15500 height: mainElementStyle.height 15501 }; 15502 this.AdjustNavigationBar(mainElementStyle, passePartourStyle); 15503 this.AdjustImageArea(mainElementStyle, passePartourStyle); 15504 this.ensureSizesAreValid(mainElementStyle); 15505 ASPx.SetStyles(this.GetMainElement(), mainElementStyle); 15506 if(this.showImageArea) 15507 ASPx.SetStyles(this.GetPassePartoutElement(), passePartourStyle); 15508 this.DenyRubberLayout(); 15509 }, 15510 AdjustNavigationBar: function (mainElementStyle, passePartourStyle) { 15511 var navigationBar = this.GetNavigationBarStrategy(); 15512 if(navigationBar) { 15513 navigationBar.AdjustControl(); 15514 var width = navigationBar.GetWidth(); 15515 var height = navigationBar.GetHeight(); 15516 if(this.showImageArea) { 15517 switch (this.GetNavigationBarPosition()) { 15518 case NavigationBarPositionEnum.Right: 15519 case NavigationBarPositionEnum.Left: 15520 passePartourStyle.float = "left"; 15521 passePartourStyle.width -= width; 15522 break; 15523 case NavigationBarPositionEnum.Bottom: 15524 case NavigationBarPositionEnum.Top: 15525 passePartourStyle.height -= height; 15526 break; 15527 } 15528 } 15529 else { 15530 mainElementStyle.width = width; 15531 mainElementStyle.height = height; 15532 } 15533 } 15534 }, 15535 AdjustImageArea: function (mainElementStyle, passePartourStyle) { 15536 var imageAreaStrategy = this.GetImageAreaStrategy(); 15537 if(imageAreaStrategy) { 15538 imageAreaStrategy.AdjustControl(passePartourStyle.width, passePartourStyle.height); 15539 var imageAreaWidth = imageAreaStrategy.GetWidth(); 15540 var imageAreaHeight = imageAreaStrategy.GetHeight(); 15541 var navigationBar = this.GetNavigationBarStrategy(); 15542 var navigationBarWidht = navigationBar ? navigationBar.GetWidth() : 0; 15543 var navigationBarHeight = navigationBar ? navigationBar.GetHeight() : 0; 15544 if(imageAreaWidth > passePartourStyle.width) { 15545 passePartourStyle.width = imageAreaWidth; 15546 mainElementStyle.width = imageAreaWidth + navigationBarWidht; 15547 } 15548 if(imageAreaHeight > passePartourStyle.height) { 15549 passePartourStyle.height = imageAreaHeight; 15550 mainElementStyle.height = imageAreaHeight + navigationBarHeight; 15551 } 15552 } 15553 }, 15554 AllowRubberLayout: function () { 15555 this.ResetControlStyle(); 15556 ASPx.SetStyles(this.GetMainElement(), { 15557 borderSpacing: 0, 15558 overflow: "hidden", 15559 display: "table" 15560 }); 15561 if(this.showImageArea) 15562 ASPx.SetStyles(this.GetPassePartoutElement(), { width: "", height: "" }); 15563 }, 15564 DenyRubberLayout: function () { 15565 ASPx.SetStyles(this.GetMainElement(), { 15566 display: "", 15567 overflow: "", 15568 borderSpacing: "" 15569 }); 15570 if(this.showImageArea) 15571 ASPx.SetStyles(this.GetPassePartoutElement(), { display: "" }); 15572 }, 15573 ResetControlStyle: function () { 15574 ASPx.SetStyles(this.GetMainElement(), this.defaultControlSize); 15575 var navigationBar = this.GetNavigationBarStrategy(); 15576 if(navigationBar) 15577 navigationBar.ResetControlStyle(); 15578 var imageAreaStrategy = this.GetImageAreaStrategy(); 15579 if(imageAreaStrategy) 15580 imageAreaStrategy.ResetControlStyle(); 15581 }, 15582 ensureSizesAreValid: function(style) { 15583 if(style.width <= 0) 15584 style.width = 1; 15585 if(style.height <= 0) 15586 style.height = 1; 15587 }, 15588 CreateControlHierarchy: function () { 15589 if(this.showImageArea) { 15590 this.passePartoutElement = document.createElement("DIV"); 15591 this.GetMainElement().appendChild(this.passePartoutElement); 15592 this.imageAreaStrategy = this.CreateImageAreaStrategy(); 15593 } 15594 if(this.showNavBar) 15595 this.navigationBarStrategy = this.CreateNavigationBarStrategy(); 15596 this.RaiseStrategiesCreated(); 15597 }, 15598 CreateImageAreaStrategy: function () { 15599 switch (this.GetAnimationType()) { 15600 case AnimationTypeEnum.Slide: 15601 return this.CreateSlideImageAreaStrategy(); 15602 break; 15603 case AnimationTypeEnum.Fade: 15604 return new FadeImageAreaStrategy(this); 15605 break; 15606 case AnimationTypeEnum.None: 15607 return new NoneImageAreaStrategy(this); 15608 break; 15609 } 15610 }, 15611 CreateSlideImageAreaStrategy: function () { 15612 return this.enableLoopNavigation ? new SlideLoopNavigationImageAreaStrategy(this) : new SlideImageAreaStrategy(this); 15613 }, 15614 CreateNavigationBarStrategy: function () { 15615 switch (this.GetNavigationBarMode()) { 15616 case NavigationBarModeEnum.Thumbnails: 15617 return new NavigationBarThumbnailStrategy(this); 15618 break; 15619 case NavigationBarModeEnum.Dots: 15620 return new NavigationBarDotsStrategy(this); 15621 break; 15622 } 15623 }, 15624 PrepareControlHierarchy: function () { 15625 this.PrepareMainElement(); 15626 if(this.showImageArea) 15627 this.PreparePassePartoutElement(); 15628 if(this.autoPlay) 15629 this.Play(); 15630 }, 15631 PrepareMainElement: function () { 15632 var mainElement = this.GetMainElement(); 15633 mainElement.tabIndex = Math.max(mainElement.tabIndex, 0); 15634 ASPx.SetElementDisplay(mainElement, true); 15635 }, 15636 PreparePassePartoutElement: function () { 15637 ASPx.SetStyles(this.GetPassePartoutElement(), { 15638 cssText: this.passePartoutStyle,
15639 className: CssClassesConstants.PassePartoutCssClassName 15640 }); 15641 }, 15642 OnBrowserWindowResize: function(e) { 15643 this.AdjustControl(); 15644 }, 15645 OnKeyDown: function(evt) { 15646 if(!this.IsFocused()) 15647 return; 15648 var keyKode = ASPx.Evt.GetKeyCode(evt); 15649 switch (keyKode) { 15650 case ASPx.Key.Left: 15651 if(this.rtl) { 15652 this.SetActiveItemIndex(this.GetActiveItemIndex() + 1); 15653 return ASPx.Evt.PreventEvent(evt); 15654 } 15655 case ASPx.Key.Up: 15656 this.SetActiveItemIndex(this.GetActiveItemIndex() - 1); 15657 return ASPx.Evt.PreventEvent(evt); 15658 case ASPx.Key.Right: 15659 if(this.rtl) { 15660 this.SetActiveItemIndex(this.GetActiveItemIndex() - 1); 15661 return ASPx.Evt.PreventEvent(evt); 15662 } 15663 case ASPx.Key.Down: 15664 this.SetActiveItemIndex(this.GetActiveItemIndex() + 1); 15665 return ASPx.Evt.PreventEvent(evt); 15666 case ASPx.Key.Home: 15667 this.SetActiveItemIndex(0); 15668 return ASPx.Evt.PreventEvent(evt); 15669 case ASPx.Key.End: 15670 this.SetActiveItemIndex(this.GetItemCount() - 1); 15671 return ASPx.Evt.PreventEvent(evt); 15672 } 15673 }, 15674 GetImageAreaStrategy: function () { 15675 return this.imageAreaStrategy; 15676 }, 15677 GetNavigationBarStrategy: function () { 15678 return this.navigationBarStrategy; 15679 }, 15680 GetPassePartoutElement: function () { 15681 return this.passePartoutElement; 15682 }, 15683 GetItem: function (index) { 15684 var item = this.GetItemInternal(index); 15685 if(item) 15686 return new ASPxClientImageSliderItem(this, index, item.n, item.s, item.t); 15687 return null; 15688 }, 15689 GetItemByName: function (name) { 15690 for(var i = 0; i < this.GetItemCount() ; i++) 15691 if(this.GetItemInternal(i).n == name) 15692 return this.GetItem(i); 15693 return null; 15694 }, 15695 GetActiveItemIndex: function () { 15696 return this.GetRtlIndex(this.GetActiveItemIndexInternal()); 15697 }, 15698 SetActiveItemIndex: function (index, preventAnimation, isAPICall) {
15699 this.SetActiveItemIndexInternal(this.GetRtlIndex(index), preventAnimation, isAPICall); 15700 }, 15701 GetActiveItem: function () { 15702 return this.GetItem(this.GetActiveItemIndex()); 15703 }, 15704 SetActiveItem: function (item, preventAnimation) { 15705 this.SetActiveItemIndex(item.index, preventAnimation); 15706 }, 15707 GetItemCount: function () { 15708 return this.items.length; 15709 }, 15710 Focus: function () { 15711 if(!ASPx.Browser.TouchUI && this.enableKeyboardSupport) 15712 ASPx.SetFocus(this.GetMainElement()); 15713 }, 15714 Play: function () { 15715 if(this.enabled) { 15716 this.PlayInternal(); 15717 this.slideShowEnabled = true; 15718 } 15719 }, 15720 Pause: function () { 15721 if(this.enabled) { 15722 this.PauseInternal(); 15723 this.slideShowEnabled = false; 15724 } 15725 }, 15726 IsSlideShowPlaying: function () { 15727 return this.timerID != -1; 15728 }, 15729 IsFocused: function () { 15730 return ASPx.GetActiveElement() == this.GetMainElement(); 15731 }, 15732 PlayInternal: function () { 15733 if(this.IsSlideShowPlaying()) 15734 return; 15735 this.timerID = window.setInterval(function () { this.DoSeActivetNextItem(); }.aspxBind(this), this.interval); 15736 this.stopPlayingWhenPagingExecuted = false; 15737 if(this.GetImageAreaStrategy()) 15738 this.GetImageAreaStrategy().SetSlideShowButtonState(false); 15739 }, 15740 PauseInternal: function () { 15741 this.timerID = ASPx.Timer.ClearInterval(this.timerID); 15742 if(this.GetImageAreaStrategy()) 15743 this.GetImageAreaStrategy().SetSlideShowButtonState(true); 15744 }, 15745 ResetSlideShowTimer: function () { 15746 if(this.IsSlideShowPlaying()) { 15747 this.timerID = ASPx.Timer.ClearInterval(this.timerID); 15748 this.timerID = window.setInterval(function () { this.DoSeActivetNextItem(); }.aspxBind(this), this.interval); 15749 } 15750 }, 15751 StopPlayingWhenPaging: function () { 15752 if(this.stopPlayingWhenPaging) { 15753 this.Pause(); 15754 this.stopPlayingWhenPagingExecuted = true; 15755 } 15756 }, 15757 DoSeActivetNextItem: function () { 15758 var activeIndex = this.GetActiveItemIndex() + 1; 15759 if(activeIndex >= this.GetItemCount()) 15760 activeIndex = 0;
15761 this.SetActiveItemIndex(activeIndex); 15762 }, 15763 RaiseStrategiesCreated: function () { 15764 if(!this.StrategiesCreated.IsEmpty()) 15765 this.StrategiesCreated.FireEvent(this, null); 15766 }, 15767 RaiseActiveItemChanged: function () { 15768 this.RaiseItemEvent(this.ActiveItemChanged); 15769 }, 15770 RaiseItemClick: function () { 15771 this.RaiseItemEvent(this.ItemClick); 15772 }, 15773 RaiseThumbnailItemClick: function () { 15774 this.RaiseItemEvent(this.ThumbnailItemClick); 15775 }, 15776 RaiseItemEvent: function (event) { 15777 if(!event.IsEmpty()) { 15778 var args = new ASPxClientImageSliderItemEventArgs(this.GetActiveItem()); 15779 event.FireEvent(this, args); 15780 } 15781 }, 15782 SetActiveItemIndexInternal: function (index, preventAnimation, isAPICall) { 15783 if(index >= 0 && index < this.GetItemCount() && index != this.GetActiveItemIndexInternal()) { 15784 if(this.GetImageAreaStrategy()) 15785 this.GetImageAreaStrategy().SetActiveItemIndex(index, preventAnimation); 15786 if(this.GetNavigationBarStrategy()) 15787 this.GetNavigationBarStrategy().SetActiveItemIndex(index, preventAnimation); 15788 this.ResetSlideShowTimer(); 15789 if(!isAPICall) 15790 this.RaiseActiveItemChanged(); 15791 } 15792 }, 15793 GetActiveItemIndexInternal: function() { 15794 var strategy = this.GetImageAreaStrategy() || this.GetNavigationBarStrategy(); 15795 if(strategy) 15796 return strategy.GetActiveItemIndex(); 15797 return 0; 15798 }, 15799 GetItemInternal: function (index) { 15800 if(index < 0 || index >= this.GetItemCount()) 15801 return null; 15802 return this.items[index]; 15803 }, 15804 GetRtlIndex: function (index) { 15805 if(this.rtl) 15806 return this.GetItemCount() - 1 - index; 15807 return index; 15808 }, 15809 GetAnimationType: function () { 15810 return this.animationType; 15811 }, 15812 HasNavigateUrls: function () { 15813 return this.hasNavigateUrls; 15814 }, 15815 HasTemplates: function () { 15816 return this.hasTemplates; 15817 }, 15818 GetNavigationBarPosition: function () { 15819 return this.navBarPos; 15820 }, 15821 GetNavigationBarMode: function () { 15822 return this.dotHCssCl != "" ? 1 : 0; 15823 } 15824 }); 15825 ASPxClientImageSlider.Cast = ASPxClientControl.Cast; 15826 var ASPxClientImageSliderItemEventArgs = ASPx.CreateClass(ASPxClientEventArgs, { 15827 constructor: function (item) { 15828 this.constructor.prototype.constructor.call(this); 15829 this.item = item; 15830 } 15831 }); 15832 var ASPxClientImageSliderItem = ASPx.CreateClass(null, { 15833 constructor: function (imageSlider, index, name, imageUrl, text) { 15834 this.imageSlider = imageSlider; 15835 this.index = index; 15836 this.name = name; 15837 this.imageUrl = imageUrl; 15838 this.text = text; 15839 } 15840 }); 15841 var ASPxClientImageZoomNavigator = ASPx.CreateClass(ASPxClientImageSlider, { 15842 constructor: function (name) { 15843 this.constructor.prototype.constructor.call(this, name); 15844 this.disableSelectedStateAnimation = true; 15845 this.imageZoomName = ""; 15846 this.changeAction = 0; 15847 this.buttonVisibilityMode = 0; 15848 }, 15849 Initialize: function () { 15850 ASPxClientImageSlider.prototype.Initialize.call(this); 15851 this.ActiveItemChanged.AddHandler(function () { 15852 this.OnActiveItemChanged(); 15853 }.aspxBind(this)); 15854 }, 15855 CreateNavigationBarStrategy: function () { 15856 return new ImageZoomNavigationBarStrategy(this); 15857 }, 15858 PrepareControlHierarchy: function () { 15859 ASPxClientImageSlider.prototype.PrepareControlHierarchy.call(this); 15860 ASPx.AddClassNameToElement(this.GetMainElement(), CssClassesConstants.ImageZoomNavigatorCssClassName); 15861 }, 15862 OnActiveItemChanged: function () { 15863 this.UpdageImageZoomImages(); 15864 }, 15865 UpdageImageZoomImages: function() { 15866 var imageZoom = this.GetImageZoom(); 15867 if(imageZoom) { 15868 var item = this.GetItemInternal(this.GetActiveItemIndex()); 15869 imageZoom.SetImageProperties(item.s, item.liu || item.s, item.zt, item.et, item.zt || item.at); 15870 } 15871 }, 15872 GetImageZoom: function() { 15873 return this.imageZoomName ? ASPx.GetControlCollection().Get(this.imageZoomName) : null; 15874 } 15875 }); 15876 var ImageZoomNavigationBarStrategy = ASPx.CreateClass(NavigationBarThumbnailStrategy, { 15877 constructor: function (imageZoomNavigator) { 15878 this.visibleItemCount = 0; 15879 this.constructor.prototype.constructor.call(this, imageZoomNavigator); 15880 }, 15881 InitializeHandlers: function () {
15882 if(this.GetImageSlider().changeAction == ActiveItemChangeActionEnum.Hover) { 15883 ItemsOwnerBase.prototype.InitializeHandlers.call(this); 15884 ASPx.Evt.AttachEventToElement(this.GetSlidePanelElement(), "mouseover", function (evt) { this.OnNavigationBarMouseOver(evt); }.aspxBind(this)); 15885 } 15886 else 15887 NavigationBarThumbnailStrategy.prototype.InitializeHandlers.call(this); 15888 }, 15889 OnNavigationBarMouseOver: function (evt) { 15890 if(!this.IsExecutedGesture()) { 15891 var index = this.GetItemIndexFromEvent(evt); 15892 if(index != -1) 15893 this.GetImageSlider().SetActiveItemIndexInternal(index); 15894 } 15895 }, 15896 GetEnableItemHoverState: function () { 15897 return this.GetImageSlider().changeAction == ActiveItemChangeActionEnum.Click; 15898 }, 15899 GetItemAlternateText: function (index) { 15900 if(this.IsValidItemIndex(index)) { 15901 var item = this.GetItem(index); 15902 return item.zt || item.at || ""; 15903 } 15904 return ""; 15905 }, 15906 CalculateSize: function() { 15907 NavigationBarThumbnailStrategy.prototype.CalculateSize.call(this); 15908 if(!this.CanUseVisibleItemCount()) { 15909 var isHorizontal = this.IsHorizontalNavigation(); 15910 var size = { 15911 width: isHorizontal ? this.GetItemWidthWithSpacing() * this.GetItemCount() - this.GetItemSpacing() : this.GetItemElementWidth(), 15912 height: isHorizontal ? this.GetItemElementHeight() : this.GetItemHeightWithSpacing() * this.GetItemCount() - this.GetItemSpacing() 15913 }; 15914 var mainElementWidth = SizeUtils.GetClientWidth(this.GetMainElement(), true); 15915 var mainElementHeight = SizeUtils.GetClientHeight(this.GetMainElement(), true); 15916 if(isHorizontal && size.width < mainElementWidth || !isHorizontal && size.height < mainElementHeight) { 15917 this.visibleItemCount = this.GetItemCount(); 15918 if(this.GetImageSlider().buttonVisibilityMode == NavigationButtonVisibilityModeEnum.Auto) 15919 this.SetVisibilityButtons(false); 15920 } 15921 } 15922 }, 15923 UpdateNavigationButtonsState: function () { 15924 if(this.GetVisibleItemCount() != this.GetItemCount() || this.GetImageSlider().buttonVisibilityMode != NavigationButtonVisibilityModeEnum.Auto) 15925 return NavigationBarThumbnailStrategy.prototype.UpdateNavigationButtonsState.call(this); 15926 return false; 15927 }, 15928 CanCreateNavigationButtons: function() { 15929 if(this.GetImageSlider().buttonVisibilityMode == NavigationButtonVisibilityModeEnum.Always) 15930 return true; 15931 return NavigationBarThumbnailStrategy.prototype.CanCreateNavigationButtons.call(this); 15932 }, 15933 GetVisibleItemCount: function() { 15934 return this.GetImageSlider().visibleItemsCount || this.visibleItemCount; 15935 } 15936 }); 15937 window.ASPxClientImageSlider = ASPxClientImageSlider; 15938 window.ASPxClientImageSliderItemEventArgs = ASPxClientImageSliderItemEventArgs; 15939 window.ASPxClientImageSliderItem = ASPxClientImageSliderItem; 15940 window.ASPxClientImageZoomNavigator = ASPxClientImageZoomNavigator; 15941})();
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.