forked from CesiumGS/cesium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
FullscreenButtonViewModel.js
143 lines (128 loc) · 3.97 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
import defined from "../../Core/defined.js";
import defaultValue from "../../Core/defaultValue.js";
import destroyObject from "../../Core/destroyObject.js";
import DeveloperError from "../../Core/DeveloperError.js";
import Fullscreen from "../../Core/Fullscreen.js";
import knockout from "../../ThirdParty/knockout.js";
import createCommand from "../createCommand.js";
import getElement from "../getElement.js";
/**
* 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.
* @param {Element|String} [container] The DOM element or ID that will contain the widget.
*/
function FullscreenButtonViewModel(fullscreenElement, container) {
if (!defined(container)) {
container = document.body;
}
container = getElement(container);
var that = this;
var tmpIsFullscreen = knockout.observable(Fullscreen.fullscreen);
var tmpIsEnabled = knockout.observable(Fullscreen.enabled);
var ownerDocument = container.ownerDocument;
/**
* 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),
ownerDocument.body
);
this._callback = function () {
tmpIsFullscreen(Fullscreen.fullscreen);
};
ownerDocument.addEventListener(Fullscreen.changeEventName, this._callback);
}
Object.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);
};
export default FullscreenButtonViewModel;