{"version":3,"sources":["../controller/home/custom-scrollbar.js","../controller/home/splash.js","../controller/home.js","../controller/help.js","../controller/routes.js","../../../../../../../../../../../../../module-create.js"],"names":["define","jQuery","$","fn","customScrollbar","options","args","defaultOptions","skin","undefined","hScroll","vScroll","updateOnWindowResize","animationSpeed","onCustomScroll","swipeSpeed","wheelSpeed","fixedThumbWidth","fixedThumbHeight","preventDefaultScroll","Scrollable","element","this","$element","addScrollableClass","addSkinClass","addScrollBarComponents","vScrollbar","Scrollbar","VSizing","hScrollbar","HSizing","data","initKeyboardScrolling","bindEvents","prototype","hasClass","scrollableAdded","addClass","removeScrollableClass","removeClass","skinClassAdded","removeSkinClass","assignViewPort","$viewPort","length","wrapInner","viewPortAdded","assignOverview","$overview","overviewAdded","addScrollBar","removeScrollbarComponents","removeScrollbar","unwrap","orientation","find","remove","fun","resize","keepPosition","scrollTo","scrollToElement","scrollToXY","x","y","scrollToX","scrollToY","scrollOverviewTo","scrollByX","overviewPosition","scrollByY","removeKeyboardScrolling","setAnimationSpeed","speed","isInside","wrappingElement","$wrappingElement","elementOffset","offset","wrappingElementOffset","top","left","height","width","_this","elementKeydown","event","document","activeElement","keyScroll","attr","keydown","removeAttr","unbind","on","scrollable","sizing","$scrollBar","scrollBar","$thumb","setScrollPosition","initMouseMoveScrolling","initMouseWheelScrolling","initTouchScrolling","initMouseClickScrolling","initWindowResize","overviewSize","size","calculateViewPortSize","viewPortSize","ratio","thumbSize","calculateThumbSize","maxThumbPosition","calculateMaxThumbPosition","maxOverviewPosition","calculateMaxOverviewPosition","enabled","scrollPercent","rescroll","toggle","elementSize","maxSizeUsed","maxSize","Math","min","fixedSize","fixedThumbSize","max","minSize","mousedown","startMouseMoveScrolling","documentMouseup","stopMouseMoveScrolling","mouseup","documentMousemove","mouseMoveScroll","mousemove","click","stopPropagation","removeMouseMoveScrolling","mousewheel","delta","deltaX","deltaY","scrolled","mouseWheelScroll","stopEventConditionally","removeMouseWheelScrolling","addEventListener","elementTouchstart","startTouchScrolling","documentTouchmove","touchScroll","elementTouchend","stopTouchScrolling","removeTouchScrolling","removeEventListener","scrollBarClick","mouseClickScroll","removeMouseClickScrolling","windowResize","window","removeWindowResize","isKeyScrolling","key","keyScrollDelta","scrollingKey","scrollingKeys","mouseMoveScrolling","setUnselectable","setScrollEvent","value","mouseDelta","scrollEvent","scrollThumbBy","touches","touchScrolling","scrollOverviewBy","wheelDelta","scrollAxis","offsetComponent","keyDown","which","thumbPosition","positionOrMax","oldScrollPercent","triggerCustomScroll","position","animate","setScrollPositionWithAnimation","p","trigger","direction","scrollDirection","css","thumbAnimationOpts","overviewAnimationOpts","pageX","pageY","overviewOffset","condition","preventDefault","$el","arg","parseInt","event1","event2","oldPercent","newPercent","37","39","38","40","33","34","each","extend","handler","orgEvent","slice","call","arguments","fix","type","detail","axis","HORIZONTAL_AXIS","wheelDeltaY","wheelDeltaX","unshift","dispatch","handle","apply","types","fixHooks","i","mouseHooks","special","setup","onmousewheel","teardown","bind","unmousewheel","SplashScreen","init","isHomePage","$splashScreen","$splashWrapper","$splashDesc","$splashDiagram","redirectUrl","show","hide","$this","prepend","modal","disableClosing","initNav","initModulesNav","initCloseButton","selectedEl","selectedPanelId","parent","splashObj","not","selectedModuleName","text","class","selectedClass","first","$closeButton","e","off","prop","closeSplash","url","location","adaptHeight","$splashContentWrap","maxHeight","helpers","splash","$mainContainer","homeController","entrySplash","start","self","get","_url","success","response","$splash","append","_","defaults","Home","Main","actions","index"],"mappings":"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","file":"controllers.min.js","sourcesContent":["define('taoCe/controller/home/custom-scrollbar',['jquery'], function(jQuery){\n(function ($) {\n\n $.fn.customScrollbar = function (options, args) {\n\n var defaultOptions = {\n skin: undefined,\n hScroll: true,\n vScroll: true,\n updateOnWindowResize: false,\n animationSpeed: 300,\n onCustomScroll: undefined,\n swipeSpeed: 1,\n wheelSpeed: 40,\n fixedThumbWidth: undefined,\n fixedThumbHeight: undefined,\n preventDefaultScroll: false\n }\n\n var Scrollable = function (element, options) {\n this.$element = $(element);\n this.options = options;\n this.addScrollableClass();\n this.addSkinClass();\n this.addScrollBarComponents();\n if (this.options.vScroll)\n this.vScrollbar = new Scrollbar(this, new VSizing());\n if (this.options.hScroll)\n this.hScrollbar = new Scrollbar(this, new HSizing());\n this.$element.data(\"scrollable\", this);\n this.initKeyboardScrolling();\n this.bindEvents();\n }\n\n Scrollable.prototype = {\n\n addScrollableClass: function () {\n if (!this.$element.hasClass(\"scrollable\")) {\n this.scrollableAdded = true;\n this.$element.addClass(\"scrollable\");\n }\n },\n\n removeScrollableClass: function () {\n if (this.scrollableAdded)\n this.$element.removeClass(\"scrollable\");\n },\n\n addSkinClass: function () {\n if (typeof(this.options.skin) == \"string\" && !this.$element.hasClass(this.options.skin)) {\n this.skinClassAdded = true;\n this.$element.addClass(this.options.skin);\n }\n },\n\n removeSkinClass: function () {\n if (this.skinClassAdded)\n this.$element.removeClass(this.options.skin);\n },\n\n addScrollBarComponents: function () {\n this.assignViewPort();\n if (this.$viewPort.length == 0) {\n this.$element.wrapInner(\"
\");\n this.assignViewPort();\n this.viewPortAdded = true;\n }\n this.assignOverview();\n if (this.$overview.length == 0) {\n this.$viewPort.wrapInner(\"
\");\n this.assignOverview();\n this.overviewAdded = true;\n }\n this.addScrollBar(\"vertical\", \"prepend\");\n this.addScrollBar(\"horizontal\", \"append\");\n },\n\n removeScrollbarComponents: function () {\n this.removeScrollbar(\"vertical\");\n this.removeScrollbar(\"horizontal\");\n if (this.overviewAdded)\n this.$element.unwrap();\n if (this.viewPortAdded)\n this.$element.unwrap();\n },\n\n removeScrollbar: function (orientation) {\n if (this[orientation + \"ScrollbarAdded\"])\n this.$element.find(\".scroll-bar.\" + orientation).remove();\n },\n\n assignViewPort: function () {\n this.$viewPort = this.$element.find(\".viewport\");\n },\n\n assignOverview: function () {\n this.$overview = this.$viewPort.find(\".overview\");\n },\n\n addScrollBar: function (orientation, fun) {\n if (this.$element.find(\".scroll-bar.\" + orientation).length == 0) {\n this.$element[fun](\"
\")\n this[orientation + \"ScrollbarAdded\"] = true;\n }\n },\n\n resize: function (keepPosition) {\n if (this.vScrollbar)\n this.vScrollbar.resize(keepPosition);\n if (this.hScrollbar)\n this.hScrollbar.resize(keepPosition);\n },\n\n scrollTo: function (element) {\n if (this.vScrollbar)\n this.vScrollbar.scrollToElement(element);\n if (this.hScrollbar)\n this.hScrollbar.scrollToElement(element);\n },\n\n scrollToXY: function (x, y) {\n this.scrollToX(x);\n this.scrollToY(y);\n },\n\n scrollToX: function (x) {\n if (this.hScrollbar)\n this.hScrollbar.scrollOverviewTo(x, true);\n },\n\n scrollToY: function (y) {\n if (this.vScrollbar)\n this.vScrollbar.scrollOverviewTo(y, true);\n },\n\n scrollByX: function (x) {\n if (this.hScrollbar)\n this.scrollToX(this.hScrollbar.overviewPosition() + x);\n },\n\n scrollByY: function (y) {\n if (this.vScrollbar)\n this.scrollToY(this.vScrollbar.overviewPosition() + y);\n },\n\n remove: function () {\n this.removeScrollableClass();\n this.removeSkinClass();\n this.removeScrollbarComponents();\n this.$element.data(\"scrollable\", null);\n this.removeKeyboardScrolling();\n if (this.vScrollbar)\n this.vScrollbar.remove();\n if (this.hScrollbar)\n this.hScrollbar.remove();\n },\n\n setAnimationSpeed: function (speed) {\n this.options.animationSpeed = speed;\n },\n\n isInside: function (element, wrappingElement) {\n var $element = $(element);\n var $wrappingElement = $(wrappingElement);\n var elementOffset = $element.offset();\n var wrappingElementOffset = $wrappingElement.offset();\n return (elementOffset.top >= wrappingElementOffset.top) && (elementOffset.left >= wrappingElementOffset.left) &&\n (elementOffset.top + $element.height() <= wrappingElementOffset.top + $wrappingElement.height()) &&\n (elementOffset.left + $element.width() <= wrappingElementOffset.left + $wrappingElement.width())\n },\n\n initKeyboardScrolling: function () {\n var _this = this;\n\n this.elementKeydown = function (event) {\n if (document.activeElement === _this.$element[0]) {\n if (_this.vScrollbar)\n _this.vScrollbar.keyScroll(event);\n if (_this.hScrollbar)\n _this.hScrollbar.keyScroll(event);\n }\n }\n\n this.$element\n .attr('tabindex', '-1')\n .keydown(this.elementKeydown);\n },\n\n removeKeyboardScrolling: function () {\n this.$element\n .removeAttr('tabindex')\n .unbind(\"keydown\", this.elementKeydown);\n },\n\n bindEvents: function () {\n if (this.options.onCustomScroll)\n this.$element.on(\"customScroll\", this.options.onCustomScroll);\n }\n\n }\n\n var Scrollbar = function (scrollable, sizing) {\n this.scrollable = scrollable;\n this.sizing = sizing\n this.$scrollBar = this.sizing.scrollBar(this.scrollable.$element);\n this.$thumb = this.$scrollBar.find(\".thumb\");\n this.setScrollPosition(0, 0);\n this.resize();\n this.initMouseMoveScrolling();\n this.initMouseWheelScrolling();\n this.initTouchScrolling();\n this.initMouseClickScrolling();\n this.initWindowResize();\n }\n\n Scrollbar.prototype = {\n\n resize: function (keepPosition) {\n this.overviewSize = this.sizing.size(this.scrollable.$overview);\n this.calculateViewPortSize();\n this.sizing.size(this.scrollable.$viewPort, this.viewPortSize);\n this.ratio = this.viewPortSize / this.overviewSize;\n this.sizing.size(this.$scrollBar, this.viewPortSize);\n this.thumbSize = this.calculateThumbSize();\n this.sizing.size(this.$thumb, this.thumbSize);\n this.maxThumbPosition = this.calculateMaxThumbPosition();\n this.maxOverviewPosition = this.calculateMaxOverviewPosition();\n this.enabled = (this.overviewSize > this.viewPortSize);\n if (this.scrollPercent === undefined)\n this.scrollPercent = 0.0;\n if (this.enabled)\n this.rescroll(keepPosition);\n else\n this.setScrollPosition(0, 0);\n this.$scrollBar.toggle(this.enabled);\n },\n\n calculateViewPortSize: function () {\n var elementSize = this.sizing.size(this.scrollable.$element);\n if (elementSize > 0 && !this.maxSizeUsed) {\n this.viewPortSize = elementSize;\n this.maxSizeUsed = false;\n }\n else {\n var maxSize = this.sizing.maxSize(this.scrollable.$element);\n this.viewPortSize = Math.min(maxSize, this.overviewSize);\n this.maxSizeUsed = true;\n }\n },\n\n calculateThumbSize: function () {\n var fixedSize = this.sizing.fixedThumbSize(this.scrollable.options)\n var size;\n if (fixedSize)\n size = fixedSize;\n else\n size = this.ratio * this.viewPortSize\n return Math.max(size, this.sizing.minSize(this.$thumb));\n },\n\n initMouseMoveScrolling: function () {\n var _this = this;\n this.$thumb.mousedown(function (event) {\n if (_this.enabled)\n _this.startMouseMoveScrolling(event);\n });\n this.documentMouseup = function (event) {\n _this.stopMouseMoveScrolling(event);\n };\n $(document).mouseup(this.documentMouseup);\n this.documentMousemove = function (event) {\n _this.mouseMoveScroll(event);\n };\n $(document).mousemove(this.documentMousemove);\n this.$thumb.click(function (event) {\n event.stopPropagation();\n });\n },\n\n removeMouseMoveScrolling: function () {\n this.$thumb.unbind();\n $(document).unbind(\"mouseup\", this.documentMouseup);\n $(document).unbind(\"mousemove\", this.documentMousemove);\n },\n\n initMouseWheelScrolling: function () {\n var _this = this;\n this.scrollable.$element.mousewheel(function (event, delta, deltaX, deltaY) {\n if (_this.enabled) {\n var scrolled = _this.mouseWheelScroll(deltaX, deltaY);\n _this.stopEventConditionally(event, scrolled);\n }\n });\n },\n\n removeMouseWheelScrolling: function () {\n this.scrollable.$element.unbind(\"mousewheel\");\n },\n\n initTouchScrolling: function () {\n if (document.addEventListener) {\n var _this = this;\n this.elementTouchstart = function (event) {\n if (_this.enabled)\n _this.startTouchScrolling(event);\n }\n this.scrollable.$element[0].addEventListener(\"touchstart\", this.elementTouchstart);\n this.documentTouchmove = function (event) {\n _this.touchScroll(event);\n }\n document.addEventListener(\"touchmove\", this.documentTouchmove);\n this.elementTouchend = function (event) {\n _this.stopTouchScrolling(event);\n }\n this.scrollable.$element[0].addEventListener(\"touchend\", this.elementTouchend);\n }\n },\n\n removeTouchScrolling: function () {\n if (document.addEventListener) {\n this.scrollable.$element[0].removeEventListener(\"touchstart\", this.elementTouchstart);\n document.removeEventListener(\"touchmove\", this.documentTouchmove);\n this.scrollable.$element[0].removeEventListener(\"touchend\", this.elementTouchend);\n }\n },\n\n initMouseClickScrolling: function () {\n var _this = this;\n this.scrollBarClick = function (event) {\n _this.mouseClickScroll(event);\n };\n this.$scrollBar.click(this.scrollBarClick);\n },\n\n removeMouseClickScrolling: function () {\n this.$scrollBar.unbind(\"click\", this.scrollBarClick);\n },\n\n initWindowResize: function () {\n if (this.scrollable.options.updateOnWindowResize) {\n var _this = this;\n this.windowResize = function () {\n _this.resize();\n };\n $(window).resize(this.windowResize);\n }\n },\n\n removeWindowResize: function () {\n $(window).unbind(\"resize\", this.windowResize);\n },\n\n isKeyScrolling: function (key) {\n return this.keyScrollDelta(key) != null;\n },\n\n keyScrollDelta: function (key) {\n for (var scrollingKey in this.sizing.scrollingKeys)\n if (scrollingKey == key)\n return this.sizing.scrollingKeys[key](this.viewPortSize);\n return null;\n },\n\n startMouseMoveScrolling: function (event) {\n this.mouseMoveScrolling = true;\n $(\"html\").addClass(\"not-selectable\");\n this.setUnselectable($(\"html\"), \"on\");\n this.setScrollEvent(event);\n },\n\n stopMouseMoveScrolling: function (event) {\n this.mouseMoveScrolling = false;\n $(\"html\").removeClass(\"not-selectable\");\n this.setUnselectable($(\"html\"), null);\n },\n\n setUnselectable: function (element, value) {\n if (element.attr(\"unselectable\") != value) {\n element.attr(\"unselectable\", value);\n element.find(':not(input)').attr('unselectable', value);\n }\n },\n\n mouseMoveScroll: function (event) {\n if (this.mouseMoveScrolling) {\n var delta = this.sizing.mouseDelta(this.scrollEvent, event);\n this.scrollThumbBy(delta);\n this.setScrollEvent(event);\n }\n },\n\n startTouchScrolling: function (event) {\n if (event.touches && event.touches.length == 1) {\n this.setScrollEvent(event.touches[0]);\n this.touchScrolling = true;\n event.stopPropagation();\n }\n },\n\n touchScroll: function (event) {\n if (this.touchScrolling && event.touches && event.touches.length == 1) {\n var delta = -this.sizing.mouseDelta(this.scrollEvent, event.touches[0]) * this.scrollable.options.swipeSpeed;\n var scrolled = this.scrollOverviewBy(delta);\n if (scrolled)\n this.setScrollEvent(event.touches[0]);\n this.stopEventConditionally(event, scrolled);\n }\n },\n\n stopTouchScrolling: function (event) {\n this.touchScrolling = false;\n event.stopPropagation();\n },\n\n mouseWheelScroll: function (deltaX, deltaY) {\n var delta = -this.sizing.wheelDelta(deltaX, deltaY) * this.scrollable.options.wheelSpeed;\n if (delta != 0)\n return this.scrollOverviewBy(delta);\n },\n\n mouseClickScroll: function (event) {\n var delta = this.viewPortSize - 20;\n if (event[\"page\" + this.sizing.scrollAxis()] < this.$thumb.offset()[this.sizing.offsetComponent()])\n // mouse click over thumb\n delta = -delta;\n this.scrollOverviewBy(delta);\n },\n\n keyScroll: function (event) {\n var keyDown = event.which;\n if (this.enabled && this.isKeyScrolling(keyDown)) {\n var scrolled = this.scrollOverviewBy(this.keyScrollDelta(keyDown));\n this.stopEventConditionally(event, scrolled);\n }\n },\n\n scrollThumbBy: function (delta) {\n var thumbPosition = this.thumbPosition();\n thumbPosition += delta;\n thumbPosition = this.positionOrMax(thumbPosition, this.maxThumbPosition);\n var oldScrollPercent = this.scrollPercent;\n this.scrollPercent = thumbPosition / this.maxThumbPosition;\n if (oldScrollPercent != this.scrollPercent) {\n var overviewPosition = (thumbPosition * this.maxOverviewPosition) / this.maxThumbPosition;\n this.setScrollPosition(overviewPosition, thumbPosition);\n this.triggerCustomScroll(oldScrollPercent);\n return true\n }\n else\n return false;\n },\n\n thumbPosition: function () {\n return this.$thumb.position()[this.sizing.offsetComponent()];\n },\n\n scrollOverviewBy: function (delta) {\n var overviewPosition = this.overviewPosition() + delta;\n return this.scrollOverviewTo(overviewPosition, false);\n },\n\n overviewPosition: function () {\n return -this.scrollable.$overview.position()[this.sizing.offsetComponent()];\n },\n\n scrollOverviewTo: function (overviewPosition, animate) {\n overviewPosition = this.positionOrMax(overviewPosition, this.maxOverviewPosition);\n var oldScrollPercent = this.scrollPercent;\n this.scrollPercent = overviewPosition / this.maxOverviewPosition;\n if (oldScrollPercent != this.scrollPercent) {\n var thumbPosition = this.scrollPercent * this.maxThumbPosition;\n if (animate)\n this.setScrollPositionWithAnimation(overviewPosition, thumbPosition);\n else\n this.setScrollPosition(overviewPosition, thumbPosition);\n this.triggerCustomScroll(oldScrollPercent);\n return true;\n }\n else\n return false;\n },\n\n positionOrMax: function (p, max) {\n if (p < 0)\n return 0;\n else if (p > max)\n return max;\n else\n return p;\n },\n\n triggerCustomScroll: function (oldScrollPercent) {\n this.scrollable.$element.trigger(\"customScroll\", {\n scrollAxis: this.sizing.scrollAxis(),\n direction: this.sizing.scrollDirection(oldScrollPercent, this.scrollPercent),\n scrollPercent: this.scrollPercent * 100\n }\n );\n },\n\n rescroll: function (keepPosition) {\n if (keepPosition) {\n var overviewPosition = this.positionOrMax(this.overviewPosition(), this.maxOverviewPosition);\n this.scrollPercent = overviewPosition / this.maxOverviewPosition;\n var thumbPosition = this.scrollPercent * this.maxThumbPosition;\n this.setScrollPosition(overviewPosition, thumbPosition);\n }\n else {\n var thumbPosition = this.scrollPercent * this.maxThumbPosition;\n var overviewPosition = this.scrollPercent * this.maxOverviewPosition;\n this.setScrollPosition(overviewPosition, thumbPosition);\n }\n },\n\n setScrollPosition: function (overviewPosition, thumbPosition) {\n this.$thumb.css(this.sizing.offsetComponent(), thumbPosition + \"px\");\n this.scrollable.$overview.css(this.sizing.offsetComponent(), -overviewPosition + \"px\");\n },\n\n setScrollPositionWithAnimation: function (overviewPosition, thumbPosition) {\n var thumbAnimationOpts = {};\n var overviewAnimationOpts = {};\n thumbAnimationOpts[this.sizing.offsetComponent()] = thumbPosition + \"px\";\n this.$thumb.animate(thumbAnimationOpts, this.scrollable.options.animationSpeed);\n overviewAnimationOpts[this.sizing.offsetComponent()] = -overviewPosition + \"px\";\n this.scrollable.$overview.animate(overviewAnimationOpts, this.scrollable.options.animationSpeed);\n },\n\n calculateMaxThumbPosition: function () {\n return Math.max(0, this.sizing.size(this.$scrollBar) - this.thumbSize);\n },\n\n calculateMaxOverviewPosition: function () {\n return Math.max(0, this.sizing.size(this.scrollable.$overview) - this.sizing.size(this.scrollable.$viewPort));\n },\n\n setScrollEvent: function (event) {\n var attr = \"page\" + this.sizing.scrollAxis();\n if (!this.scrollEvent || this.scrollEvent[attr] != event[attr])\n this.scrollEvent = {pageX: event.pageX, pageY: event.pageY};\n },\n\n scrollToElement: function (element) {\n var $element = $(element);\n if (this.sizing.isInside($element, this.scrollable.$overview) && !this.sizing.isInside($element, this.scrollable.$viewPort)) {\n var elementOffset = $element.offset();\n var overviewOffset = this.scrollable.$overview.offset();\n var viewPortOffset = this.scrollable.$viewPort.offset();\n this.scrollOverviewTo(elementOffset[this.sizing.offsetComponent()] - overviewOffset[this.sizing.offsetComponent()], true);\n }\n },\n\n remove: function () {\n this.removeMouseMoveScrolling();\n this.removeMouseWheelScrolling();\n this.removeTouchScrolling();\n this.removeMouseClickScrolling();\n this.removeWindowResize();\n },\n\n stopEventConditionally: function (event, condition) {\n if (condition || this.scrollable.options.preventDefaultScroll) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n }\n\n var HSizing = function () {\n }\n\n HSizing.prototype = {\n size: function ($el, arg) {\n if (arg)\n return $el.width(arg);\n else\n return $el.width();\n },\n\n minSize: function ($el) {\n return parseInt($el.css(\"min-width\")) || 0;\n },\n\n maxSize: function ($el) {\n return parseInt($el.css(\"max-width\")) || 0;\n },\n\n fixedThumbSize: function (options) {\n return options.fixedThumbWidth;\n },\n\n scrollBar: function ($el) {\n return $el.find(\".scroll-bar.horizontal\");\n },\n\n mouseDelta: function (event1, event2) {\n return event2.pageX - event1.pageX;\n },\n\n offsetComponent: function () {\n return \"left\";\n },\n\n wheelDelta: function (deltaX, deltaY) {\n return deltaX;\n },\n\n scrollAxis: function () {\n return \"X\";\n },\n\n scrollDirection: function (oldPercent, newPercent) {\n return oldPercent < newPercent ? \"right\" : \"left\";\n },\n\n scrollingKeys: {\n 37: function (viewPortSize) {\n return -10; //arrow left\n },\n 39: function (viewPortSize) {\n return 10; //arrow right\n }\n },\n\n isInside: function (element, wrappingElement) {\n var $element = $(element);\n var $wrappingElement = $(wrappingElement);\n var elementOffset = $element.offset();\n var wrappingElementOffset = $wrappingElement.offset();\n return (elementOffset.left >= wrappingElementOffset.left) &&\n (elementOffset.left + $element.width() <= wrappingElementOffset.left + $wrappingElement.width());\n }\n\n }\n\n var VSizing = function () {\n }\n\n VSizing.prototype = {\n\n size: function ($el, arg) {\n if (arg)\n return $el.height(arg);\n else\n return $el.height();\n },\n\n minSize: function ($el) {\n return parseInt($el.css(\"min-height\")) || 0;\n },\n\n maxSize: function ($el) {\n return parseInt($el.css(\"max-height\")) || 0;\n },\n\n fixedThumbSize: function (options) {\n return options.fixedThumbHeight;\n },\n\n scrollBar: function ($el) {\n return $el.find(\".scroll-bar.vertical\");\n },\n\n mouseDelta: function (event1, event2) {\n return event2.pageY - event1.pageY;\n },\n\n offsetComponent: function () {\n return \"top\";\n },\n\n wheelDelta: function (deltaX, deltaY) {\n return deltaY;\n },\n\n scrollAxis: function () {\n return \"Y\";\n },\n\n scrollDirection: function (oldPercent, newPercent) {\n return oldPercent < newPercent ? \"down\" : \"up\";\n },\n\n scrollingKeys: {\n 38: function (viewPortSize) {\n return -10; //arrow up\n },\n 40: function (viewPortSize) {\n return 10; //arrow down\n },\n 33: function (viewPortSize) {\n return -(viewPortSize - 20); //page up\n },\n 34: function (viewPortSize) {\n return viewPortSize - 20; //page down\n }\n },\n\n isInside: function (element, wrappingElement) {\n var $element = $(element);\n var $wrappingElement = $(wrappingElement);\n var elementOffset = $element.offset();\n var wrappingElementOffset = $wrappingElement.offset();\n return (elementOffset.top >= wrappingElementOffset.top) &&\n (elementOffset.top + $element.height() <= wrappingElementOffset.top + $wrappingElement.height());\n }\n\n }\n\n return this.each(function () {\n if (options == undefined)\n options = defaultOptions;\n if (typeof(options) == \"string\") {\n var scrollable = $(this).data(\"scrollable\");\n if (scrollable)\n scrollable[options](args);\n }\n else if (typeof(options) == \"object\") {\n options = $.extend(defaultOptions, options);\n new Scrollable($(this), options);\n }\n else\n throw \"Invalid type of options\";\n });\n\n }\n ;\n\n})\n (jQuery);\n\n(function ($) {\n\n var types = ['DOMMouseScroll', 'mousewheel'];\n\n if ($.event.fixHooks) {\n for (var i = types.length; i;) {\n $.event.fixHooks[ types[--i] ] = $.event.mouseHooks;\n }\n }\n\n $.event.special.mousewheel = {\n setup: function () {\n if (this.addEventListener) {\n for (var i = types.length; i;) {\n this.addEventListener(types[--i], handler, false);\n }\n } else {\n this.onmousewheel = handler;\n }\n },\n\n teardown: function () {\n if (this.removeEventListener) {\n for (var i = types.length; i;) {\n this.removeEventListener(types[--i], handler, false);\n }\n } else {\n this.onmousewheel = null;\n }\n }\n };\n\n $.fn.extend({\n mousewheel: function (fn) {\n return fn ? this.bind(\"mousewheel\", fn) : this.trigger(\"mousewheel\");\n },\n\n unmousewheel: function (fn) {\n return this.unbind(\"mousewheel\", fn);\n }\n });\n\n\n function handler(event) {\n var orgEvent = event || window.event, args = [].slice.call(arguments, 1), delta = 0, returnValue = true, deltaX = 0, deltaY = 0;\n event = $.event.fix(orgEvent);\n event.type = \"mousewheel\";\n\n // Old school scrollwheel delta\n if (orgEvent.wheelDelta) {\n delta = orgEvent.wheelDelta / 120;\n }\n if (orgEvent.detail) {\n delta = -orgEvent.detail / 3;\n }\n\n // New school multidimensional scroll (touchpads) deltas\n deltaY = delta;\n\n // Gecko\n if (orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS) {\n deltaY = 0;\n deltaX = delta;\n }\n\n // Webkit\n if (orgEvent.wheelDeltaY !== undefined) {\n deltaY = orgEvent.wheelDeltaY / 120;\n }\n if (orgEvent.wheelDeltaX !== undefined) {\n deltaX = orgEvent.wheelDeltaX / 120;\n }\n\n // Add event and delta to the front of the arguments\n args.unshift(event, delta, deltaX, deltaY);\n\n return ($.event.dispatch || $.event.handle).apply(this, args);\n }\n\n})(jQuery);\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2014 (original work) Open Assessment Technologies SA;\n *\n *\n */\ndefine('taoCe/controller/home/splash',['jquery', 'taoCe/controller/home/custom-scrollbar'], function ($) {\n 'use strict';\n\n\n /**\n * The SplashScreen creates a modal popup that contains a dynamic diagram of the TAO's workflow.\n * It relies on content that should be there on a .splash-screen-wrapper element. (This content is loaded from the\n * server by {@link module:taoCe/controller/home}\n *\n * @exports taoCe/controller/home/splash\n */\n var SplashScreen = {\n\n /**\n * Initialize the splash screen\n * @param {Boolean} [isHomePage = false] - less options if not used as an entry splash\n */\n init: function (isHomePage) {\n\n //console.log(this)\n this.$splashScreen = $('#splash-screen');\n var $splashWrapper = $('.splash-screen-wrapper');\n var $splashDesc = $('.desc', this.$splashScreen);\n var $splashDiagram = $('.diagram', this.$splashScreen);\n\n //Url to redirect after closing\n this.redirectUrl = '';\n\n //overwrites main styles\n $splashWrapper.css('display', 'block');\n\n if (!isHomePage) {\n $('.modal-footer', this.$splashScreen).hide();\n }\n else {\n $('.modal-footer', this.$splashScreen).show();\n }\n\n /**\n * Place lock icon for disabled modules\n */\n $('[data-module-name]', $splashDiagram).each(function () {\n var $this = $(this);\n\n if ($this.hasClass('disabled')) {\n\n\n $this.find('span').remove();\n $this.prepend('');\n }\n });\n\n /**\n * Initialize custom scrollbar for the description\n */\n $splashDesc.customScrollbar({\n updateOnWindowResize: true,\n skin: 'gray-skin',\n hScroll: false\n });\n\n /**\n * Open modal window immediately\n */\n this.$splashScreen.modal({disableClosing: isHomePage});\n\n this.initNav();\n this.initModulesNav();\n this.initCloseButton();\n //this.adaptHeight();\n },\n\n /**\n * Initialize a listener for the navigation tab buttons\n */\n initNav: function () {\n $('.modal-nav a', this.$splashScreen).on('click', function () {\n var selectedEl = $(this),\n selectedPanelId = selectedEl.data('panel');\n\n $('.modal-nav li').removeClass('active');\n $(\"a[data-panel='\" + selectedPanelId + \"']\").parent().addClass('active');\n\n $('.panels').hide();\n $(\"div[data-panel-id='\" + selectedPanelId + \"']\").show();\n });\n },\n\n /**\n * Initialize a listener for the modules buttons\n */\n initModulesNav: function () {\n var splashObj = this;\n\n $('[data-module-name]', this.$splashScreen).not('.disabled').on('click', function () {\n var selectedEl = $(this),\n selectedModuleName = selectedEl.data('module-name');\n splashObj.redirectUrl = selectedEl.data('url');\n\n $('#splash-close-btn').removeAttr('disabled').find('.module-name').text(selectedEl.text());\n\n if (!selectedEl.hasClass('new-module')) {\n var selectedClass = selectedEl.hasClass('groups') ?\n $('.test-takers').find('span').first().attr('class') :\n selectedEl.find('span').first().attr('class');\n $('.module-desc>span').attr({'class': selectedClass});\n }\n else {\n $('.module-desc>span').attr({'class': ''});\n }\n\n $('[data-module-name]').removeClass('active');\n $('.module-desc').hide();\n\n selectedEl.addClass('active');\n $(\"div[data-module='\" + selectedModuleName + \"']\").show();\n\n $('.desc').customScrollbar('resize', true);\n });\n },\n\n /**\n * Initialize a listener for the close button\n */\n initCloseButton: function () {\n var splashObj = this;\n var $closeButton = $('#splash-close-btn');\n\n //trigger the close by keypress enter\n $(document).on('keypress', function (e) {\n if (e.which === 13) {\n $closeButton.trigger('click');\n }\n });\n\n //clean unbind\n this.$splashScreen.on('closed.modal', function () {\n $(document).off('keypress');\n });\n\n $closeButton.on('click', function (e) {\n e.preventDefault();\n\n //if the checkbox is checked, then add and set the additional GET parameter 'nosplash'\n if ($('#nosplash').prop('checked')) {\n splashObj.redirectUrl += '&nosplash=true';\n }\n\n splashObj.closeSplash(splashObj.redirectUrl);\n });\n },\n\n /**\n * Close the splash screen and redirect to selected module\n * @param {string} url\n */\n closeSplash: function (url) {\n window.location = url;\n },\n\n /**\n * limit height of splash to make sure all buttons can be accessed on smaller screens\n */\n adaptHeight: function() {\n //console.log(this)\n var splashObj = this,\n $splashContentWrap = splashObj.find('.splash-content-wrap'),\n // 40 to have some nice margin below\n maxHeight = $(window).height() - splashObj.find('.modal-title').offset().top - 40;\n $splashContentWrap.css({ maxHeight: maxHeight });\n }\n\n };\n\n return SplashScreen;\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2014 (original work) Open Assessment Technologies SA;\n *\n *\n */\ndefine('taoCe/controller/home',[\n 'jquery',\n 'helpers',\n 'taoCe/controller/home/splash'\n], function($, helpers, splash) {\n 'use strict';\n\n var $mainContainer = $('body');\n\n /**\n * The homeController set up the splash screen.\n *\n * @exports taoCe/controller/home\n */\n var homeController = {\n\n\n entrySplash : true,\n\n /**\n * Setup the splash screen: loads it's content and initialize the component.\n */\n start: function start() {\n var self = this;\n\n //the splash content is loaded only once.\n if ($('#splash-screen', $mainContainer).length === 0) {\n $.get(helpers._url('splash', 'Home', 'taoCe')).success(function(response) {\n var $splash = $(response);\n $splash.css('display', 'none');\n $mainContainer.append($splash);\n\n splash.init(self.entrySplash);\n });\n } else {\n splash.init(self.entrySplash);\n }\n }\n };\n\n return homeController;\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2014 (original work) Open Assessment Technologies SA;\n *\n *\n */\ndefine('taoCe/controller/help',[\n 'lodash',\n 'taoCe/controller/home'\n], function(_, homeController){\n 'use strict';\n\n return _.defaults({ entrySplash : false }, homeController);\n});\n\n","\n/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2014 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n * \n * \n */\n\n//@see http://forge.taotesting.com/projects/tao/wiki/Front_js\ndefine('taoCe/controller/routes',[],function(){\n 'use strict';\n\n return {\n 'Home' : {\n 'css' : 'home.css'\n },\n 'Main':{\n 'actions': {\n 'index' : 'controller/home'\n }\n }\n };\n});\n","\ndefine(\"taoCe/loader/controllers.min\", function(){});\n"]}