mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2026-01-06 15:42:32 -06:00
Move JavaScript code into explicit namespaces
This cleans up the global namespace by explicitly exporting shared values. All html and JavaScript files have been converted to use explicit exports except for client.js and mocha-init.js
This commit is contained in:
@@ -65,9 +65,9 @@
|
||||
<span>QBT_TR(Warning: Be sure to comply with your country's copyright laws when downloading torrents from any of these search engines.)QBT_TR[CONTEXT=PluginSelectDlg]</span>
|
||||
<span style="font-style: italic;">QBT_TR(You can get new search engine plugins here:)QBT_TR[CONTEXT=PluginSelectDlg] <a href="http://plugins.qbittorrent.org" target="_blank">http://plugins.qbittorrent.org</a></span>
|
||||
<div style="width: 100%; margin-top: 10px;">
|
||||
<button style="width: 33%; line-height: 1.4em;" onclick="installPlugin();">QBT_TR(Install new plugin)QBT_TR[CONTEXT=PluginSelectDlg]</button>
|
||||
<button style="width: 33%; line-height: 1.4em;" onclick="checkForUpdates();">QBT_TR(Check for updates)QBT_TR[CONTEXT=PluginSelectDlg]</button>
|
||||
<button style="width: 32%; line-height: 1.4em;" onclick="closeSearchWindow('searchPlugins');">QBT_TR(Close)QBT_TR[CONTEXT=PluginSelectDlg]</button>
|
||||
<button style="width: 33%; line-height: 1.4em;" onclick="qBittorrent.SearchPlugins.installPlugin();">QBT_TR(Install new plugin)QBT_TR[CONTEXT=PluginSelectDlg]</button>
|
||||
<button style="width: 33%; line-height: 1.4em;" onclick="qBittorrent.SearchPlugins.checkForUpdates();">QBT_TR(Check for updates)QBT_TR[CONTEXT=PluginSelectDlg]</button>
|
||||
<button style="width: 32%; line-height: 1.4em;" onclick="qBittorrent.SearchPlugins.closeSearchWindow('searchPlugins');">QBT_TR(Close)QBT_TR[CONTEXT=PluginSelectDlg]</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -79,142 +79,161 @@
|
||||
<script>
|
||||
'use strict';
|
||||
|
||||
this.searchPluginsTableContextMenu = undefined;
|
||||
this.prevOffsetLeft = undefined;
|
||||
this.prevOffsetTop = undefined;
|
||||
if (window.qBittorrent === undefined) {
|
||||
window.qBittorrent = {};
|
||||
}
|
||||
|
||||
this.initSearchPlugins = function() {
|
||||
searchPluginsTableContextMenu = new SearchPluginsTableContextMenu({
|
||||
targets: '.searchPluginsTableRow',
|
||||
menu: 'searchPluginsTableMenu',
|
||||
actions: {
|
||||
Enabled: enablePlugin,
|
||||
Uninstall: uninstallPlugin
|
||||
},
|
||||
offsets: calculateContextMenuOffsets()
|
||||
});
|
||||
searchPluginsTable.setup('searchPluginsTableDiv', 'searchPluginsTableFixedHeaderDiv', searchPluginsTableContextMenu);
|
||||
updateSearchPluginsTable();
|
||||
};
|
||||
|
||||
this.closeSearchWindow = function(id) {
|
||||
window.parent.MochaUI.closeWindow(window.parent.$(id));
|
||||
};
|
||||
|
||||
this.installPlugin = function(path) {
|
||||
new MochaUI.Window({
|
||||
id: 'installSearchPlugin',
|
||||
title: "QBT_TR(Install plugin)QBT_TR[CONTEXT=PluginSourceDlg]",
|
||||
loadMethod: 'xhr',
|
||||
contentURL: 'views/installsearchplugin.html',
|
||||
scrollbars: false,
|
||||
resizable: false,
|
||||
maximizable: false,
|
||||
paddingVertical: 0,
|
||||
paddingHorizontal: 0,
|
||||
width: 500,
|
||||
height: 120
|
||||
});
|
||||
};
|
||||
|
||||
this.uninstallPlugin = function() {
|
||||
const plugins = searchPluginsTable.selectedRowsIds().join('|');
|
||||
const url = new URI('api/v2/search/uninstallPlugin');
|
||||
new Request({
|
||||
url: url,
|
||||
noCache: true,
|
||||
method: 'post',
|
||||
data: {
|
||||
names: plugins,
|
||||
}
|
||||
}).send();
|
||||
};
|
||||
|
||||
this.enablePlugin = function() {
|
||||
const plugins = searchPluginsTable.selectedRowsIds();
|
||||
let enable = true;
|
||||
if (plugins && plugins.length)
|
||||
enable = !getPlugin(plugins[0]).enabled;
|
||||
|
||||
const url = new URI('api/v2/search/enablePlugin');
|
||||
new Request({
|
||||
url: url,
|
||||
noCache: true,
|
||||
method: 'post',
|
||||
data: {
|
||||
names: plugins.join('|'),
|
||||
enable: enable
|
||||
}
|
||||
}).send();
|
||||
};
|
||||
|
||||
this.checkForUpdates = function() {
|
||||
const url = new URI('api/v2/search/updatePlugins');
|
||||
new Request({
|
||||
url: url,
|
||||
noCache: true,
|
||||
method: 'post'
|
||||
}).send();
|
||||
};
|
||||
|
||||
this.calculateContextMenuOffsets = function() {
|
||||
prevOffsetLeft = document.getElementById("searchPlugins").getBoundingClientRect().left;
|
||||
prevOffsetTop = document.getElementById("searchPlugins").getBoundingClientRect().top;
|
||||
|
||||
return {
|
||||
x: -(prevOffsetLeft + 20),
|
||||
y: -(prevOffsetTop + 2)
|
||||
window.qBittorrent.SearchPlugins = (function() {
|
||||
const exports = function() {
|
||||
return {
|
||||
closeSearchWindow: closeSearchWindow,
|
||||
installPlugin: installPlugin,
|
||||
checkForUpdates: checkForUpdates,
|
||||
updateTable: updateTable
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
this.updateSearchPluginsTableContextMenuOffset = function() {
|
||||
// only re-calculate if window has moved
|
||||
if ((prevOffsetLeft !== document.getElementById("searchPlugins").getBoundingClientRect().left) || (prevOffsetTop !== document.getElementById("searchPlugins").getBoundingClientRect().top))
|
||||
searchPluginsTableContextMenu.options.offsets = calculateContextMenuOffsets();
|
||||
};
|
||||
let searchPluginsTable;
|
||||
let searchPluginsTableContextMenu;
|
||||
let prevOffsetLeft;
|
||||
let prevOffsetTop;
|
||||
|
||||
this.setupSearchPluginTableEvents = function(enable) {
|
||||
if (enable)
|
||||
$$(".searchPluginsTableRow").each(function(target) {
|
||||
target.addEventListener('dblclick', enablePlugin, false);
|
||||
target.addEventListener('contextmenu', updateSearchPluginsTableContextMenuOffset, true);
|
||||
const initSearchPlugins = function() {
|
||||
searchPluginsTable = new window.qBittorrent.DynamicTable.SearchPluginsTable();
|
||||
searchPluginsTableContextMenu = new window.qBittorrent.ContextMenu.SearchPluginsTableContextMenu({
|
||||
targets: '.searchPluginsTableRow',
|
||||
menu: 'searchPluginsTableMenu',
|
||||
actions: {
|
||||
Enabled: enablePlugin,
|
||||
Uninstall: uninstallPlugin
|
||||
},
|
||||
offsets: calculateContextMenuOffsets()
|
||||
});
|
||||
else
|
||||
$$(".searchPluginsTableRow").each(function(target) {
|
||||
target.removeEventListener('dblclick', enablePlugin, false);
|
||||
target.removeEventListener('contextmenu', updateSearchPluginsTableContextMenuOffset, true);
|
||||
searchPluginsTable.setup('searchPluginsTableDiv', 'searchPluginsTableFixedHeaderDiv', searchPluginsTableContextMenu);
|
||||
updateTable();
|
||||
};
|
||||
|
||||
const closeSearchWindow = function(id) {
|
||||
window.parent.MochaUI.closeWindow(window.parent.$(id));
|
||||
};
|
||||
|
||||
const installPlugin = function(path) {
|
||||
new MochaUI.Window({
|
||||
id: 'installSearchPlugin',
|
||||
title: "QBT_TR(Install plugin)QBT_TR[CONTEXT=PluginSourceDlg]",
|
||||
loadMethod: 'xhr',
|
||||
contentURL: 'views/installsearchplugin.html',
|
||||
scrollbars: false,
|
||||
resizable: false,
|
||||
maximizable: false,
|
||||
paddingVertical: 0,
|
||||
paddingHorizontal: 0,
|
||||
width: 500,
|
||||
height: 120
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
this.updateSearchPluginsTable = function() {
|
||||
// clear event listeners
|
||||
setupSearchPluginTableEvents(false);
|
||||
|
||||
const oldPlugins = Object.keys(searchPluginsTable.rows);
|
||||
// remove old rows from the table
|
||||
for (let i = 0; i < oldPlugins.length; ++i) {
|
||||
let found = false;
|
||||
for (let j = 0; j < searchPlugins.length; ++j) {
|
||||
if (searchPlugins[j].name === oldPlugins[i]) {
|
||||
found = true;
|
||||
break;
|
||||
const uninstallPlugin = function() {
|
||||
const plugins = searchPluginsTable.selectedRowsIds().join('|');
|
||||
const url = new URI('api/v2/search/uninstallPlugin');
|
||||
new Request({
|
||||
url: url,
|
||||
noCache: true,
|
||||
method: 'post',
|
||||
data: {
|
||||
names: plugins,
|
||||
}
|
||||
}).send();
|
||||
};
|
||||
|
||||
const enablePlugin = function() {
|
||||
const plugins = searchPluginsTable.selectedRowsIds();
|
||||
let enable = true;
|
||||
if (plugins && plugins.length)
|
||||
enable = !window.qBittorrent.Search.getPlugin(plugins[0]).enabled;
|
||||
|
||||
const url = new URI('api/v2/search/enablePlugin');
|
||||
new Request({
|
||||
url: url,
|
||||
noCache: true,
|
||||
method: 'post',
|
||||
data: {
|
||||
names: plugins.join('|'),
|
||||
enable: enable
|
||||
}
|
||||
}).send();
|
||||
};
|
||||
|
||||
const checkForUpdates = function() {
|
||||
const url = new URI('api/v2/search/updatePlugins');
|
||||
new Request({
|
||||
url: url,
|
||||
noCache: true,
|
||||
method: 'post'
|
||||
}).send();
|
||||
};
|
||||
|
||||
const calculateContextMenuOffsets = function() {
|
||||
prevOffsetLeft = document.getElementById("searchPlugins").getBoundingClientRect().left;
|
||||
prevOffsetTop = document.getElementById("searchPlugins").getBoundingClientRect().top;
|
||||
|
||||
return {
|
||||
x: -(prevOffsetLeft + 20),
|
||||
y: -(prevOffsetTop + 2)
|
||||
};
|
||||
};
|
||||
|
||||
const updateSearchPluginsTableContextMenuOffset = function() {
|
||||
// only re-calculate if window has moved
|
||||
if ((prevOffsetLeft !== document.getElementById("searchPlugins").getBoundingClientRect().left) || (prevOffsetTop !== document.getElementById("searchPlugins").getBoundingClientRect().top))
|
||||
searchPluginsTableContextMenu.options.offsets = calculateContextMenuOffsets();
|
||||
};
|
||||
|
||||
const setupSearchPluginTableEvents = function(enable) {
|
||||
if (enable)
|
||||
$$(".searchPluginsTableRow").each(function(target) {
|
||||
target.addEventListener('dblclick', enablePlugin, false);
|
||||
target.addEventListener('contextmenu', updateSearchPluginsTableContextMenuOffset, true);
|
||||
});
|
||||
else
|
||||
$$(".searchPluginsTableRow").each(function(target) {
|
||||
target.removeEventListener('dblclick', enablePlugin, false);
|
||||
target.removeEventListener('contextmenu', updateSearchPluginsTableContextMenuOffset, true);
|
||||
});
|
||||
};
|
||||
|
||||
const updateTable = function() {
|
||||
// clear event listeners
|
||||
setupSearchPluginTableEvents(false);
|
||||
|
||||
const oldPlugins = Object.keys(searchPluginsTable.rows);
|
||||
// remove old rows from the table
|
||||
for (let i = 0; i < oldPlugins.length; ++i) {
|
||||
let found = false;
|
||||
for (let j = 0; j < window.qBittorrent.Search.searchPlugins.length; ++j) {
|
||||
if (window.qBittorrent.Search.searchPlugins[j].name === oldPlugins[i]) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found)
|
||||
searchPluginsTable.removeRow(oldPlugins[i]);
|
||||
}
|
||||
if (!found)
|
||||
searchPluginsTable.removeRow(oldPlugins[i]);
|
||||
}
|
||||
|
||||
for (let i = 0; i < searchPlugins.length; ++i) {
|
||||
searchPlugins[i].rowId = searchPlugins[i].name;
|
||||
searchPluginsTable.updateRowData(searchPlugins[i]);
|
||||
}
|
||||
for (let i = 0; i < window.qBittorrent.Search.searchPlugins.length; ++i) {
|
||||
window.qBittorrent.Search.searchPlugins[i].rowId = window.qBittorrent.Search.searchPlugins[i].name;
|
||||
searchPluginsTable.updateRowData(window.qBittorrent.Search.searchPlugins[i]);
|
||||
}
|
||||
|
||||
searchPluginsTable.updateTable();
|
||||
searchPluginsTable.altRow();
|
||||
searchPluginsTable.updateTable();
|
||||
searchPluginsTable.altRow();
|
||||
|
||||
// add event listeners
|
||||
setupSearchPluginTableEvents(true);
|
||||
};
|
||||
// add event listeners
|
||||
setupSearchPluginTableEvents(true);
|
||||
};
|
||||
|
||||
initSearchPlugins();
|
||||
initSearchPlugins();
|
||||
|
||||
return exports();
|
||||
})();
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user