1
/* -*- Mode: JavaScript; coding: utf-8; tab-width: 3; indent-tabs-mode: tab; c-basic-offset: 3 -*-
2
*******************************************************************************
4
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6
* Copyright create3000, Scheffelstraße 31a, Leipzig, Germany 2011.
8
* All rights reserved. Holger Seelig <holger.seelig@yahoo.de>.
10
* The copyright notice above does not evidence any actual of intended
11
* publication of such source code, and is an unpublished work by create3000.
12
* This material contains CONFIDENTIAL INFORMATION that is the property of
15
* No permission is granted to copy, distribute, or create derivative works from
16
* the contents of this software, in whole or in part, without the prior written
17
* permission of create3000.
19
* NON-MILITARY USE ONLY
21
* All create3000 software are effectively free software with a non-military use
22
* restriction. It is free. Well commented source is provided. You may reuse the
23
* source in any way you please with the exception anything that uses it must be
24
* marked to indicate is contains 'non-military use only' components.
26
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
28
* Copyright 2015, 2016 Holger Seelig <holger.seelig@yahoo.de>.
30
* This file is part of the Cobweb Project.
32
* Cobweb is free software: you can redistribute it and/or modify it under the
33
* terms of the GNU General Public License version 3 only, as published by the
34
* Free Software Foundation.
36
* Cobweb is distributed in the hope that it will be useful, but WITHOUT ANY
37
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
38
* A PARTICULAR PURPOSE. See the GNU General Public License version 3 for more
39
* details (a copy is included in the LICENSE file that accompanied this code).
41
* You should have received a copy of the GNU General Public License version 3
42
* along with Cobweb. If not, see <http://www.gnu.org/licenses/gpl.html> for a
43
* copy of the GPLv3 License.
45
* For Silvio, Joy and Adi.
47
******************************************************************************/
52
"cobweb/Basic/X3DBaseNode",
54
function ($, X3DBaseNode)
58
function BindableStack (executionContext, layer, defaultNode)
60
X3DBaseNode .call (this, executionContext);
63
this .array = [ defaultNode ];
66
BindableStack .prototype = $.extend (Object .create (X3DBaseNode .prototype),
68
constructor: BindableStack,
69
getTypeName: function ()
71
return "BindableStack";
73
getComponentName: function ()
77
getContainerField: function ()
79
return "bindableStack";
87
return this .array [this .array .length - 1];
89
forcePush: function (node)
91
node .isBound_ = true;
92
node .bindTime_ = this .getBrowser () .getCurrentTime ();
98
if (this .array .length === 0)
101
if (node === this .array [0])
104
var top = this .top ();
108
this .pushOnTop (node);
110
if (top .isBound_ .getValue ())
112
top .set_bind_ = false;
113
top .isBound_ = false;
116
if (! node .isBound_ .getValue ())
118
node .isBound_ = true;
119
node .bindTime_ = this .getBrowser () .getCurrentTime ();
120
node .transitionStart (top);
123
this .pushOnTop (node);
125
this .addNodeEvent ();
128
pushOnTop: function (node)
130
var index = this .array .indexOf (node);
133
this .array .splice (index, 1);
135
this .array .push (node);
137
remove: function (node)
139
if (node === this .array [0])
142
// If on top, pop node.
144
var top = this .top ();
147
return this .pop (node);
151
var index = this .array .indexOf (node);
154
this .array .splice (index, 1);
158
if (node === this .array [0])
161
var top = this .top ();
165
if (node .isBound_ .getValue ())
166
node .isBound_ = false;
168
if (this .array .length === 0)
175
if (! top .isBound_ .getValue ())
177
top .set_bind_ = true;
178
top .isBound_ = true;
179
top .bindTime_ = this .getBrowser () .getCurrentTime ();
180
top .transitionStart (node);
183
this .addNodeEvent ();
188
return BindableStack;
b'\\ No newline at end of file'