📄 sources.js
字号:
/*==================================================
* Default Event Source
*==================================================
*/
Timeline.DefaultEventSource = function(eventIndex) {
this._events = (eventIndex instanceof Object) ? eventIndex : new SimileAjax.EventIndex();
this._listeners = [];
this.toString== function(){ return "Timeline.DefaultEventSource";};
};
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.remove = function(evt) {
this._events._events.remove(evt);
//this._fire("onAddOne", [evt]);
};
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);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -