|
|
@ -44,69 +44,52 @@ Panel.prototype.getContainer = function () { |
|
|
|
|
|
|
|
/** |
|
|
|
* Repaint the component |
|
|
|
* @return {Boolean} changed |
|
|
|
*/ |
|
|
|
Panel.prototype.repaint = function () { |
|
|
|
var changed = 0, |
|
|
|
update = util.updateProperty, |
|
|
|
asSize = util.option.asSize, |
|
|
|
var asSize = util.option.asSize, |
|
|
|
options = this.options, |
|
|
|
frame = this.frame; |
|
|
|
|
|
|
|
// create frame
|
|
|
|
if (!frame) { |
|
|
|
frame = document.createElement('div'); |
|
|
|
frame.className = 'vpanel'; |
|
|
|
|
|
|
|
var className = options.className; |
|
|
|
if (className) { |
|
|
|
if (typeof className == 'function') { |
|
|
|
util.addClassName(frame, String(className())); |
|
|
|
} |
|
|
|
else { |
|
|
|
util.addClassName(frame, String(className)); |
|
|
|
} |
|
|
|
} |
|
|
|
if (!this.parent) throw new Error('Cannot repaint panel: no parent attached'); |
|
|
|
|
|
|
|
this.frame = frame; |
|
|
|
changed += 1; |
|
|
|
} |
|
|
|
if (!frame.parentNode) { |
|
|
|
if (!this.parent) { |
|
|
|
throw new Error('Cannot repaint panel: no parent attached'); |
|
|
|
} |
|
|
|
var parentContainer = this.parent.getContainer(); |
|
|
|
if (!parentContainer) { |
|
|
|
throw new Error('Cannot repaint panel: parent has no container element'); |
|
|
|
} |
|
|
|
if (!parentContainer) throw new Error('Cannot repaint panel: parent has no container element'); |
|
|
|
|
|
|
|
parentContainer.appendChild(frame); |
|
|
|
changed += 1; |
|
|
|
|
|
|
|
this.frame = frame; |
|
|
|
} |
|
|
|
|
|
|
|
changed += update(frame.style, 'top', asSize(options.top, '0px')); |
|
|
|
changed += update(frame.style, 'left', asSize(options.left, '0px')); |
|
|
|
changed += update(frame.style, 'width', asSize(options.width, '100%')); |
|
|
|
changed += update(frame.style, 'height', asSize(options.height, '100%')); |
|
|
|
// update className
|
|
|
|
frame.className = 'vpanel' + (options.className ? (' ' + asSize(options.className)) : ''); |
|
|
|
|
|
|
|
return (changed > 0); |
|
|
|
// update class name
|
|
|
|
var className = 'vis timeline rootpanel ' + options.orientation + (options.editable ? ' editable' : ''); |
|
|
|
if (options.className) className += ' ' + util.option.asString(className); |
|
|
|
frame.className = className; |
|
|
|
|
|
|
|
// update frame size
|
|
|
|
this._updateSize(); |
|
|
|
}; |
|
|
|
|
|
|
|
/** |
|
|
|
* Reflow the component |
|
|
|
* @return {Boolean} resized |
|
|
|
* Apply the size from options to the panel, and recalculate it's actual size. |
|
|
|
* @private |
|
|
|
*/ |
|
|
|
Panel.prototype.reflow = function () { |
|
|
|
var changed = 0, |
|
|
|
update = util.updateProperty, |
|
|
|
frame = this.frame; |
|
|
|
|
|
|
|
if (frame) { |
|
|
|
changed += update(this, 'top', frame.offsetTop); |
|
|
|
changed += update(this, 'left', frame.offsetLeft); |
|
|
|
changed += update(this, 'width', frame.offsetWidth); |
|
|
|
changed += update(this, 'height', frame.offsetHeight); |
|
|
|
} |
|
|
|
else { |
|
|
|
changed += 1; |
|
|
|
} |
|
|
|
Panel.prototype._updateSize = function () { |
|
|
|
// apply size
|
|
|
|
this.frame.style.top = util.option.asSize(this.options.top, '0px'); |
|
|
|
this.frame.style.left = util.option.asSize(this.options.left, '0px'); |
|
|
|
this.frame.style.width = util.option.asSize(this.options.width, '100%'); |
|
|
|
this.frame.style.height = util.option.asSize(this.options.height, '100%'); |
|
|
|
|
|
|
|
return (changed > 0); |
|
|
|
// get actual size
|
|
|
|
this.top = this.frame.offsetTop; |
|
|
|
this.left = this.frame.offsetLeft; |
|
|
|
this.width = this.frame.offsetWidth; |
|
|
|
this.height = this.frame.offsetHeight; |
|
|
|
}; |