📄 jsbridge.js
字号:
for(var i = 0; i < this.hideForFullscreen.length; i++) {
var elt = this.document.getElementById(this.hideForFullscreen[i]);
elt.collapsed = true;
}
for(var i = 0; i < this.showForFullscreen.length; i++) {
var elt = this.document.getElementById(this.showForFullscreen[i]);
elt.collapsed = false;
}
var self = this;
this.mousedown = false;
this.mousemoveListener = function(event) {
if(!self.mousedown) self.onMouseMoveFullscreen();
}
this.mousedownListener = function(event) {
self.mousedown = true;
self.hideVideoControlsTimer.cancel();
}
this.mouseupListener = function(event) {
self.mousedown = false;
self.startHideVideoControlsTimer();
}
this.document.addEventListener('mousemove', this.mousemoveListener, true);
this.document.addEventListener('mousedown', this.mousedownListener, true);
this.document.addEventListener('mouseup', this.mouseupListener, true);
this.startHideVideoControlsTimer();
},
leaveTotallyFullscreen: function() {
this.document.getElementById('titlebar').collapsed = false;
this.document.getElementById('bottom').collapsed = false;
this.document.getElementById('videoInfoDisplay').collapsed = false;
this.hideVideoControlsTimer.cancel();
pybridge.showCursor(true);
},
onMouseMoveFullscreen: function() {
this.leaveTotallyFullscreen();
this.startHideVideoControlsTimer();
},
startHideVideoControlsTimer: function() {
var bottom = this.document.getElementById('bottom')
var videoInfoDisplay = this.document.getElementById('videoInfoDisplay')
var titlebar = this.document.getElementById('titlebar');
var callback = {notify: function() {
titlebar.collapsed = videoInfoDisplay.collapsed = bottom.collapsed = true;
pybridge.showCursor(false);
}};
this.hideVideoControlsTimer.initWithCallback(callback, 3000,
Components.interfaces.nsITimer.TYPE_ONE_SHOT);
},
leaveFullscreen: function() {
if(!this.window.fullScreen) return;
this.window.fullScreen = false;
for(var i = 0; i < this.hideForFullscreen.length; i++) {
var elt = this.document.getElementById(this.hideForFullscreen[i]);
elt.collapsed = false;
}
for(var i = 0; i < this.showForFullscreen.length; i++) {
var elt = this.document.getElementById(this.showForFullscreen[i]);
elt.collapsed = true;
}
this.leaveTotallyFullscreen();
this.document.removeEventListener('mousemove', this.mousemoveListener, true);
this.document.removeEventListener('mouseup', this.mouseupListener, true);
this.document.removeEventListener('mousedown', this.mousedownListener, true);
},
xulNavigateDisplay: function(area, uri) {
var browser = this.document.getElementById(area);
browser.contentDocument.location = uri;
},
getDocument: function(area) {
var browser = this.document.getElementById(area);
return browser.contentDocument;
},
createNode: function(document, xml) {
var r = document.createRange();
r.selectNode(document.documentElement);
return r.createContextualFragment(xml);
},
xulAddElementAtEnd: function(area, xml, id) {
var document = this.getDocument(area);
var elt = document.getElementById(id);
elt.insertBefore(this.createNode(document, xml), null);
},
xulAddElementBefore: function(area, xml, id) {
var document = this.getDocument(area);
var elt = document.getElementById(id);
elt.parentNode.insertBefore(this.createNode(document, xml), elt);
},
xulRemoveElement: function(area, id) {
var document = this.getDocument(area);
var elt = document.getElementById(id);
elt.parentNode.removeChild(elt);
},
xulChangeElement: function(area, id, xml) {
var document = this.getDocument(area);
var elt = document.getElementById(id);
var next = elt.nextSibling;
elt.parentNode.removeChild(elt);
next.parentNode.insertBefore(this.createNode(document, xml), next);
},
xulChangeAttribute: function(area, id, name, value) {
var document = this.getDocument(area);
var elt = document.getElementById(id);
elt.setAttribute(name, value);
},
xulRemoveAttribute: function(area, id, name) {
var document = this.getDocument(area);
var elt = document.getElementById(id);
elt.removeAttribute(name);
},
xulHideElement: function(area, id) {
var document = this.getDocument(area);
var elt = document.getElementById(id);
elt.style.display = 'none';
},
xulShowElement: function(area, id) {
var document = this.getDocument(area);
var elt = document.getElementById(id);
elt.style.display = '';
},
setActionGroupEnabled: function(group, enabled) {
var elements = actionGroupCommands[group];
if(group == 'VideoPlayable') {
this.setActive("bottom-buttons-play", enabled);
}
for(var i = 0; i < elements.length; i++) {
var elt = this.document.getElementById(elements[i]);
if(!enabled) {
elt.setAttribute('disabled', true);
} else {
elt.removeAttribute('disabled');
}
}
},
updateLabel: function(id, label) {
var menuitem = this.document.getElementById(id);
menuitem.setAttribute('label', label);
},
updateVideoFilename: function(newFilename) {
if(newFilename) this.videoFilename = newFilename;
else this.videoFilename = null;
},
saveVideo: function() {
if(this.videoFilename == null) return;
var fp = Components.classes["@mozilla.org/filepicker;1"]
.createInstance(Components.interfaces.nsIFilePicker);
var saveMenuItem = this.document.getElementById('menuitem-video-save');
fp.init(this.window, saveMenuItem.getAttribute('label'),
Components.interfaces.nsIFilePicker.modeSave);
fp.defaultString = this.videoFilename;
var res = fp.show();
if (res == Components.interfaces.nsIFilePicker.returnOK){
pybridge.saveVideoFile(fp.file.path);
}
},
performStartupTasks: function() {
var wwatch = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
.getService(Components.interfaces.nsIWindowWatcher);
var startupTasksURL = "chrome://dtv/content/startup.xul";
this.startup = wwatch.openWindow(null, startupTasksURL,
"DemocracyPlayerStartup", "chrome,dialog=yes,all", null);
},
updateSearchProgress: function (message) {
this.startup.updateSearchProgress (message);
},
searchFinished: function (message) {
writelog(message);
this.startup.searchFinished (message);
},
searchCancelled: function (message) {
this.startup.searchCancelled (message);
},
setSliderText: function(elapsed) {
var hours = Math.floor(elapsed/3600);
var mins = Math.floor((elapsed - hours*3600)/60);
var secs = elapsed - hours*3600 - mins*60;
var text = twoDigits(hours)+":"+twoDigits(mins)+":"+twoDigits(secs);
var sliderText = this.document.getElementById("progress-text");
sliderText.childNodes[0].nodeValue = text;
},
moveSlider: function(fractionDone) {
var left = 61;
var right = 204;
var newSliderPos = Math.floor(left + fractionDone*(right-left));
var progressSlider = this.document.getElementById("progress-slider");
progressSlider.left = newSliderPos;
},
setSearchEngineInfo: function(names, titles) {
this.searchEngineNames = names;
this.searchEngineTitles = titles;
},
setSearchEngine: function(engine) {
var searchIcon = this.document.getElementById("search-icon");
searchIcon.setAttribute("src",'images/search_icon_' + engine + '.png');
},
};
var Module = {
_classes: {
jsBridge: {
classID: JSBRIDGE_CLASSID,
contractID: JSBRIDGE_CONTRACTID,
className: "DTV Javascript helpers",
factory: {
createInstance: function(delegate, iid) {
if (delegate)
throw Components.results.NS_ERROR_NO_AGGREGATION;
return new jsBridge().QueryInterface(iid);
}
}
}
},
registerSelf: function(compMgr, fileSpec, location, type) {
var reg = compMgr.QueryInterface(
Components.interfaces.nsIComponentRegistrar);
for (var key in this._classes) {
var c = this._classes[key];
reg.registerFactoryLocation(c.classID, c.className, c.contractID,
fileSpec, location, type);
}
},
getClassObject: function(compMgr, cid, iid) {
if (!iid.equals(Components.interfaces.nsIFactory))
throw Components.results.NS_ERROR_NO_INTERFACE;
for (var key in this._classes) {
var c = this._classes[key];
if (cid.equals(c.classID))
return c.factory;
}
throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
},
canUnload: function (aComponentManager) {
return true;
}
};
function NSGetModule(compMgr, fileSpec) {
return Module;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -