7
|
1 /*!
|
|
2 * JBoss, Home of Professional Open Source
|
|
3 * Copyright 2011, Red Hat, Inc. and individual contributors
|
|
4 * by the @authors tag. See the copyright.txt in the distribution for a
|
|
5 * full listing of individual contributors.
|
|
6 *
|
|
7 * This is free software; you can redistribute it and/or modify it
|
|
8 * under the terms of the GNU Lesser General Public License as
|
|
9 * published by the Free Software Foundation; either version 2.1 of
|
|
10 * the License, or (at your option) any later version.
|
|
11 *
|
|
12 * This software is distributed in the hope that it will be useful,
|
|
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
15 * Lesser General Public License for more details.
|
|
16 *
|
|
17 * You should have received a copy of the GNU Lesser General Public
|
|
18 * License along with this software; if not, write to the Free
|
|
19 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
20 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
|
21 *
|
|
22 * Author: Wesley Hales
|
|
23 *
|
|
24 * version: 1.0.0.Alpha
|
|
25 */
|
|
26
|
|
27 (function(window,document,undefined){
|
|
28
|
|
29 var slidfast = (function(){
|
|
30
|
|
31 var slidfast = function(startupOptions){
|
|
32 options = startupOptions;
|
|
33 return new slidfast.core.init();
|
|
34 },
|
|
35
|
|
36 options,
|
|
37
|
|
38 defaultPageID = "",
|
|
39
|
|
40 defaultPageHash = "",
|
|
41
|
|
42 backButtonID = "",
|
|
43
|
|
44 focusPage = null,
|
|
45
|
|
46 isReady = false;
|
|
47
|
|
48 slidfast.core = slidfast.prototype = {
|
|
49
|
|
50 constructor: slidfast,
|
|
51
|
|
52 start: function() {
|
|
53 if(options){
|
|
54 try{
|
|
55 defaultPageID = options.defaultPageID;
|
|
56 defaultPageHash = options.defaultPageHash;
|
|
57 backButtonID = options.backButtonID;
|
|
58 }catch(e){
|
|
59
|
|
60 }
|
|
61 }
|
|
62 try{
|
|
63 slidfast.core.hideURLBar();
|
|
64 slidfast.core.locationChange();
|
|
65 }catch(e){
|
|
66 alert('You must define the page ID and location hash as default parameters. \n Error:' + e)
|
|
67 }
|
|
68 },
|
|
69
|
|
70 hideURLBar: function() {
|
|
71 //hide the url bar on mobile devices
|
|
72 setTimeout(scrollTo, 0, 0, 1)
|
|
73 },
|
|
74
|
|
75 slideTo : function (id) {
|
|
76 if(!focusPage) {
|
|
77 focusPage = document.getElementById(defaultPageID);
|
|
78 }
|
|
79
|
|
80 //1.)the page we are bringing into focus dictates how
|
|
81 // the current page will exit. So let's see what classes
|
|
82 // our incoming page is using. We know it will have stage[right|left|etc...]
|
|
83 var classes = document.getElementById(id).className.split(' ');
|
|
84
|
|
85 //2.)decide if the incoming page is assigned to right or left
|
|
86 // (-1 if no match)
|
|
87 var stageType = classes.indexOf('stage-left');
|
|
88
|
|
89 //3.) decide how this focused page should exit.
|
|
90 if (stageType > 0) {
|
|
91 focusPage.className = 'page transition stage-right';
|
|
92 } else {
|
|
93 focusPage.className = 'page transition stage-left';
|
|
94 }
|
|
95
|
|
96 //4. refresh/set the variable
|
|
97 focusPage = document.getElementById(id);
|
|
98
|
|
99 //5. Bring in the new page and set the global.
|
|
100 focusPage.className = 'page transition stage-center';
|
|
101 },
|
|
102
|
|
103 init: function() {
|
|
104
|
|
105 window.addEventListener('load', function(e) {
|
|
106 isReady = true;
|
|
107 slidfast.core.start(defaultPageID, defaultPageHash);
|
|
108 }, false);
|
|
109
|
|
110 window.addEventListener('hashchange', function(e) {
|
|
111 slidfast.core.locationChange();
|
|
112 }, false);
|
|
113
|
|
114 return slidfast.core;
|
|
115
|
|
116 },
|
|
117
|
|
118 locationChange: function() {
|
|
119 if (location.hash === "#" + defaultPageHash || location.hash == '') {
|
|
120 slidfast.core.slideTo(defaultPageID);
|
|
121 if(backButtonID){
|
|
122 //we're on the default page, so no need for back button
|
|
123 document.getElementById(backButtonID).className = 'hide-button';
|
|
124 }
|
|
125 } else {
|
|
126 var hashArray = location.hash.split(':');
|
|
127 var id;
|
|
128 var sample;
|
|
129 if (hashArray.length === 2) {
|
|
130 id = hashArray[0].replace('#', '');
|
|
131 sample = hashArray[1];
|
|
132 try{
|
|
133 //method defined in a4j:jsFunction
|
|
134 handleHashChange(id, sample);
|
|
135 }catch(e){
|
|
136 alert('you must define an a4j:jsFunction component with name=\"handleHashChange\"')
|
|
137 }
|
|
138 if(backButtonID){
|
|
139 //show the back button and attach functions
|
|
140 document.getElementById(backButtonID).className = 'basic-button left-header-button';
|
|
141 document.getElementById(backButtonID).onclick = function() {
|
|
142 location.hash = defaultPageHash;
|
|
143 };
|
|
144 }
|
|
145 }
|
|
146
|
|
147 }
|
|
148 },
|
|
149
|
|
150 flip: function() {
|
|
151 //get a handle on the flippable region
|
|
152 var front = document.getElementById('front');
|
|
153 var back = document.getElementById('back');
|
|
154
|
|
155 //just a simple way to see what the state is
|
|
156 var classes = front.className.split(' ');
|
|
157 var flipped = classes.indexOf('flipped');
|
|
158
|
|
159 if (flipped >= 0) {
|
|
160 //already flipped, so return to original
|
|
161 front.className = 'normal';
|
|
162 back.className = 'flipped';
|
|
163 } else {
|
|
164 //do the flip
|
|
165 front.className = 'flipped';
|
|
166 back.className = 'normal';
|
|
167
|
|
168 }
|
|
169 }
|
|
170
|
|
171 };
|
|
172 slidfast.core.init.prototype = slidfast.core;
|
|
173 return slidfast;
|
|
174
|
|
175 })();
|
|
176
|
|
177 window.slidfast = slidfast;
|
|
178 })(window,document);
|
|
179
|
|
180
|
|
181
|