Added: openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/scripts/sources.js URL: http://svn.apache.org/viewvc/openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/scripts/sources.js?rev=1791126&view=auto ============================================================================== --- openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/scripts/sources.js (added) +++ openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/scripts/sources.js Wed Apr 12 14:36:37 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/simile-widget/timeline/2.3.1/scripts/themes.js URL: http://svn.apache.org/viewvc/openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/scripts/themes.js?rev=1791126&view=auto ============================================================================== --- openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/scripts/themes.js (added) +++ openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/scripts/themes.js Wed Apr 12 14:36:37 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/simile-widget/timeline/2.3.1/scripts/timeline.js URL: http://svn.apache.org/viewvc/openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/scripts/timeline.js?rev=1791126&view=auto ============================================================================== --- openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/scripts/timeline.js (added) +++ openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/scripts/timeline.js Wed Apr 12 14:36:37 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/simile-widget/timeline/2.3.1/scripts/units.js URL: http://svn.apache.org/viewvc/openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/scripts/units.js?rev=1791126&view=auto ============================================================================== --- openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/scripts/units.js (added) +++ openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/scripts/units.js Wed Apr 12 14:36:37 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/simile-widget/timeline/2.3.1/styles/ethers.css URL: http://svn.apache.org/viewvc/openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/styles/ethers.css?rev=1791126&view=auto ============================================================================== --- openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/styles/ethers.css (added) +++ openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/styles/ethers.css Wed Apr 12 14:36:37 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/simile-widget/timeline/2.3.1/styles/events.css URL: http://svn.apache.org/viewvc/openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/styles/events.css?rev=1791126&view=auto ============================================================================== --- openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/styles/events.css (added) +++ openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/styles/events.css Wed Apr 12 14:36:37 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/simile-widget/timeline/2.3.1/styles/timeline.css URL: http://svn.apache.org/viewvc/openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/styles/timeline.css?rev=1791126&view=auto ============================================================================== --- openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/styles/timeline.css (added) +++ openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/styles/timeline.css Wed Apr 12 14:36:37 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/simile-widget/timeline/2.3.1/timeline-api.js URL: http://svn.apache.org/viewvc/openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/timeline-api.js?rev=1791126&view=auto ============================================================================== --- openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/timeline-api.js (added) +++ openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/timeline-api.js Wed Apr 12 14:36:37 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/simile-widget/timeline/2.3.1/timeline-bundle.css URL: http://svn.apache.org/viewvc/openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/timeline-bundle.css?rev=1791126&view=auto ============================================================================== --- openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/timeline-bundle.css (added) +++ openoffice/ooo-site/trunk/content/scripts/simile-widget/timeline/2.3.1/timeline-bundle.css Wed Apr 12 14:36:37 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%; +} +