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

Пользователи не любят читать документацию. Станьте оригинальным, будьте не как все. Ознакомьтесь с нашей базой знаний.

№2603-05-2016 21:20:13

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

Re: Невозможно добавить свой поисковый плагин.

yup
Ммм, потыкаюсь. Спасибо.

скрытый текст
Но вы неверно оцениваете мои познания.

yup пишет

так что: JSON.parse() и проход (рекурсивный) по получившемуся массиву с дописыванием в начало очередной посещённой строки нужного количества пробелов.

- мне мало о чем говорит. :) Теорию учить лень. Так - методом тыка и гугления/подглядыванием в чужое кой-чего нахватался. :)

Отсутствует

 

№2703-05-2016 21:32:45

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1090
UA: Seamonkey 2.40

Re: Невозможно добавить свой поисковый плагин.

turbot пишет

Но вы неверно оцениваете мои познания.

Ладно, сейчас оторвусь от той хрени, которую ваяю, и сделаю перевод из строки JSON в форматированный текст. Но в свой код это потом сами вставите.

Отсутствует

 

№2803-05-2016 21:57:16

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

Re: Невозможно добавить свой поисковый плагин.

yup
Да я ж, не прошу. Я пока в ресурсах devtools ковыряюсь, на предмет как там сделано. Может и сам одолею. :)

Отсутствует

 

№2903-05-2016 22:12:30

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1090
UA: Seamonkey 2.40

Re: Невозможно добавить свой поисковый плагин.

После небольшого изучения матчасти всё оказалось примитивно просто:
если в str содержится исходная JSON-последовательность, то двойная конвертация

Выделить код

Код:

str = JSON.stringify(JSON.parse(str), null, '  ');

даст на выходе строку с отформатированным текстом.

P.S.  Вот только приведённые вами коды для кнопки (что первый, что второй) у меня ничего не сохраняют - ни в Firefox, ни в Seamonkey. (Но и в консоли никакой ругани не появляется.)

Отредактировано yup (03-05-2016 22:14:58)

Отсутствует

 

№3003-05-2016 22:29:07

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

Re: Невозможно добавить свой поисковый плагин.

yup пишет

Вот только приведённые вами коды для кнопки (что первый, что второй) у меня ничего не сохраняют - ни в Firefox, ни в Seamonkey. (Но и в консоли никакой ругани не появляется.)

Странно. Проверил еще на 38 - работает.

даст на выходе строку с отформатированным текстом.

Ага, спасибо. Попробую присобачить.

Отсутствует

 

№3103-05-2016 22:35:30

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1090
UA: Seamonkey 2.40

Re: Невозможно добавить свой поисковый плагин.

turbot пишет

Проверил еще на 38 - работает.

У меня Seamonkey 2.40 и Firefox 45.0.2, Custom Buttons 0.0.5.8.9.
В обоих браузерах после выбора сжатого файла одинаково ничего не происходит.

Отредактировано yup (03-05-2016 22:35:57)

Отсутствует

 

№3203-05-2016 22:43:40

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

Re: Невозможно добавить свой поисковый плагин.

yup
Ошибся - не работает. Наверное, потому что Atomics - JavaScript с 46-ой фф только поддерживается.

Не туда смотрю.:dumb: Нет, вроде не в этом дело.

Добавлено 03-05-2016 22:55:40
yup
Это все моя самодеятельность виной. Так - работает:

Выделить код

Код:

var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
fp.init(window, "Open File", Components.interfaces.nsIFilePicker.modeOpen);
fp.appendFilter("Mozilla's Lz4 and json files format", "*.jsonlz4; *.mozlz4; *.json");
if (fp.show() == Components.interfaces.nsIFilePicker.returnOK) {
  var file = fp.file;
  if (file.exists() && file.isFile() && file.isReadable()) {
    Components.utils.import("resource://gre/modules/Task.jsm");
    Components.utils.import("resource://gre/modules/osfile.jsm");
    var oldFile = fp.file.path;
    if (oldFile.endsWith(".json")) {
      var newFile = oldFile.replace(/(\.json)$/, ".mozlz4");
      function compress(oFilePath,nFilePath){
        return Task.spawn(function* () {
          var jsonString = yield OS.File.read(oFilePath);
          yield OS.File.writeAtomic(nFilePath, jsonString,{ compression: "lz4" });
        })
      }
      compress(oldFile,newFile);
    }
    else {
      var newFile = (oldFile.replace(".mozlz4", ".json") || oldFile.replace(".jsonlz4", ".json"));
      function decompress(oFilePath,nFilePath){
        return Task.spawn(function* () {
          var jsonString = yield OS.File.read(oFilePath,{ compression: "lz4" });
          yield OS.File.writeAtomic(nFilePath, jsonString);
        })
      }
      decompress(oldFile,newFile);
    }
  }
};

