mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-08-20 13:23:34 -07:00
Merge pull request #11103 from Piccirello/webui-explicit-export
Move JavaScript code into explicit namespaces
This commit is contained in:
commit
209831d3b0
32 changed files with 6204 additions and 5838 deletions
|
@ -61,7 +61,7 @@
|
||||||
<p>QBT_TR(List of peers to add (one IP per line):)QBT_TR[CONTEXT=PeersAdditionDialog]</p>
|
<p>QBT_TR(List of peers to add (one IP per line):)QBT_TR[CONTEXT=PeersAdditionDialog]</p>
|
||||||
<textarea id="peers" rows="10" style="width: 100%;" placeholder="QBT_TR(Format: IPv4:port / [IPv6]:port)QBT_TR[CONTEXT=PeersAdditionDialog]"></textarea>
|
<textarea id="peers" rows="10" style="width: 100%;" placeholder="QBT_TR(Format: IPv4:port / [IPv6]:port)QBT_TR[CONTEXT=PeersAdditionDialog]"></textarea>
|
||||||
<div style="margin-top: 10px; text-align: center;">
|
<div style="margin-top: 10px; text-align: center;">
|
||||||
<button onclick="window.parent.closeWindows();">QBT_TR(Cancel)QBT_TR[CONTEXT=PeersAdditionDialog]</button>
|
<button onclick="parent.closeWindows();">QBT_TR(Cancel)QBT_TR[CONTEXT=PeersAdditionDialog]</button>
|
||||||
<button id="addPeersOk">QBT_TR(Ok)QBT_TR[CONTEXT=PeersAdditionDialog]</button>
|
<button id="addPeersOk">QBT_TR(Ok)QBT_TR[CONTEXT=PeersAdditionDialog]</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
<label for="autoTMM">QBT_TR(Torrent Management Mode:)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
|
<label for="autoTMM">QBT_TR(Torrent Management Mode:)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<select id="autoTMM" name="autoTMM" onchange="changeTMM(this)">
|
<select id="autoTMM" name="autoTMM" onchange="qBittorrent.Download.changeTMM(this)">
|
||||||
<option selected value="false">Manual</option>
|
<option selected value="false">Manual</option>
|
||||||
<option value="true">Automatic</option>
|
<option value="true">Automatic</option>
|
||||||
</select>
|
</select>
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="select-watched-folder-editable">
|
<div class="select-watched-folder-editable">
|
||||||
<select id="categorySelect" onchange="changeCategorySelect(this)">
|
<select id="categorySelect" onchange="qBittorrent.Download.changeCategorySelect(this)">
|
||||||
<option selected value="\other"></option>
|
<option selected value="\other"></option>
|
||||||
</select>
|
</select>
|
||||||
<input name="category" type="text" value="" />
|
<input name="category" type="text" value="" />
|
||||||
|
|
|
@ -30,18 +30,18 @@
|
||||||
}).activate();
|
}).activate();
|
||||||
|
|
||||||
window.addEvent('domready', function() {
|
window.addEvent('domready', function() {
|
||||||
const uriAction = safeTrim(new URI().getData('action'));
|
const uriAction = window.qBittorrent.Misc.safeTrim(new URI().getData('action'));
|
||||||
const uriHashes = safeTrim(new URI().getData('hashes'));
|
const uriHashes = window.qBittorrent.Misc.safeTrim(new URI().getData('hashes'));
|
||||||
const uriCategoryName = safeTrim(new URI().getData('categoryName'));
|
const uriCategoryName = window.qBittorrent.Misc.safeTrim(new URI().getData('categoryName'));
|
||||||
const uriSavePath = safeTrim(new URI().getData('savePath'));
|
const uriSavePath = window.qBittorrent.Misc.safeTrim(new URI().getData('savePath'));
|
||||||
|
|
||||||
if (uriAction === "edit") {
|
if (uriAction === "edit") {
|
||||||
if (!uriCategoryName)
|
if (!uriCategoryName)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
$('categoryName').set('disabled', true);
|
$('categoryName').set('disabled', true);
|
||||||
$('categoryName').set('value', escapeHtml(uriCategoryName));
|
$('categoryName').set('value', window.qBittorrent.Misc.escapeHtml(uriCategoryName));
|
||||||
$('savePath').set('value', escapeHtml(uriSavePath));
|
$('savePath').set('value', window.qBittorrent.Misc.escapeHtml(uriSavePath));
|
||||||
$('savePath').focus();
|
$('savePath').focus();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -90,7 +90,7 @@
|
||||||
}).send();
|
}).send();
|
||||||
},
|
},
|
||||||
onError: function() {
|
onError: function() {
|
||||||
alert("QBT_TR(Unable to create category)QBT_TR[CONTEXT=HttpServer] " + escapeHtml(categoryName));
|
alert("QBT_TR(Unable to create category)QBT_TR[CONTEXT=HttpServer] " + window.qBittorrent.Misc.escapeHtml(categoryName));
|
||||||
}
|
}
|
||||||
}).send();
|
}).send();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -30,8 +30,8 @@
|
||||||
}).activate();
|
}).activate();
|
||||||
|
|
||||||
window.addEvent('domready', function() {
|
window.addEvent('domready', function() {
|
||||||
const uriAction = safeTrim(new URI().getData('action'));
|
const uriAction = window.qBittorrent.Misc.safeTrim(new URI().getData('action'));
|
||||||
const uriHashes = safeTrim(new URI().getData('hashes'));
|
const uriHashes = window.qBittorrent.Misc.safeTrim(new URI().getData('hashes'));
|
||||||
|
|
||||||
if (uriAction === 'create')
|
if (uriAction === 'create')
|
||||||
$('legendText').innerText = 'QBT_TR(Tag:)QBT_TR[CONTEXT=TagFilterWidget]';
|
$('legendText').innerText = 'QBT_TR(Tag:)QBT_TR[CONTEXT=TagFilterWidget]';
|
||||||
|
|
|
@ -24,21 +24,10 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
this.torrentsTable = new TorrentsTable();
|
this.torrentsTable = new window.qBittorrent.DynamicTable.TorrentsTable();
|
||||||
const torrentTrackersTable = new TorrentTrackersTable();
|
|
||||||
const torrentPeersTable = new TorrentPeersTable();
|
|
||||||
const torrentFilesTable = new TorrentFilesTable();
|
|
||||||
const searchResultsTable = new SearchResultsTable();
|
|
||||||
const searchPluginsTable = new SearchPluginsTable();
|
|
||||||
|
|
||||||
let updatePropertiesPanel = function() {};
|
let updatePropertiesPanel = function() {};
|
||||||
|
|
||||||
let updateTorrentData = function() {};
|
|
||||||
let updateTrackersData = function() {};
|
|
||||||
let updateTorrentPeersData = function() {};
|
|
||||||
let updateWebSeedsData = function() {};
|
|
||||||
let updateTorrentFilesData = function() {};
|
|
||||||
|
|
||||||
this.updateMainData = function() {};
|
this.updateMainData = function() {};
|
||||||
let alternativeSpeedLimits = false;
|
let alternativeSpeedLimits = false;
|
||||||
let queueing_enabled = true;
|
let queueing_enabled = true;
|
||||||
|
@ -365,12 +354,12 @@ window.addEvent('load', function() {
|
||||||
const create_link = function(hash, text, count) {
|
const create_link = function(hash, text, count) {
|
||||||
const html = '<a href="#" onclick="setCategoryFilter(' + hash + ');return false;">'
|
const html = '<a href="#" onclick="setCategoryFilter(' + hash + ');return false;">'
|
||||||
+ '<img src="images/qbt-theme/inode-directory.svg"/>'
|
+ '<img src="images/qbt-theme/inode-directory.svg"/>'
|
||||||
+ escapeHtml(text) + ' (' + count + ')' + '</a>';
|
+ window.qBittorrent.Misc.escapeHtml(text) + ' (' + count + ')' + '</a>';
|
||||||
const el = new Element('li', {
|
const el = new Element('li', {
|
||||||
id: hash,
|
id: hash,
|
||||||
html: html
|
html: html
|
||||||
});
|
});
|
||||||
categoriesFilterContextMenu.addTarget(el);
|
window.qBittorrent.Filters.categoriesFilterContextMenu.addTarget(el);
|
||||||
return el;
|
return el;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -422,12 +411,12 @@ window.addEvent('load', function() {
|
||||||
const createLink = function(hash, text, count) {
|
const createLink = function(hash, text, count) {
|
||||||
const html = '<a href="#" onclick="setTagFilter(' + hash + ');return false;">'
|
const html = '<a href="#" onclick="setTagFilter(' + hash + ');return false;">'
|
||||||
+ '<img src="images/qbt-theme/inode-directory.svg"/>'
|
+ '<img src="images/qbt-theme/inode-directory.svg"/>'
|
||||||
+ escapeHtml(text) + ' (' + count + ')' + '</a>';
|
+ window.qBittorrent.Misc.escapeHtml(text) + ' (' + count + ')' + '</a>';
|
||||||
const el = new Element('li', {
|
const el = new Element('li', {
|
||||||
id: hash,
|
id: hash,
|
||||||
html: html
|
html: html
|
||||||
});
|
});
|
||||||
tagsFilterContextMenu.addTarget(el);
|
window.qBittorrent.Filters.tagsFilterContextMenu.addTarget(el);
|
||||||
return el;
|
return el;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -579,11 +568,11 @@ window.addEvent('load', function() {
|
||||||
updateFiltersList();
|
updateFiltersList();
|
||||||
if (update_categories) {
|
if (update_categories) {
|
||||||
updateCategoryList();
|
updateCategoryList();
|
||||||
torrentsTableContextMenu.updateCategoriesSubMenu(category_list);
|
window.qBittorrent.TransferList.contextMenu.updateCategoriesSubMenu(category_list);
|
||||||
}
|
}
|
||||||
if (updateTags) {
|
if (updateTags) {
|
||||||
updateTagList();
|
updateTagList();
|
||||||
torrentsTableContextMenu.updateTagsSubMenu(tagList);
|
window.qBittorrent.TransferList.contextMenu.updateTagsSubMenu(tagList);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (full_update)
|
if (full_update)
|
||||||
|
@ -603,39 +592,39 @@ window.addEvent('load', function() {
|
||||||
};
|
};
|
||||||
|
|
||||||
const processServerState = function() {
|
const processServerState = function() {
|
||||||
let transfer_info = friendlyUnit(serverState.dl_info_speed, true);
|
let transfer_info = window.qBittorrent.Misc.friendlyUnit(serverState.dl_info_speed, true);
|
||||||
if (serverState.dl_rate_limit > 0)
|
if (serverState.dl_rate_limit > 0)
|
||||||
transfer_info += " [" + friendlyUnit(serverState.dl_rate_limit, true) + "]";
|
transfer_info += " [" + window.qBittorrent.Misc.friendlyUnit(serverState.dl_rate_limit, true) + "]";
|
||||||
transfer_info += " (" + friendlyUnit(serverState.dl_info_data, false) + ")";
|
transfer_info += " (" + window.qBittorrent.Misc.friendlyUnit(serverState.dl_info_data, false) + ")";
|
||||||
$("DlInfos").set('html', transfer_info);
|
$("DlInfos").set('html', transfer_info);
|
||||||
transfer_info = friendlyUnit(serverState.up_info_speed, true);
|
transfer_info = window.qBittorrent.Misc.friendlyUnit(serverState.up_info_speed, true);
|
||||||
if (serverState.up_rate_limit > 0)
|
if (serverState.up_rate_limit > 0)
|
||||||
transfer_info += " [" + friendlyUnit(serverState.up_rate_limit, true) + "]";
|
transfer_info += " [" + window.qBittorrent.Misc.friendlyUnit(serverState.up_rate_limit, true) + "]";
|
||||||
transfer_info += " (" + friendlyUnit(serverState.up_info_data, false) + ")";
|
transfer_info += " (" + window.qBittorrent.Misc.friendlyUnit(serverState.up_info_data, false) + ")";
|
||||||
$("UpInfos").set('html', transfer_info);
|
$("UpInfos").set('html', transfer_info);
|
||||||
if (speedInTitle) {
|
if (speedInTitle) {
|
||||||
document.title = "QBT_TR([D: %1, U: %2] qBittorrent %3)QBT_TR[CONTEXT=MainWindow]".replace("%1", friendlyUnit(serverState.dl_info_speed, true)).replace("%2", friendlyUnit(serverState.up_info_speed, true)).replace("%3", qbtVersion());
|
document.title = "QBT_TR([D: %1, U: %2] qBittorrent %3)QBT_TR[CONTEXT=MainWindow]".replace("%1", window.qBittorrent.Misc.friendlyUnit(serverState.dl_info_speed, true)).replace("%2", window.qBittorrent.Misc.friendlyUnit(serverState.up_info_speed, true)).replace("%3", qbtVersion());
|
||||||
document.title += " QBT_TR(Web UI)QBT_TR[CONTEXT=OptionsDialog]";
|
document.title += " QBT_TR(Web UI)QBT_TR[CONTEXT=OptionsDialog]";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
document.title = ("qBittorrent " + qbtVersion() + " QBT_TR(Web UI)QBT_TR[CONTEXT=OptionsDialog]");
|
document.title = ("qBittorrent " + qbtVersion() + " QBT_TR(Web UI)QBT_TR[CONTEXT=OptionsDialog]");
|
||||||
$('freeSpaceOnDisk').set('html', 'QBT_TR(Free space: %1)QBT_TR[CONTEXT=HttpServer]'.replace("%1", friendlyUnit(serverState.free_space_on_disk)));
|
$('freeSpaceOnDisk').set('html', 'QBT_TR(Free space: %1)QBT_TR[CONTEXT=HttpServer]'.replace("%1", window.qBittorrent.Misc.friendlyUnit(serverState.free_space_on_disk)));
|
||||||
$('DHTNodes').set('html', 'QBT_TR(DHT: %1 nodes)QBT_TR[CONTEXT=StatusBar]'.replace("%1", serverState.dht_nodes));
|
$('DHTNodes').set('html', 'QBT_TR(DHT: %1 nodes)QBT_TR[CONTEXT=StatusBar]'.replace("%1", serverState.dht_nodes));
|
||||||
|
|
||||||
// Statistics dialog
|
// Statistics dialog
|
||||||
if (document.getElementById("statisticspage")) {
|
if (document.getElementById("statisticspage")) {
|
||||||
$('AlltimeDL').set('html', friendlyUnit(serverState.alltime_dl, false));
|
$('AlltimeDL').set('html', window.qBittorrent.Misc.friendlyUnit(serverState.alltime_dl, false));
|
||||||
$('AlltimeUL').set('html', friendlyUnit(serverState.alltime_ul, false));
|
$('AlltimeUL').set('html', window.qBittorrent.Misc.friendlyUnit(serverState.alltime_ul, false));
|
||||||
$('TotalWastedSession').set('html', friendlyUnit(serverState.total_wasted_session, false));
|
$('TotalWastedSession').set('html', window.qBittorrent.Misc.friendlyUnit(serverState.total_wasted_session, false));
|
||||||
$('GlobalRatio').set('html', serverState.global_ratio);
|
$('GlobalRatio').set('html', serverState.global_ratio);
|
||||||
$('TotalPeerConnections').set('html', serverState.total_peer_connections);
|
$('TotalPeerConnections').set('html', serverState.total_peer_connections);
|
||||||
$('ReadCacheHits').set('html', serverState.read_cache_hits + "%");
|
$('ReadCacheHits').set('html', serverState.read_cache_hits + "%");
|
||||||
$('TotalBuffersSize').set('html', friendlyUnit(serverState.total_buffers_size, false));
|
$('TotalBuffersSize').set('html', window.qBittorrent.Misc.friendlyUnit(serverState.total_buffers_size, false));
|
||||||
$('WriteCacheOverload').set('html', serverState.write_cache_overload + "%");
|
$('WriteCacheOverload').set('html', serverState.write_cache_overload + "%");
|
||||||
$('ReadCacheOverload').set('html', serverState.read_cache_overload + "%");
|
$('ReadCacheOverload').set('html', serverState.read_cache_overload + "%");
|
||||||
$('QueuedIOJobs').set('html', serverState.queued_io_jobs);
|
$('QueuedIOJobs').set('html', serverState.queued_io_jobs);
|
||||||
$('AverageTimeInQueue').set('html', serverState.average_time_queue + " ms");
|
$('AverageTimeInQueue').set('html', serverState.average_time_queue + " ms");
|
||||||
$('TotalQueuedSize').set('html', friendlyUnit(serverState.total_queued_size, false));
|
$('TotalQueuedSize').set('html', window.qBittorrent.Misc.friendlyUnit(serverState.total_queued_size, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (serverState.connection_status == "connected")
|
if (serverState.connection_status == "connected")
|
||||||
|
@ -790,7 +779,7 @@ window.addEvent('load', function() {
|
||||||
|
|
||||||
const showSearchTab = function() {
|
const showSearchTab = function() {
|
||||||
if (!searchTabInitialized) {
|
if (!searchTabInitialized) {
|
||||||
initSearchTab();
|
window.qBittorrent.Search.init();
|
||||||
searchTabInitialized = true;
|
searchTabInitialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -878,16 +867,26 @@ window.addEvent('load', function() {
|
||||||
MochaUI.initializeTabs('propertiesTabs');
|
MochaUI.initializeTabs('propertiesTabs');
|
||||||
|
|
||||||
updatePropertiesPanel = function() {
|
updatePropertiesPanel = function() {
|
||||||
if (!$('prop_general').hasClass('invisible'))
|
if (!$('prop_general').hasClass('invisible')) {
|
||||||
updateTorrentData();
|
if (window.qBittorrent.PropGeneral !== undefined)
|
||||||
else if (!$('prop_trackers').hasClass('invisible'))
|
window.qBittorrent.PropGeneral.updateData();
|
||||||
updateTrackersData();
|
}
|
||||||
else if (!$('prop_peers').hasClass('invisible'))
|
else if (!$('prop_trackers').hasClass('invisible')) {
|
||||||
updateTorrentPeersData();
|
if (window.qBittorrent.PropTrackers !== undefined)
|
||||||
else if (!$('prop_webseeds').hasClass('invisible'))
|
window.qBittorrent.PropTrackers.updateData();
|
||||||
updateWebSeedsData();
|
}
|
||||||
else if (!$('prop_files').hasClass('invisible'))
|
else if (!$('prop_peers').hasClass('invisible')) {
|
||||||
updateTorrentFilesData();
|
if (window.qBittorrent.PropPeers !== undefined)
|
||||||
|
window.qBittorrent.PropPeers.updateData();
|
||||||
|
}
|
||||||
|
else if (!$('prop_webseeds').hasClass('invisible')) {
|
||||||
|
if (window.qBittorrent.PropWebseeds !== undefined)
|
||||||
|
window.qBittorrent.PropWebseeds.updateData();
|
||||||
|
}
|
||||||
|
else if (!$('prop_files').hasClass('invisible')) {
|
||||||
|
if (window.qBittorrent.PropFiles !== undefined)
|
||||||
|
window.qBittorrent.PropFiles.updateData();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$('PropGeneralLink').addEvent('click', function(e) {
|
$('PropGeneralLink').addEvent('click', function(e) {
|
||||||
|
|
|
@ -28,6 +28,21 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
if (window.qBittorrent === undefined) {
|
||||||
|
window.qBittorrent = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
window.qBittorrent.ContextMenu = (function() {
|
||||||
|
const exports = function() {
|
||||||
|
return {
|
||||||
|
ContextMenu: ContextMenu,
|
||||||
|
TorrentsTableContextMenu: TorrentsTableContextMenu,
|
||||||
|
CategoriesFilterContextMenu: CategoriesFilterContextMenu,
|
||||||
|
TagsFilterContextMenu: TagsFilterContextMenu,
|
||||||
|
SearchPluginsTableContextMenu: SearchPluginsTableContextMenu
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
let lastShownContextMenu = null;
|
let lastShownContextMenu = null;
|
||||||
const ContextMenu = new Class({
|
const ContextMenu = new Class({
|
||||||
//implements
|
//implements
|
||||||
|
@ -431,7 +446,7 @@ const TorrentsTableContextMenu = new Class({
|
||||||
Object.each(sortedCategories, function(categoryName) {
|
Object.each(sortedCategories, function(categoryName) {
|
||||||
const categoryHash = genHash(categoryName);
|
const categoryHash = genHash(categoryName);
|
||||||
const el = new Element('li', {
|
const el = new Element('li', {
|
||||||
html: '<a href="javascript:torrentSetCategoryFN(\'' + categoryHash + '\');"><img src="images/qbt-theme/inode-directory.svg"/> ' + escapeHtml(categoryName) + '</a>'
|
html: '<a href="javascript:torrentSetCategoryFN(\'' + categoryHash + '\');"><img src="images/qbt-theme/inode-directory.svg"/> ' + window.qBittorrent.Misc.escapeHtml(categoryName) + '</a>'
|
||||||
});
|
});
|
||||||
if (first) {
|
if (first) {
|
||||||
el.addClass('separator');
|
el.addClass('separator');
|
||||||
|
@ -469,7 +484,7 @@ const TorrentsTableContextMenu = new Class({
|
||||||
const tagHash = genHash(tagName);
|
const tagHash = genHash(tagName);
|
||||||
const el = new Element('li', {
|
const el = new Element('li', {
|
||||||
html: '<a href="#Tag/' + tagHash + '" onclick="event.preventDefault(); torrentSetTagsFN(\'' + tagHash + '\', !event.currentTarget.getElement(\'input[type=checkbox]\').checked);">'
|
html: '<a href="#Tag/' + tagHash + '" onclick="event.preventDefault(); torrentSetTagsFN(\'' + tagHash + '\', !event.currentTarget.getElement(\'input[type=checkbox]\').checked);">'
|
||||||
+ '<input type="checkbox" onclick="this.checked = !this.checked;"> ' + escapeHtml(tagName)
|
+ '<input type="checkbox" onclick="this.checked = !this.checked;"> ' + window.qBittorrent.Misc.escapeHtml(tagName)
|
||||||
+ '</a>'
|
+ '</a>'
|
||||||
});
|
});
|
||||||
if (i === 0)
|
if (i === 0)
|
||||||
|
@ -522,3 +537,6 @@ const SearchPluginsTableContextMenu = new Class({
|
||||||
this.showItem('Uninstall');
|
this.showItem('Uninstall');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
return exports();
|
||||||
|
})();
|
||||||
|
|
|
@ -23,6 +23,18 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
if (window.qBittorrent === undefined) {
|
||||||
|
window.qBittorrent = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
window.qBittorrent.Download = (function() {
|
||||||
|
const exports = function() {
|
||||||
|
return {
|
||||||
|
changeCategorySelect: changeCategorySelect,
|
||||||
|
changeTMM: changeTMM
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
let categories = {};
|
let categories = {};
|
||||||
let defaultSavePath = "";
|
let defaultSavePath = "";
|
||||||
|
|
||||||
|
@ -118,3 +130,6 @@ $(window).addEventListener("load", function() {
|
||||||
getPreferences();
|
getPreferences();
|
||||||
getCategories();
|
getCategories();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
return exports();
|
||||||
|
})();
|
||||||
|
|
|
@ -33,6 +33,22 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
if (window.qBittorrent === undefined) {
|
||||||
|
window.qBittorrent = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
window.qBittorrent.DynamicTable = (function() {
|
||||||
|
const exports = function() {
|
||||||
|
return {
|
||||||
|
TorrentsTable: TorrentsTable,
|
||||||
|
TorrentPeersTable: TorrentPeersTable,
|
||||||
|
SearchResultsTable: SearchResultsTable,
|
||||||
|
SearchPluginsTable: SearchPluginsTable,
|
||||||
|
TorrentTrackersTable: TorrentTrackersTable,
|
||||||
|
TorrentFilesTable: TorrentFilesTable
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
let DynamicTableHeaderContextMenuClass = null;
|
let DynamicTableHeaderContextMenuClass = null;
|
||||||
let ProgressColumnWidth = -1;
|
let ProgressColumnWidth = -1;
|
||||||
|
|
||||||
|
@ -266,7 +282,7 @@ const DynamicTable = new Class({
|
||||||
setupDynamicTableHeaderContextMenuClass: function() {
|
setupDynamicTableHeaderContextMenuClass: function() {
|
||||||
if (!DynamicTableHeaderContextMenuClass) {
|
if (!DynamicTableHeaderContextMenuClass) {
|
||||||
DynamicTableHeaderContextMenuClass = new Class({
|
DynamicTableHeaderContextMenuClass = new Class({
|
||||||
Extends: ContextMenu,
|
Extends: window.qBittorrent.ContextMenu.ContextMenu,
|
||||||
updateMenuItems: function() {
|
updateMenuItems: function() {
|
||||||
for (let i = 0; i < this.dynamicTable.columns.length; ++i) {
|
for (let i = 0; i < this.dynamicTable.columns.length; ++i) {
|
||||||
if (this.dynamicTable.columns[i].caption === '')
|
if (this.dynamicTable.columns[i].caption === '')
|
||||||
|
@ -298,7 +314,7 @@ const DynamicTable = new Class({
|
||||||
});
|
});
|
||||||
|
|
||||||
const createLi = function(columnName, text) {
|
const createLi = function(columnName, text) {
|
||||||
const html = '<a href="#' + columnName + '" ><img src="images/qbt-theme/checked.svg"/>' + escapeHtml(text) + '</a>';
|
const html = '<a href="#' + columnName + '" ><img src="images/qbt-theme/checked.svg"/>' + window.qBittorrent.Misc.escapeHtml(text) + '</a>';
|
||||||
return new Element('li', {
|
return new Element('li', {
|
||||||
html: html
|
html: html
|
||||||
});
|
});
|
||||||
|
@ -989,7 +1005,7 @@ const TorrentsTable = new Class({
|
||||||
|
|
||||||
// name, category, tags
|
// name, category, tags
|
||||||
this.columns['name'].updateTd = function(td, row) {
|
this.columns['name'].updateTd = function(td, row) {
|
||||||
const name = escapeHtml(this.getRowValue(row))
|
const name = window.qBittorrent.Misc.escapeHtml(this.getRowValue(row))
|
||||||
td.set('html', name);
|
td.set('html', name);
|
||||||
td.set('title', name);
|
td.set('title', name);
|
||||||
};
|
};
|
||||||
|
@ -1006,7 +1022,7 @@ const TorrentsTable = new Class({
|
||||||
|
|
||||||
// size
|
// size
|
||||||
this.columns['size'].updateTd = function(td, row) {
|
this.columns['size'].updateTd = function(td, row) {
|
||||||
const size = friendlyUnit(this.getRowValue(row), false);
|
const size = window.qBittorrent.Misc.friendlyUnit(this.getRowValue(row), false);
|
||||||
td.set('html', size);
|
td.set('html', size);
|
||||||
td.set('title', size);
|
td.set('title', size);
|
||||||
};
|
};
|
||||||
|
@ -1030,7 +1046,7 @@ const TorrentsTable = new Class({
|
||||||
else {
|
else {
|
||||||
if (ProgressColumnWidth < 0)
|
if (ProgressColumnWidth < 0)
|
||||||
ProgressColumnWidth = td.offsetWidth;
|
ProgressColumnWidth = td.offsetWidth;
|
||||||
td.adopt(new ProgressBar(progressFormated.toFloat(), {
|
td.adopt(new window.qBittorrent.ProgressBar.ProgressBar(progressFormated.toFloat(), {
|
||||||
'width': ProgressColumnWidth - 5
|
'width': ProgressColumnWidth - 5
|
||||||
}));
|
}));
|
||||||
td.resized = false;
|
td.resized = false;
|
||||||
|
@ -1084,7 +1100,7 @@ const TorrentsTable = new Class({
|
||||||
|
|
||||||
// dlspeed
|
// dlspeed
|
||||||
this.columns['dlspeed'].updateTd = function(td, row) {
|
this.columns['dlspeed'].updateTd = function(td, row) {
|
||||||
const speed = friendlyUnit(this.getRowValue(row), true);
|
const speed = window.qBittorrent.Misc.friendlyUnit(this.getRowValue(row), true);
|
||||||
td.set('html', speed);
|
td.set('html', speed);
|
||||||
td.set('title', speed);
|
td.set('title', speed);
|
||||||
};
|
};
|
||||||
|
@ -1094,7 +1110,7 @@ const TorrentsTable = new Class({
|
||||||
|
|
||||||
// eta
|
// eta
|
||||||
this.columns['eta'].updateTd = function(td, row) {
|
this.columns['eta'].updateTd = function(td, row) {
|
||||||
const eta = friendlyDuration(this.getRowValue(row));
|
const eta = window.qBittorrent.Misc.friendlyDuration(this.getRowValue(row));
|
||||||
td.set('html', eta);
|
td.set('html', eta);
|
||||||
td.set('title', eta);
|
td.set('title', eta);
|
||||||
};
|
};
|
||||||
|
@ -1102,7 +1118,7 @@ const TorrentsTable = new Class({
|
||||||
// ratio
|
// ratio
|
||||||
this.columns['ratio'].updateTd = function(td, row) {
|
this.columns['ratio'].updateTd = function(td, row) {
|
||||||
const ratio = this.getRowValue(row);
|
const ratio = this.getRowValue(row);
|
||||||
const string = (ratio === -1) ? '∞' : toFixedPointString(ratio, 2);
|
const string = (ratio === -1) ? '∞' : window.qBittorrent.Misc.toFixedPointString(ratio, 2);
|
||||||
td.set('html', string);
|
td.set('html', string);
|
||||||
td.set('title', string);
|
td.set('title', string);
|
||||||
};
|
};
|
||||||
|
@ -1139,7 +1155,7 @@ const TorrentsTable = new Class({
|
||||||
td.set('title', '∞');
|
td.set('title', '∞');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const formattedSpeed = friendlyUnit(speed, true);
|
const formattedSpeed = window.qBittorrent.Misc.friendlyUnit(speed, true);
|
||||||
td.set('html', formattedSpeed);
|
td.set('html', formattedSpeed);
|
||||||
td.set('title', formattedSpeed);
|
td.set('title', formattedSpeed);
|
||||||
}
|
}
|
||||||
|
@ -1172,7 +1188,7 @@ const TorrentsTable = new Class({
|
||||||
td.set('title', '∞');
|
td.set('title', '∞');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const formattedVal = 'QBT_TR(%1 ago)QBT_TR[CONTEXT=TransferListDelegate]'.replace('%1', friendlyDuration((new Date()) / 1000 - val));
|
const formattedVal = 'QBT_TR(%1 ago)QBT_TR[CONTEXT=TransferListDelegate]'.replace('%1', window.qBittorrent.Misc.friendlyDuration((new Date()) / 1000 - val));
|
||||||
td.set('html', formattedVal);
|
td.set('html', formattedVal);
|
||||||
td.set('title', formattedVal);
|
td.set('title', formattedVal);
|
||||||
}
|
}
|
||||||
|
@ -1180,14 +1196,14 @@ const TorrentsTable = new Class({
|
||||||
|
|
||||||
// time active
|
// time active
|
||||||
this.columns['time_active'].updateTd = function(td, row) {
|
this.columns['time_active'].updateTd = function(td, row) {
|
||||||
const time = friendlyDuration(this.getRowValue(row));
|
const time = window.qBittorrent.Misc.friendlyDuration(this.getRowValue(row));
|
||||||
td.set('html', time);
|
td.set('html', time);
|
||||||
td.set('title', time);
|
td.set('title', time);
|
||||||
};
|
};
|
||||||
|
|
||||||
// availability
|
// availability
|
||||||
this.columns['availability'].updateTd = function(td, row) {
|
this.columns['availability'].updateTd = function(td, row) {
|
||||||
const value = toFixedPointString(this.getRowValue(row), 3);
|
const value = window.qBittorrent.Misc.toFixedPointString(this.getRowValue(row), 3);
|
||||||
td.set('html', value);
|
td.set('html', value);
|
||||||
td.set('title', value);
|
td.set('title', value);
|
||||||
};
|
};
|
||||||
|
@ -1275,7 +1291,7 @@ const TorrentsTable = new Class({
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((filterTerms !== undefined) && (filterTerms !== null)
|
if ((filterTerms !== undefined) && (filterTerms !== null)
|
||||||
&& (filterTerms.length > 0) && !containsAllTerms(name, filterTerms))
|
&& (filterTerms.length > 0) && !window.qBittorrent.Misc.containsAllTerms(name, filterTerms))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -1446,7 +1462,7 @@ const TorrentPeersTable = new Class({
|
||||||
td.set('title', '');
|
td.set('title', '');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const formattedSpeed = friendlyUnit(speed, true);
|
const formattedSpeed = window.qBittorrent.Misc.friendlyUnit(speed, true);
|
||||||
td.set('html', formattedSpeed);
|
td.set('html', formattedSpeed);
|
||||||
td.set('title', formattedSpeed);
|
td.set('title', formattedSpeed);
|
||||||
}
|
}
|
||||||
|
@ -1457,7 +1473,7 @@ const TorrentPeersTable = new Class({
|
||||||
// downloaded, uploaded
|
// downloaded, uploaded
|
||||||
|
|
||||||
this.columns['downloaded'].updateTd = function(td, row) {
|
this.columns['downloaded'].updateTd = function(td, row) {
|
||||||
const downloaded = friendlyUnit(this.getRowValue(row), false);
|
const downloaded = window.qBittorrent.Misc.friendlyUnit(this.getRowValue(row), false);
|
||||||
td.set('html', downloaded);
|
td.set('html', downloaded);
|
||||||
td.set('title', downloaded);
|
td.set('title', downloaded);
|
||||||
};
|
};
|
||||||
|
@ -1474,8 +1490,8 @@ const TorrentPeersTable = new Class({
|
||||||
// files
|
// files
|
||||||
|
|
||||||
this.columns['files'].updateTd = function(td, row) {
|
this.columns['files'].updateTd = function(td, row) {
|
||||||
td.innerHTML = escapeHtml(this.getRowValue(row, 0).replace(/\n/g, ';'));
|
td.innerHTML = window.qBittorrent.Misc.escapeHtml(this.getRowValue(row, 0).replace(/\n/g, ';'));
|
||||||
td.title = escapeHtml(this.getRowValue(row, 0));
|
td.title = window.qBittorrent.Misc.escapeHtml(this.getRowValue(row, 0));
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1496,17 +1512,17 @@ const SearchResultsTable = new Class({
|
||||||
|
|
||||||
initColumnsFunctions: function() {
|
initColumnsFunctions: function() {
|
||||||
const displayText = function(td, row) {
|
const displayText = function(td, row) {
|
||||||
const value = escapeHtml(this.getRowValue(row));
|
const value = window.qBittorrent.Misc.escapeHtml(this.getRowValue(row));
|
||||||
td.set('html', value);
|
td.set('html', value);
|
||||||
td.set('title', value);
|
td.set('title', value);
|
||||||
}
|
}
|
||||||
const displaySize = function(td, row) {
|
const displaySize = function(td, row) {
|
||||||
const size = friendlyUnit(this.getRowValue(row), false);
|
const size = window.qBittorrent.Misc.friendlyUnit(this.getRowValue(row), false);
|
||||||
td.set('html', size);
|
td.set('html', size);
|
||||||
td.set('title', size);
|
td.set('title', size);
|
||||||
}
|
}
|
||||||
const displayNum = function(td, row) {
|
const displayNum = function(td, row) {
|
||||||
const value = escapeHtml(this.getRowValue(row));
|
const value = window.qBittorrent.Misc.escapeHtml(this.getRowValue(row));
|
||||||
const formattedValue = (value === "-1") ? "Unknown" : value;
|
const formattedValue = (value === "-1") ? "Unknown" : value;
|
||||||
td.set('html', formattedValue);
|
td.set('html', formattedValue);
|
||||||
td.set('title', formattedValue);
|
td.set('title', formattedValue);
|
||||||
|
@ -1521,8 +1537,8 @@ const SearchResultsTable = new Class({
|
||||||
|
|
||||||
getFilteredAndSortedRows: function() {
|
getFilteredAndSortedRows: function() {
|
||||||
const getSizeFilters = function() {
|
const getSizeFilters = function() {
|
||||||
let minSize = (searchSizeFilter.min > 0.00) ? (searchSizeFilter.min * Math.pow(1024, searchSizeFilter.minUnit)) : 0.00;
|
let minSize = (window.qBittorrent.Search.searchSizeFilter.min > 0.00) ? (window.qBittorrent.Search.searchSizeFilter.min * Math.pow(1024, window.qBittorrent.Search.searchSizeFilter.minUnit)) : 0.00;
|
||||||
let maxSize = (searchSizeFilter.max > 0.00) ? (searchSizeFilter.max * Math.pow(1024, searchSizeFilter.maxUnit)) : 0.00;
|
let maxSize = (window.qBittorrent.Search.searchSizeFilter.max > 0.00) ? (window.qBittorrent.Search.searchSizeFilter.max * Math.pow(1024, window.qBittorrent.Search.searchSizeFilter.maxUnit)) : 0.00;
|
||||||
|
|
||||||
if ((minSize > maxSize) && (maxSize > 0.00)) {
|
if ((minSize > maxSize) && (maxSize > 0.00)) {
|
||||||
const tmp = minSize;
|
const tmp = minSize;
|
||||||
|
@ -1537,8 +1553,8 @@ const SearchResultsTable = new Class({
|
||||||
};
|
};
|
||||||
|
|
||||||
const getSeedsFilters = function() {
|
const getSeedsFilters = function() {
|
||||||
let minSeeds = (searchSeedsFilter.min > 0) ? searchSeedsFilter.min : 0;
|
let minSeeds = (window.qBittorrent.Search.searchSeedsFilter.min > 0) ? window.qBittorrent.Search.searchSeedsFilter.min : 0;
|
||||||
let maxSeeds = (searchSeedsFilter.max > 0) ? searchSeedsFilter.max : 0;
|
let maxSeeds = (window.qBittorrent.Search.searchSeedsFilter.max > 0) ? window.qBittorrent.Search.searchSeedsFilter.max : 0;
|
||||||
|
|
||||||
if ((minSeeds > maxSeeds) && (maxSeeds > 0)) {
|
if ((minSeeds > maxSeeds) && (maxSeeds > 0)) {
|
||||||
const tmp = minSeeds;
|
const tmp = minSeeds;
|
||||||
|
@ -1554,18 +1570,18 @@ const SearchResultsTable = new Class({
|
||||||
|
|
||||||
let filteredRows = [];
|
let filteredRows = [];
|
||||||
const rows = this.rows.getValues();
|
const rows = this.rows.getValues();
|
||||||
const searchTerms = searchPattern.toLowerCase().split(" ");
|
const searchTerms = window.qBittorrent.Search.searchText.pattern.toLowerCase().split(" ");
|
||||||
const filterTerms = searchFilterPattern.toLowerCase().split(" ");
|
const filterTerms = window.qBittorrent.Search.searchText.filterPattern.toLowerCase().split(" ");
|
||||||
const sizeFilters = getSizeFilters();
|
const sizeFilters = getSizeFilters();
|
||||||
const seedsFilters = getSeedsFilters();
|
const seedsFilters = getSeedsFilters();
|
||||||
const searchInTorrentName = $('searchInTorrentName').get('value') === "names";
|
const searchInTorrentName = $('searchInTorrentName').get('value') === "names";
|
||||||
|
|
||||||
if (searchInTorrentName || (filterTerms.length > 0) || (searchSizeFilter.min > 0.00) || (searchSizeFilter.max > 0.00)) {
|
if (searchInTorrentName || (filterTerms.length > 0) || (window.qBittorrent.Search.searchSizeFilter.min > 0.00) || (window.qBittorrent.Search.searchSizeFilter.max > 0.00)) {
|
||||||
for (let i = 0; i < rows.length; ++i) {
|
for (let i = 0; i < rows.length; ++i) {
|
||||||
const row = rows[i];
|
const row = rows[i];
|
||||||
|
|
||||||
if (searchInTorrentName && !containsAllTerms(row.full_data.fileName, searchTerms)) continue;
|
if (searchInTorrentName && !window.qBittorrent.Misc.containsAllTerms(row.full_data.fileName, searchTerms)) continue;
|
||||||
if ((filterTerms.length > 0) && !containsAllTerms(row.full_data.fileName, filterTerms)) continue;
|
if ((filterTerms.length > 0) && !window.qBittorrent.Misc.containsAllTerms(row.full_data.fileName, filterTerms)) continue;
|
||||||
if ((sizeFilters.min > 0.00) && (row.full_data.fileSize < sizeFilters.min)) continue;
|
if ((sizeFilters.min > 0.00) && (row.full_data.fileSize < sizeFilters.min)) continue;
|
||||||
if ((sizeFilters.max > 0.00) && (row.full_data.fileSize > sizeFilters.max)) continue;
|
if ((sizeFilters.max > 0.00) && (row.full_data.fileSize > sizeFilters.max)) continue;
|
||||||
if ((seedsFilters.min > 0) && (row.full_data.nbSeeders < seedsFilters.min)) continue;
|
if ((seedsFilters.min > 0) && (row.full_data.nbSeeders < seedsFilters.min)) continue;
|
||||||
|
@ -1609,7 +1625,7 @@ const SearchPluginsTable = new Class({
|
||||||
|
|
||||||
initColumnsFunctions: function() {
|
initColumnsFunctions: function() {
|
||||||
const displayText = function(td, row) {
|
const displayText = function(td, row) {
|
||||||
const value = escapeHtml(this.getRowValue(row));
|
const value = window.qBittorrent.Misc.escapeHtml(this.getRowValue(row));
|
||||||
td.set('html', value);
|
td.set('html', value);
|
||||||
td.set('title', value);
|
td.set('title', value);
|
||||||
}
|
}
|
||||||
|
@ -1663,7 +1679,7 @@ const TorrentFilesTable = new Class({
|
||||||
prevFilteredRows: [],
|
prevFilteredRows: [],
|
||||||
prevSortedColumn: null,
|
prevSortedColumn: null,
|
||||||
prevReverseSort: null,
|
prevReverseSort: null,
|
||||||
fileTree: new FileTree(),
|
fileTree: new window.qBittorrent.FileTree.FileTree(),
|
||||||
|
|
||||||
populateTable: function(root) {
|
populateTable: function(root) {
|
||||||
this.fileTree.setRoot(root);
|
this.fileTree.setRoot(root);
|
||||||
|
@ -1682,7 +1698,7 @@ const TorrentFilesTable = new Class({
|
||||||
checked: node.checked,
|
checked: node.checked,
|
||||||
remaining: node.remaining,
|
remaining: node.remaining,
|
||||||
progress: node.progress,
|
progress: node.progress,
|
||||||
priority: normalizePriority(node.priority),
|
priority: window.qBittorrent.PropFiles.normalizePriority(node.priority),
|
||||||
availability: node.availability,
|
availability: node.availability,
|
||||||
fileId: -1,
|
fileId: -1,
|
||||||
name: node.name
|
name: node.name
|
||||||
|
@ -1731,12 +1747,12 @@ const TorrentFilesTable = new Class({
|
||||||
initColumnsFunctions: function() {
|
initColumnsFunctions: function() {
|
||||||
const that = this;
|
const that = this;
|
||||||
const displaySize = function(td, row) {
|
const displaySize = function(td, row) {
|
||||||
const size = friendlyUnit(this.getRowValue(row), false);
|
const size = window.qBittorrent.Misc.friendlyUnit(this.getRowValue(row), false);
|
||||||
td.set('html', size);
|
td.set('html', size);
|
||||||
td.set('title', size);
|
td.set('title', size);
|
||||||
}
|
}
|
||||||
const displayPercentage = function(td, row) {
|
const displayPercentage = function(td, row) {
|
||||||
const value = friendlyPercentage(this.getRowValue(row));
|
const value = window.qBittorrent.Misc.friendlyPercentage(this.getRowValue(row));
|
||||||
td.set('html', value);
|
td.set('html', value);
|
||||||
td.set('title', value);
|
td.set('title', value);
|
||||||
};
|
};
|
||||||
|
@ -1752,7 +1768,7 @@ const TorrentFilesTable = new Class({
|
||||||
const dirImgId = 'filesTableDirImg' + id;
|
const dirImgId = 'filesTableDirImg' + id;
|
||||||
if ($(dirImgId)) {
|
if ($(dirImgId)) {
|
||||||
// just update file name
|
// just update file name
|
||||||
$(fileNameId).textContent = escapeHtml(value);
|
$(fileNameId).textContent = window.qBittorrent.Misc.escapeHtml(value);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const collapseIcon = new Element('img', {
|
const collapseIcon = new Element('img', {
|
||||||
|
@ -1763,10 +1779,10 @@ const TorrentFilesTable = new Class({
|
||||||
class: "filesTableCollapseIcon",
|
class: "filesTableCollapseIcon",
|
||||||
id: collapseIconId,
|
id: collapseIconId,
|
||||||
"data-id": id,
|
"data-id": id,
|
||||||
onclick: "collapseIconClicked(this)"
|
onclick: "qBittorrent.PropFiles.collapseIconClicked(this)"
|
||||||
});
|
});
|
||||||
const span = new Element('span', {
|
const span = new Element('span', {
|
||||||
text: escapeHtml(value),
|
text: window.qBittorrent.Misc.escapeHtml(value),
|
||||||
id: fileNameId
|
id: fileNameId
|
||||||
});
|
});
|
||||||
const dirImg = new Element('img', {
|
const dirImg = new Element('img', {
|
||||||
|
@ -1785,7 +1801,7 @@ const TorrentFilesTable = new Class({
|
||||||
else {
|
else {
|
||||||
const value = this.getRowValue(row);
|
const value = this.getRowValue(row);
|
||||||
const span = new Element('span', {
|
const span = new Element('span', {
|
||||||
text: escapeHtml(value),
|
text: window.qBittorrent.Misc.escapeHtml(value),
|
||||||
id: fileNameId,
|
id: fileNameId,
|
||||||
styles: {
|
styles: {
|
||||||
'margin-left': ((node.depth + 1) * 20)
|
'margin-left': ((node.depth + 1) * 20)
|
||||||
|
@ -1799,8 +1815,8 @@ const TorrentFilesTable = new Class({
|
||||||
const id = row.rowId;
|
const id = row.rowId;
|
||||||
const value = this.getRowValue(row);
|
const value = this.getRowValue(row);
|
||||||
|
|
||||||
if (isDownloadCheckboxExists(id)) {
|
if (window.qBittorrent.PropFiles.isDownloadCheckboxExists(id)) {
|
||||||
updateDownloadCheckbox(id, value);
|
window.qBittorrent.PropFiles.updateDownloadCheckbox(id, value);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const treeImg = new Element('img', {
|
const treeImg = new Element('img', {
|
||||||
|
@ -1809,7 +1825,7 @@ const TorrentFilesTable = new Class({
|
||||||
'margin-bottom': -2
|
'margin-bottom': -2
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
td.adopt(treeImg, createDownloadCheckbox(id, row.full_data.fileId, value));
|
td.adopt(treeImg, window.qBittorrent.PropFiles.createDownloadCheckbox(id, row.full_data.fileId, value));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1821,7 +1837,7 @@ const TorrentFilesTable = new Class({
|
||||||
|
|
||||||
const progressBar = $('pbf_' + id);
|
const progressBar = $('pbf_' + id);
|
||||||
if (progressBar === null) {
|
if (progressBar === null) {
|
||||||
td.adopt(new ProgressBar(value.toFloat(), {
|
td.adopt(new window.qBittorrent.ProgressBar.ProgressBar(value.toFloat(), {
|
||||||
id: 'pbf_' + id,
|
id: 'pbf_' + id,
|
||||||
width: 80
|
width: 80
|
||||||
}));
|
}));
|
||||||
|
@ -1835,10 +1851,10 @@ const TorrentFilesTable = new Class({
|
||||||
const id = row.rowId;
|
const id = row.rowId;
|
||||||
const value = this.getRowValue(row);
|
const value = this.getRowValue(row);
|
||||||
|
|
||||||
if (isPriorityComboExists(id))
|
if (window.qBittorrent.PropFiles.isPriorityComboExists(id))
|
||||||
updatePriorityCombo(id, value);
|
window.qBittorrent.PropFiles.updatePriorityCombo(id, value);
|
||||||
else
|
else
|
||||||
td.adopt(createPriorityCombo(id, row.full_data.fileId, value));
|
td.adopt(window.qBittorrent.PropFiles.createPriorityCombo(id, row.full_data.fileId, value));
|
||||||
};
|
};
|
||||||
|
|
||||||
this.columns['remaining'].updateTd = displaySize;
|
this.columns['remaining'].updateTd = displaySize;
|
||||||
|
@ -1900,7 +1916,7 @@ const TorrentFilesTable = new Class({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (containsAllTerms(node.name, filterTerms)) {
|
if (window.qBittorrent.Misc.containsAllTerms(node.name, filterTerms)) {
|
||||||
const row = this.getRow(node);
|
const row = this.getRow(node);
|
||||||
filteredRows.push(row);
|
filteredRows.push(row);
|
||||||
return true;
|
return true;
|
||||||
|
@ -1985,4 +2001,7 @@ const TorrentFilesTable = new Class({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
return exports();
|
||||||
|
})();
|
||||||
|
|
||||||
/*************************************************************/
|
/*************************************************************/
|
||||||
|
|
|
@ -28,6 +28,21 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
if (window.qBittorrent === undefined) {
|
||||||
|
window.qBittorrent = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
window.qBittorrent.FileTree = (function() {
|
||||||
|
const exports = function() {
|
||||||
|
return {
|
||||||
|
FilePriority: FilePriority,
|
||||||
|
TriState: TriState,
|
||||||
|
FileTree: FileTree,
|
||||||
|
FileNode: FileNode,
|
||||||
|
FolderNode: FolderNode,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
const FilePriority = {
|
const FilePriority = {
|
||||||
"Ignored": 0,
|
"Ignored": 0,
|
||||||
"Normal": 1,
|
"Normal": 1,
|
||||||
|
@ -174,3 +189,6 @@ const FolderNode = new Class({
|
||||||
this.availability = (availability / size);
|
this.availability = (availability / size);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
return exports();
|
||||||
|
})();
|
||||||
|
|
|
@ -30,13 +30,27 @@
|
||||||
|
|
||||||
// This file is the JavaScript implementation of base/utils/fs.cpp
|
// This file is the JavaScript implementation of base/utils/fs.cpp
|
||||||
|
|
||||||
|
if (window.qBittorrent === undefined) {
|
||||||
|
window.qBittorrent = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
window.qBittorrent.Filesystem = (function() {
|
||||||
|
const exports = function() {
|
||||||
|
return {
|
||||||
|
PathSeparator: PathSeparator,
|
||||||
|
fileExtension: fileExtension,
|
||||||
|
fileName: fileName,
|
||||||
|
folderName: folderName
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
const QB_EXT = '.!qB';
|
const QB_EXT = '.!qB';
|
||||||
const PathSeparator = '/';
|
const PathSeparator = '/';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the file extension part of a file name.
|
* Returns the file extension part of a file name.
|
||||||
*/
|
*/
|
||||||
function fileExtension(filename) {
|
const fileExtension = function(filename) {
|
||||||
const name = filename.endsWith(QB_EXT)
|
const name = filename.endsWith(QB_EXT)
|
||||||
? filename.substring(0, filename.length - QB_EXT.length)
|
? filename.substring(0, filename.length - QB_EXT.length)
|
||||||
: filename;
|
: filename;
|
||||||
|
@ -44,18 +58,21 @@ function fileExtension(filename) {
|
||||||
if (pointIndex === -1)
|
if (pointIndex === -1)
|
||||||
return '';
|
return '';
|
||||||
return name.substring(pointIndex + 1);
|
return name.substring(pointIndex + 1);
|
||||||
}
|
};
|
||||||
|
|
||||||
function fileName(filepath) {
|
const fileName = function(filepath) {
|
||||||
const slashIndex = filepath.lastIndexOf(PathSeparator);
|
const slashIndex = filepath.lastIndexOf(PathSeparator);
|
||||||
if (slashIndex === -1)
|
if (slashIndex === -1)
|
||||||
return filepath;
|
return filepath;
|
||||||
return filepath.substring(slashIndex + 1);
|
return filepath.substring(slashIndex + 1);
|
||||||
}
|
};
|
||||||
|
|
||||||
function folderName(filepath) {
|
const folderName = function(filepath) {
|
||||||
const slashIndex = filepath.lastIndexOf(PathSeparator);
|
const slashIndex = filepath.lastIndexOf(PathSeparator);
|
||||||
if (slashIndex === -1)
|
if (slashIndex === -1)
|
||||||
return filepath;
|
return filepath;
|
||||||
return filepath.substring(0, slashIndex);
|
return filepath.substring(0, slashIndex);
|
||||||
}
|
};
|
||||||
|
|
||||||
|
return exports();
|
||||||
|
})();
|
||||||
|
|
|
@ -28,10 +28,29 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
if (window.qBittorrent === undefined) {
|
||||||
|
window.qBittorrent = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
window.qBittorrent.Misc = (function() {
|
||||||
|
const exports = function() {
|
||||||
|
return {
|
||||||
|
friendlyUnit: friendlyUnit,
|
||||||
|
friendlyDuration: friendlyDuration,
|
||||||
|
friendlyPercentage: friendlyPercentage,
|
||||||
|
friendlyFloat: friendlyFloat,
|
||||||
|
parseHtmlLinks: parseHtmlLinks,
|
||||||
|
escapeHtml: escapeHtml,
|
||||||
|
safeTrim: safeTrim,
|
||||||
|
toFixedPointString: toFixedPointString,
|
||||||
|
containsAllTerms: containsAllTerms
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* JS counterpart of the function in src/misc.cpp
|
* JS counterpart of the function in src/misc.cpp
|
||||||
*/
|
*/
|
||||||
function friendlyUnit(value, isSpeed) {
|
const friendlyUnit = function(value, isSpeed) {
|
||||||
const units = [
|
const units = [
|
||||||
"QBT_TR(B)QBT_TR[CONTEXT=misc]",
|
"QBT_TR(B)QBT_TR[CONTEXT=misc]",
|
||||||
"QBT_TR(KiB)QBT_TR[CONTEXT=misc]",
|
"QBT_TR(KiB)QBT_TR[CONTEXT=misc]",
|
||||||
|
@ -75,7 +94,7 @@ function friendlyUnit(value, isSpeed) {
|
||||||
/*
|
/*
|
||||||
* JS counterpart of the function in src/misc.cpp
|
* JS counterpart of the function in src/misc.cpp
|
||||||
*/
|
*/
|
||||||
function friendlyDuration(seconds) {
|
const friendlyDuration = function(seconds) {
|
||||||
const MAX_ETA = 8640000;
|
const MAX_ETA = 8640000;
|
||||||
if (seconds < 0 || seconds >= MAX_ETA)
|
if (seconds < 0 || seconds >= MAX_ETA)
|
||||||
return "∞";
|
return "∞";
|
||||||
|
@ -97,7 +116,7 @@ function friendlyDuration(seconds) {
|
||||||
return "∞";
|
return "∞";
|
||||||
}
|
}
|
||||||
|
|
||||||
function friendlyPercentage(value) {
|
const friendlyPercentage = function(value) {
|
||||||
let percentage = (value * 100).round(1);
|
let percentage = (value * 100).round(1);
|
||||||
if (isNaN(percentage) || (percentage < 0))
|
if (isNaN(percentage) || (percentage < 0))
|
||||||
percentage = 0;
|
percentage = 0;
|
||||||
|
@ -106,7 +125,7 @@ function friendlyPercentage(value) {
|
||||||
return percentage.toFixed(1) + "%";
|
return percentage.toFixed(1) + "%";
|
||||||
}
|
}
|
||||||
|
|
||||||
function friendlyFloat(value, precision) {
|
const friendlyFloat = function(value, precision) {
|
||||||
return parseFloat(value).toFixed(precision);
|
return parseFloat(value).toFixed(precision);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,18 +159,18 @@ if (!Date.prototype.toISOString) {
|
||||||
/*
|
/*
|
||||||
* JS counterpart of the function in src/misc.cpp
|
* JS counterpart of the function in src/misc.cpp
|
||||||
*/
|
*/
|
||||||
function parseHtmlLinks(text) {
|
const parseHtmlLinks = function(text) {
|
||||||
const exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
|
const exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
|
||||||
return text.replace(exp, "<a target='_blank' href='$1'>$1</a>");
|
return text.replace(exp, "<a target='_blank' href='$1'>$1</a>");
|
||||||
}
|
}
|
||||||
|
|
||||||
function escapeHtml(str) {
|
const escapeHtml = function(str) {
|
||||||
const div = document.createElement('div');
|
const div = document.createElement('div');
|
||||||
div.appendChild(document.createTextNode(str));
|
div.appendChild(document.createTextNode(str));
|
||||||
return div.innerHTML;
|
return div.innerHTML;
|
||||||
}
|
}
|
||||||
|
|
||||||
function safeTrim(value) {
|
const safeTrim = function(value) {
|
||||||
try {
|
try {
|
||||||
return value.trim();
|
return value.trim();
|
||||||
}
|
}
|
||||||
|
@ -162,7 +181,7 @@ function safeTrim(value) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function toFixedPointString(number, digits) {
|
const toFixedPointString = function(number, digits) {
|
||||||
// Do not round up number
|
// Do not round up number
|
||||||
const power = Math.pow(10, digits);
|
const power = Math.pow(10, digits);
|
||||||
return (Math.floor(power * number) / power).toFixed(digits);
|
return (Math.floor(power * number) / power).toFixed(digits);
|
||||||
|
@ -174,7 +193,7 @@ function toFixedPointString(number, digits) {
|
||||||
* @param {Array<String>} terms terms to search for within the text
|
* @param {Array<String>} terms terms to search for within the text
|
||||||
* @returns {Boolean} true if all terms match the text, false otherwise
|
* @returns {Boolean} true if all terms match the text, false otherwise
|
||||||
*/
|
*/
|
||||||
function containsAllTerms(text, terms) {
|
const containsAllTerms = function(text, terms) {
|
||||||
const textToSearch = text.toLowerCase();
|
const textToSearch = text.toLowerCase();
|
||||||
return terms.every((function(term) {
|
return terms.every((function(term) {
|
||||||
const isTermRequired = (term[0] === '+');
|
const isTermRequired = (term[0] === '+');
|
||||||
|
@ -191,3 +210,6 @@ function containsAllTerms(text, terms) {
|
||||||
return isTermExcluded ? !textContainsTerm : textContainsTerm;
|
return isTermExcluded ? !textContainsTerm : textContainsTerm;
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return exports();
|
||||||
|
})();
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
----------------------------------------------------------------- */
|
----------------------------------------------------------------- */
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const LocalPreferences = new LocalPreferencesClass();
|
const LocalPreferences = new window.qBittorrent.LocalPreferences.LocalPreferencesClass();
|
||||||
|
|
||||||
let saveWindowSize = function() {};
|
let saveWindowSize = function() {};
|
||||||
let loadWindowWidth = function() {};
|
let loadWindowWidth = function() {};
|
||||||
|
|
|
@ -28,6 +28,17 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
if (window.qBittorrent === undefined) {
|
||||||
|
window.qBittorrent = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
window.qBittorrent.LocalPreferences = (function() {
|
||||||
|
const exports = function() {
|
||||||
|
return {
|
||||||
|
LocalPreferencesClass: LocalPreferencesClass
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
const LocalPreferencesClass = new Class({
|
const LocalPreferencesClass = new Class({
|
||||||
get: function(key, defaultValue) {
|
get: function(key, defaultValue) {
|
||||||
const value = localStorage.getItem(key);
|
const value = localStorage.getItem(key);
|
||||||
|
@ -45,3 +56,6 @@ const LocalPreferencesClass = new Class({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
return exports();
|
||||||
|
})();
|
||||||
|
|
|
@ -28,6 +28,18 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
if (window.qBittorrent === undefined) {
|
||||||
|
window.qBittorrent = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
window.qBittorrent.ProgressBar = (function() {
|
||||||
|
const exports = function() {
|
||||||
|
return {
|
||||||
|
ProgressBar: ProgressBar
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
let ProgressBars = 0;
|
||||||
const ProgressBar = new Class({
|
const ProgressBar = new Class({
|
||||||
initialize: function(value, parameters) {
|
initialize: function(value, parameters) {
|
||||||
const vals = {
|
const vals = {
|
||||||
|
@ -137,4 +149,5 @@ function ProgressBar_checkForParent(id) {
|
||||||
obj.setValue(obj.vals.value);
|
obj.setValue(obj.vals.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
let ProgressBars = 0;
|
return exports();
|
||||||
|
})();
|
||||||
|
|
|
@ -28,8 +28,30 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
if (window.qBittorrent === undefined) {
|
||||||
|
window.qBittorrent = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
window.qBittorrent.PropFiles = (function() {
|
||||||
|
const exports = function() {
|
||||||
|
return {
|
||||||
|
normalizePriority: normalizePriority,
|
||||||
|
isDownloadCheckboxExists: isDownloadCheckboxExists,
|
||||||
|
createDownloadCheckbox: createDownloadCheckbox,
|
||||||
|
updateDownloadCheckbox: updateDownloadCheckbox,
|
||||||
|
isPriorityComboExists: isPriorityComboExists,
|
||||||
|
createPriorityCombo: createPriorityCombo,
|
||||||
|
updatePriorityCombo: updatePriorityCombo,
|
||||||
|
updateData: updateData,
|
||||||
|
collapseIconClicked: collapseIconClicked
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const torrentFilesTable = new window.qBittorrent.DynamicTable.TorrentFilesTable();
|
||||||
|
const FilePriority = window.qBittorrent.FileTree.FilePriority;
|
||||||
|
const TriState = window.qBittorrent.FileTree.TriState;
|
||||||
let is_seed = true;
|
let is_seed = true;
|
||||||
this.current_hash = "";
|
let current_hash = "";
|
||||||
|
|
||||||
const normalizePriority = function(priority) {
|
const normalizePriority = function(priority) {
|
||||||
switch (priority) {
|
switch (priority) {
|
||||||
|
@ -358,7 +380,7 @@ const loadTorrentFilesData = function() {
|
||||||
}).send();
|
}).send();
|
||||||
};
|
};
|
||||||
|
|
||||||
updateTorrentFilesData = function() {
|
const updateData = function() {
|
||||||
clearTimeout(loadTorrentFilesDataTimer);
|
clearTimeout(loadTorrentFilesDataTimer);
|
||||||
loadTorrentFilesData();
|
loadTorrentFilesData();
|
||||||
};
|
};
|
||||||
|
@ -371,7 +393,7 @@ const handleNewTorrentFiles = function(files) {
|
||||||
if ((progress === 100) && (file.progress < 1))
|
if ((progress === 100) && (file.progress < 1))
|
||||||
progress = 99.9;
|
progress = 99.9;
|
||||||
|
|
||||||
const name = escapeHtml(file.name);
|
const name = window.qBittorrent.Misc.escapeHtml(file.name);
|
||||||
const ignore = (file.priority === FilePriority.Ignored);
|
const ignore = (file.priority === FilePriority.Ignored);
|
||||||
const checked = (ignore ? TriState.Unchecked : TriState.Checked);
|
const checked = (ignore ? TriState.Unchecked : TriState.Checked);
|
||||||
const remaining = (ignore ? 0 : (file.size * (1.0 - file.progress)));
|
const remaining = (ignore ? 0 : (file.size * (1.0 - file.progress)));
|
||||||
|
@ -379,7 +401,7 @@ const handleNewTorrentFiles = function(files) {
|
||||||
fileId: index,
|
fileId: index,
|
||||||
checked: checked,
|
checked: checked,
|
||||||
fileName: name,
|
fileName: name,
|
||||||
name: fileName(name),
|
name: window.qBittorrent.Filesystem.fileName(name),
|
||||||
size: file.size,
|
size: file.size,
|
||||||
progress: progress,
|
progress: progress,
|
||||||
priority: normalizePriority(file.priority),
|
priority: normalizePriority(file.priority),
|
||||||
|
@ -398,11 +420,11 @@ const addRowsToTable = function(rows) {
|
||||||
const selectedFiles = torrentFilesTable.selectedRowsIds();
|
const selectedFiles = torrentFilesTable.selectedRowsIds();
|
||||||
let rowId = 0;
|
let rowId = 0;
|
||||||
|
|
||||||
const rootNode = new FolderNode();
|
const rootNode = new window.qBittorrent.FileTree.FolderNode();
|
||||||
|
|
||||||
rows.forEach(function(row) {
|
rows.forEach(function(row) {
|
||||||
let parent = rootNode;
|
let parent = rootNode;
|
||||||
const pathFolders = row.fileName.split(PathSeparator);
|
const pathFolders = row.fileName.split(window.qBittorrent.Filesystem.PathSeparator);
|
||||||
pathFolders.pop();
|
pathFolders.pop();
|
||||||
pathFolders.forEach(function(folderName) {
|
pathFolders.forEach(function(folderName) {
|
||||||
if (folderName === '.unwanted')
|
if (folderName === '.unwanted')
|
||||||
|
@ -419,7 +441,7 @@ const addRowsToTable = function(rows) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (parentNode === null) {
|
if (parentNode === null) {
|
||||||
parentNode = new FolderNode();
|
parentNode = new window.qBittorrent.FileTree.FolderNode();
|
||||||
parentNode.name = folderName;
|
parentNode.name = folderName;
|
||||||
parentNode.rowId = rowId;
|
parentNode.rowId = rowId;
|
||||||
parentNode.root = parent;
|
parentNode.root = parent;
|
||||||
|
@ -433,7 +455,7 @@ const addRowsToTable = function(rows) {
|
||||||
|
|
||||||
const isChecked = row.checked ? TriState.Checked : TriState.Unchecked;
|
const isChecked = row.checked ? TriState.Checked : TriState.Unchecked;
|
||||||
const remaining = (row.priority === FilePriority.Ignored) ? 0 : row.remaining;
|
const remaining = (row.priority === FilePriority.Ignored) ? 0 : row.remaining;
|
||||||
const childNode = new FileNode();
|
const childNode = new window.qBittorrent.FileTree.FileNode();
|
||||||
childNode.name = row.name;
|
childNode.name = row.name;
|
||||||
childNode.rowId = rowId;
|
childNode.rowId = rowId;
|
||||||
childNode.size = row.size;
|
childNode.size = row.size;
|
||||||
|
@ -495,7 +517,7 @@ const filesPriorityMenuClicked = function(priority) {
|
||||||
setFilePriority(Object.keys(uniqueRowIds), Object.keys(uniqueFileIds), priority);
|
setFilePriority(Object.keys(uniqueRowIds), Object.keys(uniqueFileIds), priority);
|
||||||
};
|
};
|
||||||
|
|
||||||
const torrentFilesContextMenu = new ContextMenu({
|
const torrentFilesContextMenu = new window.qBittorrent.ContextMenu.ContextMenu({
|
||||||
targets: '#torrentFilesTableDiv tr',
|
targets: '#torrentFilesTableDiv tr',
|
||||||
menu: 'torrentFilesMenu',
|
menu: 'torrentFilesMenu',
|
||||||
actions: {
|
actions: {
|
||||||
|
@ -672,3 +694,6 @@ const _collapseNode = function(node, shouldCollapse, applyToChildren, isChildNod
|
||||||
_collapseNode(child, shouldCollapse, applyToChildren, true);
|
_collapseNode(child, shouldCollapse, applyToChildren, true);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
return exports();
|
||||||
|
})();
|
||||||
|
|
|
@ -28,6 +28,17 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
if (window.qBittorrent === undefined) {
|
||||||
|
window.qBittorrent = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
window.qBittorrent.PropGeneral = (function() {
|
||||||
|
const exports = function() {
|
||||||
|
return {
|
||||||
|
updateData: updateData
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
const clearData = function() {
|
const clearData = function() {
|
||||||
$('time_elapsed').set('html', '');
|
$('time_elapsed').set('html', '');
|
||||||
$('eta').set('html', '');
|
$('eta').set('html', '');
|
||||||
|
@ -88,13 +99,13 @@ const loadTorrentData = function() {
|
||||||
// Update Torrent data
|
// Update Torrent data
|
||||||
if (data.seeding_time > 0)
|
if (data.seeding_time > 0)
|
||||||
temp = "QBT_TR(%1 (%2 this session))QBT_TR[CONTEXT=PropertiesWidget]"
|
temp = "QBT_TR(%1 (%2 this session))QBT_TR[CONTEXT=PropertiesWidget]"
|
||||||
.replace("%1", friendlyDuration(data.time_elapsed))
|
.replace("%1", window.qBittorrent.Misc.friendlyDuration(data.time_elapsed))
|
||||||
.replace("%2", friendlyDuration(data.seeding_time));
|
.replace("%2", window.qBittorrent.Misc.friendlyDuration(data.seeding_time));
|
||||||
else
|
else
|
||||||
temp = friendlyDuration(data.time_elapsed);
|
temp = window.qBittorrent.Misc.friendlyDuration(data.time_elapsed);
|
||||||
$('time_elapsed').set('html', temp);
|
$('time_elapsed').set('html', temp);
|
||||||
|
|
||||||
$('eta').set('html', friendlyDuration(data.eta));
|
$('eta').set('html', window.qBittorrent.Misc.friendlyDuration(data.eta));
|
||||||
|
|
||||||
temp = "QBT_TR(%1 (%2 max))QBT_TR[CONTEXT=PropertiesWidget]"
|
temp = "QBT_TR(%1 (%2 max))QBT_TR[CONTEXT=PropertiesWidget]"
|
||||||
.replace("%1", data.nb_connections)
|
.replace("%1", data.nb_connections)
|
||||||
|
@ -102,32 +113,32 @@ const loadTorrentData = function() {
|
||||||
$('nb_connections').set('html', temp);
|
$('nb_connections').set('html', temp);
|
||||||
|
|
||||||
temp = "QBT_TR(%1 (%2 this session))QBT_TR[CONTEXT=PropertiesWidget]"
|
temp = "QBT_TR(%1 (%2 this session))QBT_TR[CONTEXT=PropertiesWidget]"
|
||||||
.replace("%1", friendlyUnit(data.total_downloaded))
|
.replace("%1", window.qBittorrent.Misc.friendlyUnit(data.total_downloaded))
|
||||||
.replace("%2", friendlyUnit(data.total_downloaded_session));
|
.replace("%2", window.qBittorrent.Misc.friendlyUnit(data.total_downloaded_session));
|
||||||
$('total_downloaded').set('html', temp);
|
$('total_downloaded').set('html', temp);
|
||||||
|
|
||||||
temp = "QBT_TR(%1 (%2 this session))QBT_TR[CONTEXT=PropertiesWidget]"
|
temp = "QBT_TR(%1 (%2 this session))QBT_TR[CONTEXT=PropertiesWidget]"
|
||||||
.replace("%1", friendlyUnit(data.total_uploaded))
|
.replace("%1", window.qBittorrent.Misc.friendlyUnit(data.total_uploaded))
|
||||||
.replace("%2", friendlyUnit(data.total_uploaded_session));
|
.replace("%2", window.qBittorrent.Misc.friendlyUnit(data.total_uploaded_session));
|
||||||
$('total_uploaded').set('html', temp);
|
$('total_uploaded').set('html', temp);
|
||||||
|
|
||||||
temp = "QBT_TR(%1 (%2 avg.))QBT_TR[CONTEXT=PropertiesWidget]"
|
temp = "QBT_TR(%1 (%2 avg.))QBT_TR[CONTEXT=PropertiesWidget]"
|
||||||
.replace("%1", friendlyUnit(data.dl_speed, true))
|
.replace("%1", window.qBittorrent.Misc.friendlyUnit(data.dl_speed, true))
|
||||||
.replace("%2", friendlyUnit(data.dl_speed_avg, true));
|
.replace("%2", window.qBittorrent.Misc.friendlyUnit(data.dl_speed_avg, true));
|
||||||
$('dl_speed').set('html', temp);
|
$('dl_speed').set('html', temp);
|
||||||
|
|
||||||
temp = "QBT_TR(%1 (%2 avg.))QBT_TR[CONTEXT=PropertiesWidget]"
|
temp = "QBT_TR(%1 (%2 avg.))QBT_TR[CONTEXT=PropertiesWidget]"
|
||||||
.replace("%1", friendlyUnit(data.up_speed, true))
|
.replace("%1", window.qBittorrent.Misc.friendlyUnit(data.up_speed, true))
|
||||||
.replace("%2", friendlyUnit(data.up_speed_avg, true));
|
.replace("%2", window.qBittorrent.Misc.friendlyUnit(data.up_speed_avg, true));
|
||||||
$('up_speed').set('html', temp);
|
$('up_speed').set('html', temp);
|
||||||
|
|
||||||
temp = (data.dl_limit == -1 ? "∞" : friendlyUnit(data.dl_limit, true));
|
temp = (data.dl_limit == -1 ? "∞" : window.qBittorrent.Misc.friendlyUnit(data.dl_limit, true));
|
||||||
$('dl_limit').set('html', temp);
|
$('dl_limit').set('html', temp);
|
||||||
|
|
||||||
temp = (data.up_limit == -1 ? "∞" : friendlyUnit(data.up_limit, true));
|
temp = (data.up_limit == -1 ? "∞" : window.qBittorrent.Misc.friendlyUnit(data.up_limit, true));
|
||||||
$('up_limit').set('html', temp);
|
$('up_limit').set('html', temp);
|
||||||
|
|
||||||
$('total_wasted').set('html', friendlyUnit(data.total_wasted));
|
$('total_wasted').set('html', window.qBittorrent.Misc.friendlyUnit(data.total_wasted));
|
||||||
|
|
||||||
temp = "QBT_TR(%1 (%2 total))QBT_TR[CONTEXT=PropertiesWidget]"
|
temp = "QBT_TR(%1 (%2 total))QBT_TR[CONTEXT=PropertiesWidget]"
|
||||||
.replace("%1", data.seeds)
|
.replace("%1", data.seeds)
|
||||||
|
@ -141,7 +152,7 @@ const loadTorrentData = function() {
|
||||||
|
|
||||||
$('share_ratio').set('html', data.share_ratio.toFixed(2));
|
$('share_ratio').set('html', data.share_ratio.toFixed(2));
|
||||||
|
|
||||||
$('reannounce').set('html', friendlyDuration(data.reannounce));
|
$('reannounce').set('html', window.qBittorrent.Misc.friendlyDuration(data.reannounce));
|
||||||
|
|
||||||
if (data.last_seen != -1)
|
if (data.last_seen != -1)
|
||||||
temp = new Date(data.last_seen * 1000).toLocaleString();
|
temp = new Date(data.last_seen * 1000).toLocaleString();
|
||||||
|
@ -149,18 +160,18 @@ const loadTorrentData = function() {
|
||||||
temp = "QBT_TR(Never)QBT_TR[CONTEXT=PropertiesWidget]";
|
temp = "QBT_TR(Never)QBT_TR[CONTEXT=PropertiesWidget]";
|
||||||
$('last_seen').set('html', temp);
|
$('last_seen').set('html', temp);
|
||||||
|
|
||||||
$('total_size').set('html', friendlyUnit(data.total_size));
|
$('total_size').set('html', window.qBittorrent.Misc.friendlyUnit(data.total_size));
|
||||||
|
|
||||||
if (data.pieces_num != -1)
|
if (data.pieces_num != -1)
|
||||||
temp = "QBT_TR(%1 x %2 (have %3))QBT_TR[CONTEXT=PropertiesWidget]"
|
temp = "QBT_TR(%1 x %2 (have %3))QBT_TR[CONTEXT=PropertiesWidget]"
|
||||||
.replace("%1", data.pieces_num)
|
.replace("%1", data.pieces_num)
|
||||||
.replace("%2", friendlyUnit(data.piece_size))
|
.replace("%2", window.qBittorrent.Misc.friendlyUnit(data.piece_size))
|
||||||
.replace("%3", data.pieces_have);
|
.replace("%3", data.pieces_have);
|
||||||
else
|
else
|
||||||
temp = "QBT_TR(Unknown)QBT_TR[CONTEXT=HttpServer]";
|
temp = "QBT_TR(Unknown)QBT_TR[CONTEXT=HttpServer]";
|
||||||
$('pieces').set('html', temp);
|
$('pieces').set('html', temp);
|
||||||
|
|
||||||
$('created_by').set('html', escapeHtml(data.created_by));
|
$('created_by').set('html', window.qBittorrent.Misc.escapeHtml(data.created_by));
|
||||||
if (data.addition_date != -1)
|
if (data.addition_date != -1)
|
||||||
temp = new Date(data.addition_date * 1000).toLocaleString();
|
temp = new Date(data.addition_date * 1000).toLocaleString();
|
||||||
else
|
else
|
||||||
|
@ -182,7 +193,7 @@ const loadTorrentData = function() {
|
||||||
|
|
||||||
$('save_path').set('html', data.save_path);
|
$('save_path').set('html', data.save_path);
|
||||||
|
|
||||||
$('comment').set('html', parseHtmlLinks(escapeHtml(data.comment)));
|
$('comment').set('html', window.qBittorrent.Misc.parseHtmlLinks(window.qBittorrent.Misc.escapeHtml(data.comment)));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
clearData();
|
clearData();
|
||||||
|
@ -193,7 +204,10 @@ const loadTorrentData = function() {
|
||||||
}).send();
|
}).send();
|
||||||
};
|
};
|
||||||
|
|
||||||
updateTorrentData = function() {
|
const updateData = function() {
|
||||||
clearTimeout(loadTorrentDataTimer);
|
clearTimeout(loadTorrentDataTimer);
|
||||||
loadTorrentData();
|
loadTorrentData();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
return exports();
|
||||||
|
})();
|
||||||
|
|
|
@ -28,9 +28,22 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
if (window.qBittorrent === undefined) {
|
||||||
|
window.qBittorrent = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
window.qBittorrent.PropPeers = (function() {
|
||||||
|
const exports = function() {
|
||||||
|
return {
|
||||||
|
updateData: updateData
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const torrentPeersTable = new window.qBittorrent.DynamicTable.TorrentPeersTable();
|
||||||
let loadTorrentPeersTimer;
|
let loadTorrentPeersTimer;
|
||||||
let syncTorrentPeersLastResponseId = 0;
|
let syncTorrentPeersLastResponseId = 0;
|
||||||
let show_flags = true;
|
let show_flags = true;
|
||||||
|
|
||||||
const loadTorrentPeersData = function() {
|
const loadTorrentPeersData = function() {
|
||||||
if ($('prop_peers').hasClass('invisible')
|
if ($('prop_peers').hasClass('invisible')
|
||||||
|| $('propertiesPanel_collapseToggle').hasClass('panel-expand')) {
|
|| $('propertiesPanel_collapseToggle').hasClass('panel-expand')) {
|
||||||
|
@ -70,7 +83,7 @@ const loadTorrentPeersData = function() {
|
||||||
response['peers'][key]['rowId'] = key;
|
response['peers'][key]['rowId'] = key;
|
||||||
|
|
||||||
if (response['peers'][key]['client'])
|
if (response['peers'][key]['client'])
|
||||||
response['peers'][key]['client'] = escapeHtml(response['peers'][key]['client']);
|
response['peers'][key]['client'] = window.qBittorrent.Misc.escapeHtml(response['peers'][key]['client']);
|
||||||
|
|
||||||
torrentPeersTable.updateRowData(response['peers'][key]);
|
torrentPeersTable.updateRowData(response['peers'][key]);
|
||||||
}
|
}
|
||||||
|
@ -98,12 +111,12 @@ const loadTorrentPeersData = function() {
|
||||||
}).send();
|
}).send();
|
||||||
};
|
};
|
||||||
|
|
||||||
updateTorrentPeersData = function() {
|
const updateData = function() {
|
||||||
clearTimeout(loadTorrentPeersTimer);
|
clearTimeout(loadTorrentPeersTimer);
|
||||||
loadTorrentPeersData();
|
loadTorrentPeersData();
|
||||||
};
|
};
|
||||||
|
|
||||||
const torrentPeersContextMenu = new ContextMenu({
|
const torrentPeersContextMenu = new window.qBittorrent.ContextMenu.ContextMenu({
|
||||||
targets: '#torrentPeersTableDiv',
|
targets: '#torrentPeersTableDiv',
|
||||||
menu: 'torrentPeersMenu',
|
menu: 'torrentPeersMenu',
|
||||||
actions: {
|
actions: {
|
||||||
|
@ -169,3 +182,6 @@ new ClipboardJS('#CopyPeerInfo', {
|
||||||
});
|
});
|
||||||
|
|
||||||
torrentPeersTable.setup('torrentPeersTableDiv', 'torrentPeersTableFixedHeaderDiv', torrentPeersContextMenu);
|
torrentPeersTable.setup('torrentPeersTableDiv', 'torrentPeersTableFixedHeaderDiv', torrentPeersContextMenu);
|
||||||
|
|
||||||
|
return exports();
|
||||||
|
})();
|
||||||
|
|
|
@ -28,9 +28,22 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
this.current_hash = "";
|
if (window.qBittorrent === undefined) {
|
||||||
|
window.qBittorrent = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
window.qBittorrent.PropTrackers = (function() {
|
||||||
|
const exports = function() {
|
||||||
|
return {
|
||||||
|
updateData: updateData
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
let current_hash = "";
|
||||||
|
|
||||||
|
const torrentTrackersTable = new window.qBittorrent.DynamicTable.TorrentTrackersTable();
|
||||||
let loadTrackersDataTimer;
|
let loadTrackersDataTimer;
|
||||||
|
|
||||||
const loadTrackersData = function() {
|
const loadTrackersData = function() {
|
||||||
if ($('prop_trackers').hasClass('invisible')
|
if ($('prop_trackers').hasClass('invisible')
|
||||||
|| $('propertiesPanel_collapseToggle').hasClass('panel-expand')) {
|
|| $('propertiesPanel_collapseToggle').hasClass('panel-expand')) {
|
||||||
|
@ -63,7 +76,7 @@ const loadTrackersData = function() {
|
||||||
|
|
||||||
if (trackers) {
|
if (trackers) {
|
||||||
trackers.each(function(tracker) {
|
trackers.each(function(tracker) {
|
||||||
const url = escapeHtml(tracker.url);
|
const url = window.qBittorrent.Misc.escapeHtml(tracker.url);
|
||||||
let status;
|
let status;
|
||||||
switch (tracker.status) {
|
switch (tracker.status) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -92,7 +105,7 @@ const loadTrackersData = function() {
|
||||||
seeds: (tracker.num_seeds >= 0) ? tracker.num_seeds : "QBT_TR(N/A)QBT_TR[CONTEXT=TrackerListWidget]",
|
seeds: (tracker.num_seeds >= 0) ? tracker.num_seeds : "QBT_TR(N/A)QBT_TR[CONTEXT=TrackerListWidget]",
|
||||||
leeches: (tracker.num_leeches >= 0) ? tracker.num_leeches : "QBT_TR(N/A)QBT_TR[CONTEXT=TrackerListWidget]",
|
leeches: (tracker.num_leeches >= 0) ? tracker.num_leeches : "QBT_TR(N/A)QBT_TR[CONTEXT=TrackerListWidget]",
|
||||||
downloaded: (tracker.num_downloaded >= 0) ? tracker.num_downloaded : "QBT_TR(N/A)QBT_TR[CONTEXT=TrackerListWidget]",
|
downloaded: (tracker.num_downloaded >= 0) ? tracker.num_downloaded : "QBT_TR(N/A)QBT_TR[CONTEXT=TrackerListWidget]",
|
||||||
message: escapeHtml(tracker.msg)
|
message: window.qBittorrent.Misc.escapeHtml(tracker.msg)
|
||||||
};
|
};
|
||||||
|
|
||||||
torrentTrackersTable.updateRowData(row);
|
torrentTrackersTable.updateRowData(row);
|
||||||
|
@ -108,12 +121,12 @@ const loadTrackersData = function() {
|
||||||
}).send();
|
}).send();
|
||||||
};
|
};
|
||||||
|
|
||||||
updateTrackersData = function() {
|
const updateData = function() {
|
||||||
clearTimeout(loadTrackersDataTimer);
|
clearTimeout(loadTrackersDataTimer);
|
||||||
loadTrackersData();
|
loadTrackersData();
|
||||||
};
|
};
|
||||||
|
|
||||||
const torrentTrackersContextMenu = new ContextMenu({
|
const torrentTrackersContextMenu = new window.qBittorrent.ContextMenu.ContextMenu({
|
||||||
targets: '#torrentTrackersTableDiv',
|
targets: '#torrentTrackersTableDiv',
|
||||||
menu: 'torrentTrackersMenu',
|
menu: 'torrentTrackersMenu',
|
||||||
actions: {
|
actions: {
|
||||||
|
@ -168,7 +181,7 @@ const addTrackerFN = function() {
|
||||||
width: 500,
|
width: 500,
|
||||||
height: 250,
|
height: 250,
|
||||||
onCloseComplete: function() {
|
onCloseComplete: function() {
|
||||||
updateTrackersData();
|
updateData();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -191,7 +204,7 @@ const editTrackerFN = function(element) {
|
||||||
width: 500,
|
width: 500,
|
||||||
height: 150,
|
height: 150,
|
||||||
onCloseComplete: function() {
|
onCloseComplete: function() {
|
||||||
updateTrackersData();
|
updateData();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -208,7 +221,7 @@ const removeTrackerFN = function(element) {
|
||||||
urls: selectedTrackers.join("|")
|
urls: selectedTrackers.join("|")
|
||||||
},
|
},
|
||||||
onSuccess: function() {
|
onSuccess: function() {
|
||||||
updateTrackersData();
|
updateData();
|
||||||
}
|
}
|
||||||
}).send();
|
}).send();
|
||||||
};
|
};
|
||||||
|
@ -220,3 +233,6 @@ new ClipboardJS('#CopyTrackerUrl', {
|
||||||
});
|
});
|
||||||
|
|
||||||
torrentTrackersTable.setup('torrentTrackersTableDiv', 'torrentTrackersTableFixedHeaderDiv', torrentTrackersContextMenu);
|
torrentTrackersTable.setup('torrentTrackersTableDiv', 'torrentTrackersTableFixedHeaderDiv', torrentTrackersContextMenu);
|
||||||
|
|
||||||
|
return exports();
|
||||||
|
})();
|
||||||
|
|
|
@ -28,6 +28,17 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
if (window.qBittorrent === undefined) {
|
||||||
|
window.qBittorrent = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
window.qBittorrent.PropWebseeds = (function() {
|
||||||
|
const exports = function() {
|
||||||
|
return {
|
||||||
|
updateData: updateData
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
const webseedsDynTable = new Class({
|
const webseedsDynTable = new Class({
|
||||||
|
|
||||||
initialize: function() {},
|
initialize: function() {},
|
||||||
|
@ -80,7 +91,7 @@ const webseedsDynTable = new Class({
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
this.current_hash = "";
|
let current_hash = "";
|
||||||
|
|
||||||
let loadWebSeedsDataTimer;
|
let loadWebSeedsDataTimer;
|
||||||
const loadWebSeedsData = function() {
|
const loadWebSeedsData = function() {
|
||||||
|
@ -130,10 +141,13 @@ const loadWebSeedsData = function() {
|
||||||
}).send();
|
}).send();
|
||||||
};
|
};
|
||||||
|
|
||||||
updateWebSeedsData = function() {
|
const updateData = function() {
|
||||||
clearTimeout(loadWebSeedsDataTimer);
|
clearTimeout(loadWebSeedsDataTimer);
|
||||||
loadWebSeedsData();
|
loadWebSeedsData();
|
||||||
};
|
};
|
||||||
|
|
||||||
const wsTable = new webseedsDynTable();
|
const wsTable = new webseedsDynTable();
|
||||||
wsTable.setup($('webseedsTable'));
|
wsTable.setup($('webseedsTable'));
|
||||||
|
|
||||||
|
return exports();
|
||||||
|
})();
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
const path = new URI().getData('path');
|
const path = new URI().getData('path');
|
||||||
// set text field to current value
|
// set text field to current value
|
||||||
if (path)
|
if (path)
|
||||||
$('setLocation').value = escapeHtml(decodeURIComponent(path));
|
$('setLocation').value = window.qBittorrent.Misc.escapeHtml(decodeURIComponent(path));
|
||||||
|
|
||||||
$('setLocation').focus();
|
$('setLocation').focus();
|
||||||
$('setLocationButton').addEvent('click', function(e) {
|
$('setLocationButton').addEvent('click', function(e) {
|
||||||
|
|
|
@ -37,9 +37,9 @@
|
||||||
const origValues = new URI().getData('orig').split('|');
|
const origValues = new URI().getData('orig').split('|');
|
||||||
|
|
||||||
const values = {
|
const values = {
|
||||||
ratioLimit: friendlyFloat(origValues[0], 2),
|
ratioLimit: window.qBittorrent.Misc.friendlyFloat(origValues[0], 2),
|
||||||
seedingTimeLimit: parseInt(origValues[1]),
|
seedingTimeLimit: parseInt(origValues[1]),
|
||||||
maxRatio: friendlyFloat(origValues[2], 2),
|
maxRatio: window.qBittorrent.Misc.friendlyFloat(origValues[2], 2),
|
||||||
maxSeedingTime: parseInt(origValues[3])
|
maxSeedingTime: parseInt(origValues[3])
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
<label for="autoTMM">QBT_TR(Torrent Management Mode:)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
|
<label for="autoTMM">QBT_TR(Torrent Management Mode:)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<select id="autoTMM" name="autoTMM" onchange="changeTMM(this)">
|
<select id="autoTMM" name="autoTMM" onchange="qBittorrent.Download.changeTMM(this)">
|
||||||
<option selected value="false">Manual</option>
|
<option selected value="false">Manual</option>
|
||||||
<option value="true">Automatic</option>
|
<option value="true">Automatic</option>
|
||||||
</select>
|
</select>
|
||||||
|
@ -51,7 +51,7 @@
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="select-watched-folder-editable">
|
<div class="select-watched-folder-editable">
|
||||||
<select id="categorySelect" onchange="changeCategorySelect(this)">
|
<select id="categorySelect" onchange="qBittorrent.Download.changeCategorySelect(this)">
|
||||||
<option selected value="\other"></option>
|
<option selected value="\other"></option>
|
||||||
</select>
|
</select>
|
||||||
<input name="category" type="text" value="" />
|
<input name="category" type="text" value="" />
|
||||||
|
|
|
@ -681,6 +681,7 @@
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
(function() {
|
||||||
$('qbittorrentVersion').innerText = ("qBittorrent " + qbtVersion()
|
$('qbittorrentVersion').innerText = ("qBittorrent " + qbtVersion()
|
||||||
+ " QBT_TR(Web UI)QBT_TR[CONTEXT=OptionsDialog]");
|
+ " QBT_TR(Web UI)QBT_TR[CONTEXT=OptionsDialog]");
|
||||||
|
|
||||||
|
@ -699,4 +700,5 @@
|
||||||
$('qbittorrentVersion').textContent += " (" + info.bitness + "-bit)";
|
$('qbittorrentVersion').textContent += " (" + info.bitness + "-bit)";
|
||||||
}
|
}
|
||||||
}).send();
|
}).send();
|
||||||
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
(function() {
|
||||||
MochaUI.initializeTabs('aboutTabs');
|
MochaUI.initializeTabs('aboutTabs');
|
||||||
|
|
||||||
$('aboutAboutLink').addEvent('click', function() {
|
$('aboutAboutLink').addEvent('click', function() {
|
||||||
|
@ -44,4 +45,5 @@
|
||||||
$$('.aboutTabContent').addClass('invisible');
|
$$('.aboutTabContent').addClass('invisible');
|
||||||
$('aboutLibrariesContent').removeClass('invisible');
|
$('aboutLibrariesContent').removeClass('invisible');
|
||||||
});
|
});
|
||||||
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -32,7 +32,19 @@
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const categoriesFilterContextMenu = new CategoriesFilterContextMenu({
|
if (window.qBittorrent === undefined) {
|
||||||
|
window.qBittorrent = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
window.qBittorrent.Filters = (function() {
|
||||||
|
const exports = function() {
|
||||||
|
return {
|
||||||
|
categoriesFilterContextMenu: categoriesFilterContextMenu,
|
||||||
|
tagsFilterContextMenu: tagsFilterContextMenu
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const categoriesFilterContextMenu = new window.qBittorrent.ContextMenu.CategoriesFilterContextMenu({
|
||||||
targets: '.categoriesFilterContextMenuTarget',
|
targets: '.categoriesFilterContextMenuTarget',
|
||||||
menu: 'categoriesFilterMenu',
|
menu: 'categoriesFilterMenu',
|
||||||
actions: {
|
actions: {
|
||||||
|
@ -67,7 +79,7 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const tagsFilterContextMenu = new TagsFilterContextMenu({
|
const tagsFilterContextMenu = new window.qBittorrent.ContextMenu.TagsFilterContextMenu({
|
||||||
targets: '.tagsFilterContextMenuTarget',
|
targets: '.tagsFilterContextMenuTarget',
|
||||||
menu: 'tagsFilterMenu',
|
menu: 'tagsFilterMenu',
|
||||||
actions: {
|
actions: {
|
||||||
|
@ -107,4 +119,7 @@
|
||||||
|
|
||||||
if (LocalPreferences.get('filter_tag_collapsed') === "true")
|
if (LocalPreferences.get('filter_tag_collapsed') === "true")
|
||||||
toggleFilterDisplay('tag');
|
toggleFilterDisplay('tag');
|
||||||
|
|
||||||
|
return exports();
|
||||||
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -20,8 +20,8 @@
|
||||||
<div>
|
<div>
|
||||||
<input type="text" id="newPluginPath" placeholder="QBT_TR(URL or local directory)QBT_TR[CONTEXT=PluginSourceDlg]" autocorrect="off" autocapitalize="none" />
|
<input type="text" id="newPluginPath" placeholder="QBT_TR(URL or local directory)QBT_TR[CONTEXT=PluginSourceDlg]" autocorrect="off" autocapitalize="none" />
|
||||||
<div style="margin-top: 10px; text-align: center;">
|
<div style="margin-top: 10px; text-align: center;">
|
||||||
<button id="newPluginCancel" onclick="closeSearchWindow('installSearchPlugin');">QBT_TR(Cancel)QBT_TR[CONTEXT=PluginSourceDlg]</button>
|
<button id="newPluginCancel" onclick="qBittorrent.SearchPlugins.closeSearchWindow('installSearchPlugin');">QBT_TR(Cancel)QBT_TR[CONTEXT=PluginSourceDlg]</button>
|
||||||
<button id="newPluginOk" onclick="newPluginOk();">QBT_TR(Ok)QBT_TR[CONTEXT=PluginSourceDlg]</button>
|
<button id="newPluginOk" onclick="qBittorrent.InstallSearchPlugin.newPluginOk();">QBT_TR(Ok)QBT_TR[CONTEXT=PluginSourceDlg]</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -29,7 +29,18 @@
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
this.initInstallSearchPlugin = function() {
|
if (window.qBittorrent === undefined) {
|
||||||
|
window.qBittorrent = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
window.qBittorrent.InstallSearchPlugin = (function() {
|
||||||
|
const exports = function() {
|
||||||
|
return {
|
||||||
|
newPluginOk: newPluginOk
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const init = function() {
|
||||||
new Keyboard({
|
new Keyboard({
|
||||||
defaultEventType: 'keydown',
|
defaultEventType: 'keydown',
|
||||||
events: {
|
events: {
|
||||||
|
@ -41,7 +52,7 @@
|
||||||
if ((elem.id === "newPluginPath") || (elem.id === "newPluginOk"))
|
if ((elem.id === "newPluginPath") || (elem.id === "newPluginOk"))
|
||||||
newPluginOk();
|
newPluginOk();
|
||||||
else if (elem.id === "newPluginCancel")
|
else if (elem.id === "newPluginCancel")
|
||||||
closeSearchWindow('installSearchPlugin');
|
window.qBittorrent.SearchPlugins.closeSearchWindow('installSearchPlugin');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}).activate();
|
}).activate();
|
||||||
|
@ -49,7 +60,7 @@
|
||||||
$('newPluginPath').select();
|
$('newPluginPath').select();
|
||||||
};
|
};
|
||||||
|
|
||||||
this.newPluginOk = function() {
|
const newPluginOk = function() {
|
||||||
const path = $("newPluginPath").get("value").trim();
|
const path = $("newPluginPath").get("value").trim();
|
||||||
if (path)
|
if (path)
|
||||||
new Request({
|
new Request({
|
||||||
|
@ -60,10 +71,13 @@
|
||||||
sources: path,
|
sources: path,
|
||||||
},
|
},
|
||||||
onRequest: function() {
|
onRequest: function() {
|
||||||
closeSearchWindow('installSearchPlugin');
|
window.qBittorrent.SearchPlugins.closeSearchWindow('installSearchPlugin');
|
||||||
}
|
}
|
||||||
}).send();
|
}).send();
|
||||||
};
|
};
|
||||||
|
|
||||||
initInstallSearchPlugin();
|
init();
|
||||||
|
|
||||||
|
return exports();
|
||||||
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -85,7 +85,7 @@
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<input type="checkbox" id="temppath_checkbox" onclick="updateTempDirEnabled();" />
|
<input type="checkbox" id="temppath_checkbox" onclick="qBittorrent.Preferences.updateTempDirEnabled();" />
|
||||||
<label for="temppath_checkbox">QBT_TR(Keep incomplete torrents in:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="temppath_checkbox">QBT_TR(Keep incomplete torrents in:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
|
@ -94,7 +94,7 @@
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<input type="checkbox" id="exportdir_checkbox" onclick="updateExportDirEnabled();" />
|
<input type="checkbox" id="exportdir_checkbox" onclick="qBittorrent.Preferences.updateExportDirEnabled();" />
|
||||||
<label for="exportdir_checkbox">QBT_TR(Copy .torrent files to:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="exportdir_checkbox">QBT_TR(Copy .torrent files to:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
|
@ -103,7 +103,7 @@
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<input type="checkbox" id="exportdirfin_checkbox" onclick="updateExportDirFinEnabled();" />
|
<input type="checkbox" id="exportdirfin_checkbox" onclick="qBittorrent.Preferences.updateExportDirFinEnabled();" />
|
||||||
<label for="exportdirfin_checkbox">QBT_TR(Copy .torrent files for finished downloads to:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="exportdirfin_checkbox">QBT_TR(Copy .torrent files for finished downloads to:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
|
@ -128,13 +128,13 @@
|
||||||
<td style="padding-top:4px;"><input type="text" id="new_watch_folder_txt" autocorrect="off" autocapitalize="none" /></td>
|
<td style="padding-top:4px;"><input type="text" id="new_watch_folder_txt" autocorrect="off" autocapitalize="none" /></td>
|
||||||
<td style="padding-top:4px;">
|
<td style="padding-top:4px;">
|
||||||
<div class="select-watched-folder-editable">
|
<div class="select-watched-folder-editable">
|
||||||
<select id="new_watch_folder_select" onchange="changeWatchFolderSelect(this)">
|
<select id="new_watch_folder_select" onchange="qBittorrent.Preferences.changeWatchFolderSelect(this)">
|
||||||
<option selected value="watch_folder">QBT_TR(Monitored folder)QBT_TR[CONTEXT=ScanFoldersModel]</option>
|
<option selected value="watch_folder">QBT_TR(Monitored folder)QBT_TR[CONTEXT=ScanFoldersModel]</option>
|
||||||
<option value="default_folder">QBT_TR(Default save location)QBT_TR[CONTEXT=ScanFoldersModel]</option>
|
<option value="default_folder">QBT_TR(Default save location)QBT_TR[CONTEXT=ScanFoldersModel]</option>
|
||||||
<option value="other">QBT_TR(Other...)QBT_TR[CONTEXT=HttpServer]</option>
|
<option value="other">QBT_TR(Other...)QBT_TR[CONTEXT=HttpServer]</option>
|
||||||
</select>
|
</select>
|
||||||
<input id="new_watch_folder_other_txt" type="text" value="QBT_TR(Monitored folder)QBT_TR[CONTEXT=ScanFoldersModel]" hidden />
|
<input id="new_watch_folder_other_txt" type="text" value="QBT_TR(Monitored folder)QBT_TR[CONTEXT=ScanFoldersModel]" hidden />
|
||||||
<img src="images/qbt-theme/list-add.svg" alt="Add" style="padding-left:170px;width:16px;cursor:pointer;" onclick="addWatchFolder();" />
|
<img src="images/qbt-theme/list-add.svg" alt="Add" style="padding-left:170px;width:16px;cursor:pointer;" onclick="qBittorrent.Preferences.addWatchFolder();" />
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -144,7 +144,7 @@
|
||||||
|
|
||||||
<fieldset class="settings">
|
<fieldset class="settings">
|
||||||
<legend>
|
<legend>
|
||||||
<input type="checkbox" id="mail_notification_checkbox" onclick="updateMailNotification();" />
|
<input type="checkbox" id="mail_notification_checkbox" onclick="qBittorrent.Preferences.updateMailNotification();" />
|
||||||
<label for="mail_notification_checkbox">QBT_TR(Email notification upon download completion)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="mail_notification_checkbox">QBT_TR(Email notification upon download completion)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</legend>
|
</legend>
|
||||||
<table>
|
<table>
|
||||||
|
@ -178,7 +178,7 @@
|
||||||
</div>
|
</div>
|
||||||
<fieldset class="settings">
|
<fieldset class="settings">
|
||||||
<legend>
|
<legend>
|
||||||
<input type="checkbox" id="mail_auth_checkbox" onclick="updateMailAuthSettings();" />
|
<input type="checkbox" id="mail_auth_checkbox" onclick="qBittorrent.Preferences.updateMailAuthSettings();" />
|
||||||
<label for="mail_auth_checkbox">QBT_TR(Authentication)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="mail_auth_checkbox">QBT_TR(Authentication)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</legend>
|
</legend>
|
||||||
<table>
|
<table>
|
||||||
|
@ -204,7 +204,7 @@
|
||||||
|
|
||||||
<fieldset class="settings">
|
<fieldset class="settings">
|
||||||
<legend>
|
<legend>
|
||||||
<input type="checkbox" id="autorun_checkbox" onclick="updateAutoRun();" />
|
<input type="checkbox" id="autorun_checkbox" onclick="qBittorrent.Preferences.updateAutoRun();" />
|
||||||
<label for="autorun_checkbox">QBT_TR(Run external program on torrent completion)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="autorun_checkbox">QBT_TR(Run external program on torrent completion)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</legend>
|
</legend>
|
||||||
<div class="formRow">
|
<div class="formRow">
|
||||||
|
@ -242,14 +242,14 @@
|
||||||
<div class="formRow">
|
<div class="formRow">
|
||||||
<label for="port_value">QBT_TR(Port used for incoming connections:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="port_value">QBT_TR(Port used for incoming connections:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
<input type="text" id="port_value" style="width: 4em;" />
|
<input type="text" id="port_value" style="width: 4em;" />
|
||||||
<button style="margin-left: 1em;" onclick="generateRandomPort();">Random</button>
|
<button style="margin-left: 1em;" onclick="qBittorrent.Preferences.generateRandomPort();">Random</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="formRow">
|
<div class="formRow">
|
||||||
<input type="checkbox" id="upnp_checkbox" />
|
<input type="checkbox" id="upnp_checkbox" />
|
||||||
<label for="upnp_checkbox">QBT_TR(Use UPnP / NAT-PMP port forwarding from my router)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="upnp_checkbox">QBT_TR(Use UPnP / NAT-PMP port forwarding from my router)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="formRow">
|
<div class="formRow">
|
||||||
<input type="checkbox" id="random_port_checkbox" onclick="updatePortValueEnabled();" />
|
<input type="checkbox" id="random_port_checkbox" onclick="qBittorrent.Preferences.updatePortValueEnabled();" />
|
||||||
<label for="random_port_checkbox">QBT_TR(Use different port on each startup)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="random_port_checkbox">QBT_TR(Use different port on each startup)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
@ -259,28 +259,28 @@
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<input type="checkbox" id="max_connec_checkbox" onclick="updateMaxConnecEnabled();" />
|
<input type="checkbox" id="max_connec_checkbox" onclick="qBittorrent.Preferences.updateMaxConnecEnabled();" />
|
||||||
<label for="max_connec_checkbox">QBT_TR(Global maximum number of connections:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="max_connec_checkbox">QBT_TR(Global maximum number of connections:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</td>
|
</td>
|
||||||
<td><input type="text" id="max_connec_value" style="width: 4em;" /></td>
|
<td><input type="text" id="max_connec_value" style="width: 4em;" /></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<input type="checkbox" id="max_connec_per_torrent_checkbox" onclick="updateMaxConnecPerTorrentEnabled();" />
|
<input type="checkbox" id="max_connec_per_torrent_checkbox" onclick="qBittorrent.Preferences.updateMaxConnecPerTorrentEnabled();" />
|
||||||
<label for="max_connec_per_torrent_checkbox">QBT_TR(Maximum number of connections per torrent:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="max_connec_per_torrent_checkbox">QBT_TR(Maximum number of connections per torrent:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</td>
|
</td>
|
||||||
<td><input type="text" id="max_connec_per_torrent_value" style="width: 4em;" /></td>
|
<td><input type="text" id="max_connec_per_torrent_value" style="width: 4em;" /></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<input type="checkbox" id="max_uploads_checkbox" onclick="updateMaxUploadsEnabled();" />
|
<input type="checkbox" id="max_uploads_checkbox" onclick="qBittorrent.Preferences.updateMaxUploadsEnabled();" />
|
||||||
<label for="max_uploads_checkbox">QBT_TR(Global maximum number of upload slots:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="max_uploads_checkbox">QBT_TR(Global maximum number of upload slots:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</td>
|
</td>
|
||||||
<td><input type="text" id="max_uploads_value" style="width: 4em;" /></td>
|
<td><input type="text" id="max_uploads_value" style="width: 4em;" /></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<input type="checkbox" id="max_uploads_per_torrent_checkbox" onclick="updateMaxUploadsPerTorrentEnabled();" />
|
<input type="checkbox" id="max_uploads_per_torrent_checkbox" onclick="qBittorrent.Preferences.updateMaxUploadsPerTorrentEnabled();" />
|
||||||
<label for="max_uploads_per_torrent_checkbox">QBT_TR(Maximum number of upload slots per torrent:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="max_uploads_per_torrent_checkbox">QBT_TR(Maximum number of upload slots per torrent:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</td>
|
</td>
|
||||||
<td><input type="text" id="max_uploads_per_torrent_value" style="width: 4em;" /></td>
|
<td><input type="text" id="max_uploads_per_torrent_value" style="width: 4em;" /></td>
|
||||||
|
@ -296,7 +296,7 @@
|
||||||
<label for="peer_proxy_type_select">QBT_TR(Type:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="peer_proxy_type_select">QBT_TR(Type:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<select id="peer_proxy_type_select" onchange="updatePeerProxySettings();">
|
<select id="peer_proxy_type_select" onchange="qBittorrent.Preferences.updatePeerProxySettings();">
|
||||||
<option value="none">QBT_TR((None))QBT_TR[CONTEXT=OptionsDialog]</option>
|
<option value="none">QBT_TR((None))QBT_TR[CONTEXT=OptionsDialog]</option>
|
||||||
<option value="socks4">QBT_TR(SOCKS4)QBT_TR[CONTEXT=OptionsDialog]</option>
|
<option value="socks4">QBT_TR(SOCKS4)QBT_TR[CONTEXT=OptionsDialog]</option>
|
||||||
<option value="socks5">QBT_TR(SOCKS5)QBT_TR[CONTEXT=OptionsDialog]</option>
|
<option value="socks5">QBT_TR(SOCKS5)QBT_TR[CONTEXT=OptionsDialog]</option>
|
||||||
|
@ -327,7 +327,7 @@
|
||||||
</div>
|
</div>
|
||||||
<fieldset class="settings">
|
<fieldset class="settings">
|
||||||
<legend>
|
<legend>
|
||||||
<input type="checkbox" id="peer_proxy_auth_checkbox" onclick="updatePeerProxyAuthSettings();" />
|
<input type="checkbox" id="peer_proxy_auth_checkbox" onclick="qBittorrent.Preferences.updatePeerProxyAuthSettings();" />
|
||||||
<label for="peer_proxy_auth_checkbox">QBT_TR(Authentication)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="peer_proxy_auth_checkbox">QBT_TR(Authentication)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</legend>
|
</legend>
|
||||||
<table>
|
<table>
|
||||||
|
@ -356,7 +356,7 @@
|
||||||
|
|
||||||
<fieldset class="settings">
|
<fieldset class="settings">
|
||||||
<legend>
|
<legend>
|
||||||
<input type="checkbox" id="ipfilter_enabled_checkbox" onclick="updateFilterSettings();" />
|
<input type="checkbox" id="ipfilter_enabled_checkbox" onclick="qBittorrent.Preferences.updateFilterSettings();" />
|
||||||
<label for="ipfilter_enabled_checkbox">QBT_TR(IP Filtering)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="ipfilter_enabled_checkbox">QBT_TR(IP Filtering)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</legend>
|
</legend>
|
||||||
<div class="formRow">
|
<div class="formRow">
|
||||||
|
@ -414,7 +414,7 @@
|
||||||
|
|
||||||
<fieldset class="settings">
|
<fieldset class="settings">
|
||||||
<legend>
|
<legend>
|
||||||
<input type="checkbox" id="limit_sheduling_checkbox" onclick="updateSchedulingEnabled();" />
|
<input type="checkbox" id="limit_sheduling_checkbox" onclick="qBittorrent.Preferences.updateSchedulingEnabled();" />
|
||||||
<label for="limit_sheduling_checkbox">QBT_TR(Schedule the use of alternative rate limits)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="limit_sheduling_checkbox">QBT_TR(Schedule the use of alternative rate limits)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</legend>
|
</legend>
|
||||||
<div class="formRow">
|
<div class="formRow">
|
||||||
|
@ -488,7 +488,7 @@
|
||||||
|
|
||||||
<fieldset class="settings">
|
<fieldset class="settings">
|
||||||
<legend>
|
<legend>
|
||||||
<input type="checkbox" id="queueing_checkbox" onclick="updateQueueingSystem();" />
|
<input type="checkbox" id="queueing_checkbox" onclick="qBittorrent.Preferences.updateQueueingSystem();" />
|
||||||
<label for="queueing_checkbox">QBT_TR(Torrent Queueing)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="queueing_checkbox">QBT_TR(Torrent Queueing)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</legend>
|
</legend>
|
||||||
<table>
|
<table>
|
||||||
|
@ -519,7 +519,7 @@
|
||||||
</table>
|
</table>
|
||||||
<fieldset class="settings">
|
<fieldset class="settings">
|
||||||
<legend>
|
<legend>
|
||||||
<input type="checkbox" id="dont_count_slow_torrents_checkbox" onclick="updateSlowTorrentsSettings();" />
|
<input type="checkbox" id="dont_count_slow_torrents_checkbox" onclick="qBittorrent.Preferences.updateSlowTorrentsSettings();" />
|
||||||
<label for="dont_count_slow_torrents_checkbox">QBT_TR(Do not count slow torrents in these limits)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="dont_count_slow_torrents_checkbox">QBT_TR(Do not count slow torrents in these limits)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</legend>
|
</legend>
|
||||||
<table>
|
<table>
|
||||||
|
@ -556,7 +556,7 @@
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<input type="checkbox" id="max_ratio_checkbox" onclick="updateMaxRatioTimeEnabled();" />
|
<input type="checkbox" id="max_ratio_checkbox" onclick="qBittorrent.Preferences.updateMaxRatioTimeEnabled();" />
|
||||||
<label for="max_ratio_checkbox">QBT_TR(Seed torrents until their ratio reaches)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="max_ratio_checkbox">QBT_TR(Seed torrents until their ratio reaches)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
|
@ -564,7 +564,7 @@
|
||||||
</td>
|
</td>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<input type="checkbox" id="max_seeding_time_checkbox" onclick="updateMaxRatioTimeEnabled();" />
|
<input type="checkbox" id="max_seeding_time_checkbox" onclick="qBittorrent.Preferences.updateMaxRatioTimeEnabled();" />
|
||||||
<label for="max_seeding_time_checkbox">QBT_TR(Seed torrents until their seeding time reaches)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="max_seeding_time_checkbox">QBT_TR(Seed torrents until their seeding time reaches)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
|
@ -588,7 +588,7 @@
|
||||||
|
|
||||||
<fieldset class="settings">
|
<fieldset class="settings">
|
||||||
<legend>
|
<legend>
|
||||||
<input type="checkbox" id="add_trackers_checkbox" onclick="updateAddTrackersEnabled();" />
|
<input type="checkbox" id="add_trackers_checkbox" onclick="qBittorrent.Preferences.updateAddTrackersEnabled();" />
|
||||||
<label for="add_trackers_checkbox">QBT_TR(Automatically add these trackers to new downloads:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="add_trackers_checkbox">QBT_TR(Automatically add these trackers to new downloads:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</legend>
|
</legend>
|
||||||
<textarea id="add_trackers_textarea" rows="5" cols="70"></textarea>
|
<textarea id="add_trackers_textarea" rows="5" cols="70"></textarea>
|
||||||
|
@ -673,7 +673,7 @@
|
||||||
</div>
|
</div>
|
||||||
<fieldset class="settings">
|
<fieldset class="settings">
|
||||||
<legend>
|
<legend>
|
||||||
<input type="checkbox" id="use_https_checkbox" onclick="updateHttpsSettings();" />
|
<input type="checkbox" id="use_https_checkbox" onclick="qBittorrent.Preferences.updateHttpsSettings();" />
|
||||||
<label for="use_https_checkbox">QBT_TR(Use HTTPS instead of HTTP)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="use_https_checkbox">QBT_TR(Use HTTPS instead of HTTP)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</legend>
|
</legend>
|
||||||
<table>
|
<table>
|
||||||
|
@ -722,7 +722,7 @@
|
||||||
<label for="bypass_local_auth_checkbox">QBT_TR(Bypass authentication for clients on localhost)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="bypass_local_auth_checkbox">QBT_TR(Bypass authentication for clients on localhost)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="formRow">
|
<div class="formRow">
|
||||||
<input type="checkbox" id="bypass_auth_subnet_whitelist_checkbox" onclick="updateBypasssAuthSettings();" />
|
<input type="checkbox" id="bypass_auth_subnet_whitelist_checkbox" onclick="qBittorrent.Preferences.updateBypasssAuthSettings();" />
|
||||||
<label for="bypass_auth_subnet_whitelist_checkbox">QBT_TR(Bypass authentication for clients in whitelisted IP subnets)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="bypass_auth_subnet_whitelist_checkbox">QBT_TR(Bypass authentication for clients in whitelisted IP subnets)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="formRow" style="padding-left: 30px; padding-top: 5px;">
|
<div class="formRow" style="padding-left: 30px; padding-top: 5px;">
|
||||||
|
@ -737,7 +737,7 @@
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
<fieldset class="settings">
|
<fieldset class="settings">
|
||||||
<legend><input type="checkbox" id="use_alt_webui_checkbox" onclick="updateAlternativeWebUISettings();" />
|
<legend><input type="checkbox" id="use_alt_webui_checkbox" onclick="qBittorrent.Preferences.updateAlternativeWebUISettings();" />
|
||||||
<label for="use_alt_webui_checkbox">QBT_TR(Use alternative Web UI)QBT_TR[CONTEXT=OptionsDialog]</label></legend>
|
<label for="use_alt_webui_checkbox">QBT_TR(Use alternative Web UI)QBT_TR[CONTEXT=OptionsDialog]</label></legend>
|
||||||
<div class="formRow">
|
<div class="formRow">
|
||||||
<label for="webui_files_location_textarea">QBT_TR(Files location:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="webui_files_location_textarea">QBT_TR(Files location:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
|
@ -758,7 +758,7 @@
|
||||||
|
|
||||||
<fieldset class="settings">
|
<fieldset class="settings">
|
||||||
<legend>
|
<legend>
|
||||||
<input type="checkbox" id="host_header_validation_checkbox" onclick="updateHostHeaderValidationSettings();" />
|
<input type="checkbox" id="host_header_validation_checkbox" onclick="qBittorrent.Preferences.updateHostHeaderValidationSettings();" />
|
||||||
<label for="host_header_validation_checkbox">QBT_TR(Enable Host header validation)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="host_header_validation_checkbox">QBT_TR(Enable Host header validation)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</legend>
|
</legend>
|
||||||
<table>
|
<table>
|
||||||
|
@ -777,14 +777,14 @@
|
||||||
|
|
||||||
<fieldset class="settings">
|
<fieldset class="settings">
|
||||||
<legend>
|
<legend>
|
||||||
<input type="checkbox" id="use_dyndns_checkbox" onclick="updateDynDnsSettings();" />
|
<input type="checkbox" id="use_dyndns_checkbox" onclick="qBittorrent.Preferences.updateDynDnsSettings();" />
|
||||||
<label for="use_dyndns_checkbox">QBT_TR(Update my dynamic domain name)QBT_TR[CONTEXT=OptionsDialog]</label>
|
<label for="use_dyndns_checkbox">QBT_TR(Update my dynamic domain name)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
</legend>
|
</legend>
|
||||||
<select id="dyndns_select">
|
<select id="dyndns_select">
|
||||||
<option value="0">DynDNS</option>
|
<option value="0">DynDNS</option>
|
||||||
<option value="1">NO-IP</option>
|
<option value="1">NO-IP</option>
|
||||||
</select>
|
</select>
|
||||||
<input type="button" value="QBT_TR(Register)QBT_TR[CONTEXT=OptionsDialog]" onclick="registerDynDns();" />
|
<input type="button" value="QBT_TR(Register)QBT_TR[CONTEXT=OptionsDialog]" onclick="qBittorrent.Preferences.registerDynDns();" />
|
||||||
<table style="margin-top: 10px;">
|
<table style="margin-top: 10px;">
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
|
@ -1079,20 +1079,60 @@
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style="text-align: center; margin-top: 1em;"><input type="button" value="QBT_TR(Save)QBT_TR[CONTEXT=HttpServer]" onclick="applyPreferences();" /></div>
|
<div style="text-align: center; margin-top: 1em;"><input type="button" value="QBT_TR(Save)QBT_TR[CONTEXT=HttpServer]" onclick="qBittorrent.Preferences.applyPreferences();" /></div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// Downloads tab
|
if (window.qBittorrent === undefined) {
|
||||||
this.WatchedFoldersTable = new HtmlTable($("watched_folders_tab"));
|
window.qBittorrent = {};
|
||||||
|
}
|
||||||
|
|
||||||
this.updateTempDirEnabled = function() {
|
window.qBittorrent.Preferences = (function() {
|
||||||
|
const exports = function() {
|
||||||
|
return {
|
||||||
|
updateTempDirEnabled: updateTempDirEnabled,
|
||||||
|
updateExportDirEnabled: updateExportDirEnabled,
|
||||||
|
updateExportDirFinEnabled: updateExportDirFinEnabled,
|
||||||
|
addWatchFolder: addWatchFolder,
|
||||||
|
changeWatchFolderSelect: changeWatchFolderSelect,
|
||||||
|
updateMailNotification: updateMailNotification,
|
||||||
|
updateMailAuthSettings: updateMailAuthSettings,
|
||||||
|
updateAutoRun: updateAutoRun,
|
||||||
|
generateRandomPort: generateRandomPort,
|
||||||
|
updatePortValueEnabled: updatePortValueEnabled,
|
||||||
|
updateMaxConnecEnabled: updateMaxConnecEnabled,
|
||||||
|
updateMaxConnecPerTorrentEnabled: updateMaxConnecPerTorrentEnabled,
|
||||||
|
updateMaxUploadsEnabled: updateMaxUploadsEnabled,
|
||||||
|
updateMaxUploadsPerTorrentEnabled: updateMaxUploadsPerTorrentEnabled,
|
||||||
|
updatePeerProxySettings: updatePeerProxySettings,
|
||||||
|
updatePeerProxyAuthSettings: updatePeerProxyAuthSettings,
|
||||||
|
updateFilterSettings: updateFilterSettings,
|
||||||
|
updateSchedulingEnabled: updateSchedulingEnabled,
|
||||||
|
updateQueueingSystem: updateQueueingSystem,
|
||||||
|
updateSlowTorrentsSettings: updateSlowTorrentsSettings,
|
||||||
|
updateMaxRatioTimeEnabled: updateMaxRatioTimeEnabled,
|
||||||
|
updateMaxRatioTimeEnabled: updateMaxRatioTimeEnabled,
|
||||||
|
updateAddTrackersEnabled: updateAddTrackersEnabled,
|
||||||
|
updateHttpsSettings: updateHttpsSettings,
|
||||||
|
updateBypasssAuthSettings: updateBypasssAuthSettings,
|
||||||
|
updateAlternativeWebUISettings: updateAlternativeWebUISettings,
|
||||||
|
updateHostHeaderValidationSettings: updateHostHeaderValidationSettings,
|
||||||
|
updateDynDnsSettings: updateDynDnsSettings,
|
||||||
|
registerDynDns: registerDynDns,
|
||||||
|
applyPreferences: applyPreferences
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Downloads tab
|
||||||
|
const WatchedFoldersTable = new HtmlTable($("watched_folders_tab"));
|
||||||
|
|
||||||
|
const updateTempDirEnabled = function() {
|
||||||
const isTempDirEnabled = $('temppath_checkbox').getProperty('checked');
|
const isTempDirEnabled = $('temppath_checkbox').getProperty('checked');
|
||||||
$('temppath_text').setProperty('disabled', !isTempDirEnabled);
|
$('temppath_text').setProperty('disabled', !isTempDirEnabled);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.addWatchFolder = function() {
|
const addWatchFolder = function() {
|
||||||
const new_folder = $('new_watch_folder_txt').getProperty('value').trim();
|
const new_folder = $('new_watch_folder_txt').getProperty('value').trim();
|
||||||
if (new_folder.length <= 0) return;
|
if (new_folder.length <= 0) return;
|
||||||
|
|
||||||
|
@ -1112,7 +1152,7 @@
|
||||||
$('new_watch_folder_other_txt').setProperty('value', text);
|
$('new_watch_folder_other_txt').setProperty('value', text);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.changeWatchFolderSelect = function(item) {
|
const changeWatchFolderSelect = function(item) {
|
||||||
if (item.value == "other") {
|
if (item.value == "other") {
|
||||||
item.nextElementSibling.hidden = false;
|
item.nextElementSibling.hidden = false;
|
||||||
item.nextElementSibling.value = 'QBT_TR(Type folder here)QBT_TR[CONTEXT=HttpServer]';
|
item.nextElementSibling.value = 'QBT_TR(Type folder here)QBT_TR[CONTEXT=HttpServer]';
|
||||||
|
@ -1125,11 +1165,11 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.pushWatchFolder = function(pos, folder, sel, other) {
|
const pushWatchFolder = function(pos, folder, sel, other) {
|
||||||
const myinput = "<input id='text_watch_" + pos + "' type='text' value='" + folder + "'>";
|
const myinput = "<input id='text_watch_" + pos + "' type='text' value='" + folder + "'>";
|
||||||
const disableInput = (sel != "other");
|
const disableInput = (sel != "other");
|
||||||
const mycb = "<div class='select-watched-folder-editable'>"
|
const mycb = "<div class='select-watched-folder-editable'>"
|
||||||
+ "<select id ='cb_watch_" + pos + "' onchange='changeWatchFolderSelect(this)'>"
|
+ "<select id ='cb_watch_" + pos + "' onchange='qBittorrent.Preferences.changeWatchFolderSelect(this)'>"
|
||||||
+ "<option value='watch_folder'>QBT_TR(Monitored folder)QBT_TR[CONTEXT=ScanFoldersModel]</option>"
|
+ "<option value='watch_folder'>QBT_TR(Monitored folder)QBT_TR[CONTEXT=ScanFoldersModel]</option>"
|
||||||
+ "<option value='default_folder'>QBT_TR(Default save location)QBT_TR[CONTEXT=ScanFoldersModel]</option>"
|
+ "<option value='default_folder'>QBT_TR(Default save location)QBT_TR[CONTEXT=ScanFoldersModel]</option>"
|
||||||
+ "<option value='other'>QBT_TR(Other...)QBT_TR[CONTEXT=HttpServer]</option>"
|
+ "<option value='other'>QBT_TR(Other...)QBT_TR[CONTEXT=HttpServer]</option>"
|
||||||
|
@ -1145,7 +1185,7 @@
|
||||||
$('cb_watch_txt_' + pos).setProperty('value', other);
|
$('cb_watch_txt_' + pos).setProperty('value', other);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.getWatchedFolders = function() {
|
const getWatchedFolders = function() {
|
||||||
const nb_folders = $("watched_folders_tab").getChildren("tbody")[0].getChildren("tr").length;
|
const nb_folders = $("watched_folders_tab").getChildren("tbody")[0].getChildren("tr").length;
|
||||||
const folders = new Hash();
|
const folders = new Hash();
|
||||||
for (let i = 0; i < nb_folders; ++i) {
|
for (let i = 0; i < nb_folders; ++i) {
|
||||||
|
@ -1165,17 +1205,17 @@
|
||||||
return folders;
|
return folders;
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateExportDirEnabled = function() {
|
const updateExportDirEnabled = function() {
|
||||||
const isExportDirEnabled = $('exportdir_checkbox').getProperty('checked');
|
const isExportDirEnabled = $('exportdir_checkbox').getProperty('checked');
|
||||||
$('exportdir_text').setProperty('disabled', !isExportDirEnabled);
|
$('exportdir_text').setProperty('disabled', !isExportDirEnabled);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateExportDirFinEnabled = function() {
|
const updateExportDirFinEnabled = function() {
|
||||||
const isExportDirFinEnabled = $('exportdirfin_checkbox').getProperty('checked');
|
const isExportDirFinEnabled = $('exportdirfin_checkbox').getProperty('checked');
|
||||||
$('exportdirfin_text').setProperty('disabled', !isExportDirFinEnabled);
|
$('exportdirfin_text').setProperty('disabled', !isExportDirFinEnabled);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateMailNotification = function() {
|
const updateMailNotification = function() {
|
||||||
const isMailNotificationEnabled = $('mail_notification_checkbox').getProperty('checked');
|
const isMailNotificationEnabled = $('mail_notification_checkbox').getProperty('checked');
|
||||||
$('src_email_txt').setProperty('disabled', !isMailNotificationEnabled);
|
$('src_email_txt').setProperty('disabled', !isMailNotificationEnabled);
|
||||||
$('dest_email_txt').setProperty('disabled', !isMailNotificationEnabled);
|
$('dest_email_txt').setProperty('disabled', !isMailNotificationEnabled);
|
||||||
|
@ -1189,44 +1229,44 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateMailAuthSettings = function() {
|
const updateMailAuthSettings = function() {
|
||||||
const isMailAuthEnabled = $('mail_auth_checkbox').getProperty('checked');
|
const isMailAuthEnabled = $('mail_auth_checkbox').getProperty('checked');
|
||||||
$('mail_username_text').setProperty('disabled', !isMailAuthEnabled);
|
$('mail_username_text').setProperty('disabled', !isMailAuthEnabled);
|
||||||
$('mail_password_text').setProperty('disabled', !isMailAuthEnabled);
|
$('mail_password_text').setProperty('disabled', !isMailAuthEnabled);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateAutoRun = function() {
|
const updateAutoRun = function() {
|
||||||
const isAutoRunEnabled = $('autorun_checkbox').getProperty('checked');
|
const isAutoRunEnabled = $('autorun_checkbox').getProperty('checked');
|
||||||
$('autorunProg_txt').setProperty('disabled', !isAutoRunEnabled);
|
$('autorunProg_txt').setProperty('disabled', !isAutoRunEnabled);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Connection tab
|
// Connection tab
|
||||||
this.updatePortValueEnabled = function() {
|
const updatePortValueEnabled = function() {
|
||||||
const checked = $('random_port_checkbox').getProperty('checked');
|
const checked = $('random_port_checkbox').getProperty('checked');
|
||||||
$('port_value').setProperty('disabled', checked);
|
$('port_value').setProperty('disabled', checked);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateMaxConnecEnabled = function() {
|
const updateMaxConnecEnabled = function() {
|
||||||
const isMaxConnecEnabled = $('max_connec_checkbox').getProperty('checked');
|
const isMaxConnecEnabled = $('max_connec_checkbox').getProperty('checked');
|
||||||
$('max_connec_value').setProperty('disabled', !isMaxConnecEnabled);
|
$('max_connec_value').setProperty('disabled', !isMaxConnecEnabled);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateMaxConnecPerTorrentEnabled = function() {
|
const updateMaxConnecPerTorrentEnabled = function() {
|
||||||
const isMaxConnecPerTorrentEnabled = $('max_connec_per_torrent_checkbox').getProperty('checked');
|
const isMaxConnecPerTorrentEnabled = $('max_connec_per_torrent_checkbox').getProperty('checked');
|
||||||
$('max_connec_per_torrent_value').setProperty('disabled', !isMaxConnecPerTorrentEnabled);
|
$('max_connec_per_torrent_value').setProperty('disabled', !isMaxConnecPerTorrentEnabled);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateMaxUploadsEnabled = function() {
|
const updateMaxUploadsEnabled = function() {
|
||||||
const isMaxUploadsEnabled = $('max_uploads_checkbox').getProperty('checked');
|
const isMaxUploadsEnabled = $('max_uploads_checkbox').getProperty('checked');
|
||||||
$('max_uploads_value').setProperty('disabled', !isMaxUploadsEnabled);
|
$('max_uploads_value').setProperty('disabled', !isMaxUploadsEnabled);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateMaxUploadsPerTorrentEnabled = function() {
|
const updateMaxUploadsPerTorrentEnabled = function() {
|
||||||
const isMaxUploadsPerTorrentEnabled = $('max_uploads_per_torrent_checkbox').getProperty('checked');
|
const isMaxUploadsPerTorrentEnabled = $('max_uploads_per_torrent_checkbox').getProperty('checked');
|
||||||
$('max_uploads_per_torrent_value').setProperty('disabled', !isMaxUploadsPerTorrentEnabled);
|
$('max_uploads_per_torrent_value').setProperty('disabled', !isMaxUploadsPerTorrentEnabled);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updatePeerProxySettings = function() {
|
const updatePeerProxySettings = function() {
|
||||||
const isPeerProxyTypeSelected = $('peer_proxy_type_select').getProperty('value') != "none";
|
const isPeerProxyTypeSelected = $('peer_proxy_type_select').getProperty('value') != "none";
|
||||||
$('peer_proxy_host_text').setProperty('disabled', !isPeerProxyTypeSelected);
|
$('peer_proxy_host_text').setProperty('disabled', !isPeerProxyTypeSelected);
|
||||||
$('peer_proxy_port_value').setProperty('disabled', !isPeerProxyTypeSelected);
|
$('peer_proxy_port_value').setProperty('disabled', !isPeerProxyTypeSelected);
|
||||||
|
@ -1249,13 +1289,13 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updatePeerProxyAuthSettings = function() {
|
const updatePeerProxyAuthSettings = function() {
|
||||||
const isPeerProxyAuthEnabled = $('peer_proxy_auth_checkbox').getProperty('checked');
|
const isPeerProxyAuthEnabled = $('peer_proxy_auth_checkbox').getProperty('checked');
|
||||||
$('peer_proxy_username_text').setProperty('disabled', !isPeerProxyAuthEnabled);
|
$('peer_proxy_username_text').setProperty('disabled', !isPeerProxyAuthEnabled);
|
||||||
$('peer_proxy_password_text').setProperty('disabled', !isPeerProxyAuthEnabled);
|
$('peer_proxy_password_text').setProperty('disabled', !isPeerProxyAuthEnabled);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateFilterSettings = function() {
|
const updateFilterSettings = function() {
|
||||||
const isIPFilterEnabled = $('ipfilter_enabled_checkbox').getProperty('checked');
|
const isIPFilterEnabled = $('ipfilter_enabled_checkbox').getProperty('checked');
|
||||||
$('ipfilter_text').setProperty('disabled', !isIPFilterEnabled);
|
$('ipfilter_text').setProperty('disabled', !isIPFilterEnabled);
|
||||||
$('ipfilter_trackers_checkbox').setProperty('disabled', !isIPFilterEnabled);
|
$('ipfilter_trackers_checkbox').setProperty('disabled', !isIPFilterEnabled);
|
||||||
|
@ -1263,7 +1303,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
// Speed tab
|
// Speed tab
|
||||||
this.updateSchedulingEnabled = function() {
|
const updateSchedulingEnabled = function() {
|
||||||
const isLimitSchedulingEnabled = $('limit_sheduling_checkbox').getProperty('checked');
|
const isLimitSchedulingEnabled = $('limit_sheduling_checkbox').getProperty('checked');
|
||||||
$('schedule_from_hour').setProperty('disabled', !isLimitSchedulingEnabled);
|
$('schedule_from_hour').setProperty('disabled', !isLimitSchedulingEnabled);
|
||||||
$('schedule_from_min').setProperty('disabled', !isLimitSchedulingEnabled);
|
$('schedule_from_min').setProperty('disabled', !isLimitSchedulingEnabled);
|
||||||
|
@ -1273,7 +1313,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
// Bittorrent tab
|
// Bittorrent tab
|
||||||
this.updateQueueingSystem = function() {
|
const updateQueueingSystem = function() {
|
||||||
const isQueueingEnabled = $('queueing_checkbox').getProperty('checked');
|
const isQueueingEnabled = $('queueing_checkbox').getProperty('checked');
|
||||||
$('max_active_dl_value').setProperty('disabled', !isQueueingEnabled);
|
$('max_active_dl_value').setProperty('disabled', !isQueueingEnabled);
|
||||||
$('max_active_up_value').setProperty('disabled', !isQueueingEnabled);
|
$('max_active_up_value').setProperty('disabled', !isQueueingEnabled);
|
||||||
|
@ -1282,14 +1322,14 @@
|
||||||
updateSlowTorrentsSettings();
|
updateSlowTorrentsSettings();
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateSlowTorrentsSettings = function() {
|
const updateSlowTorrentsSettings = function() {
|
||||||
const isDontCountSlowTorrentsEnabled = (!$('dont_count_slow_torrents_checkbox').getProperty('disabled')) && $('dont_count_slow_torrents_checkbox').getProperty('checked');
|
const isDontCountSlowTorrentsEnabled = (!$('dont_count_slow_torrents_checkbox').getProperty('disabled')) && $('dont_count_slow_torrents_checkbox').getProperty('checked');
|
||||||
$('dl_rate_threshold').setProperty('disabled', !isDontCountSlowTorrentsEnabled);
|
$('dl_rate_threshold').setProperty('disabled', !isDontCountSlowTorrentsEnabled);
|
||||||
$('ul_rate_threshold').setProperty('disabled', !isDontCountSlowTorrentsEnabled);
|
$('ul_rate_threshold').setProperty('disabled', !isDontCountSlowTorrentsEnabled);
|
||||||
$('torrent_inactive_timer').setProperty('disabled', !isDontCountSlowTorrentsEnabled);
|
$('torrent_inactive_timer').setProperty('disabled', !isDontCountSlowTorrentsEnabled);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateMaxRatioTimeEnabled = function() {
|
const updateMaxRatioTimeEnabled = function() {
|
||||||
const isMaxRatioEnabled = $('max_ratio_checkbox').getProperty('checked');
|
const isMaxRatioEnabled = $('max_ratio_checkbox').getProperty('checked');
|
||||||
$('max_ratio_value').setProperty('disabled', !isMaxRatioEnabled);
|
$('max_ratio_value').setProperty('disabled', !isMaxRatioEnabled);
|
||||||
|
|
||||||
|
@ -1299,34 +1339,34 @@
|
||||||
$('max_ratio_act').setProperty('disabled', !(isMaxRatioEnabled || isMaxSeedingTimeEnabled));
|
$('max_ratio_act').setProperty('disabled', !(isMaxRatioEnabled || isMaxSeedingTimeEnabled));
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateAddTrackersEnabled = function() {
|
const updateAddTrackersEnabled = function() {
|
||||||
const isAddTrackersEnabled = $('add_trackers_checkbox').getProperty('checked');
|
const isAddTrackersEnabled = $('add_trackers_checkbox').getProperty('checked');
|
||||||
$('add_trackers_textarea').setProperty('disabled', !isAddTrackersEnabled);
|
$('add_trackers_textarea').setProperty('disabled', !isAddTrackersEnabled);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Web UI tab
|
// Web UI tab
|
||||||
this.updateHttpsSettings = function() {
|
const updateHttpsSettings = function() {
|
||||||
const isUseHttpsEnabled = $('use_https_checkbox').getProperty('checked');
|
const isUseHttpsEnabled = $('use_https_checkbox').getProperty('checked');
|
||||||
$('ssl_cert_text').setProperty('disabled', !isUseHttpsEnabled);
|
$('ssl_cert_text').setProperty('disabled', !isUseHttpsEnabled);
|
||||||
$('ssl_key_text').setProperty('disabled', !isUseHttpsEnabled);
|
$('ssl_key_text').setProperty('disabled', !isUseHttpsEnabled);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateBypasssAuthSettings = function() {
|
const updateBypasssAuthSettings = function() {
|
||||||
const isBypassAuthSubnetWhitelistEnabled = $('bypass_auth_subnet_whitelist_checkbox').getProperty('checked');
|
const isBypassAuthSubnetWhitelistEnabled = $('bypass_auth_subnet_whitelist_checkbox').getProperty('checked');
|
||||||
$('bypass_auth_subnet_whitelist_textarea').setProperty('disabled', !isBypassAuthSubnetWhitelistEnabled);
|
$('bypass_auth_subnet_whitelist_textarea').setProperty('disabled', !isBypassAuthSubnetWhitelistEnabled);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateAlternativeWebUISettings = function() {
|
const updateAlternativeWebUISettings = function() {
|
||||||
const isUseAlternativeWebUIEnabled = $('use_alt_webui_checkbox').getProperty('checked');
|
const isUseAlternativeWebUIEnabled = $('use_alt_webui_checkbox').getProperty('checked');
|
||||||
$('webui_files_location_textarea').setProperty('disabled', !isUseAlternativeWebUIEnabled);
|
$('webui_files_location_textarea').setProperty('disabled', !isUseAlternativeWebUIEnabled);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateHostHeaderValidationSettings = function() {
|
const updateHostHeaderValidationSettings = function() {
|
||||||
const isHostHeaderValidationEnabled = $('host_header_validation_checkbox').getProperty('checked');
|
const isHostHeaderValidationEnabled = $('host_header_validation_checkbox').getProperty('checked');
|
||||||
$('webui_domain_textarea').setProperty('disabled', !isHostHeaderValidationEnabled);
|
$('webui_domain_textarea').setProperty('disabled', !isHostHeaderValidationEnabled);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateDynDnsSettings = function() {
|
const updateDynDnsSettings = function() {
|
||||||
const isDynDnsEnabled = $('use_dyndns_checkbox').getProperty('checked');
|
const isDynDnsEnabled = $('use_dyndns_checkbox').getProperty('checked');
|
||||||
$('dyndns_select').setProperty('disabled', !isDynDnsEnabled);
|
$('dyndns_select').setProperty('disabled', !isDynDnsEnabled);
|
||||||
$('dyndns_domain_text').setProperty('disabled', !isDynDnsEnabled);
|
$('dyndns_domain_text').setProperty('disabled', !isDynDnsEnabled);
|
||||||
|
@ -1334,7 +1374,7 @@
|
||||||
$('dyndns_password_text').setProperty('disabled', !isDynDnsEnabled);
|
$('dyndns_password_text').setProperty('disabled', !isDynDnsEnabled);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.registerDynDns = function() {
|
const registerDynDns = function() {
|
||||||
if ($('dyndns_select').getProperty('value').toInt() == 1) {
|
if ($('dyndns_select').getProperty('value').toInt() == 1) {
|
||||||
window.open("http://www.no-ip.com/services/managed_dns/free_dynamic_dns.html", "NO-IP Registration");
|
window.open("http://www.no-ip.com/services/managed_dns/free_dynamic_dns.html", "NO-IP Registration");
|
||||||
}
|
}
|
||||||
|
@ -1343,14 +1383,14 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.generateRandomPort = function() {
|
const generateRandomPort = function() {
|
||||||
const min = 1024;
|
const min = 1024;
|
||||||
const max = 65535;
|
const max = 65535;
|
||||||
const port = Math.floor(Math.random() * (max - min + 1) + min);
|
const port = Math.floor(Math.random() * (max - min + 1) + min);
|
||||||
$('port_value').setProperty('value', port);
|
$('port_value').setProperty('value', port);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.time_padding = function(val) {
|
const time_padding = function(val) {
|
||||||
let ret = val.toString();
|
let ret = val.toString();
|
||||||
if (ret.length == 1)
|
if (ret.length == 1)
|
||||||
ret = '0' + ret;
|
ret = '0' + ret;
|
||||||
|
@ -1358,7 +1398,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
// Advanced Tab
|
// Advanced Tab
|
||||||
this.updateNetworkInterfaces = function(default_iface) {
|
const updateNetworkInterfaces = function(default_iface) {
|
||||||
const url = 'api/v2/app/networkInterfaceList';
|
const url = 'api/v2/app/networkInterfaceList';
|
||||||
$('networkInterface').empty();
|
$('networkInterface').empty();
|
||||||
new Request.JSON({
|
new Request.JSON({
|
||||||
|
@ -1380,7 +1420,7 @@
|
||||||
}).send();
|
}).send();
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateInterfaceAddresses = function(iface, default_addr) {
|
const updateInterfaceAddresses = function(iface, default_addr) {
|
||||||
const url = 'api/v2/app/networkInterfaceAddressList';
|
const url = 'api/v2/app/networkInterfaceAddressList';
|
||||||
$('optionalIPAddressToBind').empty();
|
$('optionalIPAddressToBind').empty();
|
||||||
new Request.JSON({
|
new Request.JSON({
|
||||||
|
@ -1405,7 +1445,7 @@
|
||||||
}).send();
|
}).send();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.loadPreferences = function() {
|
const loadPreferences = function() {
|
||||||
const url = 'api/v2/app/preferences';
|
const url = 'api/v2/app/preferences';
|
||||||
new Request.JSON({
|
new Request.JSON({
|
||||||
url: url,
|
url: url,
|
||||||
|
@ -1425,7 +1465,7 @@
|
||||||
$('preallocateall_checkbox').setProperty('checked', pref.preallocate_all);
|
$('preallocateall_checkbox').setProperty('checked', pref.preallocate_all);
|
||||||
$('appendext_checkbox').setProperty('checked', pref.incomplete_files_ext);
|
$('appendext_checkbox').setProperty('checked', pref.incomplete_files_ext);
|
||||||
|
|
||||||
// Saving Managmenet
|
// Saving Management
|
||||||
$('default_tmm_combobox').setProperty('value', pref.auto_tmm_enabled);
|
$('default_tmm_combobox').setProperty('value', pref.auto_tmm_enabled);
|
||||||
$('torrent_changed_tmm_combobox').setProperty('value', pref.torrent_changed_tmm_enabled);
|
$('torrent_changed_tmm_combobox').setProperty('value', pref.torrent_changed_tmm_enabled);
|
||||||
$('save_path_changed_tmm_combobox').setProperty('value', pref.save_path_changed_tmm_enabled);
|
$('save_path_changed_tmm_combobox').setProperty('value', pref.save_path_changed_tmm_enabled);
|
||||||
|
@ -1708,7 +1748,7 @@
|
||||||
}).send();
|
}).send();
|
||||||
};
|
};
|
||||||
|
|
||||||
this.applyPreferences = function() {
|
const applyPreferences = function() {
|
||||||
const settings = new Hash();
|
const settings = new Hash();
|
||||||
// Validate form data
|
// Validate form data
|
||||||
// Downloads tab
|
// Downloads tab
|
||||||
|
@ -2094,4 +2134,7 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
loadPreferences();
|
loadPreferences();
|
||||||
|
|
||||||
|
return exports();
|
||||||
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
(function() {
|
||||||
// Tabs
|
// Tabs
|
||||||
MochaUI.initializeTabs('preferencesTabs');
|
MochaUI.initializeTabs('preferencesTabs');
|
||||||
|
|
||||||
|
@ -41,4 +42,5 @@
|
||||||
$$('.PrefTab').addClass('invisible');
|
$$('.PrefTab').addClass('invisible');
|
||||||
$('AdvancedTab').removeClass('invisible');
|
$('AdvancedTab').removeClass('invisible');
|
||||||
});
|
});
|
||||||
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -155,7 +155,9 @@
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
(function() {
|
||||||
const selectedTab = $(LocalPreferences.get('selected_tab', 'PropGeneralLink'));
|
const selectedTab = $(LocalPreferences.get('selected_tab', 'PropGeneralLink'));
|
||||||
if (selectedTab)
|
if (selectedTab)
|
||||||
selectedTab.click();
|
selectedTab.click();
|
||||||
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -59,9 +59,9 @@
|
||||||
<div style="overflow: hidden; height: 70px;">
|
<div style="overflow: hidden; height: 70px;">
|
||||||
<div style="margin: 20px 0; height: 30px;">
|
<div style="margin: 20px 0; height: 30px;">
|
||||||
<input type="text" id="searchPattern" class="searchInputField" placeholder="QBT_TR(Search)QBT_TR[CONTEXT=SearchEngineWidget]" autocorrect="off" autocapitalize="none" />
|
<input type="text" id="searchPattern" class="searchInputField" placeholder="QBT_TR(Search)QBT_TR[CONTEXT=SearchEngineWidget]" autocorrect="off" autocapitalize="none" />
|
||||||
<select id="categorySelect" class="searchInputField" onchange="categorySelected()"></select>
|
<select id="categorySelect" class="searchInputField" onchange="qBittorrent.Search.categorySelected()"></select>
|
||||||
<select id="pluginsSelect" class="searchInputField" onchange="pluginSelected()"></select>
|
<select id="pluginsSelect" class="searchInputField" onchange="qBittorrent.Search.pluginSelected()"></select>
|
||||||
<button id="startSearchButton" class="searchInputField" onclick="startStopSearch()">QBT_TR(Search)QBT_TR[CONTEXT=SearchEngineWidget]</button>
|
<button id="startSearchButton" class="searchInputField" onclick="qBittorrent.Search.startStopSearch()">QBT_TR(Search)QBT_TR[CONTEXT=SearchEngineWidget]</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -85,19 +85,19 @@
|
||||||
|
|
||||||
<div style="display: inline-block; float: right;">
|
<div style="display: inline-block; float: right;">
|
||||||
<label for="searchInTorrentName" style="margin-left: 15px;">QBT_TR(Search in:)QBT_TR[CONTEXT=SearchEngineWidget]</label>
|
<label for="searchInTorrentName" style="margin-left: 15px;">QBT_TR(Search in:)QBT_TR[CONTEXT=SearchEngineWidget]</label>
|
||||||
<select id="searchInTorrentName" onchange="searchInTorrentName()">
|
<select id="searchInTorrentName" onchange="qBittorrent.Search.searchInTorrentName()">
|
||||||
<option value="names">QBT_TR(Torrent names only)QBT_TR[CONTEXT=SearchEngineWidget]</option>
|
<option value="names">QBT_TR(Torrent names only)QBT_TR[CONTEXT=SearchEngineWidget]</option>
|
||||||
<option value="everywhere">QBT_TR(Everywhere)QBT_TR[CONTEXT=SearchEngineWidget]</option>
|
<option value="everywhere">QBT_TR(Everywhere)QBT_TR[CONTEXT=SearchEngineWidget]</option>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<span style="margin-left: 15px;">QBT_TR(Seeds:)QBT_TR[CONTEXT=SearchEngineWidget]</span>
|
<span style="margin-left: 15px;">QBT_TR(Seeds:)QBT_TR[CONTEXT=SearchEngineWidget]</span>
|
||||||
<input type="number" min="0" max="1000" id="searchMinSeedsFilter" value="0" onchange="searchSeedsFilterChanged()">
|
<input type="number" min="0" max="1000" id="searchMinSeedsFilter" value="0" onchange="qBittorrent.Search.searchSeedsFilterChanged()">
|
||||||
<span>to</span>
|
<span>to</span>
|
||||||
<input type="number" min="0" max="1000" id="searchMaxSeedsFilter" value="0" onchange="searchSeedsFilterChanged()">
|
<input type="number" min="0" max="1000" id="searchMaxSeedsFilter" value="0" onchange="qBittorrent.Search.searchSeedsFilterChanged()">
|
||||||
|
|
||||||
<span style="margin-left: 15px;">QBT_TR(Size:)QBT_TR[CONTEXT=SearchEngineWidget]</span>
|
<span style="margin-left: 15px;">QBT_TR(Size:)QBT_TR[CONTEXT=SearchEngineWidget]</span>
|
||||||
<input type="number" min="0" max="1000" step=".01" value="0.00" id="searchMinSizeFilter" onchange="searchSizeFilterChanged()">
|
<input type="number" min="0" max="1000" step=".01" value="0.00" id="searchMinSizeFilter" onchange="qBittorrent.Search.searchSizeFilterChanged()">
|
||||||
<select id="searchMinSizePrefix" onchange="searchSizeFilterPrefixChanged()">
|
<select id="searchMinSizePrefix" onchange="qBittorrent.Search.searchSizeFilterPrefixChanged()">
|
||||||
<option value="0">QBT_TR(B)QBT_TR[CONTEXT=misc]</option>
|
<option value="0">QBT_TR(B)QBT_TR[CONTEXT=misc]</option>
|
||||||
<option value="1">QBT_TR(KiB)QBT_TR[CONTEXT=misc]</option>
|
<option value="1">QBT_TR(KiB)QBT_TR[CONTEXT=misc]</option>
|
||||||
<option value="2" selected>QBT_TR(MiB)QBT_TR[CONTEXT=misc]</option>
|
<option value="2" selected>QBT_TR(MiB)QBT_TR[CONTEXT=misc]</option>
|
||||||
|
@ -107,8 +107,8 @@
|
||||||
<option value="6">QBT_TR(EiB)QBT_TR[CONTEXT=misc]</option>
|
<option value="6">QBT_TR(EiB)QBT_TR[CONTEXT=misc]</option>
|
||||||
</select>
|
</select>
|
||||||
<span>to</span>
|
<span>to</span>
|
||||||
<input type="number" min="0" max="1000" step=".01" value="0.00" id="searchMaxSizeFilter" onchange="searchSizeFilterChanged()">
|
<input type="number" min="0" max="1000" step=".01" value="0.00" id="searchMaxSizeFilter" onchange="qBittorrent.Search.searchSizeFilterChanged()">
|
||||||
<select id="searchMaxSizePrefix" onchange="searchSizeFilterPrefixChanged()">
|
<select id="searchMaxSizePrefix" onchange="qBittorrent.Search.searchSizeFilterPrefixChanged()">
|
||||||
<option value="0">QBT_TR(B)QBT_TR[CONTEXT=misc]</option>
|
<option value="0">QBT_TR(B)QBT_TR[CONTEXT=misc]</option>
|
||||||
<option value="1">QBT_TR(KiB)QBT_TR[CONTEXT=misc]</option>
|
<option value="1">QBT_TR(KiB)QBT_TR[CONTEXT=misc]</option>
|
||||||
<option value="2" selected>QBT_TR(MiB)QBT_TR[CONTEXT=misc]</option>
|
<option value="2" selected>QBT_TR(MiB)QBT_TR[CONTEXT=misc]</option>
|
||||||
|
@ -139,7 +139,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style="height: 30px; padding-top: 10px;">
|
<div style="height: 30px; padding-top: 10px;">
|
||||||
<button id="manageSearchPlugins" onclick="manageSearchPlugins()">QBT_TR(Search plugins...)QBT_TR[CONTEXT=SearchEngineWidget]</button>
|
<button id="manageSearchPlugins" onclick="qBittorrent.Search.manageSearchPlugins()">QBT_TR(Search plugins...)QBT_TR[CONTEXT=SearchEngineWidget]</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -159,15 +159,42 @@
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
if (window.qBittorrent === undefined) {
|
||||||
|
window.qBittorrent = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
window.qBittorrent.Search = (function() {
|
||||||
|
const exports = function() {
|
||||||
|
return {
|
||||||
|
startStopSearch: startStopSearch,
|
||||||
|
manageSearchPlugins: manageSearchPlugins,
|
||||||
|
searchPlugins: searchPlugins,
|
||||||
|
searchText: searchText,
|
||||||
|
searchSeedsFilter: searchSeedsFilter,
|
||||||
|
searchSizeFilter: searchSizeFilter,
|
||||||
|
init: init,
|
||||||
|
getPlugin: getPlugin,
|
||||||
|
searchInTorrentName: searchInTorrentName,
|
||||||
|
categorySelected: categorySelected,
|
||||||
|
pluginSelected: pluginSelected,
|
||||||
|
searchSeedsFilterChanged: searchSeedsFilterChanged,
|
||||||
|
searchSizeFilterChanged: searchSizeFilterChanged,
|
||||||
|
searchSizeFilterPrefixChanged: searchSizeFilterPrefixChanged
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
let searchResultsTable;
|
||||||
let loadSearchResultsTimer;
|
let loadSearchResultsTimer;
|
||||||
let loadSearchPluginsTimer;
|
let loadSearchPluginsTimer;
|
||||||
let searchResultsRowId = 0;
|
let searchResultsRowId = 0;
|
||||||
let searchRunning = false;
|
let searchRunning = false;
|
||||||
let requestCount = 0;
|
let requestCount = 0;
|
||||||
let searchPlugins = [];
|
const searchPlugins = [];
|
||||||
let prevSearchPluginsResponse;
|
let prevSearchPluginsResponse;
|
||||||
let searchPattern = "";
|
const searchText = {
|
||||||
let searchFilterPattern = "";
|
pattern: "",
|
||||||
|
filterPattern: ""
|
||||||
|
};
|
||||||
const searchSeedsFilter = {
|
const searchSeedsFilter = {
|
||||||
min: 0,
|
min: 0,
|
||||||
max: 0
|
max: 0
|
||||||
|
@ -184,10 +211,10 @@
|
||||||
let prevSelectedPlugin;
|
let prevSelectedPlugin;
|
||||||
let activeSearchId = null;
|
let activeSearchId = null;
|
||||||
|
|
||||||
const initSearchTab = function() {
|
const init = function() {
|
||||||
// load "Search in" preference from local storage
|
// load "Search in" preference from local storage
|
||||||
$('searchInTorrentName').set('value', (LocalPreferences.get('search_in_filter') === "names") ? "names" : "everywhere");
|
$('searchInTorrentName').set('value', (LocalPreferences.get('search_in_filter') === "names") ? "names" : "everywhere");
|
||||||
const searchResultsTableContextMenu = new ContextMenu({
|
const searchResultsTableContextMenu = new window.qBittorrent.ContextMenu.ContextMenu({
|
||||||
targets: '.searchTableRow',
|
targets: '.searchTableRow',
|
||||||
menu: 'searchResultsTableMenu',
|
menu: 'searchResultsTableMenu',
|
||||||
actions: {
|
actions: {
|
||||||
|
@ -199,6 +226,7 @@
|
||||||
y: -53
|
y: -53
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
searchResultsTable = new window.qBittorrent.DynamicTable.SearchResultsTable();
|
||||||
searchResultsTable.setup('searchResultsTableDiv', 'searchResultsTableFixedHeaderDiv', searchResultsTableContextMenu);
|
searchResultsTable.setup('searchResultsTableDiv', 'searchResultsTableFixedHeaderDiv', searchResultsTableContextMenu);
|
||||||
getPlugins();
|
getPlugins();
|
||||||
|
|
||||||
|
@ -210,7 +238,7 @@
|
||||||
prevNameFilterValue = value;
|
prevNameFilterValue = value;
|
||||||
clearTimeout(searchInNameFilterTimer);
|
clearTimeout(searchInNameFilterTimer);
|
||||||
searchInNameFilterTimer = setTimeout(function() {
|
searchInNameFilterTimer = setTimeout(function() {
|
||||||
searchFilterPattern = value;
|
searchText.filterPattern = value;
|
||||||
searchFilterChanged();
|
searchFilterChanged();
|
||||||
}, 400);
|
}, 400);
|
||||||
}
|
}
|
||||||
|
@ -293,7 +321,7 @@
|
||||||
|
|
||||||
resetFilters();
|
resetFilters();
|
||||||
|
|
||||||
searchPattern = pattern;
|
searchText.pattern = pattern;
|
||||||
startSearch(pattern, category, plugins);
|
startSearch(pattern, category, plugins);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -459,7 +487,10 @@
|
||||||
onSuccess: function(response) {
|
onSuccess: function(response) {
|
||||||
if (response !== prevSearchPluginsResponse) {
|
if (response !== prevSearchPluginsResponse) {
|
||||||
prevSearchPluginsResponse = response;
|
prevSearchPluginsResponse = response;
|
||||||
searchPlugins = response;
|
searchPlugins.length = 0;
|
||||||
|
response.forEach(function(plugin) {
|
||||||
|
searchPlugins.push(plugin);
|
||||||
|
})
|
||||||
|
|
||||||
const pluginsHtml = [];
|
const pluginsHtml = [];
|
||||||
pluginsHtml.push('<option value="enabled">QBT_TR(Only enabled)QBT_TR[CONTEXT=SearchEngineWidget]</option>');
|
pluginsHtml.push('<option value="enabled">QBT_TR(Only enabled)QBT_TR[CONTEXT=SearchEngineWidget]</option>');
|
||||||
|
@ -487,7 +518,7 @@
|
||||||
|
|
||||||
allPlugins.each(function(plugin) {
|
allPlugins.each(function(plugin) {
|
||||||
if (plugin.enabled === true)
|
if (plugin.enabled === true)
|
||||||
pluginsHtml.push("<option value='" + escapeHtml(plugin.name) + "'>" + escapeHtml(plugin.fullName) + "</option>");
|
pluginsHtml.push("<option value='" + window.qBittorrent.Misc.escapeHtml(plugin.name) + "'>" + window.qBittorrent.Misc.escapeHtml(plugin.fullName) + "</option>");
|
||||||
});
|
});
|
||||||
|
|
||||||
if (pluginsHtml.length > 2)
|
if (pluginsHtml.length > 2)
|
||||||
|
@ -501,8 +532,8 @@
|
||||||
$('pluginsSelect').setProperty('disabled', searchPluginsEmpty);
|
$('pluginsSelect').setProperty('disabled', searchPluginsEmpty);
|
||||||
$('startSearchButton').setProperty('disabled', searchPluginsEmpty);
|
$('startSearchButton').setProperty('disabled', searchPluginsEmpty);
|
||||||
|
|
||||||
if (typeof updateSearchPluginsTable === "function")
|
if (window.qBittorrent.SearchPlugins !== undefined)
|
||||||
updateSearchPluginsTable();
|
window.qBittorrent.SearchPlugins.updateTable();
|
||||||
|
|
||||||
reselectPlugin();
|
reselectPlugin();
|
||||||
}
|
}
|
||||||
|
@ -676,4 +707,6 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
return exports();
|
||||||
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -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>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>
|
<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;">
|
<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="qBittorrent.SearchPlugins.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: 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="closeSearchWindow('searchPlugins');">QBT_TR(Close)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>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -79,12 +79,28 @@
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
this.searchPluginsTableContextMenu = undefined;
|
if (window.qBittorrent === undefined) {
|
||||||
this.prevOffsetLeft = undefined;
|
window.qBittorrent = {};
|
||||||
this.prevOffsetTop = undefined;
|
}
|
||||||
|
|
||||||
this.initSearchPlugins = function() {
|
window.qBittorrent.SearchPlugins = (function() {
|
||||||
searchPluginsTableContextMenu = new SearchPluginsTableContextMenu({
|
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',
|
targets: '.searchPluginsTableRow',
|
||||||
menu: 'searchPluginsTableMenu',
|
menu: 'searchPluginsTableMenu',
|
||||||
actions: {
|
actions: {
|
||||||
|
@ -94,14 +110,14 @@
|
||||||
offsets: calculateContextMenuOffsets()
|
offsets: calculateContextMenuOffsets()
|
||||||
});
|
});
|
||||||
searchPluginsTable.setup('searchPluginsTableDiv', 'searchPluginsTableFixedHeaderDiv', searchPluginsTableContextMenu);
|
searchPluginsTable.setup('searchPluginsTableDiv', 'searchPluginsTableFixedHeaderDiv', searchPluginsTableContextMenu);
|
||||||
updateSearchPluginsTable();
|
updateTable();
|
||||||
};
|
};
|
||||||
|
|
||||||
this.closeSearchWindow = function(id) {
|
const closeSearchWindow = function(id) {
|
||||||
window.parent.MochaUI.closeWindow(window.parent.$(id));
|
window.parent.MochaUI.closeWindow(window.parent.$(id));
|
||||||
};
|
};
|
||||||
|
|
||||||
this.installPlugin = function(path) {
|
const installPlugin = function(path) {
|
||||||
new MochaUI.Window({
|
new MochaUI.Window({
|
||||||
id: 'installSearchPlugin',
|
id: 'installSearchPlugin',
|
||||||
title: "QBT_TR(Install plugin)QBT_TR[CONTEXT=PluginSourceDlg]",
|
title: "QBT_TR(Install plugin)QBT_TR[CONTEXT=PluginSourceDlg]",
|
||||||
|
@ -117,7 +133,7 @@
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
this.uninstallPlugin = function() {
|
const uninstallPlugin = function() {
|
||||||
const plugins = searchPluginsTable.selectedRowsIds().join('|');
|
const plugins = searchPluginsTable.selectedRowsIds().join('|');
|
||||||
const url = new URI('api/v2/search/uninstallPlugin');
|
const url = new URI('api/v2/search/uninstallPlugin');
|
||||||
new Request({
|
new Request({
|
||||||
|
@ -130,11 +146,11 @@
|
||||||
}).send();
|
}).send();
|
||||||
};
|
};
|
||||||
|
|
||||||
this.enablePlugin = function() {
|
const enablePlugin = function() {
|
||||||
const plugins = searchPluginsTable.selectedRowsIds();
|
const plugins = searchPluginsTable.selectedRowsIds();
|
||||||
let enable = true;
|
let enable = true;
|
||||||
if (plugins && plugins.length)
|
if (plugins && plugins.length)
|
||||||
enable = !getPlugin(plugins[0]).enabled;
|
enable = !window.qBittorrent.Search.getPlugin(plugins[0]).enabled;
|
||||||
|
|
||||||
const url = new URI('api/v2/search/enablePlugin');
|
const url = new URI('api/v2/search/enablePlugin');
|
||||||
new Request({
|
new Request({
|
||||||
|
@ -148,7 +164,7 @@
|
||||||
}).send();
|
}).send();
|
||||||
};
|
};
|
||||||
|
|
||||||
this.checkForUpdates = function() {
|
const checkForUpdates = function() {
|
||||||
const url = new URI('api/v2/search/updatePlugins');
|
const url = new URI('api/v2/search/updatePlugins');
|
||||||
new Request({
|
new Request({
|
||||||
url: url,
|
url: url,
|
||||||
|
@ -157,7 +173,7 @@
|
||||||
}).send();
|
}).send();
|
||||||
};
|
};
|
||||||
|
|
||||||
this.calculateContextMenuOffsets = function() {
|
const calculateContextMenuOffsets = function() {
|
||||||
prevOffsetLeft = document.getElementById("searchPlugins").getBoundingClientRect().left;
|
prevOffsetLeft = document.getElementById("searchPlugins").getBoundingClientRect().left;
|
||||||
prevOffsetTop = document.getElementById("searchPlugins").getBoundingClientRect().top;
|
prevOffsetTop = document.getElementById("searchPlugins").getBoundingClientRect().top;
|
||||||
|
|
||||||
|
@ -167,13 +183,13 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateSearchPluginsTableContextMenuOffset = function() {
|
const updateSearchPluginsTableContextMenuOffset = function() {
|
||||||
// only re-calculate if window has moved
|
// only re-calculate if window has moved
|
||||||
if ((prevOffsetLeft !== document.getElementById("searchPlugins").getBoundingClientRect().left) || (prevOffsetTop !== document.getElementById("searchPlugins").getBoundingClientRect().top))
|
if ((prevOffsetLeft !== document.getElementById("searchPlugins").getBoundingClientRect().left) || (prevOffsetTop !== document.getElementById("searchPlugins").getBoundingClientRect().top))
|
||||||
searchPluginsTableContextMenu.options.offsets = calculateContextMenuOffsets();
|
searchPluginsTableContextMenu.options.offsets = calculateContextMenuOffsets();
|
||||||
};
|
};
|
||||||
|
|
||||||
this.setupSearchPluginTableEvents = function(enable) {
|
const setupSearchPluginTableEvents = function(enable) {
|
||||||
if (enable)
|
if (enable)
|
||||||
$$(".searchPluginsTableRow").each(function(target) {
|
$$(".searchPluginsTableRow").each(function(target) {
|
||||||
target.addEventListener('dblclick', enablePlugin, false);
|
target.addEventListener('dblclick', enablePlugin, false);
|
||||||
|
@ -186,7 +202,7 @@
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
this.updateSearchPluginsTable = function() {
|
const updateTable = function() {
|
||||||
// clear event listeners
|
// clear event listeners
|
||||||
setupSearchPluginTableEvents(false);
|
setupSearchPluginTableEvents(false);
|
||||||
|
|
||||||
|
@ -194,8 +210,8 @@
|
||||||
// remove old rows from the table
|
// remove old rows from the table
|
||||||
for (let i = 0; i < oldPlugins.length; ++i) {
|
for (let i = 0; i < oldPlugins.length; ++i) {
|
||||||
let found = false;
|
let found = false;
|
||||||
for (let j = 0; j < searchPlugins.length; ++j) {
|
for (let j = 0; j < window.qBittorrent.Search.searchPlugins.length; ++j) {
|
||||||
if (searchPlugins[j].name === oldPlugins[i]) {
|
if (window.qBittorrent.Search.searchPlugins[j].name === oldPlugins[i]) {
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -204,9 +220,9 @@
|
||||||
searchPluginsTable.removeRow(oldPlugins[i]);
|
searchPluginsTable.removeRow(oldPlugins[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let i = 0; i < searchPlugins.length; ++i) {
|
for (let i = 0; i < window.qBittorrent.Search.searchPlugins.length; ++i) {
|
||||||
searchPlugins[i].rowId = searchPlugins[i].name;
|
window.qBittorrent.Search.searchPlugins[i].rowId = window.qBittorrent.Search.searchPlugins[i].name;
|
||||||
searchPluginsTable.updateRowData(searchPlugins[i]);
|
searchPluginsTable.updateRowData(window.qBittorrent.Search.searchPlugins[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
searchPluginsTable.updateTable();
|
searchPluginsTable.updateTable();
|
||||||
|
@ -217,4 +233,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
initSearchPlugins();
|
initSearchPlugins();
|
||||||
|
|
||||||
|
return exports();
|
||||||
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -18,8 +18,19 @@
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
if (window.qBittorrent === undefined) {
|
||||||
|
window.qBittorrent = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
window.qBittorrent.TransferList = (function() {
|
||||||
|
const exports = function() {
|
||||||
|
return {
|
||||||
|
contextMenu: contextMenu,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
//create a context menu
|
//create a context menu
|
||||||
const torrentsTableContextMenu = new TorrentsTableContextMenu({
|
const contextMenu = new window.qBittorrent.ContextMenu.TorrentsTableContextMenu({
|
||||||
targets: '.torrentsTableContextMenuTarget',
|
targets: '.torrentsTableContextMenuTarget',
|
||||||
menu: 'torrentsTableMenu',
|
menu: 'torrentsTableMenu',
|
||||||
actions: {
|
actions: {
|
||||||
|
@ -94,5 +105,8 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
torrentsTable.setup('torrentsTableDiv', 'torrentsTableFixedHeaderDiv', torrentsTableContextMenu);
|
torrentsTable.setup('torrentsTableDiv', 'torrentsTableFixedHeaderDiv', contextMenu);
|
||||||
|
|
||||||
|
return exports();
|
||||||
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue