k4slide 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +19 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +21 -0
- data/assets/k4slide.css +1 -0
- data/assets/k4slide.js +23509 -0
- data/assets-src/javascripts/k4slide.js +20 -0
- data/assets-src/javascripts/lib/cheesepie/closure/goog/events/ready.js +120 -0
- data/assets-src/javascripts/lib/cheesepie/closure/goog/events/ready_test.html +31 -0
- data/assets-src/javascripts/lib/k4/logger.js +101 -0
- data/assets-src/javascripts/lib/k4/slide/base.js +89 -0
- data/assets-src/javascripts/lib/k4/slide/config.js +75 -0
- data/assets-src/javascripts/lib/k4/slide/controller.js +255 -0
- data/assets-src/javascripts/lib/k4/slide/slide.js +161 -0
- data/assets-src/stylesheets/k4slide.scss +11 -0
- data/assets-src/stylesheets/themes/_config.scss +4 -0
- data/assets-src/stylesheets/themes/_mixin.scss +6 -0
- data/assets-src/stylesheets/themes/base.scss +68 -0
- data/example/example.html +43 -0
- data/example/example.md +19 -0
- data/k4slide.gemspec +28 -0
- data/lib/k4slide/erb/layout.html.erb +13 -0
- data/lib/k4slide/expand_compiler_options.rb +50 -0
- data/lib/k4slide/markdown_compiler.rb +27 -0
- data/lib/k4slide/markdown_renderer.rb +30 -0
- data/lib/k4slide/tasks.rb +158 -0
- data/lib/k4slide/version.rb +3 -0
- data/lib/k4slide.rb +10 -0
- metadata +157 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
/**
|
2
|
+
* k4slide.js
|
3
|
+
*/
|
4
|
+
goog.provide('k4slide.App');
|
5
|
+
|
6
|
+
goog.require('k4.slide.Base');
|
7
|
+
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @constructor
|
11
|
+
* @extends {k4.slide.Base}
|
12
|
+
* @param {goog.domDomHelper|null|undefined} opt_domHelper DOM helper
|
13
|
+
*/
|
14
|
+
k4slide.App = function(opt_domHelper) {
|
15
|
+
goog.base(this, opt_domHelper);
|
16
|
+
}
|
17
|
+
goog.inherits(k4slide.App, k4.slide.Base);
|
18
|
+
goog.addSingletonGetter(k4slide.App);
|
19
|
+
|
20
|
+
k4slide.App.getInstance();
|
@@ -0,0 +1,120 @@
|
|
1
|
+
/**
|
2
|
+
* @fileoverview Handle DOMContentLoaded event.
|
3
|
+
* @author http://d.hatena.ne.jp/cheesepie
|
4
|
+
*/
|
5
|
+
goog.provide('goog.events.ready');
|
6
|
+
|
7
|
+
goog.require('goog.events');
|
8
|
+
|
9
|
+
|
10
|
+
/**
|
11
|
+
* Handle DOMContentLoaded event.
|
12
|
+
* <pre>
|
13
|
+
* Example:
|
14
|
+
* goog.events.ready(function() {
|
15
|
+
* // some action...
|
16
|
+
* });
|
17
|
+
* goog.events.listen(document, 'ready', function() {
|
18
|
+
* // some action...
|
19
|
+
* }, false);
|
20
|
+
* </pre>
|
21
|
+
*
|
22
|
+
* @param {function} callback Event listener
|
23
|
+
* @return {function.<goog.events.ready>}
|
24
|
+
*/
|
25
|
+
goog.events.ready = function(fn) {
|
26
|
+
// Attach the listeners
|
27
|
+
goog.events.readyObj.bindReady();
|
28
|
+
|
29
|
+
// If element is already ready
|
30
|
+
if (goog.events.readyObj.isReady) {
|
31
|
+
fn.call(document, goog);
|
32
|
+
} else {
|
33
|
+
goog.events.readyObj.readyList.push(fn);
|
34
|
+
}
|
35
|
+
return this;
|
36
|
+
};
|
37
|
+
|
38
|
+
/**
|
39
|
+
* The object related goog.events.ready.
|
40
|
+
*/
|
41
|
+
goog.events.readyObj = {
|
42
|
+
/**
|
43
|
+
* @type {boolean}
|
44
|
+
*/
|
45
|
+
isReady: false,
|
46
|
+
/**
|
47
|
+
* @type {Array}
|
48
|
+
*/
|
49
|
+
readyList: [],
|
50
|
+
/**
|
51
|
+
* @type {boolean}
|
52
|
+
*/
|
53
|
+
readyBound: false,
|
54
|
+
|
55
|
+
/**
|
56
|
+
* bind DOMContentLoaded event.
|
57
|
+
*/
|
58
|
+
bindReady: function() {
|
59
|
+
var ro = goog.events.readyObj;
|
60
|
+
if (ro.readyBound) { return; }
|
61
|
+
ro.readyBound = true;
|
62
|
+
|
63
|
+
// Mozilla, Opera and webkit
|
64
|
+
if (document.addEventListener) {
|
65
|
+
document.addEventListener('DOMContentLoaded', function() {
|
66
|
+
document.removeEventListener('DOMContentLoaded', arguments.callee, false);
|
67
|
+
ro.ready();
|
68
|
+
}, false);
|
69
|
+
|
70
|
+
// If IE event model is used
|
71
|
+
} else if (document.attachEvent) {
|
72
|
+
document.attachEvent('onreadystatechange', function() {
|
73
|
+
if (document.readyState === "complete") {
|
74
|
+
document.detachEvent('onreadystatechange', arguments.callee);
|
75
|
+
ro.ready();
|
76
|
+
}
|
77
|
+
});
|
78
|
+
|
79
|
+
// If IE and not an iframe
|
80
|
+
if (document.documentElement.doScroll && window == window.top) (function() {
|
81
|
+
if (ro.isReady) { return; }
|
82
|
+
|
83
|
+
try {
|
84
|
+
// If IE us used, use the trick
|
85
|
+
// http://javascript.nwbox.com/IEContentLoaded
|
86
|
+
document.documentElement.doScroll("left");
|
87
|
+
} catch (error) {
|
88
|
+
setTimeout(arguments.callee, 0);
|
89
|
+
return;
|
90
|
+
}
|
91
|
+
// and execute any waiting functions
|
92
|
+
ro.ready();
|
93
|
+
})();
|
94
|
+
}
|
95
|
+
|
96
|
+
// A failback to window.onload, that will always work
|
97
|
+
goog.events.listenOnce(window, 'load', ro.ready, false);
|
98
|
+
},
|
99
|
+
|
100
|
+
/**
|
101
|
+
* Call functions in readyList
|
102
|
+
*/
|
103
|
+
ready: function() {
|
104
|
+
var ro = goog.events.readyObj;
|
105
|
+
if (! ro.isReady) {
|
106
|
+
// Remember that the DOM is ready
|
107
|
+
ro.isReady = true;
|
108
|
+
|
109
|
+
if (ro.readyList) {
|
110
|
+
// Execute all of them
|
111
|
+
goog.array.forEach(ro.readyList, function(fn, idx) {
|
112
|
+
fn.call(document);
|
113
|
+
});
|
114
|
+
// Reset the list of functions
|
115
|
+
ro.readyList = null;
|
116
|
+
}
|
117
|
+
goog.events.fireListeners(document, 'ready', false);
|
118
|
+
}
|
119
|
+
}
|
120
|
+
};
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Closure Unit Tests - goog.events.ready</title>
|
5
|
+
<script src="../../../../closure/goog/base.js"></script>
|
6
|
+
<script>
|
7
|
+
goog.require('goog.events');
|
8
|
+
goog.require('goog.events.ready');
|
9
|
+
goog.require('goog.testing.jsunit');
|
10
|
+
</script>
|
11
|
+
</head>
|
12
|
+
<body>
|
13
|
+
<script>
|
14
|
+
function tearDown() {
|
15
|
+
goog.events.removeAll();
|
16
|
+
}
|
17
|
+
|
18
|
+
function testOnDOMContentLoaded() {
|
19
|
+
goog.events.ready(function() {
|
20
|
+
assertTrue(goog.events.readyObj.readyBound);
|
21
|
+
});
|
22
|
+
}
|
23
|
+
|
24
|
+
function testIsReadyBeforeOnLoad() {
|
25
|
+
window.onload = function() {
|
26
|
+
assertTrue(goog.events.readyObj.isReady);
|
27
|
+
};
|
28
|
+
}
|
29
|
+
</script>
|
30
|
+
</body>
|
31
|
+
</html>
|
@@ -0,0 +1,101 @@
|
|
1
|
+
goog.provide('k4.Logger');
|
2
|
+
goog.provide('logger');
|
3
|
+
|
4
|
+
|
5
|
+
/**
|
6
|
+
* @constructor
|
7
|
+
*/
|
8
|
+
k4.Logger = function() {
|
9
|
+
// constructor
|
10
|
+
};
|
11
|
+
goog.addSingletonGetter(k4.Logger);
|
12
|
+
|
13
|
+
/**
|
14
|
+
* @type {object}
|
15
|
+
*/
|
16
|
+
k4.Logger.LEVELS = {
|
17
|
+
DEBUG: 0,
|
18
|
+
INFO: 1,
|
19
|
+
WARN: 7,
|
20
|
+
ERROR: 8,
|
21
|
+
CRITICAL: 9
|
22
|
+
};
|
23
|
+
|
24
|
+
/**
|
25
|
+
* Logging level
|
26
|
+
*/
|
27
|
+
k4.Logger.LEVEL = k4.Logger.LEVELS.DEBUG;
|
28
|
+
|
29
|
+
/**
|
30
|
+
* @type {function|null|undefined}
|
31
|
+
*/
|
32
|
+
k4.Logger.LOGGING_FUNCTION = null;
|
33
|
+
|
34
|
+
|
35
|
+
/**
|
36
|
+
* logging with console.log
|
37
|
+
* @param {number} level logging level
|
38
|
+
* @param {*} args logging arguments
|
39
|
+
*/
|
40
|
+
k4.Logger.prototype.logging = function(level, args) {
|
41
|
+
if (level >= k4.Logger.LEVEL) {
|
42
|
+
var fn = (goog.isDefAndNotNull(k4.Logger.LOGGING_FUNCTION) && goog.isFunction(k4.Logger.LOGGING_FUNCTION))
|
43
|
+
? k4.Logger.LOGGING_FUNCTION : ((this.enableConsole()) ? function(a){console.log(a);} : goog.nullFunction);
|
44
|
+
fn(args);
|
45
|
+
}
|
46
|
+
};
|
47
|
+
|
48
|
+
/**
|
49
|
+
* Arguments object convert to Array
|
50
|
+
*/
|
51
|
+
k4.Logger.prototype.argumentsToArray = function(args) {
|
52
|
+
return Array.prototype.slice.call(args);
|
53
|
+
};
|
54
|
+
|
55
|
+
/**
|
56
|
+
* Check enabled console.log function.
|
57
|
+
*/
|
58
|
+
k4.Logger.prototype.enableConsole = function() {
|
59
|
+
return (console && console.log && goog.isFunction(console.log));
|
60
|
+
};
|
61
|
+
|
62
|
+
|
63
|
+
/**
|
64
|
+
* logging DEBUG
|
65
|
+
*/
|
66
|
+
k4.Logger.prototype.debug = function() {
|
67
|
+
this.logging(k4.Logger.LEVELS.DEBUG, this.argumentsToArray(arguments));
|
68
|
+
};
|
69
|
+
|
70
|
+
/**
|
71
|
+
* logging INFO
|
72
|
+
*/
|
73
|
+
k4.Logger.prototype.info = function() {
|
74
|
+
this.logging(k4.Logger.LEVELS.INFO, this.argumentsToArray(arguments));
|
75
|
+
};
|
76
|
+
|
77
|
+
/**
|
78
|
+
* logging WARN
|
79
|
+
*/
|
80
|
+
k4.Logger.prototype.warn = function() {
|
81
|
+
this.logging(k4.Logger.LEVELS.WARN, this.argumentsToArray(arguments));
|
82
|
+
};
|
83
|
+
|
84
|
+
/**
|
85
|
+
* logging ERROR
|
86
|
+
*/
|
87
|
+
k4.Logger.prototype.error = function() {
|
88
|
+
this.logging(k4.Logger.LEVELS.ERROR, this.argumentsToArray(arguments));
|
89
|
+
};
|
90
|
+
|
91
|
+
/**
|
92
|
+
* logging CRITICAL
|
93
|
+
*/
|
94
|
+
k4.Logger.prototype.critilcal = function() {
|
95
|
+
this.logging(k4.Logger.LEVELS.CRITICAL, this.argumentsToArray(arguments));
|
96
|
+
};
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
// logger
|
101
|
+
logger = k4.Logger.getInstance();
|
@@ -0,0 +1,89 @@
|
|
1
|
+
/**
|
2
|
+
* k4slide.js
|
3
|
+
*/
|
4
|
+
goog.provide('k4.slide.Base');
|
5
|
+
|
6
|
+
goog.require('goog.dom');
|
7
|
+
goog.require('goog.dom.ViewportSizeMonitor');
|
8
|
+
goog.require('goog.events');
|
9
|
+
goog.require('goog.events.EventType');
|
10
|
+
goog.require('goog.events.KeyHandler');
|
11
|
+
goog.require('goog.events.KeyCodes');
|
12
|
+
goog.require('goog.events.ready');
|
13
|
+
goog.require('goog.ui.Component');
|
14
|
+
goog.require('logger');
|
15
|
+
goog.require('k4.slide.Config');
|
16
|
+
goog.require('k4.slide.Controller');
|
17
|
+
|
18
|
+
|
19
|
+
/**
|
20
|
+
* @constructor
|
21
|
+
* @extends {goog.ui.Component}
|
22
|
+
* @param {goog.domDomHelper|null|undefined} opt_domHelper DOM helper
|
23
|
+
*/
|
24
|
+
k4.slide.Base = function(opt_domHelper) {
|
25
|
+
goog.base(this, opt_domHelper);
|
26
|
+
|
27
|
+
/**
|
28
|
+
* @type {k4slide.Config}
|
29
|
+
*/
|
30
|
+
this.config_ = new k4.slide.Config();
|
31
|
+
|
32
|
+
/**
|
33
|
+
* @type {k4slide.SlideController}
|
34
|
+
*/
|
35
|
+
this.controller_ = new k4.slide.Controller(this.config_);
|
36
|
+
|
37
|
+
|
38
|
+
// ready
|
39
|
+
goog.events.ready(goog.bind(this.loaded_, this));
|
40
|
+
}
|
41
|
+
goog.inherits(k4.slide.Base, goog.ui.Component);
|
42
|
+
goog.addSingletonGetter(k4.slide.Base);
|
43
|
+
|
44
|
+
/**
|
45
|
+
* Initialize Application
|
46
|
+
*/
|
47
|
+
k4.slide.Base.prototype.loaded_ = function(event) {
|
48
|
+
this.initEvents_();
|
49
|
+
this.controller_.init();
|
50
|
+
this.controller_.start();
|
51
|
+
}
|
52
|
+
|
53
|
+
k4.slide.Base.prototype.initEvents_ = function() {
|
54
|
+
var keyHandler = new goog.events.KeyHandler(goog.dom.getDocument());
|
55
|
+
var codes = goog.events.KeyCodes;
|
56
|
+
var controller = this.controller_;
|
57
|
+
goog.events.listen(keyHandler, goog.events.KeyHandler.EventType.KEY, function(e) {
|
58
|
+
switch (e.keyCode) {
|
59
|
+
case codes.ENTER:
|
60
|
+
case codes.MAC_ENTER:
|
61
|
+
case codes.SPACE:
|
62
|
+
e.preventDefault();
|
63
|
+
e.stopPropagation();
|
64
|
+
controller.next();
|
65
|
+
break;
|
66
|
+
case codes.BACKSPACE:
|
67
|
+
e.preventDefault();
|
68
|
+
e.stopPropagation();
|
69
|
+
controller.back();
|
70
|
+
break;
|
71
|
+
default:
|
72
|
+
// do nothing
|
73
|
+
break;
|
74
|
+
}
|
75
|
+
}, false, this);
|
76
|
+
|
77
|
+
goog.events.listen(this.controller_.getBody(), goog.events.EventType.CLICK, function(e) {
|
78
|
+
e.preventDefault();
|
79
|
+
e.stopPropagation();
|
80
|
+
controller.next();
|
81
|
+
}, false, this);
|
82
|
+
|
83
|
+
var vsm = new goog.dom.ViewportSizeMonitor();
|
84
|
+
goog.events.listen(vsm, goog.events.EventType.RESIZE, function(e) {
|
85
|
+
// e.preventDefault();
|
86
|
+
// e.stopPropagation();
|
87
|
+
controller.resize();
|
88
|
+
}, false, this);
|
89
|
+
};
|
@@ -0,0 +1,75 @@
|
|
1
|
+
goog.provide('k4.slide.Config');
|
2
|
+
|
3
|
+
goog.require('goog.array');
|
4
|
+
goog.require('goog.object');
|
5
|
+
|
6
|
+
|
7
|
+
/**
|
8
|
+
* @constructor
|
9
|
+
* @param {object} opt_config Configuration
|
10
|
+
*/
|
11
|
+
k4.slide.Config = function(opt_config) {
|
12
|
+
/**
|
13
|
+
* @type {object}
|
14
|
+
*/
|
15
|
+
this.config_ = k4.slide.Config.DEFAULT_CONFIG;
|
16
|
+
}
|
17
|
+
|
18
|
+
/**
|
19
|
+
* default configuration
|
20
|
+
* @type {object}
|
21
|
+
*/
|
22
|
+
k4.slide.Config.DEFAULT_CONFIG = {
|
23
|
+
'window': {
|
24
|
+
'margin': 10, // px
|
25
|
+
'null': null
|
26
|
+
},
|
27
|
+
'slide': {
|
28
|
+
'pattern': 'div[role="slide"]',
|
29
|
+
'width': 640,
|
30
|
+
'height': 480,
|
31
|
+
'ratio': 1.0,
|
32
|
+
'class': {
|
33
|
+
'current': 'current',
|
34
|
+
'prev': 'prev',
|
35
|
+
'next': 'next',
|
36
|
+
'toPrev': 'to-prev',
|
37
|
+
'toNext': 'to-next',
|
38
|
+
'toCurrent': 'to-current'
|
39
|
+
},
|
40
|
+
'null': null
|
41
|
+
}
|
42
|
+
};
|
43
|
+
|
44
|
+
|
45
|
+
/**
|
46
|
+
* @param {string} key Key
|
47
|
+
* @return {object|array|null|undefined}
|
48
|
+
*/
|
49
|
+
k4.slide.Config.prototype.get= function(key) {
|
50
|
+
var tmp = this.config_;
|
51
|
+
var keys = key.split('.');
|
52
|
+
goog.array.forEach(keys, function(k, i, arr) {
|
53
|
+
tmp = (goog.isDefAndNotNull(tmp) && goog.isObject(tmp)) ? tmp[k] : undefined;
|
54
|
+
}, this);
|
55
|
+
return tmp;
|
56
|
+
};
|
57
|
+
|
58
|
+
|
59
|
+
/**
|
60
|
+
* @param {string} key Key
|
61
|
+
* @param {*} val The value
|
62
|
+
*/
|
63
|
+
k4.slide.Config.prototype.set= function(key, val) {
|
64
|
+
var tmp = this.config_;
|
65
|
+
var keys = key.split('.');
|
66
|
+
var lastIndex = keys.length - 1;
|
67
|
+
goog.array.forEach(keys, function(k, i, arr) {
|
68
|
+
tmp[k] = (goog.isDefAndNotNull(tmp[k]) && goog.isObject(tmp[k])) ? tmp[k] : {};
|
69
|
+
if (i == lastIndex) {
|
70
|
+
tmp[k] = val;
|
71
|
+
} else {
|
72
|
+
tmp = (goog.isDefAndNotNull(tmp) && goog.isObject(tmp)) ? tmp[k] : undefined;
|
73
|
+
}
|
74
|
+
}, this);
|
75
|
+
};
|
@@ -0,0 +1,255 @@
|
|
1
|
+
goog.provide('k4.slide.Controller');
|
2
|
+
|
3
|
+
goog.require('goog.array');
|
4
|
+
goog.require('goog.dom');
|
5
|
+
goog.require('goog.dom.query');
|
6
|
+
goog.require('goog.style');
|
7
|
+
goog.require('goog.ui.Component');
|
8
|
+
goog.require('goog.History');
|
9
|
+
goog.require('k4.slide.Slide');
|
10
|
+
goog.require('k4.slide.Config');
|
11
|
+
|
12
|
+
|
13
|
+
/**
|
14
|
+
* @constructor
|
15
|
+
* @extends {goog.ui.Component}
|
16
|
+
*/
|
17
|
+
k4.slide.Controller = function(config) {
|
18
|
+
goog.base(this);
|
19
|
+
|
20
|
+
/**
|
21
|
+
* @type {k4.Config}
|
22
|
+
*/
|
23
|
+
this.config_ = config;
|
24
|
+
|
25
|
+
/**
|
26
|
+
* @type {array.<k4.slide.>}
|
27
|
+
*/
|
28
|
+
this.slides_ = [];
|
29
|
+
|
30
|
+
/**
|
31
|
+
* current slide index
|
32
|
+
* @type {number}
|
33
|
+
*/
|
34
|
+
this.current_ = 0;
|
35
|
+
|
36
|
+
/**
|
37
|
+
* @type {goog.history.Html5History}
|
38
|
+
*/
|
39
|
+
this.history_ = null;
|
40
|
+
}
|
41
|
+
goog.inherits(k4.slide.Controller, goog.ui.Component);
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
/**
|
48
|
+
* initialize
|
49
|
+
*/
|
50
|
+
k4.slide.Controller.prototype.init = function() {
|
51
|
+
this.initWindow_();
|
52
|
+
this.calculateSlideSizeAndPosition_();
|
53
|
+
this.initSlides_();
|
54
|
+
};
|
55
|
+
|
56
|
+
|
57
|
+
/**
|
58
|
+
* Initialize window
|
59
|
+
* TODO: to iPhone and iOS
|
60
|
+
*/
|
61
|
+
k4.slide.Controller.prototype.initWindow_ = function() {
|
62
|
+
var viewportSize = goog.dom.getViewportSize();
|
63
|
+
var c = this.config_;
|
64
|
+
c.set('window.width', viewportSize.width);
|
65
|
+
c.set('window.height', viewportSize.height);
|
66
|
+
};
|
67
|
+
|
68
|
+
/**
|
69
|
+
* calculate slide width & height
|
70
|
+
*/
|
71
|
+
k4.slide.Controller.prototype.calculateSlideSizeAndPosition_ = function() {
|
72
|
+
var c = this.config_;
|
73
|
+
|
74
|
+
|
75
|
+
// win size
|
76
|
+
var winWidth = c.get('window.width');
|
77
|
+
var winHeight = c.get('window.height');
|
78
|
+
var winMargin = c.get('window.margin');
|
79
|
+
|
80
|
+
// size
|
81
|
+
var isHorizonal = true;
|
82
|
+
var slideAspect = winHeight / winWidth;
|
83
|
+
var slideWidth = c.get('slide.width');
|
84
|
+
var slideHeight = c.get('slide.height');
|
85
|
+
var slideRatio = c.get('slide.ratio');
|
86
|
+
var aspectRatio = slideHeight / slideWidth;
|
87
|
+
var toWidth = 0;
|
88
|
+
var toHeight = 0;
|
89
|
+
|
90
|
+
// ratio
|
91
|
+
if (aspectRatio > slideAspect) {
|
92
|
+
toHeight = Math.floor(winHeight - (winMargin * 2));
|
93
|
+
slideRatio = toHeight / slideHeight;
|
94
|
+
} else {
|
95
|
+
toWidth = Math.floor(winWidth - (winMargin * 2));
|
96
|
+
slideRatio = toWidth / slideWidth;
|
97
|
+
isHorizonal = false;
|
98
|
+
}
|
99
|
+
c.set('slide.ratio', slideRatio);
|
100
|
+
|
101
|
+
// position
|
102
|
+
var slideTop = Math.round((winHeight - slideHeight) / 2);
|
103
|
+
var slideLeft = Math.round((winWidth - slideWidth) / 2);
|
104
|
+
c.set('slide.top', slideTop);
|
105
|
+
c.set('slide.left', slideLeft)
|
106
|
+
|
107
|
+
// set ratio
|
108
|
+
this.setSlideScale_();
|
109
|
+
};
|
110
|
+
|
111
|
+
k4.slide.Controller.prototype.setSlideScale_ = function() {
|
112
|
+
var c = this.config_;
|
113
|
+
var ratio = c.get('slide.ratio');
|
114
|
+
|
115
|
+
var installStyles = [
|
116
|
+
'div[role="slide"]{',
|
117
|
+
'-webkit-transform: scale('+ ratio.toString() +');}',
|
118
|
+
'-moz-transform: scale('+ ratio.toString() +');',
|
119
|
+
'}'
|
120
|
+
].join("");
|
121
|
+
goog.style.installStyles(installStyles);
|
122
|
+
};
|
123
|
+
|
124
|
+
/**
|
125
|
+
* Initialize slides
|
126
|
+
*/
|
127
|
+
k4.slide.Controller.prototype.initSlides_ = function() {
|
128
|
+
var elements = this.findSlideElements_();
|
129
|
+
if (goog.isArrayLike(elements) && elements.length > 0) {
|
130
|
+
goog.array.forEach(elements, function(el, i, arr) {
|
131
|
+
var item = new k4.slide.Slide(el, this.config_);
|
132
|
+
this.slides_.push(item);
|
133
|
+
}, this);
|
134
|
+
}
|
135
|
+
};
|
136
|
+
|
137
|
+
/**
|
138
|
+
* Find slide elements
|
139
|
+
*/
|
140
|
+
k4.slide.Controller.prototype.findSlideElements_ = function() {
|
141
|
+
var pattern = this.config_.get('slide.pattern');
|
142
|
+
var elements = goog.dom.query(pattern);
|
143
|
+
return elements;
|
144
|
+
};
|
145
|
+
|
146
|
+
/**
|
147
|
+
* return body;
|
148
|
+
*/
|
149
|
+
k4.slide.Controller.prototype.getBody = function() {
|
150
|
+
var body = goog.dom.getDocument().body;
|
151
|
+
return body;
|
152
|
+
};
|
153
|
+
|
154
|
+
/**
|
155
|
+
* Get current slide object
|
156
|
+
* @return {k4.slide.|null|undefined}
|
157
|
+
*/
|
158
|
+
k4.slide.Controller.prototype.getCurrent = function() {
|
159
|
+
if (goog.isArrayLike(this.slides_) && this.slides_.length > 0) {
|
160
|
+
return this.slides_[this.current_];
|
161
|
+
} else {
|
162
|
+
return null;
|
163
|
+
}
|
164
|
+
};
|
165
|
+
|
166
|
+
/**
|
167
|
+
* Get current slide object
|
168
|
+
* @return {k4.slide.|null|undefined}
|
169
|
+
*/
|
170
|
+
k4.slide.Controller.prototype.getNext = function() {
|
171
|
+
if (goog.isArrayLike(this.slides_) && this.slides_.length > 0) {
|
172
|
+
return this.slides_[this.current_ + 1];
|
173
|
+
} else {
|
174
|
+
return null;
|
175
|
+
}
|
176
|
+
};
|
177
|
+
|
178
|
+
/**
|
179
|
+
* Get current slide object
|
180
|
+
* @return {k4.slide.|null|undefined}
|
181
|
+
*/
|
182
|
+
k4.slide.Controller.prototype.getPrev = function() {
|
183
|
+
if (goog.isArrayLike(this.slides_) && this.slides_.length > 0) {
|
184
|
+
return this.slides_[this.current_ - 1];
|
185
|
+
} else {
|
186
|
+
return null;
|
187
|
+
}
|
188
|
+
};
|
189
|
+
|
190
|
+
/**
|
191
|
+
* Get current slide object
|
192
|
+
* @return {k4.slide.|null|undefined}
|
193
|
+
*/
|
194
|
+
k4.slide.Controller.prototype.updateTitle = function() {
|
195
|
+
if (this.history_) {
|
196
|
+
var c = this.getCurrent();
|
197
|
+
if (c) {
|
198
|
+
var el = c.getElement();
|
199
|
+
if (el) {
|
200
|
+
var page = el.getAttribute('page');
|
201
|
+
if (page) {
|
202
|
+
this.history_.setToken(page);
|
203
|
+
}
|
204
|
+
}
|
205
|
+
}
|
206
|
+
}
|
207
|
+
};
|
208
|
+
|
209
|
+
|
210
|
+
/**
|
211
|
+
* start presentation
|
212
|
+
*/
|
213
|
+
k4.slide.Controller.prototype.start = function() {
|
214
|
+
if (goog.isArrayLike(this.slides_) && this.slides_.length > 0) {
|
215
|
+
this.slides_[0].applyClasses(this.config_.get('slide.class.current'));
|
216
|
+
this.slides_[0].show();
|
217
|
+
}
|
218
|
+
};
|
219
|
+
|
220
|
+
/**
|
221
|
+
* next
|
222
|
+
*/
|
223
|
+
k4.slide.Controller.prototype.next = function() {
|
224
|
+
var currentSlide = this.getCurrent();
|
225
|
+
var nextSlide = this.getNext();
|
226
|
+
if (nextSlide) {
|
227
|
+
currentSlide.toPrev();
|
228
|
+
nextSlide.toCurrent();
|
229
|
+
this.current_++;
|
230
|
+
}
|
231
|
+
};
|
232
|
+
|
233
|
+
/**
|
234
|
+
* next
|
235
|
+
*/
|
236
|
+
k4.slide.Controller.prototype.back = function() {
|
237
|
+
var currentSlide = this.getCurrent();
|
238
|
+
var prevSlide = this.getPrev();
|
239
|
+
if (prevSlide) {
|
240
|
+
currentSlide.toNext();
|
241
|
+
prevSlide.toCurrent();
|
242
|
+
this.current_--;
|
243
|
+
}
|
244
|
+
};
|
245
|
+
|
246
|
+
/**
|
247
|
+
* resize
|
248
|
+
*/
|
249
|
+
k4.slide.Controller.prototype.resize = function() {
|
250
|
+
this.initWindow_();
|
251
|
+
this.calculateSlideSizeAndPosition_();
|
252
|
+
goog.array.forEach(this.slides_, function(s, i, a) {
|
253
|
+
s.setPositionByConfig();
|
254
|
+
}, this);
|
255
|
+
};
|