На [firefox] 34+ точно должно работать. Проверил. Странно, что ночнушка мою ошибку переваривала и не давилась.

Отредактировано turbot (03-05-2016 22:59:44)

Отсутствует

 

№3303-05-2016 23:05:58

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1090
UA: Seamonkey 2.40

Re: Невозможно добавить свой поисковый плагин.

Я с CB и созданием своих дополнений дела никогда не имел. Как там вообще отлаживаться? Как хотя бы в консоль что-то вывести? У меня из кода кнопки console.log() ничего никуда не пишет.

Отсутствует

 

№3403-05-2016 23:20:45

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

Re: Невозможно добавить свой поисковый плагин.

yup
Я тоже не знаток :D, но например

Выделить код

Код:

LOG("Saved as: " + newFile);

Отсутствует

 

№3503-05-2016 23:35:00

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1090
UA: Seamonkey 2.40

Re: Невозможно добавить свой поисковый плагин.

А у меня это не работает.
Вот прямо сейчас вписал в код кнопки первой строкой:

Выделить код

Код:

LOG('1');

Результат: распакованный файл на диске создаётся, а в консоли тишина.

И JSON в кнопке почему-то не работает.
Та пара команд, которую выше написал, в коде, вписанном в тестовый HTML, работает, в консоли работает, а вписываю в кнопку - и распакованный файл не создаётся.
Причём достаточно даже абстрактного обращения, не затрагивающего выводимый текст.
Например, даже строчка: "var zzz = JSON.parse(jsonString);" - уже всё убивает.

Отредактировано yup (03-05-2016 23:40:30)

Отсутствует

 

№3603-05-2016 23:56:43

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

Re: Невозможно добавить свой поисковый плагин.

yup пишет

А у меня это не работает.

thumb2.png  idontnow.gif

yup пишет

И JSON в кнопке почему-то не работает.

А вот тут точно ничего не могу сказать. :)

Отсутствует

 

№3704-05-2016 00:11:05

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1090
UA: Seamonkey 2.40

Re: Невозможно добавить свой поисковый плагин.

Понял. Я смотрел консоль отладчика (и встроенного, и Firebug). Был уверен, что в окошко "Консоль браузера" то же самое выводится.

Сейчас на часик примерно отвлекусь, а потом попробую разобраться, почему JSON хулиганит. Мысль некоторая есть.

Отсутствует

 

№3804-05-2016 01:34:18

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1090
UA: Seamonkey 2.40

Re: Невозможно добавить свой поисковый плагин.

Меня обмануло название переменной (jsonString). Оказалось, что OS.File.read() возвращает не строку, а массив байтов, который ещё нужно превратить в строку, прежде чем скармливать JSON.parse().
Теперь рабочий код выглядит так:

Выделить код

Код:

var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
fp.init(window, "Open File", Components.interfaces.nsIFilePicker.modeOpen);
fp.appendFilter("Mozilla's Lz4 and json files format", "*.jsonlz4; *.mozlz4; *.json");
if (fp.show() == Components.interfaces.nsIFilePicker.returnOK) {
  var file = fp.file;
  if (file.exists() && file.isFile() && file.isReadable()) {
    Components.utils.import("resource://gre/modules/Task.jsm");
    Components.utils.import("resource://gre/modules/osfile.jsm");
    var oldFile = fp.file.path;
    if (oldFile.endsWith(".json")) {
      var newFile = oldFile.replace(/(\.json)$/, ".mozlz4");
      function compress(oFilePath,nFilePath){
        return Task.spawn(function* () {
          var jsonString = yield OS.File.read(oFilePath);
          yield OS.File.writeAtomic(nFilePath, jsonString,{ compression: "lz4" });
        })
      }
      compress(oldFile,newFile);
    }
    else {
      var newFile = (oldFile.replace(".mozlz4", ".json") || oldFile.replace(".jsonlz4", ".json"));
      function decompress(oFilePath,nFilePath){
        return Task.spawn(function* () {
          var jsonString = new TextDecoder("utf-8").decode(yield OS.File.read(oFilePath,{ compression: "lz4" }));
          yield OS.File.writeAtomic(nFilePath, JSON.stringify(JSON.parse(jsonString), null, '  '));
        })
      }
      decompress(oldFile,newFile);
    }
  }
};

