Полезная информация

На IRC-канале #mozilla-ru можно получить техническую консультацию онлайн и, конечно же, порцию общения.

№115-10-2014 15:01:24

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4450
UA: Firefox 24.0

[CB]CB drag and go

CB drag and go( Firefox 24-51 )
Автор: bunda1
Версия: от 09.01.2017.
Описание: кнопка даёт возможность запускать нужные коды для ссылок, изображений, выделенного текста перетаскивая их левой клавишей на странице. В коде инициализации кнопки легко поменять код запускаемый перетаскиванием элемента, добавлять новые жести мыши и удалять старые, можно использовать любые сложные жесты мыши например: RLR - направо> налево>направо. В подсказке кнопки отображаются все установленные жесты мыши, после изменения жестов соответственно меняется подсказка кнопки, также в сплывющей подсказке страници отображается информация о текущем жесте. Кнопка не работает при включенном многопроцессном режиме (e10)!

Скриншот подсказки кнопки и сплывающей подсказки страницы:
http://i89.fastpic.ru/big/2017/0109/b2/8ec26d02295e6bbdab3b6fcc5cef6eb2.png    http://i90.fastpic.ru/big/2017/0109/00/b8639a10a85a5aea9578cd4026739e00.png

L налево, R направо, U верх, D вниз, направление перетаскивания по умолчанию:

Ссылки:
U:   Открыть ссылку в новой активной странице,
D:   Открыть ссылку в новой фоновой странице,
L:    Копировать ссылку,
R:    Конвертировать ссылку в текст,
UD:  Открыть изображение в новой активной странице,
DU:  Открыть изображение в новой фоновой странице,
LR:  Сохранить изображение,
RL:  Сохранить изображение без запроса в папке загрузки,
RLR: Копировать изображение,

Выделенный текст:
U:   Поиск текста в google в новой активной странице,
D:   Поиск текста в google в новой фоновой странице,
L:   Копировать текст,
R:   Искать текст на странице,
LR:  Сохранить текст в .txt файл,
RL:  Сохранить текст в .txt файл без запроса в папке загрузки,
RLD: Не установлено,

Левый клик на кнопке даёт возможность редактировать кнопку.
Код кнопки и инициализации:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ECB%20drag%20and%20go%20%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiivX/bJjz/2yX8/9sl/P/bJfz/2yX8/9kjfbnVn35RPyLo0T8oLHn/au6//6puf/+qbn//qm5//6quv/8ma3/bpj0/4e57P+Cte3/grXt/4K17P+Etu3/c6Hz51R9+0T/jKRE/7TC5//O1P//ztT//87U///O1P//0db//qq6/2yW9v9/sPH/d6vw/3ir8P94q/H/e63x/3Ke9udUfftE/4ujRP6wwOf/xc///8PN///Dzf//w83//8fQ//6ouP9tlPj/ear1/22i9P9uovP/bqLz/3Om9P9znfjnVH37RP+Lo0T/rr7n/7zK//+5x///ucf//7nH///AzP/+pbf/bZT5/3Sk9/9kmvf/ZZr2/2Wa9v9rn/f/c5z551R9+0T/i6NE/6u+5/+0xf//sML//7DC//+xwv//ucj//qO3/3CV+v94pfr/Z5n6/2eZ+v9nmfr/b5/7/3ed++dWfvtE/oykRP6sv+f+scX//63B//+twf//rcH//7bJ//6kuP9zlfrnfaH753ie++d4nvvneJ7753uf++d4mvrRaYz4PfuYrT38p7rR/q2/5/+svuf+rL7n/qu+5/+uwef9orbnZ4j4RFZ9+URVfflEVX35RFV9+URYfvlEaoz4PX+c9hL5p7cS+5itPf6MpET/i6RE/4ukRP+LpET/i6RE/JWrRAeqiUQHqohEB6qIRAeqiEQHqYhEB6mJRAiqiz0JqosS1qx5Etypaz3gpWBE4aVfROGlX0ThpV9E4aVfRNynaEQqt53nVcez51LHsudSx7LnUsay51PGs+c1u6TRCKqMPdypaz3nuHzR8MKE5/HCg+fxwoPn8cKD5/HDhefltHbnQL6p/4TYzv991sr/fdbK/33Wyv9/1sz/U8Wz5wepi0TgpWBE8MOG5/3Vmv/+1Jj//tSY//7UmP/+1p3/7bt8/z69qP9608f/btDC/27Qwv9u0ML/c9HE/1DEsOcHqItE4KVfRPDChef+0ZT//9CR///Qkf//0JH//9SY/+27fP89vKf/cc/B/2LKu/9jyrv/Y8q7/2nMvv9Pwq/nB6iKROClX0TwwYbn/s6P///Miv//zIv//8yK///Rlf/tunz/Pbyl/2fKu/9Uw7L/VMOz/1TDs/9dxrb/TsGt5wioikTgpF9E8MGG5/7Kif//yIP//8iD///Hg///zpH/7bp9/0K9pv93zsD/Zci4/2XIuP9lyLj/bcq8/1XDr+cIqItE4KVfRPDEjOf+0Jb//86Q//7OkP/+zZD//9Oc/+28gf83uaL/Rb6o/0G8pv9BvKb/Qbym/0K8pv87uqPnHrCVROKtb0TouH/n7byB/+27gP/tu4D/7buA/+29g//nt37/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20CB%20drag%20and%20go%2C%20%u043E%u0442%2009.01.2017.%20..................%0A%28%7B%0A%20%20link%3A%20%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20U%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0441%u0441%u044B%u043B%u043A%u0443%20%u0432%20%u043D%u043E%u0432%u043E%u0439%20%u0430%u043A%u0442%u0438%u0432%u043D%u043E%u0439%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%22%2C%20cmd%3A%20%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28self.link%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%7D%2C%0A%20%20%20%20%20%20%20%20D%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0441%u0441%u044B%u043B%u043A%u0443%20%u0432%20%u043D%u043E%u0432%u043E%u0439%20%u0444%u043E%u043D%u043E%u0432%u043E%u0439%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%22%2C%20cmd%3A%20%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.addTab%28self.link%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%7D%2C%0A%20%20%20%20%20%20%20%20L%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%22%u041A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0441%u0441%u044B%u043B%u043A%u0443%22%2C%20cmd%3A%20%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gClipboard.write%28self.link%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%7D%2C%0A%20%20%20%20%20%20%20%20R%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%22%u041A%u043E%u043D%u0432%u0435%u0440%u0442%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0441%u0441%u044B%u043B%u043A%u0443%20%u0432%20%u0442%u0435%u043A%u0441%u0442%22%2C%20cmd%3A%20%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self.el.removeAttribute%28%27href%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20XULBrowserWindow.overLink%20%3D%20%27%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20self.el.setAttribute%28%27href%27%2C%20self.link%29%2C%207000%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%7D%2C%0A%20%20%20%20%20%20%20%20UD%3A%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0435%20%u0432%20%u043D%u043E%u0432%u043E%u0439%20%u0430%u043A%u0442%u0438%u0432%u043D%u043E%u0439%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%22%2C%20cmd%3A%20%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28self.img%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%7D%2C%0A%20%20%20%20%20%20%20%20DU%3A%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0435%20%u0432%20%u043D%u043E%u0432%u043E%u0439%20%u0444%u043E%u043D%u043E%u0432%u043E%u0439%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%22%2C%20cmd%3A%20%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.addTab%28self.img%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%7D%2C%0A%20%20%20%20%20%20%20%20LR%3A%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%22%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0435%22%2C%20cmd%3A%20%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20saveImageURL%28self.img%2C%200%2C%200%2C%200%2C%200%2C%20null%2C%20content.document%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%7D%2C%0A%20%20%20%20%20%20%20%20RL%3A%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%22%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0435%20%u0431%u0435%u0437%20%u0437%u0430%u043F%u0440%u043E%u0441%u0430%20%u0432%20%u043F%u0430%u043F%u043A%u0435%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%22%2C%20cmd%3A%20%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20saveImageURL%28self.img%2C%200%2C%200%2C%200%2C%201%2C%20null%2C%20content.document%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%7D%2C%0A%20%20%20%20%20%20%20RLR%3A%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%22%u041A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0435%22%2C%20cmd%3A%20%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28document.popupNode%20%3D%20content.document.createElement%28%27img%27%29%29.src%20%3D%20self.img%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20goDoCommand%28%27cmd_copyImageContents%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%7D%2C%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20text%3A%20%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20U%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%22%u041F%u043E%u0438%u0441%u043A%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u0432%20google%20%u0432%20%u043D%u043E%u0432%u043E%u0439%20%u0430%u043A%u0442%u0438%u0432%u043D%u043E%u0439%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%22%2C%20cmd%3A%20%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28%22http%3A//www.google.com/search%3Fq%3D%22%20+%20escape%28self.this.convertFromUnicode%28%22UTF-8%22%2C%20self.text%29%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%7D%2C%0A%20%20%20%20%20%20%20%20D%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%22%u041F%u043E%u0438%u0441%u043A%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u0432%20google%20%u0432%20%u043D%u043E%u0432%u043E%u0439%20%u0444%u043E%u043D%u043E%u0432%u043E%u0439%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%22%2C%20cmd%3A%20%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.addTab%28%22http%3A//www.google.com/search%3Fq%3D%22%20+%20escape%28self.this.convertFromUnicode%28%22UTF-8%22%2C%20self.text%29%29%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%7D%2C%0A%20%20%20%20%20%20%20%20L%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%22%u041A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%22%2C%20cmd%3A%20%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gClipboard.write%28self.text%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%7D%2C%0A%20%20%20%20%20%20%20%20R%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%22%u0418%u0441%u043A%u0430%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%22%2C%20cmd%3A%20%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gFindBar.onFindCommand%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20gFindBar._find%28%29%2C%200%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%7D%7D%2C%0A%20%20%20%20%20%20%20%20LR%3A%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%22%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0432%20.txt%20%u0444%u0430%u0439%u043B%22%2C%20cmd%3A%20%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20fileTitle%20%3D%20content.document.title.slice%280%2C%2050%29.replace%28/%5B%3A.%5C%5C%5C/%3C%3E%3F*%7C%22%5D+/g%2C%20%22%20%22%29%20+%20%27%20%20%27%20+%20new%20Date%28%29.toLocaleFormat%28%22%25d.%25m.%25Y.%20%25H%B7%25M%B7%25S%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20saveURL%28%22data%3Atext/plain%2C%22%20+%20encodeURIComponent%28content.location%20+%20%28%22%5Cr%5Cn%5Cr%5Cn%22%20+%20self.text%29%29%2C%20fileTitle%20+%20%22.txt%22%2C%20null%2C%20false%2C%20false%2C%20null%2C%20content.document%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%7D%2C%0A%20%20%20%20%20%20%20%20RL%3A%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%22%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0432%20.txt%20%u0444%u0430%u0439%u043B%20%u0431%u0435%u0437%20%u0437%u0430%u043F%u0440%u043E%u0441%u0430%20%u0432%20%u043F%u0430%u043F%u043A%u0435%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%22%2C%20cmd%3A%20%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20fileTitle%20%3D%20content.document.title.slice%280%2C%2050%29.replace%28/%5B%3A.%5C%5C%5C/%3C%3E%3F*%7C%22%5D+/g%2C%20%22%20%22%29%20+%20%27%20%20%27%20+%20new%20Date%28%29.toLocaleFormat%28%22%25d.%25m.%25Y.%20%25H%B7%25M%B7%25S%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20saveURL%28%22data%3Atext/plain%2C%22%20+%20encodeURIComponent%28content.location%20+%20%28%22%5Cr%5Cn%5Cr%5Cn%22%20+%20self.text%29%29%2C%20fileTitle%20+%20%22.txt%22%2C%20null%2C%20false%2C%20true%2C%20null%2C%20content.document%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%7D%2C%0A%20%20%20%20%20%20%20RLD%3A%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%22%u041D%u0435%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u043E%22%2C%20cmd%3A%20%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alert%28%22%u041D%u0435%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u043E%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%7D%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%0A%20%20init%3A%20function%28%29%20%7B%0A%20%20%20%20%20self.this%20%3D%20this%3B%0A%0A%20%20%20%20%20//%20%u0441%u043E%u0437%u0434%u0430%u0442%u044C%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0443%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%0A%20%20%20%20%20var%20arr%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%5B%22link%22%2C%20%22text%22%5D.forEach%28ob%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20arr.push%28%22%5Cn%22%20+%20ob%29%3B%0A%20%20%20%20%20%20%20%20for%20%28var%20key%20in%20this%5Bob%5D%29%20arr.push%28key%20+%20%27%3A%27%20+%20%5B%22%20%20%20%20%20%22%2C%20%22%20%20%20%22%2C%20%22%20%22%5D%5Bkey.length-1%5D%20+%20this%5Bob%5D%5Bkey%5D.name%29%3B%0A%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20self.tooltipText%20%3D%20self.label%20+%20%22%5Cn%22%20+%20arr.join%28%22%5Cn%22%29%3B%0A%20%20%20%20%20%0A%20%20%20%20%20%5B%22dragstart%22%2C%20%22dragover%22%2C%20%22drop%22%5D.forEach%28type%3D%3E%20addEventListener%28type%2C%20this%2C%20false%2C%20gBrowser%29%29%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20convertFromUnicode%3A%20function%28charset%2C%20str%29%20%7B%0A%20%20%20%20%20var%20converter%20%3D%20Cc%5B%22@mozilla.org/intl/scriptableunicodeconverter%22%5D.createInstance%28Ci.nsIScriptableUnicodeConverter%29%3B%0A%20%20%20%20%20converter.charset%20%3D%20charset%3B%0A%20%20%20%20%20str%20%3D%20converter.ConvertFromUnicode%28str%29%3B%0A%20%20%20%20%20return%20str%20+%20converter.Finish%28%29%3B%0A%20%20%7D%2C%0A%0A%20%20handleEvent%3A%20function%28e%29%20%7B%0A%20%20%20%20%20if%20%28%20%21content.location.protocol.startsWith%28%22http%22%29%20%29%20return%3B%20//%20%u0435%u0441%u043B%u0438%20%u043D%u0435%20http%28s%29%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0430%0A%0A%20%20%20%20%20switch%20%28e.type%29%20%7B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20case%20%22dragstart%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20self.lastDirection%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20self.currentPoint%20%3D%20%5Be.screenX%2C%20e.screenY%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20//%20%u043F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u0435%u043C%u044B%u0439%20%u044D%u043B%u0435%u043C%u0435%u043D%u0442%2C%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u043B%u0438%20%u0430%u0434%u0440%u0435%u0441%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u0438%u043B%u0438%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u044F%0A%20%20%20%20%20%20%20%20%20%20%20self.el%20%3D%20e.target%3B%0A%20%20%20%20%20%20%20%20%20%20%20self.text%20%3D%20e.dataTransfer.getData%28%22text/unicode%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20self.img%20%3D%20e.dataTransfer.getData%28%22application/x-moz-file-promise-url%22%29.split%28%22%5Cn%22%29%5B0%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20var%20textLink%20%3D%20/%5E%28%5Ba-z%5D+%3A%5C/%5C/%29%3F%28%5Ba-z%5D%28%5Ba-z0-9%5C-%5D*%5C.%29+%28%5Ba-z%5D%7B2%7D%7Caero%7Carpa%7Cbiz%7Ccom%7Ccoop%7Cedu%7Cgov%7Cinfo%7Cint%7Cjobs%7Cmil%7Cmuseum%7Cname%7Cnato%7Cnet%7Corg%7Cpro%7Ctravel%29%7C%28%28%5B0-9%5D%7C%5B1-9%5D%5B0-9%5D%7C1%5B0-9%5D%7B2%7D%7C2%5B0-4%5D%5B0-9%5D%7C25%5B0-5%5D%29%5C.%29%7B3%7D%5B0-9%5D%7C%5B1-9%5D%5B0-9%5D%7C1%5B0-9%5D%7B2%7D%7C2%5B0-4%5D%5B0-9%5D%7C25%5B0-5%5D%29%28%3A%5B0-9%5D%7B1%2C5%7D%29%3F%28%5C/%5Ba-z0-9_%5C-%5C.%7E%5D+%29*%28%5C/%28%5Ba-z0-9_%5C-%5C.%5D*%29%28%5C%3F%5Ba-z0-9+_%5C-%5C.%25%3D%26amp%3B%5D*%29%3F%29%3F%28%23%5Ba-z%5D%5Ba-z0-9_%5D*%29%3F%24%7C%5Ecustombutton%3A%5C/%5C/%5CS+%24/.test%28self.text%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20self.link%20%3D%20textLink%20%3F%20self.text%20%3A%20e.dataTransfer.getData%28%22text/x-moz-url%22%29.split%28%22%5Cn%22%29%5B0%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20//%20%u043F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0438%20%u043E%u0431%u044F%u0432%u0438%u0442%u044C%20%u0442%u0438%u043F%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u0435%u043C%u043E%u0433%u043E%20%u044D%u043B%u0435%u043C%u0435%u043D%u0442%u0430%0A%20%20%20%20%20%20%20%20%20%20%20self.type%20%3D%20%28self.img%20%7C%7C%20self.link%29%20%3F%20%22link%22%20%3A%20%22text%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20case%20%22dragover%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20Cc%5B%22@mozilla.org/widget/dragservice%3B1%22%5D.getService%28Ci.nsIDragService%29.getCurrentSession%28%29.canDrop%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20//%20%u043F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043D%u0430%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u044F%2C%20L%20%u043D%u0430%u043B%u0435%u0432%u043E%2C%20R%20%u043D%u0430%u043F%u0440%u0430%u0432%u043E%2C%20U%20%u0432%u0435%u0440%u0445%2C%20D%20%u0432%u043D%u0438%u0437%0A%20%20%20%20%20%20%20%20%20%20%20var%20%5BsubX%2C%20subY%5D%20%3D%20%5Be.screenX%20-%20self.currentPoint%5B0%5D%2C%20e.screenY%20-%20self.currentPoint%5B1%5D%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20var%20%5BdistX%2C%20distY%5D%20%3D%20%5B%28subX%20%3E%200%20%3F%20subX%20%3A%20%28-subX%29%29%2C%20%28subY%20%3E%200%20%3F%20subY%20%3A%20%28-subY%29%29%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20distX%20%3C%2010%20%26%26%20distY%20%3C%2010%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20var%20direction%20%3D%20distX%20%3E%20distY%20%3F%20%28subX%20%3C%200%20%3F%20%22L%22%20%3A%20%22R%22%29%20%3A%20%28subY%20%3C%200%20%3F%20%22U%22%20%3A%20%22D%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20self.currentPoint%20%3D%20%5Be.screenX%2C%20e.screenY%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20//%20%u043F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0432%u0435%u0441%u044C%20%u0436%u0435%u0441%u0442%2C%20%u0443%u043A%u0430%u0437%u0430%u0442%u044C%20%u043A%u043E%u0434%20%u0436%u0435%u0441%u0442%u0430%20%u0438%20%u043F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0443%20%u0436%u0435%u0441%u0442%u0430%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20direction%20%21%3D%20self.lastDirection.split%28%27%27%29.pop%28%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self.lastDirection%20+%3D%20direction%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20dir%20%3D%20self.lastDirection%2C%20ob%20%3D%20this%5Bself.type%5D%5Bdir%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this.cmd%20%3D%20ob%20%3F%20ob.cmd%20%3A%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20XULBrowserWindow.statusTextField.label%20%3D%20ob%20%3F%20%22%u0416%u0435%u0441%u0442%20%u043C%u044B%u0448%u0438%3A%20%22%20+%20dir%20+%20%22%20%20%20%22%20+%20ob.name%20%3A%20%22%u041D%u0435%u0438%u0437%u0432%u0435%u0441%u0442%u043D%u044B%u0439%20%u0436%u0435%u0441%u0442%20%u043C%u044B%u0448%u0438%3A%20%22%20+%20dir%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20case%20%22drop%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20//%20%u0435%u0441%u043B%u0438%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u0435%u0442%u0441%u044F%20%u0432%20%u043F%u043E%u043B%u0435%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0433%u043E%20%u0432%u0432%u043E%u0434%u0430%20%u0438%u043B%u0438%20%u0438%u0437-%u0437%u0430%20%u043F%u0440%u0435%u0434%u0435%u043B%u043E%u0432%20%u043E%u043A%u043D%u0430%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20%21self.currentPoint%20%7C%7C%20e.target%20instanceof%20Ci.nsIDOMNSEditableElement%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20//%20%u0437%u0430%u043F%u0443%u0441%u0442%u0438%u0442%u044C%20%u043A%u043E%u0434%20%u0436%u0435%u0441%u0442%u0430%20%u0438%20%u0441%u0431%u0440%u043E%u0441%u0438%u0442%u044C%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0443%20%u0436%u0435%u0441%u0442%u0430%0A%20%20%20%20%20%20%20%20%20%20%20this.cmd%20%26%26%20this.cmd%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20XULBrowserWindow.statusTextField.label%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%7D%0A%7D%29.init%28%29%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B//%20%u0420%u0435%u0434%u0430%u043A%u0442%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u044D%u0442%u0443%20%u043A%u043D%u043E%u043F%u043A%u0443%20....%0Acustombuttons.editButton%28this%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

