diff --git a/WebContent/html/css/stylesheet.css b/WebContent/html/css/stylesheet.css index 96e4450..c6beca9 100644 --- a/WebContent/html/css/stylesheet.css +++ b/WebContent/html/css/stylesheet.css @@ -1,93 +1,93 @@ -body{ - background-color: #94969A; - padding-top: 50px; - height: 100vh; - overflow-x: hidden; -} - -a.divlink{ - color: black; -} - -div.sidebar{ - display: inline-block; - border-right-style: solid; - height: 100vh; - background-color: #E9EAEB; - width: 300px; - position: fixed; -} - -div.displayDevice{ - display: inline-block; - position: absolute; - padding-left: 30px; - width: 100%; - height: 100%; - overflow: scroll; - left: 300px; -} - -div.profileContainer{ - display: inline-block; - position: absolute; - padding-left: 30px; - width: 100%; - height: 100%; - overflow: scroll; - left: 200px; - top: 70px; -} - -div.modal{ - display:none; - position: fixed; - z-index: 1; - left: 0; - top: 0; - width: 100%; - height: 100%; - overflow: auto; - background-color: rgb(0,0,0); - background-color: rgba(0,0,0,0.4); -} - -div.modal-content{ - position: relative; - background-color: #fefefe; - margin: 5% auto; - padding: 10px; - border: 1px solid #888; - width: 80%; - max-height: 80%; - text-align: center; - vertical-align: center; - align-items: center; -} - -div.modal-body{ - padding: 10px; - overflow: auto; -} - -input[type=text]{ - width: 60%; -} - - -span.close{ - color: black; - float: right; - font-size: 28px; - font-weight: bold; -} -span.close:hover, -span.close:focus{ - color: black; - text-decoration: none; - cursor: pointer; -} -ul.nav{ - padding: 0px; -} - +body{ + background-color: #94969A; + padding-top: 50px; + height: 100vh; + overflow-x: hidden; +} + +a.divlink{ + color: black; +} + +div.sidebar{ + display: inline-block; + border-right-style: solid; + height: 100vh; + background-color: #E9EAEB; + width: 300px; + position: fixed; +} + +div.displayDevice{ + display: inline-block; + position: absolute; + padding-left: 30px; + width: 100%; + height: 100%; + overflow: scroll; + left: 300px; +} + +div.profileContainer{ + display: inline-block; + position: absolute; + padding-left: 30px; + width: 100%; + height: 100%; + overflow: scroll; + left: 200px; + top: 70px; +} + +div.modal{ + display:none; + position: fixed; + z-index: 1; + left: 0; + top: 0; + width: 100%; + height: 100%; + overflow: auto; + background-color: rgb(0,0,0); + background-color: rgba(0,0,0,0.4); +} + +div.modal-content{ + position: relative; + background-color: #fefefe; + margin: 5% auto; + padding: 10px; + border: 1px solid #888; + width: 80%; + max-height: 80%; + text-align: center; + vertical-align: center; + align-items: center; +} + +div.modal-body{ + padding: 10px; + overflow: auto; +} + +input[type=text]{ + width: 60%; +} + + +span.close{ + color: black; + float: right; + font-size: 28px; + font-weight: bold; +} +span.close:hover, +span.close:focus{ + color: black; + text-decoration: none; + cursor: pointer; +} +ul.nav{ + padding: 0px; +} + diff --git a/WebContent/html/javascript/iconselect.js-1.0/css/lib/control/iconselect.css b/WebContent/html/javascript/iconselect.js-1.0/css/lib/control/iconselect.css index fe5ea25..b2021d1 100644 --- a/WebContent/html/javascript/iconselect.js-1.0/css/lib/control/iconselect.css +++ b/WebContent/html/javascript/iconselect.js-1.0/css/lib/control/iconselect.css @@ -1,129 +1,129 @@ -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ -/* - Created on : Nov 28, 2013, 7:09:35 AM - Author : bugraozden -*/ - -.icon-select{ - width:0px; - } - - .icon-select .selected-box { - - position: relative; - margin: 0px; - padding: 0px; - width: 70px; /* sil */ - height: 60px; /* sil */ - border: 1px solid #999999; - /*background-color: #FFFFFF;*/ - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - - } - - .icon-select .selected-box:hover { - - position: relative; - margin: 0px; - padding: 0px; - width: 70px; /* sil */ - height: 60px; /* sil */ - border: 1px solid #000000; - background-color: #FFFFFF; - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - - } - - .icon-select .selected-icon { - - position: absolute; - margin: 0px; - padding: 0px; - top:5px; - left:5px; - width: 48px; /* sil */ - height: 48px; /* sil */ - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - - } - - .icon-select .component-icon{ - position: absolute; - bottom:5px; - right:4px; - } - - .icon-select .box { - - position: absolute; - top:0px; - left:71px; - margin: 0px; - padding: 0px; - width: 170px; /* sil */ - height: 170px; /* sil */ - border: 1px solid #EEEEEE; - background-color: #EEEEEE; - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - - - overflow:auto; - /* - -webkit-overflow-scrolling: touch; - */ - - } - - .icon-select .icon { - position: relative; - margin: 5px 0px 0px 5px; - padding: 0px; - width: 48px; /* sil */ - height: 48px; /* sil */ - border: 1px solid #CCCCCC; - background-color: #FFFFFF; - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - - overflow:hidden; - float: left; - } - - .icon-select .icon:hover { - border: 1px solid #000000; - } - - .icon-select .icon.selected { - position: relative; - margin: 5px 0px 0px 5px; - padding: 0px; - width: 48px; /* sil */ - height: 48px; /* sil */ - border: 1px solid #EEEEEE; - background-color: #EEEEEE; - - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - - overflow:hidden; - float: left; +/* +To change this license header, choose License Headers in Project Properties. +To change this template file, choose Tools | Templates +and open the template in the editor. +*/ +/* + Created on : Nov 28, 2013, 7:09:35 AM + Author : bugraozden +*/ + +.icon-select{ + width:0px; + } + + .icon-select .selected-box { + + position: relative; + margin: 0px; + padding: 0px; + width: 70px; /* sil */ + height: 60px; /* sil */ + border: 1px solid #999999; + /*background-color: #FFFFFF;*/ + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + + } + + .icon-select .selected-box:hover { + + position: relative; + margin: 0px; + padding: 0px; + width: 70px; /* sil */ + height: 60px; /* sil */ + border: 1px solid #000000; + background-color: #FFFFFF; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + + } + + .icon-select .selected-icon { + + position: absolute; + margin: 0px; + padding: 0px; + top:5px; + left:5px; + width: 48px; /* sil */ + height: 48px; /* sil */ + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + + } + + .icon-select .component-icon{ + position: absolute; + bottom:5px; + right:4px; + } + + .icon-select .box { + + position: absolute; + top:0px; + left:71px; + margin: 0px; + padding: 0px; + width: 170px; /* sil */ + height: 170px; /* sil */ + border: 1px solid #EEEEEE; + background-color: #EEEEEE; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + + + overflow:auto; + /* + -webkit-overflow-scrolling: touch; + */ + + } + + .icon-select .icon { + position: relative; + margin: 5px 0px 0px 5px; + padding: 0px; + width: 48px; /* sil */ + height: 48px; /* sil */ + border: 1px solid #CCCCCC; + background-color: #FFFFFF; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + + overflow:hidden; + float: left; + } + + .icon-select .icon:hover { + border: 1px solid #000000; + } + + .icon-select .icon.selected { + position: relative; + margin: 5px 0px 0px 5px; + padding: 0px; + width: 48px; /* sil */ + height: 48px; /* sil */ + border: 1px solid #EEEEEE; + background-color: #EEEEEE; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + + overflow:hidden; + float: left; } \ No newline at end of file diff --git a/WebContent/html/javascript/iconselect.js-1.0/icon-select-example.html b/WebContent/html/javascript/iconselect.js-1.0/icon-select-example.html index 00528eb..8c78648 100644 --- a/WebContent/html/javascript/iconselect.js-1.0/icon-select-example.html +++ b/WebContent/html/javascript/iconselect.js-1.0/icon-select-example.html @@ -1,60 +1,60 @@ - - - - Icon/Image Select: Basic Example (Javascript) - - - - - - - - - - - -

Icon/Image Select: Basic Example (Javascript)

- -
- - - - - + + + + Icon/Image Select: Basic Example (Javascript) + + + + + + + + + + + +

Icon/Image Select: Basic Example (Javascript)

+ +
+ + + + + diff --git a/WebContent/html/javascript/iconselect.js-1.0/icon-select-example2.html b/WebContent/html/javascript/iconselect.js-1.0/icon-select-example2.html index 299f568..b6c4cc7 100644 --- a/WebContent/html/javascript/iconselect.js-1.0/icon-select-example2.html +++ b/WebContent/html/javascript/iconselect.js-1.0/icon-select-example2.html @@ -1,57 +1,57 @@ - - - - Icon/Image Select: Nano Example (Javascript) - - - - - - - - - - - -

Icon/Image Select: Nano Example (Javascript)

- -
- - - + + + + Icon/Image Select: Nano Example (Javascript) + + + + + + + + + + + +

Icon/Image Select: Nano Example (Javascript)

+ +
+ + + diff --git a/WebContent/html/javascript/iconselect.js-1.0/icon-select-example3.html b/WebContent/html/javascript/iconselect.js-1.0/icon-select-example3.html index 29d8fb0..ab60e43 100644 --- a/WebContent/html/javascript/iconselect.js-1.0/icon-select-example3.html +++ b/WebContent/html/javascript/iconselect.js-1.0/icon-select-example3.html @@ -1,57 +1,57 @@ - - - - Icon/Image Select: Vectoral Example (Javascript) - - - - - - - - - - - -

Icon/Image Select: Vectoral Example (Javascript)

- -
- - - + + + + Icon/Image Select: Vectoral Example (Javascript) + + + + + + + + + + + +

Icon/Image Select: Vectoral Example (Javascript)

+ +
+ + + diff --git a/WebContent/html/javascript/iconselect.js-1.0/icon-select-example4.html b/WebContent/html/javascript/iconselect.js-1.0/icon-select-example4.html index c4c6df0..5ae105e 100644 --- a/WebContent/html/javascript/iconselect.js-1.0/icon-select-example4.html +++ b/WebContent/html/javascript/iconselect.js-1.0/icon-select-example4.html @@ -1,57 +1,57 @@ - - - - Icon/Image Select: Horizontal Example (Javascript) - - - - - - - - - - - -

Icon/Image Select: Horizontal Example (Javascript)

- -
- - - + + + + Icon/Image Select: Horizontal Example (Javascript) + + + + + + + + + + + +

Icon/Image Select: Horizontal Example (Javascript)

+ +
+ + + diff --git a/WebContent/html/javascript/iconselect.js-1.0/lib/control/iconselect.js b/WebContent/html/javascript/iconselect.js-1.0/lib/control/iconselect.js index 317185f..3939777 100644 --- a/WebContent/html/javascript/iconselect.js-1.0/lib/control/iconselect.js +++ b/WebContent/html/javascript/iconselect.js-1.0/lib/control/iconselect.js @@ -1,322 +1,322 @@ - -/** - * - * Created with NetBeans IDE - * - * Code : Icon Select JS - * Version : 1.0 - * - * User : Bugra OZDEN - * Site : http://www.bugraozden.com - * Mail : bugra.ozden@gmail.com - * - * Date : 10/30/13 - * Time : 01:10 PM - * - */ - -IconSelect.DEFAULT = {}; -IconSelect.DEFAULT.SELECTED_ICON_WIDTH = 48; -IconSelect.DEFAULT.SELECTED_ICON_HEIGHT = 48; -IconSelect.DEFAULT.SELECTED_BOX_PADDING = 1; -IconSelect.DEFAULT.SELECTED_BOX_PADDING_RIGHT = 12; -IconSelect.DEFAULT.ICONS_WIDTH = 32; -IconSelect.DEFAULT.ICONS_HEIGHT = 32; -IconSelect.DEFAULT.BOX_ICON_SPACE = 1; -IconSelect.DEFAULT.HORIZONTAL_ICON_NUMBER = 3; -IconSelect.DEFAULT.VECTORAL_ICON_NUMBER = 3; - -IconSelect.COMPONENT_ICON_FILE_PATH = "../javascript/iconselect.js-1.0/images/control/icon-select/arrow.png"; - -function IconSelect($$elementID, $$parameters) { - - var _icons = []; - var _selectedIndex = -1; - var _boxScroll; - - var _default = IconSelect.DEFAULT; - - function _init() { - - //parametreler boş gelirse - if(!$$parameters) $$parameters = {}; - //En üst elementi seç - if(_View.setIconSelectElement($$elementID)){ - - //set parameters - $$parameters = _Model.checkParameters($$parameters); - //create UI - var ui = _View.createUI($$parameters, $$elementID); - //basıldığında göster/gizle - _View.iconSelectElement.onclick = function(){ - _View.showBox(); - }; - - //Başlangıçta gizle - _View.showBox(false); - - //Nesneye basıldığında gizlemeyi iptal et. - _View.iconSelectElement.addEventListener('click', function($event){ - $event.stopPropagation(); - }); - - //dışarı basıldığında gizle. - window.addEventListener('click', function(){ - _View.showBox(false); - }); - - }else{ - alert("Element not found."); - } - - } - - //Tüm iconları yeniden yükle. - this.refresh = function($icons){ - - _icons = []; - - var setSelectedIndex = this.setSelectedIndex; - - for(var i = 0; i < $icons.length; i++){ - $icons[i].element = _View.createIcon($icons[i].iconFilePath, $icons[i].iconValue, i, $$parameters); - $icons[i].element.onclick = function(){ - setSelectedIndex(this.childNodes[0].getAttribute('icon-index')); - - }; - _icons.push($icons[i]); - - } - - var horizontalIconNumber = Math.round(($icons.length) / $$parameters.vectoralIconNumber); - - _View.boxElement.style.height = (($$parameters.iconsHeight + 2) * horizontalIconNumber) + - ((horizontalIconNumber + 1) * $$parameters.boxIconSpace); - this.setSelectedIndex(0); - - }; - - //icon listesini al. - this.getIcons = function(){ return _icons; }; - - //iconu seçili hale gelir. - this.setSelectedIndex = function($index){ - - var icon; - - if(_icons.length > $index) - icon = _icons[$index]; - - if(icon){ - //eski icondan seçilme özelliğini kaldır. - if(_selectedIndex != -1) _icons[_selectedIndex].element.setAttribute('class','icon'); - _selectedIndex = $index; - _View.selectedIconImgElement.setAttribute('src', icon.iconFilePath); - if(_selectedIndex != -1) _icons[_selectedIndex].element.setAttribute('class','icon selected'); - if(_selectedIndex != -1) $('#profimg').attr("src","../imgs/my-icons-collection-128px/png/" + icon.iconValue + ".png"); - } - - _View.iconSelectElement.dispatchEvent(new Event('changed')); - - //_View.showBox(false); - - }; - - this.getSelectedIndex = function(){ return _selectedIndex; }; - this.getSelectedValue = function(){ return _icons[_selectedIndex].iconValue }; - this.getSelectedFilePath = function(){ return _icons[_selectedIndex].iconFilePath }; - - - - //### VIEW CLASS ### - - function _View(){} - - _View.iconSelectElement; - _View.boxElement; - _View.boxScrollElement; - _View.selectedIconImgElement; - _View.selectedIconElement; - - _View.showBox = function($isShown){ - - if($isShown == null) { - $isShown = (_View.boxElement.style.display == "none") ? true : false; - } - - if($isShown) { - _View.boxElement.style.display = "block"; - _View.boxScrollElement.style.display = "block"; - _boxScroll = (_boxScroll) ? _boxScroll : new iScroll($$elementID + "-box-scroll"); - }else{ - _View.boxElement.style.display = "none"; - _View.boxScrollElement.style.display = "none"; - } - - _View.boxElement.style.display = ($isShown) ? "block" : "none"; - - - - }; - - _View.setIconSelectElement = function($elementID){ - _View.iconSelectElement = document.getElementById($elementID); - return _View.iconSelectElement; - }; - - _View.clearUI = function(){ - _View.iconSelectElement.innerHTML = ""; - }; - - _View.clearIcons = function(){ - _View.boxElement.innerHTML = ""; - }; - - _View.createUI = function($parameters){ - - /* HTML MODEL - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - */ - - _View.clearUI(); - - _View.iconSelectElement.setAttribute('class', 'icon-select'); - - var selectedBoxElement = document.createElement('div'); - selectedBoxElement.setAttribute('class' ,'selected-box'); - - var selectedIconElement = document.createElement('div'); - selectedIconElement.setAttribute('class' ,'selected-icon'); - - _View.selectedIconImgElement = document.createElement('img'); - _View.selectedIconImgElement.setAttribute('src', ''); - selectedIconElement.appendChild(_View.selectedIconImgElement); - - var componentIconElement = document.createElement('div'); - componentIconElement.setAttribute('class', 'component-icon'); - - var componentIconImgElement = document.createElement('img'); - componentIconImgElement.setAttribute('src', IconSelect.COMPONENT_ICON_FILE_PATH ); - componentIconElement.appendChild(componentIconImgElement); - - _View.boxScrollElement = document.createElement('div'); - _View.boxScrollElement.setAttribute('id',$$elementID + "-box-scroll"); - _View.boxScrollElement.setAttribute('class', 'box'); - - _View.boxElement = document.createElement('div'); - - //_View.boxElement.setAttribute('class', 'box'); - _View.boxScrollElement.appendChild(_View.boxElement); - - _View.selectedIconImgElement.setAttribute('width', $parameters.selectedIconWidth); - _View.selectedIconImgElement.setAttribute('height', $parameters.selectedIconHeight); - selectedIconElement.style.width = $parameters.selectedIconWidth; - selectedIconElement.style.height = $parameters.selectedIconHeight; - selectedBoxElement.style.width = $parameters.selectedIconWidth + $parameters.selectedBoxPadding + $parameters.selectedBoxPaddingRight; - selectedBoxElement.style.height = $parameters.selectedIconHeight + ($parameters.selectedBoxPadding * 2); - selectedIconElement.style.top = $parameters.selectedBoxPadding; - selectedIconElement.style.left = $parameters.selectedBoxPadding; - componentIconElement.style.bottom = 4 + $parameters.selectedBoxPadding; - - _View.boxScrollElement.style.left = parseInt(selectedBoxElement.style.width) + 1; - - _View.boxScrollElement.style.width = (($parameters.iconsWidth + 2) * $parameters.vectoralIconNumber) + - (($parameters.vectoralIconNumber + 1) * $parameters.boxIconSpace); - _View.boxScrollElement.style.height = (($parameters.iconsHeight + 2) * $parameters.horizontalIconNumber) + - (($parameters.horizontalIconNumber + 1) * $parameters.boxIconSpace); - - _View.boxElement.style.left = _View.boxScrollElement.style.left; - _View.boxElement.style.width = _View.boxScrollElement.style.width; - - _View.iconSelectElement.appendChild(selectedBoxElement); - selectedBoxElement.appendChild(selectedIconElement); - selectedBoxElement.appendChild(componentIconElement); - selectedBoxElement.appendChild(_View.boxScrollElement); - - - var results = {}; - results['iconSelectElement'] = _View.iconSelectElement; - results['selectedBoxElement'] = selectedBoxElement; - results['selectedIconElement'] = selectedIconElement; - results['selectedIconImgElement'] = _View.selectedIconImgElement; - results['componentIconElement'] = componentIconElement; - results['componentIconImgElement'] = componentIconImgElement; - - return results; - - - //trigger: created ( run setValues ) - - }; - - _View.createIcon = function($iconFilePath, $iconValue, $index, $parameters){ - - /* HTML MODEL - -
- - */ - - var iconElement = document.createElement('div'); - iconElement.setAttribute('class', 'icon'); - iconElement.style.width = $parameters.iconsWidth; - iconElement.style.height = $parameters.iconsHeight; - iconElement.style.marginLeft = $parameters.boxIconSpace; - iconElement.style.marginTop = $parameters.boxIconSpace; - - var iconImgElement = document.createElement('img'); - iconImgElement.setAttribute('src', $iconFilePath); - iconImgElement.setAttribute('icon-value', $iconValue); - iconImgElement.setAttribute('icon-index', $index); - iconImgElement.setAttribute('width', $parameters.iconsWidth); - iconImgElement.setAttribute('height', $parameters.iconsHeight); - - iconElement.appendChild(iconImgElement); - _View.boxElement.appendChild(iconElement); - - return iconElement; - - }; - - //### MODEL CLASS ### - - function _Model(){} - - //TODO: params değişkenini kaldır yeni oluştursun. - _Model.checkParameters = function($parameters){ - - $parameters.selectedIconWidth = ($parameters.selectedIconWidth) ? $parameters.selectedIconWidth : _default.SELECTED_ICON_WIDTH; - $parameters.selectedIconHeight = ($parameters.selectedIconHeight) ? $parameters.selectedIconHeight : _default.SELECTED_ICON_HEIGHT; - $parameters.selectedBoxPadding = ($parameters.selectedBoxPadding) ? $parameters.selectedBoxPadding : _default.SELECTED_BOX_PADDING; - $parameters.selectedBoxPaddingRight = ($parameters.selectedBoxPaddingRight) ? $parameters.selectedBoxPaddingRight : _default.SELECTED_BOX_PADDING_RIGHT; - $parameters.iconsWidth = ($parameters.iconsWidth) ? $parameters.iconsWidth : _default.ICONS_WIDTH; - $parameters.iconsHeight = ($parameters.iconsHeight) ? $parameters.iconsHeight : _default.ICONS_HEIGHT; - $parameters.boxIconSpace = ($parameters.boxIconSpace) ? $parameters.boxIconSpace : _default.BOX_ICON_SPACE; - $parameters.vectoralIconNumber = ($parameters.vectoralIconNumber) ? $parameters.vectoralIconNumber : _default.VECTORAL_ICON_NUMBER; - $parameters.horizontalIconNumber = ($parameters.horizontalIconNumber) ? $parameters.horizontalIconNumber : _default.HORIZONTAL_ICON_NUMBER; - - return $parameters; - - }; - - _init(); + +/** + * + * Created with NetBeans IDE + * + * Code : Icon Select JS + * Version : 1.0 + * + * User : Bugra OZDEN + * Site : http://www.bugraozden.com + * Mail : bugra.ozden@gmail.com + * + * Date : 10/30/13 + * Time : 01:10 PM + * + */ + +IconSelect.DEFAULT = {}; +IconSelect.DEFAULT.SELECTED_ICON_WIDTH = 48; +IconSelect.DEFAULT.SELECTED_ICON_HEIGHT = 48; +IconSelect.DEFAULT.SELECTED_BOX_PADDING = 1; +IconSelect.DEFAULT.SELECTED_BOX_PADDING_RIGHT = 12; +IconSelect.DEFAULT.ICONS_WIDTH = 32; +IconSelect.DEFAULT.ICONS_HEIGHT = 32; +IconSelect.DEFAULT.BOX_ICON_SPACE = 1; +IconSelect.DEFAULT.HORIZONTAL_ICON_NUMBER = 3; +IconSelect.DEFAULT.VECTORAL_ICON_NUMBER = 3; + +IconSelect.COMPONENT_ICON_FILE_PATH = "../javascript/iconselect.js-1.0/images/control/icon-select/arrow.png"; + +function IconSelect($$elementID, $$parameters) { + + var _icons = []; + var _selectedIndex = -1; + var _boxScroll; + + var _default = IconSelect.DEFAULT; + + function _init() { + + //parametreler boş gelirse + if(!$$parameters) $$parameters = {}; + //En üst elementi seç + if(_View.setIconSelectElement($$elementID)){ + + //set parameters + $$parameters = _Model.checkParameters($$parameters); + //create UI + var ui = _View.createUI($$parameters, $$elementID); + //basıldığında göster/gizle + _View.iconSelectElement.onclick = function(){ + _View.showBox(); + }; + + //Başlangıçta gizle + _View.showBox(false); + + //Nesneye basıldığında gizlemeyi iptal et. + _View.iconSelectElement.addEventListener('click', function($event){ + $event.stopPropagation(); + }); + + //dışarı basıldığında gizle. + window.addEventListener('click', function(){ + _View.showBox(false); + }); + + }else{ + alert("Element not found."); + } + + } + + //Tüm iconları yeniden yükle. + this.refresh = function($icons){ + + _icons = []; + + var setSelectedIndex = this.setSelectedIndex; + + for(var i = 0; i < $icons.length; i++){ + $icons[i].element = _View.createIcon($icons[i].iconFilePath, $icons[i].iconValue, i, $$parameters); + $icons[i].element.onclick = function(){ + setSelectedIndex(this.childNodes[0].getAttribute('icon-index')); + + }; + _icons.push($icons[i]); + + } + + var horizontalIconNumber = Math.round(($icons.length) / $$parameters.vectoralIconNumber); + + _View.boxElement.style.height = (($$parameters.iconsHeight + 2) * horizontalIconNumber) + + ((horizontalIconNumber + 1) * $$parameters.boxIconSpace); + this.setSelectedIndex(0); + + }; + + //icon listesini al. + this.getIcons = function(){ return _icons; }; + + //iconu seçili hale gelir. + this.setSelectedIndex = function($index){ + + var icon; + + if(_icons.length > $index) + icon = _icons[$index]; + + if(icon){ + //eski icondan seçilme özelliğini kaldır. + if(_selectedIndex != -1) _icons[_selectedIndex].element.setAttribute('class','icon'); + _selectedIndex = $index; + _View.selectedIconImgElement.setAttribute('src', icon.iconFilePath); + if(_selectedIndex != -1) _icons[_selectedIndex].element.setAttribute('class','icon selected'); + if(_selectedIndex != -1) $('#profimg').attr("src","../imgs/my-icons-collection-128px/png/" + icon.iconValue + ".png"); + } + + _View.iconSelectElement.dispatchEvent(new Event('changed')); + + //_View.showBox(false); + + }; + + this.getSelectedIndex = function(){ return _selectedIndex; }; + this.getSelectedValue = function(){ return _icons[_selectedIndex].iconValue }; + this.getSelectedFilePath = function(){ return _icons[_selectedIndex].iconFilePath }; + + + + //### VIEW CLASS ### + + function _View(){} + + _View.iconSelectElement; + _View.boxElement; + _View.boxScrollElement; + _View.selectedIconImgElement; + _View.selectedIconElement; + + _View.showBox = function($isShown){ + + if($isShown == null) { + $isShown = (_View.boxElement.style.display == "none") ? true : false; + } + + if($isShown) { + _View.boxElement.style.display = "block"; + _View.boxScrollElement.style.display = "block"; + _boxScroll = (_boxScroll) ? _boxScroll : new iScroll($$elementID + "-box-scroll"); + }else{ + _View.boxElement.style.display = "none"; + _View.boxScrollElement.style.display = "none"; + } + + _View.boxElement.style.display = ($isShown) ? "block" : "none"; + + + + }; + + _View.setIconSelectElement = function($elementID){ + _View.iconSelectElement = document.getElementById($elementID); + return _View.iconSelectElement; + }; + + _View.clearUI = function(){ + _View.iconSelectElement.innerHTML = ""; + }; + + _View.clearIcons = function(){ + _View.boxElement.innerHTML = ""; + }; + + _View.createUI = function($parameters){ + + /* HTML MODEL + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + */ + + _View.clearUI(); + + _View.iconSelectElement.setAttribute('class', 'icon-select'); + + var selectedBoxElement = document.createElement('div'); + selectedBoxElement.setAttribute('class' ,'selected-box'); + + var selectedIconElement = document.createElement('div'); + selectedIconElement.setAttribute('class' ,'selected-icon'); + + _View.selectedIconImgElement = document.createElement('img'); + _View.selectedIconImgElement.setAttribute('src', ''); + selectedIconElement.appendChild(_View.selectedIconImgElement); + + var componentIconElement = document.createElement('div'); + componentIconElement.setAttribute('class', 'component-icon'); + + var componentIconImgElement = document.createElement('img'); + componentIconImgElement.setAttribute('src', IconSelect.COMPONENT_ICON_FILE_PATH ); + componentIconElement.appendChild(componentIconImgElement); + + _View.boxScrollElement = document.createElement('div'); + _View.boxScrollElement.setAttribute('id',$$elementID + "-box-scroll"); + _View.boxScrollElement.setAttribute('class', 'box'); + + _View.boxElement = document.createElement('div'); + + //_View.boxElement.setAttribute('class', 'box'); + _View.boxScrollElement.appendChild(_View.boxElement); + + _View.selectedIconImgElement.setAttribute('width', $parameters.selectedIconWidth); + _View.selectedIconImgElement.setAttribute('height', $parameters.selectedIconHeight); + selectedIconElement.style.width = $parameters.selectedIconWidth; + selectedIconElement.style.height = $parameters.selectedIconHeight; + selectedBoxElement.style.width = $parameters.selectedIconWidth + $parameters.selectedBoxPadding + $parameters.selectedBoxPaddingRight; + selectedBoxElement.style.height = $parameters.selectedIconHeight + ($parameters.selectedBoxPadding * 2); + selectedIconElement.style.top = $parameters.selectedBoxPadding; + selectedIconElement.style.left = $parameters.selectedBoxPadding; + componentIconElement.style.bottom = 4 + $parameters.selectedBoxPadding; + + _View.boxScrollElement.style.left = parseInt(selectedBoxElement.style.width) + 1; + + _View.boxScrollElement.style.width = (($parameters.iconsWidth + 2) * $parameters.vectoralIconNumber) + + (($parameters.vectoralIconNumber + 1) * $parameters.boxIconSpace); + _View.boxScrollElement.style.height = (($parameters.iconsHeight + 2) * $parameters.horizontalIconNumber) + + (($parameters.horizontalIconNumber + 1) * $parameters.boxIconSpace); + + _View.boxElement.style.left = _View.boxScrollElement.style.left; + _View.boxElement.style.width = _View.boxScrollElement.style.width; + + _View.iconSelectElement.appendChild(selectedBoxElement); + selectedBoxElement.appendChild(selectedIconElement); + selectedBoxElement.appendChild(componentIconElement); + selectedBoxElement.appendChild(_View.boxScrollElement); + + + var results = {}; + results['iconSelectElement'] = _View.iconSelectElement; + results['selectedBoxElement'] = selectedBoxElement; + results['selectedIconElement'] = selectedIconElement; + results['selectedIconImgElement'] = _View.selectedIconImgElement; + results['componentIconElement'] = componentIconElement; + results['componentIconImgElement'] = componentIconImgElement; + + return results; + + + //trigger: created ( run setValues ) + + }; + + _View.createIcon = function($iconFilePath, $iconValue, $index, $parameters){ + + /* HTML MODEL + +
+ + */ + + var iconElement = document.createElement('div'); + iconElement.setAttribute('class', 'icon'); + iconElement.style.width = $parameters.iconsWidth; + iconElement.style.height = $parameters.iconsHeight; + iconElement.style.marginLeft = $parameters.boxIconSpace; + iconElement.style.marginTop = $parameters.boxIconSpace; + + var iconImgElement = document.createElement('img'); + iconImgElement.setAttribute('src', $iconFilePath); + iconImgElement.setAttribute('icon-value', $iconValue); + iconImgElement.setAttribute('icon-index', $index); + iconImgElement.setAttribute('width', $parameters.iconsWidth); + iconImgElement.setAttribute('height', $parameters.iconsHeight); + + iconElement.appendChild(iconImgElement); + _View.boxElement.appendChild(iconElement); + + return iconElement; + + }; + + //### MODEL CLASS ### + + function _Model(){} + + //TODO: params değişkenini kaldır yeni oluştursun. + _Model.checkParameters = function($parameters){ + + $parameters.selectedIconWidth = ($parameters.selectedIconWidth) ? $parameters.selectedIconWidth : _default.SELECTED_ICON_WIDTH; + $parameters.selectedIconHeight = ($parameters.selectedIconHeight) ? $parameters.selectedIconHeight : _default.SELECTED_ICON_HEIGHT; + $parameters.selectedBoxPadding = ($parameters.selectedBoxPadding) ? $parameters.selectedBoxPadding : _default.SELECTED_BOX_PADDING; + $parameters.selectedBoxPaddingRight = ($parameters.selectedBoxPaddingRight) ? $parameters.selectedBoxPaddingRight : _default.SELECTED_BOX_PADDING_RIGHT; + $parameters.iconsWidth = ($parameters.iconsWidth) ? $parameters.iconsWidth : _default.ICONS_WIDTH; + $parameters.iconsHeight = ($parameters.iconsHeight) ? $parameters.iconsHeight : _default.ICONS_HEIGHT; + $parameters.boxIconSpace = ($parameters.boxIconSpace) ? $parameters.boxIconSpace : _default.BOX_ICON_SPACE; + $parameters.vectoralIconNumber = ($parameters.vectoralIconNumber) ? $parameters.vectoralIconNumber : _default.VECTORAL_ICON_NUMBER; + $parameters.horizontalIconNumber = ($parameters.horizontalIconNumber) ? $parameters.horizontalIconNumber : _default.HORIZONTAL_ICON_NUMBER; + + return $parameters; + + }; + + _init(); } \ No newline at end of file diff --git a/WebContent/html/javascript/iconselect.js-1.0/lib/iscroll-license.txt b/WebContent/html/javascript/iconselect.js-1.0/lib/iscroll-license.txt index 1c54a54..bbdd0ab 100644 --- a/WebContent/html/javascript/iconselect.js-1.0/lib/iscroll-license.txt +++ b/WebContent/html/javascript/iconselect.js-1.0/lib/iscroll-license.txt @@ -1,22 +1,22 @@ -Copyright (c) 2012 Matteo Spinelli, http://cubiq.org/ - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +Copyright (c) 2012 Matteo Spinelli, http://cubiq.org/ + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/WebContent/html/javascript/iconselect.js-1.0/lib/iscroll.js b/WebContent/html/javascript/iconselect.js-1.0/lib/iscroll.js index 8222de0..702434f 100644 --- a/WebContent/html/javascript/iconselect.js-1.0/lib/iscroll.js +++ b/WebContent/html/javascript/iconselect.js-1.0/lib/iscroll.js @@ -1,1104 +1,1104 @@ -/*! - * iScroll v4.2.5 ~ Copyright (c) 2012 Matteo Spinelli, http://cubiq.org - * Released under MIT license, http://cubiq.org/license - */ -(function(window, doc){ -var m = Math, - dummyStyle = doc.createElement('div').style, - vendor = (function () { - var vendors = 't,webkitT,MozT,msT,OT'.split(','), - t, - i = 0, - l = vendors.length; - - for ( ; i < l; i++ ) { - t = vendors[i] + 'ransform'; - if ( t in dummyStyle ) { - return vendors[i].substr(0, vendors[i].length - 1); - } - } - - return false; - })(), - cssVendor = vendor ? '-' + vendor.toLowerCase() + '-' : '', - - // Style properties - transform = prefixStyle('transform'), - transitionProperty = prefixStyle('transitionProperty'), - transitionDuration = prefixStyle('transitionDuration'), - transformOrigin = prefixStyle('transformOrigin'), - transitionTimingFunction = prefixStyle('transitionTimingFunction'), - transitionDelay = prefixStyle('transitionDelay'), - - // Browser capabilities - isAndroid = (/android/gi).test(navigator.appVersion), - isIDevice = (/iphone|ipad/gi).test(navigator.appVersion), - isTouchPad = (/hp-tablet/gi).test(navigator.appVersion), - - has3d = prefixStyle('perspective') in dummyStyle, - hasTouch = 'ontouchstart' in window && !isTouchPad, - hasTransform = vendor !== false, - hasTransitionEnd = prefixStyle('transition') in dummyStyle, - - RESIZE_EV = 'onorientationchange' in window ? 'orientationchange' : 'resize', - START_EV = hasTouch ? 'touchstart' : 'mousedown', - MOVE_EV = hasTouch ? 'touchmove' : 'mousemove', - END_EV = hasTouch ? 'touchend' : 'mouseup', - CANCEL_EV = hasTouch ? 'touchcancel' : 'mouseup', - TRNEND_EV = (function () { - if ( vendor === false ) return false; - - var transitionEnd = { - '' : 'transitionend', - 'webkit' : 'webkitTransitionEnd', - 'Moz' : 'transitionend', - 'O' : 'otransitionend', - 'ms' : 'MSTransitionEnd' - }; - - return transitionEnd[vendor]; - })(), - - nextFrame = (function() { - return window.requestAnimationFrame || - window.webkitRequestAnimationFrame || - window.mozRequestAnimationFrame || - window.oRequestAnimationFrame || - window.msRequestAnimationFrame || - function(callback) { return setTimeout(callback, 1); }; - })(), - cancelFrame = (function () { - return window.cancelRequestAnimationFrame || - window.webkitCancelAnimationFrame || - window.webkitCancelRequestAnimationFrame || - window.mozCancelRequestAnimationFrame || - window.oCancelRequestAnimationFrame || - window.msCancelRequestAnimationFrame || - clearTimeout; - })(), - - // Helpers - translateZ = has3d ? ' translateZ(0)' : '', - - // Constructor - iScroll = function (el, options) { - var that = this, - i; - - that.wrapper = typeof el == 'object' ? el : doc.getElementById(el); - that.wrapper.style.overflow = 'hidden'; - that.scroller = that.wrapper.children[0]; - - // Default options - that.options = { - hScroll: true, - vScroll: true, - x: 0, - y: 0, - bounce: true, - bounceLock: false, - momentum: true, - lockDirection: true, - useTransform: true, - useTransition: false, - topOffset: 0, - checkDOMChanges: false, // Experimental - handleClick: true, - - // Scrollbar - hScrollbar: true, - vScrollbar: true, - fixedScrollbar: isAndroid, - hideScrollbar: isIDevice, - fadeScrollbar: isIDevice && has3d, - scrollbarClass: '', - - // Zoom - zoom: false, - zoomMin: 1, - zoomMax: 4, - doubleTapZoom: 2, - wheelAction: 'scroll', - - // Snap - snap: false, - snapThreshold: 1, - - // Events - onRefresh: null, - onBeforeScrollStart: function (e) { e.preventDefault(); }, - onScrollStart: null, - onBeforeScrollMove: null, - onScrollMove: null, - onBeforeScrollEnd: null, - onScrollEnd: null, - onTouchEnd: null, - onDestroy: null, - onZoomStart: null, - onZoom: null, - onZoomEnd: null - }; - - // User defined options - for (i in options) that.options[i] = options[i]; - - // Set starting position - that.x = that.options.x; - that.y = that.options.y; - - // Normalize options - that.options.useTransform = hasTransform && that.options.useTransform; - that.options.hScrollbar = that.options.hScroll && that.options.hScrollbar; - that.options.vScrollbar = that.options.vScroll && that.options.vScrollbar; - that.options.zoom = that.options.useTransform && that.options.zoom; - that.options.useTransition = hasTransitionEnd && that.options.useTransition; - - // Helpers FIX ANDROID BUG! - // translate3d and scale doesn't work together! - // Ignoring 3d ONLY WHEN YOU SET that.options.zoom - if ( that.options.zoom && isAndroid ){ - translateZ = ''; - } - - // Set some default styles - that.scroller.style[transitionProperty] = that.options.useTransform ? cssVendor + 'transform' : 'top left'; - that.scroller.style[transitionDuration] = '0'; - that.scroller.style[transformOrigin] = '0 0'; - if (that.options.useTransition) that.scroller.style[transitionTimingFunction] = 'cubic-bezier(0.33,0.66,0.66,1)'; - - if (that.options.useTransform) that.scroller.style[transform] = 'translate(' + that.x + 'px,' + that.y + 'px)' + translateZ; - else that.scroller.style.cssText += ';position:absolute;top:' + that.y + 'px;left:' + that.x + 'px'; - - if (that.options.useTransition) that.options.fixedScrollbar = true; - - that.refresh(); - - that._bind(RESIZE_EV, window); - that._bind(START_EV); - if (!hasTouch) { - if (that.options.wheelAction != 'none') { - that._bind('DOMMouseScroll'); - that._bind('mousewheel'); - } - } - - if (that.options.checkDOMChanges) that.checkDOMTime = setInterval(function () { - that._checkDOMChanges(); - }, 500); - }; - -// Prototype -iScroll.prototype = { - enabled: true, - x: 0, - y: 0, - steps: [], - scale: 1, - currPageX: 0, currPageY: 0, - pagesX: [], pagesY: [], - aniTime: null, - wheelZoomCount: 0, - - handleEvent: function (e) { - var that = this; - switch(e.type) { - case START_EV: - if (!hasTouch && e.button !== 0) return; - that._start(e); - break; - case MOVE_EV: that._move(e); break; - case END_EV: - case CANCEL_EV: that._end(e); break; - case RESIZE_EV: that._resize(); break; - case 'DOMMouseScroll': case 'mousewheel': that._wheel(e); break; - case TRNEND_EV: that._transitionEnd(e); break; - } - }, - - _checkDOMChanges: function () { - if (this.moved || this.zoomed || this.animating || - (this.scrollerW == this.scroller.offsetWidth * this.scale && this.scrollerH == this.scroller.offsetHeight * this.scale)) return; - - this.refresh(); - }, - - _scrollbar: function (dir) { - var that = this, - bar; - - if (!that[dir + 'Scrollbar']) { - if (that[dir + 'ScrollbarWrapper']) { - if (hasTransform) that[dir + 'ScrollbarIndicator'].style[transform] = ''; - that[dir + 'ScrollbarWrapper'].parentNode.removeChild(that[dir + 'ScrollbarWrapper']); - that[dir + 'ScrollbarWrapper'] = null; - that[dir + 'ScrollbarIndicator'] = null; - } - - return; - } - - if (!that[dir + 'ScrollbarWrapper']) { - // Create the scrollbar wrapper - bar = doc.createElement('div'); - - if (that.options.scrollbarClass) bar.className = that.options.scrollbarClass + dir.toUpperCase(); - else bar.style.cssText = 'position:absolute;z-index:100;' + (dir == 'h' ? 'height:7px;bottom:1px;left:2px;right:' + (that.vScrollbar ? '7' : '2') + 'px' : 'width:7px;bottom:' + (that.hScrollbar ? '7' : '2') + 'px;top:2px;right:1px'); - - bar.style.cssText += ';pointer-events:none;' + cssVendor + 'transition-property:opacity;' + cssVendor + 'transition-duration:' + (that.options.fadeScrollbar ? '350ms' : '0') + ';overflow:hidden;opacity:' + (that.options.hideScrollbar ? '0' : '1'); - - that.wrapper.appendChild(bar); - that[dir + 'ScrollbarWrapper'] = bar; - - // Create the scrollbar indicator - bar = doc.createElement('div'); - if (!that.options.scrollbarClass) { - bar.style.cssText = 'position:absolute;z-index:100;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);' + cssVendor + 'background-clip:padding-box;' + cssVendor + 'box-sizing:border-box;' + (dir == 'h' ? 'height:100%' : 'width:100%') + ';' + cssVendor + 'border-radius:3px;border-radius:3px'; - } - bar.style.cssText += ';pointer-events:none;' + cssVendor + 'transition-property:' + cssVendor + 'transform;' + cssVendor + 'transition-timing-function:cubic-bezier(0.33,0.66,0.66,1);' + cssVendor + 'transition-duration:0;' + cssVendor + 'transform: translate(0,0)' + translateZ; - if (that.options.useTransition) bar.style.cssText += ';' + cssVendor + 'transition-timing-function:cubic-bezier(0.33,0.66,0.66,1)'; - - that[dir + 'ScrollbarWrapper'].appendChild(bar); - that[dir + 'ScrollbarIndicator'] = bar; - } - - if (dir == 'h') { - that.hScrollbarSize = that.hScrollbarWrapper.clientWidth; - that.hScrollbarIndicatorSize = m.max(m.round(that.hScrollbarSize * that.hScrollbarSize / that.scrollerW), 8); - that.hScrollbarIndicator.style.width = that.hScrollbarIndicatorSize + 'px'; - that.hScrollbarMaxScroll = that.hScrollbarSize - that.hScrollbarIndicatorSize; - that.hScrollbarProp = that.hScrollbarMaxScroll / that.maxScrollX; - } else { - that.vScrollbarSize = that.vScrollbarWrapper.clientHeight; - that.vScrollbarIndicatorSize = m.max(m.round(that.vScrollbarSize * that.vScrollbarSize / that.scrollerH), 8); - that.vScrollbarIndicator.style.height = that.vScrollbarIndicatorSize + 'px'; - that.vScrollbarMaxScroll = that.vScrollbarSize - that.vScrollbarIndicatorSize; - that.vScrollbarProp = that.vScrollbarMaxScroll / that.maxScrollY; - } - - // Reset position - that._scrollbarPos(dir, true); - }, - - _resize: function () { - var that = this; - setTimeout(function () { that.refresh(); }, isAndroid ? 200 : 0); - }, - - _pos: function (x, y) { - if (this.zoomed) return; - - x = this.hScroll ? x : 0; - y = this.vScroll ? y : 0; - - if (this.options.useTransform) { - this.scroller.style[transform] = 'translate(' + x + 'px,' + y + 'px) scale(' + this.scale + ')' + translateZ; - } else { - x = m.round(x); - y = m.round(y); - this.scroller.style.left = x + 'px'; - this.scroller.style.top = y + 'px'; - } - - this.x = x; - this.y = y; - - this._scrollbarPos('h'); - this._scrollbarPos('v'); - }, - - _scrollbarPos: function (dir, hidden) { - var that = this, - pos = dir == 'h' ? that.x : that.y, - size; - - if (!that[dir + 'Scrollbar']) return; - - pos = that[dir + 'ScrollbarProp'] * pos; - - if (pos < 0) { - if (!that.options.fixedScrollbar) { - size = that[dir + 'ScrollbarIndicatorSize'] + m.round(pos * 3); - if (size < 8) size = 8; - that[dir + 'ScrollbarIndicator'].style[dir == 'h' ? 'width' : 'height'] = size + 'px'; - } - pos = 0; - } else if (pos > that[dir + 'ScrollbarMaxScroll']) { - if (!that.options.fixedScrollbar) { - size = that[dir + 'ScrollbarIndicatorSize'] - m.round((pos - that[dir + 'ScrollbarMaxScroll']) * 3); - if (size < 8) size = 8; - that[dir + 'ScrollbarIndicator'].style[dir == 'h' ? 'width' : 'height'] = size + 'px'; - pos = that[dir + 'ScrollbarMaxScroll'] + (that[dir + 'ScrollbarIndicatorSize'] - size); - } else { - pos = that[dir + 'ScrollbarMaxScroll']; - } - } - - that[dir + 'ScrollbarWrapper'].style[transitionDelay] = '0'; - that[dir + 'ScrollbarWrapper'].style.opacity = hidden && that.options.hideScrollbar ? '0' : '1'; - that[dir + 'ScrollbarIndicator'].style[transform] = 'translate(' + (dir == 'h' ? pos + 'px,0)' : '0,' + pos + 'px)') + translateZ; - }, - - _start: function (e) { - var that = this, - point = hasTouch ? e.touches[0] : e, - matrix, x, y, - c1, c2; - - if (!that.enabled) return; - - if (that.options.onBeforeScrollStart) that.options.onBeforeScrollStart.call(that, e); - - if (that.options.useTransition || that.options.zoom) that._transitionTime(0); - - that.moved = false; - that.animating = false; - that.zoomed = false; - that.distX = 0; - that.distY = 0; - that.absDistX = 0; - that.absDistY = 0; - that.dirX = 0; - that.dirY = 0; - - // Gesture start - if (that.options.zoom && hasTouch && e.touches.length > 1) { - c1 = m.abs(e.touches[0].pageX-e.touches[1].pageX); - c2 = m.abs(e.touches[0].pageY-e.touches[1].pageY); - that.touchesDistStart = m.sqrt(c1 * c1 + c2 * c2); - - that.originX = m.abs(e.touches[0].pageX + e.touches[1].pageX - that.wrapperOffsetLeft * 2) / 2 - that.x; - that.originY = m.abs(e.touches[0].pageY + e.touches[1].pageY - that.wrapperOffsetTop * 2) / 2 - that.y; - - if (that.options.onZoomStart) that.options.onZoomStart.call(that, e); - } - - if (that.options.momentum) { - if (that.options.useTransform) { - // Very lame general purpose alternative to CSSMatrix - matrix = getComputedStyle(that.scroller, null)[transform].replace(/[^0-9\-.,]/g, '').split(','); - x = +(matrix[12] || matrix[4]); - y = +(matrix[13] || matrix[5]); - } else { - x = +getComputedStyle(that.scroller, null).left.replace(/[^0-9-]/g, ''); - y = +getComputedStyle(that.scroller, null).top.replace(/[^0-9-]/g, ''); - } - - if (x != that.x || y != that.y) { - if (that.options.useTransition) that._unbind(TRNEND_EV); - else cancelFrame(that.aniTime); - that.steps = []; - that._pos(x, y); - if (that.options.onScrollEnd) that.options.onScrollEnd.call(that); - } - } - - that.absStartX = that.x; // Needed by snap threshold - that.absStartY = that.y; - - that.startX = that.x; - that.startY = that.y; - that.pointX = point.pageX; - that.pointY = point.pageY; - - that.startTime = e.timeStamp || Date.now(); - - if (that.options.onScrollStart) that.options.onScrollStart.call(that, e); - - that._bind(MOVE_EV, window); - that._bind(END_EV, window); - that._bind(CANCEL_EV, window); - }, - - _move: function (e) { - var that = this, - point = hasTouch ? e.touches[0] : e, - deltaX = point.pageX - that.pointX, - deltaY = point.pageY - that.pointY, - newX = that.x + deltaX, - newY = that.y + deltaY, - c1, c2, scale, - timestamp = e.timeStamp || Date.now(); - - if (that.options.onBeforeScrollMove) that.options.onBeforeScrollMove.call(that, e); - - // Zoom - if (that.options.zoom && hasTouch && e.touches.length > 1) { - c1 = m.abs(e.touches[0].pageX - e.touches[1].pageX); - c2 = m.abs(e.touches[0].pageY - e.touches[1].pageY); - that.touchesDist = m.sqrt(c1*c1+c2*c2); - - that.zoomed = true; - - scale = 1 / that.touchesDistStart * that.touchesDist * this.scale; - - if (scale < that.options.zoomMin) scale = 0.5 * that.options.zoomMin * Math.pow(2.0, scale / that.options.zoomMin); - else if (scale > that.options.zoomMax) scale = 2.0 * that.options.zoomMax * Math.pow(0.5, that.options.zoomMax / scale); - - that.lastScale = scale / this.scale; - - newX = this.originX - this.originX * that.lastScale + this.x; - newY = this.originY - this.originY * that.lastScale + this.y; - - this.scroller.style[transform] = 'translate(' + newX + 'px,' + newY + 'px) scale(' + scale + ')' + translateZ; - - if (that.options.onZoom) that.options.onZoom.call(that, e); - return; - } - - that.pointX = point.pageX; - that.pointY = point.pageY; - - // Slow down if outside of the boundaries - if (newX > 0 || newX < that.maxScrollX) { - newX = that.options.bounce ? that.x + (deltaX / 2) : newX >= 0 || that.maxScrollX >= 0 ? 0 : that.maxScrollX; - } - if (newY > that.minScrollY || newY < that.maxScrollY) { - newY = that.options.bounce ? that.y + (deltaY / 2) : newY >= that.minScrollY || that.maxScrollY >= 0 ? that.minScrollY : that.maxScrollY; - } - - that.distX += deltaX; - that.distY += deltaY; - that.absDistX = m.abs(that.distX); - that.absDistY = m.abs(that.distY); - - if (that.absDistX < 6 && that.absDistY < 6) { - return; - } - - // Lock direction - if (that.options.lockDirection) { - if (that.absDistX > that.absDistY + 5) { - newY = that.y; - deltaY = 0; - } else if (that.absDistY > that.absDistX + 5) { - newX = that.x; - deltaX = 0; - } - } - - that.moved = true; - that._pos(newX, newY); - that.dirX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0; - that.dirY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0; - - if (timestamp - that.startTime > 300) { - that.startTime = timestamp; - that.startX = that.x; - that.startY = that.y; - } - - if (that.options.onScrollMove) that.options.onScrollMove.call(that, e); - }, - - _end: function (e) { - if (hasTouch && e.touches.length !== 0) return; - - var that = this, - point = hasTouch ? e.changedTouches[0] : e, - target, ev, - momentumX = { dist:0, time:0 }, - momentumY = { dist:0, time:0 }, - duration = (e.timeStamp || Date.now()) - that.startTime, - newPosX = that.x, - newPosY = that.y, - distX, distY, - newDuration, - snap, - scale; - - that._unbind(MOVE_EV, window); - that._unbind(END_EV, window); - that._unbind(CANCEL_EV, window); - - if (that.options.onBeforeScrollEnd) that.options.onBeforeScrollEnd.call(that, e); - - if (that.zoomed) { - scale = that.scale * that.lastScale; - scale = Math.max(that.options.zoomMin, scale); - scale = Math.min(that.options.zoomMax, scale); - that.lastScale = scale / that.scale; - that.scale = scale; - - that.x = that.originX - that.originX * that.lastScale + that.x; - that.y = that.originY - that.originY * that.lastScale + that.y; - - that.scroller.style[transitionDuration] = '200ms'; - that.scroller.style[transform] = 'translate(' + that.x + 'px,' + that.y + 'px) scale(' + that.scale + ')' + translateZ; - - that.zoomed = false; - that.refresh(); - - if (that.options.onZoomEnd) that.options.onZoomEnd.call(that, e); - return; - } - - if (!that.moved) { - if (hasTouch) { - if (that.doubleTapTimer && that.options.zoom) { - // Double tapped - clearTimeout(that.doubleTapTimer); - that.doubleTapTimer = null; - if (that.options.onZoomStart) that.options.onZoomStart.call(that, e); - that.zoom(that.pointX, that.pointY, that.scale == 1 ? that.options.doubleTapZoom : 1); - if (that.options.onZoomEnd) { - setTimeout(function() { - that.options.onZoomEnd.call(that, e); - }, 200); // 200 is default zoom duration - } - } else if (this.options.handleClick) { - that.doubleTapTimer = setTimeout(function () { - that.doubleTapTimer = null; - - // Find the last touched element - target = point.target; - while (target.nodeType != 1) target = target.parentNode; - - if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA') { - ev = doc.createEvent('MouseEvents'); - ev.initMouseEvent('click', true, true, e.view, 1, - point.screenX, point.screenY, point.clientX, point.clientY, - e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, - 0, null); - ev._fake = true; - target.dispatchEvent(ev); - } - }, that.options.zoom ? 250 : 0); - } - } - - that._resetPos(400); - - if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); - return; - } - - if (duration < 300 && that.options.momentum) { - momentumX = newPosX ? that._momentum(newPosX - that.startX, duration, -that.x, that.scrollerW - that.wrapperW + that.x, that.options.bounce ? that.wrapperW : 0) : momentumX; - momentumY = newPosY ? that._momentum(newPosY - that.startY, duration, -that.y, (that.maxScrollY < 0 ? that.scrollerH - that.wrapperH + that.y - that.minScrollY : 0), that.options.bounce ? that.wrapperH : 0) : momentumY; - - newPosX = that.x + momentumX.dist; - newPosY = that.y + momentumY.dist; - - if ((that.x > 0 && newPosX > 0) || (that.x < that.maxScrollX && newPosX < that.maxScrollX)) momentumX = { dist:0, time:0 }; - if ((that.y > that.minScrollY && newPosY > that.minScrollY) || (that.y < that.maxScrollY && newPosY < that.maxScrollY)) momentumY = { dist:0, time:0 }; - } - - if (momentumX.dist || momentumY.dist) { - newDuration = m.max(m.max(momentumX.time, momentumY.time), 10); - - // Do we need to snap? - if (that.options.snap) { - distX = newPosX - that.absStartX; - distY = newPosY - that.absStartY; - if (m.abs(distX) < that.options.snapThreshold && m.abs(distY) < that.options.snapThreshold) { that.scrollTo(that.absStartX, that.absStartY, 200); } - else { - snap = that._snap(newPosX, newPosY); - newPosX = snap.x; - newPosY = snap.y; - newDuration = m.max(snap.time, newDuration); - } - } - - that.scrollTo(m.round(newPosX), m.round(newPosY), newDuration); - - if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); - return; - } - - // Do we need to snap? - if (that.options.snap) { - distX = newPosX - that.absStartX; - distY = newPosY - that.absStartY; - if (m.abs(distX) < that.options.snapThreshold && m.abs(distY) < that.options.snapThreshold) that.scrollTo(that.absStartX, that.absStartY, 200); - else { - snap = that._snap(that.x, that.y); - if (snap.x != that.x || snap.y != that.y) that.scrollTo(snap.x, snap.y, snap.time); - } - - if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); - return; - } - - that._resetPos(200); - if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); - }, - - _resetPos: function (time) { - var that = this, - resetX = that.x >= 0 ? 0 : that.x < that.maxScrollX ? that.maxScrollX : that.x, - resetY = that.y >= that.minScrollY || that.maxScrollY > 0 ? that.minScrollY : that.y < that.maxScrollY ? that.maxScrollY : that.y; - - if (resetX == that.x && resetY == that.y) { - if (that.moved) { - that.moved = false; - if (that.options.onScrollEnd) that.options.onScrollEnd.call(that); // Execute custom code on scroll end - } - - if (that.hScrollbar && that.options.hideScrollbar) { - if (vendor == 'webkit') that.hScrollbarWrapper.style[transitionDelay] = '300ms'; - that.hScrollbarWrapper.style.opacity = '0'; - } - if (that.vScrollbar && that.options.hideScrollbar) { - if (vendor == 'webkit') that.vScrollbarWrapper.style[transitionDelay] = '300ms'; - that.vScrollbarWrapper.style.opacity = '0'; - } - - return; - } - - that.scrollTo(resetX, resetY, time || 0); - }, - - _wheel: function (e) { - var that = this, - wheelDeltaX, wheelDeltaY, - deltaX, deltaY, - deltaScale; - - if ('wheelDeltaX' in e) { - wheelDeltaX = e.wheelDeltaX / 12; - wheelDeltaY = e.wheelDeltaY / 12; - } else if('wheelDelta' in e) { - wheelDeltaX = wheelDeltaY = e.wheelDelta / 12; - } else if ('detail' in e) { - wheelDeltaX = wheelDeltaY = -e.detail * 3; - } else { - return; - } - - if (that.options.wheelAction == 'zoom') { - deltaScale = that.scale * Math.pow(2, 1/3 * (wheelDeltaY ? wheelDeltaY / Math.abs(wheelDeltaY) : 0)); - if (deltaScale < that.options.zoomMin) deltaScale = that.options.zoomMin; - if (deltaScale > that.options.zoomMax) deltaScale = that.options.zoomMax; - - if (deltaScale != that.scale) { - if (!that.wheelZoomCount && that.options.onZoomStart) that.options.onZoomStart.call(that, e); - that.wheelZoomCount++; - - that.zoom(e.pageX, e.pageY, deltaScale, 400); - - setTimeout(function() { - that.wheelZoomCount--; - if (!that.wheelZoomCount && that.options.onZoomEnd) that.options.onZoomEnd.call(that, e); - }, 400); - } - - return; - } - - deltaX = that.x + wheelDeltaX; - deltaY = that.y + wheelDeltaY; - - if (deltaX > 0) deltaX = 0; - else if (deltaX < that.maxScrollX) deltaX = that.maxScrollX; - - if (deltaY > that.minScrollY) deltaY = that.minScrollY; - else if (deltaY < that.maxScrollY) deltaY = that.maxScrollY; - - if (that.maxScrollY < 0) { - that.scrollTo(deltaX, deltaY, 0); - } - }, - - _transitionEnd: function (e) { - var that = this; - - if (e.target != that.scroller) return; - - that._unbind(TRNEND_EV); - - that._startAni(); - }, - - - /** - * - * Utilities - * - */ - _startAni: function () { - var that = this, - startX = that.x, startY = that.y, - startTime = Date.now(), - step, easeOut, - animate; - - if (that.animating) return; - - if (!that.steps.length) { - that._resetPos(400); - return; - } - - step = that.steps.shift(); - - if (step.x == startX && step.y == startY) step.time = 0; - - that.animating = true; - that.moved = true; - - if (that.options.useTransition) { - that._transitionTime(step.time); - that._pos(step.x, step.y); - that.animating = false; - if (step.time) that._bind(TRNEND_EV); - else that._resetPos(0); - return; - } - - animate = function () { - var now = Date.now(), - newX, newY; - - if (now >= startTime + step.time) { - that._pos(step.x, step.y); - that.animating = false; - if (that.options.onAnimationEnd) that.options.onAnimationEnd.call(that); // Execute custom code on animation end - that._startAni(); - return; - } - - now = (now - startTime) / step.time - 1; - easeOut = m.sqrt(1 - now * now); - newX = (step.x - startX) * easeOut + startX; - newY = (step.y - startY) * easeOut + startY; - that._pos(newX, newY); - if (that.animating) that.aniTime = nextFrame(animate); - }; - - animate(); - }, - - _transitionTime: function (time) { - time += 'ms'; - this.scroller.style[transitionDuration] = time; - if (this.hScrollbar) this.hScrollbarIndicator.style[transitionDuration] = time; - if (this.vScrollbar) this.vScrollbarIndicator.style[transitionDuration] = time; - }, - - _momentum: function (dist, time, maxDistUpper, maxDistLower, size) { - var deceleration = 0.0006, - speed = m.abs(dist) / time, - newDist = (speed * speed) / (2 * deceleration), - newTime = 0, outsideDist = 0; - - // Proportinally reduce speed if we are outside of the boundaries - if (dist > 0 && newDist > maxDistUpper) { - outsideDist = size / (6 / (newDist / speed * deceleration)); - maxDistUpper = maxDistUpper + outsideDist; - speed = speed * maxDistUpper / newDist; - newDist = maxDistUpper; - } else if (dist < 0 && newDist > maxDistLower) { - outsideDist = size / (6 / (newDist / speed * deceleration)); - maxDistLower = maxDistLower + outsideDist; - speed = speed * maxDistLower / newDist; - newDist = maxDistLower; - } - - newDist = newDist * (dist < 0 ? -1 : 1); - newTime = speed / deceleration; - - return { dist: newDist, time: m.round(newTime) }; - }, - - _offset: function (el) { - var left = -el.offsetLeft, - top = -el.offsetTop; - - while (el = el.offsetParent) { - left -= el.offsetLeft; - top -= el.offsetTop; - } - - if (el != this.wrapper) { - left *= this.scale; - top *= this.scale; - } - - return { left: left, top: top }; - }, - - _snap: function (x, y) { - var that = this, - i, l, - page, time, - sizeX, sizeY; - - // Check page X - page = that.pagesX.length - 1; - for (i=0, l=that.pagesX.length; i= that.pagesX[i]) { - page = i; - break; - } - } - if (page == that.currPageX && page > 0 && that.dirX < 0) page--; - x = that.pagesX[page]; - sizeX = m.abs(x - that.pagesX[that.currPageX]); - sizeX = sizeX ? m.abs(that.x - x) / sizeX * 500 : 0; - that.currPageX = page; - - // Check page Y - page = that.pagesY.length-1; - for (i=0; i= that.pagesY[i]) { - page = i; - break; - } - } - if (page == that.currPageY && page > 0 && that.dirY < 0) page--; - y = that.pagesY[page]; - sizeY = m.abs(y - that.pagesY[that.currPageY]); - sizeY = sizeY ? m.abs(that.y - y) / sizeY * 500 : 0; - that.currPageY = page; - - // Snap with constant speed (proportional duration) - time = m.round(m.max(sizeX, sizeY)) || 200; - - return { x: x, y: y, time: time }; - }, - - _bind: function (type, el, bubble) { - (el || this.scroller).addEventListener(type, this, !!bubble); - }, - - _unbind: function (type, el, bubble) { - (el || this.scroller).removeEventListener(type, this, !!bubble); - }, - - - /** - * - * Public methods - * - */ - destroy: function () { - var that = this; - - that.scroller.style[transform] = ''; - - // Remove the scrollbars - that.hScrollbar = false; - that.vScrollbar = false; - that._scrollbar('h'); - that._scrollbar('v'); - - // Remove the event listeners - that._unbind(RESIZE_EV, window); - that._unbind(START_EV); - that._unbind(MOVE_EV, window); - that._unbind(END_EV, window); - that._unbind(CANCEL_EV, window); - - if (!that.options.hasTouch) { - that._unbind('DOMMouseScroll'); - that._unbind('mousewheel'); - } - - if (that.options.useTransition) that._unbind(TRNEND_EV); - - if (that.options.checkDOMChanges) clearInterval(that.checkDOMTime); - - if (that.options.onDestroy) that.options.onDestroy.call(that); - }, - - refresh: function () { - var that = this, - offset, - i, l, - els, - pos = 0, - page = 0; - - if (that.scale < that.options.zoomMin) that.scale = that.options.zoomMin; - that.wrapperW = that.wrapper.clientWidth || 1; - that.wrapperH = that.wrapper.clientHeight || 1; - - that.minScrollY = -that.options.topOffset || 0; - that.scrollerW = m.round(that.scroller.offsetWidth * that.scale); - that.scrollerH = m.round((that.scroller.offsetHeight + that.minScrollY) * that.scale); - that.maxScrollX = that.wrapperW - that.scrollerW; - that.maxScrollY = that.wrapperH - that.scrollerH + that.minScrollY; - that.dirX = 0; - that.dirY = 0; - - if (that.options.onRefresh) that.options.onRefresh.call(that); - - that.hScroll = that.options.hScroll && that.maxScrollX < 0; - that.vScroll = that.options.vScroll && (!that.options.bounceLock && !that.hScroll || that.scrollerH > that.wrapperH); - - that.hScrollbar = that.hScroll && that.options.hScrollbar; - that.vScrollbar = that.vScroll && that.options.vScrollbar && that.scrollerH > that.wrapperH; - - offset = that._offset(that.wrapper); - that.wrapperOffsetLeft = -offset.left; - that.wrapperOffsetTop = -offset.top; - - // Prepare snap - if (typeof that.options.snap == 'string') { - that.pagesX = []; - that.pagesY = []; - els = that.scroller.querySelectorAll(that.options.snap); - for (i=0, l=els.length; i= that.maxScrollX) { - that.pagesX[page] = pos; - pos = pos - that.wrapperW; - page++; - } - if (that.maxScrollX%that.wrapperW) that.pagesX[that.pagesX.length] = that.maxScrollX - that.pagesX[that.pagesX.length-1] + that.pagesX[that.pagesX.length-1]; - - pos = 0; - page = 0; - that.pagesY = []; - while (pos >= that.maxScrollY) { - that.pagesY[page] = pos; - pos = pos - that.wrapperH; - page++; - } - if (that.maxScrollY%that.wrapperH) that.pagesY[that.pagesY.length] = that.maxScrollY - that.pagesY[that.pagesY.length-1] + that.pagesY[that.pagesY.length-1]; - } - - // Prepare the scrollbars - that._scrollbar('h'); - that._scrollbar('v'); - - if (!that.zoomed) { - that.scroller.style[transitionDuration] = '0'; - that._resetPos(400); - } - }, - - scrollTo: function (x, y, time, relative) { - var that = this, - step = x, - i, l; - - that.stop(); - - if (!step.length) step = [{ x: x, y: y, time: time, relative: relative }]; - - for (i=0, l=step.length; i 0 ? 0 : pos.left < that.maxScrollX ? that.maxScrollX : pos.left; - pos.top = pos.top > that.minScrollY ? that.minScrollY : pos.top < that.maxScrollY ? that.maxScrollY : pos.top; - time = time === undefined ? m.max(m.abs(pos.left)*2, m.abs(pos.top)*2) : time; - - that.scrollTo(pos.left, pos.top, time); - }, - - scrollToPage: function (pageX, pageY, time) { - var that = this, x, y; - - time = time === undefined ? 400 : time; - - if (that.options.onScrollStart) that.options.onScrollStart.call(that); - - if (that.options.snap) { - pageX = pageX == 'next' ? that.currPageX+1 : pageX == 'prev' ? that.currPageX-1 : pageX; - pageY = pageY == 'next' ? that.currPageY+1 : pageY == 'prev' ? that.currPageY-1 : pageY; - - pageX = pageX < 0 ? 0 : pageX > that.pagesX.length-1 ? that.pagesX.length-1 : pageX; - pageY = pageY < 0 ? 0 : pageY > that.pagesY.length-1 ? that.pagesY.length-1 : pageY; - - that.currPageX = pageX; - that.currPageY = pageY; - x = that.pagesX[pageX]; - y = that.pagesY[pageY]; - } else { - x = -that.wrapperW * pageX; - y = -that.wrapperH * pageY; - if (x < that.maxScrollX) x = that.maxScrollX; - if (y < that.maxScrollY) y = that.maxScrollY; - } - - that.scrollTo(x, y, time); - }, - - disable: function () { - this.stop(); - this._resetPos(0); - this.enabled = false; - - // If disabled after touchstart we make sure that there are no left over events - this._unbind(MOVE_EV, window); - this._unbind(END_EV, window); - this._unbind(CANCEL_EV, window); - }, - - enable: function () { - this.enabled = true; - }, - - stop: function () { - if (this.options.useTransition) this._unbind(TRNEND_EV); - else cancelFrame(this.aniTime); - this.steps = []; - this.moved = false; - this.animating = false; - }, - - zoom: function (x, y, scale, time) { - var that = this, - relScale = scale / that.scale; - - if (!that.options.useTransform) return; - - that.zoomed = true; - time = time === undefined ? 200 : time; - x = x - that.wrapperOffsetLeft - that.x; - y = y - that.wrapperOffsetTop - that.y; - that.x = x - x * relScale + that.x; - that.y = y - y * relScale + that.y; - - that.scale = scale; - that.refresh(); - - that.x = that.x > 0 ? 0 : that.x < that.maxScrollX ? that.maxScrollX : that.x; - that.y = that.y > that.minScrollY ? that.minScrollY : that.y < that.maxScrollY ? that.maxScrollY : that.y; - - that.scroller.style[transitionDuration] = time + 'ms'; - that.scroller.style[transform] = 'translate(' + that.x + 'px,' + that.y + 'px) scale(' + scale + ')' + translateZ; - that.zoomed = false; - }, - - isReady: function () { - return !this.moved && !this.zoomed && !this.animating; - } -}; - -function prefixStyle (style) { - if ( vendor === '' ) return style; - - style = style.charAt(0).toUpperCase() + style.substr(1); - return vendor + style; -} - -dummyStyle = null; // for the sake of it - -if (typeof exports !== 'undefined') exports.iScroll = iScroll; -else window.iScroll = iScroll; - -})(window, document); +/*! + * iScroll v4.2.5 ~ Copyright (c) 2012 Matteo Spinelli, http://cubiq.org + * Released under MIT license, http://cubiq.org/license + */ +(function(window, doc){ +var m = Math, + dummyStyle = doc.createElement('div').style, + vendor = (function () { + var vendors = 't,webkitT,MozT,msT,OT'.split(','), + t, + i = 0, + l = vendors.length; + + for ( ; i < l; i++ ) { + t = vendors[i] + 'ransform'; + if ( t in dummyStyle ) { + return vendors[i].substr(0, vendors[i].length - 1); + } + } + + return false; + })(), + cssVendor = vendor ? '-' + vendor.toLowerCase() + '-' : '', + + // Style properties + transform = prefixStyle('transform'), + transitionProperty = prefixStyle('transitionProperty'), + transitionDuration = prefixStyle('transitionDuration'), + transformOrigin = prefixStyle('transformOrigin'), + transitionTimingFunction = prefixStyle('transitionTimingFunction'), + transitionDelay = prefixStyle('transitionDelay'), + + // Browser capabilities + isAndroid = (/android/gi).test(navigator.appVersion), + isIDevice = (/iphone|ipad/gi).test(navigator.appVersion), + isTouchPad = (/hp-tablet/gi).test(navigator.appVersion), + + has3d = prefixStyle('perspective') in dummyStyle, + hasTouch = 'ontouchstart' in window && !isTouchPad, + hasTransform = vendor !== false, + hasTransitionEnd = prefixStyle('transition') in dummyStyle, + + RESIZE_EV = 'onorientationchange' in window ? 'orientationchange' : 'resize', + START_EV = hasTouch ? 'touchstart' : 'mousedown', + MOVE_EV = hasTouch ? 'touchmove' : 'mousemove', + END_EV = hasTouch ? 'touchend' : 'mouseup', + CANCEL_EV = hasTouch ? 'touchcancel' : 'mouseup', + TRNEND_EV = (function () { + if ( vendor === false ) return false; + + var transitionEnd = { + '' : 'transitionend', + 'webkit' : 'webkitTransitionEnd', + 'Moz' : 'transitionend', + 'O' : 'otransitionend', + 'ms' : 'MSTransitionEnd' + }; + + return transitionEnd[vendor]; + })(), + + nextFrame = (function() { + return window.requestAnimationFrame || + window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + window.oRequestAnimationFrame || + window.msRequestAnimationFrame || + function(callback) { return setTimeout(callback, 1); }; + })(), + cancelFrame = (function () { + return window.cancelRequestAnimationFrame || + window.webkitCancelAnimationFrame || + window.webkitCancelRequestAnimationFrame || + window.mozCancelRequestAnimationFrame || + window.oCancelRequestAnimationFrame || + window.msCancelRequestAnimationFrame || + clearTimeout; + })(), + + // Helpers + translateZ = has3d ? ' translateZ(0)' : '', + + // Constructor + iScroll = function (el, options) { + var that = this, + i; + + that.wrapper = typeof el == 'object' ? el : doc.getElementById(el); + that.wrapper.style.overflow = 'hidden'; + that.scroller = that.wrapper.children[0]; + + // Default options + that.options = { + hScroll: true, + vScroll: true, + x: 0, + y: 0, + bounce: true, + bounceLock: false, + momentum: true, + lockDirection: true, + useTransform: true, + useTransition: false, + topOffset: 0, + checkDOMChanges: false, // Experimental + handleClick: true, + + // Scrollbar + hScrollbar: true, + vScrollbar: true, + fixedScrollbar: isAndroid, + hideScrollbar: isIDevice, + fadeScrollbar: isIDevice && has3d, + scrollbarClass: '', + + // Zoom + zoom: false, + zoomMin: 1, + zoomMax: 4, + doubleTapZoom: 2, + wheelAction: 'scroll', + + // Snap + snap: false, + snapThreshold: 1, + + // Events + onRefresh: null, + onBeforeScrollStart: function (e) { e.preventDefault(); }, + onScrollStart: null, + onBeforeScrollMove: null, + onScrollMove: null, + onBeforeScrollEnd: null, + onScrollEnd: null, + onTouchEnd: null, + onDestroy: null, + onZoomStart: null, + onZoom: null, + onZoomEnd: null + }; + + // User defined options + for (i in options) that.options[i] = options[i]; + + // Set starting position + that.x = that.options.x; + that.y = that.options.y; + + // Normalize options + that.options.useTransform = hasTransform && that.options.useTransform; + that.options.hScrollbar = that.options.hScroll && that.options.hScrollbar; + that.options.vScrollbar = that.options.vScroll && that.options.vScrollbar; + that.options.zoom = that.options.useTransform && that.options.zoom; + that.options.useTransition = hasTransitionEnd && that.options.useTransition; + + // Helpers FIX ANDROID BUG! + // translate3d and scale doesn't work together! + // Ignoring 3d ONLY WHEN YOU SET that.options.zoom + if ( that.options.zoom && isAndroid ){ + translateZ = ''; + } + + // Set some default styles + that.scroller.style[transitionProperty] = that.options.useTransform ? cssVendor + 'transform' : 'top left'; + that.scroller.style[transitionDuration] = '0'; + that.scroller.style[transformOrigin] = '0 0'; + if (that.options.useTransition) that.scroller.style[transitionTimingFunction] = 'cubic-bezier(0.33,0.66,0.66,1)'; + + if (that.options.useTransform) that.scroller.style[transform] = 'translate(' + that.x + 'px,' + that.y + 'px)' + translateZ; + else that.scroller.style.cssText += ';position:absolute;top:' + that.y + 'px;left:' + that.x + 'px'; + + if (that.options.useTransition) that.options.fixedScrollbar = true; + + that.refresh(); + + that._bind(RESIZE_EV, window); + that._bind(START_EV); + if (!hasTouch) { + if (that.options.wheelAction != 'none') { + that._bind('DOMMouseScroll'); + that._bind('mousewheel'); + } + } + + if (that.options.checkDOMChanges) that.checkDOMTime = setInterval(function () { + that._checkDOMChanges(); + }, 500); + }; + +// Prototype +iScroll.prototype = { + enabled: true, + x: 0, + y: 0, + steps: [], + scale: 1, + currPageX: 0, currPageY: 0, + pagesX: [], pagesY: [], + aniTime: null, + wheelZoomCount: 0, + + handleEvent: function (e) { + var that = this; + switch(e.type) { + case START_EV: + if (!hasTouch && e.button !== 0) return; + that._start(e); + break; + case MOVE_EV: that._move(e); break; + case END_EV: + case CANCEL_EV: that._end(e); break; + case RESIZE_EV: that._resize(); break; + case 'DOMMouseScroll': case 'mousewheel': that._wheel(e); break; + case TRNEND_EV: that._transitionEnd(e); break; + } + }, + + _checkDOMChanges: function () { + if (this.moved || this.zoomed || this.animating || + (this.scrollerW == this.scroller.offsetWidth * this.scale && this.scrollerH == this.scroller.offsetHeight * this.scale)) return; + + this.refresh(); + }, + + _scrollbar: function (dir) { + var that = this, + bar; + + if (!that[dir + 'Scrollbar']) { + if (that[dir + 'ScrollbarWrapper']) { + if (hasTransform) that[dir + 'ScrollbarIndicator'].style[transform] = ''; + that[dir + 'ScrollbarWrapper'].parentNode.removeChild(that[dir + 'ScrollbarWrapper']); + that[dir + 'ScrollbarWrapper'] = null; + that[dir + 'ScrollbarIndicator'] = null; + } + + return; + } + + if (!that[dir + 'ScrollbarWrapper']) { + // Create the scrollbar wrapper + bar = doc.createElement('div'); + + if (that.options.scrollbarClass) bar.className = that.options.scrollbarClass + dir.toUpperCase(); + else bar.style.cssText = 'position:absolute;z-index:100;' + (dir == 'h' ? 'height:7px;bottom:1px;left:2px;right:' + (that.vScrollbar ? '7' : '2') + 'px' : 'width:7px;bottom:' + (that.hScrollbar ? '7' : '2') + 'px;top:2px;right:1px'); + + bar.style.cssText += ';pointer-events:none;' + cssVendor + 'transition-property:opacity;' + cssVendor + 'transition-duration:' + (that.options.fadeScrollbar ? '350ms' : '0') + ';overflow:hidden;opacity:' + (that.options.hideScrollbar ? '0' : '1'); + + that.wrapper.appendChild(bar); + that[dir + 'ScrollbarWrapper'] = bar; + + // Create the scrollbar indicator + bar = doc.createElement('div'); + if (!that.options.scrollbarClass) { + bar.style.cssText = 'position:absolute;z-index:100;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);' + cssVendor + 'background-clip:padding-box;' + cssVendor + 'box-sizing:border-box;' + (dir == 'h' ? 'height:100%' : 'width:100%') + ';' + cssVendor + 'border-radius:3px;border-radius:3px'; + } + bar.style.cssText += ';pointer-events:none;' + cssVendor + 'transition-property:' + cssVendor + 'transform;' + cssVendor + 'transition-timing-function:cubic-bezier(0.33,0.66,0.66,1);' + cssVendor + 'transition-duration:0;' + cssVendor + 'transform: translate(0,0)' + translateZ; + if (that.options.useTransition) bar.style.cssText += ';' + cssVendor + 'transition-timing-function:cubic-bezier(0.33,0.66,0.66,1)'; + + that[dir + 'ScrollbarWrapper'].appendChild(bar); + that[dir + 'ScrollbarIndicator'] = bar; + } + + if (dir == 'h') { + that.hScrollbarSize = that.hScrollbarWrapper.clientWidth; + that.hScrollbarIndicatorSize = m.max(m.round(that.hScrollbarSize * that.hScrollbarSize / that.scrollerW), 8); + that.hScrollbarIndicator.style.width = that.hScrollbarIndicatorSize + 'px'; + that.hScrollbarMaxScroll = that.hScrollbarSize - that.hScrollbarIndicatorSize; + that.hScrollbarProp = that.hScrollbarMaxScroll / that.maxScrollX; + } else { + that.vScrollbarSize = that.vScrollbarWrapper.clientHeight; + that.vScrollbarIndicatorSize = m.max(m.round(that.vScrollbarSize * that.vScrollbarSize / that.scrollerH), 8); + that.vScrollbarIndicator.style.height = that.vScrollbarIndicatorSize + 'px'; + that.vScrollbarMaxScroll = that.vScrollbarSize - that.vScrollbarIndicatorSize; + that.vScrollbarProp = that.vScrollbarMaxScroll / that.maxScrollY; + } + + // Reset position + that._scrollbarPos(dir, true); + }, + + _resize: function () { + var that = this; + setTimeout(function () { that.refresh(); }, isAndroid ? 200 : 0); + }, + + _pos: function (x, y) { + if (this.zoomed) return; + + x = this.hScroll ? x : 0; + y = this.vScroll ? y : 0; + + if (this.options.useTransform) { + this.scroller.style[transform] = 'translate(' + x + 'px,' + y + 'px) scale(' + this.scale + ')' + translateZ; + } else { + x = m.round(x); + y = m.round(y); + this.scroller.style.left = x + 'px'; + this.scroller.style.top = y + 'px'; + } + + this.x = x; + this.y = y; + + this._scrollbarPos('h'); + this._scrollbarPos('v'); + }, + + _scrollbarPos: function (dir, hidden) { + var that = this, + pos = dir == 'h' ? that.x : that.y, + size; + + if (!that[dir + 'Scrollbar']) return; + + pos = that[dir + 'ScrollbarProp'] * pos; + + if (pos < 0) { + if (!that.options.fixedScrollbar) { + size = that[dir + 'ScrollbarIndicatorSize'] + m.round(pos * 3); + if (size < 8) size = 8; + that[dir + 'ScrollbarIndicator'].style[dir == 'h' ? 'width' : 'height'] = size + 'px'; + } + pos = 0; + } else if (pos > that[dir + 'ScrollbarMaxScroll']) { + if (!that.options.fixedScrollbar) { + size = that[dir + 'ScrollbarIndicatorSize'] - m.round((pos - that[dir + 'ScrollbarMaxScroll']) * 3); + if (size < 8) size = 8; + that[dir + 'ScrollbarIndicator'].style[dir == 'h' ? 'width' : 'height'] = size + 'px'; + pos = that[dir + 'ScrollbarMaxScroll'] + (that[dir + 'ScrollbarIndicatorSize'] - size); + } else { + pos = that[dir + 'ScrollbarMaxScroll']; + } + } + + that[dir + 'ScrollbarWrapper'].style[transitionDelay] = '0'; + that[dir + 'ScrollbarWrapper'].style.opacity = hidden && that.options.hideScrollbar ? '0' : '1'; + that[dir + 'ScrollbarIndicator'].style[transform] = 'translate(' + (dir == 'h' ? pos + 'px,0)' : '0,' + pos + 'px)') + translateZ; + }, + + _start: function (e) { + var that = this, + point = hasTouch ? e.touches[0] : e, + matrix, x, y, + c1, c2; + + if (!that.enabled) return; + + if (that.options.onBeforeScrollStart) that.options.onBeforeScrollStart.call(that, e); + + if (that.options.useTransition || that.options.zoom) that._transitionTime(0); + + that.moved = false; + that.animating = false; + that.zoomed = false; + that.distX = 0; + that.distY = 0; + that.absDistX = 0; + that.absDistY = 0; + that.dirX = 0; + that.dirY = 0; + + // Gesture start + if (that.options.zoom && hasTouch && e.touches.length > 1) { + c1 = m.abs(e.touches[0].pageX-e.touches[1].pageX); + c2 = m.abs(e.touches[0].pageY-e.touches[1].pageY); + that.touchesDistStart = m.sqrt(c1 * c1 + c2 * c2); + + that.originX = m.abs(e.touches[0].pageX + e.touches[1].pageX - that.wrapperOffsetLeft * 2) / 2 - that.x; + that.originY = m.abs(e.touches[0].pageY + e.touches[1].pageY - that.wrapperOffsetTop * 2) / 2 - that.y; + + if (that.options.onZoomStart) that.options.onZoomStart.call(that, e); + } + + if (that.options.momentum) { + if (that.options.useTransform) { + // Very lame general purpose alternative to CSSMatrix + matrix = getComputedStyle(that.scroller, null)[transform].replace(/[^0-9\-.,]/g, '').split(','); + x = +(matrix[12] || matrix[4]); + y = +(matrix[13] || matrix[5]); + } else { + x = +getComputedStyle(that.scroller, null).left.replace(/[^0-9-]/g, ''); + y = +getComputedStyle(that.scroller, null).top.replace(/[^0-9-]/g, ''); + } + + if (x != that.x || y != that.y) { + if (that.options.useTransition) that._unbind(TRNEND_EV); + else cancelFrame(that.aniTime); + that.steps = []; + that._pos(x, y); + if (that.options.onScrollEnd) that.options.onScrollEnd.call(that); + } + } + + that.absStartX = that.x; // Needed by snap threshold + that.absStartY = that.y; + + that.startX = that.x; + that.startY = that.y; + that.pointX = point.pageX; + that.pointY = point.pageY; + + that.startTime = e.timeStamp || Date.now(); + + if (that.options.onScrollStart) that.options.onScrollStart.call(that, e); + + that._bind(MOVE_EV, window); + that._bind(END_EV, window); + that._bind(CANCEL_EV, window); + }, + + _move: function (e) { + var that = this, + point = hasTouch ? e.touches[0] : e, + deltaX = point.pageX - that.pointX, + deltaY = point.pageY - that.pointY, + newX = that.x + deltaX, + newY = that.y + deltaY, + c1, c2, scale, + timestamp = e.timeStamp || Date.now(); + + if (that.options.onBeforeScrollMove) that.options.onBeforeScrollMove.call(that, e); + + // Zoom + if (that.options.zoom && hasTouch && e.touches.length > 1) { + c1 = m.abs(e.touches[0].pageX - e.touches[1].pageX); + c2 = m.abs(e.touches[0].pageY - e.touches[1].pageY); + that.touchesDist = m.sqrt(c1*c1+c2*c2); + + that.zoomed = true; + + scale = 1 / that.touchesDistStart * that.touchesDist * this.scale; + + if (scale < that.options.zoomMin) scale = 0.5 * that.options.zoomMin * Math.pow(2.0, scale / that.options.zoomMin); + else if (scale > that.options.zoomMax) scale = 2.0 * that.options.zoomMax * Math.pow(0.5, that.options.zoomMax / scale); + + that.lastScale = scale / this.scale; + + newX = this.originX - this.originX * that.lastScale + this.x; + newY = this.originY - this.originY * that.lastScale + this.y; + + this.scroller.style[transform] = 'translate(' + newX + 'px,' + newY + 'px) scale(' + scale + ')' + translateZ; + + if (that.options.onZoom) that.options.onZoom.call(that, e); + return; + } + + that.pointX = point.pageX; + that.pointY = point.pageY; + + // Slow down if outside of the boundaries + if (newX > 0 || newX < that.maxScrollX) { + newX = that.options.bounce ? that.x + (deltaX / 2) : newX >= 0 || that.maxScrollX >= 0 ? 0 : that.maxScrollX; + } + if (newY > that.minScrollY || newY < that.maxScrollY) { + newY = that.options.bounce ? that.y + (deltaY / 2) : newY >= that.minScrollY || that.maxScrollY >= 0 ? that.minScrollY : that.maxScrollY; + } + + that.distX += deltaX; + that.distY += deltaY; + that.absDistX = m.abs(that.distX); + that.absDistY = m.abs(that.distY); + + if (that.absDistX < 6 && that.absDistY < 6) { + return; + } + + // Lock direction + if (that.options.lockDirection) { + if (that.absDistX > that.absDistY + 5) { + newY = that.y; + deltaY = 0; + } else if (that.absDistY > that.absDistX + 5) { + newX = that.x; + deltaX = 0; + } + } + + that.moved = true; + that._pos(newX, newY); + that.dirX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0; + that.dirY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0; + + if (timestamp - that.startTime > 300) { + that.startTime = timestamp; + that.startX = that.x; + that.startY = that.y; + } + + if (that.options.onScrollMove) that.options.onScrollMove.call(that, e); + }, + + _end: function (e) { + if (hasTouch && e.touches.length !== 0) return; + + var that = this, + point = hasTouch ? e.changedTouches[0] : e, + target, ev, + momentumX = { dist:0, time:0 }, + momentumY = { dist:0, time:0 }, + duration = (e.timeStamp || Date.now()) - that.startTime, + newPosX = that.x, + newPosY = that.y, + distX, distY, + newDuration, + snap, + scale; + + that._unbind(MOVE_EV, window); + that._unbind(END_EV, window); + that._unbind(CANCEL_EV, window); + + if (that.options.onBeforeScrollEnd) that.options.onBeforeScrollEnd.call(that, e); + + if (that.zoomed) { + scale = that.scale * that.lastScale; + scale = Math.max(that.options.zoomMin, scale); + scale = Math.min(that.options.zoomMax, scale); + that.lastScale = scale / that.scale; + that.scale = scale; + + that.x = that.originX - that.originX * that.lastScale + that.x; + that.y = that.originY - that.originY * that.lastScale + that.y; + + that.scroller.style[transitionDuration] = '200ms'; + that.scroller.style[transform] = 'translate(' + that.x + 'px,' + that.y + 'px) scale(' + that.scale + ')' + translateZ; + + that.zoomed = false; + that.refresh(); + + if (that.options.onZoomEnd) that.options.onZoomEnd.call(that, e); + return; + } + + if (!that.moved) { + if (hasTouch) { + if (that.doubleTapTimer && that.options.zoom) { + // Double tapped + clearTimeout(that.doubleTapTimer); + that.doubleTapTimer = null; + if (that.options.onZoomStart) that.options.onZoomStart.call(that, e); + that.zoom(that.pointX, that.pointY, that.scale == 1 ? that.options.doubleTapZoom : 1); + if (that.options.onZoomEnd) { + setTimeout(function() { + that.options.onZoomEnd.call(that, e); + }, 200); // 200 is default zoom duration + } + } else if (this.options.handleClick) { + that.doubleTapTimer = setTimeout(function () { + that.doubleTapTimer = null; + + // Find the last touched element + target = point.target; + while (target.nodeType != 1) target = target.parentNode; + + if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA') { + ev = doc.createEvent('MouseEvents'); + ev.initMouseEvent('click', true, true, e.view, 1, + point.screenX, point.screenY, point.clientX, point.clientY, + e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, + 0, null); + ev._fake = true; + target.dispatchEvent(ev); + } + }, that.options.zoom ? 250 : 0); + } + } + + that._resetPos(400); + + if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); + return; + } + + if (duration < 300 && that.options.momentum) { + momentumX = newPosX ? that._momentum(newPosX - that.startX, duration, -that.x, that.scrollerW - that.wrapperW + that.x, that.options.bounce ? that.wrapperW : 0) : momentumX; + momentumY = newPosY ? that._momentum(newPosY - that.startY, duration, -that.y, (that.maxScrollY < 0 ? that.scrollerH - that.wrapperH + that.y - that.minScrollY : 0), that.options.bounce ? that.wrapperH : 0) : momentumY; + + newPosX = that.x + momentumX.dist; + newPosY = that.y + momentumY.dist; + + if ((that.x > 0 && newPosX > 0) || (that.x < that.maxScrollX && newPosX < that.maxScrollX)) momentumX = { dist:0, time:0 }; + if ((that.y > that.minScrollY && newPosY > that.minScrollY) || (that.y < that.maxScrollY && newPosY < that.maxScrollY)) momentumY = { dist:0, time:0 }; + } + + if (momentumX.dist || momentumY.dist) { + newDuration = m.max(m.max(momentumX.time, momentumY.time), 10); + + // Do we need to snap? + if (that.options.snap) { + distX = newPosX - that.absStartX; + distY = newPosY - that.absStartY; + if (m.abs(distX) < that.options.snapThreshold && m.abs(distY) < that.options.snapThreshold) { that.scrollTo(that.absStartX, that.absStartY, 200); } + else { + snap = that._snap(newPosX, newPosY); + newPosX = snap.x; + newPosY = snap.y; + newDuration = m.max(snap.time, newDuration); + } + } + + that.scrollTo(m.round(newPosX), m.round(newPosY), newDuration); + + if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); + return; + } + + // Do we need to snap? + if (that.options.snap) { + distX = newPosX - that.absStartX; + distY = newPosY - that.absStartY; + if (m.abs(distX) < that.options.snapThreshold && m.abs(distY) < that.options.snapThreshold) that.scrollTo(that.absStartX, that.absStartY, 200); + else { + snap = that._snap(that.x, that.y); + if (snap.x != that.x || snap.y != that.y) that.scrollTo(snap.x, snap.y, snap.time); + } + + if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); + return; + } + + that._resetPos(200); + if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); + }, + + _resetPos: function (time) { + var that = this, + resetX = that.x >= 0 ? 0 : that.x < that.maxScrollX ? that.maxScrollX : that.x, + resetY = that.y >= that.minScrollY || that.maxScrollY > 0 ? that.minScrollY : that.y < that.maxScrollY ? that.maxScrollY : that.y; + + if (resetX == that.x && resetY == that.y) { + if (that.moved) { + that.moved = false; + if (that.options.onScrollEnd) that.options.onScrollEnd.call(that); // Execute custom code on scroll end + } + + if (that.hScrollbar && that.options.hideScrollbar) { + if (vendor == 'webkit') that.hScrollbarWrapper.style[transitionDelay] = '300ms'; + that.hScrollbarWrapper.style.opacity = '0'; + } + if (that.vScrollbar && that.options.hideScrollbar) { + if (vendor == 'webkit') that.vScrollbarWrapper.style[transitionDelay] = '300ms'; + that.vScrollbarWrapper.style.opacity = '0'; + } + + return; + } + + that.scrollTo(resetX, resetY, time || 0); + }, + + _wheel: function (e) { + var that = this, + wheelDeltaX, wheelDeltaY, + deltaX, deltaY, + deltaScale; + + if ('wheelDeltaX' in e) { + wheelDeltaX = e.wheelDeltaX / 12; + wheelDeltaY = e.wheelDeltaY / 12; + } else if('wheelDelta' in e) { + wheelDeltaX = wheelDeltaY = e.wheelDelta / 12; + } else if ('detail' in e) { + wheelDeltaX = wheelDeltaY = -e.detail * 3; + } else { + return; + } + + if (that.options.wheelAction == 'zoom') { + deltaScale = that.scale * Math.pow(2, 1/3 * (wheelDeltaY ? wheelDeltaY / Math.abs(wheelDeltaY) : 0)); + if (deltaScale < that.options.zoomMin) deltaScale = that.options.zoomMin; + if (deltaScale > that.options.zoomMax) deltaScale = that.options.zoomMax; + + if (deltaScale != that.scale) { + if (!that.wheelZoomCount && that.options.onZoomStart) that.options.onZoomStart.call(that, e); + that.wheelZoomCount++; + + that.zoom(e.pageX, e.pageY, deltaScale, 400); + + setTimeout(function() { + that.wheelZoomCount--; + if (!that.wheelZoomCount && that.options.onZoomEnd) that.options.onZoomEnd.call(that, e); + }, 400); + } + + return; + } + + deltaX = that.x + wheelDeltaX; + deltaY = that.y + wheelDeltaY; + + if (deltaX > 0) deltaX = 0; + else if (deltaX < that.maxScrollX) deltaX = that.maxScrollX; + + if (deltaY > that.minScrollY) deltaY = that.minScrollY; + else if (deltaY < that.maxScrollY) deltaY = that.maxScrollY; + + if (that.maxScrollY < 0) { + that.scrollTo(deltaX, deltaY, 0); + } + }, + + _transitionEnd: function (e) { + var that = this; + + if (e.target != that.scroller) return; + + that._unbind(TRNEND_EV); + + that._startAni(); + }, + + + /** + * + * Utilities + * + */ + _startAni: function () { + var that = this, + startX = that.x, startY = that.y, + startTime = Date.now(), + step, easeOut, + animate; + + if (that.animating) return; + + if (!that.steps.length) { + that._resetPos(400); + return; + } + + step = that.steps.shift(); + + if (step.x == startX && step.y == startY) step.time = 0; + + that.animating = true; + that.moved = true; + + if (that.options.useTransition) { + that._transitionTime(step.time); + that._pos(step.x, step.y); + that.animating = false; + if (step.time) that._bind(TRNEND_EV); + else that._resetPos(0); + return; + } + + animate = function () { + var now = Date.now(), + newX, newY; + + if (now >= startTime + step.time) { + that._pos(step.x, step.y); + that.animating = false; + if (that.options.onAnimationEnd) that.options.onAnimationEnd.call(that); // Execute custom code on animation end + that._startAni(); + return; + } + + now = (now - startTime) / step.time - 1; + easeOut = m.sqrt(1 - now * now); + newX = (step.x - startX) * easeOut + startX; + newY = (step.y - startY) * easeOut + startY; + that._pos(newX, newY); + if (that.animating) that.aniTime = nextFrame(animate); + }; + + animate(); + }, + + _transitionTime: function (time) { + time += 'ms'; + this.scroller.style[transitionDuration] = time; + if (this.hScrollbar) this.hScrollbarIndicator.style[transitionDuration] = time; + if (this.vScrollbar) this.vScrollbarIndicator.style[transitionDuration] = time; + }, + + _momentum: function (dist, time, maxDistUpper, maxDistLower, size) { + var deceleration = 0.0006, + speed = m.abs(dist) / time, + newDist = (speed * speed) / (2 * deceleration), + newTime = 0, outsideDist = 0; + + // Proportinally reduce speed if we are outside of the boundaries + if (dist > 0 && newDist > maxDistUpper) { + outsideDist = size / (6 / (newDist / speed * deceleration)); + maxDistUpper = maxDistUpper + outsideDist; + speed = speed * maxDistUpper / newDist; + newDist = maxDistUpper; + } else if (dist < 0 && newDist > maxDistLower) { + outsideDist = size / (6 / (newDist / speed * deceleration)); + maxDistLower = maxDistLower + outsideDist; + speed = speed * maxDistLower / newDist; + newDist = maxDistLower; + } + + newDist = newDist * (dist < 0 ? -1 : 1); + newTime = speed / deceleration; + + return { dist: newDist, time: m.round(newTime) }; + }, + + _offset: function (el) { + var left = -el.offsetLeft, + top = -el.offsetTop; + + while (el = el.offsetParent) { + left -= el.offsetLeft; + top -= el.offsetTop; + } + + if (el != this.wrapper) { + left *= this.scale; + top *= this.scale; + } + + return { left: left, top: top }; + }, + + _snap: function (x, y) { + var that = this, + i, l, + page, time, + sizeX, sizeY; + + // Check page X + page = that.pagesX.length - 1; + for (i=0, l=that.pagesX.length; i= that.pagesX[i]) { + page = i; + break; + } + } + if (page == that.currPageX && page > 0 && that.dirX < 0) page--; + x = that.pagesX[page]; + sizeX = m.abs(x - that.pagesX[that.currPageX]); + sizeX = sizeX ? m.abs(that.x - x) / sizeX * 500 : 0; + that.currPageX = page; + + // Check page Y + page = that.pagesY.length-1; + for (i=0; i= that.pagesY[i]) { + page = i; + break; + } + } + if (page == that.currPageY && page > 0 && that.dirY < 0) page--; + y = that.pagesY[page]; + sizeY = m.abs(y - that.pagesY[that.currPageY]); + sizeY = sizeY ? m.abs(that.y - y) / sizeY * 500 : 0; + that.currPageY = page; + + // Snap with constant speed (proportional duration) + time = m.round(m.max(sizeX, sizeY)) || 200; + + return { x: x, y: y, time: time }; + }, + + _bind: function (type, el, bubble) { + (el || this.scroller).addEventListener(type, this, !!bubble); + }, + + _unbind: function (type, el, bubble) { + (el || this.scroller).removeEventListener(type, this, !!bubble); + }, + + + /** + * + * Public methods + * + */ + destroy: function () { + var that = this; + + that.scroller.style[transform] = ''; + + // Remove the scrollbars + that.hScrollbar = false; + that.vScrollbar = false; + that._scrollbar('h'); + that._scrollbar('v'); + + // Remove the event listeners + that._unbind(RESIZE_EV, window); + that._unbind(START_EV); + that._unbind(MOVE_EV, window); + that._unbind(END_EV, window); + that._unbind(CANCEL_EV, window); + + if (!that.options.hasTouch) { + that._unbind('DOMMouseScroll'); + that._unbind('mousewheel'); + } + + if (that.options.useTransition) that._unbind(TRNEND_EV); + + if (that.options.checkDOMChanges) clearInterval(that.checkDOMTime); + + if (that.options.onDestroy) that.options.onDestroy.call(that); + }, + + refresh: function () { + var that = this, + offset, + i, l, + els, + pos = 0, + page = 0; + + if (that.scale < that.options.zoomMin) that.scale = that.options.zoomMin; + that.wrapperW = that.wrapper.clientWidth || 1; + that.wrapperH = that.wrapper.clientHeight || 1; + + that.minScrollY = -that.options.topOffset || 0; + that.scrollerW = m.round(that.scroller.offsetWidth * that.scale); + that.scrollerH = m.round((that.scroller.offsetHeight + that.minScrollY) * that.scale); + that.maxScrollX = that.wrapperW - that.scrollerW; + that.maxScrollY = that.wrapperH - that.scrollerH + that.minScrollY; + that.dirX = 0; + that.dirY = 0; + + if (that.options.onRefresh) that.options.onRefresh.call(that); + + that.hScroll = that.options.hScroll && that.maxScrollX < 0; + that.vScroll = that.options.vScroll && (!that.options.bounceLock && !that.hScroll || that.scrollerH > that.wrapperH); + + that.hScrollbar = that.hScroll && that.options.hScrollbar; + that.vScrollbar = that.vScroll && that.options.vScrollbar && that.scrollerH > that.wrapperH; + + offset = that._offset(that.wrapper); + that.wrapperOffsetLeft = -offset.left; + that.wrapperOffsetTop = -offset.top; + + // Prepare snap + if (typeof that.options.snap == 'string') { + that.pagesX = []; + that.pagesY = []; + els = that.scroller.querySelectorAll(that.options.snap); + for (i=0, l=els.length; i= that.maxScrollX) { + that.pagesX[page] = pos; + pos = pos - that.wrapperW; + page++; + } + if (that.maxScrollX%that.wrapperW) that.pagesX[that.pagesX.length] = that.maxScrollX - that.pagesX[that.pagesX.length-1] + that.pagesX[that.pagesX.length-1]; + + pos = 0; + page = 0; + that.pagesY = []; + while (pos >= that.maxScrollY) { + that.pagesY[page] = pos; + pos = pos - that.wrapperH; + page++; + } + if (that.maxScrollY%that.wrapperH) that.pagesY[that.pagesY.length] = that.maxScrollY - that.pagesY[that.pagesY.length-1] + that.pagesY[that.pagesY.length-1]; + } + + // Prepare the scrollbars + that._scrollbar('h'); + that._scrollbar('v'); + + if (!that.zoomed) { + that.scroller.style[transitionDuration] = '0'; + that._resetPos(400); + } + }, + + scrollTo: function (x, y, time, relative) { + var that = this, + step = x, + i, l; + + that.stop(); + + if (!step.length) step = [{ x: x, y: y, time: time, relative: relative }]; + + for (i=0, l=step.length; i 0 ? 0 : pos.left < that.maxScrollX ? that.maxScrollX : pos.left; + pos.top = pos.top > that.minScrollY ? that.minScrollY : pos.top < that.maxScrollY ? that.maxScrollY : pos.top; + time = time === undefined ? m.max(m.abs(pos.left)*2, m.abs(pos.top)*2) : time; + + that.scrollTo(pos.left, pos.top, time); + }, + + scrollToPage: function (pageX, pageY, time) { + var that = this, x, y; + + time = time === undefined ? 400 : time; + + if (that.options.onScrollStart) that.options.onScrollStart.call(that); + + if (that.options.snap) { + pageX = pageX == 'next' ? that.currPageX+1 : pageX == 'prev' ? that.currPageX-1 : pageX; + pageY = pageY == 'next' ? that.currPageY+1 : pageY == 'prev' ? that.currPageY-1 : pageY; + + pageX = pageX < 0 ? 0 : pageX > that.pagesX.length-1 ? that.pagesX.length-1 : pageX; + pageY = pageY < 0 ? 0 : pageY > that.pagesY.length-1 ? that.pagesY.length-1 : pageY; + + that.currPageX = pageX; + that.currPageY = pageY; + x = that.pagesX[pageX]; + y = that.pagesY[pageY]; + } else { + x = -that.wrapperW * pageX; + y = -that.wrapperH * pageY; + if (x < that.maxScrollX) x = that.maxScrollX; + if (y < that.maxScrollY) y = that.maxScrollY; + } + + that.scrollTo(x, y, time); + }, + + disable: function () { + this.stop(); + this._resetPos(0); + this.enabled = false; + + // If disabled after touchstart we make sure that there are no left over events + this._unbind(MOVE_EV, window); + this._unbind(END_EV, window); + this._unbind(CANCEL_EV, window); + }, + + enable: function () { + this.enabled = true; + }, + + stop: function () { + if (this.options.useTransition) this._unbind(TRNEND_EV); + else cancelFrame(this.aniTime); + this.steps = []; + this.moved = false; + this.animating = false; + }, + + zoom: function (x, y, scale, time) { + var that = this, + relScale = scale / that.scale; + + if (!that.options.useTransform) return; + + that.zoomed = true; + time = time === undefined ? 200 : time; + x = x - that.wrapperOffsetLeft - that.x; + y = y - that.wrapperOffsetTop - that.y; + that.x = x - x * relScale + that.x; + that.y = y - y * relScale + that.y; + + that.scale = scale; + that.refresh(); + + that.x = that.x > 0 ? 0 : that.x < that.maxScrollX ? that.maxScrollX : that.x; + that.y = that.y > that.minScrollY ? that.minScrollY : that.y < that.maxScrollY ? that.maxScrollY : that.y; + + that.scroller.style[transitionDuration] = time + 'ms'; + that.scroller.style[transform] = 'translate(' + that.x + 'px,' + that.y + 'px) scale(' + scale + ')' + translateZ; + that.zoomed = false; + }, + + isReady: function () { + return !this.moved && !this.zoomed && !this.animating; + } +}; + +function prefixStyle (style) { + if ( vendor === '' ) return style; + + style = style.charAt(0).toUpperCase() + style.substr(1); + return vendor + style; +} + +dummyStyle = null; // for the sake of it + +if (typeof exports !== 'undefined') exports.iScroll = iScroll; +else window.iScroll = iScroll; + +})(window, document); diff --git a/WebContent/html/javascript/iconselect.js-1.0/nbproject/private/private.properties b/WebContent/html/javascript/iconselect.js-1.0/nbproject/private/private.properties index 3334426..d98a801 100644 --- a/WebContent/html/javascript/iconselect.js-1.0/nbproject/private/private.properties +++ b/WebContent/html/javascript/iconselect.js-1.0/nbproject/private/private.properties @@ -1,6 +1,6 @@ -browser.id=Chrome.INTEGRATED -copy.src.on.open=false -debug.url=DEFAULT_URL -index.file=index.html -run.as=LOCAL -url=http://localhost/IconSelectJS/ +browser.id=Chrome.INTEGRATED +copy.src.on.open=false +debug.url=DEFAULT_URL +index.file=index.html +run.as=LOCAL +url=http://localhost/IconSelectJS/ diff --git a/WebContent/html/javascript/iconselect.js-1.0/nbproject/private/private.xml b/WebContent/html/javascript/iconselect.js-1.0/nbproject/private/private.xml index 6807a2b..284eeec 100644 --- a/WebContent/html/javascript/iconselect.js-1.0/nbproject/private/private.xml +++ b/WebContent/html/javascript/iconselect.js-1.0/nbproject/private/private.xml @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/WebContent/html/javascript/iconselect.js-1.0/nbproject/project.properties b/WebContent/html/javascript/iconselect.js-1.0/nbproject/project.properties index d37ef95..8b7302c 100644 --- a/WebContent/html/javascript/iconselect.js-1.0/nbproject/project.properties +++ b/WebContent/html/javascript/iconselect.js-1.0/nbproject/project.properties @@ -1,7 +1,7 @@ -include.path=${php.global.include.path} -php.version=PHP_54 -source.encoding=UTF-8 -src.dir=. -tags.asp=false -tags.short=false -web.root=. +include.path=${php.global.include.path} +php.version=PHP_54 +source.encoding=UTF-8 +src.dir=. +tags.asp=false +tags.short=false +web.root=. diff --git a/WebContent/html/javascript/iconselect.js-1.0/nbproject/project.xml b/WebContent/html/javascript/iconselect.js-1.0/nbproject/project.xml index a77857e..1676022 100644 --- a/WebContent/html/javascript/iconselect.js-1.0/nbproject/project.xml +++ b/WebContent/html/javascript/iconselect.js-1.0/nbproject/project.xml @@ -1,9 +1,9 @@ - - - org.netbeans.modules.php.project - - - IconSelectJS - - - + + + org.netbeans.modules.php.project + + + IconSelectJS + + + diff --git a/WebContent/html/javascript/iconselect.js-1.0/profileIcon.js b/WebContent/html/javascript/iconselect.js-1.0/profileIcon.js index 1ad8373..6c1cb01 100644 --- a/WebContent/html/javascript/iconselect.js-1.0/profileIcon.js +++ b/WebContent/html/javascript/iconselect.js-1.0/profileIcon.js @@ -1,34 +1,34 @@ -var iconSelect; - - window.onload = function(){ - - iconSelect = new IconSelect("my-icon-select", - {'selectedIconWidth':23, - 'selectedIconHeight':23, - 'selectedBoxPadding':1, - 'iconsWidth':48, - 'iconsHeight':48, - 'boxIconSpace':1, - 'vectoralIconNumber':2, - 'horizontalIconNumber':6}); - - var icons = []; - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/aquarium.png', 'iconValue':'1'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/bird.png', 'iconValue':'2'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/bird-1.png', 'iconValue':'3'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/diamond.png', 'iconValue':'4'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/doughnut.png', 'iconValue':'5'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/flask.png', 'iconValue':'6'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/fruit.png', 'iconValue':'7'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/gingerbread-man.png', 'iconValue':'8'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/like.png', 'iconValue':'9'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/moon.png', 'iconValue':'10'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/octopus.png', 'iconValue':'11'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/paint-brush.png', 'iconValue':'12'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/snorkel.png', 'iconValue':'13'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/squirrel.png', 'iconValue':'14'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/sweater.png', 'iconValue':'15'}); - - iconSelect.refresh(icons); - +var iconSelect; + + window.onload = function(){ + + iconSelect = new IconSelect("my-icon-select", + {'selectedIconWidth':23, + 'selectedIconHeight':23, + 'selectedBoxPadding':1, + 'iconsWidth':48, + 'iconsHeight':48, + 'boxIconSpace':1, + 'vectoralIconNumber':2, + 'horizontalIconNumber':6}); + + var icons = []; + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/aquarium.png', 'iconValue':'1'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/bird.png', 'iconValue':'2'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/bird-1.png', 'iconValue':'3'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/diamond.png', 'iconValue':'4'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/doughnut.png', 'iconValue':'5'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/flask.png', 'iconValue':'6'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/fruit.png', 'iconValue':'7'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/gingerbread-man.png', 'iconValue':'8'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/like.png', 'iconValue':'9'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/moon.png', 'iconValue':'10'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/octopus.png', 'iconValue':'11'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/paint-brush.png', 'iconValue':'12'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/snorkel.png', 'iconValue':'13'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/squirrel.png', 'iconValue':'14'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/sweater.png', 'iconValue':'15'}); + + iconSelect.refresh(icons); + }; \ No newline at end of file diff --git a/WebContent/html/javascript/iconselect.js-1.0/readme.txt b/WebContent/html/javascript/iconselect.js-1.0/readme.txt index 255f2c7..7f69df2 100644 --- a/WebContent/html/javascript/iconselect.js-1.0/readme.txt +++ b/WebContent/html/javascript/iconselect.js-1.0/readme.txt @@ -1,18 +1,18 @@ - Code: IconSelect JS - - Year: 8 Dec 2013 - Autor: Buğra ÖZDEN - Mail: bugra.ozden@gmail.com - Site: bugraozden.com - - - You are free: - - to Share — to copy, distribute and transmit the work - to Remix — to adapt the work - to make commercial use of the work - - - - + Code: IconSelect JS + + Year: 8 Dec 2013 + Autor: Buğra ÖZDEN + Mail: bugra.ozden@gmail.com + Site: bugraozden.com + + + You are free: + + to Share — to copy, distribute and transmit the work + to Remix — to adapt the work + to make commercial use of the work + + + + Have Fun. \ No newline at end of file diff --git a/WebContent/html/javascript/listing.jsp b/WebContent/html/javascript/listing.jsp index 5fc1d46..b41f1f9 100644 --- a/WebContent/html/javascript/listing.jsp +++ b/WebContent/html/javascript/listing.jsp @@ -1,4 +1,4 @@ -<%@ page import = "database.MySQLAccess" %> +<%@ page import = "database.MySQLAccess,entities.ListedDevice" %> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> @@ -10,32 +10,29 @@ <% MySQLAccess myaccess = new MySQLAccess(); -myaccess.connectDB(); -String name = myaccess.getResult()[0][0]; -String description = myaccess.getResult()[0][1]; -String hardware = myaccess.getResult()[0][2]; -System.out.println(name); +ListedDevice[] mydevices = myaccess.getAllDevices(); + +//string representation of array. +String deviceString = ListedDevice.arrayToString(mydevices); //out.println(description); //out.println(hardware); + %> \ No newline at end of file diff --git a/WebContent/html/javascript/profileIcon.js b/WebContent/html/javascript/profileIcon.js index bb819ee..1b127b2 100644 --- a/WebContent/html/javascript/profileIcon.js +++ b/WebContent/html/javascript/profileIcon.js @@ -1,37 +1,37 @@ -var iconSelect; - - window.onload = function(){ - - iconSelect = new IconSelect("my-icon-select", - {'selectedIconWidth':23, - 'selectedIconHeight':23, - 'selectedBoxPadding':3, - 'iconsWidth':48, - 'iconsHeight':48, - 'boxIconSpace':5, - 'vectoralIconNumber':2, - 'horizontalIconNumber':8}); - - var icons = []; - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/1.png', 'iconValue':'1'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/2.png', 'iconValue':'2'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/3.png', 'iconValue':'3'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/4.png', 'iconValue':'4'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/5.png', 'iconValue':'5'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/6.png', 'iconValue':'6'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/7.png', 'iconValue':'7'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/8.png', 'iconValue':'8'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/9.png', 'iconValue':'9'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/10.png', 'iconValue':'10'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/11.png', 'iconValue':'11'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/12.png', 'iconValue':'12'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/13.png', 'iconValue':'13'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/14.png', 'iconValue':'14'}); - icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/15.png', 'iconValue':'15'}); - - iconSelect.refresh(icons); - - //around here is where you'll have to define the current image, then this will update as the user selects new ones! - $('#profimg').attr("src","../imgs/my-icons-collection-128px/png/11.png"); - +var iconSelect; + + window.onload = function(){ + + iconSelect = new IconSelect("my-icon-select", + {'selectedIconWidth':23, + 'selectedIconHeight':23, + 'selectedBoxPadding':3, + 'iconsWidth':48, + 'iconsHeight':48, + 'boxIconSpace':5, + 'vectoralIconNumber':2, + 'horizontalIconNumber':8}); + + var icons = []; + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/1.png', 'iconValue':'1'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/2.png', 'iconValue':'2'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/3.png', 'iconValue':'3'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/4.png', 'iconValue':'4'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/5.png', 'iconValue':'5'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/6.png', 'iconValue':'6'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/7.png', 'iconValue':'7'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/8.png', 'iconValue':'8'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/9.png', 'iconValue':'9'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/10.png', 'iconValue':'10'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/11.png', 'iconValue':'11'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/12.png', 'iconValue':'12'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/13.png', 'iconValue':'13'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/14.png', 'iconValue':'14'}); + icons.push({'iconFilePath':'../imgs/my-icons-collection-32px/png/15.png', 'iconValue':'15'}); + + iconSelect.refresh(icons); + + //around here is where you'll have to define the current image, then this will update as the user selects new ones! + $('#profimg').attr("src","../imgs/my-icons-collection-128px/png/11.png"); + }; \ No newline at end of file diff --git a/WebContent/html/javascript/profileSettings.js b/WebContent/html/javascript/profileSettings.js index 3615b1d..907c3b1 100644 --- a/WebContent/html/javascript/profileSettings.js +++ b/WebContent/html/javascript/profileSettings.js @@ -1,86 +1,86 @@ -//event listener on the apply changes button -document.getElementById('apply').addEventListener('click',applyChanges); -document.getElementById('inputName').addEventListener('keyup',checkEmpty); -document.getElementById('inputSSO').addEventListener('keyup',checkEmpty); -document.getElementById('closeBttn').addEventListener('click',function(){document.getElementById('missingcontent').style.display = "none";}); - -var typeTimer; -var doneTypingInterval = 2000 //ms - -$('#inputSSO').keyup(function(){clearTimeout(typeTimer); typeTimer = setTimeout(querySSO,doneTypingInterval);}); - -var flag = 0; -var name; -var SSO; -var telephone; -var email; - -//populates the fields -populate(); - -//sends applied changes to DB -function applyChanges(){ - if(flag == 0){ - name = $('#inputName').val(); - SSO = $('#inputSSO').val(); - telephone = $('#inputTelephone').val(); - email = $('#inputEmail').val(); - - //send these values to DB for updates to be made - //EX - //if(name != "") - //send to database - } - - else - $('#missingcontent').css('display','block'); -} - -//populates form fields if info exists in db already -function populate(){ - //get values from database - - //$('#inputName').val(name); - //$('#inputSSO').val(SSO); - //$('#inputTelephone').val(telephone); - //$('#inputEmail').val(email); -} - -function checkEmpty(){ - var id = this.getAttribute('id'); - if($('#' + id).val() == ""){ - $('#' + id).parent().attr('class','form-group has-error'); - $('#' + id).siblings('span').text(warningtext(id)) - } - else{ - $('#' + id).parent().attr('class','form-group'); - $('#' + id).siblings('span').text('') - } - -} - -function warningtext(id){ - if(id == "inputName") - return "This is a required field."; - else if (id == "inputSSO") - return "This is a required field."; -} - -function querySSO(){ - //query to see if SSO is in database already - - //if so... && val() != "" - //$('#' + id).parent().attr('class','form-group has-error'); - //$('#inputSSO').siblings('span').text('SSO is currently in use.'); - //flag = 1; - - //if not... && val() != "" - //$('#' + id).parent().attr('class','form-group'); - //$('#' + id).siblings('span').text(''); -} - -window.onclick = function(event) { - var modal = document.getElementById('missingcontent'); - if(event.target == modal) - modal.style.display = "none"; +//event listener on the apply changes button +document.getElementById('apply').addEventListener('click',applyChanges); +document.getElementById('inputName').addEventListener('keyup',checkEmpty); +document.getElementById('inputSSO').addEventListener('keyup',checkEmpty); +document.getElementById('closeBttn').addEventListener('click',function(){document.getElementById('missingcontent').style.display = "none";}); + +var typeTimer; +var doneTypingInterval = 2000 //ms + +$('#inputSSO').keyup(function(){clearTimeout(typeTimer); typeTimer = setTimeout(querySSO,doneTypingInterval);}); + +var flag = 0; +var name; +var SSO; +var telephone; +var email; + +//populates the fields +populate(); + +//sends applied changes to DB +function applyChanges(){ + if(flag == 0){ + name = $('#inputName').val(); + SSO = $('#inputSSO').val(); + telephone = $('#inputTelephone').val(); + email = $('#inputEmail').val(); + + //send these values to DB for updates to be made + //EX + //if(name != "") + //send to database + } + + else + $('#missingcontent').css('display','block'); +} + +//populates form fields if info exists in db already +function populate(){ + //get values from database + + //$('#inputName').val(name); + //$('#inputSSO').val(SSO); + //$('#inputTelephone').val(telephone); + //$('#inputEmail').val(email); +} + +function checkEmpty(){ + var id = this.getAttribute('id'); + if($('#' + id).val() == ""){ + $('#' + id).parent().attr('class','form-group has-error'); + $('#' + id).siblings('span').text(warningtext(id)) + } + else{ + $('#' + id).parent().attr('class','form-group'); + $('#' + id).siblings('span').text('') + } + +} + +function warningtext(id){ + if(id == "inputName") + return "This is a required field."; + else if (id == "inputSSO") + return "This is a required field."; +} + +function querySSO(){ + //query to see if SSO is in database already + + //if so... && val() != "" + //$('#' + id).parent().attr('class','form-group has-error'); + //$('#inputSSO').siblings('span').text('SSO is currently in use.'); + //flag = 1; + + //if not... && val() != "" + //$('#' + id).parent().attr('class','form-group'); + //$('#' + id).siblings('span').text(''); +} + +window.onclick = function(event) { + var modal = document.getElementById('missingcontent'); + if(event.target == modal) + modal.style.display = "none"; } \ No newline at end of file diff --git a/WebContent/html/webpages/admin.html b/WebContent/html/webpages/admin.html index cc969b6..312348b 100644 --- a/WebContent/html/webpages/admin.html +++ b/WebContent/html/webpages/admin.html @@ -1,90 +1,90 @@ - - - - - - - - - -Synchrony Financial - - - - - - - - - - - - - -
-

Welcome to the admin page

-
-
- - - - - - + + + + + + + + + +Synchrony Financial + + + + + + + + + + + + + +
+

Welcome to the admin page

+
+
+ + + + + + \ No newline at end of file diff --git a/WebContent/html/webpages/profileSettings.html b/WebContent/html/webpages/profileSettings.html index 5ff5ede..b907797 100644 --- a/WebContent/html/webpages/profileSettings.html +++ b/WebContent/html/webpages/profileSettings.html @@ -1,119 +1,119 @@ - - - - - - - - - - Synchrony Financial - - - - - - - - - - - - - - - - - - - - -
-
-
- -
-
-

Change profile image:

-
-
-
-

Profile Settings

-
- - - -
-
- - - -
-
- - -
-
- - -
- -
-
- - - - - - + + + + + + + + + + Synchrony Financial + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+

Change profile image:

+
+
+
+

Profile Settings

+
+ + + +
+
+ + + +
+
+ + +
+
+ + +
+ +
+
+ + + + + + \ No newline at end of file diff --git a/WebContent/html/webpages/requestPage.html b/WebContent/html/webpages/requestPage.html index 7ac04a7..e4d7bb8 100644 --- a/WebContent/html/webpages/requestPage.html +++ b/WebContent/html/webpages/requestPage.html @@ -1,104 +1,104 @@ - - - - - - - - - - Synchrony Financial - - - - - - - - - - - - - -
-

Available Devices

-

Choose an option to the left to begin requesting!

-
- -
-

Added to Cart

-
- -
-

Already in Cart

-
- - - - + + + + + + + + + + Synchrony Financial + + + + + + + + + + + + + +
+

Available Devices

+

Choose an option to the left to begin requesting!

+
+ +
+

Added to Cart

+
+ +
+

Already in Cart

+
+ + + + \ No newline at end of file diff --git a/src/database/MySQLAccess.java b/src/database/MySQLAccess.java index 0c6bf04..404d095 100644 --- a/src/database/MySQLAccess.java +++ b/src/database/MySQLAccess.java @@ -1,60 +1,86 @@ -package database; - -import java.sql.*; - -import entities.RentedDevice; - -public class MySQLAccess { - - String[][] result = new String[20][3]; - - public void connectDB() throws SQLException, ClassNotFoundException { - System.getenv("VCAP_SERVICES"); - Class.forName("com.mysql.jdbc.Driver"); - Connection connect = DriverManager.getConnection("jdbc:mysql://us-cdbr-iron-east-04.cleardb.net/ad_15a989204c2ff8a?user=b372dfe7409692&password=74f6e317", "b372dfe7409692", "74f6e317"); - Statement statement = connect.createStatement(); - //PreparedStatement preparedStatement = null; - ResultSet resultSet = statement.executeQuery("SELECT * FROM devices"); - - while(resultSet.next()){ - String deviceName = resultSet.getString("Device_Name"); - String deviceDescription = resultSet.getString("Device_Description"); - String hardwareType = resultSet.getString("Hardware_Model"); - - for(int i = 0; i<1; i++){ - result[i][0] = deviceName; - result[i][1] = deviceDescription; - result[i][2] = hardwareType; - } - } - } - - public RentedDevice[] getUserDevices(String userID) throws SQLException, ClassNotFoundException{ - //Not sure how to get cookie information (if that is how we choose to accomplish this...) ? But this should be a passed parameter - System.getenv("VCAP_SERVICES"); - Class.forName("com.mysql.jdbc.Driver"); - Connection connect = DriverManager.getConnection("jdbc:mysql://us-cdbr-iron-east-04.cleardb.net/ad_15a989204c2ff8a?user=b372dfe7409692&password=74f6e317", "b372dfe7409692", "74f6e317"); - Statement stmt = connect.createStatement(); - ResultSet resultSet = stmt.executeQuery("SELECT Device_ID, Device_Name, Device_Description, Ticket_ID, Hardware, Model, Borrow_Date FROM devices WHERE Renter = " + userID); - int counter = 0; - - resultSet.last(); - int rows = resultSet.getRow(); - resultSet.beforeFirst(); - - //Covers amount of rows, and 6 attributes (indices 0-5) - RentedDevice[] devices = new RentedDevice[rows]; - - //iterate result set - while(resultSet.next()){ - devices[counter] = new RentedDevice(resultSet.getInt("Device_ID") + "",resultSet.getString("Device_Name"),resultSet.getString("Device_Description"),resultSet.getInt("Ticket_ID") + "",resultSet.getString("Hardware"),resultSet.getString("Model"),resultSet.getString("Borrow_Date")); - counter++; - } - - return devices; - } - - public String[][] getResult(){ - return result; - } -} +package database; + +import java.sql.*; + +import entities.ListedDevice; +import entities.RentedDevice; + +public class MySQLAccess { + + String[][] result = new String[20][3]; + + public void connectDB() throws SQLException, ClassNotFoundException { + System.getenv("VCAP_SERVICES"); + Class.forName("com.mysql.jdbc.Driver"); + Connection connect = DriverManager.getConnection("jdbc:mysql://us-cdbr-iron-east-04.cleardb.net/ad_15a989204c2ff8a?user=b372dfe7409692&password=74f6e317", "b372dfe7409692", "74f6e317"); + Statement statement = connect.createStatement(); + //PreparedStatement preparedStatement = null; + ResultSet resultSet = statement.executeQuery("SELECT * FROM devices"); + + while(resultSet.next()){ + String deviceName = resultSet.getString("Device_Name"); + String deviceDescription = resultSet.getString("Device_Description"); + String hardwareType = resultSet.getString("Hardware_Model"); + + for(int i = 0; i<1; i++){ + result[i][0] = deviceName; + result[i][1] = deviceDescription; + result[i][2] = hardwareType; + } + } + } + + public RentedDevice[] getUserDevices(String userID) throws SQLException, ClassNotFoundException{ + //Not sure how to get cookie information (if that is how we choose to accomplish this...) ? But this should be a passed parameter + System.getenv("VCAP_SERVICES"); + Class.forName("com.mysql.jdbc.Driver"); + Connection connect = DriverManager.getConnection("jdbc:mysql://us-cdbr-iron-east-04.cleardb.net/ad_15a989204c2ff8a?user=b372dfe7409692&password=74f6e317", "b372dfe7409692", "74f6e317"); + Statement stmt = connect.createStatement(); + ResultSet resultSet = stmt.executeQuery("SELECT Device_ID, Device_Name, Device_Description, Ticket_ID, Hardware, Model, Borrow_Date FROM devices WHERE Renter = " + userID); + int counter = 0; + + resultSet.last(); + int rows = resultSet.getRow(); + resultSet.beforeFirst(); + + //Covers amount of rows, and 6 attributes (indices 0-5) + RentedDevice[] devices = new RentedDevice[rows]; + + //iterate result set + while(resultSet.next()){ + devices[counter] = new RentedDevice(resultSet.getInt("Device_ID") + "",resultSet.getString("Device_Name"),resultSet.getString("Device_Description"),resultSet.getInt("Ticket_ID") + "",resultSet.getString("Hardware"),resultSet.getString("Model"),resultSet.getString("Borrow_Date")); + counter++; + } + + return devices; + } + + public ListedDevice[] getAllDevices() throws SQLException, ClassNotFoundException{ + //Not sure how to get cookie information (if that is how we choose to accomplish this...) ? But this should be a passed parameter + System.getenv("VCAP_SERVICES"); + Class.forName("com.mysql.jdbc.Driver"); + Connection connect = DriverManager.getConnection("jdbc:mysql://us-cdbr-iron-east-04.cleardb.net/ad_15a989204c2ff8a?user=b372dfe7409692&password=74f6e317", "b372dfe7409692", "74f6e317"); + Statement stmt = connect.createStatement(); + ResultSet resultSet = stmt.executeQuery("SELECT * FROM devices"); + int counter = 0; + + resultSet.last(); + int rows = resultSet.getRow(); + resultSet.beforeFirst(); + + //Covers amount of rows, and 6 attributes (indices 0-5) + ListedDevice[] devices = new ListedDevice[rows]; + + //iterate result set + while(resultSet.next()){ + devices[counter] = new ListedDevice(resultSet.getString("Device_Name"),resultSet.getString("Device_Description"),resultSet.getString("Hardware"),resultSet.getString("Model")); + counter++; + } + + return devices; + } + + public String[][] getResult(){ + return result; + } +} diff --git a/src/entities/ListedDevice.java b/src/entities/ListedDevice.java new file mode 100644 index 0000000..77877dc --- /dev/null +++ b/src/entities/ListedDevice.java @@ -0,0 +1,50 @@ +package entities; +/** + * Simple Modification of the RentedDevice class for use in the listed devices page. + * @author John Costa III + * + */ +public class ListedDevice { + private String Device_Name; + private String Device_Description; + private String Hardware; + private String Model; + public ListedDevice(String name, String desc, String hardware, String model) { + Device_Name = name; + Device_Description = desc; + Hardware = hardware; + Model = model; + } + /** + * Formatting the device to fit a JSON object. + * @author - Connor + */ + public String toString(){ + StringBuilder sb = new StringBuilder(); + String comma = ", "; + sb.append("{\"name\": \"").append(Device_Name).append("\"").append(comma); + sb.append("\"description\": \"").append(Device_Description).append("\"").append(comma); + sb.append("\"hardware\": \"").append(Hardware).append("\"").append(comma); + sb.append("\"model\": \"").append(Model).append("\""); + sb.append("}"); + return sb.toString(); + } + /** + * This is a static function which will turn a Listed Device array into its proper string. (modification) + * @author - Connor + * @param array + * @return + */ + public static String arrayToString(ListedDevice[] array){ + StringBuilder sb = new StringBuilder(); + sb.append("["); + for(int i = 0; i < array.length; i++){ + sb.append(array[i].toString()); + if(i+1 != array.length){ + sb.append(","); + } + } + sb.append("]"); + return sb.toString(); + } +}