mirror of
https://github.com/chylex/TweetDuck.git
synced 2025-05-16 17:34:08 +02:00
134 lines
4.7 KiB
JavaScript
134 lines
4.7 KiB
JavaScript
constructor(){
|
||
super({
|
||
requiresPageReload: true
|
||
});
|
||
}
|
||
|
||
enabled(){
|
||
// prepare variables and functions
|
||
var clearColumn = (columnName) => {
|
||
TD.controller.columnManager.get(columnName).clear();
|
||
TD.controller.stats.columnActionClick("clear");
|
||
};
|
||
|
||
var resetColumn = (columnName) => {
|
||
var col = TD.controller.columnManager.get(columnName);
|
||
col.model.setClearedTimestamp(0);
|
||
col.reloadTweets();
|
||
};
|
||
|
||
var forEachColumn = (func) => {
|
||
Object.keys(TD.controller.columnManager.getAll()).forEach(func);
|
||
};
|
||
|
||
var replaceMustache = (key, search, replace) => {
|
||
TD.mustaches[key] = TD.mustaches[key].replace(search, replace);
|
||
};
|
||
|
||
var wasShiftPressed = false;
|
||
|
||
var updateShiftState = (pressed) => {
|
||
if (pressed != wasShiftPressed){
|
||
wasShiftPressed = pressed;
|
||
|
||
if (pressed){
|
||
$(document).on("mousemove", this.eventKeyUp);
|
||
}
|
||
else{
|
||
$(document).off("mousemove", this.eventKeyUp);
|
||
}
|
||
|
||
$("#clear-columns-btn-all").text(pressed ? "Restore columns" : "Clear columns");
|
||
}
|
||
};
|
||
|
||
// prepare event handlers
|
||
this.eventClickSingle = function(e){
|
||
var name = $(this).closest(".js-column").attr("data-column");
|
||
e.shiftKey ? resetColumn(name) : clearColumn(name);
|
||
};
|
||
|
||
this.eventClickAll = function(e){
|
||
forEachColumn(e.shiftKey ? resetColumn : clearColumn);
|
||
};
|
||
|
||
this.eventKeyDown = function(e){
|
||
return if !(document.activeElement === null || document.activeElement === document.body);
|
||
|
||
updateShiftState(e.shiftKey);
|
||
|
||
if (e.keyCode === 46){ // 46 = delete
|
||
if (e.altKey){
|
||
forEachColumn(e.shiftKey ? resetColumn : clearColumn);
|
||
}
|
||
else{
|
||
var focusedColumn = $(".js-column.is-focused");
|
||
|
||
if (focusedColumn.length){
|
||
var name = focusedColumn.attr("data-column");
|
||
e.shiftKey ? resetColumn(name) : clearColumn(name);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
this.eventKeyUp = function(e){
|
||
if (!e.shiftKey){
|
||
updateShiftState(false);
|
||
}
|
||
};
|
||
|
||
// add column buttons and keyboard shortcut info to UI
|
||
replaceMustache("column/column_header.mustache", "</header>", [
|
||
'{{^isTemporary}}',
|
||
'<a class="column-header-link" href="#" data-action="td-clearcolumns-dosingle" style="right:34px">',
|
||
'<i class="icon icon-clear-timeline js-show-tip" data-placement="bottom" data-original-title="Clear column (hold Shift to restore)"></i>',
|
||
'</a>',
|
||
'{{/isTemporary}}',
|
||
'</header>'
|
||
].join(""));
|
||
|
||
replaceMustache("keyboard_shortcut_list.mustache", "</dl> <dl", [
|
||
'<dd class="keyboard-shortcut-definition" style="white-space:nowrap">',
|
||
'<span class="text-like-keyboard-key">1</span> … <span class="text-like-keyboard-key">9</span> + <span class="text-like-keyboard-key">Del</span> Clear column 1-9',
|
||
'</dd><dd class="keyboard-shortcut-definition">',
|
||
'<span class="text-like-keyboard-key">Alt</span> + <span class="text-like-keyboard-key">Del</span> Clear all columns',
|
||
'</dd></dl><dl'
|
||
].join(""));
|
||
|
||
// load custom style
|
||
var css = window.TDPF_createCustomStyle(this);
|
||
css.insert(".column-title { margin-right: 60px !important; }");
|
||
css.insert(".column-type-message .column-title { margin-right: 115px !important; }");
|
||
css.insert(".mark-all-read-link { right: 59px !important; }");
|
||
css.insert(".open-compose-dm-link { right: 90px !important; }");
|
||
css.insert("button[data-action='clear'].btn-options-tray { display: none !important; }");
|
||
}
|
||
|
||
ready(){
|
||
// setup events
|
||
$(document).on("click", "[data-action='td-clearcolumns-dosingle']", this.eventClickSingle);
|
||
$(document).on("click", "[data-action='td-clearcolumns-doall']", this.eventClickAll);
|
||
$(document).on("keydown", this.eventKeyDown);
|
||
$(document).on("keyup", this.eventKeyUp);
|
||
|
||
// add clear all button
|
||
$("nav.app-navigator").first().append([
|
||
'<a id="clear-columns-btn-all-parent" class="js-header-action link-clean cf app-nav-link padding-h--10" data-title="Clear columns (hold Shift to restore)" data-action="td-clearcolumns-doall">',
|
||
'<div class="obj-left margin-l--2"><i class="icon icon-medium icon-clear-timeline"></i></div>',
|
||
'<div id="clear-columns-btn-all" class="nbfc padding-ts hide-condensed txt-size--16">Clear columns</div>',
|
||
'</a></nav>'
|
||
].join(""));
|
||
|
||
// setup tooltip handling
|
||
var tooltipEvents = $._data($(".js-header-action")[0]).events;
|
||
|
||
if (tooltipEvents.mouseover && tooltipEvents.mouseover.length && tooltipEvents.mouseout && tooltipEvents.mouseout.length){
|
||
$("#clear-columns-btn-all-parent").on("mouseover", tooltipEvents.mouseover[0].handler).on("mouseout", tooltipEvents.mouseout[0].handler);
|
||
}
|
||
}
|
||
|
||
disabled(){
|
||
// not needed, plugin reloads the page when enabled or disabled
|
||
}
|