// CB drag and go, от 09.01.2017. ..................
({
  link: 
        {
        U: {
            name: "Открыть ссылку в новой активной странице", cmd: ()=> {
               gBrowser.selectedTab = gBrowser.addTab(self.link);
           }},
        D: {
            name: "Открыть ссылку в новой фоновой странице", cmd: ()=> {
               gBrowser.addTab(self.link);
           }},
        L: {
            name: "Копировать ссылку", cmd: ()=> {
               gClipboard.write(self.link);
           }},
        R: {
            name: "Конвертировать ссылку в текст", cmd: ()=> {
               self.el.removeAttribute('href');
               XULBrowserWindow.overLink = '';
               setTimeout(()=> self.el.setAttribute('href', self.link), 7000);
           }},
        UD:{
            name: "Открыть изображение в новой активной странице", cmd: ()=> {
               gBrowser.selectedTab = gBrowser.addTab(self.img);
           }},
        DU:{
            name: "Открыть изображение в новой фоновой странице", cmd: ()=> {
               gBrowser.addTab(self.img);
           }},
        LR:{
            name: "Сохранить изображение", cmd: ()=> {
               saveImageURL(self.img, 0, 0, 0, 0, null, content.document);
           }},
        RL:{
            name: "Сохранить изображение без запроса в папке загрузки", cmd: ()=> {
               saveImageURL(self.img, 0, 0, 0, 1, null, content.document);
           }},
       RLR:{
            name: "Копировать изображение", cmd: ()=> {
               (document.popupNode = content.document.createElement('img')).src = self.img;
               goDoCommand('cmd_copyImageContents');
           }},
        },
  text: 
        {
        U: {
            name: "Поиск текста в google в новой активной странице", cmd: ()=> {
               gBrowser.selectedTab = gBrowser.addTab("http://www.google.com/search?q=" + escape(self.this.convertFromUnicode("UTF-8", self.text)));
           }},
        D: {
            name: "Поиск текста в google в новой фоновой странице", cmd: ()=> {
               gBrowser.addTab("http://www.google.com/search?q=" + escape(self.this.convertFromUnicode("UTF-8", self.text)) );
           }},
        L: {
            name: "Копировать текст", cmd: ()=> {
               gClipboard.write(self.text);
           }},
        R: {
            name: "Искать текст на странице", cmd: ()=> {
               gFindBar.onFindCommand();
               setTimeout(()=> gFindBar._find(), 0);
               
           }},
        LR:{
            name: "Сохранить текст в .txt файл", cmd: ()=> {
               var fileTitle = content.document.title.slice(0, 50).replace(/[:.\\\/<>?*|"]+/g, " ") + '  ' + new Date().toLocaleFormat("%d.%m.%Y. %H·%M·%S");
               saveURL("data:text/plain," + encodeURIComponent(content.location + ("\r\n\r\n" + self.text)), fileTitle + ".txt", null, false, false, null, content.document);
           }},
        RL:{
            name: "Сохранить текст в .txt файл без запроса в папке загрузки", cmd: ()=> {
               var fileTitle = content.document.title.slice(0, 50).replace(/[:.\\\/<>?*|"]+/g, " ") + '  ' + new Date().toLocaleFormat("%d.%m.%Y. %H·%M·%S");
               saveURL("data:text/plain," + encodeURIComponent(content.location + ("\r\n\r\n" + self.text)), fileTitle + ".txt", null, false, true, null, content.document);
           }},
       RLD:{
            name: "Не установлено", cmd: ()=> {
               alert("Не установлено");
           }}
        },
        
  init: function() {
     self.this = this;

     // создать подсказку у кнопки
     var arr = [];
     ["link", "text"].forEach(ob=> {
        arr.push("\n" + ob);
        for (var key in this[ob]) arr.push(key + ':' + ["     ", "   ", " "][key.length-1] + this[ob][key].name);
     });
     self.tooltipText = self.label + "\n" + arr.join("\n");
     
     ["dragstart", "dragover", "drop"].forEach(type=> addEventListener(type, this, false, gBrowser));
  },
  
  convertFromUnicode: function(charset, str) {
     var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
     converter.charset = charset;
     str = converter.ConvertFromUnicode(str);
     return str + converter.Finish();
  },

  handleEvent: function(e) {
     if ( !content.location.protocol.startsWith("http") ) return; // если не http(s) страница

     switch (e.type) {
        
        case "dragstart": {
           self.lastDirection = "";
           self.currentPoint = [e.screenX, e.screenY];
            
           // получить перетаскиваемый элемент, текст или адрес ссылки или изображения
           self.el = e.target;
           self.text = e.dataTransfer.getData("text/unicode");
           self.img = e.dataTransfer.getData("application/x-moz-file-promise-url").split("\n")[0];
           var textLink = /^([a-z]+:\/\/)?([a-z]([a-z0-9\-]*\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)|(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(:[0-9]{1,5})?(\/[a-z0-9_\-\.~]+)*(\/([a-z0-9_\-\.]*)(\?[a-z0-9+_\-\.%=&amp;]*)?)?(#[a-z][a-z0-9_]*)?$|^custombutton:\/\/\S+$/.test(self.text);
           self.link = textLink ? self.text : e.dataTransfer.getData("text/x-moz-url").split("\n")[0];
           
           // получить и обявить тип перетаскиваемого элемента
           self.type = (self.img || self.link) ? "link" : "text";
           
           break;
           }
           
    case "dragover": {
           Cc["@mozilla.org/widget/dragservice;1"].getService(Ci.nsIDragService).getCurrentSession().canDrop = true;
           
           // получить направление перетаскивания, L налево, R направо, U верх, D вниз
           var [subX, subY] = [e.screenX - self.currentPoint[0], e.screenY - self.currentPoint[1]];
           var [distX, distY] = [(subX > 0 ? subX : (-subX)), (subY > 0 ? subY : (-subY))];
           if ( distX < 10 && distY < 10 ) return;
           var direction = distX > distY ? (subX < 0 ? "L" : "R") : (subY < 0 ? "U" : "D");
           self.currentPoint = [e.screenX, e.screenY];
                      
           // получить весь жест, указать код жеста и показать подсказку жеста
           if ( direction != self.lastDirection.split('').pop() ) {
                self.lastDirection += direction;
                var dir = self.lastDirection, ob = this[self.type][dir];
                
                this.cmd = ob ? ob.cmd : "";
                XULBrowserWindow.statusTextField.label = ob ? "Жест мыши: " + dir + "   " + ob.name : "Неизвестный жест мыши: " + dir;
                }

           break;
           }
        
    case "drop": {
           // если перетаскивается в поле текстового ввода или из-за пределов окна браузера
           if ( !self.currentPoint || e.target instanceof Ci.nsIDOMNSEditableElement ) return;
           e.preventDefault();

           // запустить код жеста и сбросить подсказку жеста
           this.cmd && this.cmd();
           XULBrowserWindow.statusTextField.label = "";
           }
    }
   }
}).init();

Отредактировано bunda1 (25-09-2015 00:48:41)

Отсутствует

 

№215-10-2014 15:55:10

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4450
UA: Firefox 24.0

Re: [CB]CB drag and go

Полезные коды для CB drag and go

Сохранять изображения в указанию папку, путь к папке указываете с двумя \\:

Выделить код

Код:

               
var path = 'C:\\qwerty';
   
var run = cbu.getPrefs("browser.download.folderList"),
    use = cbu.getPrefs("browser.download.useDownloadDir"),
    dir = gPrefService.getComplexValue("browser.download.dir", Ci.nsISupportsString).data;
      
cbu.setPrefs("browser.download.folderList", 2);
cbu.setPrefs("browser.download.useDownloadDir", true);
cbu.setPrefs("browser.download.dir", convertFromUnicode("UTF-8", path) );
      
saveImageURL(img, 0, 0, 0, 1, null, content.document);
      
cbu.setPrefs("browser.download.folderList", run);
cbu.setPrefs("browser.download.useDownloadDir", use);
cbu.setPrefs("browser.download.dir", convertFromUnicode("UTF-8", dir) );

Вверх (U) поиск в новой активной вкладке (поисковик по умолчанию)
Вниз (D) поиск в новой фоновой вкладке (поисковик по умолчанию)

Выделить код

Код:

        U: {
            name: "Поиск текста поисковиком по умолчанию в новой активной странице", cmd: ()=> {
               var submission = Services.search.currentEngine.getSubmission(self.text, null);
               gBrowser.loadOneTab(submission.uri.spec, null, null, submission.postData, false, false);
               
           }},
        D: {
            name: "Поиск текста поисковиком по умолчанию в новой фоновой странице", cmd: ()=> {
               var submission = Services.search.currentEngine.getSubmission(self.text, null);
               gBrowser.loadOneTab(submission.uri.spec, null, null, submission.postData, true, false);
           }},

Отсутствует

 

№315-10-2014 16:28:48

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 2447
UA: Firefox 36.0

Re: [CB]CB drag and go

bunda1 пишет:

D - открыть изображение в новой фоновой странице

Открывает сразу две вкладки с изображением.

Добавлено 15-10-2014 16:31:15
Остальное в фоне тоже открывается сразу в двух вкладках.

Добавлено 15-10-2014 16:33:49
Сохраняет изображения, ссылки тоже в двух экземплярах

Добавлено 15-10-2014 16:37:31
А в целом кнопка после исправлений обещается быть очень полезной, спасибо.

Отредактировано voqabuhe (15-10-2014 16:38:05)

Отсутствует

 

№415-10-2014 16:52:43

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4450
UA: Firefox 24.0

Re: [CB]CB drag and go

voqabuhe пишет:

Открывает сразу две вкладки с изображением.

На FF36.0?

Отсутствует

 

№515-10-2014 17:38:57

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 36.0

Re: [CB]CB drag and go

У меня все в норме на 36-ой. Спасибо, bunda1.

Отсутствует

 

№615-10-2014 17:50:29

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 2447
UA: Firefox 36.0

Re: [CB]CB drag and go

bunda1 пишет:

На FF36.0?

Ага, шо опять толко у меня такое? :)

Добавлено 15-10-2014 17:56:40
bunda1
А всё разобрался, просто случайно сразу две кнопки установил. Видно на радости решил сразу две взять. :)
Так что прошу прощения за ложную тревогу.  Спасибо.

Отредактировано voqabuhe (15-10-2014 17:56:40)

Отсутствует

 

№715-10-2014 18:10:48

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4450
UA: Firefox 24.0

Re: [CB]CB drag and go

Немного подправил кнопку, спасибо Dumby за замечание.

Отсутствует

 

№818-10-2014 23:40:59

piryshco
Участник
 
Группа: Members
Зарегистрирован: 18-10-2014
Сообщений: 3
UA: Firefox 33.0

Re: [CB]CB drag and go

Кнопка чудесная, но есть небольшая странность. Если на панелях присутствует кнопка CB Cookie Manager, то эта не работает:(. Или у только меня так?

Отсутствует

 

№919-10-2014 23:33:18

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4450
UA: Firefox 24.0

Re: [CB]CB drag and go

А что за CB Cookie Manager?

Отсутствует

 

№1021-10-2014 22:26:28

piryshco
Участник
 
Группа: Members
Зарегистрирован: 18-10-2014
Сообщений: 3
UA: Firefox 33.0

Re: [CB]CB drag and go

bunda1 пишет:

А что за CB Cookie Manager?

Кнопка для Сustom Buttons

Отсутствует

 

№1121-10-2014 22:29:36

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4450
UA: Firefox 24.0

Re: [CB]CB drag and go

piryshco пишет:

bunda1 пишет:

А что за CB Cookie Manager?

Кнопка для Сustom Buttons

:D исчерпывающий ответ, нечего не скажешь.

Отсутствует

 

№1222-10-2014 00:15:45

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 378
UA: Firefox 28.0
Веб-сайт

Re: [CB]CB drag and go

Имхо, имеется ввиду Cookie Managerr(Firefox)


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№1322-10-2014 19:08:51

piryshco
Участник
 
Группа: Members
Зарегистрирован: 18-10-2014
Сообщений: 3
UA: Firefox 33.0

Re: [CB]CB drag and go

difabor пишет:

Имхо, имеется ввиду Cookie Managerr(Firefox)

Да, Вы правы.

Отсутствует

 

№1404-11-2014 00:54:12

Александр Колесников
Участник
 
Группа: Members
Зарегистрирован: 30-12-2005
Сообщений: 171
UA: Firefox 31.0

Re: [CB]CB drag and go

Подскажите, пожалуйста, код для запуска перетаскиванием элемента, который бы:

1. Текст. Искал выделенный текст на текущей странице с подсветкой. Идеально, чтоб вызывался стандартный поиск Ctrl F с введённым искомым текстом. Я использую FindBar Tweak :: Дополнения Firefox и он меня устраивает вполне.

2. Изображения. Реализовал поиск похожих изображений на google.com в новой активной вкладке.
- сам додумался:

Выделить код

Код:

                      //  поиск похожих изображений на google.com в новой активной вкладке      
                      gBrowser.selectedTab = gBrowser.addTab("http://www.google.com/searchbyimage?image_url=" + img );                                          
                      return;

3. Ссылки. Копировал в буфер обмена ссылку. - сам додумался :-)

Выделить код

Код:

                      // копировать ссылку в буфер обмена
                      gClipboard.write( link );

Отредактировано Александр Колесников (04-11-2014 10:01:11)

Отсутствует

 

№1506-11-2014 20:08:07

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4450
UA: Firefox 28.0

Re: [CB]CB drag and go

Александр Колесников пишет:

1. Текст. Искал выделенный текст на текущей странице с подсветкой. Идеально, чтоб вызывался стандартный поиск Ctrl F с введённым искомым текстом. Я использую FindBar Tweak :: Дополнения Firefox и он меня устраивает вполне.

Выделить код

Код:

gFindBar.onFindCommand();

Отсутствует

 

№1606-11-2014 22:19:41

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 2447
UA: Firefox 36.0

Re: [CB]CB drag and go

bunda1
Можешь сделать чтобы кнопка корректно работала с текстовыми ссылками?

Отсутствует

 

№1706-11-2014 22:41:48

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4450
UA: Firefox 28.0

Re: [CB]CB drag and go

voqabuhe пишет:

bunda1
Можешь сделать чтобы кнопка корректно работала с текстовыми ссылками?

А что не так.

Отсутствует

 

№1806-11-2014 23:16:31

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 2447
UA: Firefox 36.0

Re: [CB]CB drag and go

bunda1 пишет:

А что не так

Просто хочется чтобы кнопка работала с текстовыми ссылками не как с текстом, а точно также как и с активными ссылками

bunda1 пишет:

Ссылки:
U - открыть ссылку в новой активной странице
D - открыть ссылку в новой фоновой странице
L - сохранить ссылку, с запросом
R - сохранить ссылку, без запроса в папку загрузки

Отредактировано voqabuhe (06-11-2014 23:55:27)

Отсутствует

 

№1907-11-2014 01:01:46

Александр Колесников
Участник
 
Группа: Members
Зарегистрирован: 30-12-2005
Сообщений: 171
UA: Firefox 31.0

Re: [CB]CB drag and go

bunda1 Спасибо! Суперская замена почившему аддону Easy DragToGo :: Дополнения Firefox!

Отсутствует

 

№2010-11-2014 23:01:16

Александр Колесников
Участник
 
Группа: Members
Зарегистрирован: 30-12-2005
Сообщений: 171
UA: Firefox 31.0

Re: [CB]CB drag and go

bunda1 пишет:

if ( direction == "L" ) { // сохранить изображение saveImageURL( img, "save", null, false, false, null, content.document); return; }

не везде срабатывает, вернее, выдаётся запрос на сохранение *.htm , *.php и т.п. . Вот тут например http://gallery.ru/watch?ph=bw8E-eHDxO&a … amp;zoom=8 , да и везде на том сайте. Ну, вот ещё, например, аватарки на http://forum.xda-developers.com и т.д.

Отсутствует

 

№2111-11-2014 20:00:40

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4450
UA: Firefox 28.0

Re: [CB]CB drag and go

Александр Колесников пишет:

bunda1 пишет:

if ( direction == "L" ) { // сохранить изображение saveImageURL( img, "save", null, false, false, null, content.document); return; }

не везде срабатывает, вернее, выдаётся запрос на сохранение *.htm , *.php и т.п. . Вот тут например http://gallery.ru/watch?ph=bw8E-eHDxO&a … amp;zoom=8 , да и везде на том сайте. Ну, вот ещё, например, аватарки на http://forum.xda-developers.com и т.д.

Выделить код

Код:

                 if ( direction == "R" ) {
                      // сохранить изображение без запроса на место сохранения в папке загрузки или на диск C:

:(

Добавлено 11-11-2014 20:01:55

voqabuhe пишет:

bunda1 пишет:

А что не так

Просто хочется чтобы кнопка работала с текстовыми ссылками не как с текстом, а точно также как и с активными ссылками

bunda1 пишет:

Ссылки:
U - открыть ссылку в новой активной странице
D - открыть ссылку в новой фоновой странице
L - сохранить ссылку, с запросом
R - сохранить ссылку, без запроса в папку загрузки

Попробую в воскресении дни.

Отредактировано bunda1 (11-11-2014 20:01:55)

Отсутствует

 

№2211-11-2014 22:33:08

Александр Колесников
Участник
 
Группа: Members
Зарегистрирован: 30-12-2005
Сообщений: 171
UA: Firefox 31.0

Re: [CB]CB drag and go

bunda1 пишет:

if ( direction == "R" ) { // сохранить изображение без запроса на место сохранения в папке загрузки или на диск C:

bunda1 пишет:

В кнопке легко поменять код запускаемый перетаскиванием элемента

Вот я и поменял... К сути выполняемых действий это же отношения не имеет...
Вот так сейчас у меня настроена кнопка:

скрытый текст

Выделить код

Код:

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//CB drag and go( Firefox17+ ) 
//Версия: от 15.10.2014 
//https://forum.mozilla-russia.org/viewtopic.php?pid=664249#p664249
//Автор: bunda1
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function dragAndGo(e) {
   
   // стоп, если внутренне страницы или страница с файлами
   var protocol = content.location.protocol;
   if ( ["about:", "chrome:", "jar:", "data:", "file:"].indexOf( protocol ) !== -1 ) return;
 

   switch ( e.type ) {
      case "dragstart": 
            self.startPoint = {x:e.screenX, y:e.screenY}; break; // получить начальные координаты перетаскивания

      case "dragover":
            Cc["@mozilla.org/widget/dragservice;1"].getService(Ci.nsIDragService).getCurrentSession().canDrop = true; break;

      case "drop": {            
            // стоп, если перетаскивается в поле текстового ввода или из-за пределов окна браузера       
            var name = e.target.localName;
            if ( !self.startPoint || ["text", "input", "textarea", "password"].indexOf( name ) !== -1 ) return;                    

            e.preventDefault(); 

            // получить направление перетаскивания, L налево, R направо, U верх, D вниз                                       
            var [subX, subY] = [e.screenX - self.startPoint.x, e.screenY - self.startPoint.y]; 
            var [distX, distY] = [(subX > 0 ? subX : (-subX)), (subY > 0 ? subY : (-subY))];
            var direction = distX > distY ? (subX < 0 ? "L" : "R") : (subY < 0 ? "U" : "D");
            self.startPoint = 0;
            
            // стоп, если перетаскивается меньше минимального расстояния 
            if ( distX > distY ? distX < 12 : distY < 12 ) return; 


            // Ссылки ....
            if ( e.dataTransfer.types.contains("text/x-moz-url") ) {
                 var link = e.dataTransfer.getData("text/x-moz-url").split("\n")[0];
                      
                 if ( direction == "U" ) {
                      
                      }
                 if ( direction == "D" ) {
                      // сохранить ссылку
                      saveImageURL( link, "save", null, false, false, null, content.document);
                      return;
                      
                      // открыть ссылку в новой фоновой странице
                      //gBrowser.addTab( link );
                      //return;
                      }    
                 if ( direction == "L" ) {
                      // копировать ссылку в буфер обмена
                      gClipboard.write( link );
                      } 
                 if ( direction == "R" ) {
                      // открыть ссылку в новой активной странице
                      gBrowser.selectedTab = gBrowser.addTab( link );
                      return;
                      
                      // сохранить ссылку или изображение без запроса на место сохранения в папке загрузки или на диск C:
                      //saveImageURL( link, 0, 0, 0, 1, null, content.document );
                      //return;
                      }      
                 }
                                
            // Изображения ....
            if ( e.dataTransfer.types.contains("application/x-moz-file-promise-url") ) {
                 var img = e.dataTransfer.getData("application/x-moz-file-promise-url").split("\n")[0]

                 if ( direction == "U" ) {
                      //  поиск похожих изображений на google.com в новой активной вкладке      
                      gBrowser.selectedTab = gBrowser.addTab("http://www.google.com/searchbyimage?image_url=" + img );                                          
                      return;
                      }
                 if ( direction == "D" ) {
                      // сохранить изображение
                      saveImageURL( img, "save", null, false, false, null, content.document);
                      return;
                      }
                 if ( direction == "L" ) {
                      // открыть изображение в новой активной странице
                      gBrowser.selectedTab = gBrowser.addTab( img );
                      return;
                      } 
                 if ( direction == "R" ) {
                      // открыть изображение в новой фоновой странице
                      gBrowser.addTab( img );
                      return;
                      
                      // сохранить изображение без запроса на место сохранения в папке загрузки или на диск C:
                      //saveImageURL( img, 0, 0, 0, 1, null, content.document );
                      //return;
                      }        
                 }
                                     
            // Выделенный текст ....
            if ( e.dataTransfer.getData("text/unicode") ) { 
                 var sel = e.dataTransfer.getData("text/unicode");                              
 
                 if ( direction == "U" ) {
                      // поиск текста в google в новой активной странице
                      gBrowser.selectedTab = gBrowser.addTab("http://www.google.com/search?q=" + sel );                                          
                      return;
                      }     
                 if ( direction == "D") {
                      // поиск текста на текущей странице, как по "CTRL F"
                      gFindBar.onFindCommand( sel );
                 
                      // поиск текста в google в новой фоновой странице
                      //gBrowser.addTab("http://www.google.com/search?q=" + escape( convertFromUnicode("UTF-8", sel )) );
                      //return;
                      }
                 if ( direction == "L" ) {
                      // копировать в буфер обмена
                      gClipboard.write( sel ); 
                      
                      }     
                 if ( direction == "R" ) {
                      // открыть текстовые ссылки в новой активной странице
                      gBrowser.selectedTab = gBrowser.addTab( sel );                           
                      return;
                      
                      // сохранить текст в .txt файл
                      //var fileTitle = content.document.title.slice(0, 50) + '  ' + (new Date()).toLocaleFormat("%H·%M·%S");
                      //saveURL("data:text/plain," + encodeURIComponent( content.location + ("\r\n\r\n" + sel )), 
                      //                                  fileTitle + ".txt", null, false, false, null, content.document);                    
                      }  
                 }                
            }
    }
};
["dragstart", "dragover", "drop"].forEach(function(type) addEventListener(type, dragAndGo, false, gBrowser) ); 


// Подсказка кнопки ............................................................................
this.tooltipText = "CB drag and go \nЗапускает жести мыши для ЛКМ на странице \nЛ: Редактировать эту кнопку";

Отсутствует

 

№2311-11-2014 23:46:46

Александр Колесников
Участник
 
Группа: Members
Зарегистрирован: 30-12-2005
Сообщений: 171
UA: Firefox 31.0

Re: [CB]CB drag and go

bunda1
Может быть, вам интересно будет посмотреть на код easy_dragtogo-1.1.7 beta17.xpi — RGhost — файлообменник " Это китайцы пилят устаревшее расширение. Но и там gallery.ru ненормально обрабатывается в смысле загрузки изображений, зато многие другие нормально. Вот easydragtogo.js оттуда

скрытый текст

Выделить код

Код:

// ==========================================================================
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
// The contents of this file are subject to the Mozilla Public License VersionaEvent
// 1.1 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
// http://www.mozilla.org/MPL/
//
// Software distributed under the License is distributed on an "AS IS" basis,
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
// for the specific language governing rights and limitations under the
// License.
//
// The Original Code is Easy DragToGo code.
//
// The Initial Developer of the Original Code is Sunwan.
// Portions created by the Initial Developer are Copyright (C) 2008
// the Initial Developer. All Rights Reserved.
//
// Contributor(s):
//   Sunwan <SunwanCN@gmail.com>
//
// Alternatively, the contents of this file may be used under the terms of
// either of the GNU General Public License Version 2 or later (the "GPL"),
// or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
// in which case the provisions of the GPL or the LGPL are applicable instead
// of those above. If you wish to allow use of your version of this file only
// under the terms of either the GPL or the LGPL, and not to allow others to
// use your version of this file under the terms of the MPL, indicate your
// decision by deleting the provisions above and replace them with the notice
// and other provisions required by the GPL or the LGPL. If you do not delete
// the provisions above, a recipient may use your version of this file under
// the terms of any one of the MPL, the GPL or the LGPL.
// ==========================================================================
var easyDragToGo = {

    loaded: false,
    moving: false,
    StartAlready: false,
    onStartEvent: null,
    // drag start event
    onDropEvent: null,
    // drag drop event
    aXferData: null,
    // drag data
    aDragSession: null,
    // drag session
    timeId: null,
    _statusTextField: null,
    _clearStatusTimer: null,
    _statustext: null,
    aReferrerURI: null,
    _statustext: null,
    onLoad: function () {
       
        if (!easyDragToGo.loaded) {
            var contentArea = getBrowser().mPanelContainer;
            if (!contentArea) alert('EasyDragToGo+ failed to initialize!');

        easyDragToGo._statusTextField = document.getElementById("statusbar-display");
        if (!easyDragToGo._statusTextField)
            easyDragToGo._statusTextField = gBrowser.getStatusPanel();
            
            if (contentArea) {

                /*      eval("nsDragAndDrop.dragOver =" + nsDragAndDrop.dragOver.toString().replace(
            'aEvent.stopPropagation();',
            'if ( !easyDragToGo.moving ) { $& }')      
            );     
            
          eval("nsDragAndDrop.checkCanDrop =" + nsDragAndDrop.checkCanDrop.toString().replace(
          'if ("canDrop" in aDragDropObserver)',
          'if (easyDragToGo.StartAlready) this.mDragSession.canDrop = true; $&')
        ); */

                contentArea.addEventListener('dragstart', function (e) {
                    if (e.target.nodeName == "A") {
                        var selectLinkText = document.commandDispatcher.focusedWindow.getSelection().toString();
                        if (selectLinkText != "" && e.explicitOriginalTarget == document.commandDispatcher.focusedWindow.getSelection().focusNode) {
                            e.dataTransfer.setData("text/plain", selectLinkText);
                            e.dataTransfer.clearData("text/x-moz-url");
                            e.dataTransfer.clearData("text/x-moz-url-desc");
                            e.dataTransfer.clearData("text/x-moz-url-data");
                            e.dataTransfer.clearData("text/uri-list");
                        }
                    }
                    easyDragToGo.dragStart(e);
                }, false);
                contentArea.addEventListener('dragover', function (e) {
                    if (easyDragToGo._nodeAcceptsDrops(e.target)) {
                        easyDragToGo.clean();
                        return;
                    }
                    easyDragToGo.moving = true;
                    nsDragAndDrop.dragOver(e, easyDragToGoDNDObserver);
                    easyDragToGo.moving = false;
                }, false);
                contentArea.addEventListener('dragdrop', function (e) {
                    if (easyDragToGo._nodeAcceptsDrops(e.target)) {
                        easyDragToGo.clean();
                        return;
                    }

                    nsDragAndDrop.drop(e, easyDragToGoDNDObserver);
                }, false);
                contentArea.addEventListener('drop', function (e) {
                    nsDragAndDrop.drop(e, easyDragToGoDNDObserver);
                }, false);
            }
            easyDragToGo.loaded = true;
        }
    },

    dragStart: function (aEvent) {
        this.onStartEvent = aEvent;
        this.StartAlready = true;
        this.dragsettimeout();
    },

    clean: function () {
        this.StartAlready = false;
        if (this.onDropEvent) {
            this.onDropEvent.preventDefault();
            this.onDropEvent.stopPropagation();
        }
        this.onStartEvent = this.onDropEvent = this.aXferData = this.aDragSession = null;
    },

    dragsettimeout: function () {
        var timeout = easyDragUtils.getPref("timeout", 0);
        if (timeout > 0) {
            clearTimeout(this.timeId);
            var event = {
                notify: function (timer) {
                    easyDragToGo.clean()
                }
            }
            timeId = Components.classes["@mozilla.org/timer;1"].createInstance(Components.interfaces.nsITimer);
            timeId.initWithCallback(event, timeout, Components.interfaces.nsITimer.TYPE_ONE_SHOT);
        }
    },


    //* The Original Code is FireGestures.
    setStatusText: function (aText) {
       easyDragToGo._statusTextField.label = aText;
    },
    //* The Original Code is FireGestures.
    clearStatusText: function (aMillisec) {
     if (easyDragToGo._clearStatusTimer) {
            window.clearTimeout(easyDragToGo._clearStatusTimer);
            easyDragToGo._clearStatusTimer = null;
        }
        var text = easyDragToGo._statusTextField.label;
        var callback = function(self) {
            self._clearStatusTimer = null;
            if (self._statusTextField.label == text)
                self.setStatusText("");
        };
        easyDragToGo._clearStatusTimer = window.setTimeout(callback, aMillisec, this);
    },


    //在TAB打开链接方法
    //X,Y为拖拽方向
    // target 为拖拽类型
    openURL: function (aEvent,aURI, src, target, X, Y) {
        if (!aURI) return;
        if (easyDragUtils.getPref("FirefoxTabOpen", true)) {
            aReferrerURI = gBrowser.currentURI;
        } else {
            aReferrerURI = null;
        }

        var act = "";

        if (target.indexOf("fromContentOuter") == -1) {

            var actionSets = easyDragUtils.getPref(target + ".actionSets", "|");

            if (!actionSets || actionSets == "|") return;

            var dir;
            var directions = actionSets.split('|')[0];

            switch (directions) {
            case "A":
                // any direction
                dir = "A";
                break;
            case "UD":
                // up and down
                dir = (Y > 0) ? "D" : "U";
                break;
            case "RL":
                // right and left
                dir = (X > 0) ? "R" : "L";
                break;
            case "RLUD":
                // right left up down
                if (X > Y)(X + Y > 0) ? (dir = "R") : (dir = "U");
                else(X + Y > 0) ? (dir = "D") : (dir = "L");
                break;
            default:
                return;
            }

            var re = new RegExp(dir + ':(.+?)(\\s+[ARLUD]:|$)', '');
            try {
                if (re.test(actionSets)) act = RegExp.$1;
            } catch (e) {}
        } else {
            act = easyDragUtils.getPref(target, "link-fg");
        }

        if (!act) return;

        var browser = getTopWin().getBrowser();
        var uri = "";
        var bg = true;
        var postData = {};


        // get search strings
        if ((target == "text" || target == "fromContentOuter.text") && act.indexOf("search-") == 0) {
            var submission = this.getSearchSubmission(aURI, act);
            if (submission) {
                uri = submission.uri.spec;
                postData.value = submission.postData;
                if (uri && /(fg|bg|cur|find|site|savetext|copyToClipboard|list)$/.test(act)) act = "search-" + RegExp.$1; //得到如“search-fg”
                else act = "";
            } else act = "";

            if (!act) alert("No Search Engines!");
        }


        switch (act) {
            //find text
        case "search-find":
            gFindBar.onFindCommand();
            var Highlight = gFindBar.getElement("highlight");
            Highlight.setAttribute('checked', true);
            Highlight.click();
            Highlight.click();
            return;

            //save text
        case "search-savetext":
          saveURL("data:text/plain," + "From URL:"+encodeURIComponent(gBrowser.currentURI.spec + "\r\n\r\n" + document.commandDispatcher.focusedWindow.getSelection()), gBrowser.selectedTab.label + ".txt",null, true, true, undefined,document);

            return;

            //* The Original Code is http://www.cnblogs.com/ziyunfei/archive/2011/12/20/2293928.html
            //search-list    
        case "search-list":
            var searchhide = function (isHide) {
                    if (isHide) {
                        curSet = navBar.currentSet.split(",");
                        var i = curSet.indexOf(searchId);
                        if (i != -1) {
                            curSet.splice(i, 1);
                            curSet = curSet.join(",");
                            navBar.setAttribute("currentset", curSet);
                            navBar.currentSet = curSet;
                            document.persist(navBar.id, "currentset");
                            try {
                                BrowserToolboxCustomizeDone(true);
                            } catch (e) {}
                            try {
                                BrowserToolboxCustomizeDone(true);
                            } catch (e) {}
                            try {
                                BrowserToolboxCustomizeDone(true);
                            } catch (e) {}
                            try {
                                BrowserToolboxCustomizeDone(true);
                            } catch (e) {}
                            try {
                                BrowserToolboxCustomizeDone(true);
                            } catch (e) {}
                            try {
                                BrowserToolboxCustomizeDone(true);
                            } catch (e) {}
                            try {
                                BrowserToolboxCustomizeDone(true);
                            } catch (e) {}
                        }
                    } else {
                        var pos = curSet.length;
                        curSet.splice(pos, 0, searchId);
                        curSet = curSet.join(",");
                        navBar.setAttribute("currentset", curSet);
                        navBar.currentSet = curSet;
                        document.persist(navBar.id, "currentset");
                        try {
                            BrowserToolboxCustomizeDone(true);
                        } catch (e) {}
                    }
                }

            var searchId = "search-container";
            var searchIsHidden = false;
            //判断搜索栏是否隐藏
            var navBar = document.getElementById("nav-bar");
            var curSet = navBar.currentSet.split(",");

            if (curSet.indexOf(searchId) == -1) {
                searchIsHidden = true;
            }
            //显示搜索栏
            if (searchIsHidden) {
                searchhide(false);
            }


            try {
                var search_container = document.getElementById("search-container");
                var searchclass = search_container.getAttribute("class");
                search_container.setAttribute("class", "");

                var popup = document.getAnonymousElementByAttribute(document.querySelector("#searchbar").searchButton, "anonid", "searchbar-popup");
                var serach = function () {
                        popup.removeEventListener("command", serach, false);
                        popup.removeEventListener("popuphidden", closeSerach, false);
                        setTimeout(function (selectedEngine) {
                            gBrowser.loadOneTab(null, aReferrerURI, null, null, false, false);
                            BrowserSearch.loadSearch(aURI, false);
                            popup.querySelector("#" + String(selectedEngine.id).replace(/\s/g, '\\$&')).click();
                            search_container.setAttribute("class", searchclass);
                            if (searchIsHidden) searchhide(true);
                        }, 50, popup.querySelector("*[selected=true]"));
                    };

                var closeSerach = function () {
                        popup.removeEventListener("command", serach, false);
                        popup.removeEventListener("popuphidden", closeSerach, false);
                        search_container.setAttribute("class", searchclass);
                        if (searchIsHidden) searchhide(true);
                    };


                popup.addEventListener("command", serach, false);
                popup.addEventListener("popuphidden", closeSerach, false);
                popup.openPopup(null, null, easyDragToGo.onStartEvent.screenX - 100, easyDragToGo.onStartEvent.screenY - 100);
            } catch (e) {
                alert("Easy DragToGo+ error :  May be Remove the search bar. \n\n" + e.name + " :  " + e.message);
                        }
            return;
            //copyToClipboard
        case "search-copyToClipboard":
            Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper).copyString(aURI);
            return;


        case "search-site":
            bg = false;
            //  alert('act is :'+act);
        case "search-fg":
        case "link-fg":
            // open a new tab and selected it
            bg = false;

        case "search-bg":
        case "link-bg":
        try {
            if (!uri) uri = getShortcutOrURI(aURI, postData);
        } catch (e) {
            uri = aURI;
            // alert(e.name  +   " :  "   +  e.message+aURI+postData);
        }
           
            
            try {
                var cur = (!bg || browser.mTabs.length == 1) && browser.webNavigation.currentURI.spec == "about:blank" && !browser.mCurrentBrowser.webProgress.isLoadingDocument || (/^(javascript):/i.test(uri));
                //Old code:     (/^(javascript|mailto):/i.test(uri));
            } catch (e) {}

            if (cur)
            // open in current tab
            loadURI(uri, null, postData.value, true);
            else {
                // for Tree Style Tab extension
                if ("TreeStyleTabService" in window && (target == "link" && !this.aDragSession.sourceNode.localName || target == "img")) try {
                    TreeStyleTabService.readyToOpenChildTab(gBrowser.selectedTab);
                } catch (e) {}
                
                //alert('uri:'+uri)
                gBrowser.loadOneTab(uri, aReferrerURI, null, postData.value, bg, false);
            }
            break;

        case "search-cur":
        case "link-cur":
            // open in current
        try {
            if (!uri) uri = getShortcutOrURI(aURI, postData);
        } catch (e) {
            uri = aURI;
            // alert(e.name  +   " :  "   +  e.message+aURI+postData);
        }
            loadURI(uri, null, postData.value, true);
            break;

        case "save-link":
            // save links as...
            //var doc = this.onStartEvent.target.ownerDocument;
            var doc = aEvent.target.ownerDocument;
            var ref = makeURI(doc.location.href, doc.characterSet);
            saveURL(aURI, null, null, true, false, ref, doc); 
            break;

        case "img-fg":
            // open imgs in new tab and selected it
            bg = false;
        case "img-bg":
            // for Tree Style Tab extension
            if ("TreeStyleTabService" in window && target == "img") try {
                TreeStyleTabService.readyToOpenChildTab(gBrowser.selectedTab);
            } catch (e) {}
            // open imgs in new tab
            gBrowser.loadOneTab(src, null, null, null, bg, false);
            break;


            //* The Original Code is http://www.cnblogs.com/ziyunfei/archive/2011/12/20/2293928.html
        case "img-searchfg":
            //搜索相似图片(Google)
            var searchbyimageUrl=easyDragUtils.getPref("searchbyimageUrl", "");
            var searchuri = searchbyimageUrl + encodeURIComponent(easyDragToGo.onStartEvent.dataTransfer.getData("application/x-moz-file-promise-url"));
            gBrowser.loadOneTab(searchuri, aReferrerURI, null, postData.value, false, false);
            break;

        case "img-searchbg":
            var searchuri = "http://www.google.com/searchbyimage?image_url=" + encodeURIComponent(easyDragToGo.onStartEvent.dataTransfer.getData("application/x-moz-file-promise-url"));
            gBrowser.loadOneTab(searchuri, aReferrerURI, null, postData.value, true, false);
            break;

        case "img-cur":
            // open imgs in current
            loadURI(src, null, null, false);
            break;

        case "save-img":
            // save imgs as...
            var doc = aEvent.target.ownerDocument;
            saveImageURL(src, null, "SaveImageTitle", 
                             false, false, doc.documentURIObject, doc);
            break;

        case "save-df-img":
            // direct save imgs to folder
            var err = this.saveimg(src, 1);
            if (err) alert("Saving image failed: " + err);
            break;

        case "save-df-img2":
            // direct save imgs to folder
            var err = this.saveimg(src, 2);
            if (err) alert("Saving image failed: " + err);
            break;

        case "save-df-img3":
            // direct save imgs to folder
            var err = this.saveimg(src, 3);
            if (err) alert("Saving image failed: " + err);
            break;

        case "save-df-img4":
            // direct save imgs to folder
            var err = this.saveimg(src, 4);
            if (err) alert("Saving image failed: " + err);
            break;
        default:
            // for custom
            if (/^custom#(.+)/.test(act)) {
                var custom = RegExp.$1;
                if (custom) {
                    var code = easyDragUtils.getPref("custom." + custom, "return");
                    if (code) {
                            this.customCode(code, aURI, src, target, X, Y);
                    }
                }
            }
            // do nothing
            break;
        }
    },

             getsrc:function(){
    return _src;
},


    customCode: function (code, url, src, target, X, Y) {
        var customFn = new Function("target", "url", "src", "X", "Y", code);
        var runcustomjs = Function()
        { 
        customFn(target, url, src, X, Y);
        }
         try {
            let context = Components.utils.getGlobalForObject({});
            let aSandbox = new Components.utils.Sandbox(context, {
                sandboxPrototype: context,
                wantXrays: false,
            });
            aSandbox.importFunction(runcustomjs);
        } catch (ex) {
          alert("Easy DragToGo+ Error: \n" + ex );
        }
    },

    getSearchSubmission: function (searchStr, action) {
        try {
            //site search
            if (action.indexOf("-site") != -1) searchStr = "site:" + getTopWin().getBrowser().currentURI.host + " " + searchStr;

            var ss = Components.classes["@mozilla.org/browser/search-service;1"].getService(Components.interfaces.nsIBrowserSearchService);
            var engine, engineName;
            if (/^search-(.+?)-?(fg|bg|cur|site)$/.test(action)) engineName = RegExp.$1;
            else engineName = "c";

            if (engineName == "c") engine = ss.currentEngine || ss.defaultEngine;
            else if (engineName == "d") engine = ss.defaultEngine || ss.currentEngine;
            else {
                engine = ss.getEngineByName(engineName);
                if (!engine) engine = ss.currentEngine || ss.defaultEngine;
            }
            return engine.getSubmission(searchStr, null);
        } catch (e) {
            return null;
        }
    },

    saveimg: function (aSrc, dirid) {
        if (!aSrc) return "No Src!";

        if (/^file\:\/\/\//.test(aSrc)) return "Local image, does not need save!";

        var path = easyDragUtils.getDownloadFolder();
        switch (dirid) {
        case 2:
            path = easyDragUtils.getDownloadFolder2();
            break;
        case 3:
            path = easyDragUtils.getDownloadFolder3();
            break;
        case 4:
            path = easyDragUtils.getDownloadFolder4();
            break;
        }

        if (path == "U" || path == "u") {
            path = Components.classes["@mozilla.org/file/directory_service;1"].
            getService(Components.interfaces.nsIProperties).
            get("DefRt", Components.interfaces.nsIFile).path;
        }


        var fileName;

        try {

            var imageCache = Components.classes['@mozilla.org/image/cache;1'].getService(imgICache);

            var props = imageCache.findEntryProperties(makeURI(aSrc, getCharsetforSave(null)));

            if (props) fileName = props.get("content-disposition", nsISupportsCString).toString().
            replace(/^.*?filename=(["']?)(.+)\1$/, '$2');
        } catch (e) {}

        if (!fileName) fileName = aSrc.substr(aSrc.lastIndexOf('/') + 1);
        if (fileName) fileName = fileName.replace(/\?.*/, "").replace(/[\\\/\*\|:"<>]/g, "-");

        if (easyDragUtils.getPref("saveByDatetime", true)) {
            var d = new Date()
            var vMon = d.getMonth() + 1;
            var vMon2 = vMon < 10 ? "0" + vMon : vMon;
            var vDay = d.getDate();
            var vDay2 = vDay < 10 ? "0" + vDay : vDay;
            fileName = d.getFullYear() + "-" + vMon2 + "-" + vDay2 + " " +  decodeURI(fileName);
        }

        if (!fileName) return "No image!";

        var fileSaving = Components.classes["@mozilla.org/file/local;1"].
        createInstance(Components.interfaces.nsILocalFile);
        fileSaving.initWithPath(path);
        if (!fileSaving.exists() || !fileSaving.isDirectory()) return "The download folder does not exist!";
        // create a subdirectory with the domain name of current page
        if (easyDragUtils.getPref("saveDomainName", true)) {
            var domainName = getTopWin().getBrowser().currentURI.host;
            if (domainName) {
                fileSaving.append(domainName);
                if (!fileSaving.exists() || !fileSaving.isDirectory()) {
                    try {
                        fileSaving.create(1, 0755); // 1: DIRECTORY_TYPE
                    } catch (e) {
                        return "Create directory failed!";
                    }
                }
                path = fileSaving.path;
            }
        }
        fileSaving.append(fileName);

        // does not overwrite the original file
        var newFileName = fileName;
        while (fileSaving.exists()) {
            if (newFileName.indexOf('.') != -1) {
                var ext = newFileName.substr(newFileName.lastIndexOf('.'));
                var file = newFileName.substring(0, newFileName.length - ext.length);
                newFileName = this.getAnotherName(file) + ext;
            } else newFileName = this.getAnotherName(newFileName);
            //优化保存的文件名
            //newFileName = decodeURI(newFileName);
            fileSaving.initWithPath(path);
            fileSaving.append(newFileName);
        }

        var cacheKey = Components.classes['@mozilla.org/supports-string;1'].
        createInstance(Components.interfaces.nsISupportsString);
        cacheKey.data = aSrc;

        var urifix = Components.classes['@mozilla.org/docshell/urifixup;1'].
        getService(Components.interfaces.nsIURIFixup);
        var uri = urifix.createFixupURI(aSrc, 0);
        var hosturi = null;
        if (uri.host.length > 0) hosturi = urifix.createFixupURI(uri.host, 0);

        var persist = Components.classes['@mozilla.org/embedding/browser/nsWebBrowserPersist;1'].
        createInstance(Components.interfaces.nsIWebBrowserPersist);
        persist.persistFlags = Components.interfaces.nsIWebBrowserPersist.PERSIST_FLAGS_FROM_CACHE | Components.interfaces.nsIWebBrowserPersist.PERSIST_FLAGS_CLEANUP_ON_FAILURE;
        persist.saveURI(uri, cacheKey, hosturi, null, null, fileSaving, null);
        if (persist.result) return "Can not save image or get image failed!";

        var tPrefs = Cc['@mozilla.org/preferences-service;1'].getService(Ci.nsIPrefService);
        var lang = tPrefs.getComplexValue('general.useragent.locale', Ci.nsISupportsString).data;

        var SaveLabel = "The image(" + newFileName + ") has been saved to " + path;
        if (lang.indexOf("CN") != -1) SaveLabel = "图片(" + newFileName + ")已保存到:" + path;

        easyDragToGo.setStatusText(SaveLabel);
        easyDragToGo.clearStatusText(2000);

        return 0;
    },

    // filenameNoExt -> filenameNoExt[1] -> filenameNoExt[2] ...
    getAnotherName: function (fName) {
        if (/\[(\d+)\]$/.test(fName)) {
            var i = 1 + parseInt(RegExp.$1);
            fName = fName.replace(/\[\d+\]$/, "[" + i + "]");
        } else fName += "[1]";
        return fName;
    },

    //* The Original Code is QuickDrag.
    // Wrapper for nsDragAndDrop.js's data retrieval; see nsDragAndDrop.drop
    _getDragData: function (aEvent) {
        var data = "";
        var type = "text/unicode";

        // Gecko 1.9.1 and newer: WHATWG drag-and-drop
        // Try to get text/x-moz-url, if possible
        data = aEvent.dataTransfer.getData("text/x-moz-url");

        if (data.length != 0) type = "text/x-moz-url";
        else data = aEvent.dataTransfer.getData("text/plain");

        return ({
            data: data,
            type: type
        });
    },

    seemAsURL: function (url) {
        // url test
        var DomainName = /(\w+(\-+\w+)*\.)+\w{2,7}/;
        var HasSpace = /\S\s+\S/;
        var KnowNameOrSlash = /^(www|bbs|forum|blog)|\//;
        var KnowTopDomain1 = /\.(com|net|org|gov|edu|info|mobi|mil|asia)$/;
        var KnowTopDomain2 = /\.(de|uk|eu|nl|it|cn|be|us|br|jp|ch|fr|at|se|es|cz|pt|ca|ru|hk|tw|pl|me|tv|cc)$/;
        var IsIpAddress = /^([1-2]?\d?\d\.){3}[1-2]?\d?\d/;
        var seemAsURL = !HasSpace.test(url) && DomainName.test(url) && (KnowNameOrSlash.test(url) || KnowTopDomain1.test(url) || KnowTopDomain2.test(url) || IsIpAddress.test(url));
        return seemAsURL;
    },

    getForceURL: function (url) {
        var code;
        var str = "";
        url = url.replace(/\s|\r|\n|\u3000/g, "");
        for (var i = 0; i < url.length; i++) {
            code = url.charCodeAt(i);
            if (code >= 65281 && code <= 65373) str += String.fromCharCode(code - 65248);
            else str += url.charAt(i);
        }
        str = this.fixupSchemer(str,true);
        str = this.SecurityCheckURL(str);
        return str;
    },

    //* The Original Code is QuickDrag.
    _nodeAcceptsDrops: function (node) {
        if (!node) return (false);

        return ((node.nodeName == "TEXTAREA") || ("mozIsTextField" in node && node.mozIsTextField(false)) || ("isContentEditable" in node && node.isContentEditable) || ("ownerDocument" in node && "designMode" in node.ownerDocument && node.ownerDocument.designMode.toLowerCase() == "on") || (node.hasAttribute("dropzone") && node.getAttribute("dropzone").replace(/^\s+|\s+$/g, "").length));
    },

    SecurityCheckURL: function (aURI) {
        if (/^data:/.test(aURI)) return "";
        if (/^javascript:/.test(aURI)) return aURI;
        var sourceURL = getBrowser().currentURI.spec;
        const nsIScriptSecurityManager = Components.interfaces.nsIScriptSecurityManager;
        var secMan = Components.classes["@mozilla.org/scriptsecuritymanager;1"].getService(nsIScriptSecurityManager);
        const nsIScriptSecMan = Components.interfaces.nsIScriptSecurityManager;
        try {
            secMan.checkLoadURIStr(sourceURL, aURI, nsIScriptSecMan.STANDARD);
        } catch (e) {
            var strlist = /(\.com)|(\.net)|(\.org)|(\.gov.cn)|(\.info)|(\.cn)|(\.cc)|(\.com.cn)|(\.net.cn)|(\.org.cn)|(\.name)|(\.biz)|(\.tv)|(\.la)/ig;
          //  if (strlist.test(aURI)) aURI = "http://" + aURI;
        }

      /*   try {
            secMan.checkLoadURIStr(sourceURL, aURI, nsIScriptSecMan.STANDARD);
        } catch (e) {
           aURI = "";
        } */
        return aURI;
    },

    fixupSchemer: function (aURI,isURL) {
        var RegExpURL = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
        if (aURI.match(RegExpURL)) return aURI;

         if (isURL && /^(?::\/\/|\/\/|\/)?(([1-2]?\d?\d\.){3}[1-2]?\d?\d(\/.*)?|[a-z]+[\-\w]+\.[\-\w\.]+(\/.*)?)$/i.test(aURI)) aURI = "http://" + RegExp.$1;
        else if (/^\w+[\-\.\w]*@(\w+(\-+\w+)*\.)+\w{2,7}$/.test(aURI) && !easyDragUtils.getPref("dragtogoEmailSearch", true)) aURI = "mailto:" + aURI;
        else {
            var table = "ttp=>http,tp=>http,p=>http,ttps=>https,tps=>https,ps=>https,s=>https";
            var regexp = new RegExp();
            if (aURI.match(regexp.compile('^(' + table.replace(/=>[^,]+|=>[^,]+$/g, '').replace(/\s*,\s*/g, '|') + '):', 'g'))) {
                var target = RegExp.$1;
                table.match(regexp.compile('(,|^)' + target + '=>([^,]+)'));
                aURI = aURI.replace(target, RegExp.$2);
            }
        }
        return aURI;
    }
};


var easyDragToGoDNDObserver = {

    onDragOver: function (aEvent, aFlavour, aDragSession) {
        aDragSession.canDrop = true;
        // for drag tabs or bookmarks
        if (!easyDragToGo.StartAlready) {
            easyDragToGo.onStartEvent = aEvent;
            easyDragToGo.StartAlready = true;
            easyDragToGo.dragsettimeout();
        }
    },

    onDrop: function (aEvent, aXferData, aDragSession) {
        if (!easyDragToGo.StartAlready) return;
        easyDragToGo.onDropEvent = aEvent;
        easyDragToGo.aXferData = aXferData;
        easyDragToGo.aDragSession = aDragSession;

        var sNode = aDragSession.sourceNode;
        var url;
        if (!sNode) {
            // Drag and Drop from content outer
            try {
                url = aXferData.data.replace(/^[\s\n]+|[\s\n]+$/g, '')
            } catch (e) {}
            if (!url) {
                easyDragToGo.clean();
                return;
            }
            var target = "fromContentOuter.text";
            if (easyDragToGo.seemAsURL(url) || (/^file:\/\/\/[\S]+$/.test(url))) {
                //force it to a url or local file/directory
                if (/^file:\/\/\//.test(url)) {
                    target = "fromContentOuter.link";
                } else {
                    var tmpurl = url;
                    url = easyDragToGo.fixupSchemer(url,ture);
                    url = easyDragToGo.SecurityCheckURL(url);
                    if (url) target = "fromContentOuter.link";
                    else url = tmpurl;
                }
            }
             if (target == "fromContentOuter.link") {
                 var act = easyDragUtils.getPref(target, "link-fg");
                 if (act == "do-nothing") return;
             }
            
             easyDragToGo.openURL(aEvent,url, null, target);
        } else {
            // Drag and Drop from Content area
            var relX = aEvent.screenX - easyDragToGo.onStartEvent.screenX;
            var relY = aEvent.screenY - easyDragToGo.onStartEvent.screenY;
            // do nothing with drag distance less than 3px
            if (Math.abs(relX) < 3 && Math.abs(relY) < 3) {
                easyDragToGo.clean();
                return;
            }

            var str, src;
            var selectStr = "";
            var type = "STRING";
            var target = "link";

            url = str = aXferData.data.replace(/\r\n/g, "\n").replace(/\r/g, "\n");

            var dragData = easyDragToGo._getDragData(aEvent);
            var lines = dragData.data.replace(/^\s+|\s+$/g, "").split(/\s*\n\s*/);
            var selectStr = lines.join(" ");

            if (str != selectStr) {
                var idx = str.indexOf("\n");
                if (idx > 0) {
                    url = str.substr(0, idx);
                    str = str.substr(idx + 1);
                }
                if (str == selectStr) url = str;
                else if (!(/\s|\n/.test(url)) && (/^([a-z]{2,7}:\/\/|mailto:|about:|javascript:)/i.test(url))) type = "URL";
                else url = selectStr;
            }

            url = url.replace(/^[\s\n]+|[\s\n]+$/g, '');

            if (url && type == "URL") {

                src = url = easyDragToGo.SecurityCheckURL(url);

                if (sNode.nodeName == "IMG" || sNode.nodeName == "A" && /^\s*$/.test(sNode.textContent) && sNode.firstElementChild instanceof HTMLImageElement) {
                    try {
                        src = sNode.src || sNode.firstElementChild.src;
                    } catch (e) {}
                    target = "img";
                } else if (aEvent.ctrlKey) {
                    // as text with ctrlkey
                    var aNode = easyDragToGo.onStartEvent.target;
                    while (aNode && aNode.nodeName != "A") aNode = aNode.parentNode;
                    if (aNode && aNode.textContent) {
                        url = aNode.textContent;
                        target = "text";
                    }
                }
            } else if (url) {
                var tmpurl = url;
                if (aEvent.ctrlKey) {
                    url = easyDragToGo.getForceURL(url) // force convert to a url
                    url = easyDragToGo.SecurityCheckURL(url);
                    if (url) target = "link";
                    else url = tmpurl;
                } else if (easyDragToGo.seemAsURL(url)) { //seem as a url
                    url = easyDragToGo.fixupSchemer(url,true);
                    url = easyDragToGo.SecurityCheckURL(url);
                    if (!url) { // not a url, search it
                        url = tmpurl;
                        target = "text";
                     }
                 } else //it's a text string, so search it
                 target = "text";
             }
 
            url = easyDragToGo.fixupSchemer(url,false);
            url = easyDragToGo.SecurityCheckURL(url);
             easyDragToGo.openURL(aEvent,url, src, target, relX, relY);
         }
 
         easyDragToGo.clean();
     },
    getSupportedFlavours: function () {
        var flavourSet = new FlavourSet();
        flavourSet.appendFlavour("text/x-moz-url");
        flavourSet.appendFlavour("text/unicode");
        return flavourSet;
    }
};

window.addEventListener('load', easyDragToGo.onLoad, false);


P.S. Можно было бы и дальше пользоваться этим расширением, но брать его не из официального источника как-то стрёмно... мало ли что там у китайцев может статься...

Отредактировано Александр Колесников (12-11-2014 04:32:20)

Отсутствует

 

№2412-11-2014 17:31:00

Александр Колесников
Участник
 
Группа: Members
Зарегистрирован: 30-12-2005
Сообщений: 171
UA: Firefox 31.0

Re: [CB]CB drag and go

P.P.S. Очень интересно - с любых сайтов любые изображения, будучи захвачены ЛКМ и дропнуты на рабочий стол, сохраняются без проблем. Разве нельзя этот же механизм задействовать, только с запросом куда сохранять?

Отсутствует

 

№2512-11-2014 22:57:27

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4450
UA: Firefox 28.0

Re: [CB]CB drag and go

Александр Колесников пишет:

P.P.S. Очень интересно - с любых сайтов любые изображения, будучи захвачены ЛКМ и дропнуты на рабочий стол, сохраняются без проблем. Разве нельзя этот же механизм задействовать, только с запросом куда сохранять?

Проблема в том что некоторые ссылки оформлены как изображения, и как узнать с чем хочет работать пользователь с ссылкой или изображением.
Кстати:

Выделить код

Код:

// Дополнительные возможности для двойного клика мыши на странице ................................
function handleDblClick(e) {

  var node = e.target;
  var editor = node.editor;
            
  // сохранить изображение без запроса ....    
  if ( e.button == 2 && node.localName == 'img' ) {    
       try { saveImageURL( gContextMenu.imageURL, 0, 0, 0, 1, null, content.document ) } catch(e) {};       
       setTimeout(function() { document.getElementById("contentAreaContextMenu").hidePopup() }, 20);
       }         
       
  // скопировать выделенный текст ....
  if ( e.button == 2 ) {
       e.preventDefault();

       !editor ? goDoCommand("cmd_copy") : editor.copy();       
       try {        
           var box = ( node.textbox || node ).inputField.parentNode;
           var popup = box.ownerDocument.getAnonymousElementByAttribute( box, "anonid", "input-box-contextmenu");
           setTimeout(function() popup.hidePopup(), 50);
           }
       catch(e) { document.getElementById("contentAreaContextMenu").hidePopup() }; 
       }
       
   // показать или спрятать пароль в окошке вода пароля ....
   if ( e.button == 0 ) {
        if ( node.hasAttribute("typechanged") ) {
             node.type = "password";
             node.removeAttribute("typechanged");
             return; 
             }
        if ( node.hasAttribute("type") && node.getAttribute("type").toLowerCase() == "password" ) {
             node.type = "text";
             node.setAttribute("typechanged", true);              
             }
        }      
};
addEventListener("dblclick", handleDblClick, false, gBrowser );

Отредактировано bunda1 (12-11-2014 23:02:48)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2011 Mozilla Russia
Язык отображения форума: [Русский] [English]