Отсутствует

 

№3904-05-2016 01:49:42

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

Re: Невозможно добавить свой поисковый плагин.

yup
Шикарно! Спасибо. :beer:

Я смотрю, обратно в строку нет необходимости переводить? И так пережевывает. Правда, search.json.mozlz4 на пару КБ в размере вырастает. :)
Хм, после перезапуска браузера, снова уменьшился. Автоматом оптимизируется? :rolleyes:

Отсутствует

 

№4004-05-2016 01:57:00

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1090
UA: Seamonkey 2.40

Re: Невозможно добавить свой поисковый плагин.

turbot пишет

Правда, search.json.mozlz4 на пару КБ в размере вырастает.

Это потому, что сжимается наш форматированный текст - со всеми добавленными туда пробелами и переносами строк.

turbot пишет

Хм, после перезапуска браузера, снова уменьшился. Автоматом оптимизируется?

Может быть. У меня search.json при перезапусках не меняется (и дата у него на два месяца более ранняя, чем у search.json.mozlz4).
Но если заглянуть в search.json.mozlz4, то там почти в самом начале будет видна последовательность {"version":1
Если между фигурной скобкой и кавычкой пробелов нет - значит, браузер всё опять в одну строку перевёл ("оптимизировал").

Отсутствует

 

№4104-05-2016 02:04:07

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

Re: Невозможно добавить свой поисковый плагин.

yup пишет

Это потому, что сжимается наш форматированный текст - со всеми добавленными туда пробелами и переносами строк.

Ну да, я понял. :)

Если между фигурной скобкой и кавычкой пробелов нет - значит, браузер всё опять в одну строку перевёл ("оптимизировал").

Не подумал открыть посмотреть. Так и есть.

Еще раз спасибо за помощь. Гораздо удобнее и быстрее, чем в скратчпад вставлять.

Отсутствует

 

№4204-05-2016 02:34:33

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1090
UA: Seamonkey 2.40

Re: Невозможно добавить свой поисковый плагин.

Нашёл описание нововведений в функции read и writeAtomic. (Хм, два года уже им.)
Теперь можно сразу заказать чтение не в массив, а в строку, и обойтись без TextDecoder:

Выделить код

Код:

var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
fp.init(window, "Open File", Components.interfaces.nsIFilePicker.modeOpen);
fp.appendFilter("Mozilla's Lz4 and json files format", "*.jsonlz4; *.mozlz4; *.json");
if (fp.show() == Components.interfaces.nsIFilePicker.returnOK) {
  var file = fp.file;
  if (file.exists() && file.isFile() && file.isReadable()) {
    Components.utils.import("resource://gre/modules/Task.jsm");
    Components.utils.import("resource://gre/modules/osfile.jsm");
    var oldFile = fp.file.path;
    if (oldFile.endsWith(".json")) {
      var newFile = oldFile.replace(/(\.json)$/, ".mozlz4");
      function compress(oFilePath,nFilePath){
        return Task.spawn(function* () {
          var jsonString = yield OS.File.read(oFilePath);
          yield OS.File.writeAtomic(nFilePath, jsonString, {compression: "lz4"});
        })
      }
      compress(oldFile,newFile);
    }
    else {
      var newFile = (oldFile.replace(".mozlz4", ".json") || oldFile.replace(".jsonlz4", ".json"));
      function decompress(oFilePath,nFilePath){
        return Task.spawn(function* () {
          var jsonString = yield OS.File.read(oFilePath, {encoding: "utf-8", compression: "lz4"});
          yield OS.File.writeAtomic(nFilePath, JSON.stringify(JSON.parse(jsonString), null, '  '), {encoding: "utf-8"});
        })
      }
      decompress(oldFile,newFile);
    }
  }
};

Отредактировано yup (04-05-2016 02:36:50)

Отсутствует

 

№4305-05-2016 19:45:09

thrower
Участник
 
Группа: Members
Зарегистрирован: 28-11-2013
Сообщений: 207
UA: Firefox 45.0

Re: Невозможно добавить свой поисковый плагин.

