mirror of
https://github.com/gorhill/uBlock.git
synced 2026-03-11 09:04:36 +00:00
91 lines
3.1 KiB
JavaScript
91 lines
3.1 KiB
JavaScript
/*******************************************************************************
|
|
|
|
uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
|
|
Copyright (C) 2014-present Raymond Hill
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
|
|
|
Home: https://github.com/gorhill/uBlock
|
|
*/
|
|
|
|
import {
|
|
modesFromText,
|
|
textFromModes,
|
|
} from './mode-parser.js';
|
|
import { i18n$ } from './i18n.js';
|
|
import { sendMessage } from './ext.js';
|
|
|
|
/******************************************************************************/
|
|
|
|
export class ModeEditor {
|
|
constructor(editor) {
|
|
this.editor = editor;
|
|
this.bc = null;
|
|
}
|
|
|
|
on() {
|
|
if ( this.bc !== null ) { return; }
|
|
this.bc = new self.BroadcastChannel('uBOL');
|
|
this.bc.onmessage = ev => {
|
|
const message = ev.data;
|
|
if ( message instanceof Object === false ) { return; }
|
|
if ( message.filteringModeDetails === undefined ) { return; }
|
|
// TODO: merge with ongoing edits?
|
|
const text = textFromModes(message.filteringModeDetails);
|
|
this.editor.setEditorText(text, true);
|
|
};
|
|
}
|
|
|
|
off() {
|
|
if ( this.bc === null ) { return; }
|
|
this.bc.onmessage = null;
|
|
this.bc = null;
|
|
}
|
|
|
|
async getText() {
|
|
const modes = await sendMessage({ what: 'getFilteringModeDetails' });
|
|
return textFromModes(modes);
|
|
}
|
|
|
|
async saveEditorText(editor) {
|
|
const { modes } = modesFromText(editor.getEditorText());
|
|
if ( modes instanceof Object === false ) { return; }
|
|
const modesAfter = await sendMessage({ what: 'setFilteringModeDetails', modes });
|
|
const text = textFromModes(modesAfter);
|
|
editor.setEditorText(text);
|
|
return true;
|
|
}
|
|
|
|
updateView(editor, firstLine, lastLine) {
|
|
const { doc } = editor.view.state;
|
|
const text = doc.sliceString(firstLine.from, lastLine.to);
|
|
const { bad } = modesFromText(text, true);
|
|
if ( Array.isArray(bad) && bad.length !== 0 ) {
|
|
self.cm6.lineErrorAdd(editor.view, bad.map(i => i + firstLine.number));
|
|
}
|
|
}
|
|
|
|
newlineAssistant = {
|
|
'no filtering:': ' - ',
|
|
'basic:': ' - ',
|
|
'optimal:': ' - ',
|
|
'complete:': ' - ',
|
|
[`${i18n$('filteringMode0Name')}:`]: ' - ',
|
|
[`${i18n$('filteringMode1Name')}:`]: ' - ',
|
|
[`${i18n$('filteringMode2Name')}:`]: ' - ',
|
|
[`${i18n$('filteringMode3Name')}:`]: ' - ',
|
|
};
|
|
|
|
ioAccept = '.json,application/json';
|
|
};
|