-
Notifications
You must be signed in to change notification settings - Fork 3.5k
/
FullscreenButtonViewModel.js
146 lines (132 loc) · 4.48 KB
/
FullscreenButtonViewModel.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/*global define*/
define([
'../../Core/defaultValue',
'../../Core/defineProperties',
'../../Core/destroyObject',
'../../Core/DeveloperError',
'../../Core/Fullscreen',
'../../ThirdParty/knockout',
'../createCommand',
'../getElement'
], function(
defaultValue,
defineProperties,
destroyObject,
DeveloperError,
Fullscreen,
knockout,
createCommand,
getElement) {
"use strict";
/**
* The view model for {@link FullscreenButton}.
* @alias FullscreenButtonViewModel
* @constructor
*
* @param {Element|String} [fullscreenElement=document.body] The element or id to be placed into fullscreen mode.
*/
function FullscreenButtonViewModel(fullscreenElement) {
var that = this;
var tmpIsFullscreen = knockout.observable(Fullscreen.fullscreen);
var tmpIsEnabled = knockout.observable(Fullscreen.enabled);
/**
* Gets whether or not fullscreen mode is active. This property is observable.
*
* @type {Boolean}
*/
this.isFullscreen = undefined;
knockout.defineProperty(this, 'isFullscreen', {
get : function() {
return tmpIsFullscreen();
}
});
/**
* Gets or sets whether or not fullscreen functionality should be enabled. This property is observable.
*
* @type {Boolean}
* @see Fullscreen.enabled
*/
this.isFullscreenEnabled = undefined;
knockout.defineProperty(this, 'isFullscreenEnabled', {
get : function() {
return tmpIsEnabled();
},
set : function(value) {
tmpIsEnabled(value && Fullscreen.enabled);
}
});
/**
* Gets the tooltip. This property is observable.
*
* @type {String}
*/
this.tooltip = undefined;
knockout.defineProperty(this, 'tooltip', function() {
if (!this.isFullscreenEnabled) {
return 'Full screen unavailable';
}
return tmpIsFullscreen() ? 'Exit full screen' : 'Full screen';
});
this._command = createCommand(function() {
if (Fullscreen.fullscreen) {
Fullscreen.exitFullscreen();
} else {
Fullscreen.requestFullscreen(that._fullscreenElement);
}
}, knockout.getObservable(this, 'isFullscreenEnabled'));
this._fullscreenElement = defaultValue(getElement(fullscreenElement), document.body);
this._callback = function() {
tmpIsFullscreen(Fullscreen.fullscreen);
};
document.addEventListener(Fullscreen.changeEventName, this._callback);
}
defineProperties(FullscreenButtonViewModel.prototype, {
/**
* Gets or sets the HTML element to place into fullscreen mode when the
* corresponding button is pressed.
* @memberof FullscreenButtonViewModel.prototype
*
* @type {Element}
*/
fullscreenElement : {
//TODO:@exception {DeveloperError} value must be a valid HTML Element.
get : function() {
return this._fullscreenElement;
},
set : function(value) {
//>>includeStart('debug', pragmas.debug);
if (!(value instanceof Element)) {
throw new DeveloperError('value must be a valid Element.');
}
//>>includeEnd('debug');
this._fullscreenElement = value;
}
},
/**
* Gets the Command to toggle fullscreen mode.
* @memberof FullscreenButtonViewModel.prototype
*
* @type {Command}
*/
command : {
get : function() {
return this._command;
}
}
});
/**
* @returns {Boolean} true if the object has been destroyed, false otherwise.
*/
FullscreenButtonViewModel.prototype.isDestroyed = function() {
return false;
};
/**
* Destroys the view model. Should be called to
* properly clean up the view model when it is no longer needed.
*/
FullscreenButtonViewModel.prototype.destroy = function() {
document.removeEventListener(Fullscreen.changeEventName, this._callback);
destroyObject(this);
};
return FullscreenButtonViewModel;
});