turbot
yup
Полезная кнопка оказалась!

А можно ли открывать диалог Open File уже в папке профиля (прописать относительный путь к папке %ПРОФИЛЯ%)

Отредактировано thrower (05-05-2016 20:45:34)

Отсутствует

 

№4405-05-2016 22:38:28

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

Re: Невозможно добавить свой поисковый плагин.

thrower
Можно. Но у меня не выходит. Может кто заглянет, знающий. :)

Отсутствует

 

№4506-05-2016 00:15:20

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1090
UA: Seamonkey 2.40

Re: Невозможно добавить свой поисковый плагин.

turbot пишет

Можно. Но у меня не выходит.

Где-нибудь между первой строкой кода и вызовом функции fp.show() нужно добавить строку

Выделить код

Код:

fp.displayDirectory = FileUtils.getDir("ProfD", []);

Теоретически, перед ней ещё нужно иметь

Выделить код

Код:

Components.utils.import("resource://gre/modules/FileUtils.jsm");

но у меня почему-то и без этого работает.

Отсутствует

 

№4606-05-2016 00:43:13

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

Re: Невозможно добавить свой поисковый плагин.

yup
Чорт, почти ведь до этого сам дошел! Только параметры неверно задал. :D Спасибо.

Отсутствует

 

№4706-05-2016 16:38:55

thrower
Участник
 
Группа: Members
Зарегистрирован: 28-11-2013
Сообщений: 207
UA: Firefox 45.0

Re: Невозможно добавить свой поисковый плагин.

Спасибо.
Теперь удобно.

Отсутствует

 

№4806-05-2016 17:06:38

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

Re: Невозможно добавить свой поисковый плагин.

Что-то у меня  только окно открытия появляется, а после команды открыть - ничего не происходит.

Отсутствует

 

№4906-05-2016 17:54:10

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

Re: Невозможно добавить свой поисковый плагин.

voqabuhe
Распакаванные/запакованные файлы сохраняются втихую в ту же директорию, без подтверждения. Добавьте LOG и смотрите в консоли, если сомневаетесь:

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

Выделить код

Код:

var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
fp.displayDirectory = FileUtils.getDir("ProfD", []);
fp.init(window, "Open File", Components.interfaces.nsIFilePicker.modeOpen);
fp.appendFilter("Mozilla's Lz4 and json files format", "*.jsonlz4; *.mozlz4; *.json");
if (fp.show() == Components.interfaces.nsIFilePicker.returnOK) {
  var file = fp.file;
  if (file.exists() && file.isFile() && file.isReadable()) {
    Components.utils.import("resource://gre/modules/Task.jsm");
    Components.utils.import("resource://gre/modules/osfile.jsm");
    var oldFile = fp.file.path;
    if (oldFile.endsWith(".json")) {
      var newFile = oldFile.replace(/(\.json)$/, ".mozlz4");
      function compress(oFilePath,nFilePath){
        return Task.spawn(function* () {
          var jsonString = yield OS.File.read(oFilePath);
          yield OS.File.writeAtomic(nFilePath, jsonString, {compression: "lz4"});
        })
      }
      compress(oldFile,newFile);
      LOG("Saved as: " + newFile);
    }
    else {
      var newFile = (oldFile.replace(".mozlz4", ".json") || oldFile.replace(".jsonlz4", ".json"));
      function decompress(oFilePath,nFilePath){
        return Task.spawn(function* () {
          var jsonString = yield OS.File.read(oFilePath, {encoding: "utf-8", compression: "lz4"});
          yield OS.File.writeAtomic(nFilePath, JSON.stringify(JSON.parse(jsonString), null, '  '), {encoding: "utf-8"});
        })
      }
      decompress(oldFile,newFile);
      LOG("Saved as: " + newFile);
    }
  }
};

Отсутствует

 

№5006-05-2016 18:38:25

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

Re: Невозможно добавить свой поисковый плагин.

turbot пишет

Распакаванные/запакованные файлы сохраняются втихую в ту же директорию, без подтверждения. Добавьте LOG и смотрите в консоли, если сомневаетесь:

Да я ни в чём не сомневаюсь пока, я просто не пойму что кнопка делает?:) Написало что Saved as: C:\......\search.mozlz4 и чё мне это даёт? :dumb:

Отредактировано voqabuhe (06-05-2016 18:39:04)

Отсутствует

 

Board footer

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