1(function () { 2 var CssClassesConstants = {}; 3 CssClassesConstants.Prefix = "dxis-"; 4 CssClassesConstants.OverlayElementCssClass = CssClassesConstants.Prefix + "overlayElement"; 5 CssClassesConstants.TextAreaCssClassName = CssClassesConstants.Prefix + "itemTextArea"; 6 CssClassesConstants.ImageAreaSlidePanelCssClassName = CssClassesConstants.Prefix + "slidePanel"; 7 CssClassesConstants.NavigationBarHoverStateElementCssClassName = CssClassesConstants.Prefix + "nbHoverItem"; 8 CssClassesConstants.NavigationBarSelectedStateCssClassName = " " + CssClassesConstants.Prefix + "selected"; 9 CssClassesConstants.NavigationBarHoverStateCssClassName = CssClassesConstants.Prefix + "hover"; 10 CssClassesConstants.NavigationBarSlidePanelCssClassName = CssClassesConstants.Prefix + "nbSlidePanel"; 11 CssClassesConstants.NavigationBarSlidePanelWrapperCssClassName = CssClassesConstants.Prefix + "nbSlidePanelWrapper"; 12 CssClassesConstants.PassePartoutCssClassName = CssClassesConstants.Prefix + "passePartout"; 13 CssClassesConstants.ItemHyperLinkCssClassName = CssClassesConstants.Prefix + "hl"; 14 CssClassesConstants.PlayPauseWrapperCssClassName = CssClassesConstants.Prefix + "playPauseBtnWrapper"; 15 CssClassesConstants.NavigationButtonUpWrapperCssClassName = CssClassesConstants.Prefix + "prevBtnVertWrapper"; 16 CssClassesConstants.NavigationButtonDownWrapperCssClassName = CssClassesConstants.Prefix + "nextBtnVertWrapper"; 17 CssClassesConstants.NavigationButtonBackwardWrapperCssClassName = CssClassesConstants.Prefix + "prevBtnHorWrapper"; 18 CssClassesConstants.NavigationButtonForwardWrapperCssClassName = CssClassesConstants.Prefix + "nextBtnHorWrapper"; 19 CssClassesConstants.NavigationButtonUpOutsideWrapperCssClassName = CssClassesConstants.Prefix + "prevBtnVertOutsideWrapper"; 20 CssClassesConstants.NavigationButtonDownOutsideWrapperCssClassName = CssClassesConstants.Prefix + "nextBtnVertOutsideWrapper"; 21 CssClassesConstants.NavigationButtonBackwardOutsideWrapperCssClassName = CssClassesConstants.Prefix + "prevBtnHorOutsideWrapper"; 22 CssClassesConstants.NavigationButtonForwardOutsideWrapperCssClassName = CssClassesConstants.Prefix + "nextBtnHorOutsideWrapper"; 23 CssClassesConstants.NavigationButtonWrapperHoverCssClassPostfix = "Hover"; 24 CssClassesConstants.NavigationButtonWrapperPressedCssClassPostfix = "Pressed"; 25 CssClassesConstants.NavigationButtonWrapperDisabledCssClassPostfix = "Disabled"; 26 CssClassesConstants.ImageZoomNavigatorCssClassName = CssClassesConstants.Prefix + "zoomNavigator"; 27 CssClassesConstants.LoadingElement = "dx-is-loading"; 28 var LoadModeEnum = { 29 AllImages: 0, 30 DynamicLoadAndCache: 1, 31 DynamicLoad: 2 32 }; 33 var AnimationTypeEnum = { 34 Slide: 0, 35 Fade: 1, 36 None: 2 37 }; 38 var AnimationDirectionEnum = { 39 Horizontal: 0, 40 Vertical: 1 41 }; 42 var NavigationBarPositionEnum = { 43 Bottom: 0, 44 Top: 1, 45 Left: 2, 46 Right: 3 47 }; 48 var NavigationBarModeEnum = { 49 Thumbnails: 0, 50 Dots: 1 51 }; 52 var ElementVisibilityModeEnum = { 53 None: 0, 54 Faded: 1, 55 OnMouseOver: 2, 56 Always: 3 57 }; 58 var NavigationBarPagingModeEnum = { 59 Page: 0, 60 Single: 1 61 }; 62 var ExtremeItemClickModeEnum = { 63 SelectAndSlide: 0, 64 Select: 1 65 }; 66 var NavigationBarButtonPositionEnum = { 67 Inside: 0, 68 Outside: 1 69 }; 70 var ActiveItemChangeActionEnum = { 71 Click: 0, 72 Hover: 1 73 }; 74 var NavigationButtonVisibilityModeEnum = { 75 Auto: 0, 76 Always: 1 77 }; 78 var FadedDefaultOpacity = 0.3; 79 var SizeUtils = { 80 GetClientWidth: function (element, clear) { 81 return clear ? ASPx.GetClearClientWidth(element) : element.offsetWidth; 82 }, 83 GetClientHeight: function (element, clear) { 84 return clear ? ASPx.GetClearClientHeight(element) : element.offsetHeight; 85 } 86 }; 87 var MouseEnterHelper = { 88 data: [], 89 AddHandler: function (element, mouseOver, mouseOut) { 90 var dataItem = this.GetDataItem(element); 91 if(!dataItem) 92 dataItem = this.CreateDataItem(element, mouseOver, mouseOut); 93 dataItem.mouseOverHandlers.push(mouseOver); 94 dataItem.mouseOutHandlers.push(mouseOut); 95 }, 96 GetDataItem: function (element) { 97 for(var i = 0; i < this.data.length; i++) { 98 var dataItem = this.data[i]; 99 if(dataItem && dataItem.element == element) 100 return dataItem; 101 } 102 return null; 103 },
104 CreateDataItem: function (element, mouseOver, mouseOut) { 105 var dataItem = { element: element, mouseOverHandlers: [mouseOver], mouseOutHandlers: [mouseOut] }; 106 this.data.push(dataItem); 107 ASPx.Evt.AttachMouseEnterToElement(element, MouseEnterHelper.OnMouseOverHandler, MouseEnterHelper.OnMouseOutHandler); 108 return dataItem; 109 }, 110 OnMouseOverHandler: function (element) { 111 MouseEnterHelper.PerformHandlers(MouseEnterHelper.GetDataItem(element).mouseOverHandlers); 112 }, 113 OnMouseOutHandler: function (element) { 114 MouseEnterHelper.PerformHandlers(MouseEnterHelper.GetDataItem(element).mouseOutHandlers); 115 }, 116 PerformHandlers: function (array) { 117 for(var i = 0; i < array.length; i++) 118 array[i](); 119 } 120 }; 121 var ControlBase = ASPx.CreateClass(ASPxClientImageControlBase, { 122 constructor: function (imageSlider) { 123 this.constructor.prototype.constructor.call(this, imageSlider); 124 }, 125 AdjustControl: function () { 126 this.CalculateSize(); 127 }, 128 ResetControlStyle: function () { 129 }, 130 CalculateSize: function () { 131 }, 132 InitializeHandlers: function () { 133 }, 134 IsAdjustedSize: function () { 135 return this.GetImageSlider().IsAdjusted(); 136 }, 137 GetImageSlider: function () { 138 return this.control; 139 }, 140 GetClientControlName: function () { 141 return this.GetImageSlider().name; 142 }, 143 IsHorizontalNavigation: function () { 144 return this.GetImageSlider().navDirection == AnimationDirectionEnum.Horizontal; 145 }, 146 GetAnimationType: function () { 147 return this.GetImageSlider().GetAnimationType(); 148 }, 149 IsRtl: function (withoutHorizontalNavigation) { 150 var value = !!this.GetImageSlider().rtl; 151 if(!withoutHorizontalNavigation) 152 value = value && this.IsHorizontalNavigation(); 153 return value; 154 }, 155 CreateDiv: function () { 156 return document.createElement("DIV"); 157 }, 158 GetStateController: function () { 159 return typeof (ASPx.GetStateController) != "undefined" ? ASPx.GetStateController() : null; 160 }, 161 PatchElementForMSTouch: function (element) { 162 if(ASPx.Browser.MSTouchUI) 163 element.className += " " + ASPx.TouchUIHelper.msTouchDraggableClassName; 164 } 165 }); 166 var ButtonBase = ASPx.CreateClass(ControlBase, { 167 constructor: function (itemsOwner) { 168 this.itemsOwner = itemsOwner; 169 this.defaultOpacity = 0; 170 this.isLeftButtonPressed = false; 171 this.visibility = true; 172 this.constructor.prototype.constructor.call(this, itemsOwner.GetImageSlider()); 173 }, 174 Initialize: function () { 175 if(this.GetVisibilityMode() == ElementVisibilityModeEnum.Faded) 176 this.defaultOpacity = FadedDefaultOpacity; 177 }, 178 GetOwner: function () { 179 return this.itemsOwner; 180 }, 181 GetContainer: function () { 182 return this.GetOwner().GetButtonsContainer(); 183 }, 184 GetMouseUpElement: function () { 185 return this.GetContainer(); 186 }, 187 GetVisibilityMode: function () { 188 return 0; 189 }, 190 CanHandle: function () { 191 return this.GetOwner().CanHandleButtons(); 192 }, 193 PrepareControlHierarchy: function () { 194 if(this.GetVisibilityMode() == ElementVisibilityModeEnum.Always) 195 return; 196 var elements = this.GetAnimationElements(); 197 for(var i = 0; i < elements.length; i++) { 198 ASPx.SetStyles(elements[i], { opacity: this.defaultOpacity }); 199 this.PatchElementForMSTouch(elements[i]); 200 } 201 }, 202 InitializeHandlers: function () { 203 ASPx.Evt.AttachEventToElement(this.GetMouseUpElement(), ASPx.TouchUIHelper.touchMouseDownEventName, function (evt) { 204 this.isLeftButtonPressed = ASPx.Evt.IsLeftButtonPressed(evt); 205 }.aspxBind(this)); 206 ASPx.Evt.AttachEventToElement(this.GetMouseUpElement(), ASPx.Browser.TouchUI ? ASPx.TouchUIHelper.touchMouseUpEventName : "click", function (evt) { 207 if(this.visibility && this.isLeftButtonPressed && this.CanHandle()) 208 this.OnMouseUp(evt); 209 }.aspxBind(this)); 210 if(!ASPx.Browser.TouchUI && this.GetVisibilityMode() != ElementVisibilityModeEnum.Always) 211 MouseEnterHelper.AddHandler(this.GetContainer(), function () { this.Appear(); }.aspxBind(this), function () { this.Disappear(); }.aspxBind(this)); 212 }, 213 OnMouseUp: function (evt) { 214 }, 215 Appear: function () { 216 this.Animate(1); 217 }, 218 Disappear: function () { 219 this.Animate(this.defaultOpacity); 220 }, 221 GetAnimationElements: function () { 222 return []; 223 }, 224 Animate: function (value) { 225 var elements = this.GetAnimationElements();
226 var hasAnimation = this.GetAnimationType() != AnimationTypeEnum.None; 227 for(var i = 0; i < elements.length; i++) { 228 if(hasAnimation) 229 ASPx.AnimationHelper.fadeTo(elements[i], { to: value }); 230 else 231 ASPx.SetStyles(elements[i], { opacity: value }); 232 } 233 }, 234 SetInnerHtml: function (element, html) { 235 element.innerHTML = html; 236 } 237 }); 238 var SlideShowButton = ASPx.CreateClass(ButtonBase, { 239 constructor: function (itemsOwner) { 240 this.wrapperElement = null; 241 this.playButton = null; 242 this.pauseButton = null; 243 this.itemsOwner = itemsOwner; 244 this.constructor.prototype.constructor.call(this, itemsOwner); 245 }, 246 GetMouseUpElement: function () { 247 return this.wrapperElement; 248 }, 249 GetAnimationElements: function () { 250 return [this.wrapperElement]; 251 }, 252 GetVisibilityMode: function () { 253 return this.GetImageSlider().playPauseBtnVbl; 254 }, 255 CreateControlHierarchy: function () { 256 var slider = this.GetImageSlider(); 257 this.wrapperElement = this.CreateDiv(); 258 this.wrapperElement.innerHTML = slider.playBH + slider.pauseBH; 259 this.playButton = this.wrapperElement.children[0]; 260 this.pauseButton = this.wrapperElement.children[1]; 261 this.GetContainer().appendChild(this.wrapperElement); 262 }, 263 PrepareControlHierarchy: function () { 264 ButtonBase.prototype.PrepareControlHierarchy.call(this); 265 this.wrapperElement.className = CssClassesConstants.PlayPauseWrapperCssClassName; 266 this.SetButtonState(true); 267 }, 268 IsPlaying: function () { 269 return this.GetImageSlider().IsSlideShowPlaying(); 270 }, 271 OnMouseUp: function (evt) { 272 var slider = this.GetImageSlider(); 273 if(this.IsPlaying()) 274 slider.Pause(); 275 else 276 slider.Play(); 277 }, 278 SetButtonState: function (play) { 279 ASPx.SetElementDisplay(this.playButton, play); 280 ASPx.SetElementDisplay(this.pauseButton, !play); 281 } 282 }); 283 var NavigationButtons = ASPx.CreateClass(ButtonBase, { 284 constructor: function (itemsOwner) { 285 this.prevButtonEnable = true; 286 this.nextButtonEnable = true; 287 this.prevButton = null; 288 this.nextButton = null; 289 this.prevButtonWrapper = null; 290 this.nextButtonWrapper = null; 291 this.constructor.prototype.constructor.call(this, itemsOwner); 292 }, 293 GetUniqueId: function () { 294 return this.GetOwner().GetUniqueId(); 295 }, 296 IsEnablePagingByClick: function () { 297 return this.GetOwner().IsEnablePagingByClick(); 298 }, 299 IsHorizontal: function () { 300 return this.GetOwner().IsHorizontalNavigation(); 301 }, 302 GetVisibilityMode: function () { 303 return this.GetOwner().GetNavigationBtnsVisibilityMode(); 304 }, 305 OnPrevButtonMouseUp: function (evt) { 306 if(this.prevButtonEnable) 307 this.GetOwner().PerformBackward(); 308 return ASPx.Evt.PreventEvent(evt); 309 }, 310 OnNextButtonMouseUp: function (evt) { 311 if(this.nextButtonEnable) 312 this.GetOwner().PerformForward(); 313 return ASPx.Evt.PreventEvent(evt); 314 }, 315 CreateControlHierarchy: function () { 316 this.prevButtonWrapper = this.CreateDiv(); 317 this.nextButtonWrapper = this.CreateDiv(); 318 this.SetInnerHtml(this.prevButtonWrapper, this.GetOwner().GetPrevButtonHtml()); 319 this.SetInnerHtml(this.nextButtonWrapper, this.GetOwner().GetNextButtonHtml()); 320 this.prevButton = this.prevButtonWrapper.firstChild; 321 this.nextButton = this.nextButtonWrapper.firstChild; 322 var container = this.GetContainer(); 323 container.appendChild(this.prevButtonWrapper); 324 container.appendChild(this.nextButtonWrapper); 325 }, 326 PrepareControlHierarchy: function () { 327 ButtonBase.prototype.PrepareControlHierarchy.call(this); 328 this.SetId(this.prevButtonWrapper, "nbwb"); 329 this.SetId(this.nextButtonWrapper, "nbwf"); 330 this.PrepareButtonWrapper(this.prevButtonWrapper, this.GetPrevButtonWrapperCssClassName()); 331 this.PrepareButtonWrapper(this.nextButtonWrapper, this.GetNextButtonWrapperCssClassName()); 332 }, 333 GetPrevButtonWrapperCssClassName: function () { 334 return this.IsHorizontal() ? 335 CssClassesConstants.NavigationButtonBackwardWrapperCssClassName : CssClassesConstants.NavigationButtonUpWrapperCssClassName; 336 }, 337 GetNextButtonWrapperCssClassName: function () { 338 return this.IsHorizontal() ?
339 CssClassesConstants.NavigationButtonForwardWrapperCssClassName : CssClassesConstants.NavigationButtonDownWrapperCssClassName; 340 }, 341 PrepareButtonWrapper: function (wrapper, className) { 342 wrapper.className = className; 343 var stateController = this.GetStateController(); 344 if(stateController) { 345 if(this.IsEnabled()) { 346 stateController.AddHoverItem(wrapper.id, [className + CssClassesConstants.NavigationButtonWrapperHoverCssClassPostfix], [""], [""], null, null, false); 347 stateController.AddPressedItem(wrapper.id, [className + CssClassesConstants.NavigationButtonWrapperPressedCssClassPostfix], [""], [""], null, null, false); 348 } 349 stateController.AddDisabledItem(wrapper.id, [className + CssClassesConstants.NavigationButtonWrapperDisabledCssClassPostfix], [""], [""], null, null, false); 350 } 351 }, 352 SetId: function (element, id) { 353 element.id = this.GetClientControlName() + this.GetOwner().GetUniqueId() + id; 354 }, 355 OnMouseUp: function (evt) { 356 var value = true; 357 var container = this.GetContainer(); 358 var source = ASPx.Evt.GetEventSource(evt); 359 if(this.IsEnablePagingByClick() && !this.IsSlideShowButton(source) && !ASPx.IsInteractiveControl(source)) { 360 var containerSize = this.IsHorizontal() ? container.offsetWidth : container.offsetHeight; 361 var leftLimitPos = containerSize * 0.35, 362 rightLimitPos = containerSize * 0.65; 363 var mousePosInElement = this.IsHorizontal() ? ASPx.Evt.GetEventX(evt) - ASPx.GetAbsolutePositionX(container) : ASPx.Evt.GetEventY(evt) - ASPx.GetAbsolutePositionY(container); 364 if(mousePosInElement < leftLimitPos) 365 value = this.OnPrevButtonMouseUp(evt); 366 else if(mousePosInElement > rightLimitPos) 367 value = this.OnNextButtonMouseUp(evt); 368 } 369 else { 370 if(source == this.prevButtonWrapper || source == this.prevButton) 371 value = this.OnPrevButtonMouseUp(evt); 372 else if(source == this.nextButtonWrapper || source == this.nextButton) 373 value = this.OnNextButtonMouseUp(evt); 374 } 375 return value; 376 }, 377 IsSlideShowButton: function (element) { 378 var className = CssClassesConstants.PlayPauseWrapperCssClassName; 379 return element.className == className || element.parentNode.className == className; 380 }, 381 SetEnablePrevButton: function (enable) { 382 this.prevButtonEnable = enable; 383 var stateController = this.GetStateController(); 384 if(stateController) { 385 stateController.SetElementEnabled(this.prevButtonWrapper, enable); 386 stateController.SetElementEnabled(this.prevButton, enable); 387 } 388 }, 389 SetEnableNextButton: function (enable) { 390 this.nextButtonEnable = enable; 391 var stateController = this.GetStateController(); 392 if(stateController) { 393 stateController.SetElementEnabled(this.nextButtonWrapper, enable); 394 stateController.SetElementEnabled(this.nextButton, enable); 395 } 396 }, 397 SetVisibilityButtons: function (visible) { 398 if(this.visibility == visible) 399 return; 400 this.visibility = visible; 401 ASPx.SetElementDisplay(this.prevButtonWrapper, this.visibility); 402 ASPx.SetElementDisplay(this.nextButtonWrapper, this.visibility); 403 }, 404 GetVisibilityButtons: function () { 405 return this.visibility; 406 }, 407 GetAnimationElements: function () { 408 return [this.prevButtonWrapper, this.nextButtonWrapper]; 409 }, 410 GetPrevButtonWrapperSize: function () { 411 return this.GetButtonSize(this.prevButtonWrapper); 412 }, 413 GetNextButtonWrapperSize: function () { 414 return this.GetButtonSize(this.nextButtonWrapper); 415 }, 416 GetButtonSize: function (element) { 417 return { width: element.offsetWidth, height: element.offsetHeight }; 418 } 419 }); 420 var OutsideNavigationButtons = ASPx.CreateClass(NavigationButtons, { 421 constructor: function (itemsOwner) { 422 this.constructor.prototype.constructor.call(this, itemsOwner); 423 }, 424 GetAnimationElements: function () { 425 return []; 426 }, 427 GetPrevButtonWrapperCssClassName: function () { 428 return this.IsHorizontal() ? 429 CssClassesConstants.NavigationButtonBackwardOutsideWrapperCssClassName : CssClassesConstants.NavigationButtonUpOutsideWrapperCssClassName; 430 }, 431 GetNextButtonWrapperCssClassName: function () { 432 return this.IsHorizontal() ?
433 CssClassesConstants.NavigationButtonForwardOutsideWrapperCssClassName : CssClassesConstants.NavigationButtonDownOutsideWrapperCssClassName; 434 } 435 }); 436 var ItemsOwnerBase = ASPx.CreateClass(ControlBase, { 437 constructor: function (imageSlider) { 438 this.activeItemIndex = 0; 439 this.prevItemIndex = -1; 440 this.fullItemWidth = 0; 441 this.fullItemHeight = 0; 442 this.clearItemWidth = 0; 443 this.clearItemHeight = 0; 444 this.itemElementsManager = null; 445 this.navigationButtons = null; 446 this.slidePanelElement = null; 447 this.constructor.prototype.constructor.call(this, imageSlider); 448 }, 449 Initialize: function () { 450 this.activeItemIndex = this.GetRtlIndex(this.GetImageSlider().activeItemIndex); 451 if(this.IsRtl()) 452 this.prevItemIndex = this.activeItemIndex + 1; 453 }, 454 GetRtlIndex: function (index) { 455 if(this.IsRtl()) 456 return this.GetItemCount() - 1 - index; 457 return index; 458 }, 459 ForEachItem: function (func) { 460 var count = this.GetItemCount(); 461 if(!this.IsRtl()) { 462 for(var i = 0; i < count ; i++) 463 func.call(this, i); 464 } 465 else { 466 for(var i = count - 1; i >= 0; i--) 467 func.call(this, i); 468 } 469 }, 470 GetUniqueId: function () { 471 return ""; 472 }, 473 IsAccessibilityCompliant: function () { 474 return this.GetImageSlider().accessibilityCompliant; 475 }, 476 GetItemElementsManager: function () { 477 if(!this.itemElementsManager) 478 this.itemElementsManager = this.CreateItemElementsManager(); 479 return this.itemElementsManager; 480 }, 481 CreateItemElementsManager: function () { 482 return new ItemElementsManagerBase(this); 483 }, 484 GetTemplate: function (index) { 485 return this.IsValidItemIndex(index) ? this.GetItem(index).tpl : null; 486 }, 487 GetNavigateUrl: function (index) { 488 return this.IsValidItemIndex(index) ? this.GetItem(index).u : null; 489 }, 490 GetImageSrc: function (index) { 491 return this.IsValidItemIndex(index) ? this.GetItem(index).s : null; 492 }, 493 GetItemAlternateText: function (index) { 494 if(this.IsValidItemIndex(index)) { 495 var item = this.GetItem(index); 496 return item.t || item.at || ""; 497 } 498 return ""; 499 }, 500 GetItem: function (index) { 501 return this.GetImageSlider().GetItemInternal(this.GetRtlIndex(index)); 502 }, 503 GetItemCount: function () { 504 return this.GetImageSlider().GetItemCount(); 505 }, 506 SetActiveItemIndex: function (index, preventAnimation) { 507 if(!this.IsEnabled() || !this.IsValidItemIndex(index) || index == this.GetActiveItemIndex()) 508 return; 509 this.prevItemIndex = this.GetActiveItemIndex(); 510 this.activeItemIndex = index;
511 this.SetActiveItemIndexInternal(index, preventAnimation); 512 this.EnsureShownItemsLoaded(); 513 }, 514 SetActiveItemIndexInternal: function (index, preventAnimation) { 515 this.UpdateNavigationButtonsState(); 516 }, 517 GetActiveItemIndex: function () { 518 return this.activeItemIndex; 519 }, 520 GetPrevItemIndex: function () { 521 return this.prevItemIndex; 522 }, 523 EnsureShownItemsLoaded: function() { 524 this.GetImageSlider().EnsureShownItemsLoaded(); 525 }, 526 GetItemElement: function (index) { 527 return this.IsValidItemIndex(index) ? this.GetItemElementsManager().GetCollection()[index] : null; 528 }, 529 GetImageElement: function (index) { 530 return ASPx.GetChildByTagName(this.GetItemElement(index), "IMG"); 531 }, 532 GetCanvasElement: function (index) { 533 return ASPx.GetChildByTagName(this.GetItemElement(index), "CANVAS"); 534 }, 535 GetHyperLinkElement: function (index) { 536 return ASPx.GetChildByClassName(this.GetItemElement(index), CssClassesConstants.ItemHyperLinkCssClassName); 537 }, 538 GetImageContainerElement: function (index) { 539 return this.GetHyperLinkElement(index) || this.GetItemElement(index); 540 }, 541 GetItemElementSize: function (clear) { 542 return this.IsHorizontalNavigation() ? this.GetItemElementWidth(clear) : this.GetItemElementHeight(clear); 543 }, 544 GetItemElementWidth: function (clear) { 545 return clear ? this.clearItemWidth : this.fullItemWidth; 546 }, 547 GetItemElementHeight: function (clear) { 548 return clear ? this.clearItemHeight : this.fullItemHeight; 549 }, 550 GetSlidePanelElement: function () { 551 return this.slidePanelElement; 552 }, 553 GetItemsContainer: function () { 554 return null; 555 }, 556 StopPlayingWhenPaging: function () { 557 this.GetImageSlider().StopPlayingWhenPaging(); 558 }, 559 CanCreateNavigationButtons: function () { 560 return true; 561 }, 562 CreateNavigationButtons: function () { 563 if(this.GetNavigationBtnsVisibilityMode() == ElementVisibilityModeEnum.None) 564 return null; 565 return new NavigationButtons(this); 566 }, 567 GetNavigationBtnsVisibilityMode: function () { 568 return this.GetImageSlider().navBtnsVbl; 569 }, 570 UpdateNavigationButtonsState: function () { 571 return false; 572 }, 573 GetButtonsContainer: function () { 574 return null; 575 }, 576 GetPrevButtonHtml: function () { 577 return ""; 578 }, 579 GetNextButtonHtml: function () { 580 return ""; 581 }, 582 CanHandleButtons: function () { 583 return !this.IsExecutedGesture(); 584 }, 585 IsExecutedGesture: function () { 586 return ASPx.GesturesHelper.IsExecutedGesture(); 587 }, 588 IsEnablePagingByClick: function () { 589 return false; 590 }, 591 SetEnablePrevButton: function (enabled) { 592 if(this.navigationButtons) 593 this.navigationButtons.SetEnablePrevButton(enabled); 594 }, 595 SetEnableNextButton: function (enabled) { 596 if(this.navigationButtons) 597 this.navigationButtons.SetEnableNextButton(enabled); 598 }, 599 SetVisibilityButtons: function (visible) { 600 if(this.navigationButtons) 601 this.navigationButtons.SetVisibilityButtons(visible); 602 }, 603 PerformBackward: function () { 604 }, 605 PerformForward: function () { 606 }, 607 PerformRollBack: function () { 608 }, 609 GetEnableLoopNavigation: function () { 610 return false; 611 }, 612 GetImageLoadMode: function () { 613 return this.GetImageSlider().imageLoadMode; 614 }, 615 UpdateItemElementsIfRequired: function () { 616 this.GetItemElementsManager().UpdateHierarchyIfRequired(); 617 }, 618 UpdateItemElementsAfterDelayIfRequired: function () { 619 this.GetItemElementsManager().UpdateHierarchyAfterDelayIfRequired(); 620 }, 621 IsNeedCreateHyperLink: function () { 622 return true; 623 }, 624 GetTarget: function () { 625 return this.GetImageSlider().target; 626 }, 627 CreateTemplates: function () { 628 this.ForEachItem(function (i) { 629 this.CreateTemplate(i); 630 }); 631 }, 632 CreateTemplate: function(index) { 633 var template = this.GetTemplate(index); 634 if(template) { 635 var itemElement = this.GetItemElement(index); 636 if(!itemElement) 637 return; 638 var child = itemElement.firstChild ? itemElement.firstChild.cloneNode(true) : null; 639 itemElement.innerHTML = template; 640 if(child) 641 itemElement.appendChild(child); 642 ASPx.ImageControlUtils.RemoveLoadingGif(itemElement); 643 } 644 }, 645 CreateControlHierarchy: function () { 646 this.CreateControlHierarchyInternal(); 647 if(this.CanCreateNavigationButtons()) 648 this.navigationButtons = this.CreateNavigationButtons(); 649 this.GetItemElementsManager().CreateItemsIfRequired(); 650 }, 651 CreateControlHierarchyInternal: function () { 652 }, 653 CreateItemElements: function () { 654 this.ForEachItem(function (i) { 655 this.GetItemsContainer().appendChild(this.CreateItemElement(i)); 656 }); 657 }, 658 CreateItemElement: function (index) { 659 var itemElement = this.CreateDiv(); 660 if(!this.GetTemplate(index)) { 661 var hyperLinkElement = this.CreateHyperLinkElement(index); 662 if(hyperLinkElement) 663 itemElement.appendChild(hyperLinkElement); 664 } 665 return itemElement; 666 }, 667 CreateImageElement: function (index) { 668 var image = new Image(); 669 ASPx.SetElementDisplay(image, false); 670 this.AttachLoadEvent(image); 671 this.GetImageContainerElement(index).appendChild(image); 672 image.dxIndex = index; 673 image.dxImageSlider = this; 674 image.src = this.GetImageSrc(index); 675 image.alt = this.IsAccessibilityCompliant() ? this.GetItemAlternateText(index) : ""; 676 return image; 677 }, 678 CreateHyperLinkElement: function (index) { 679 var url = this.GetNavigateUrl(index); 680 if(!this.IsNeedCreateHyperLink() || !url) 681 return null; 682 var element = document.createElement("A"); 683 element.target = this.GetTarget();
684 element.className = CssClassesConstants.ItemHyperLinkCssClassName; 685 element.href = url; 686 return element; 687 }, 688 PrepareControlHierarchy: function () { 689 this.GetItemElementsManager().PrepareItemsIfRequired(); 690 }, 691 PrepareItemElements: function () { 692 this.ForEachItem(function (i) { 693 this.PrepareItemElement(i); 694 }); 695 }, 696 PrepareItemElement: function (index) { 697 var itemElement = this.GetItemElement(index); 698 ASPx.SetStyles(itemElement, { 699 className: this.GetItemElementCssClass(), 700 cssText: this.GetItemElementStyle() 701 }); 702 if(this.GetTemplate(index)) 703 ASPx.ImageControlUtils.RemoveLoadingGif(itemElement); 704 }, 705 AdjustControl: function () { 706 ControlBase.prototype.AdjustControl.call(this); 707 if(this.navigationButtons) 708 this.navigationButtons.AdjustControl(); 709 this.AdjustControlInternal(); 710 this.SetActiveItemIndexInternal(this.GetActiveItemIndex(), true); 711 }, 712 AdjustControlInternal: function () { 713 this.AdjustItemElements(); 714 }, 715 AdjustItemElements: function () { 716 this.GetItemElementsManager().AdjustItemsIfRequired(); 717 }, 718 CalculateSize: function () { 719 var fakeElement = this.CreateDiv(); 720 ASPx.SetStyles(fakeElement, { 721 className: this.GetItemElementCssClass(), 722 cssText: this.GetItemElementStyle() 723 }); 724 this.CalculateItemElementSize(fakeElement); 725 ASPx.RemoveElement(fakeElement); 726 }, 727 CalculateItemElementSize: function (element) { 728 }, 729 AdjustItemElement: function (index) { 730 ASPx.SetStyles(this.GetItemElement(index), { 731 width: this.GetItemElementWidth(true), 732 height: this.GetItemElementHeight(true) 733 }); 734 }, 735 AdjustImageElement: function (index) { 736 if(this.GetTemplate(index) || !this.GetImageSrc(index)) 737 return; 738 var image = this.GetImageElement(index); 739 if(!image) 740 image = this.CreateImageElement(index); 741 else if(ASPx.ImageControlUtils.IsImageLoaded(image)) 742 this.ResizeImage(image, index); 743 }, 744 UpdateItemElement: function(index) { 745 if(this.GetImageContainerElement(index)) 746 this.AdjustImageElement(index); 747 if(this.GetImageSlider().HasTemplates()) 748 this.CreateTemplate(index); 749 }, 750 GetItemElementCssClass: function () { 751 return ""; 752 }, 753 GetItemElementStyle: function () { 754 return ""; 755 }, 756 ResizeImage: function (image, index) { 757 ASPx.ImageControlUtils.ResizeImage(image, { 758 width: this.GetItemElementWidth(true), 759 height: this.GetItemElementHeight(true), 760 sizeMode: this.GetImageSizeMode(), 761 rtl: this.IsRtl(true), 762 onEndResize: function(element, isCanvas) { 763 if(isCanvas) 764 this.PrepareCanvasElement(index); 765 }.aspxBind(this), 766 canUseCanvas: !this.IsAccessibilityCompliant() 767 }); 768 }, 769 PrepareCanvasElement: function (index) { 770 }, 771 GetImageSizeMode: function () { 772 return this.GetImageSlider().imageSizeMode; 773 }, 774 GetSwipeGestureElement: function () { 775 return this.GetSlidePanelElement(); 776 }, 777 CanCreateSwipeGestureHandler: function () { 778 return false; 779 }, 780 CreateSwipeGestureHandler: function () { 781 ASPx.GesturesHelper.AddSwipeSlideGestureHandler( 782 this.GetClientControlName() + this.GetUniqueId(), 783 function () { return this.GetSwipeGestureElement(); }.aspxBind(this), 784 this.IsHorizontalNavigation() ? ASPx.AnimationHelper.SLIDE_HORIZONTAL_DIRECTION : ASPx.AnimationHelper.SLIDE_VERTICAL_DIRECTION, 785 function (evt) { return this.CanHandleSwipeGesture(evt); }.aspxBind(this), 786 function () { this.PerformBackward(); }.aspxBind(this), 787 function () { this.PerformForward(); }.aspxBind(this), 788 function () { this.PerformRollBack(); }.aspxBind(this) 789 ); 790 }, 791 CanHandleSwipeGesture: function (evt) { 792 return !!ASPx.GetIsParent(this.GetSwipeGestureElement(), ASPx.Evt.GetEventSource(evt)); 793 }, 794 InitializeHandlers: function () { 795 if(this.GetImageSlider().allowMouseWheel && !(ASPx.Browser.Edge && ASPx.Browser.MSTouchUI)) 796 ASPx.Evt.AttachEventToElement(this.GetItemsContainer(), ASPx.Evt.GetMouseWheelEventName(), function (evt) { this.OnMouseWheel(evt); }.aspxBind(this)); 797 if(this.CanCreateSwipeGestureHandler() && this.GetImageSlider().enablePagingGestures) 798 this.CreateSwipeGestureHandler(); 799 }, 800 AttachLoadEvent: function (image) { 801 ASPx.Evt.AttachEventToElement(image, "load", _onImageLoad); 802 }, 803 DetachLoadEvents: function (image) { 804 ASPx.Evt.DetachEventFromElement(image, "load", _onImageLoad); 805 }, 806 OnMouseWheel: function (evt) { 807 if(!this.IsFocused()) 808 return; 809 if(ASPx.Evt.GetWheelDelta(evt) > 0) 810 this.PerformBackward(); 811 else 812 this.PerformForward(); 813 return ASPx.Evt.PreventEvent(evt); 814 }, 815 OnImageLoad: function (image) { 816 this.InitializeImage(image); 817 this.ResizeImage(image, image.dxIndex); 818 ASPx.ImageControlUtils.RemoveLoadingGif(this.GetItemElement(image.dxIndex)); 819 }, 820 InitializeImage: function (image) {
821 if(image.naturalWidth && image.naturalHeight) 822 return; 823 image.naturalWidth = image.width; 824 image.naturalHeight = image.height; 825 }, 826 GetElementTransformPosition: function (element) { 827 return ASPx.AnimationUtils.GetTransformValue(element, !this.IsHorizontalNavigation()); 828 }, 829 SetElementTransformPosition: function (element, position) { 830 ASPx.AnimationUtils.SetTransformValue(element, position, !this.IsHorizontalNavigation()); 831 }, 832 GetWidth: function () { 833 return 0; 834 }, 835 GetHeight: function () { 836 return 0; 837 }, 838 IsFocused: function () { 839 return this.GetImageSlider().IsFocused(); 840 }, 841 CreateDocumentFragment: function () { 842 var fragment = null; 843 if(document.createDocumentFragment) 844 fragment = document.createDocumentFragment(); 845 return fragment; 846 }, 847 IsValidItemIndex: function (index) { 848 if(index >= 0 && index < this.GetItemCount()) 849 return true; 850 return false; 851 } 852 }); 853 function _onImageLoad(evt) { 854 var image = evt.srcElement || this; 855 if(!image.dxImageSlider) 856 return; 857 var imageSlider = image.dxImageSlider; 858 imageSlider.DetachLoadEvents(image); 859 if(!image.parentNode) return; 860 imageSlider.OnImageLoad(image); 861 } 862 var ImageAreaStrategy = ASPx.CreateClass(ItemsOwnerBase, { 863 constructor: function (imageSlider) { 864 this.currentItemTextElementOpacity = 0; 865 this.defaultItemTextElementOpacity = 0; 866 this.touchDeviceElementsVisible = false; 867 this.imageAreaStyleSize = { width: "", height: "" }; 868 this.imageAreaElement = null; 869 this.slideShowButton = null; 870 this.overlayLinkElement = null; 871 this.overlayImageElement = null; 872 this.constructor.prototype.constructor.call(this, imageSlider); 873 }, 874 Initialize: function () { 875 ItemsOwnerBase.prototype.Initialize.call(this); 876 if(this.GetItemTextVisibilityMode() == ElementVisibilityModeEnum.Faded) 877 this.defaultItemTextElementOpacity = FadedDefaultOpacity; 878 else if(ASPx.Browser.Firefox) 879 this.defaultItemTextElementOpacity = 0.01; 880 this.currentItemTextElementOpacity = this.defaultItemTextElementOpacity; 881 }, 882 GetUniqueId: function () { 883 return "_ia_"; 884 }, 885 CreateItemElementsManager: function () { 886 return new ImageAreaItemElementsManager(this); 887 }, 888 GetTextTemplate: function (index) { 889 return this.IsValidItemIndex(index) ? this.GetItem(index).ttpl : null; 890 }, 891 GetItemText: function (index) { 892 return this.IsValidItemIndex(index) ? this.GetItem(index).t : null; 893 }, 894 SetSlideShowButtonState: function (play) { 895 if(this.slideShowButton) 896 this.slideShowButton.SetButtonState(play); 897 }, 898 IsEnablePagingByClick: function () { 899 return this.GetImageSlider().enablePagingByClick; 900 }, 901 GetButtonsContainer: function () { 902 return this.GetImageSlider().GetPassePartoutElement(); 903 }, 904 GetPrevButtonHtml: function () { 905 return this.GetImageSlider().pbh; 906 }, 907 GetNextButtonHtml: function () { 908 return this.GetImageSlider().nbh; 909 }, 910 UpdateNavigationButtonsState: function () { 911 if(this.navigationButtons) { 912 if(this.GetItemCount() == 1) 913 this.SetVisibilityButtons(false); 914 else { 915 var currentItemIndex = this.GetActiveItemIndex(); 916 this.SetEnablePrevButton(currentItemIndex != 0); 917 this.SetEnableNextButton(currentItemIndex != this.GetItemCount() - 1); 918 } 919 } 920 return false; 921 }, 922 PerformBackward: function () { 923 this.StopPlayingWhenPaging(); 924 var index = this.GetActiveItemIndex(); 925 index--; 926 if(index < 0 && this.GetEnableLoopNavigation()) 927 index = this.GetItemCount() - 1; 928 this.GetImageSlider().SetActiveItemIndexInternal(index); 929 }, 930 PerformForward: function () { 931 this.StopPlayingWhenPaging(); 932 var index = this.GetActiveItemIndex(); 933 index++; 934 if(index == this.GetItemCount() && this.GetEnableLoopNavigation()) 935 index = 0; 936 this.GetImageSlider().SetActiveItemIndexInternal(index); 937 }, 938 PerformRollBack: function () {
939 this.SetActiveItemIndexInternal(this.GetActiveItemIndex(), false); 940 }, 941 CreateControlHierarchy: function () { 942 ItemsOwnerBase.prototype.CreateControlHierarchy.call(this); 943 this.CreateOverlayElements(); 944 }, 945 CreateTemplate: function(index) { 946 ItemsOwnerBase.prototype.CreateTemplate.call(this, index); 947 var template = this.GetTextTemplate(index); 948 if(template) { 949 var itemTextElement = this.GetItemTextElement(index); 950 if(itemTextElement) 951 itemTextElement.innerHTML = template; 952 } 953 }, 954 CreateControlHierarchyInternal: function () { 955 ItemsOwnerBase.prototype.CreateControlHierarchyInternal.call(this); 956 this.CreateImageAreaElement(); 957 this.CreateSlideShowButton(); 958 }, 959 CreateImageAreaElement: function () { 960 this.imageAreaElement = document.createElement("DIV"); 961 this.GetImageSlider().GetPassePartoutElement().appendChild(this.imageAreaElement); 962 }, 963 CreateSlideShowButton: function () { 964 if(this.GetImageSlider().playPauseBtnVbl != ElementVisibilityModeEnum.None) 965 this.slideShowButton = new SlideShowButton(this); 966 }, 967 CreateOverlayElements: function () { 968 var itemsContainer = this.GetItemsContainer(); 969 if(!itemsContainer) 970 return; 971 if(this.GetImageSlider().HasNavigateUrls()) { 972 this.overlayLinkElement = document.createElement("A"); 973 itemsContainer.insertBefore(this.overlayLinkElement, itemsContainer.firstChild); 974 this.overlayLinkElement.className = CssClassesConstants.OverlayElementCssClass; 975 this.overlayLinkElement.target = this.GetTarget(); 976 } 977 this.overlayImageElement = document.createElement("IMG"); 978 this.overlayImageElement.src = ASPx.EmptyImageUrl; 979 this.overlayImageElement.alt = ""; 980 if(this.overlayLinkElement) 981 this.overlayLinkElement.appendChild(this.overlayImageElement); 982 else { 983 this.overlayImageElement.className = CssClassesConstants.OverlayElementCssClass; 984 itemsContainer.insertBefore(this.overlayImageElement, itemsContainer.firstChild); 985 } 986 }, 987 UpdateOverlayParameters: function () { 988 var activeItemIndex = this.GetActiveItemIndex(); 989 var currentItem = this.GetItem(activeItemIndex); 990 if(this.overlayLinkElement) { 991 if(!currentItem.u) 992 this.overlayLinkElement.removeAttribute("href"); 993 else if(this.overlayLinkElement.href != currentItem.u) 994 this.overlayLinkElement.href = currentItem.u; 995 } 996 if(this.overlayImageElement) { 997 if(currentItem.s) 998 this.overlayImageElement.src = currentItem.s; 999 if(currentItem.tpl) 1000 this.overlayImageElement.style.display = "none"; 1001 else { 1002 this.overlayImageElement.style.display = ""; 1003 this.overlayImageElement.alt = this.IsAccessibilityCompliant() ? this.GetItemAlternateText(activeItemIndex) : ""; 1004 } 1005 } 1006 }, 1007 PrepareControlHierarchy: function () { 1008 ItemsOwnerBase.prototype.PrepareControlHierarchy.call(this); 1009 this.UpdateOverlayParameters(); 1010 var imageAreaElement = this.GetImageAreaElement(); 1011 ASPx.SetStyles(imageAreaElement, { 1012 className: this.GetImageSlider().imgAreaCssCl, 1013 cssText: this.GetImageSlider().imgAreaStyle 1014 }); 1015 this.imageAreaStyleSize = { 1016 width: imageAreaElement.style.width, 1017 height: imageAreaElement.style.height 1018 }; 1019 this.GetItemsContainer().style.zIndex = "0"; 1020 }, 1021 AdjustControl: function (width, height) { 1022 this.AdjustImageAreaElement(width, height); 1023 ItemsOwnerBase.prototype.AdjustControl.call(this); 1024 }, 1025 AdjustImageAreaElement: function (width, height) { 1026 var imageAreaElement = this.GetImageAreaElement(); 1027 if(!imageAreaElement.style.width) { 1028 ASPx.SetStyles(imageAreaElement, { width: width }); 1029 if(imageAreaElement.offsetWidth > width) 1030 ASPx.SetStyles(imageAreaElement, { width: width - (imageAreaElement.offsetWidth - width) }); 1031 } 1032 if(!imageAreaElement.style.height) { 1033 ASPx.SetStyles(imageAreaElement, { height: height }); 1034 if(imageAreaElement.offsetHeight > height) 1035 ASPx.SetStyles(imageAreaElement, { height: height - (imageAreaElement.offsetHeight - height) }); 1036 } 1037 if(imageAreaElement.offsetHeight < height) 1038 ASPx.SetStyles(imageAreaElement, { top: (height - imageAreaElement.offsetHeight) / 2 }); 1039 }, 1040 ResetControlStyle: function () { 1041 var imageAreaElement = this.GetImageAreaElement(); 1042 ASPx.SetStyles(imageAreaElement, this.imageAreaStyleSize); 1043 ASPx.SetStyles(imageAreaElement, { top: 0 }); 1044 }, 1045 IsNeedCreateHyperLink: function () { 1046 return false; 1047 }, 1048 SetActiveItemIndexInternal: function (index, preventAnimation) { 1049 ItemsOwnerBase.prototype.SetActiveItemIndexInternal.call(this, index, preventAnimation); 1050 this.UpdateOverlayParameters(); 1051 }, 1052 CalculateItemElementSize: function (fakeElement) { 1053 var imageArea = this.GetImageAreaElement(); 1054 imageArea.appendChild(fakeElement); 1055 this.fullItemWidth = SizeUtils.GetClientWidth(imageArea, true); 1056 this.fullItemHeight = SizeUtils.GetClientHeight(imageArea, true); 1057 ASPx.SetStyles(fakeElement, { 1058 width: this.fullItemWidth, 1059 height: this.fullItemHeight 1060 }); 1061 this.clearItemWidth = this.fullItemWidth - (SizeUtils.GetClientWidth(fakeElement) - this.fullItemWidth);
1062 this.clearItemHeight = this.fullItemHeight - (SizeUtils.GetClientHeight(fakeElement) - this.fullItemHeight); 1063 }, 1064 CreateItemElement: function (index) { 1065 var itemElement = ItemsOwnerBase.prototype.CreateItemElement.call(this, index); 1066 var textElement = this.CreateItemTextElement(index); 1067 if(!textElement) 1068 return itemElement; 1069 itemElement.appendChild(textElement); 1070 return itemElement; 1071 }, 1072 CreateItemTextElement: function (index) { 1073 var text = this.GetItemText(index); 1074 var textTemplate = this.GetTextTemplate(index); 1075 if(this.GetItemTextVisibilityMode() == ElementVisibilityModeEnum.None || (!text && !textTemplate)) 1076 return null; 1077 var itemTextElement = this.CreateDiv(); 1078 if(!textTemplate) 1079 itemTextElement.innerHTML = text; 1080 ASPx.SetStyles(itemTextElement, { className: this.GetImageSlider().itemTxtCssCl }); 1081 return itemTextElement; 1082 }, 1083 PrepareItemTextElement: function (index) { 1084 var itemTextElement = this.GetItemTextElement(index); 1085 if(itemTextElement) { 1086 var style = { cssText: this.GetImageSlider().itemTxtStyle, zIndex: 2, className: itemTextElement.className + " dx-wbv" }; 1087 if(this.GetItemTextVisibilityMode() != ElementVisibilityModeEnum.Always) 1088 style.opacity = this.currentItemTextElementOpacity; 1089 ASPx.SetStyles(itemTextElement, style); 1090 } 1091 }, 1092 PrepareItemElement: function (index) { 1093 ItemsOwnerBase.prototype.PrepareItemElement.call(this, index); 1094 this.PrepareItemTextElement(index); 1095 }, 1096 UpdateItemElement: function(index) { 1097 var textElement = this.CreateItemTextElement(index); 1098 var imageContainer = this.GetImageContainerElement(index); 1099 if(textElement && imageContainer) { 1100 imageContainer.appendChild(textElement); 1101 this.PrepareItemTextElement(index); 1102 } 1103 ItemsOwnerBase.prototype.UpdateItemElement.call(this, index); 1104 if(this.GetActiveItemIndex() == index) 1105 this.UpdateOverlayParameters(); 1106 }, 1107 GetItemElementCssClass: function () { 1108 return this.GetImageSlider().itemCssCl; 1109 }, 1110 GetItemElementStyle: function () { 1111 return this.GetImageSlider().itemStyle; 1112 }, 1113 PrepareCanvasElement: function (index) { 1114 var canvas = this.GetCanvasElement(index); 1115 canvas.style.position = "absolute"; 1116 canvas.style.zIndex = "0"; 1117 }, 1118 GetItemTextElement: function (index) { 1119 var itemElement = this.GetItemElement(index); 1120 return itemElement ? ASPx.GetChildByClassName(itemElement, CssClasse
1120sConstants.TextAreaCssClassName) : null; 1121 }, 1122 GetImageAreaElement: function () { 1123 return this.imageAreaElement; 1124 }, 1125 GetItemTextVisibilityMode: function () { 1126 return this.GetImageSlider().itemTxtVbl; 1127 }, 1128 GetNavigationBarStrategy: function () { 1129 return this.GetImageSlider().GetNavigationBarStrategy(); 1130 }, 1131 HasMouseOverForTouchDevice: function () { 1132 if(!ASPx.Browser.TouchUI) 1133 return false; 1134 return this.HasMouseOverImageAreaNavigationButtons() || this.HasMouseOverNavigationBarNavigationButtons() || this.HasMouseOverTextArea() || this.HasMouseOverSlideShowButton(); 1135 }, 1136 HasMouseOverImageAreaNavigationButtons: function () { 1137 return this.IsMouseOverOrFaded(this.GetNavigationBtnsVisibilityMode()); 1138 }, 1139 HasMouseOverNavigationBarNavigationButtons: function () { 1140 var navigationBar = this.GetNavigationBarStrategy(); 1141 if(!navigationBar) 1142 return false; 1143 return this.IsMouseOverOrFaded(navigationBar.GetNavigationBtnsVisibilityMode()); 1144 }, 1145 HasMouseOverTextArea: function () { 1146 return this.IsMouseOverOrFaded(this.GetItemTextVisibilityMode()); 1147 }, 1148 HasMouseOverSlideShowButton: function () { 1149 return this.IsMouseOverOrFaded(this.GetImageSlider().playPauseBtnVbl); 1150 }, 1151 IsMouseOverOrFaded: function (visibility) { 1152 return visibility == ElementVisibilityModeEnum.Faded || visibility == ElementVisibilityModeEnum.OnMouseOver; 1153 }, 1154 InitializeHandlers: function () { 1155 ItemsOwnerBase.prototype.InitializeHandlers.call(this); 1156 var imageSlider = this.GetImageSlider(); 1157 imageSlider.StrategiesCreated.AddHandler(function () { 1158 if(this.CanHandleClickEvent()) 1159 ASPx.Evt.AttachEventToElement(this.GetImageAreaElement(), ASPx.Browser.TouchUI ? ASPx.TouchUIHelper.touchMouseUpEventName : "click", function (evt) { this.OnImageAreaClick(evt); }.aspxBind(this)); 1160 }.aspxBind(this)); 1161 if(!ASPx.Browser.TouchUI && this.IsMouseOverOrFaded(this.GetItemTextVisibilityMode())) 1162 MouseEnterHelper.AddHandler( 1163 imageSlider.GetPassePartoutElement(), 1164 function () { this.AppearTextElements(); }.aspxBind(this), 1165 function () { this.DisappearTextElements(); }.aspxBind(this) 1166 ); 1167 }, 1168 CanHandleClickEvent: function () { 1169 var imageSlider = this.GetImageSlider(); 1170 return !imageSlider.ItemClick.IsEmpty() || imageSlider.HasNavigateUrls() || this.HasMouseOverForTouchDevice(); 1171 }, 1172 OnImageAreaClick: function (evt) { 1173 this.GetImageSlider().RaiseItemClick(); 1174 if(!this.HasMouseOverForTouchDevice()) 1175 return; 1176 if(this.touchDeviceElementsVisible) { 1177 if(this.HasMouseOverTextArea()) 1178 this.DisappearTextElements(); 1179 if(this.HasMouseOverImageAreaNavigationButtons()) 1180 this.navigationButtons.Disappear(); 1181 if(this.HasMouseOverNavigationBarNavigationButtons()) 1182 this.GetNavigationBarStrategy().navigationButtons.Disappear(); 1183 if(this.HasMouseOverSlideShowButton()) 1184 this.slideShowButton.Disappear(); 1185 } 1186 else { 1187 if(this.HasMouseOverTextArea()) 1188 this.AppearTextElements(); 1189 if(this.HasMouseOverImageAreaNavigationButtons()) 1190 this.navigationButtons.Appear(); 1191 if(this.HasMouseOverNavigationBarNavigationButtons()) 1192 this.GetNavigationBarStrategy().navigationButtons.Appear(); 1193 if(this.HasMouseOverSlideShowButton()) 1194 this.slideShowButton.Appear(); 1195 } 1196 this.touchDeviceElementsVisible = !this.touchDeviceElementsVisible; 1197 }, 1198 AppearTextElements: function () { 1199 this.FadeItemTextElements(1); 1200 }, 1201 DisappearTextElements: function () { 1202 this.FadeItemTextElements(this.defaultItemTextElementOpacity); 1203 }, 1204 FadeItemTextElements: function (value) { 1205 this.currentItemTextElementOpacity = value; 1206 var activeItemIndex = this.GetActiveItemIndex(); 1207 this.ForEachItem(function (i) { 1208 var preventAnimation = true; 1209 if(i == activeItemIndex && this.GetAnimationType() != AnimationTypeEnum.None) 1210 preventAnimation = false; 1211 this.FadeItemTextElement(i, preventAnimation); 1212 }); 1213 }, 1214 FadeItemTextElement: function (index, preventAnimation) { 1215 var textElement = this.GetItemTextElement(index); 1216 if(!textElement) 1217 return; 1218 if(preventAnimation) 1219 ASPx.SetStyles(textElement, { opacity: this.currentItemTextElementOpacity }); 1220 else 1221 ASPx.AnimationHelper.fadeTo(textElement, { to: this.currentItemTextElementOpacity }); 1222 }, 1223 GetWidth: function () { 1224 return SizeUtils.GetClientWidth(this.GetImageAreaElement()); 1225 }, 1226 GetHeight: function () { 1227 return SizeUtils.GetClientHeight(this.GetImageAreaElement()); 1228 } 1229 }); 1230 var SlideImageAreaStrategy = ASPx.CreateClass(ImageAreaStrategy, { 1231 constructor: function (imageSlider) { 1232 this.constructor.prototype.constructor.call(this, imageSlider); 1233 }, 1234 SetActiveItemIndexInternal: function (index, preventAnimation) { 1235 ImageAreaStrategy.prototype.SetActiveItemIndexInternal.call(this, index, preventAnimation); 1236 this.UpdateItemElementsAfterDelayIfRequired(); 1237 var position = this.GetItemElementPosition(index); 1238 if(preventAnimation) { 1239 this.SetElementTransformPosition(this.GetSlidePanelElement(), position); 1240 this.UpdateItemElementsIfRequired(); 1241 } 1242 else 1243 ASPx.AnimationHelper.slideTo(this.GetSlidePanelElement(), { 1244 to: position, duration: this.GetImageSlider().animationDuration, 1245 direction: this.IsHorizontalNavigation() ? ASPx.AnimationHelper.SLIDE_HORIZONTAL_DIRECTION : ASPx.AnimationHelper.SLIDE_VERTICAL_DIRECTION, 1246 onComplete: function () { this.UpdateItemElementsIfRequired(); }.aspxBind(this) 1247 });
1248 }, 1249 PerformRollBack: function () { 1250 this.SetActiveItemIndexInternal(this.GetActiveItemIndex(), false); 1251 }, 1252 CreateControlHierarchyInternal: function () { 1253 ImageAreaStrategy.prototype.CreateControlHierarchyInternal.call(this); 1254 this.slidePanelElement = this.CreateDiv(); 1255 this.GetImageAreaElement().appendChild(this.slidePanelElement); 1256 }, 1257 PrepareControlHierarchy: function () { 1258 ImageAreaStrategy.prototype.PrepareControlHierarchy.call(this); 1259 var slideElement = this.GetSlidePanelElement(); 1260 slideElement.className = CssClassesConstants.ImageAreaSlidePanelCssClassName; 1261 this.PatchElementForMSTouch(slideElement); 1262 }, 1263 AdjustControlInternal: function () { 1264 ImageAreaStrategy.prototype.AdjustControlInternal.call(this); 1265 var horizontal = this.IsHorizontalNavigation(); 1266 var width = horizontal ? this.GetItemCount() * this.GetItemElementWidth() : this.GetItemElementWidth(); 1267 var height = !horizontal ? this.GetItemCount() * this.GetItemElementHeight() : this.GetItemElementHeight(); 1268 ASPx.SetStyles(this.GetSlidePanelElement(), { 1269 width: width, 1270 height: height 1271 }); 1272 }, 1273 AdjustItemElement: function (index) { 1274 ImageAreaStrategy.prototype.AdjustItemElement.call(this, index); 1275 var itemElement = this.GetItemElement(index); 1276 var position = this.IsHorizontalNavigation() ? this.GetItemElementWidth() * index : this.GetItemElementHeight() * index; 1277 if(this.IsHorizontalNavigation()) 1278 ASPx.SetStyles(itemElement, { left: position }); 1279 else 1280 ASPx.SetStyles(itemElement, { top: position }); 1281 }, 1282 GetItemsContainer: function () { 1283 return this.GetSlidePanelElement(); 1284 }, 1285 CanCreateSwipeGestureHandler: function () { 1286 return true; 1287 }, 1288 IsEnablePagingByClick: function () { 1289 var imageSlider = this.GetImageSlider(); 1290 return imageSlider.ItemClick.IsEmpty() && !imageSlider.HasNavigateUrls() && ImageAreaStrategy.prototype.IsEnablePagingByClick.call(this); 1291 }, 1292 OnImageAreaClick: function (evt) { 1293 if(this.IsExecutedGesture()) 1294 return ASPx.Evt.PreventEventAndBubble(evt); 1295 else 1296 ImageAreaStrategy.prototype.OnImageAreaClick.call(this, evt); 1297 }, 1298 GetItemElementPosition: function (index) { 1299 return this.IsHorizontalNavigation() ? -(index * this.GetItemElementWidth()) : -(index * this.GetItemElementHeight()); 1300 } 1301 }); 1302 var SlideLoopNavigationImageAreaStrategy = ASPx.CreateClass(SlideImageAreaStrategy, { 1303 constructor: function (imageSlider) { 1304 this.simpleTransition = null; 1305 this.constructor.prototype.constructor.call(this, imageSlider); 1306 }, 1307 CreateItemElementsManager: function () { 1308 return new LoopImageAreaItemElementsManager(this); 1309 }, 1310 GetEnableLoopNavigation: function () { 1311 return true; 1312 }, 1313 StartSlideSimpleTransition: function (from, to, preventAnimation) { 1314 this.UpdateItemsPosition(to - from, preventAnimation); 1315 if(!preventAnimation) { 1316 this.simpleTransition = ASPx.AnimationHelper.createSimpleAnimationTransition({ 1317 duration: this.GetImageSlider().animationDuration, 1318 onUpdate: function (value) { 1319 this.UpdateItemsPosition(value, true); 1320 }.aspxBind(this) 1321 }); 1322 this.simpleTransition.Start(from, to); 1323 } 1324 }, 1325 StopSimpleTransition: function () { 1326 if(this.simpleTransition) { 1327 this.simpleTransition.Cancel(); 1328 this.simpleTransition = null; 1329 } 1330 }, 1331 UpdateItemsPosition: function (value, needApplyPositions) { 1332 this.ForEachItem(function (i) { 1333 var element = this.GetItemElement(i); 1334 if(element) { 1335 element.dxPosition = element.dxPosition + value; 1336 if(needApplyPositions) 1337 this.SetItemPosition(element); 1338 } 1339 }); 1340 }, 1341 OnMouseMoveUpdatePosition: function (position) { 1342 this.StopSimpleTransition(); 1343 var itemSize = this.GetItemElementSize(); 1344 this.ForEachItem(function (i) { 1345 var element = this.GetItemElement(i); 1346 if(element) 1347 element.dxPosition = element.dxPosition + position; 1348 }); 1349 this.ForEachItem(function (i) { 1350 var element = this.GetItemElement(i); 1351 if(!element) 1352 return; 1353 this.SetItemPosition(element); 1354 if(element.dxPosition < 0 && ((element.dxPosition + itemSize) > 0)) { 1355 var index = i + 1; 1356 if(index == this.GetItemCount()) 1357 index = 0; 1358 var nextItem = this.GetItemElement(index); 1359 if(nextItem) { 1360 nextItem.dxPosition = element.dxPosition + itemSize; 1361 this.SetItemPosition(nextItem); 1362 } 1363 } 1364 if(element.dxPosition < itemSize && ((element.dxPosition + itemSize) > itemSize)) { 1365 var index = i - 1; 1366 if(index < 0) 1367 index = this.GetItemCount() - 1; 1368 var nextItem = this.GetItemElement(index); 1369 if(nextItem) { 1370 nextItem.dxPosition = element.dxPosition - itemSize; 1371 this.SetItemPosition(nextItem); 1372 } 1373 } 1374 }); 1375 }, 1376 SetItemPosition: function (itemElement) { 1377 this.SetElementTransformPosition(itemElement, itemElement.dxPosition); 1378 }, 1379 SetActiveItemIndexInternal: function (index, preventAnimation, isRollback) { 1380 ImageAreaStrategy.prototype.SetActiveItemIndexInternal.call(this, index, preventAnimation); 1381 this.StopSimpleTransition(); 1382 this.UpdateItemElementsIfRequired(); 1383 var currentIndex = this.GetPrevItemIndex(); 1384 if(currentIndex == -1 || this.IsRtl() && currentIndex == this.GetItemCount()) 1385 currentIndex = index; 1386 if(!isRollback) { 1387 var isLeft = currentIndex > index; 1388 if(currentIndex == 0 && index == this.GetItemCount() - 1) 1389 isLeft = true; 1390 if(currentIndex == this.GetItemCount() - 1 && index == 0) 1391 isLeft = false; 1392 var prevItem = this.GetItemElement(currentIndex); 1393 var nextIndex = isLeft ? currentIndex - 1 : currentIndex + 1; 1394 for(var i = 1; i < this.GetItemCount() ; i++) { 1395 if(isLeft && nextIndex < 0) 1396 nextIndex = this.GetItemCount() - 1; 1397 else if(nextIndex == this.GetItemCount()) 1398 nextIndex = 0; 1399 var nextItem = this.GetItemElement(nextIndex); 1400 if(nextItem) { 1401 nextItem.dxPosition = (isLeft ? -1 : 1) * (this.GetItemElementSize() * i) + prevItem.dxPosition; 1402 this.SetItemPosition(nextItem); 1403 } 1404 nextIndex = isLeft ? nextIndex - 1 : nextIndex + 1; 1405 } 1406 } 1407 var offset = this.GetItemElement(index).dxPosition; 1408 this.StartSlideSimpleTransition(offset, 0, preventAnimation); 1409 }, 1410 PerformRollBack: function () {
1411 this.SetActiveItemIndexInternal(this.GetActiveItemIndex(), false, true); 1412 }, 1413 CreateControlHierarchyInternal: function () { 1414 ImageAreaStrategy.prototype.CreateControlHierarchyInternal.call(this); 1415 }, 1416 PrepareControlHierarchy: function () { 1417 ImageAreaStrategy.prototype.PrepareControlHierarchy.call(this); 1418 this.PatchElementForMSTouch(this.GetImageAreaElement()); 1419 }, 1420 AdjustControlInternal: function () { 1421 ImageAreaStrategy.prototype.AdjustControlInternal.call(this); 1422 }, 1423 AdjustItemElement: function (index) { 1424 ImageAreaStrategy.prototype.AdjustItemElement.call(this, index); 1425 var itemElement = this.GetItemElement(index); 1426 itemElement.dxPosition = this.IsHorizontalNavigation() ? this.GetItemElementWidth() * index : this.GetItemElementHeight() * index; 1427 this.SetItemPosition(itemElement); 1428 }, 1429 CreateSwipeGestureHandler: function () { 1430 ASPx.GesturesHelper.AddSwipeSlideGestureHandler( 1431 this.GetClientControlName() + this.GetUniqueId(), 1432 function () { return this.GetSwipeGestureElement(); }.aspxBind(this), 1433 this.IsHorizontalNavigation() ? ASPx.AnimationHelper.SLIDE_HORIZONTAL_DIRECTION : ASPx.AnimationHelper.SLIDE_VERTICAL_DIRECTION, 1434 function (evt) { return this.CanHandleSwipeGesture(evt); }.aspxBind(this), 1435 function () { this.PerformBackward(); }.aspxBind(this), 1436 function () { this.PerformForward(); }.aspxBind(this), 1437 function () { this.PerformRollBack(); }.aspxBind(this), 1438 function (position) { this.OnMouseMoveUpdatePosition(position); }.aspxBind(this) 1439 ); 1440 }, 1441 UpdateOverlayParameters: function () { 1442 SlideImageAreaStrategy.prototype.UpdateOverlayParameters.call(this); 1443 if(this.overlayImageElement) { 1444 var textElement = this.GetItemTextElement(this.GetActiveItemIndex()); 1445 if(textElement) 1446 this.overlayImageElement.style.height = (this.GetImageAreaElement().offsetHeight - textElement.offsetHeight) + "px"; 1447 } 1448 }, 1449 GetSwipeGestureElement: function () { 1450 return this.GetImageAreaElement(); 1451 }, 1452 GetItemsContainer: function () { 1453 return this.GetImageAreaElement(); 1454 }, 1455 UpdateNavigationButtonsState: function () { 1456 return false; 1457 } 1458 }); 1459 FadeImageAreaStrategy = ASPx.CreateClass(ImageAreaStrategy, { 1460 constructor: function (imageSlider) { 1461 this.constructor.prototype.constructor.call(this, imageSlider); 1462 }, 1463 SetActiveItemIndexInternal: function (index, preventAnimation) { 1464 ImageAreaStrategy.prototype.SetActiveItemIndexInternal.call(this, index, preventAnimation); 1465 this.UpdateItemElementsIfRequired(); 1466 var appearItem = this.GetItemElement(index); 1467 var disapperItem = this.GetItemElement(this.GetPrevItemIndex()); 1468 if(preventAnimation) { 1469 this.SetVisible(appearItem); 1470 if(disapperItem) 1471 this.SetInvisible(disapperItem); 1472 } 1473 else { 1474 var duration = this.GetImageSlider().animationDuration; 1475 ASPx.SetElementDisplay(appearItem, true); 1476 ASPx.AnimationHelper.fadeTo(disapperItem, { 1477 to: 0, duration: duration, 1478 onComplete: function (el) { ASPx.SetElementDisplay(el, false); } 1479 }); 1480 ASPx.AnimationHelper.fadeTo(appearItem, { 1481 to: 1, duration: duration 1482 }); 1483 } 1484 }, 1485 UpdateNavigationButtonsState: function () { 1486 if(!this.GetEnableLoopNavigation()) 1487 return ImageAreaStrategy.prototype.UpdateNavigationButtonsState.call(this); 1488 return false; 1489 }, 1490 AdjustItemElement: function (index) { 1491 ImageAreaStrategy.prototype.AdjustItemElement.call(this, index); 1492 this.SetInvisible(this.GetItemElement(index)); 1493 }, 1494 GetEnableLoopNavigation: function () { 1495 return this.GetImageSlider().enableLoopNavigation; 1496 }, 1497 CanCreateSwipeGestureHandler: function () { 1498 return true; 1499 }, 1500 GetSwipeGestureElement: function () { 1501 return this.GetImageAreaElement(); 1502 }, 1503 OnImageAreaClick: function (evt) { 1504 if(this.IsExecutedGesture()) 1505 return ASPx.Evt.PreventEventAndBubble(evt); 1506 else 1507 ImageAreaStrategy.prototype.OnImageAreaClick.call(this, evt); 1508 }, 1509 CreateSwipeGestureHandler: function () { 1510 ASPx.GesturesHelper.AddSwipeSlideGestureHandler( 1511 this.GetClientControlName() + this.GetUniqueId(), 1512 function () { return this.GetSwipeGestureElement(); }.aspxBind(this), 1513 this.IsHorizontalNavigation() ? ASPx.AnimationHelper.SLIDE_HORIZONTAL_DIRECTION : ASPx.AnimationHelper.SLIDE_VERTICAL_DIRECTION, 1514 function (evt) { return this.CanHandleSwipeGesture(evt); }.aspxBind(this), 1515 function () { this.PerformBackward(); }.aspxBind(this), 1516 function () { this.PerformForward(); }.aspxBind(this), 1517 function () { }, 1518 function () { } 1519 ); 1520 }, 1521 GetItemsContainer: function () { 1522 return this.GetImageAreaElement(); 1523 }, 1524 SetVisible: function (element) { 1525 ASPx.SetStyles(element, { 1526 display: "", 1527 opacity: 1 1528 }); 1529 }, 1530 SetInvisible: function (element) { 1531 ASPx.SetStyles(element, { 1532 display: "none", 1533 opacity: 0 1534 }); 1535 } 1536 }); 1537 var NoneImageAreaStrategy = ASPx.CreateClass(FadeImageAreaStrategy, { 1538 constructor: function (imageSlider) { 1539 this.constructor.prototype.constructor.call(this, imageSlider); 1540 }, 1541 SetActiveItemIndexInternal: function (index, preventAnimation) { 1542 FadeImageAreaStrategy.prototype.SetActiveItemIndexInternal.call(this, index, true); 1543 } 1544 }); 1545 var NavigationBarStrategy = ASPx.CreateClass(ItemsOwnerBase, { 1546 constructor: function (imageSlider) { 1547 this.navigationBarElement = null; 1548 this.slidePanelWrapperElement = null; 1549 this.lastSlideItemsPortionDate = new Date(); 1550 this.slideElementPosition = 0; 1551 this.constructor.prototype.constructor.call(this, imageSlider); 1552 }, 1553 GetUniqueId: function () { 1554 return "_nb_"; 1555 }, 1556 IsHorizontalNavigation: function () { 1557 var position = this.GetPositionMode(); 1558 return position == NavigationBarPositionEnum.Top || position == NavigationBarPositionEnum.Bottom; 1559 }, 1560 IsNeedCreateHyperLink: function () { 1561 return false; 1562 }, 1563 GetLoadingElement: function (index) { 1564 return null; 1565 }, 1566 CreateItemElementsManager: function () { 1567 return new NavigationBarItemElementsManager(this); 1568 }, 1569 GetTemplate: function (index) { 1570 return this.GetItem(index).tmtpl; 1571 }, 1572 GetImageSrc: function (index) { 1573 var thumbnailImageSrc = this.GetItem(index).ts; 1574 if(thumbnailImageSrc) 1575 return thumbnailImageSrc; 1576 return this.GetItem(index).s; 1577 }, 1578 SetActiveItemIndexInternal: function (index, preventAnimation) { 1579 var snapToLeft = this.IsSnapToLeft(index); 1580 var nextIndex = snapToLeft ? index - 1 : index + 1; 1581 if(this.GetImageSlider().extremeItemClickMode == ExtremeItemClickModeEnum.Select || !this.IsValidItemIndex(nextIndex)) 1582 nextIndex = index; 1583 if(!this.IsVisibleItemElement(nextIndex, true)) 1584 this.SlideToItem(nextIndex, snapToLeft, preventAnimation);
1585 this.SetActiveItemVisually(index, preventAnimation); 1586 }, 1587 IsVisibleItemElement: function (index, considerSize) { 1588 var slideWrapperElementSize = this.GetElementSize(this.GetSlidePanelWrapperElement()); 1589 var itemPosition = (this.GetItemElementSize() + this.GetItemSpacing()) * index; 1590 var itemPositionInSlideWrapper = this.ConvertItemPositionToSlideWrapperPosition(itemPosition); 1591 if(considerSize) 1592 return itemPositionInSlideWrapper >= 0 && itemPositionInSlideWrapper + this.GetItemElementSize() <= slideWrapperElementSize; 1593 return itemPositionInSlideWrapper + this.GetItemElementSize() >= 0 && itemPositionInSlideWrapper <= slideWrapperElementSize; 1594 }, 1595 IsSnapToLeft: function (index) { 1596 var slideWrapperElementSize = this.GetElementSize(this.GetSlidePanelWrapperElement()); 1597 var itemPosition = (this.GetItemElementSize() + this.GetItemSpacing()) * index; 1598 var lastItemSize = this.GetItemElementSize() + (index != this.GetItemCount() - 1 ? this.GetItemSpacing() : 0); 1599 return this.ConvertItemPositionToSlideWrapperPosition(itemPosition + lastItemSize) < (slideWrapperElementSize / 2); 1600 }, 1601 ConvertItemPositionToSlideWrapperPosition: function (itemPosition) { 1602 return this.GetElementTransformPosition(this.GetSlidePanelElement()) + itemPosition; 1603 }, 1604 SlideToItem: function (index, snapToLeft, preventAnimation) { 1605 this.UpdateItemElementsAfterDelayIfRequired(); 1606 this.CalculateSlideElementPosition(index, snapToLeft); 1607 this.PerformSlideAction(preventAnimation); 1608 }, 1609 CalculateSlideElementPosition: function (index, snapToLeft) { 1610 var slideWrapperElementSize = this.GetElementSize(this.GetSlidePanelWrapperElement()); 1611 var itemPosition = (this.GetItemElementSize() + this.GetItemSpacing()) * index; 1612 if(snapToLeft) { 1613 this.slideElementPosition = -itemPosition; 1614 var limitPosition = -(this.GetElementSize(this.GetSlidePanelElement()) - this.GetElementSize(this.GetSlidePanelWrapperElement())); 1615 var next = this.GetElementTransformPosition(this.GetSlidePanelElement()) > this.slideElementPosition; 1616 if(this.slideElementPosition < limitPosition || next && Math.abs(-limitPosition + this.slideElementPosition) < this.GetItemElementSize()) 1617 this.slideElementPosition = limitPosition; 1618 } 1619 else { 1620 this.slideElementPosition = slideWrapperElementSize - (itemPosition + this.GetItemElementSize()); 1621 var prev = this.GetElementTransformPosition(this.GetSlidePanelElement()) < this.slideElementPosition; 1622 if(this.slideElementPosition > 0 || prev && this.slideElementPosition > -this.GetItemElementSize()) 1623 this.slideElementPosition = 0; 1624 } 1625 }, 1626 PerformSlideAction: function (preventAnimation) { 1627 this.UpdateNavigationButtonsState(); 1628 if(preventAnimation) { 1629 this.SetElementTransformPosition(this.GetSlidePanelElement(), this.slideElementPosition); 1630 this.PerformSlideActionComplete(); 1631 } 1632 else { 1633 ASPx.AnimationHelper.slideTo(this.GetSlidePanelElement(), { 1634 to: this.slideElementPosition, callBack: function () { this.UpdateItemElementsIfRequired(); }.aspxBind(this), 1635 duration: this.IsSinglePagingMode() ? 300 : ASPx.AnimationConstants.Durations.Default, 1636 direction: this.IsHorizontalNavigation() ? ASPx.AnimationHelper.SLIDE_HORIZONTAL_DIRECTION : ASPx.AnimationHelper.SLIDE_VERTICAL_DIRECTION, 1637 onComplete: function() { this.PerformSlideActionComplete(); }.aspxBind(this) 1638 }); 1639 } 1640 }, 1641 PerformSlideActionComplete: function() { 1642 }, 1643 SetActiveItemVisually: function (index, preventAnimation) { 1644 }, 1645 GetNavigationBtnsVisibilityMode: function () { 1646 return this.GetImageSlider().thumbNavBtnsVbl; 1647 }, 1648 GetButtonsContainer: function () { 1649 return this.GetNavigationBarElement(); 1650 }, 1651 GetPrevButtonHtml: function () { 1652 return this.GetImageSlider().nbpbh; 1653 }, 1654 GetNextButtonHtml: function () { 1655 return this.GetImageSlider().nbnbh; 1656 }, 1657 UpdateNavigationButtonsState: function () { 1658 if(this.navigationButtons) { 1659 var oldButtonsVisibility = this.navigationButtons.GetVisibilityButtons(); 1660 if(this.IsWrapperOverlapsItemCollection()) 1661 this.SetVisibilityButtons(false); 1662 else { 1663 this.SetVisibilityButtons(true); 1664 var minOffset = -(this.GetElementSize(this.GetSlidePanelElement(), false) - this.GetElementSize(this.GetSlidePanelWrapperElement(), true)), maxOffset = 0; 1665 this.SetEnablePrevButton(this.slideElementPosition != maxOffset); 1666 this.SetEnableNextButton(this.slideElementPosition != minOffset); 1667 } 1668 return oldButtonsVisibility != this.navigationButtons.GetVisibilityButtons(); 1669 } 1670 return false; 1671 }, 1672 PerformBackward: function () { 1673 if(this.IsSinglePagingMode()) 1674 this.SlideItemsPortionSingleMode(true); 1675 else 1676 this.SlideItemsPortionPageMode(true); 1677 }, 1678 PerformForward: function () { 1679 if(this.IsSinglePagingMode()) 1680 this.SlideItemsPortionSingleMode(false); 1681 else 1682 this.SlideItemsPortionPageMode(false); 1683 }, 1684 PerformRollBack: function () { 1685 var position = this.GetElementTransformPosition(this.GetSlidePanelElement()); 1686 var slidePanelElementSize = this.GetElementSize(this.GetSlidePanelElement()); 1687 var slidePanelWrapperElementSize = this.GetElementSize(this.GetSlidePanelWrapperElement()); 1688 var minPosition = slidePanelWrapperElementSize - slidePanelElementSize; 1689 if(this.IsWrapperOverlapsItemCollection()) 1690 this.slideElementPosition = (slidePanelWrapperElementSize - slidePanelElementSize) / 2; 1691 else if(position > 0) 1692 this.slideElementPosition = 0; 1693 else if(position < minPosition) 1694 this.slideElementPosition = minPosition; 1695 this.PerformSlideAction(); 1696 }, 1697 SlideItemsPortionPageMode: function (backward) { 1698 var index = backward ? 0 : this.GetItemCount() - 1; 1699 var lastIndex = backward ? this.GetItemCount() - 1 : 0; 1700 var previousInvisibleIndex = index; 1701 while(index != lastIndex) { 1702 if(this.IsVisibleItemElement(index, true)) { 1703 this.SlideToItem(previousInvisibleIndex, !backward); 1704 break; 1705 } 1706 previousInvisibleIndex = index; 1707 index += backward ? 1 : -1; 1708 } 1709 }, 1710 SlideItemsPortionSingleMode: function (backward) { 1711 var index = backward ? 0 : this.GetItemCount() - 1; 1712 var lastIndex = backward ? this.GetItemCount() - 1 : 0; 1713 var previousInvisibleIndex = index; 1714 var considerSize = new Date() - this.lastSlideItemsPortionDate < 350 ? false : true; 1715 while(index != lastIndex) { 1716 if(this.IsVisibleItemElement(index, considerSize)) { 1717 this.SlideToItem(previousInvisibleIndex, backward); 1718 break; 1719 } 1720 previousInvisibleIndex = index; 1721 index += backward ? 1 : -1; 1722 } 1723 this.lastSlideItemsPortionDate = new Date(); 1724 }, 1725 CreateControlHierarchyInternal: function () { 1726 ItemsOwnerBase.prototype.CreateControlHierarchyInternal.call(this); 1727 var mainElement = this.GetMainElement(); 1728 this.navigationBarElement = this.CreateDiv(); 1729 this.slidePanelWrapperElement = this.CreateDiv(); 1730 var positionMode = this.GetPositionMode(); 1731 var passePartour = this.GetImageSlider().GetPassePartoutElement(); 1732 if((positionMode == NavigationBarPositionEnum.Top || positionMode == NavigationBarPositionEnum.Left) && passePartour) 1733 mainElement.insertBefore(this.navigationBarElement, passePartour); 1734 else 1735 mainElement.appendChild(this.navigationBarElement); 1736 this.slidePanelElement = this.CreateDiv(); 1737 this.slidePanelWrapperElement.appendChild(this.slidePanelElement); 1738 this.navigationBarElement.appendChild(this.slidePanelWrapperElement); 1739 }, 1740 GetItemsContainer: function () { 1741 return this.GetSlidePanelElement(); 1742 }, 1743 PrepareControlHierarchy: function () { 1744 ItemsOwnerBase.prototype.PrepareControlHierarchy.call(this); 1745 this.PrepareNavigationBarElement(); 1746 this.PrepareSlidePanelElement(); 1747 }, 1748 PrepareNavigationBarElement: function () { 1749 var navigationBarElement = this.GetNavigationBarElement(); 1750 ASPx.SetStyles(navigationBarElement, { 1751 className: this.GetImageSlider().navBarCssCl, 1752 cssText: this.GetImageSlider().navBarStyle 1753 }); 1754 }, 1755 PrepareSlidePanelElement: function () { 1756 var slideElement = this.GetSlidePanelElement();
1757 slideElement.className = CssClassesConstants.NavigationBarSlidePanelCssClassName; 1758 this.GetSlidePanelWrapperElement().className = CssClassesConstants.NavigationBarSlidePanelWrapperCssClassName; 1759 this.PatchElementForMSTouch(slideElement); 1760 }, 1761 AdjustControlInternal: function () { 1762 ItemsOwnerBase.prototype.AdjustControlInternal.call(this); 1763 this.AdjustNavigationBarElement(); 1764 this.AdjustSlidePanelElement(); 1765 this.UpdateItemElementsIfRequired(); 1766 if(this.UpdateNavigationButtonsState()) 1767 this.AdjustNavigationBarElement(); 1768 }, 1769 AdjustItemElements: function () { 1770 if(!this.IsAdjustedSize()) { 1771 ItemsOwnerBase.prototype.AdjustItemElements.call(this); 1772 var horizontal = this.IsHorizontalNavigation(); 1773 var width = horizontal ? this.GetItemCount() * this.GetItemWidthWithSpacing() - this.GetItemSpacing() : this.GetItemElementWidth(); 1774 var height = horizontal ? this.GetItemElementHeight() : this.GetItemCount() * this.GetItemHeightWithSpacing() - this.GetItemSpacing(); 1775 ASPx.SetStyles(this.GetSlidePanelElement(), { width: width, height: height }); 1776 } 1777 }, 1778 AdjustNavigationBarElement: function () { 1779 var styles = this.GetNavigationBarElementsStyles(); 1780 ASPx.SetStyles(this.GetNavigationBarElement(), styles.navBarStyle); 1781 ASPx.SetStyles(this.GetSlidePanelWrapperElement(), styles.wrapperStyle); 1782 }, 1783 GetNavigationBarElementsStyles: function () { 1784 var isHorizontal = this.IsHorizontalNavigation(); 1785 var styles = {}; 1786 if(this.CanUseVisibleItemCount()) 1787 styles = { 1788 width: isHorizontal ? this.GetItemWidthWithSpacing() * this.GetVisibleItemCount() - this.GetItemSpacing() : this.GetItemElementWidth(), 1789 height: isHorizontal ? this.GetItemElementHeight() : this.GetItemHeightWithSpacing() * this.GetVisibleItemCount() - this.GetItemSpacing() 1790 }; 1791 else { 1792 var navigationBar = this.GetNavigationBarElement(); 1793 var mainElementWidth = SizeUtils.GetClientWidth(this.GetMainElement(), true); 1794 var mainElementHeight = SizeUtils.GetClientHeight(this.GetMainElement(), true); 1795 styles = { 1796 width: this.IsHorizontalNavigation() ? mainElementWidth : this.GetItemElementWidth(), 1797 height: this.IsHorizontalNavigation() ? this.GetItemElementHeight() : mainElementHeight 1798 }; 1799 ASPx.SetStyles(navigationBar, styles); 1800 styles.width = this.IsHorizontalNavigation() ? mainElementWidth - (navigationBar.offsetWidth - mainElementWidth) : this.GetItemElementWidth(); 1801 styles.height = this.IsHorizontalNavigation() ? this.GetItemElementHeight() : mainElementHeight - (navigationBar.offsetHeight - mainElementHeight); 1802 } 1803 return { 1804 navBarStyle: { 1805 width: styles.width, 1806 height: styles.height 1807 }, 1808 wrapperStyle: { 1809 width: styles.width, 1810 height: styles.height 1811 } 1812 }; 1813 }, 1814 CanUseVisibleItemCount: function () { 1815 return !this.GetImageSlider().showImageArea && this.GetVisibleItemCount() > 0; 1816 }, 1817 AdjustSlidePanelElement: function () { 1818 this.slideElementPosition = this.GetPostDataOffset(); 1819 if(this.IsWrapperOverlapsItemCollection()) 1820 this.slideElementPosition = (this.GetElementSize(this.GetSlidePanelWrapperElement()) - this.GetElementSize(this.GetSlidePanelElement())) / 2; 1821 else if(this.slideElementPosition > 0 && !this.IsRtl()) 1822 this.slideElementPosition = 0; 1823 this.SetElementTransformPosition(this.GetSlidePanelElement(), this.slideElementPosition); 1824 }, 1825 IsWrapperOverlapsItemCollection: function() { 1826 return this.GetElementSize(this.GetSlidePanelWrapperElement()) > this.GetElementSize(this.GetSlidePanelElement()); 1827 }, 1828 GetPostDataOffset: function () { 1829 var offset = this.IsAdjustedSize() ? 0 : this.GetImageSlider().navBarOffset; 1830 if(offset == 0 && this.IsRtl()) 1831 offset = this.GetElementSize(this.GetSlidePanelWrapperElement()) - this.GetElementSize(this.GetSlidePanelElement()); 1832 return offset; 1833 }, 1834 PrepareItemElement: function (index) { 1835 ItemsOwnerBase.prototype.PrepareItemElement.call(this, index); 1836 this.GetItemElement(index).itemIndex = index; 1837 }, 1838 AdjustItemElement: function (index) { 1839 ItemsOwnerBase.prototype.AdjustItemElement.call(this, index); 1840 ASPx.SetStyles(this.GetItemElement(index), this.IsHorizontalNavigation() ? { left
1840: this.GetItemWidthWithSpacing() * index } : { top: this.GetItemHeightWithSpacing() * index }); 1841 }, 1842 CalculateSize: function () { 1843 if(!this.IsAdjustedSize()) 1844 ItemsOwnerBase.prototype.CalculateSize.call(this); 1845 }, 1846 CalculateItemElementSize: function (fakeElement) { 1847 this.GetNavigationBarElement().appendChild(fakeElement); 1848 this.fullItemWidth = SizeUtils.GetClientWidth(fakeElement); 1849 this.fullItemHeight = SizeUtils.GetClientHeight(fakeElement); 1850 this.clearItemWidth = SizeUtils.GetClientWidth(fakeElement, true); 1851 this.clearItemHeight = SizeUtils.GetClientHeight(fakeElement, true); 1852 }, 1853 ResetControlStyle: function () { 1854 ASPx.SetStyles(this.GetNavigationBarElement(), { width: 0, height: 0 }); 1855 }, 1856 GetShownItemIndexes: function(getUncroppedItems) { return []; }, 1857 CanCreateSwipeGestureHandler: function () { 1858 return true; 1859 }, 1860 CanHandleSwipeGesture: function(evt) { 1861 return !this.IsWrapperOverlapsItemCollection() && ItemsOwnerBase.prototype.CanHandleSwipeGesture.call(this, evt); 1862 }, 1863 InitializeHandlers: function () { 1864 ItemsOwnerBase.prototype.InitializeHandlers.call(this); 1865 ASPx.Evt.AttachEventToElement(this.GetSlidePanelElement(), this.GetMouseUpEventName(), function (evt) { this.OnNavigationBarMouseUp(evt); }.aspxBind(this)); 1866 }, 1867 OnNavigationBarMouseUp: function (evt) { 1868 if(this.CanCandleMouseUpEvent(evt)) { 1869 var index = this.GetItemIndexFromEvent(evt); 1870 if(index != -1) { 1871 this.GetImageSlider().SetActiveItemIndexInternal(index); 1872 this.StopPlayingWhenPaging(); 1873 this.GetImageSlider().RaiseThumbnailItemClick(); 1874 } 1875 } 1876 }, 1877 GetMouseUpEventName: function () { 1878 return ASPx.TouchUIHelper.touchMouseUpEventName; 1879 }, 1880 CanCandleMouseUpEvent: function (evt) { 1881 return !this.IsExecutedGesture() && ASPx.Evt.IsLeftButtonPressed(evt); 1882 }, 1883 GetItemIndexFromEvent: function (evt) { 1884 var itemElement = ASPx.GetParentByClassName(ASPx.Evt.GetEventSource(evt),this.GetItemElementCssClass()); 1885 return itemElement ? itemElement.itemIndex : -1; 1886 }, 1887 GetImageSizeMode: function () { 1888 return this.GetImageSlider().thumbImageSizeMode; 1889 }, 1890 GetMainElement: function () { 1891 return this.GetImageSlider().GetMainElement(); 1892 }, 1893 GetSlidePanelWrapperElement: function () { 1894 return this.slidePanelWrapperElement; 1895 }, 1896 GetNavigationBarElement: function () { 1897 return this.navigationBarElement; 1898 }, 1899 GetElementSize: function (element, clear) { 1900 return this.IsHorizontalNavigation() ? SizeUtils.GetClientWidth(element, clear) : SizeUtils.GetClientHeight(element, clear); 1901 }, 1902 GetItemWidthWithSpacing: function () { 1903 return this.GetItemElementWidth() + this.GetItemSpacing(); 1904 }, 1905 GetItemHeightWithSpacing: function () { 1906 return this.GetItemElementHeight() + this.GetItemSpacing(); 1907 }, 1908 GetPositionMode: function () { 1909 return this.GetImageSlider().GetNavigationBarPosition(); 1910 }, 1911 GetItemSpacing: function () { 1912 return this.GetImageSlider().itemSpacing; 1913 }, 1914 IsSinglePagingMode: function () { 1915 return this.GetImageSlider().navBarPagingMode == NavigationBarPagingModeEnum.Single; 1916 }, 1917 GetVisibleItemCount: function () { 1918 return this.GetImageSlider().visibleItemsCount; 1919 }, 1920 GetSlideElementPosition: function () { 1921 return Math.round(this.slideElementPosition); 1922 }, 1923 GetWidth: function () { 1924 var navigationBarElement = this.GetNavigationBarElement(); 1925 var currentStyle = ASPx.GetCurrentStyle(navigationBarElement); 1926 var width = SizeUtils.GetClientWidth(navigationBarElement) + ASPx.PxToInt(currentStyle.marginLeft) + ASPx.PxToInt(currentStyle.marginRight); 1927 return width > 0 ? width : 0; 1928 }, 1929 GetHeight: function () { 1930 var navigationBarElement = this.GetNavigationBarElement(); 1931 var currentStyle = ASPx.GetCurrentStyle(navigationBarElement); 1932 var height = SizeUtils.GetClientHeight(navigationBarElement) + ASPx.PxToInt(currentStyle.marginTop) + ASPx.PxToInt(currentStyle.marginBottom); 1933 return height > 0 ? height : 0; 1934 } 1935 }); 1936 var NavigationBarThumbnailStrategy = ASPx.CreateClass(NavigationBarStrategy, { 1937 constructor: function (imageSlider) { 1938 this.selectedStateElement = null; 1939 this.hoverStateElementSize = {}; 1940 this.innerHoverStateElementSize = {}; 1941 this.loadingElenentSize = {}; 1942 this.setActiveIndexCounter = 0; 1943 this.constructor.prototype.constructor.call(this, imageSlider); 1944 }, 1945 BeginSetActiveIndex: function () { 1946 this.setActiveIndexCounter++; 1947 }, 1948 EndSetActiveIndex: function () { 1949 this.setActiveIndexCounter--; 1950 }, 1951 NeedOffsetCorrection: function () { 1952 return this.setActiveIndexCounter > 0 && this.GetImageSlider().extremeItemClickMode == ExtremeItemClickModeEnum.SelectAndSlide; 1953 }, 1954 GetNavigationButtonsPosition: function () { 1955 return this.GetImageSlider().thumbNavBtnsPos; 1956 }, 1957 GetItemIndexFromEvent: function(evt) { 1958 var result = NavigationBarStrategy.prototype.GetItemIndexFromEvent.call(this, evt); 1959 if(result == -1) { 1960 var eventSource = ASPx.Evt.GetEventSource(evt); 1961 var selectedItem = this.GetSelectedStateElement(); 1962 if (eventSource.parentNode == selectedItem || eventSource == selectedItem) 1963 result = this.GetRtlIndex(this.GetImageSlider().GetActiveItemIndex()); 1964 } 1965 return result; 1966 }, 1967 SetActiveItemIndexInternal: function (index, preventAnimation) { 1968 this.BeginSetActiveIndex(); 1969 NavigationBarStrategy.prototype.SetActiveItemIndexInternal.call(this, index, preventAnimation); 1970 this.EndSetActiveIndex(); 1971 }, 1972 SetActiveItemVisually: function (index, preventAnimation) { 1973 this.SelectItemElement(index); 1974 this.MoveSelectedItem(index, preventAnimation); 1975 }, 1976 SelectItemElement: function (index) { 1977 var currentItemElement = this.GetItemElement(index); 1978 var prevItemElement = this.GetItemElement(this.GetPrevItemIndex()); 1979 if(prevItemElement) 1980 prevItemElement.className = prevItemElement.className.replace(CssClasse
1980sConstants.NavigationBarSelectedStateCssClassName, ""); 1981 if(currentItemElement && !ASPx.ElementContainsCssClass(currentItemElement, CssClassesConstants.NavigationBarSelectedStateCssClassName)) 1982 currentItemElement.className += CssClassesConstants.NavigationBarSelectedStateCssClassName; 1983 }, 1984 MoveSelectedItem: function (index, preventAnimation) { 1985 var selectedStateElement = this.GetSelectedStateElement(); 1986 var position = (this.GetItemElementSize() + this.GetItemSpacing()) * index; 1987 preventAnimation = this.GetImageSlider().disableSelectedStateAnimation || preventAnimation; 1988 if(preventAnimation) 1989 this.SetElementTransformPosition(selectedStateElement, position); 1990 else 1991 ASPx.AnimationHelper.slideTo(selectedStateElement, { 1992 to: position, 1993 direction: this.IsHorizontalNavigation() ? ASPx.AnimationHelper.SLIDE_HORIZONTAL_DIRECTION : ASPx.AnimationHelper.SLIDE_VERTICAL_DIRECTION 1994 }); 1995 }, 1996 PerformSlideActionComplete: function() { 1997 this.EnsureShownItemsLoaded(); 1998 }, 1999 SlideItemsPortionPageMode: function (backward) { 2000 this.PerformSlideToExtremeInvisibleElement(backward, true, !backward); 2001 }, 2002 PerformRollBack: function () { 2003 NavigationBarStrategy.prototype.PerformRollBack.call(this); 2004 }, 2005 UpdateItemElementsIfRequired: function () { 2006 NavigationBarStrategy.prototype.UpdateItemElementsIfRequired.call(this); 2007 if(this.GetImageLoadMode() != LoadModeEnum.AllImages) 2008 this.SelectItemElement(this.GetActiveItemIndex()); 2009 }, 2010 CanCreateNavigationButtons: function () { 2011 if(!this.CanUseVisibleItemCount()) 2012 return true; 2013 return this.GetVisibleItemCount() < this.GetItemCount(); 2014 }, 2015 CreateNavigationButtons: function () { 2016 if(this.GetNavigationBtnsVisibilityMode() == ElementVisibilityModeEnum.None) 2017 return null; 2018 if(this.GetNavigationButtonsPosition() == NavigationBarButtonPositionEnum.Outside) 2019 return new OutsideNavigationButtons(this); 2020 return new NavigationButtons(this); 2021 }, 2022 CreateControlHierarchy: function () { 2023 NavigationBarStrategy.prototype.CreateControlHierarchy.call(this); 2024 this.CreateSelectedStateElement(); 2025 }, 2026 CreateTemplate: function(index) { 2027 ItemsOwnerBase.prototype.CreateTemplate.call(this, index); 2028 var template = this.GetTemplate(index); 2029 if(template) 2030 this.HideLoadingElement(index); 2031 }, 2032 CreateItemElement: function (index) { 2033 var itemElement = NavigationBarStrategy.prototype.CreateItemElement.call(this, index); 2034 itemElement.appendChild(this.CreateLoadingElement()); 2035 if(this.IsEnabled() && !ASPx.Browser.TouchUI) 2036 itemElement.appendChild(this.CreateHoverStateElement()); 2037 return itemElement; 2038 }, 2039 CreateLoadingElement: function(itemElement) { 2040 var element = this.CreateDiv(); 2041 element.className = CssClassesConstants.LoadingElement; 2042 return element; 2043 }, 2044 CreateHoverStateElement: function (itemElement) { 2045 var element = this.CreateDiv(); 2046 element.className = CssClassesConstants.NavigationBarHoverStateElementCssClassName; 2047 element.appendChild(this.CreateDiv()); 2048 return element; 2049 }, 2050 CreateSelectedStateElement: function () { 2051 this.selectedStateElement = this.CreateDiv(); 2052 this.selectedStateElement.appendChild(this.CreateDiv()); 2053 this.GetSlidePanelElement().appendChild(this.selectedStateElement); 2054 }, 2055 PrepareControlHierarchy: function () { 2056 NavigationBarStrategy.prototype.PrepareControlHierarchy.call(this); 2057 ASPx.SetStyles(this.GetSelectedStateElement(), { 2058 className: this.GetImageSlider().thSelCssCl, 2059 cssText: this.GetImageSlider().thSelStyle 2060 }); 2061 }, 2062 PrepareItemElement: function (index) { 2063 NavigationBarStrategy.prototype.PrepareItemElement.call(this, index); 2064 var stateController = this.GetStateController(); 2065 if(this.IsEnabled() && !ASPx.Browser.TouchUI && stateController && this.GetEnableItemHoverState()) { 2066 var itemElement = this.GetItemElement(index); 2067 itemElement.id = this.GetClientControlName() + "_nb_" + index; 2068 stateController.AddHoverItem(itemElement.id, [CssClassesConstants.NavigationBarHoverStateCssClassName], [""], [""], null, null, false); 2069 } 2070 }, 2071 GetEnableItemHoverState: function () { 2072 return true; 2073 }, 2074 CalculateItemElementSize: function (fakeElement) { 2075 NavigationBarStrategy.prototype.CalculateItemElementSize.call(this, fakeElement); 2076 if(this.IsEnabled() && !ASPx.Browser.TouchUI) 2077 this.CalculateHoverStateElement(fakeElement); 2078 this.CalculateLoadingElement(fakeElement); 2079 }, 2080 CalculateHoverStateElement: function (fakeElement) { 2081 var hoverStateElement = this.CreateHoverStateElement(); 2082 fakeElement.appendChild(hoverStateElement); 2083 ASPx.SetStyles(hoverStateElement, { display: "block" });
2084 this.hoverStateElementSize = this.GetBorderBoxSize(hoverStateElement, this.GetItemElementWidth(), this.GetItemElementHeight()); 2085 var innerDiv = this.GetFirstChild(hoverStateElement); 2086 this.innerHoverStateElementSize = this.GetBorderBoxSize(innerDiv, this.hoverStateElementSize.width, this.hoverStateElementSize.height); 2087 }, 2088 CalculateLoadingElement: function(fakeElement) { 2089 var loadingElement = this.CreateLoadingElement(); 2090 fakeElement.appendChild(loadingElement); 2091 this.loadingElenentSize.width = loadingElement.offsetWidth; 2092 this.loadingElenentSize.height = loadingElement.offsetHeight; 2093 }, 2094 AdjustControlInternal: function () { 2095 NavigationBarStrategy.prototype.AdjustControlInternal.call(this); 2096 this.AdjustSelectedStateElement(); 2097 }, 2098 AdjustItemElement: function (index) { 2099 NavigationBarStrategy.prototype.AdjustItemElement.call(this, index); 2100 if(this.IsEnabled() && !ASPx.Browser.TouchUI) 2101 this.AdjustHoverStateElement(index); 2102 this.AdjustLoadingElement(index); 2103 }, 2104 AdjustLoadingElement: function(index) { 2105 var loadingElement = this.GetLoadingElement(index); 2106 loadingElement.style.left = (this.GetItemElementWidth() - this.loadingElenentSize.width) / 2 + "px"; 2107 loadingElement.style.top = (this.GetItemElementHeight() - this.loadingElenentSize.height) / 2 + "px"; 2108 }, 2109 AdjustHoverStateElement: function (index) { 2110 var hoverStateElement = this.GetHoverStateElement(index); 2111 ASPx.SetStyles(hoverStateElement, this.hoverStateElementSize); 2112 ASPx.SetStyles(this.GetFirstChild(hoverStateElement), this.innerHoverStateElementSize); 2113 }, 2114 AdjustSelectedStateElement: function () { 2115 var selectedStateElement = this.GetSelectedStateElement(); 2116 var size = this.GetBorderBoxSize(selectedStateElement, this.GetItemElementWidth(), this.GetItemElementHeight()); 2117 ASPx.SetStyles(selectedStateElement, size); 2118 var innerDiv = this.GetFirstChild(selectedStateElement); 2119 size = this.GetBorderBoxSize(selectedStateElement, size.width, size.height); 2120 ASPx.SetStyles(innerDiv, size); 2121 }, 2122 GetHoverStateElement: function (index) { 2123 return ASPx.GetChildByClassName(this.GetItemElement(index), CssClassesConstants.NavigationBarHoverStateElementCssClassName); 2124 }, 2125 GetLoadingElement: function (index) { 2126 return ASPx.GetChildByClassName(this.GetItemElement(index), CssClassesConstants.LoadingElement); 2127 }, 2128 HideLoadingElement: function(index) { 2129 var element = this.GetLoadingElement(index); 2130 if(element) 2131 element.style.display = "none"; 2132 }, 2133 GetSelectedStateElement: function () { 2134 return this.selectedStateElement; 2135 }, 2136 GetItemElementCssClass: function () { 2137 return this.GetImageSlider().thCssCl; 2138 }, 2139 GetItemElementStyle: function () { 2140 return this.GetImageSlider().thStyle; 2141 }, 2142 CalculateSlideElementPosition: function (index, snapToLeft) { 2143 var prevSlideElementPosition = this.slideElementPosition; 2144 NavigationBarStrategy.prototype.CalculateSlideElementPosition.call(this, index, snapToLeft); 2145 this.slideElementPosition = this.CorrectSelectAndSlideOffsetPosition(index, prevSlideElementPosition, this.slideElementPosition); 2146 }, 2147 IsSnapToLeft: function (index) { 2148 var shownItemIndexes = this.GetShownItemIndexes(true); 2149 for(var i = 0; i < shownItemIndexes.length; i++) 2150 if(shownItemIndexes[i] == index) 2151 return i < shownItemIndexes.length / 2; 2152 return index < shownItemIndexes[0]; 2153 }, 2154 SlideItemsPortionSingleMode: function (backward) { 2155 var considerSize = new Date() - this.lastSlideItemsPortionDate >= 350; 2156 this.PerformSlideToExtremeInvisibleElement(backward, considerSize, backward); 2157 this.lastSlideItemsPortionDate = new Date(); 2158 }, 2159 PerformSlideToExtremeInvisibleElement: function (backward, considerSize, preventAnimation) { 2160 var shownItemIndexes = this.GetShownItemIndexes(false); 2161 var lastIndex = backward ? -1 : this.GetItemCount(); 2162 var incValue = backward ? -1 : 1; 2163 for(var index = shownItemIndexes[backward ? 0 : shownItemIndexes.length - 1]; index != lastIndex; index += incValue) 2164 if(!this.IsVisibleItemElement(index, considerSize)) { 2165 this.SlideToItem(index, preventAnimation); 2166 break; 2167 } 2168 }, 2169 GetShownItemIndexes: function (getUncroppedItems) { 2170 var result = []; 2171 var itemSize = this.GetItemElementSize(); 2172 var constOffset = this.GetElementTransformPosition(this.GetSlidePanelElement()); 2173 var itemFullSize = itemSize + this.GetItemSpacing(); 2174 var minValue = getUncroppedItems ? -1 : -itemSize; 2175 var maxValue = getUncroppedItems ? this.GetSlidePanelWrapperSize() - itemSize + 1 : this.GetSlidePanelWrapperSize(); 2176 var tempValue = null; 2177 for(var index = 0; index < this.GetItemCount() ; index++) { 2178 tempValue = constOffset + itemFullSize * index; 2179 if(tempValue > minValue && tempValue < maxValue) 2180 result.push(index); 2181 } 2182 return result; 2183 }, 2184 OnImageLoad: function (image) { 2185 NavigationBarStrategy.prototype.OnImageLoad.call(this, image); 2186 this.HideLoadingElement(image.dxIndex); 2187 }, 2188 CorrectSelectAndSlideOffsetPosition: function (nextItemIndex, prevPos, nextPos) { 2189 var index = this.GetActiveItemIndex(); 2190 if(!this.NeedOffsetCorrection() || nextItemIndex == index) 2191 return nextPos; 2192 var itemElementSize = this.GetItemElementSize(); 2193 var sliderWrapperSize = this.GetSlidePanelWrapperSize(); 2194 if(sliderWrapperSize < (itemElementSize * 3)) { 2195 var offsetDelta = Math.abs(Math.abs(nextPos) - Math.abs(prevPos)); 2196 var itemSpacing = this.GetItemSpacing(); 2197 var itemPosition = (itemElementSize + itemSpacing) * index;
2198 var itemPositionInSlideWrapper = this.ConvertItemPositionToSlideWrapperPosition(itemPosition) + 2199 (nextItemIndex < index ? offsetDelta : -offsetDelta); 2200 nextPos += (sliderWrapperSize - itemElementSize) / 2 - itemPositionInSlideWrapper; 2201 } 2202 return nextPos; 2203 }, 2204 GetBorderBoxSize: function (element, width, height) { 2205 ASPx.SetStyles(element, { width: width, height: height }); 2206 if(element.offsetWidth > width) 2207 width -= element.offsetWidth - width; 2208 if(element.offsetHeight > height) 2209 height -= element.offsetHeight - height; 2210 return { width: width, height: height }; 2211 }, 2212 GetFirstChild: function (parent) { 2213 return parent.children[0]; 2214 }, 2215 GetSlidePanelWrapperSize: function () { 2216 return this.GetElementSize(this.GetSlidePanelWrapperElement()); 2217 }, 2218 GetNavigationBarElementsStyles: function () { 2219 var styles = NavigationBarStrategy.prototype.GetNavigationBarElementsStyles.call(this); 2220 if(this.GetNavigationButtonsPosition() == NavigationBarButtonPositionEnum.Outside && this.navigationButtons) { 2221 var prevButtonSize = this.navigationButtons.GetPrevButtonWrapperSize(); 2222 var nextButtonSize = this.navigationButtons.GetNextButtonWrapperSize(); 2223 var isHorizontal = this.IsHorizontalNavigation(); 2224 var styleName = isHorizontal ? "width" : "height"; 2225 if(this.CanUseVisibleItemCount()) 2226 styles.navBarStyle[styleName] += prevButtonSize[styleName] + nextButtonSize[styleName]; 2227 else 2228 styles.wrapperStyle[styleName] -= prevButtonSize[styleName] + nextButtonSize[styleName]; 2229 styles.wrapperStyle[isHorizontal ? "left" : "top"] = prevButtonSize[styleName]; 2230 } 2231 return styles; 2232 } 2233 }); 2234 var NavigationBarDotsStrategy = ASPx.CreateClass(NavigationBarStrategy, { 2235 constructor: function (imageSlider) { 2236 this.cloneElement = null; 2237 this.constructor.prototype.constructor.call(this, imageSlider); 2238 }, 2239 Initialize: function () { 2240 NavigationBarStrategy.prototype.Initialize.call(this); 2241 this.cloneElement = ASPx.CreateHtmlElementFromString(this.GetImageSlider().dbh); 2242 }, 2243 SetActiveItemVisually: function (index, preventAnimation) { 2244 var stateController = this.GetStateController(); 2245 if(stateController) { 2246 if(this.GetPrevItemIndex() != -1) 2247 stateController.DeselectElementBySrcElement(this.GetItemElement(this.GetPrevItemIndex())); 2248 stateController.SelectElementBySrcElement(this.GetItemElement(index)); 2249 } 2250 }, 2251 GetImageLoadMode: function () { 2252 return LoadModeEnum.AllImages; 2253 }, 2254 OnNavigationBarMouseUp: function (evt) { 2255 ASPx.ClearHoverState(); 2256 NavigationBarStrategy.prototype.OnNavigationBarMouseUp.call(this, evt); 2257 }, 2258 CanCandleMouseUpEvent: function (evt) { 2259 if(ASPx.Browser.IE && ASPx.Browser.Version < 9) 2260 return !this.IsExecutedGesture(); 2261 return NavigationBarStrategy.prototype.CanCandleMouseUpEvent.call(this, evt); 2262 }, 2263 GetMouseUpEventName: function () { 2264 return ASPx.Browser.IE && ASPx.Browser.Version < 9 ? "click" : ASPx.TouchUIHelper.touchMouseUpEventName; 2265 }, 2266 GetNavigationBtnsVisibilityMode: function () { 2267 return ElementVisibilityModeEnum.None; 2268 }, 2269 CreateItemElement: function (index) { 2270 var itemElement = this.CreateDiv(); 2271 itemElement.id = this.GetItemElementId(index); 2272 return itemElement; 2273 }, 2274 PrepareControlHierarchy: function () { 2275 NavigationBarStrategy.prototype.PrepareControlHierarchy.call(this); 2276 var imageSlider = this.GetImageSlider(); 2277 var stateController = this.GetStateController(); 2278 if(!stateController) 2279 return; 2280 this.ForEachItem(function (i) { 2281 if(this.IsEnabled()) { 2282 stateController.AddHoverItem(this.GetItemElementId(i), [imageSlider.dotHCssCl], [imageSlider.dotHStyle], 2283 null, [imageSlider.dotHSprt], [""], false); 2284 stateController.AddPressedItem(this.GetItemElementId(i), [imageSlider.dotPCssCl], [imageSlider.dotPStyle], 2285 null, [imageSlider.dotPSprt], [""], false); 2286 } 2287 stateController.AddSelectedItem(this.GetItemElementId(i), [imageSlider.dotSCssCl], [imageSlider.dotSStyle], 2288 null, [imageSlider.dotSSprt], [""], false); 2289 }); 2290 }, 2291 AdjustImageElement: function (index) { 2292 }, 2293 GetItemElementCssClass: function () { 2294 return this.cloneElement.className; 2295 }, 2296 GetItemElementStyle: function () { 2297 return this.cloneElement.style.cssText; 2298 }, 2299 GetItemElementId: function (index) { 2300 return this.GetClientControlName() + "_dot_" + index; 2301 } 2302 }); 2303 var ItemElementsManagerBase = ASPx.CreateClass(null, { 2304 constructor: function (itemsOwner) { 2305 this.itemsOwner = itemsOwner; 2306 this.timerId = -1; 2307 this.itemCollection = []; 2308 }, 2309 GetOwner: function () { 2310 return this.itemsOwner; 2311 }, 2312 GetCollection: function () {
2313 if(this.IsEnablePartialLoading()) 2314 return this.itemCollection; 2315 return ASPx.GetChildNodesByTagName(this.GetOwner().GetItemsContainer(), "DIV"); 2316 }, 2317 HasItem: function (index) { 2318 return !!this.GetCollection()[index]; 2319 }, 2320 SaveItem: function (index, item) { 2321 if(this.IsEnablePartialLoading()) 2322 this.itemCollection[index] = item; 2323 }, 2324 GetImageLoadMode: function () { 2325 return this.GetOwner().GetImageLoadMode(); 2326 }, 2327 IsEnablePartialLoading: function () { 2328 return this.GetImageLoadMode() != LoadModeEnum.AllImages; 2329 }, 2330 CreateItemsIfRequired: function () { 2331 if(this.GetImageLoadMode() == LoadModeEnum.AllImages) 2332 this.GetOwner().CreateItemElements(); 2333 }, 2334 PrepareItemsIfRequired: function () { 2335 if(this.GetImageLoadMode() == LoadModeEnum.AllImages) 2336 this.GetOwner().PrepareItemElements(); 2337 }, 2338 AdjustItemsIfRequired: function () { 2339 var owner = this.GetOwner(); 2340 for(var i = 0; i < owner.GetItemCount() ; i++) { 2341 if(this.IsEnablePartialLoading() && !this.HasItem(i)) 2342 continue; 2343 this.GetOwner().AdjustItemElement(i); 2344 this.GetOwner().AdjustImageElement(i); 2345 } 2346 }, 2347 UpdateHierarchyIfRequired: function () { 2348 if(this.IsEnablePartialLoading()) { 2349 this.timerId = ASPx.Timer.ClearTimer(this.timerId); 2350 this.UpdateHierarchyCore(); 2351 } 2352 }, 2353 CreateItemAndAppend: function (index, parent) { 2354 var owner = this.GetOwner(); 2355 var element = owner.CreateItemElement(index); 2356 this.SaveItem(index, element); 2357 parent.appendChild(element); 2358 owner.PrepareItemElement(index); 2359 owner.AdjustItemElement(index); 2360 owner.AdjustImageElement(index); 2361 if(owner.GetImageSlider().HasTemplates()) 2362 owner.CreateTemplate(index); 2363 }, 2364 RemoveItem: function (index) { 2365 if(this.GetImageLoadMode() == LoadModeEnum.DynamicLoadAndCache) 2366 return; 2367 var owner = this.GetOwner(); 2368 var element = owner.GetItemElement(index); 2369 if(element) { 2370 var image = owner.GetImageElement(index); 2371 if(image) 2372 owner.DetachLoadEvents(image); 2373 this.itemCollection[index] = undefined; 2374 ASPx.RemoveElement(element); 2375 } 2376 }, 2377 UpdateHierarchyCore: function () { 2378 }, 2379 GetDelay: function () { 2380 return 450; 2381 }, 2382 UpdateHierarchyAfterDelayIfRequired: function () { 2383 if(this.IsEnablePartialLoading() && this.timerId == -1) 2384 this.timerId = window.setTimeout(function () { this.UpdateHierarchyIfRequired(); }.aspxBind(this), this.GetDelay()); 2385 } 2386 }); 2387 var ImageAreaItemElementsManager = ASPx.CreateClass(ItemElementsManagerBase, { 2388 constructor: function (imageAreaStrategy) { 2389 this.constructor.prototype.constructor.call(this, imageAreaStrategy); 2390 }, 2391 GetDelay: function () { 2392 return this.GetOwner().GetImageSlider().animationDuration + 50; 2393 }, 2394 UpdateHierarchyCore: function () { 2395 var owner = this.GetOwner(); 2396 var activeItemIndex = owner.GetActiveItemIndex(); 2397 var prevItemIndex = owner.GetPrevItemIndex(); 2398 if(prevItemIndex == -1) 2399 prevItemIndex = 0; 2400 var isForwardDirection = (activeItemIndex - prevItemIndex) >= 0; 2401 var fragment = owner.CreateDocumentFragment(); 2402 var itemsContainer = owner.GetItemsContainer(); 2403 if(!this.HasItem(activeItemIndex)) 2404 this.CreateItemAndAppend(activeItemIndex, fragment || itemsContainer); 2405 if(this.CanUpdateItemElements(isForwardDirection, isForwardDirection ? activeItemIndex + 1 : activeItemIndex - 1)) { 2406 for(var i = 0; i < owner.GetItemCount() ; i++) { 2407 if(this.CanRemoveItem(i, activeItemIndex, prevItemIndex, isForwardDirection)) 2408 this.RemoveItem(i); 2409 else if(!this.HasItem(i)) 2410 this.CreateItemAndAppend(i, fragment || itemsContainer); 2411 } 2412 } 2413 if(fragment) 2414 itemsContainer.appendChild(fragment); 2415 }, 2416 CanRemoveItem: function (index, activeItemIndex, prevItemIndex, forwardDirection) { 2417 var visibleItemCount = 6; 2418 var result = forwardDirection ? (index < activeItemIndex || index > (activeItemIndex + visibleItemCount)) : 2419 (index > activeItemIndex || index < (activeItemIndex - visibleItemCount)); 2420 return result && prevItemIndex != index; 2421 }, 2422 CanUpdateItemElements: function (forwardDirection, followingItemIndex) { 2423 return forwardDirection ? followingItemIndex < this.GetOwner().GetItemCount() && !this.HasItem(followingItemIndex) : 2424 followingItemIndex > 0 && !this.HasItem(followingItemIndex); 2425 } 2426 }); 2427 var LoopImageAreaItemElementsManager = ASPx.CreateClass(ItemElementsManagerBase, { 2428 constructor: function (imageAreaStrategy) { 2429 this.constructor.prototype.constructor.call(this, imageAreaStrategy); 2430 }, 2431 UpdateHierarchyCore: function () { 2432 var owner = this.GetOwner(); 2433 var activeIndex = owner.GetActiveItemIndex(); 2434 var fragment = owner.CreateDocumentFragment(); 2435 var itemsContainer = owner.GetItemsContainer(); 2436 if(!this.HasItem(activeIndex)) 2437 this.CreateItemAndAppend(activeIndex, fragment || itemsContainer); 2438 var activeItem = owner.GetItemElement(activeIndex); 2439 var nextIndex = activeIndex + 1; 2440 if(nextIndex == owner.GetItemCount()) 2441 nextIndex = 0; 2442 if(!this.HasItem(nextIndex)) { 2443 this.CreateItemAndAppend(nextIndex, fragment || itemsContainer); 2444 var item = owner.GetItemElement(nextIndex); 2445 item.dxPosition = activeItem.dxPosition + owner.GetItemElementSize(); 2446 owner.SetItemPosition(item); 2447 } 2448 var prevIndex = activeIndex - 1; 2449 var prevIndex = activeIndex - 1; 2450 if(prevIndex < 0) 2451 prevIndex = owner.GetItemCount() - 1; 2452 if(!this.HasItem(prevIndex)) { 2453 this.CreateItemAndAppend(prevIndex, fragment || itemsContainer); 2454 var item = owner.GetItemElement(prevIndex); 2455 item.dxPosition = activeItem.dxPosition - owner.GetItemElementSize(); 2456 owner.SetItemPosition(item); 2457 } 2458 for(var i = 0; i < owner.GetItemCount() ; i++) 2459 if(i != activeIndex && i != prevIndex && i != nextIndex && owner.GetPrevItemIndex() != i && owner.GetItemElement(i)) 2460 this.RemoveItem(i); 2461 if(fragment) 2462 itemsContainer.appendChild(fragment); 2463 } 2464 }); 2465 var NavigationBarItemElementsManager = ASPx.CreateClass(ItemElementsManagerBase, { 2466 constructor: function (navigationBarStrategy) { 2467 this.constructor.prototype.constructor.call(this, navigationBarStrategy); 2468 }, 2469 CreateDummyItem: function (index, parent) { 2470 if(!this.HasItem(index)) 2471 this.CreateAndPrepareItemElement(index, parent); 2472 else if(this.GetImageLoadMode() != LoadModeEnum.DynamicLoadAndCache) { 2473 var owner = this.GetOwner(); 2474 var element = owner.GetItemElement(index); 2475 if(element) { 2476 element.style.backgroundImage = ""; 2477 var image = owner.GetImageElement(index); 2478 if(image) 2479 owner.DetachLoadEvents(image); 2480 ASPx.RemoveElement(image); 2481 ASPx.RemoveElement(owner.GetCanvasElement(index)); 2482 var el = owner.GetLoadingElement(index); 2483 if(el) el.style.display = ""; 2484 } 2485 this.SetDummyFlagToElement(index, true); 2486 } 2487 }, 2488 SetDummyFlagToElement: function (index, isDummy) { 2489 var element = this.GetOwner().GetItemElement(index); 2490 if(element) 2491 element.isDummy = isDummy; 2492 }, 2493 IsElementDummy: function (index) { 2494 var element = this.GetOwner().GetItemElement(index); 2495 if(element) 2496 return !!element.isDummy; 2497 return false; 2498 }, 2499 CreateItemAndAppend: function (index, parent) { 2500 if(!this.HasItem(index)) 2501 this.CreateAndPrepareItemElement(index, parent); 2502 if(this.IsElementDummy(index)) { 2503 this.SetDummyFlagToElement(index, false); 2504 this.GetOwner().UpdateItemElement(index); 2505 } 2506 }, 2507 CreateAndPrepareItemElement: function (index, parent) { 2508 var owner = this.GetOwner(); 2509 var element = owner.CreateItemElement(index); 2510 this.SaveItem(index, element); 2511 parent.appendChild(element); 2512 owner.PrepareItemElement(index); 2513 owner.AdjustItemElement(index); 2514 this.SetDummyFlagToElement(index, true); 2515 }, 2516 UpdateHierarchyCore: function () { 2517 var owner = this.GetOwner(); 2518 var navigationBarSize = owner.GetElementSize(owner.GetSlidePanelWrapperElement()), 2519 slidePanelPosition = owner.GetElementTransformPosition(owner.GetSlidePanelElement()); 2520 var fragment = owner.CreateDocumentFragment(); 2521 var itemsContainer = owner.GetItemsContainer(); 2522 var itemFullSize = owner.GetItemElementSize() + owner.GetItemSpacing(); 2523 var lPos = Math.min(-navigationBarSize * 0.3, -itemFullSize); 2524 var rPos = Math.max(navigationBarSize * 1.3, navigationBarSize + itemFullSize); 2525 var lDummyPos = lPos - navigationBarSize; 2526 var rDummyPos = rPos + navigationBarSize; 2527 var itemPos = 0; 2528 for(var i = 0; i < owner.GetItemCount() ; i++) { 2529 itemPos = slidePanelPosition + itemFullSize * i; 2530 if(itemPos > lDummyPos && itemPos < rDummyPos && (itemPos < lPos || itemPos > rPos)) 2531 this.CreateDummyItem(i, fragment || itemsContainer); 2532 else { 2533 if(itemPos <= lDummyPos || itemPos >= rDummyPos) 2534 this.RemoveItem(i); 2535 else 2536 this.CreateItemAndAppend(i, fragment || itemsContainer); 2537 } 2538 } 2539 if(fragment) 2540 itemsContainer.appendChild(fragment); 2541 } 2542 }); 2543 var ASPxClientImageSlider = ASPx.CreateClass(ASPxClientControl, { 2544 constructor: function (name) { 2545 this.constructor.prototype.constructor.call(this, name); 2546 this.activeItemIndex = 0; 2547 this.imageAreaStrategy = null; 2548 this.navigationBarStrategy = null; 2549 this.passePartoutElement = null; 2550 this.hiddenField = null; 2551 this.pendingItemsTimerID = -1; 2552 this.slideShowEnabled = false; 2553 this.templateCreated = false; 2554 this.timerID = -1; 2555 this.defaultControlSize = { width: "", height: "" }; 2556 this.showImageArea = true; 2557 this.showNavBar = true; 2558 this.seoFriendlyItems = {}; 2559 this.items = {}; 2560 this.itemsPerRequest = 0; 2561 this.enableLoopNavigation = false; 2562 this.enableKeyboardSupport = true; 2563 this.enablePagingByClick = true; 2564 this.enablePagingGestures = true; 2565 this.extremeItemClickMode = 0; 2566 this.animationDuration = 400; 2567 this.allowMouseWheel = false; 2568 this.imageLoadMode = 1; 2569 this.imageSizeMode = ASPx.ImageControlUtils.ImageSizeModeEnum.ActualSizeOrFit; 2570 this.thumbImageSizeMode = ASPx.ImageControlUtils.ImageSizeModeEnum.FitAndCrop; 2571 this.animationType = 0; 2572 this.navDirection = 0; 2573 this.itemSpacing = 5; 2574 this.target = ""; 2575 this.hasNavigateUrls = false; 2576 this.hasTemplates = false; 2577 this.navBtnsVbl = 2; 2578 this.itemTxtVbl = 3; 2579 this.interval = 5000; 2580 this.autoPlay = false; 2581 this.stopPlayingWhenPaging = false; 2582 this.stopPlayingWhenPagingExecuted = false; 2583 this.pausePlayingWhenMouseOver = false; 2584 this.playPauseBtnVbl = 0; 2585 this.visibleStartIndex = 0; 2586 this.visibleItemsCount = 0; 2587 this.navBarPos = 0; 2588 this.navBarPagingMode = 0; 2589 this.thumbNavBtnsVbl = 2; 2590 this.thumbNavBtnsPos = 0; 2591 this.navBarOffset = 0; 2592 this.passePartoutStyle = ""; 2593 this.imgAreaCssCl = ""; 2594 this.imgAreaStyle = ""; 2595 this.itemCssCl = ""; 2596 this.itemStyle = ""; 2597 this.navBarCssCl = ""; 2598 this.navBarStyle = ""; 2599 this.thCssCl = ""; 2600 this.thStyle = ""; 2601 this.thSelCssCl = ""; 2602 this.thSelStyle = ""; 2603 this.itemTxtCssCl = ""; 2604 this.itemTxtStyle = ""; 2605 this.dotHSprt = null; 2606 this.dotHCssCl = ""; 2607 this.dotHStyle = ""; 2608 this.dotPSprt = null; 2609 this.dotPCssCl = ""; 2610 this.dotPStyle = ""; 2611 this.dotSSprt = null; 2612 this.dotSCssCl = ""; 2613 this.dotSStyle = ""; 2614 this.dbh = ""; 2615 this.playBH = ""; 2616 this.pauseBH = ""; 2617 this.pbh = ""; 2618 this.nbh = ""; 2619 this.nbpbh = ""; 2620 this.nbnbh = ""; 2621 this.sizingConfig.adjustControl = true; 2622 this.disableSelectedStateAnimation = false;
2623 this.ActiveItemChanged = new ASPxClientEvent(); 2624 this.ItemClick = new ASPxClientEvent(); 2625 this.ThumbnailItemClick = new ASPxClientEvent(); 2626 this.ItemLoadedOnCallback = new ASPxClientEvent(); 2627 this.StrategiesCreated = new ASPxClientEvent(); 2628 }, 2629 InlineInitialize: function () { 2630 ASPxClientControl.prototype.InlineInitialize.call(this); 2631 this.PopulateItemsSeoMode(); 2632 }, 2633 Initialize: function () { 2634 ASPxClientControl.prototype.Initialize.call(this); 2635 if(this.hasTemplates) 2636 for(var key in this.seoFriendlyItems) { 2637 if(!this.seoFriendlyItems.hasOwnProperty(key)) continue; 2638 if(!this.items[key]) 2639 this.items[key] = {}; 2640 var item = this.items[key], 2641 seoFriendlyItem = this.seoFriendlyItems[key]; 2642 item.s = seoFriendlyItem.s; 2643 item.ts = seoFriendlyItem.ts; 2644 item.t = seoFriendlyItem.t; 2645 item.u = seoFriendlyItem.u; 2646 } 2647 this.seoFriendlyItems = null; 2648 this.CreateControlHierarchy(); 2649 this.PrepareControlHierarchy(); 2650 this.InitializeElementsSize(); 2651 }, 2652 PopulateItemsSeoMode: function () { 2653 var elements = ASPx.GetNodesByTagName(this.GetMainElement(), "IMG"); 2654 if(elements.length > 0) 2655 this.populateItemCollection(elements, this.hasTemplates ? this.seoFriendlyItems : this.items); 2656 }, 2657 populateItemCollection: function(imageCollection, itemsCollection, image) { 2658 var index = this.visibleStartIndex; 2659 while(image = imageCollection[0]) { 2660 var collectionItem = (itemsCollection[index] || (itemsCollection[index] = {})); 2661 collectionItem.s = ASPx.Attr.GetAttribute(image, "src"); 2662 collectionItem.t = ASPx.Attr.GetAttribute(image, "alt"); 2663 if(image.parentNode.tagName == "A") { 2664 collectionItem.u = ASPx.Attr.GetAttribute(image.parentNode, "href"); 2665 ASPx.RemoveElement(image.parentNode); 2666 } else 2667 ASPx.RemoveElement(image); 2668 index++; 2669 } 2670 }, 2671 InitializeElementsSize: function () { 2672 var mainElement = this.GetMainElement(); 2673 this.defaultControlSize = { 2674 width: mainElement.style.width, 2675 height: mainElement.style.height 2676 }; 2677 }, 2678 AfterInitialize: function () { 2679 ASPxClientControl.prototype.AfterInitialize.call(this); 2680 this.InitializeHandlers(); 2681 this.EnsureShownItemsLoaded(); 2682 }, 2683 InitializeHandlers: function () { 2684 if(ASPx.Browser.TouchUI) 2685 return; 2686 if(this.enableKeyboardSupport) { 2687 var element = this.GetMainElement(); 2688 ASPx.Evt.AttachEventToElement(element, "keydown", function (evt) { this.OnKeyDown(evt); }.aspxBind(this)); 2689 ASPx.Evt.AttachEventToElement(element, "mousedown", function(evt) { 2690 if(!ASPx.Ident.IsFocusableElementRegardlessTabIndex(ASPx.Evt.GetEventSource(evt))) 2691 this.Focus(); 2692 }.aspxBind(this)); 2693 } 2694 if(this.pausePlayingWhenMouseOver) 2695 MouseEnterHelper.AddHandler(this.GetMainElement(), function () { 2696 if(this.slideShowEnabled) 2697 this.PauseInternal(); 2698 }.aspxBind(this), function () { 2699 if(this.slideShowEnabled && !this.stopPlayingWhenPagingExecuted) 2700 this.PlayInternal(); 2701 }.aspxBind(this)); 2702 }, 2703 GetNavigationBarOffset: function(){ 2704 var offset = 0; 2705 var navigationBar = this.GetNavigationBarStrategy(); 2706 if(navigationBar) 2707 offset = navigationBar.GetSlideElementPosition(); 2708 return isNaN(offset) ? 0 : offset; 2709 }, 2710 UpdateStateObject: function(){ 2711 this.UpdateStateObjectWithObject({ activeItemIndex: this.GetActiveItemIndex(), navigationBarOffset: this.GetNavigationBarOffset() }); 2712 }, 2713 CreateTemplates: function () { 2714 var imageArea = this.GetImageAreaStrategy(); 2715 if(imageArea) 2716 imageArea.CreateTemplates(); 2717 var navigationBar = this.GetNavigationBarStrategy(); 2718 if(navigationBar) 2719 navigationBar.CreateTemplates(); 2720 ASPx.ProcessScriptsAndLinks(this.name); 2721 this.templateCreated = true; 2722 }, 2723 AdjustControlCore: function () { 2724 this.AdjustControlCoreInternal(); 2725 if(this.HasTemplates() && !this.templateCreated) 2726 window.setTimeout(function () { this.CreateTemplates(); }.aspxBind(this), 0); 2727 }, 2728 SetSizeCore: function(sizePropertyName, size, getFunctionName, corrected) { 2729 this.defaultControlSize[sizePropertyName] = size; 2730 ASPxClientControl.prototype.SetSizeCore.call(this, sizePropertyName, size, getFunctionName, corrected); 2731 }, 2732 AdjustControlCoreInternal: function () { 2733 this.AllowRubberLayout(); 2734 var mainElementStyle = { 2735 width: SizeUtils.GetClientWidth(this.GetMainElement(), true), 2736 height: SizeUtils.GetClientHeight(this.GetMainElement(), true) 2737 }; 2738 var passePartourStyle = { 2739 width: mainElementStyle.width, 2740 height: mainElementStyle.height 2741 }; 2742 this.AdjustNavigationBar(mainElementStyle, passePartourStyle); 2743 this.AdjustImageArea(mainElementStyle, passePartourStyle); 2744 this.ensureSizesAreValid(mainElementStyle); 2745 ASPx.SetStyles(this.GetMainElement(), mainElementStyle); 2746 if(this.showImageArea) 2747 ASPx.SetStyles(this.GetPassePartoutElement(), passePartourStyle); 2748 this.DenyRubberLayout(); 2749 }, 2750 AdjustNavigationBar: function (mainElementStyle, passePartourStyle) { 2751 var navigationBar = this.GetNavigationBarStrategy(); 2752 if(navigationBar) { 2753 navigationBar.AdjustControl(); 2754 var width = navigationBar.GetWidth(); 2755 var height = navigationBar.GetHeight(); 2756 if(this.showImageArea) { 2757 switch (this.GetNavigationBarPosition()) { 2758 case NavigationBarPositionEnum.Right: 2759 case NavigationBarPositionEnum.Left: 2760 passePartourStyle.float = "left"; 2761 passePartourStyle.width -= width; 2762 break; 2763 case NavigationBarPositionEnum.Bottom: 2764 case NavigationBarPositionEnum.Top: 2765 passePartourStyle.height -= height; 2766 break; 2767 } 2768 } 2769 else { 2770 mainElementStyle.width = width; 2771 mainElementStyle.height = height; 2772 } 2773 } 2774 }, 2775 AdjustImageArea: function (mainElementStyle, passePartourStyle) { 2776 var imageAreaStrategy = this.GetImageAreaStrategy(); 2777 if(imageAreaStrategy) { 2778 imageAreaStrategy.AdjustControl(passePartourStyle.width, passePartourStyle.height); 2779 var imageAreaWidth = imageAreaStrategy.GetWidth(); 2780 var imageAreaHeight = imageAreaStrategy.GetHeight(); 2781 var navigationBar = this.GetNavigationBarStrategy(); 2782 var navigationBarWidth = navigationBar ? navigationBar.GetWidth() : 0; 2783 var navigationBarHeight = navigationBar ? navigationBar.GetHeight() : 0; 2784 var useHorizLayout = this.GetNavigationBarPosition() == NavigationBarPositionEnum.Left 2785 || this.GetNavigationBarPosition() == NavigationBarPositionEnum.Right; 2786 if(imageAreaWidth > passePartourStyle.width) { 2787 var widthCorrection = useHorizLayout ? navigationBarWidth : 0; 2788 passePartourStyle.width = imageAreaWidth; 2789 mainElementStyle.width = imageAreaWidth + widthCorrection; 2790 } 2791 if(imageAreaHeight > passePartourStyle.height) { 2792 var heightCorrection = !useHorizLayout ? navigationBarHeight : 0; 2793 passePartourStyle.height = imageAreaHeight;
2794 mainElementStyle.height = imageAreaHeight + heightCorrection; 2795 } 2796 } 2797 }, 2798 AllowRubberLayout: function () { 2799 this.ResetControlStyle(); 2800 ASPx.SetStyles(this.GetMainElement(), { 2801 borderSpacing: 0, 2802 overflow: "hidden", 2803 display: "table" 2804 }); 2805 if(this.showImageArea) 2806 ASPx.SetStyles(this.GetPassePartoutElement(), { width: "", height: "" }); 2807 }, 2808 DenyRubberLayout: function () { 2809 ASPx.SetStyles(this.GetMainElement(), { 2810 display: "", 2811 overflow: "", 2812 borderSpacing: "" 2813 }); 2814 if(this.showImageArea) 2815 ASPx.SetStyles(this.GetPassePartoutElement(), { display: "" }); 2816 }, 2817 ResetControlStyle: function () { 2818 ASPx.SetStyles(this.GetMainElement(), this.defaultControlSize); 2819 var navigationBar = this.GetNavigationBarStrategy(); 2820 if(navigationBar) 2821 navigationBar.ResetControlStyle(); 2822 var imageAreaStrategy = this.GetImageAreaStrategy(); 2823 if(imageAreaStrategy) 2824 imageAreaStrategy.ResetControlStyle(); 2825 }, 2826 ensureSizesAreValid: function(style) { 2827 if(style.width <= 0) 2828 style.width = 1; 2829 if(style.height <= 0) 2830 style.height = 1; 2831 }, 2832 CreateControlHierarchy: function () { 2833 if(this.showImageArea) { 2834 this.passePartoutElement = document.createElement("DIV"); 2835 this.GetMainElement().appendChild(this.passePartoutElement); 2836 this.imageAreaStrategy = this.CreateImageAreaStrategy(); 2837 } 2838 if(this.showNavBar) 2839 this.navigationBarStrategy = this.CreateNavigationBarStrategy(); 2840 this.RaiseStrategiesCreated(); 2841 }, 2842 CreateImageAreaStrategy: function () { 2843 switch (this.GetAnimationType()) { 2844 case AnimationTypeEnum.Slide: 2845 return this.CreateSlideImageAreaStrategy(); 2846 case AnimationTypeEnum.Fade: 2847 return new FadeImageAreaStrategy(this); 2848 case AnimationTypeEnum.None: 2849 return new NoneImageAreaStrategy(this); 2850 } 2851 }, 2852 CreateSlideImageAreaStrategy: function () { 2853 return this.enableLoopNavigation ? new SlideLoopNavigationImageAreaStrategy(this) : new SlideImageAreaStrategy(this); 2854 }, 2855 CreateNavigationBarStrategy: function () { 2856 switch (this.GetNavigationBarMode()) { 2857 case NavigationBarModeEnum.Thumbnails: 2858 return new NavigationBarThumbnailStrategy(this); 2859 case NavigationBarModeEnum.Dots: 2860 return new NavigationBarDotsStrategy(this); 2861 } 2862 }, 2863 PrepareControlHierarchy: function () { 2864 this.PrepareMainElement(); 2865 if(this.showImageArea) 2866 this.PreparePassePartoutElement(); 2867 if(this.autoPlay) 2868 this.Play(); 2869 }, 2870 PrepareMainElement: function () { 2871 var mainElement = this.GetMainElement(); 2872 mainElement.tabIndex = Math.max(mainElement.tabIndex, 0); 2873 ASPx.SetElementDisplay(mainElement, true); 2874 }, 2875 PreparePassePartoutElement: function () { 2876 ASPx.SetStyles(this.GetPassePartoutElement(), { 2877 cssText: this.passePartoutStyle, 2878 className: CssClassesConstants.PassePartoutCssClassName 2879 }); 2880 }, 2881 OnBrowserWindowResize: function(e) { 2882 this.AdjustControl(); 2883 }, 2884 OnKeyDown: function(evt) { 2885 if(!this.IsFocused()) 2886 return; 2887 var keyKode = ASPx.Evt.GetKeyCode(evt); 2888 switch (keyKode) { 2889 case ASPx.Key.Left: 2890 var index = this.rtl ? this.GetActiveItemIndex() + 1 : this.GetActiveItemIndex() - 1; 2891 this.SetActiveItemIndex(index); 2892 return ASPx.Evt.PreventEvent(evt); 2893 case ASPx.Key.Up: 2894 this.SetActiveItemIndex(this.GetActiveItemIndex() - 1); 2895 return ASPx.Evt.PreventEvent(evt); 2896 case ASPx.Key.Right: 2897 var index = this.rtl ? this.GetActiveItemIndex() - 1 : this.GetActiveItemIndex() + 1; 2898 this.SetActiveItemIndex(index); 2899 return ASPx.Evt.PreventEvent(evt); 2900 case ASPx.Key.Down: 2901 this.SetActiveItemIndex(this.GetActiveItemIndex() + 1); 2902 return ASPx.Evt.PreventEvent(evt); 2903 case ASPx.Key.Home: 2904 this.SetActiveItemIndex(0); 2905 return ASPx.Evt.PreventEvent(evt); 2906 case ASPx.Key.End: 2907 this.SetActiveItemIndex(this.GetItemCount() - 1); 2908 return ASPx.Evt.PreventEvent(evt); 2909 } 2910 }, 2911 OnCallback: function(result) { 2912 if(result.items) 2913 this.ProcessCreatedItems(result.items); 2914 }, 2915 GetImageAreaStrategy: function () { 2916 return this.imageAreaStrategy; 2917 }, 2918 GetNavigationBarStrategy: function () { 2919 return this.navigationBarStrategy; 2920 }, 2921 GetPassePartoutElement: function () { 2922 return this.passePartoutElement; 2923 }, 2924 GetItem: function(index, forceLoad) { 2925 var item = this.GetItemInternal(index); 2926 if(item) { 2927 var isLoaded = !item.skipped && !item.pending; 2928 if(forceLoad && !isLoaded) 2929 this.LoadItemsViaCallback([index]); 2930 return new ASPxClientImageSliderItem(this, index, item.n, item.s, item.t, isLoaded); 2931 } 2932 return null; 2933 }, 2934 GetItemByName: function(name, forceLoad) { 2935 for(var i = 0; i < this.GetItemCount(); i++) { 2936 if(this.GetItemInternal(i).n == name) 2937 return this.GetItem(i, forceLoad); 2938 } 2939 if(forceLoad) 2940 this.DoLoadItemsViaCallback(null, [name]); 2941 return null; 2942 }, 2943 GetActiveItemIndex: function () { 2944 return this.GetRtlIndex(this.GetActiveItemIndexInternal()); 2945 }, 2946 SetActiveItemIndex: function (index, preventAnimation, isAPICall) {
2947 this.SetActiveItemIndexInternal(this.GetRtlIndex(index), preventAnimation, isAPICall); 2948 }, 2949 GetActiveItem: function () { 2950 return this.GetItem(this.GetActiveItemIndex()); 2951 }, 2952 SetActiveItem: function (item, preventAnimation) { 2953 this.SetActiveItemIndex(item.index, preventAnimation); 2954 }, 2955 GetItemCount: function () { 2956 return this.itemsCount; 2957 }, 2958 GetLoadedItems: function() { 2959 var itemsCount = this.GetItemCount(), 2960 result = []; 2961 for(var i = 0; i < itemsCount; i++) { 2962 var item = this.GetItem(i); 2963 if(item.loaded) 2964 result.push(item); 2965 } 2966 return result; 2967 }, 2968 Focus: function () { 2969 if(!ASPx.Browser.TouchUI && this.enableKeyboardSupport) 2970 ASPx.SetFocus(this.GetMainElement()); 2971 }, 2972 Play: function () { 2973 if(this.enabled) { 2974 this.PlayInternal(); 2975 this.slideShowEnabled = true; 2976 } 2977 }, 2978 Pause: function () { 2979 if(this.enabled) { 2980 this.PauseInternal(); 2981 this.slideShowEnabled = false; 2982 } 2983 }, 2984 IsSlideShowPlaying: function () { 2985 return this.timerID != -1; 2986 }, 2987 IsFocused: function () { 2988 return ASPx.GetActiveElement() == this.GetMainElement(); 2989 }, 2990 PlayInternal: function () { 2991 if(this.IsSlideShowPlaying()) 2992 return; 2993 this.timerID = window.setInterval(function () { this.DoSeActivetNextItem(); }.aspxBind(this), this.interval); 2994 this.stopPlayingWhenPagingExecuted = false; 2995 if(this.GetImageAreaStrategy()) 2996 this.GetImageAreaStrategy().SetSlideShowButtonState(false); 2997 }, 2998 PauseInternal: function () { 2999 this.timerID = ASPx.Timer.ClearInterval(this.timerID); 3000 if(this.GetImageAreaStrategy()) 3001 this.GetImageAreaStrategy().SetSlideShowButtonState(true); 3002 }, 3003 ResetSlideShowTimer: function () { 3004 if(this.IsSlideShowPlaying()) { 3005 this.timerID = ASPx.Timer.ClearInterval(this.timerID); 3006 this.timerID = window.setInterval(function () { this.DoSeActivetNextItem(); }.aspxBind(this), this.interval); 3007 } 3008 }, 3009 StopPlayingWhenPaging: function () { 3010 if(this.stopPlayingWhenPaging) { 3011 this.Pause(); 3012 this.stopPlayingWhenPagingExecuted = true; 3013 } 3014 }, 3015 DoSeActivetNextItem: function () { 3016 var activeIndex = this.GetActiveItemIndex() + 1; 3017 if(activeIndex >= this.GetItemCount()) 3018 activeIndex = 0;
3019 this.SetActiveItemIndex(activeIndex); 3020 }, 3021 RaiseStrategiesCreated: function () { 3022 if(!this.StrategiesCreated.IsEmpty()) 3023 this.StrategiesCreated.FireEvent(this, null); 3024 }, 3025 RaiseActiveItemChanged: function () { 3026 this.RaiseItemEvent(this.ActiveItemChanged); 3027 }, 3028 RaiseItemClick: function () { 3029 this.RaiseItemEvent(this.ItemClick); 3030 }, 3031 RaiseThumbnailItemClick: function () { 3032 this.RaiseItemEvent(this.ThumbnailItemClick); 3033 }, 3034 RaiseItemLoadedOnCallback: function(item) { 3035 this.RaiseItemEvent(this.ItemLoadedOnCallback, item); 3036 }, 3037 RaiseItemEvent: function(event, item) { 3038 if(!event.IsEmpty()) { 3039 var args = new ASPxClientImageSliderItemEventArgs(item || this.GetActiveItem()); 3040 event.FireEvent(this, args); 3041 } 3042 }, 3043 SetActiveItemIndexInternal: function (index, preventAnimation, isAPICall) { 3044 if(index >= 0 && index < this.GetItemCount() && index != this.GetActiveItemIndexInternal()) { 3045 if(this.GetImageAreaStrategy()) 3046 this.GetImageAreaStrategy().SetActiveItemIndex(index, preventAnimation); 3047 if(this.GetNavigationBarStrategy()) 3048 this.GetNavigationBarStrategy().SetActiveItemIndex(index, preventAnimation); 3049 this.ResetSlideShowTimer(); 3050 if(!isAPICall) 3051 this.RaiseActiveItemChanged(); 3052 } 3053 }, 3054 GetActiveItemIndexInternal: function() { 3055 var strategy = this.GetImageAreaStrategy() || this.GetNavigationBarStrategy(); 3056 if(strategy) 3057 return strategy.GetActiveItemIndex(); 3058 return 0; 3059 }, 3060 GetItemInternal: function (index) { 3061 if(index < 0 || index >= this.GetItemCount()) 3062 return null; 3063 return this.items[index] || { skipped: true }; 3064 }, 3065 GetRtlIndex: function (index) { 3066 if(this.rtl) 3067 return this.GetItemCount() - 1 - index; 3068 return index; 3069 }, 3070 IsSkippedItem: function(index) { 3071 var item = this.GetItemInternal(index); 3072 return item ? !!item.skipped : false; 3073 }, 3074 IsPendingItem: function(index) { 3075 var item = this.GetItemInternal(index); 3076 return item ? !!item.pending : false; 3077 }, 3078 IsAllowItemCallback: function(index) { 3079 return this.IsSkippedItem(index) && !this.IsPendingItem(index); 3080 }, 3081 EnsureShownItemsLoaded: function() { 3082 this.pendingItemsTimerID = ASPx.Timer.ClearTimer(this.pendingItemsTimerID); 3083 this.pendingItemsTimerID = window.setTimeout(function() { 3084 var navigationBar = this.GetNavigationBarStrategy(); 3085 var indexes = navigationBar ? navigationBar.GetShownItemIndexes(false) : []; 3086 for(var i = 0; i < indexes.length; i++) 3087 indexes[i] = this.GetRtlIndex(indexes[i]); 3088 var activeItemIndex = this.GetActiveItemIndex(), 3089 shownIndexes = navigationBar ? indexes : [activeItemIndex]; 3090 indexes.push(activeItemIndex); 3091 indexes = ASPxClientImageSlider.ExtendItemsPerRequest(indexes, this.itemsPerRequest, shownIndexes, this.GetItemCount(), this.IsAllowItemCallback.bind(this)); 3092 this.LoadItemsViaCallback(indexes); 3093 }.aspxBind(this), 1000); 3094 }, 3095 LoadItemsViaCallback: function(indexArray) { 3096 var pendingItemsQueue = []; 3097 for(var i = 0; i < indexArray.length; i++) { 3098 var index = indexArray[i]; 3099 if(this.IsAllowItemCallback(index)) { 3100 this.items[index] = { pending: true }; 3101 pendingItemsQueue.push(index); 3102 } 3103 } 3104 if(pendingItemsQueue.length > 0) 3105 this.DoLoadItemsViaCallback(pendingItemsQueue); 3106 }, 3107 DoLoadItemsViaCallback: function(indexArray, nameArray) { 3108 var args = {}; 3109 if(indexArray) 3110 args.i = indexArray; 3111 if(nameArray) 3112 args.n = nameArray; 3113 var preparedArgs = ASPx.Json.ToJson(args); 3114 this.CreateCallback(preparedArgs); 3115 this.HideLoadingPanel(); 3116 }, 3117 ProcessCreatedItems: function(items) { 3118 var navigationBar = this.GetNavigationBarStrategy(); 3119 var imageArea = this.GetImageAreaStrategy(); 3120 for(var key in items) { 3121 if(!items.hasOwnProperty(key)) continue; 3122 this.items[key] = items[key]; 3123 this.RaiseItemLoadedOnCallback(this.GetItem(key)); 3124 var index = this.GetRtlIndex(key); 3125 if(navigationBar) 3126 navigationBar.UpdateItemElement(index); 3127 if(imageArea) 3128 imageArea.UpdateItemElement(index); 3129 } 3130 if(this.HasTemplates()) 3131 ASPx.ProcessScriptsAndLinks(this.name); 3132 }, 3133 GetAnimationType: function () { 3134 return this.animationType; 3135 }, 3136 HasNavigateUrls: function () { 3137 return this.hasNavigateUrls; 3138 }, 3139 HasTemplates: function () { 3140 return this.hasTemplates; 3141 }, 3142 GetNavigationBarPosition: function () { 3143 return this.navBarPos; 3144 }, 3145 GetNavigationBarMode: function () { 3146 return this.dotHCssCl != "" ? 1 : 0; 3147 } 3148 });
3149 ASPxClientImageSlider.ExtendItemsPerRequest = function(indexes, itemsPerRequest, shownIndexes, itemsCount, allowFunc) { 3150 var result = indexes.filter(function(i) { return allowFunc(i); }.aspxBind(this)), 3151 extendedItemsCount = itemsPerRequest - result.length; 3152 if(result.length === 0 || extendedItemsCount < 1) 3153 return result; 3154 var index = shownIndexes[Math.floor(shownIndexes.length / 2)], 3155 count = itemsCount, 3156 i = 0; 3157 while(i < count && extendedItemsCount > 0) { 3158 index = (i % 2 === 0) ? index + i : index - i; 3159 if(index < 0 || index >= count) 3160 count++; 3161 else if(!ASPx.Data.ArrayContains(indexes, index) && allowFunc(index)) { 3162 result.push(index); 3163 extendedItemsCount--; 3164 } 3165 i++; 3166 } 3167 return result; 3168 }; 3169 ASPxClientImageSlider.Cast = ASPxClientControl.Cast; 3170 var ASPxClientImageSliderItemEventArgs = ASPx.CreateClass(ASPxClientEventArgs, { 3171 constructor: function (item) { 3172 this.constructor.prototype.constructor.call(this); 3173 this.item = item; 3174 } 3175 }); 3176 var ASPxClientImageSliderItem = ASPx.CreateClass(null, { 3177 constructor: function (imageSlider, index, name, imageUrl, text, loaded) { 3178 this.imageSlider = imageSlider; 3179 this.index = index; 3180 this.name = name; 3181 this.imageUrl = imageUrl; 3182 this.text = text; 3183 this.loaded = loaded; 3184 } 3185 }); 3186 var ASPxClientImageZoomNavigator = ASPx.CreateClass(ASPxClientImageSlider, { 3187 constructor: function (name) { 3188 this.constructor.prototype.constructor.call(this, name); 3189 this.disableSelectedStateAnimation = true; 3190 this.imageZoomName = ""; 3191 this.changeAction = 0; 3192 this.buttonVisibilityMode = 0; 3193 }, 3194 Initialize: function () { 3195 ASPxClientImageSlider.prototype.Initialize.call(this); 3196 this.ActiveItemChanged.AddHandler(function () { 3197 this.OnActiveItemChanged(); 3198 }.aspxBind(this)); 3199 }, 3200 CreateNavigationBarStrategy: function () { 3201 return new ImageZoomNavigationBarStrategy(this); 3202 }, 3203 PrepareControlHierarchy: function () { 3204 ASPxClientImageSlider.prototype.PrepareControlHierarchy.call(this); 3205 ASPx.AddClassNameToElement(this.GetMainElement(), CssClassesConstants.ImageZoomNavigatorCssClassName); 3206 }, 3207 OnActiveItemChanged: function () { 3208 this.UpdageImageZoomImages(); 3209 }, 3210 ProcessCreatedItems: function(items) { 3211 ASPxClientImageSlider.prototype.ProcessCreatedItems.call(this, items); 3212 this.UpdageImageZoomImages(); 3213 }, 3214 UpdageImageZoomImages: function() { 3215 var activeItemIndex = this.GetActiveItemIndex(); 3216 if(this.IsSkippedItem(activeItemIndex)) 3217 return; 3218 var imageZoom = this.GetImageZoom(); 3219 if(imageZoom) { 3220 var item = this.GetItemInternal(activeItemIndex); 3221 imageZoom.SetImageProperties(item.s, item.liu || item.s, item.zt, item.et, item.zt || item.at); 3222 } 3223 }, 3224 GetImageZoom: function() { 3225 return this.imageZoomName ? ASPx.GetControlCollection().Get(this.imageZoomName) : null; 3226 } 3227 }); 3228 var ImageZoomNavigationBarStrategy = ASPx.CreateClass(NavigationBarThumbnailStrategy, { 3229 constructor: function (imageZoomNavigator) { 3230 this.visibleItemCount = 0; 3231 this.constructor.prototype.constructor.call(this, imageZoomNavigator); 3232 }, 3233 InitializeHandlers: function () { 3234 if(this.GetImageSlider().changeAction == ActiveItemChangeActionEnum.Hover) { 3235 ItemsOwnerBase.prototype.InitializeHandlers.call(this); 3236 ASPx.Evt.AttachEventToElement(this.GetSlidePanelElement(), "mouseover", function (evt) { this.OnNavigationBarMouseOver(evt); }.aspxBind(this)); 3237 } 3238 else 3239 NavigationBarThumbnailStrategy.prototype.InitializeHandlers.call(this); 3240 }, 3241 OnNavigationBarMouseOver: function (evt) { 3242 if(!this.IsExecutedGesture()) { 3243 var index = this.GetItemIndexFromEvent(evt); 3244 if(index != -1) 3245 this.GetImageSlider().SetActiveItemIndexInternal(index); 3246 } 3247 }, 3248 GetEnableItemHoverState: function () { 3249 return this.GetImageSlider().changeAction == ActiveItemChangeActionEnum.Click; 3250 }, 3251 GetItemAlternateText: function (index) { 3252 if(this.IsValidItemIndex(index)) { 3253 var item = this.GetItem(index); 3254 return item.zt || item.at || ""; 3255 } 3256 return ""; 3257 }, 3258 CalculateSize: function() { 3259 NavigationBarThumbnailStrategy.prototype.CalculateSize.call(this); 3260 if(!this.CanUseVisibleItemCount()) { 3261 var isHorizontal = this.IsHorizontalNavigation(); 3262 var size = { 3263 width: isHorizontal ? this.GetItemWidthWithSpacing() * this.GetItemCount() - this.GetItemSpacing() : this.GetItemElementWidth(), 3264 height: isHorizontal ? this.GetItemElementHeight() : this.GetItemHeightWithSpacing() * this.GetItemCount() - this.GetItemSpacing() 3265 }; 3266 var mainElementWidth = SizeUtils.GetClientWidth(this.GetMainElement(), true); 3267 var mainElementHeight = SizeUtils.GetClientHeight(this.GetMainElement(), true); 3268 if(isHorizontal && size.width < mainElementWidth || !isHorizontal && size.height < mainElementHeight) { 3269 this.visibleItemCount = this.GetItemCount(); 3270 if(this.GetImageSlider().buttonVisibilityMode == NavigationButtonVisibilityModeEnum.Auto) 3271 this.SetVisibilityButtons(false); 3272 } 3273 } 3274 }, 3275 UpdateNavigationButtonsState: function () { 3276 if(this.GetVisibleItemCount() != this.GetItemCount() || this.GetImageSlider().buttonVisibilityMode != NavigationButtonVisibilityModeEnum.Auto) 3277 return NavigationBarThumbnailStrategy.prototype.UpdateNavigationButtonsState.call(this); 3278 return false; 3279 }, 3280 CanCreateNavigationButtons: function() { 3281 if(this.GetImageSlider().buttonVisibilityMode == NavigationButtonVisibilityModeEnum.Always) 3282 return true; 3283 return NavigationBarThumbnailStrategy.prototype.CanCreateNavigationButtons.call(this); 3284 }, 3285 GetVisibleItemCount: function() { 3286 return this.GetImageSlider().visibleItemsCount || this.visibleItemCount; 3287 } 3288 }); 3289 var ClientGalleryImageSlider = ASPx.CreateClass(ASPxClientImageSlider, { 3290 constructor: function(name) { 3291 this.constructor.prototype.constructor.call(this, name); 3292 this.OnLoadItemsViaCallback = new ASPxClientEvent(); 3293 },
3294 ExtendItemsPerRequest: function(indexes, startIndex, itemsCount, allowFunc) { 3295 return indexes; 3296 }, 3297 DoLoadItemsViaCallback: function(indexArray) { 3298 this.RaiseLoadItemsViaCallback(indexArray); 3299 }, 3300 RaiseLoadItemsViaCallback: function(pendingQueue) { 3301 if(!this.OnLoadItemsViaCallback.IsEmpty() && pendingQueue.length > 0) 3302 this.OnLoadItemsViaCallback.FireEvent(this, pendingQueue); 3303 } 3304 }); 3305 ASPx.ClientGalleryImageSlider = ClientGalleryImageSlider; 3306 window.ASPxClientImageSlider = ASPxClientImageSlider; 3307 window.ASPxClientImageSliderItemEventArgs = ASPxClientImageSliderItemEventArgs; 3308 window.ASPxClientImageSliderItem = ASPxClientImageSliderItem; 3309 window.ASPxClientImageZoomNavigator = ASPxClientImageZoomNavigator; 3310})(); 3311
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.