You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by ms...@apache.org on 2017/05/17 15:29:58 UTC
svn commit: r1795424 [25/29] - in /openoffice/ooo-site/trunk/content:
scripts/api.simile-widgets.org/ scripts/api.simile-widgets.org/ajax/
scripts/api.simile-widgets.org/ajax/2.2.1.fake/
scripts/api.simile-widgets.org/ajax/2.2.1/ scripts/api.simile-wid...
Added: openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/scripts/sources.js
URL: http://svn.apache.org/viewvc/openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/scripts/sources.js?rev=1795424&view=auto
==============================================================================
--- openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/scripts/sources.js (added)
+++ openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/scripts/sources.js Wed May 17 15:29:56 2017
@@ -0,0 +1,567 @@
+/*==================================================
+ * Default Event Source
+ *==================================================
+ */
+
+
+Timeline.DefaultEventSource = function(eventIndex) {
+ this._events = (eventIndex instanceof Object) ? eventIndex : new SimileAjax.EventIndex();
+ this._listeners = [];
+};
+
+Timeline.DefaultEventSource.prototype.addListener = function(listener) {
+ this._listeners.push(listener);
+};
+
+Timeline.DefaultEventSource.prototype.removeListener = function(listener) {
+ for (var i = 0; i < this._listeners.length; i++) {
+ if (this._listeners[i] == listener) {
+ this._listeners.splice(i, 1);
+ break;
+ }
+ }
+};
+
+Timeline.DefaultEventSource.prototype.loadXML = function(xml, url) {
+ var base = this._getBaseURL(url);
+
+ var wikiURL = xml.documentElement.getAttribute("wiki-url");
+ var wikiSection = xml.documentElement.getAttribute("wiki-section");
+
+ var dateTimeFormat = xml.documentElement.getAttribute("date-time-format");
+ var parseDateTimeFunction = this._events.getUnit().getParser(dateTimeFormat);
+
+ var node = xml.documentElement.firstChild;
+ var added = false;
+ while (node != null) {
+ if (node.nodeType == 1) {
+ var description = "";
+ if (node.firstChild != null && node.firstChild.nodeType == 3) {
+ description = node.firstChild.nodeValue;
+ }
+ // instant event: default is true. Or use values from isDuration or durationEvent
+ var instant = (node.getAttribute("isDuration") === null &&
+ node.getAttribute("durationEvent") === null) ||
+ node.getAttribute("isDuration") == "false" ||
+ node.getAttribute("durationEvent") == "false";
+
+ var evt = new Timeline.DefaultEventSource.Event( {
+ id: node.getAttribute("id"),
+ start: parseDateTimeFunction(node.getAttribute("start")),
+ end: parseDateTimeFunction(node.getAttribute("end")),
+ latestStart: parseDateTimeFunction(node.getAttribute("latestStart")),
+ earliestEnd: parseDateTimeFunction(node.getAttribute("earliestEnd")),
+ instant: instant,
+ text: node.getAttribute("title"),
+ description: description,
+ image: this._resolveRelativeURL(node.getAttribute("image"), base),
+ link: this._resolveRelativeURL(node.getAttribute("link") , base),
+ icon: this._resolveRelativeURL(node.getAttribute("icon") , base),
+ color: node.getAttribute("color"),
+ textColor: node.getAttribute("textColor"),
+ hoverText: node.getAttribute("hoverText"),
+ classname: node.getAttribute("classname"),
+ tapeImage: node.getAttribute("tapeImage"),
+ tapeRepeat: node.getAttribute("tapeRepeat"),
+ caption: node.getAttribute("caption"),
+ eventID: node.getAttribute("eventID"),
+ trackNum: node.getAttribute("trackNum")
+ });
+
+ evt._node = node;
+ evt.getProperty = function(name) {
+ return this._node.getAttribute(name);
+ };
+ evt.setWikiInfo(wikiURL, wikiSection);
+
+ this._events.add(evt);
+
+ added = true;
+ }
+ node = node.nextSibling;
+ }
+
+ if (added) {
+ this._fire("onAddMany", []);
+ }
+};
+
+
+Timeline.DefaultEventSource.prototype.loadJSON = function(data, url) {
+ var base = this._getBaseURL(url);
+ var added = false;
+ if (data && data.events){
+ var wikiURL = ("wikiURL" in data) ? data.wikiURL : null;
+ var wikiSection = ("wikiSection" in data) ? data.wikiSection : null;
+
+ var dateTimeFormat = ("dateTimeFormat" in data) ? data.dateTimeFormat : null;
+ var parseDateTimeFunction = this._events.getUnit().getParser(dateTimeFormat);
+
+ for (var i=0; i < data.events.length; i++){
+ var event = data.events[i];
+ // Fixing issue 33:
+ // instant event: default (for JSON only) is false. Or use values from isDuration or durationEvent
+ // isDuration was negated (see issue 33, so keep that interpretation
+ var instant = event.isDuration || (event.durationEvent != null && !event.durationEvent);
+
+ var evt = new Timeline.DefaultEventSource.Event({
+ id: ("id" in event) ? event.id : undefined,
+ start: parseDateTimeFunction(event.start),
+ end: parseDateTimeFunction(event.end),
+ latestStart: parseDateTimeFunction(event.latestStart),
+ earliestEnd: parseDateTimeFunction(event.earliestEnd),
+ instant: instant,
+ text: event.title,
+ description: event.description,
+ image: this._resolveRelativeURL(event.image, base),
+ link: this._resolveRelativeURL(event.link , base),
+ icon: this._resolveRelativeURL(event.icon , base),
+ color: event.color,
+ textColor: event.textColor,
+ hoverText: event.hoverText,
+ classname: event.classname,
+ tapeImage: event.tapeImage,
+ tapeRepeat: event.tapeRepeat,
+ caption: event.caption,
+ eventID: event.eventID,
+ trackNum: event.trackNum
+ });
+ evt._obj = event;
+ evt.getProperty = function(name) {
+ return this._obj[name];
+ };
+ evt.setWikiInfo(wikiURL, wikiSection);
+
+ this._events.add(evt);
+ added = true;
+ }
+ }
+
+ if (added) {
+ this._fire("onAddMany", []);
+ }
+};
+
+/*
+ * Contributed by Morten Frederiksen, http://www.wasab.dk/morten/
+ */
+Timeline.DefaultEventSource.prototype.loadSPARQL = function(xml, url) {
+ var base = this._getBaseURL(url);
+
+ var dateTimeFormat = 'iso8601';
+ var parseDateTimeFunction = this._events.getUnit().getParser(dateTimeFormat);
+
+ if (xml == null) {
+ return;
+ }
+
+ /*
+ * Find <results> tag
+ */
+ var node = xml.documentElement.firstChild;
+ while (node != null && (node.nodeType != 1 || node.nodeName != 'results')) {
+ node = node.nextSibling;
+ }
+
+ var wikiURL = null;
+ var wikiSection = null;
+ if (node != null) {
+ wikiURL = node.getAttribute("wiki-url");
+ wikiSection = node.getAttribute("wiki-section");
+
+ node = node.firstChild;
+ }
+
+ var added = false;
+ while (node != null) {
+ if (node.nodeType == 1) {
+ var bindings = { };
+ var binding = node.firstChild;
+ while (binding != null) {
+ if (binding.nodeType == 1 &&
+ binding.firstChild != null &&
+ binding.firstChild.nodeType == 1 &&
+ binding.firstChild.firstChild != null &&
+ binding.firstChild.firstChild.nodeType == 3) {
+ bindings[binding.getAttribute('name')] = binding.firstChild.firstChild.nodeValue;
+ }
+ binding = binding.nextSibling;
+ }
+
+ if (bindings["start"] == null && bindings["date"] != null) {
+ bindings["start"] = bindings["date"];
+ }
+
+ // instant event: default is true. Or use values from isDuration or durationEvent
+ var instant = (bindings["isDuration"] === null &&
+ bindings["durationEvent"] === null) ||
+ bindings["isDuration"] == "false" ||
+ bindings["durationEvent"] == "false";
+
+ var evt = new Timeline.DefaultEventSource.Event({
+ id: bindings["id"],
+ start: parseDateTimeFunction(bindings["start"]),
+ end: parseDateTimeFunction(bindings["end"]),
+ latestStart: parseDateTimeFunction(bindings["latestStart"]),
+ earliestEnd: parseDateTimeFunction(bindings["earliestEnd"]),
+ instant: instant, // instant
+ text: bindings["title"], // text
+ description: bindings["description"],
+ image: this._resolveRelativeURL(bindings["image"], base),
+ link: this._resolveRelativeURL(bindings["link"] , base),
+ icon: this._resolveRelativeURL(bindings["icon"] , base),
+ color: bindings["color"],
+ textColor: bindings["textColor"],
+ hoverText: bindings["hoverText"],
+ caption: bindings["caption"],
+ classname: bindings["classname"],
+ tapeImage: bindings["tapeImage"],
+ tapeRepeat: bindings["tapeRepeat"],
+ eventID: bindings["eventID"],
+ trackNum: bindings["trackNum"]
+ });
+ evt._bindings = bindings;
+ evt.getProperty = function(name) {
+ return this._bindings[name];
+ };
+ evt.setWikiInfo(wikiURL, wikiSection);
+
+ this._events.add(evt);
+ added = true;
+ }
+ node = node.nextSibling;
+ }
+
+ if (added) {
+ this._fire("onAddMany", []);
+ }
+};
+
+Timeline.DefaultEventSource.prototype.add = function(evt) {
+ this._events.add(evt);
+ this._fire("onAddOne", [evt]);
+};
+
+Timeline.DefaultEventSource.prototype.addMany = function(events) {
+ for (var i = 0; i < events.length; i++) {
+ this._events.add(events[i]);
+ }
+ this._fire("onAddMany", []);
+};
+
+Timeline.DefaultEventSource.prototype.clear = function() {
+ this._events.removeAll();
+ this._fire("onClear", []);
+};
+
+Timeline.DefaultEventSource.prototype.getEvent = function(id) {
+ return this._events.getEvent(id);
+};
+
+Timeline.DefaultEventSource.prototype.getEventIterator = function(startDate, endDate) {
+ return this._events.getIterator(startDate, endDate);
+};
+
+Timeline.DefaultEventSource.prototype.getEventReverseIterator = function(startDate, endDate) {
+ return this._events.getReverseIterator(startDate, endDate);
+};
+
+Timeline.DefaultEventSource.prototype.getAllEventIterator = function() {
+ return this._events.getAllIterator();
+};
+
+Timeline.DefaultEventSource.prototype.getCount = function() {
+ return this._events.getCount();
+};
+
+Timeline.DefaultEventSource.prototype.getEarliestDate = function() {
+ return this._events.getEarliestDate();
+};
+
+Timeline.DefaultEventSource.prototype.getLatestDate = function() {
+ return this._events.getLatestDate();
+};
+
+Timeline.DefaultEventSource.prototype._fire = function(handlerName, args) {
+ for (var i = 0; i < this._listeners.length; i++) {
+ var listener = this._listeners[i];
+ if (handlerName in listener) {
+ try {
+ listener[handlerName].apply(listener, args);
+ } catch (e) {
+ SimileAjax.Debug.exception(e);
+ }
+ }
+ }
+};
+
+Timeline.DefaultEventSource.prototype._getBaseURL = function(url) {
+ if (url.indexOf("://") < 0) {
+ var url2 = this._getBaseURL(document.location.href);
+ if (url.substr(0,1) == "/") {
+ url = url2.substr(0, url2.indexOf("/", url2.indexOf("://") + 3)) + url;
+ } else {
+ url = url2 + url;
+ }
+ }
+
+ var i = url.lastIndexOf("/");
+ if (i < 0) {
+ return "";
+ } else {
+ return url.substr(0, i+1);
+ }
+};
+
+Timeline.DefaultEventSource.prototype._resolveRelativeURL = function(url, base) {
+ if (url == null || url == "") {
+ return url;
+ } else if (url.indexOf("://") > 0) {
+ return url;
+ } else if (url.substr(0,1) == "/") {
+ return base.substr(0, base.indexOf("/", base.indexOf("://") + 3)) + url;
+ } else {
+ return base + url;
+ }
+};
+
+
+Timeline.DefaultEventSource.Event = function(args) {
+ //
+ // Attention developers!
+ // If you add a new event attribute, please be sure to add it to
+ // all three load functions: loadXML, loadSPARCL, loadJSON.
+ // Thanks!
+ //
+ // args is a hash/object. It supports the following keys. Most are optional
+ // id -- an internal id. Really shouldn't be used by events.
+ // Timeline library clients should use eventID
+ // eventID -- For use by library client when writing custom painters or
+ // custom fillInfoBubble
+ // start
+ // end
+ // latestStart
+ // earliestEnd
+ // instant -- boolean. Controls precise/non-precise logic & duration/instant issues
+ // text -- event source attribute 'title' -- used as the label on Timelines and in bubbles.
+ // description -- used in bubbles
+ // image -- used in bubbles
+ // link -- used in bubbles
+ // icon -- on the Timeline
+ // color -- Timeline label and tape color
+ // textColor -- Timeline label color, overrides color attribute
+ // hoverText -- deprecated, here for backwards compatibility.
+ // Superceeded by caption
+ // caption -- tooltip-like caption on the Timeline. Uses HTML title attribute
+ // classname -- used to set classname in Timeline. Enables better CSS selector rules
+ // tapeImage -- background image of the duration event's tape div on the Timeline
+ // tapeRepeat -- repeat attribute for tapeImage. {repeat | repeat-x | repeat-y }
+
+ function cleanArg(arg) {
+ // clean up an arg
+ return (args[arg] != null && args[arg] != "") ? args[arg] : null;
+ }
+
+ var id = args.id ? args.id.trim() : "";
+ this._id = id.length > 0 ? id : Timeline.EventUtils.getNewEventID();
+
+ this._instant = args.instant || (args.end == null);
+
+ this._start = args.start;
+ this._end = (args.end != null) ? args.end : args.start;
+
+ this._latestStart = (args.latestStart != null) ?
+ args.latestStart : (args.instant ? this._end : this._start);
+ this._earliestEnd = (args.earliestEnd != null) ? args.earliestEnd : this._end;
+
+ // check sanity of dates since incorrect dates will later cause calculation errors
+ // when painting
+ var err=[];
+ if (this._start > this._latestStart) {
+ this._latestStart = this._start;
+ err.push("start is > latestStart");}
+ if (this._start > this._earliestEnd) {
+ this._earliestEnd = this._latestStart;
+ err.push("start is > earliestEnd");}
+ if (this._start > this._end) {
+ this._end = this._earliestEnd;
+ err.push("start is > end");}
+ if (this._latestStart > this._earliestEnd) {
+ this._earliestEnd = this._latestStart;
+ err.push("latestStart is > earliestEnd");}
+ if (this._latestStart > this._end) {
+ this._end = this._earliestEnd;
+ err.push("latestStart is > end");}
+ if (this._earliestEnd > this._end) {
+ this._end = this._earliestEnd;
+ err.push("earliestEnd is > end");}
+
+ this._eventID = cleanArg('eventID');
+ this._text = (args.text != null) ? SimileAjax.HTML.deEntify(args.text) : ""; // Change blank titles to ""
+ if (err.length > 0) {
+ this._text += " PROBLEM: " + err.join(", ");
+ }
+
+ this._description = SimileAjax.HTML.deEntify(args.description);
+ this._image = cleanArg('image');
+ this._link = cleanArg('link');
+ this._title = cleanArg('hoverText');
+ this._title = cleanArg('caption');
+
+ this._icon = cleanArg('icon');
+ this._color = cleanArg('color');
+ this._textColor = cleanArg('textColor');
+ this._classname = cleanArg('classname');
+ this._tapeImage = cleanArg('tapeImage');
+ this._tapeRepeat = cleanArg('tapeRepeat');
+ this._trackNum = cleanArg('trackNum');
+ if (this._trackNum != null) {
+ this._trackNum = parseInt(this._trackNum);
+ }
+
+ this._wikiURL = null;
+ this._wikiSection = null;
+};
+
+Timeline.DefaultEventSource.Event.prototype = {
+ getID: function() { return this._id; },
+
+ isInstant: function() { return this._instant; },
+ isImprecise: function() { return this._start != this._latestStart || this._end != this._earliestEnd; },
+
+ getStart: function() { return this._start; },
+ getEnd: function() { return this._end; },
+ getLatestStart: function() { return this._latestStart; },
+ getEarliestEnd: function() { return this._earliestEnd; },
+
+ getEventID: function() { return this._eventID; },
+ getText: function() { return this._text; }, // title
+ getDescription: function() { return this._description; },
+ getImage: function() { return this._image; },
+ getLink: function() { return this._link; },
+
+ getIcon: function() { return this._icon; },
+ getColor: function() { return this._color; },
+ getTextColor: function() { return this._textColor; },
+ getClassName: function() { return this._classname; },
+ getTapeImage: function() { return this._tapeImage; },
+ getTapeRepeat: function() { return this._tapeRepeat; },
+ getTrackNum: function() { return this._trackNum; },
+
+ getProperty: function(name) { return null; },
+
+ getWikiURL: function() { return this._wikiURL; },
+ getWikiSection: function() { return this._wikiSection; },
+ setWikiInfo: function(wikiURL, wikiSection) {
+ this._wikiURL = wikiURL;
+ this._wikiSection = wikiSection;
+ },
+
+ fillDescription: function(elmt) {
+ elmt.innerHTML = this._description;
+ },
+ fillWikiInfo: function(elmt) {
+ // Many bubbles will not support a wiki link.
+ //
+ // Strategy: assume no wiki link. If we do have
+ // enough parameters for one, then create it.
+ elmt.style.display = "none"; // default
+
+ if (this._wikiURL == null || this._wikiSection == null) {
+ return; // EARLY RETURN
+ }
+
+ // create the wikiID from the property or from the event text (the title)
+ var wikiID = this.getProperty("wikiID");
+ if (wikiID == null || wikiID.length == 0) {
+ wikiID = this.getText(); // use the title as the backup wiki id
+ }
+
+ if (wikiID == null || wikiID.length == 0) {
+ return; // No wikiID. Thus EARLY RETURN
+ }
+
+ // ready to go...
+ elmt.style.display = "inline";
+ wikiID = wikiID.replace(/\s/g, "_");
+ var url = this._wikiURL + this._wikiSection.replace(/\s/g, "_") + "/" + wikiID;
+ var a = document.createElement("a");
+ a.href = url;
+ a.target = "new";
+ a.innerHTML = Timeline.strings[Timeline.clientLocale].wikiLinkLabel;
+
+ elmt.appendChild(document.createTextNode("["));
+ elmt.appendChild(a);
+ elmt.appendChild(document.createTextNode("]"));
+ },
+
+ fillTime: function(elmt, labeller) {
+ if (this._instant) {
+ if (this.isImprecise()) {
+ elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._start)));
+ elmt.appendChild(elmt.ownerDocument.createElement("br"));
+ elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._end)));
+ } else {
+ elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._start)));
+ }
+ } else {
+ if (this.isImprecise()) {
+ elmt.appendChild(elmt.ownerDocument.createTextNode(
+ labeller.labelPrecise(this._start) + " ~ " + labeller.labelPrecise(this._latestStart)));
+ elmt.appendChild(elmt.ownerDocument.createElement("br"));
+ elmt.appendChild(elmt.ownerDocument.createTextNode(
+ labeller.labelPrecise(this._earliestEnd) + " ~ " + labeller.labelPrecise(this._end)));
+ } else {
+ elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._start)));
+ elmt.appendChild(elmt.ownerDocument.createElement("br"));
+ elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._end)));
+ }
+ }
+ },
+
+ fillInfoBubble: function(elmt, theme, labeller) {
+ var doc = elmt.ownerDocument;
+
+ var title = this.getText();
+ var link = this.getLink();
+ var image = this.getImage();
+
+ if (image != null) {
+ var img = doc.createElement("img");
+ img.src = image;
+
+ theme.event.bubble.imageStyler(img);
+ elmt.appendChild(img);
+ }
+
+ var divTitle = doc.createElement("div");
+ var textTitle = doc.createTextNode(title);
+ if (link != null) {
+ var a = doc.createElement("a");
+ a.href = link;
+ a.appendChild(textTitle);
+ divTitle.appendChild(a);
+ } else {
+ divTitle.appendChild(textTitle);
+ }
+ theme.event.bubble.titleStyler(divTitle);
+ elmt.appendChild(divTitle);
+
+ var divBody = doc.createElement("div");
+ this.fillDescription(divBody);
+ theme.event.bubble.bodyStyler(divBody);
+ elmt.appendChild(divBody);
+
+ var divTime = doc.createElement("div");
+ this.fillTime(divTime, labeller);
+ theme.event.bubble.timeStyler(divTime);
+ elmt.appendChild(divTime);
+
+ var divWiki = doc.createElement("div");
+ this.fillWikiInfo(divWiki);
+ theme.event.bubble.wikiStyler(divWiki);
+ elmt.appendChild(divWiki);
+ }
+};
+
+
Added: openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/scripts/themes.js
URL: http://svn.apache.org/viewvc/openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/scripts/themes.js?rev=1795424&view=auto
==============================================================================
--- openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/scripts/themes.js (added)
+++ openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/scripts/themes.js Wed May 17 15:29:56 2017
@@ -0,0 +1,180 @@
+/*==================================================
+ * Classic Theme
+ *==================================================
+ */
+
+
+
+Timeline.ClassicTheme = new Object();
+
+Timeline.ClassicTheme.implementations = [];
+
+Timeline.ClassicTheme.create = function(locale) {
+ if (locale == null) {
+ locale = Timeline.getDefaultLocale();
+ }
+
+ var f = Timeline.ClassicTheme.implementations[locale];
+ if (f == null) {
+ f = Timeline.ClassicTheme._Impl;
+ }
+ return new f();
+};
+
+Timeline.ClassicTheme._Impl = function() {
+ this.firstDayOfWeek = 0; // Sunday
+
+ // Note: Many styles previously set here are now set using CSS
+ // The comments indicate settings controlled by CSS, not
+ // lines to be un-commented.
+ //
+ //
+ // Attributes autoWidth, autoWidthAnimationTime, timeline_start
+ // and timeline_stop must be set on the first band's theme.
+ // The other attributes can be set differently for each
+ // band by using different themes for the bands.
+ this.autoWidth = false; // Should the Timeline automatically grow itself, as
+ // needed when too many events for the available width
+ // are painted on the visible part of the Timeline?
+ this.autoWidthAnimationTime = 500; // mSec
+ this.timeline_start = null; // Setting a date, eg new Date(Date.UTC(2008,0,17,20,00,00,0)) will prevent the
+ // Timeline from being moved to anytime before the date.
+ this.timeline_stop = null; // Use for setting a maximum date. The Timeline will not be able
+ // to be moved to anytime after this date.
+ this.ether = {
+ backgroundColors: [
+ // "#EEE",
+ // "#DDD",
+ // "#CCC",
+ // "#AAA"
+ ],
+ // highlightColor: "white",
+ highlightOpacity: 50,
+ interval: {
+ line: {
+ show: true,
+ opacity: 25
+ // color: "#aaa",
+ },
+ weekend: {
+ opacity: 30
+ // color: "#FFFFE0",
+ },
+ marker: {
+ hAlign: "Bottom",
+ vAlign: "Right"
+ /*
+ hBottomStyler: function(elmt) {
+ elmt.className = "timeline-ether-marker-bottom";
+ },
+ hBottomEmphasizedStyler: function(elmt) {
+ elmt.className = "timeline-ether-marker-bottom-emphasized";
+ },
+ hTopStyler: function(elmt) {
+ elmt.className = "timeline-ether-marker-top";
+ },
+ hTopEmphasizedStyler: function(elmt) {
+ elmt.className = "timeline-ether-marker-top-emphasized";
+ },
+ */
+
+
+ /*
+ vRightStyler: function(elmt) {
+ elmt.className = "timeline-ether-marker-right";
+ },
+ vRightEmphasizedStyler: function(elmt) {
+ elmt.className = "timeline-ether-marker-right-emphasized";
+ },
+ vLeftStyler: function(elmt) {
+ elmt.className = "timeline-ether-marker-left";
+ },
+ vLeftEmphasizedStyler:function(elmt) {
+ elmt.className = "timeline-ether-marker-left-emphasized";
+ }
+ */
+ }
+ }
+ };
+
+ this.event = {
+ track: {
+ height: 10, // px. You will need to change the track
+ // height if you change the tape height.
+ gap: 2, // px. Gap between tracks
+ offset: 2, // px. top margin above tapes
+ autoWidthMargin: 1.5
+ /* autoWidthMargin is only used if autoWidth (see above) is true.
+ The autoWidthMargin setting is used to set how close the bottom of the
+ lowest track is to the edge of the band's div. The units are total track
+ width (tape + label + gap). A min of 0.5 is suggested. Use this setting to
+ move the bottom track's tapes above the axis markers, if needed for your
+ Timeline.
+ */
+ },
+ overviewTrack: {
+ offset: 20, // px -- top margin above tapes
+ tickHeight: 6, // px
+ height: 2, // px
+ gap: 1, // px
+ autoWidthMargin: 5 // This attribute is only used if autoWidth (see above) is true.
+ },
+ tape: {
+ height: 4 // px. For thicker tapes, remember to change track height too.
+ },
+ instant: {
+ icon: Timeline.urlPrefix + "images/dull-blue-circle.png",
+ // default icon. Icon can also be specified per event
+ iconWidth: 10,
+ iconHeight: 10,
+ impreciseOpacity: 20, // opacity of the tape when durationEvent is false
+ impreciseIconMargin: 3 // A tape and an icon are painted for imprecise instant
+ // events. This attribute is the margin between the
+ // bottom of the tape and the top of the icon in that
+ // case.
+ // color: "#58A0DC",
+ // impreciseColor: "#58A0DC",
+ },
+ duration: {
+ impreciseOpacity: 20 // tape opacity for imprecise part of duration events
+ // color: "#58A0DC",
+ // impreciseColor: "#58A0DC",
+ },
+ label: {
+ backgroundOpacity: 50,// only used in detailed painter
+ offsetFromLine: 3 // px left margin amount from icon's right edge
+ // backgroundColor: "white",
+ // lineColor: "#58A0DC",
+ },
+ highlightColors: [ // Use with getEventPainter().setHighlightMatcher
+ // See webapp/examples/examples.js
+ "#FFFF00",
+ "#FFC000",
+ "#FF0000",
+ "#0000FF"
+ ],
+ highlightLabelBackground: false, // When highlighting an event, also change the event's label background?
+ bubble: {
+ width: 250, // px
+ maxHeight: 0, // px Maximum height of bubbles. 0 means no max height.
+ // scrollbar will be added for taller bubbles
+ titleStyler: function(elmt) {
+ elmt.className = "timeline-event-bubble-title";
+ },
+ bodyStyler: function(elmt) {
+ elmt.className = "timeline-event-bubble-body";
+ },
+ imageStyler: function(elmt) {
+ elmt.className = "timeline-event-bubble-image";
+ },
+ wikiStyler: function(elmt) {
+ elmt.className = "timeline-event-bubble-wiki";
+ },
+ timeStyler: function(elmt) {
+ elmt.className = "timeline-event-bubble-time";
+ }
+ }
+ };
+
+ this.mouseWheel = 'scroll'; // 'default', 'zoom', 'scroll'
+};
\ No newline at end of file
Added: openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/scripts/timeline.js
URL: http://svn.apache.org/viewvc/openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/scripts/timeline.js?rev=1795424&view=auto
==============================================================================
--- openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/scripts/timeline.js (added)
+++ openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/scripts/timeline.js Wed May 17 15:29:56 2017
@@ -0,0 +1,645 @@
+/*=================================================
+ *
+ * Coding standards:
+ *
+ * We aim towards Douglas Crockford's Javascript conventions.
+ * See: http://javascript.crockford.com/code.html
+ * See also: http://www.crockford.com/javascript/javascript.html
+ *
+ * That said, this JS code was written before some recent JS
+ * support libraries became widely used or available.
+ * In particular, the _ character is used to indicate a class function or
+ * variable that should be considered private to the class.
+ *
+ * The code mostly uses accessor methods for getting/setting the private
+ * class variables.
+ *
+ * Over time, we'd like to formalize the convention by using support libraries
+ * which enforce privacy in objects.
+ *
+ * We also want to use jslint: http://www.jslint.com/
+ *
+ *
+ *==================================================
+ */
+
+
+
+/*==================================================
+ * Timeline VERSION
+ *==================================================
+ */
+// Note: version is also stored in the build.xml file
+Timeline.version = '2.3.1'; // use format 'pre 1.2.3' for trunk versions
+Timeline.ajax_lib_version = SimileAjax.version; // Waiting for version string method from Ajax library
+Timeline.display_version = Timeline.version + ' (with Ajax lib ' + Timeline.ajax_lib_version + ')';
+ // cf method Timeline.writeVersion
+
+/*==================================================
+ * Timeline
+ *==================================================
+ */
+Timeline.strings = {}; // localization string tables
+Timeline.HORIZONTAL = 0;
+Timeline.VERTICAL = 1;
+Timeline._defaultTheme = null;
+
+Timeline.getDefaultLocale = function() {
+ return Timeline.clientLocale;
+};
+
+Timeline.create = function(elmt, bandInfos, orientation, unit) {
+ if (Timeline.timelines == null) {
+ Timeline.timelines = [];
+ // Timeline.timelines array can have null members--Timelines that
+ // once existed on the page, but were later disposed of.
+ }
+
+ var timelineID = Timeline.timelines.length;
+ Timeline.timelines[timelineID] = null; // placeholder until we have the object
+ var new_tl = new Timeline._Impl(elmt, bandInfos, orientation, unit,
+ timelineID);
+ Timeline.timelines[timelineID] = new_tl;
+ return new_tl;
+};
+
+Timeline.createBandInfo = function(params) {
+ var theme = ("theme" in params) ? params.theme : Timeline.getDefaultTheme();
+
+ var eventSource = ("eventSource" in params) ? params.eventSource : null;
+
+ var ether = new Timeline.LinearEther({
+ centersOn: ("date" in params) ? params.date : new Date(),
+ interval: SimileAjax.DateTime.gregorianUnitLengths[params.intervalUnit],
+ pixelsPerInterval: params.intervalPixels,
+ theme: theme
+ });
+
+ var etherPainter = new Timeline.GregorianEtherPainter({
+ unit: params.intervalUnit,
+ multiple: ("multiple" in params) ? params.multiple : 1,
+ theme: theme,
+ align: ("align" in params) ? params.align : undefined
+ });
+
+ var eventPainterParams = {
+ showText: ("showEventText" in params) ? params.showEventText : true,
+ theme: theme
+ };
+ // pass in custom parameters for the event painter
+ if ("eventPainterParams" in params) {
+ for (var prop in params.eventPainterParams) {
+ eventPainterParams[prop] = params.eventPainterParams[prop];
+ }
+ }
+
+ if ("trackHeight" in params) {
+ eventPainterParams.trackHeight = params.trackHeight;
+ }
+ if ("trackGap" in params) {
+ eventPainterParams.trackGap = params.trackGap;
+ }
+
+ var layout = ("overview" in params && params.overview) ? "overview" : ("layout" in params ? params.layout : "original");
+ var eventPainter;
+ if ("eventPainter" in params) {
+ eventPainter = new params.eventPainter(eventPainterParams);
+ } else {
+ switch (layout) {
+ case "overview" :
+ eventPainter = new Timeline.OverviewEventPainter(eventPainterParams);
+ break;
+ case "detailed" :
+ eventPainter = new Timeline.DetailedEventPainter(eventPainterParams);
+ break;
+ default:
+ eventPainter = new Timeline.OriginalEventPainter(eventPainterParams);
+ }
+ }
+
+ return {
+ width: params.width,
+ eventSource: eventSource,
+ timeZone: ("timeZone" in params) ? params.timeZone : 0,
+ ether: ether,
+ etherPainter: etherPainter,
+ eventPainter: eventPainter,
+ theme: theme,
+ zoomIndex: ("zoomIndex" in params) ? params.zoomIndex : 0,
+ zoomSteps: ("zoomSteps" in params) ? params.zoomSteps : null
+ };
+};
+
+Timeline.createHotZoneBandInfo = function(params) {
+ var theme = ("theme" in params) ? params.theme : Timeline.getDefaultTheme();
+
+ var eventSource = ("eventSource" in params) ? params.eventSource : null;
+
+ var ether = new Timeline.HotZoneEther({
+ centersOn: ("date" in params) ? params.date : new Date(),
+ interval: SimileAjax.DateTime.gregorianUnitLengths[params.intervalUnit],
+ pixelsPerInterval: params.intervalPixels,
+ zones: params.zones,
+ theme: theme
+ });
+
+ var etherPainter = new Timeline.HotZoneGregorianEtherPainter({
+ unit: params.intervalUnit,
+ zones: params.zones,
+ theme: theme,
+ align: ("align" in params) ? params.align : undefined
+ });
+
+ var eventPainterParams = {
+ showText: ("showEventText" in params) ? params.showEventText : true,
+ theme: theme
+ };
+ // pass in custom parameters for the event painter
+ if ("eventPainterParams" in params) {
+ for (var prop in params.eventPainterParams) {
+ eventPainterParams[prop] = params.eventPainterParams[prop];
+ }
+ }
+ if ("trackHeight" in params) {
+ eventPainterParams.trackHeight = params.trackHeight;
+ }
+ if ("trackGap" in params) {
+ eventPainterParams.trackGap = params.trackGap;
+ }
+
+ var layout = ("overview" in params && params.overview) ? "overview" : ("layout" in params ? params.layout : "original");
+ var eventPainter;
+ if ("eventPainter" in params) {
+ eventPainter = new params.eventPainter(eventPainterParams);
+ } else {
+ switch (layout) {
+ case "overview" :
+ eventPainter = new Timeline.OverviewEventPainter(eventPainterParams);
+ break;
+ case "detailed" :
+ eventPainter = new Timeline.DetailedEventPainter(eventPainterParams);
+ break;
+ default:
+ eventPainter = new Timeline.OriginalEventPainter(eventPainterParams);
+ }
+ }
+ return {
+ width: params.width,
+ eventSource: eventSource,
+ timeZone: ("timeZone" in params) ? params.timeZone : 0,
+ ether: ether,
+ etherPainter: etherPainter,
+ eventPainter: eventPainter,
+ theme: theme,
+ zoomIndex: ("zoomIndex" in params) ? params.zoomIndex : 0,
+ zoomSteps: ("zoomSteps" in params) ? params.zoomSteps : null
+ };
+};
+
+Timeline.getDefaultTheme = function() {
+ if (Timeline._defaultTheme == null) {
+ Timeline._defaultTheme = Timeline.ClassicTheme.create(Timeline.getDefaultLocale());
+ }
+ return Timeline._defaultTheme;
+};
+
+Timeline.setDefaultTheme = function(theme) {
+ Timeline._defaultTheme = theme;
+};
+
+Timeline.loadXML = function(url, f) {
+ var fError = function(statusText, status, xmlhttp) {
+ alert("Failed to load data xml from " + url + "\n" + statusText);
+ };
+ var fDone = function(xmlhttp) {
+ var xml = xmlhttp.responseXML;
+ if (!xml.documentElement && xmlhttp.responseStream) {
+ xml.load(xmlhttp.responseStream);
+ }
+ f(xml, url);
+ };
+ SimileAjax.XmlHttp.get(url, fError, fDone);
+};
+
+
+Timeline.loadJSON = function(url, f) {
+ var fError = function(statusText, status, xmlhttp) {
+ alert("Failed to load json data from " + url + "\n" + statusText);
+ };
+ var fDone = function(xmlhttp) {
+ f(eval('(' + xmlhttp.responseText + ')'), url);
+ };
+ SimileAjax.XmlHttp.get(url, fError, fDone);
+};
+
+Timeline.getTimelineFromID = function(timelineID) {
+ return Timeline.timelines[timelineID];
+};
+
+// Write the current Timeline version as the contents of element with id el_id
+Timeline.writeVersion = function(el_id) {
+ document.getElementById(el_id).innerHTML = this.display_version;
+};
+
+
+
+/*==================================================
+ * Timeline Implementation object
+ *==================================================
+ */
+Timeline._Impl = function(elmt, bandInfos, orientation, unit, timelineID) {
+ SimileAjax.WindowManager.initialize();
+
+ this._containerDiv = elmt;
+
+ this._bandInfos = bandInfos;
+ this._orientation = orientation == null ? Timeline.HORIZONTAL : orientation;
+ this._unit = (unit != null) ? unit : SimileAjax.NativeDateUnit;
+ this._starting = true; // is the Timeline being created? Used by autoWidth
+ // functions
+ this._autoResizing = false;
+
+ // autoWidth is a "public" property of the Timeline object
+ this.autoWidth = bandInfos && bandInfos[0] && bandInfos[0].theme &&
+ bandInfos[0].theme.autoWidth;
+ this.autoWidthAnimationTime = bandInfos && bandInfos[0] && bandInfos[0].theme &&
+ bandInfos[0].theme.autoWidthAnimationTime;
+ this.timelineID = timelineID; // also public attribute
+ this.timeline_start = bandInfos && bandInfos[0] && bandInfos[0].theme &&
+ bandInfos[0].theme.timeline_start;
+ this.timeline_stop = bandInfos && bandInfos[0] && bandInfos[0].theme &&
+ bandInfos[0].theme.timeline_stop;
+ this.timeline_at_start = false; // already at start or stop? Then won't
+ this.timeline_at_stop = false; // try to move further in the wrong direction
+
+ this._initialize();
+};
+
+//
+// Public functions used by client sw
+//
+Timeline._Impl.prototype.dispose = function() {
+ for (var i = 0; i < this._bands.length; i++) {
+ this._bands[i].dispose();
+ }
+ this._bands = null;
+ this._bandInfos = null;
+ this._containerDiv.innerHTML = "";
+ // remove from array of Timelines
+ Timeline.timelines[this.timelineID] = null;
+};
+
+Timeline._Impl.prototype.getBandCount = function() {
+ return this._bands.length;
+};
+
+Timeline._Impl.prototype.getBand = function(index) {
+ return this._bands[index];
+};
+
+Timeline._Impl.prototype.finishedEventLoading = function() {
+ // Called by client after events have been loaded into Timeline
+ // Only used if the client has set autoWidth
+ // Sets width to Timeline's requested amount and will shrink down the div if
+ // need be.
+ this._autoWidthCheck(true);
+ this._starting = false;
+};
+
+Timeline._Impl.prototype.layout = function() {
+ // called by client when browser is resized
+ this._autoWidthCheck(true);
+ this._distributeWidths();
+};
+
+Timeline._Impl.prototype.paint = function() {
+ for (var i = 0; i < this._bands.length; i++) {
+ this._bands[i].paint();
+ }
+};
+
+Timeline._Impl.prototype.getDocument = function() {
+ return this._containerDiv.ownerDocument;
+};
+
+Timeline._Impl.prototype.addDiv = function(div) {
+ this._containerDiv.appendChild(div);
+};
+
+Timeline._Impl.prototype.removeDiv = function(div) {
+ this._containerDiv.removeChild(div);
+};
+
+Timeline._Impl.prototype.isHorizontal = function() {
+ return this._orientation == Timeline.HORIZONTAL;
+};
+
+Timeline._Impl.prototype.isVertical = function() {
+ return this._orientation == Timeline.VERTICAL;
+};
+
+Timeline._Impl.prototype.getPixelLength = function() {
+ return this._orientation == Timeline.HORIZONTAL ?
+ this._containerDiv.offsetWidth : this._containerDiv.offsetHeight;
+};
+
+Timeline._Impl.prototype.getPixelWidth = function() {
+ return this._orientation == Timeline.VERTICAL ?
+ this._containerDiv.offsetWidth : this._containerDiv.offsetHeight;
+};
+
+Timeline._Impl.prototype.getUnit = function() {
+ return this._unit;
+};
+
+Timeline._Impl.prototype.getWidthStyle = function() {
+ // which element.style attribute should be changed to affect Timeline's "width"
+ return this._orientation == Timeline.HORIZONTAL ? 'height' : 'width';
+};
+
+Timeline._Impl.prototype.loadXML = function(url, f) {
+ var tl = this;
+
+
+ var fError = function(statusText, status, xmlhttp) {
+ alert("Failed to load data xml from " + url + "\n" + statusText);
+ tl.hideLoadingMessage();
+ };
+ var fDone = function(xmlhttp) {
+ try {
+ var xml = xmlhttp.responseXML;
+ if (!xml.documentElement && xmlhttp.responseStream) {
+ xml.load(xmlhttp.responseStream);
+ }
+ f(xml, url);
+ } finally {
+ tl.hideLoadingMessage();
+ }
+ };
+
+ this.showLoadingMessage();
+ window.setTimeout(function() { SimileAjax.XmlHttp.get(url, fError, fDone); }, 0);
+};
+
+Timeline._Impl.prototype.loadJSON = function(url, f) {
+ var tl = this;
+
+ var fError = function(statusText, status, xmlhttp) {
+ alert("Failed to load json data from " + url + "\n" + statusText);
+ tl.hideLoadingMessage();
+ };
+ var fDone = function(xmlhttp) {
+ try {
+ f(eval('(' + xmlhttp.responseText + ')'), url);
+ } finally {
+ tl.hideLoadingMessage();
+ }
+ };
+
+ this.showLoadingMessage();
+ window.setTimeout(function() { SimileAjax.XmlHttp.get(url, fError, fDone); }, 0);
+};
+
+
+//
+// Private functions used by Timeline object functions
+//
+
+Timeline._Impl.prototype._autoWidthScrollListener = function(band) {
+ band.getTimeline()._autoWidthCheck(false);
+};
+
+// called to re-calculate auto width and adjust the overall Timeline div if needed
+Timeline._Impl.prototype._autoWidthCheck = function(okToShrink) {
+ var timeline = this; // this Timeline
+ var immediateChange = timeline._starting;
+ var newWidth = 0;
+
+ function changeTimelineWidth() {
+ var widthStyle = timeline.getWidthStyle();
+ if (immediateChange) {
+ timeline._containerDiv.style[widthStyle] = newWidth + 'px';
+ } else {
+ // animate change
+ timeline._autoResizing = true;
+ var animateParam ={};
+ animateParam[widthStyle] = newWidth + 'px';
+
+ SimileAjax.jQuery(timeline._containerDiv).animate(
+ animateParam, timeline.autoWidthAnimationTime,
+ 'linear', function(){timeline._autoResizing = false;});
+ }
+ }
+
+ function checkTimelineWidth() {
+ var targetWidth = 0; // the new desired width
+ var currentWidth = timeline.getPixelWidth();
+
+ if (timeline._autoResizing) {
+ return; // early return
+ }
+
+ // compute targetWidth
+ for (var i = 0; i < timeline._bands.length; i++) {
+ timeline._bands[i].checkAutoWidth();
+ targetWidth += timeline._bandInfos[i].width;
+ }
+
+ if (targetWidth > currentWidth || okToShrink) {
+ // yes, let's change the size
+ newWidth = targetWidth;
+ changeTimelineWidth();
+ timeline._distributeWidths();
+ }
+ }
+
+ // function's mainline
+ if (!timeline.autoWidth) {
+ return; // early return
+ }
+
+ checkTimelineWidth();
+};
+
+Timeline._Impl.prototype._initialize = function() {
+ var containerDiv = this._containerDiv;
+ var doc = containerDiv.ownerDocument;
+
+ containerDiv.className =
+ containerDiv.className.split(" ").concat("timeline-container").join(" ");
+
+ /*
+ * Set css-class on container div that will define orientation
+ */
+ var orientation = (this.isHorizontal()) ? 'horizontal' : 'vertical'
+ containerDiv.className +=' timeline-'+orientation;
+
+
+ while (containerDiv.firstChild) {
+ containerDiv.removeChild(containerDiv.firstChild);
+ }
+
+ /*
+ * inserting copyright and link to simile
+ */
+ var elmtCopyright = SimileAjax.Graphics.createTranslucentImage(Timeline.urlPrefix + (this.isHorizontal() ? "images/copyright-vertical.png" : "images/copyright.png"));
+ elmtCopyright.className = "timeline-copyright";
+ elmtCopyright.title = "Timeline copyright SIMILE - www.code.google.com/p/simile-widgets/";
+ SimileAjax.DOM.registerEvent(elmtCopyright, "click", function() { window.location = "http://code.google.com/p/simile-widgets/"; });
+ containerDiv.appendChild(elmtCopyright);
+
+ /*
+ * creating bands
+ */
+ this._bands = [];
+ for (var i = 0; i < this._bandInfos.length; i++) {
+ var band = new Timeline._Band(this, this._bandInfos[i], i);
+ this._bands.push(band);
+ }
+ this._distributeWidths();
+
+ /*
+ * sync'ing bands
+ */
+ for (var i = 0; i < this._bandInfos.length; i++) {
+ var bandInfo = this._bandInfos[i];
+ if ("syncWith" in bandInfo) {
+ this._bands[i].setSyncWithBand(
+ this._bands[bandInfo.syncWith],
+ ("highlight" in bandInfo) ? bandInfo.highlight : false
+ );
+ }
+ }
+
+
+ if (this.autoWidth) {
+ for (var i = 0; i < this._bands.length; i++) {
+ this._bands[i].addOnScrollListener(this._autoWidthScrollListener);
+ }
+ }
+
+
+ /*
+ * creating loading UI
+ */
+ var message = SimileAjax.Graphics.createMessageBubble(doc);
+ message.containerDiv.className = "timeline-message-container";
+ containerDiv.appendChild(message.containerDiv);
+
+ message.contentDiv.className = "timeline-message";
+ message.contentDiv.innerHTML = "<img src='" + Timeline.urlPrefix + "images/progress-running.gif' /> Loading...";
+
+ this.showLoadingMessage = function() { message.containerDiv.style.display = "block"; };
+ this.hideLoadingMessage = function() { message.containerDiv.style.display = "none"; };
+};
+
+Timeline._Impl.prototype._distributeWidths = function() {
+ var length = this.getPixelLength();
+ var width = this.getPixelWidth();
+ var cumulativeWidth = 0;
+
+ for (var i = 0; i < this._bands.length; i++) {
+ var band = this._bands[i];
+ var bandInfos = this._bandInfos[i];
+ var widthString = bandInfos.width;
+ var bandWidth;
+
+ if (typeof widthString == 'string') {
+ var x = widthString.indexOf("%");
+ if (x > 0) {
+ var percent = parseInt(widthString.substr(0, x));
+ bandWidth = Math.round(percent * width / 100);
+ } else {
+ bandWidth = parseInt(widthString);
+ }
+ } else {
+ // was given an integer
+ bandWidth = widthString;
+ }
+
+ band.setBandShiftAndWidth(cumulativeWidth, bandWidth);
+ band.setViewLength(length);
+
+ cumulativeWidth += bandWidth;
+ }
+};
+
+Timeline._Impl.prototype.shiftOK = function(index, shift) {
+ // Returns true if the proposed shift is ok
+ //
+ // Positive shift means going back in time
+ var going_back = shift > 0,
+ going_forward = shift < 0;
+
+ // Is there an edge?
+ if ((going_back && this.timeline_start == null) ||
+ (going_forward && this.timeline_stop == null) ||
+ (shift == 0)) {
+ return (true); // early return
+ }
+
+ // If any of the bands has noted that it is changing the others,
+ // then this shift is a secondary shift in reaction to the real shift,
+ // which already happened. In such cases, ignore it. (The issue is
+ // that a positive original shift can cause a negative secondary shift,
+ // as the bands adjust.)
+ var secondary_shift = false;
+ for (var i = 0; i < this._bands.length && !secondary_shift; i++) {
+ secondary_shift = this._bands[i].busy();
+ }
+ if (secondary_shift) {
+ return(true); // early return
+ }
+
+ // If we are already at an edge, then don't even think about going any further
+ if ((going_back && this.timeline_at_start) ||
+ (going_forward && this.timeline_at_stop)) {
+ return (false); // early return
+ }
+
+ // Need to check all the bands
+ var ok = false; // return value
+ // If any of the bands will be or are showing an ok date, then let the shift proceed.
+ for (var i = 0; i < this._bands.length && !ok; i++) {
+ var band = this._bands[i];
+ if (going_back) {
+ ok = (i == index ? band.getMinVisibleDateAfterDelta(shift) : band.getMinVisibleDate())
+ >= this.timeline_start;
+ } else {
+ ok = (i == index ? band.getMaxVisibleDateAfterDelta(shift) : band.getMaxVisibleDate())
+ <= this.timeline_stop;
+ }
+ }
+
+ // process results
+ if (going_back) {
+ this.timeline_at_start = !ok;
+ this.timeline_at_stop = false;
+ } else {
+ this.timeline_at_stop = !ok;
+ this.timeline_at_start = false;
+ }
+ // This is where you could have an effect once per hitting an
+ // edge of the Timeline. Eg jitter the Timeline
+ //if (!ok) {
+ //alert(going_back ? "At beginning" : "At end");
+ //}
+ return (ok);
+};
+
+Timeline._Impl.prototype.zoom = function (zoomIn, x, y, target) {
+ var matcher = new RegExp("^timeline-band-([0-9]+)$");
+ var bandIndex = null;
+
+ var result = matcher.exec(target.id);
+ if (result) {
+ bandIndex = parseInt(result[1]);
+ }
+
+ if (bandIndex != null) {
+ this._bands[bandIndex].zoom(zoomIn, x, y, target);
+ }
+
+ this.paint();
+};
+
Added: openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/scripts/units.js
URL: http://svn.apache.org/viewvc/openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/scripts/units.js?rev=1795424&view=auto
==============================================================================
--- openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/scripts/units.js (added)
+++ openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/scripts/units.js Wed May 17 15:29:56 2017
@@ -0,0 +1,68 @@
+/*==================================================
+ * Default Unit
+ *==================================================
+ */
+
+Timeline.NativeDateUnit = new Object();
+
+Timeline.NativeDateUnit.createLabeller = function(locale, timeZone) {
+ return new Timeline.GregorianDateLabeller(locale, timeZone);
+};
+
+Timeline.NativeDateUnit.makeDefaultValue = function() {
+ return new Date();
+};
+
+Timeline.NativeDateUnit.cloneValue = function(v) {
+ return new Date(v.getTime());
+};
+
+Timeline.NativeDateUnit.getParser = function(format) {
+ if (typeof format == "string") {
+ format = format.toLowerCase();
+ }
+ return (format == "iso8601" || format == "iso 8601") ?
+ Timeline.DateTime.parseIso8601DateTime :
+ Timeline.DateTime.parseGregorianDateTime;
+};
+
+Timeline.NativeDateUnit.parseFromObject = function(o) {
+ return Timeline.DateTime.parseGregorianDateTime(o);
+};
+
+Timeline.NativeDateUnit.toNumber = function(v) {
+ return v.getTime();
+};
+
+Timeline.NativeDateUnit.fromNumber = function(n) {
+ return new Date(n);
+};
+
+Timeline.NativeDateUnit.compare = function(v1, v2) {
+ var n1, n2;
+ if (typeof v1 == "object") {
+ n1 = v1.getTime();
+ } else {
+ n1 = Number(v1);
+ }
+ if (typeof v2 == "object") {
+ n2 = v2.getTime();
+ } else {
+ n2 = Number(v2);
+ }
+
+ return n1 - n2;
+};
+
+Timeline.NativeDateUnit.earlier = function(v1, v2) {
+ return Timeline.NativeDateUnit.compare(v1, v2) < 0 ? v1 : v2;
+};
+
+Timeline.NativeDateUnit.later = function(v1, v2) {
+ return Timeline.NativeDateUnit.compare(v1, v2) > 0 ? v1 : v2;
+};
+
+Timeline.NativeDateUnit.change = function(v, n) {
+ return new Date(v.getTime() + n);
+};
+
Added: openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/styles/ethers.css
URL: http://svn.apache.org/viewvc/openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/styles/ethers.css?rev=1795424&view=auto
==============================================================================
--- openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/styles/ethers.css (added)
+++ openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/styles/ethers.css Wed May 17 15:29:56 2017
@@ -0,0 +1,120 @@
+
+
+/*------------------- Horizontal / Vertical lines ----------------*/
+
+/* style for ethers */
+.timeline-ether-lines{border-color:#666; border-style:dotted; position:absolute;}
+.timeline-horizontal .timeline-ether-lines{border-width:0 0 0 1px; height:100%; top: 0; width: 1px;}
+.timeline-vertical .timeline-ether-lines{border-width:1px 0 0; height:1px; left: 0; width: 100%;}
+
+
+
+/*---------------- Weekends ---------------------------*/
+.timeline-ether-weekends{
+ position:absolute;
+ background-color:#FFFFE0;
+}
+
+.timeline-vertical .timeline-ether-weekends{left:0;width:100%;}
+.timeline-horizontal .timeline-ether-weekends{top:0; height:100%;}
+
+
+/*-------------------------- HIGHLIGHT DECORATORS -------------------*/
+/* Used for decorators, not used for Timeline Highlight */
+.timeline-highlight-decorator,
+.timeline-highlight-point-decorator{
+ position:absolute;
+ overflow:hidden;
+}
+
+/* Width of horizontal decorators and Height of vertical decorators is
+ set in the decorator function params */
+.timeline-horizontal .timeline-highlight-point-decorator,
+.timeline-horizontal .timeline-highlight-decorator{
+ top:0;
+ height:100%;
+}
+
+.timeline-vertical .timeline-highlight-point-decorator,
+.timeline-vertical .timeline-highlight-decorator{
+ width:100%;
+ left:0;
+}
+
+.timeline-highlight-decorator{background-color:#FFC080;}
+.timeline-highlight-point-decorator{background-color:#ff5;}
+
+
+/*---------------------------- LABELS -------------------------*/
+.timeline-highlight-label {
+ position:absolute; overflow:hidden; font-size:200%;
+ font-weight:bold; color:#999; }
+
+
+/*---------------- VERTICAL LABEL -------------------*/
+.timeline-horizontal .timeline-highlight-label {top:0; height:100%;}
+.timeline-horizontal .timeline-highlight-label td {vertical-align:middle;}
+.timeline-horizontal .timeline-highlight-label-start {text-align:right;}
+.timeline-horizontal .timeline-highlight-label-end {text-align:left;}
+
+
+/*---------------- HORIZONTAL LABEL -------------------*/
+.timeline-vertical .timeline-highlight-label {left:0;width:100%;}
+.timeline-vertical .timeline-highlight-label td {vertical-align:top;}
+.timeline-vertical .timeline-highlight-label-start {text-align:center;}
+.timeline-vertical .timeline-highlight-label-end {text-align:center;}
+
+
+/*-------------------------------- DATE LABELS --------------------------------*/
+.timeline-date-label {
+ position: absolute;
+ border: solid #aaa;
+ color: #aaa;
+ width: 5em;
+ height: 1.5em;}
+.timeline-date-label-em {color: #000;}
+
+/* horizontal */
+.timeline-horizontal .timeline-date-label{padding-left:2px;}
+.timeline-horizontal .timeline-date-label{border-width:0 0 0 1px;}
+.timeline-horizontal .timeline-date-label-em{height:2em}
+
+/* vertical */
+.timeline-vertical .timeline-date-label{padding-top:2px;}
+.timeline-vertical .timeline-date-label{border-width:1px 0 0;}
+.timeline-vertical .timeline-date-label-em{width:7em}
+
+
+/*------------------------------- Ether.highlight -------------------------*/
+.timeline-ether-highlight{position:absolute; background-color:#fff;}
+.timeline-horizontal .timeline-ether-highlight{top:2px;}
+.timeline-vertical .timeline-ether-highlight{left:2px;}
+
+
+/*------------------------------ EVENTS ------------------------------------*/
+.timeline-event-icon, .timeline-event-label,.timeline-event-tape{
+ position:absolute;
+ cursor:pointer;
+}
+
+.timeline-event-tape,
+.timeline-small-event-tape,
+.timeline-small-event-icon{
+ background-color:#58A0DC;
+ overflow:hidden;
+}
+
+.timeline-small-event-tape,
+.timeline-small-event-icon{
+ position:absolute;
+}
+
+.timeline-small-event-icon{width:1px; height:6px;}
+
+
+/*--------------------------------- TIMELINE-------------------------*/
+.timeline-ether-bg{width:100%; height:100%;}
+.timeline-band-0 .timeline-ether-bg{background-color:#eee}
+.timeline-band-1 .timeline-ether-bg{background-color:#ddd}
+.timeline-band-2 .timeline-ether-bg{background-color:#ccc}
+.timeline-band-3 .timeline-ether-bg{background-color:#aaa}
Added: openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/styles/events.css
URL: http://svn.apache.org/viewvc/openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/styles/events.css?rev=1795424&view=auto
==============================================================================
--- openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/styles/events.css (added)
+++ openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/styles/events.css Wed May 17 15:29:56 2017
@@ -0,0 +1,45 @@
+.timeline-duration-event {
+ position: absolute;
+ overflow: hidden;
+ border: 1px solid blue;
+}
+
+.timeline-instant-event2 {
+ position: absolute;
+ overflow: hidden;
+ border-left: 1px solid blue;
+ padding-left: 2px;
+}
+
+.timeline-instant-event {
+ position: absolute;
+ overflow: hidden;
+}
+
+.timeline-event-bubble-title {
+ font-weight: bold;
+ border-bottom: 1px solid #888;
+ margin-bottom: 0.5em;
+}
+
+.timeline-event-bubble-body {
+}
+
+.timeline-event-bubble-wiki {
+ margin: 0.5em;
+ text-align: right;
+ color: #A0A040;
+}
+.timeline-event-bubble-wiki a {
+ color: #A0A040;
+}
+
+.timeline-event-bubble-time {
+ color: #aaa;
+}
+
+.timeline-event-bubble-image {
+ float: right;
+ padding-left: 5px;
+ padding-bottom: 5px;
+}
\ No newline at end of file
Added: openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/styles/timeline.css
URL: http://svn.apache.org/viewvc/openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/styles/timeline.css?rev=1795424&view=auto
==============================================================================
--- openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/styles/timeline.css (added)
+++ openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/styles/timeline.css Wed May 17 15:29:56 2017
@@ -0,0 +1,65 @@
+.timeline-container {
+ position: relative;
+ overflow: hidden;
+}
+
+.timeline-copyright {
+ position: absolute;
+ bottom: 0px;
+ left: 0px;
+ z-index: 1000;
+ cursor: pointer;
+}
+
+.timeline-message-container {
+ position: absolute;
+ top: 30%;
+ left: 35%;
+ right: 35%;
+ z-index: 1000;
+ display: none;
+}
+.timeline-message {
+ font-size: 120%;
+ font-weight: bold;
+ text-align: center;
+}
+.timeline-message img {
+ vertical-align: middle;
+}
+
+.timeline-band {
+ position: absolute;
+ background: #eee;
+ z-index: 10;
+}
+
+.timeline-band-inner {
+ position: relative;
+ width: 100%;
+ height: 100%;
+}
+
+.timeline-band-input {
+ position: absolute;
+ width: 1em;
+ height: 1em;
+ overflow: hidden;
+ z-index: 0;
+}
+.timeline-band-input input{
+ width: 0;
+}
+
+.timeline-band-layer {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+}
+
+.timeline-band-layer-inner {
+ position: relative;
+ width: 100%;
+ height: 100%;
+}
+
Added: openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/timeline-api.js
URL: http://svn.apache.org/viewvc/openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/timeline-api.js?rev=1795424&view=auto
==============================================================================
--- openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/timeline-api.js (added)
+++ openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/timeline-api.js Wed May 17 15:29:56 2017
@@ -0,0 +1,280 @@
+/*==================================================
+ * Timeline API
+ *
+ * This file will load all the Javascript files
+ * necessary to make the standard timeline work.
+ * It also detects the default locale.
+ *
+ * To run from the MIT copy of Timeline:
+ * Include this file in your HTML file as follows:
+ *
+ * <script src="http://api.simile-widgets.org/timeline/2.3.1/timeline-api.js"
+ * type="text/javascript"></script>
+ *
+ *
+ * To host the Timeline files on your own server:
+ * 1) Install the Timeline and Simile-Ajax files onto your webserver using
+ * timeline_libraries.zip or timeline_source.zip
+ *
+ * 2) Set global js variables used to send parameters to this script:
+ * Timeline_ajax_url -- url for simile-ajax-api.js
+ * Timeline_urlPrefix -- url for the *directory* that contains timeline-api.js
+ * Include trailing slash
+ * Timeline_parameters='bundle=true'; // you must set bundle to true if you are using
+ * // timeline_libraries.zip since only the
+ * // bundled libraries are included
+ *
+ * eg your html page would include
+ *
+ * <script>
+ * Timeline_ajax_url="http://YOUR_SERVER/javascripts/timeline/timeline_ajax/simile-ajax-api.js";
+ * Timeline_urlPrefix='http://YOUR_SERVER/javascripts/timeline/timeline_js/';
+ * Timeline_parameters='bundle=true';
+ * </script>
+ * <script src="http://YOUR_SERVER/javascripts/timeline/timeline_js/timeline-api.js"
+ * type="text/javascript">
+ * </script>
+ *
+ * SCRIPT PARAMETERS
+ * This script auto-magically figures out locale and has defaults for other parameters
+ * To set parameters explicity, set js global variable Timeline_parameters or include as
+ * parameters on the url using GET style. Eg the two next lines pass the same parameters:
+ * Timeline_parameters='bundle=true'; // pass parameter via js variable
+ * <script src="http://....timeline-api.js?bundle=true" // pass parameter via url
+ *
+ * Parameters
+ * timeline-use-local-resources --
+ * bundle -- true: use the single js bundle file; false: load individual files (for debugging)
+ * locales --
+ * defaultLocale --
+ * forceLocale -- force locale to be a particular value--used for debugging. Normally locale is determined
+ * by browser's and server's locale settings.
+ *==================================================
+ */
+
+(function() {
+ var useLocalResources = false;
+ if (document.location.search.length > 0) {
+ var params = document.location.search.substr(1).split("&");
+ for (var i = 0; i < params.length; i++) {
+ if (params[i] == "timeline-use-local-resources") {
+ useLocalResources = true;
+ }
+ }
+ };
+
+ var loadMe = function() {
+ if ("Timeline" in window) {
+ return;
+ }
+
+ window.Timeline = new Object();
+ window.Timeline.DateTime = window.SimileAjax.DateTime; // for backward compatibility
+
+ var bundle = false;
+ var javascriptFiles = [
+ "timeline.js",
+ "band.js",
+ "themes.js",
+ "ethers.js",
+ "ether-painters.js",
+ "event-utils.js",
+ "labellers.js",
+ "sources.js",
+ "original-painter.js",
+ "detailed-painter.js",
+ "overview-painter.js",
+ "compact-painter.js",
+ "decorators.js",
+ "units.js"
+ ];
+ var cssFiles = [
+ "timeline.css",
+ "ethers.css",
+ "events.css"
+ ];
+
+ var localizedJavascriptFiles = [
+ "timeline.js",
+ "labellers.js"
+ ];
+ var localizedCssFiles = [
+ ];
+
+ // ISO-639 language codes, ISO-3166 country codes (2 characters)
+ var supportedLocales = [
+ "cs", // Czech
+ "de", // German
+ "en", // English
+ "es", // Spanish
+ "fr", // French
+ "it", // Italian
+ "nl", // Dutch (The Netherlands)
+ "ru", // Russian
+ "se", // Swedish
+ "tr", // Turkish
+ "vi", // Vietnamese
+ "zh" // Chinese
+ ];
+
+ try {
+ var desiredLocales = [ "en" ],
+ defaultServerLocale = "en",
+ forceLocale = null;
+
+ var parseURLParameters = function(parameters) {
+ var params = parameters.split("&");
+ for (var p = 0; p < params.length; p++) {
+ var pair = params[p].split("=");
+ if (pair[0] == "locales") {
+ desiredLocales = desiredLocales.concat(pair[1].split(","));
+ } else if (pair[0] == "defaultLocale") {
+ defaultServerLocale = pair[1];
+ } else if (pair[0] == "forceLocale") {
+ forceLocale = pair[1];
+ desiredLocales = desiredLocales.concat(pair[1].split(","));
+ } else if (pair[0] == "bundle") {
+ bundle = pair[1] != "false";
+ }
+ }
+ };
+
+ (function() {
+ if (typeof Timeline_urlPrefix == "string") {
+ Timeline.urlPrefix = Timeline_urlPrefix;
+ if (typeof Timeline_parameters == "string") {
+ parseURLParameters(Timeline_parameters);
+ }
+ } else {
+ var heads = document.documentElement.getElementsByTagName("head");
+ for (var h = 0; h < heads.length; h++) {
+ var scripts = heads[h].getElementsByTagName("script");
+ for (var s = 0; s < scripts.length; s++) {
+ var url = scripts[s].src;
+ var i = url.indexOf("timeline-api.js");
+ if (i >= 0) {
+ Timeline.urlPrefix = url.substr(0, i);
+ var q = url.indexOf("?");
+ if (q > 0) {
+ parseURLParameters(url.substr(q + 1));
+ }
+ return;
+ }
+ }
+ }
+ throw new Error("Failed to derive URL prefix for Timeline API code files");
+ }
+ })();
+
+ var includeJavascriptFiles = function(urlPrefix, filenames) {
+ SimileAjax.includeJavascriptFiles(document, urlPrefix, filenames);
+ }
+ var includeCssFiles = function(urlPrefix, filenames) {
+ SimileAjax.includeCssFiles(document, urlPrefix, filenames);
+ }
+
+ /*
+ * Include non-localized files
+ */
+ if (bundle) {
+ includeJavascriptFiles(Timeline.urlPrefix, [ "timeline-bundle.js" ]);
+ includeCssFiles(Timeline.urlPrefix, [ "timeline-bundle.css" ]);
+ } else {
+ includeJavascriptFiles(Timeline.urlPrefix + "scripts/", javascriptFiles);
+ includeCssFiles(Timeline.urlPrefix + "styles/", cssFiles);
+ }
+
+ /*
+ * Include localized files
+ */
+ var loadLocale = [];
+ loadLocale[defaultServerLocale] = true;
+
+ var tryExactLocale = function(locale) {
+ for (var l = 0; l < supportedLocales.length; l++) {
+ if (locale == supportedLocales[l]) {
+ loadLocale[locale] = true;
+ return true;
+ }
+ }
+ return false;
+ }
+ var tryLocale = function(locale) {
+ if (tryExactLocale(locale)) {
+ return locale;
+ }
+
+ var dash = locale.indexOf("-");
+ if (dash > 0 && tryExactLocale(locale.substr(0, dash))) {
+ return locale.substr(0, dash);
+ }
+
+ return null;
+ }
+
+ for (var l = 0; l < desiredLocales.length; l++) {
+ tryLocale(desiredLocales[l]);
+ }
+
+ var defaultClientLocale = defaultServerLocale;
+ var defaultClientLocales = ("language" in navigator ? navigator.language : navigator.browserLanguage).split(";");
+ for (var l = 0; l < defaultClientLocales.length; l++) {
+ var locale = tryLocale(defaultClientLocales[l]);
+ if (locale != null) {
+ defaultClientLocale = locale;
+ break;
+ }
+ }
+
+ for (var l = 0; l < supportedLocales.length; l++) {
+ var locale = supportedLocales[l];
+ if (loadLocale[locale]) {
+ includeJavascriptFiles(Timeline.urlPrefix + "scripts/l10n/" + locale + "/", localizedJavascriptFiles);
+ includeCssFiles(Timeline.urlPrefix + "styles/l10n/" + locale + "/", localizedCssFiles);
+ }
+ }
+
+ if (forceLocale == null) {
+ Timeline.serverLocale = defaultServerLocale;
+ Timeline.clientLocale = defaultClientLocale;
+ } else {
+ Timeline.serverLocale = forceLocale;
+ Timeline.clientLocale = forceLocale;
+ }
+ } catch (e) {
+ alert(e);
+ }
+ };
+
+ /*
+ * Load SimileAjax if it's not already loaded
+ */
+ if (typeof SimileAjax == "undefined") {
+ window.SimileAjax_onLoad = loadMe;
+
+ var url = useLocalResources ?
+ "http://127.0.0.1:9999/ajax/api/simile-ajax-api.js?bundle=false" :
+ "http://api.simile-widgets.org/ajax/2.2.1/simile-ajax-api.js";
+ if (typeof Timeline_ajax_url == "string") {
+ url = Timeline_ajax_url;
+ }
+ var createScriptElement = function() {
+ var script = document.createElement("script");
+ script.type = "text/javascript";
+ script.language = "JavaScript";
+ script.src = url;
+ document.getElementsByTagName("head")[0].appendChild(script);
+ }
+ if (document.body == null) {
+ try {
+ document.write("<script src='" + url + "' type='text/javascript'></script>");
+ } catch (e) {
+ createScriptElement();
+ }
+ } else {
+ createScriptElement();
+ }
+ } else {
+ loadMe();
+ }
+})();
Added: openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/timeline-bundle.css
URL: http://svn.apache.org/viewvc/openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/timeline-bundle.css?rev=1795424&view=auto
==============================================================================
--- openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/timeline-bundle.css (added)
+++ openoffice/ooo-site/trunk/content/scripts/api.simile-widgets.org/timeline/2.3.1/timeline-bundle.css Wed May 17 15:29:56 2017
@@ -0,0 +1,229 @@
+
+
+/*------------------- Horizontal / Vertical lines ----------------*/
+
+/* style for ethers */
+.timeline-ether-lines{border-color:#666; border-style:dotted; position:absolute;}
+.timeline-horizontal .timeline-ether-lines{border-width:0 0 0 1px; height:100%; top: 0; width: 1px;}
+.timeline-vertical .timeline-ether-lines{border-width:1px 0 0; height:1px; left: 0; width: 100%;}
+
+
+
+/*---------------- Weekends ---------------------------*/
+.timeline-ether-weekends{
+ position:absolute;
+ background-color:#FFFFE0;
+}
+
+.timeline-vertical .timeline-ether-weekends{left:0;width:100%;}
+.timeline-horizontal .timeline-ether-weekends{top:0; height:100%;}
+
+
+/*-------------------------- HIGHLIGHT DECORATORS -------------------*/
+/* Used for decorators, not used for Timeline Highlight */
+.timeline-highlight-decorator,
+.timeline-highlight-point-decorator{
+ position:absolute;
+ overflow:hidden;
+}
+
+/* Width of horizontal decorators and Height of vertical decorators is
+ set in the decorator function params */
+.timeline-horizontal .timeline-highlight-point-decorator,
+.timeline-horizontal .timeline-highlight-decorator{
+ top:0;
+ height:100%;
+}
+
+.timeline-vertical .timeline-highlight-point-decorator,
+.timeline-vertical .timeline-highlight-decorator{
+ width:100%;
+ left:0;
+}
+
+.timeline-highlight-decorator{background-color:#FFC080;}
+.timeline-highlight-point-decorator{background-color:#ff5;}
+
+
+/*---------------------------- LABELS -------------------------*/
+.timeline-highlight-label {
+ position:absolute; overflow:hidden; font-size:200%;
+ font-weight:bold; color:#999; }
+
+
+/*---------------- VERTICAL LABEL -------------------*/
+.timeline-horizontal .timeline-highlight-label {top:0; height:100%;}
+.timeline-horizontal .timeline-highlight-label td {vertical-align:middle;}
+.timeline-horizontal .timeline-highlight-label-start {text-align:right;}
+.timeline-horizontal .timeline-highlight-label-end {text-align:left;}
+
+
+/*---------------- HORIZONTAL LABEL -------------------*/
+.timeline-vertical .timeline-highlight-label {left:0;width:100%;}
+.timeline-vertical .timeline-highlight-label td {vertical-align:top;}
+.timeline-vertical .timeline-highlight-label-start {text-align:center;}
+.timeline-vertical .timeline-highlight-label-end {text-align:center;}
+
+
+/*-------------------------------- DATE LABELS --------------------------------*/
+.timeline-date-label {
+ position: absolute;
+ border: solid #aaa;
+ color: #aaa;
+ width: 5em;
+ height: 1.5em;}
+.timeline-date-label-em {color: #000;}
+
+/* horizontal */
+.timeline-horizontal .timeline-date-label{padding-left:2px;}
+.timeline-horizontal .timeline-date-label{border-width:0 0 0 1px;}
+.timeline-horizontal .timeline-date-label-em{height:2em}
+
+/* vertical */
+.timeline-vertical .timeline-date-label{padding-top:2px;}
+.timeline-vertical .timeline-date-label{border-width:1px 0 0;}
+.timeline-vertical .timeline-date-label-em{width:7em}
+
+
+/*------------------------------- Ether.highlight -------------------------*/
+.timeline-ether-highlight{position:absolute; background-color:#fff;}
+.timeline-horizontal .timeline-ether-highlight{top:2px;}
+.timeline-vertical .timeline-ether-highlight{left:2px;}
+
+
+/*------------------------------ EVENTS ------------------------------------*/
+.timeline-event-icon, .timeline-event-label,.timeline-event-tape{
+ position:absolute;
+ cursor:pointer;
+}
+
+.timeline-event-tape,
+.timeline-small-event-tape,
+.timeline-small-event-icon{
+ background-color:#58A0DC;
+ overflow:hidden;
+}
+
+.timeline-small-event-tape,
+.timeline-small-event-icon{
+ position:absolute;
+}
+
+.timeline-small-event-icon{width:1px; height:6px;}
+
+
+/*--------------------------------- TIMELINE-------------------------*/
+.timeline-ether-bg{width:100%; height:100%;}
+.timeline-band-0 .timeline-ether-bg{background-color:#eee}
+.timeline-band-1 .timeline-ether-bg{background-color:#ddd}
+.timeline-band-2 .timeline-ether-bg{background-color:#ccc}
+.timeline-band-3 .timeline-ether-bg{background-color:#aaa}
+.timeline-duration-event {
+ position: absolute;
+ overflow: hidden;
+ border: 1px solid blue;
+}
+
+.timeline-instant-event2 {
+ position: absolute;
+ overflow: hidden;
+ border-left: 1px solid blue;
+ padding-left: 2px;
+}
+
+.timeline-instant-event {
+ position: absolute;
+ overflow: hidden;
+}
+
+.timeline-event-bubble-title {
+ font-weight: bold;
+ border-bottom: 1px solid #888;
+ margin-bottom: 0.5em;
+}
+
+.timeline-event-bubble-body {
+}
+
+.timeline-event-bubble-wiki {
+ margin: 0.5em;
+ text-align: right;
+ color: #A0A040;
+}
+.timeline-event-bubble-wiki a {
+ color: #A0A040;
+}
+
+.timeline-event-bubble-time {
+ color: #aaa;
+}
+
+.timeline-event-bubble-image {
+ float: right;
+ padding-left: 5px;
+ padding-bottom: 5px;
+}.timeline-container {
+ position: relative;
+ overflow: hidden;
+}
+
+.timeline-copyright {
+ position: absolute;
+ bottom: 0px;
+ left: 0px;
+ z-index: 1000;
+ cursor: pointer;
+}
+
+.timeline-message-container {
+ position: absolute;
+ top: 30%;
+ left: 35%;
+ right: 35%;
+ z-index: 1000;
+ display: none;
+}
+.timeline-message {
+ font-size: 120%;
+ font-weight: bold;
+ text-align: center;
+}
+.timeline-message img {
+ vertical-align: middle;
+}
+
+.timeline-band {
+ position: absolute;
+ background: #eee;
+ z-index: 10;
+}
+
+.timeline-band-inner {
+ position: relative;
+ width: 100%;
+ height: 100%;
+}
+
+.timeline-band-input {
+ position: absolute;
+ width: 1em;
+ height: 1em;
+ overflow: hidden;
+ z-index: 0;
+}
+.timeline-band-input input{
+ width: 0;
+}
+
+.timeline-band-layer {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+}
+
+.timeline-band-layer-inner {
+ position: relative;
+ width: 100%;
+ height: 100%;
+}
+