mirror of
https://github.com/Carve/qbittorrent-webui-cjratliff.com.git
synced 2025-02-28 23:50:57 +01:00
242 lines
8.5 KiB
HTML
242 lines
8.5 KiB
HTML
<style>
|
|
#searchPluginsContainer {
|
|
height: calc(100% - 20px);
|
|
margin: 10px;
|
|
overflow: auto;
|
|
}
|
|
|
|
#searchPluginsContainer button {
|
|
padding: 2px;
|
|
}
|
|
|
|
#searchPluginsContainer span {
|
|
display: block;
|
|
margin-top: 10px;
|
|
}
|
|
|
|
#searchPluginsTable {
|
|
width: 100%;
|
|
height: calc(100% - 150px);
|
|
-moz-height: calc(100% - 150px);
|
|
-webkit-height: calc(100% - 150px);
|
|
}
|
|
|
|
#searchPluginsTable .dynamicTable {
|
|
width: 100%;
|
|
}
|
|
|
|
#searchPluginsTableDiv {
|
|
height: calc(100% - 26px);
|
|
-moz-height: calc(100% - 26px);
|
|
-webkit-height: calc(100% - 26px);
|
|
}
|
|
|
|
#dynamicTableFixedHeaderDiv {
|
|
height: 26px;
|
|
}
|
|
|
|
#searchPlugins_content {
|
|
height: 100%;
|
|
}
|
|
|
|
</style>
|
|
|
|
<div id="searchPluginsContainer">
|
|
<h2>Installed search plugins:</h2>
|
|
|
|
<div id="searchPluginsTable">
|
|
<div id="searchPluginsTableFixedHeaderDiv" class="dynamicTableFixedHeaderDiv">
|
|
<table class="dynamicTable unselectable" style="position:relative;">
|
|
<thead>
|
|
<tr class="dynamicTableHeader" id="searchPluginsTableFixedHeaderRow"></tr>
|
|
</thead>
|
|
</table>
|
|
</div>
|
|
<div id="searchPluginsTableDiv" class="dynamicTableDiv">
|
|
<table class="dynamicTable unselectable">
|
|
<thead>
|
|
<tr class="dynamicTableHeader"></tr>
|
|
</thead>
|
|
<tbody></tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<span>Warning: Be sure to comply with your country's copyright laws when downloading torrents from any of these search engines.</span>
|
|
<span style="font-style: italic;">You can get new search engine plugins here: <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="qBittorrent.SearchPlugins.installPlugin();">Install new plugin</button>
|
|
<button style="width: 33%; line-height: 1.4em;" onclick="qBittorrent.SearchPlugins.checkForUpdates();">Check for updates</button>
|
|
<button style="width: 32%; line-height: 1.4em;" onclick="qBittorrent.SearchPlugins.closeSearchWindow('searchPlugins');">Close</button>
|
|
</div>
|
|
</div>
|
|
|
|
<ul id="searchPluginsTableMenu" class="contextMenu">
|
|
<li><a href="#Enabled"><img src="images/checked-completed.svg" alt="Enabled" /> Enabled</a></li>
|
|
<li class="separator"><a href="#Uninstall"><img src="images/list-remove.svg" alt="Uninstall" /> Uninstall</a></li>
|
|
</ul>
|
|
|
|
<script>
|
|
'use strict';
|
|
|
|
if (window.qBittorrent === undefined) {
|
|
window.qBittorrent = {};
|
|
}
|
|
|
|
window.qBittorrent.SearchPlugins = (function() {
|
|
const exports = function() {
|
|
return {
|
|
closeSearchWindow: closeSearchWindow,
|
|
installPlugin: installPlugin,
|
|
checkForUpdates: checkForUpdates,
|
|
updateTable: updateTable
|
|
};
|
|
};
|
|
|
|
let searchPluginsTable;
|
|
let searchPluginsTableContextMenu;
|
|
let prevOffsetLeft;
|
|
let prevOffsetTop;
|
|
|
|
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()
|
|
});
|
|
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: "Install plugin",
|
|
loadMethod: 'xhr',
|
|
contentURL: 'views/installsearchplugin.html',
|
|
scrollbars: false,
|
|
resizable: false,
|
|
maximizable: false,
|
|
paddingVertical: 0,
|
|
paddingHorizontal: 0,
|
|
width: 500,
|
|
height: 120
|
|
});
|
|
};
|
|
|
|
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]);
|
|
}
|
|
|
|
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();
|
|
|
|
// add event listeners
|
|
setupSearchPluginTableEvents(true);
|
|
};
|
|
|
|
initSearchPlugins();
|
|
|
|
return exports();
|
|
})();
|
|
|
|
Object.freeze(window.qBittorrent.SearchPlugins);
|
|
</script>
|