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

Заказывай стафф с атрибутикой Mozilla и... пусть все вокруг завидуют тебе! Быть уникальным - быть с Mozilla!

№103-08-2005 13:09:47

J7ReW
Участник
 
Группа: Members
Зарегистрирован: 03-08-2005
Сообщений: 7

ImageToolbar++

Уважаемые гуру!
Хочу немного изменить сабж для себя: вместо действия по 2 кнопке "копировать картинку" поставить ("автосохранение" и сразу после этого автоматическое закрытие текущей вкладки). Покопался в скриптах, но чую, что разбираться в этом буду долго и нелегко. Если найдется добрая душа, которая разъяснит какой функцией это сделать или (я не сильно наглею?) выложит откорректированный аки следует xpi с последней сборкой сабжа, будет ему мой (и наверняка не только мой) бесконечный респект и пиво при возможности...
З.Ы. Надеюсь, такая модернизация не затронет копирайт :о)

Отсутствует

 

№204-08-2005 23:39:47

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: ImageToolbar++

Image Toolbar 0.5

Если я правильно понял вопрос, то в файле imagetoolbarOverlay.js надо найти функцию imageToolbarCopyImage и заменить её тело на следующую пару строчек:

Выделить код

Код:

imageToolbarSaveImage(e);
getBrowser().removeTab(getBrowser().mContextTab);

Проверял на 1.0.6 с TBE 1.14.2005071301, а также без TBE.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№305-08-2005 12:09:20

J7ReW
Участник
 
Группа: Members
Зарегистрирован: 03-08-2005
Сообщений: 7

Re: ImageToolbar++

Замена тела функции на код

imageToolbarSaveImage(e);
getBrowser().removeTab(getBrowser().mContextTab);

не помогла, сработало это:

Выделить код

Код:

getBrowser().removeCurrentTab()

Спасибо за подсказку!!!
И еще, подскажите плиз или дайте ссылку где можно почитать в эл. варианте по командам JS, в частности getBrowser(), а то совсем в этом не шарю, а JBuilder из-за такой ерунды ставить как-то неохота.
Гран, как говорится, мерси!!!:D

Отсутствует

 

№405-08-2005 12:55:43

J7ReW
Участник
 
Группа: Members
Зарегистрирован: 03-08-2005
Сообщений: 7

Re: ImageToolbar++

Вот так всегда...:) Еще идея появилась:
при клике правой кнопкой по кнопке "копировать картинку" на картинке-ссылке загрузить не саму картинку а файл по ссылке. Проблема выцепить урл ссылки. В самом ImageToolbar я такой функции не нашел. М.б. можно как-то не особо болезненно узнать адрес ссылки и подставить его в функцию?

Отсутствует

 

№505-08-2005 21:29:48

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: ImageToolbar++

...где можно почитать в эл. варианте по командам JS, в частности getBrowser()...

browser.js

J7ReW пишет

Вот так всегда...:) Еще идея появилась:
при клике правой кнопкой по кнопке "копировать картинку" на картинке-ссылке загрузить не саму картинку а файл по ссылке...

%|
Не пойму, а чем левая кнопка не устраивает ? О чем речь вообще ?


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№605-08-2005 22:09:41

J7ReW
Участник
 
Группа: Members
Зарегистрирован: 03-08-2005
Сообщений: 7

Re: ImageToolbar++

Не пойму, а чем левая кнопка не устраивает ? О чем речь вообще ?

Все для ускорения серфинга: при клике по
- первой иконке
   - левой кнопкой - сохранить картинку
   - правой - то же самое и закрыть вкладку
- второй иконке (для картинок - превью или картинок - ссылок на файл)
   - л.к. - сохранить файл, на который ссылается картинка
   - п.к. - то же самое и закрыть вкладку
На мой взгляд не лишние функции. Экономится время. Привязываюсь ко 2 иконке, т.к. дефолтные функции не особо нужны, и проще их заменить, чем добавлять новую иконку. Как я понимаю, ImageToolbar, если картинка не найдена в кэше, загружает ее самостоятельно. Если так, то для реализации нужно лишь подставить урл не самой картинки а ссылки.
Anton, спасибо за помощь, надеюсь вы поможете "замутить" и это.
Заранее спасибо!:D

Отсутствует

 

№705-08-2005 22:42:28

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: ImageToolbar++

J7ReW пишет

Anton, надеюсь вы поможете "замутить" и это.

Значит так. Я не ахти какой программист (в т. ч. и на JS); кроме того, у моей лени день рождения был вчера, а у меня - сегодня, так что ограничусь кое-какими соображениями, не проверяя их на практике.

Итак:

при клике по
- первой иконке
   - левой кнопкой - сохранить картинку
   - правой - то же самое и закрыть вкладку

в конец функции imageToolbarSaveImage добавляем

Выделить код

Код:

if (e.button==2) getBrowser().removeCurrentTab();

- второй иконке (для картинок - превью или картинок - ссылок на файл)
   - л.к. - сохранить файл, на который ссылается картинка
   - п.к. - то же самое и закрыть вкладку

здесь надо получить доступ к объемлющей картинку ссылке ?
заменяем тело функции imageToolbarCopyImage кодом imageToolbarSaveImage; затем, мне кажется, вот эту:

Выделить код

Код:

var url      = imageToolbarCurrentImage.src;

строчку функции imageToolbarCopyImage надо будет заменить как-то так:

Выделить код

Код:

var url      = imageToolbarCurrentImage.parentNode.href; // или ...parentNode.getAttribute('href'); ??

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№808-08-2005 11:49:07

J7ReW
Участник
 
Группа: Members
Зарегистрирован: 03-08-2005
Сообщений: 7

Re: ImageToolbar++

Anton, огромное вам спасибо!!! Все получилось.
Если кому-то это интересно, вот код (немного некорректно, но работает), которым нужно заменить соответствующие функции в imagetoolbarOverlay.js:

Выделить код

Код:

function imageToolbarSaveImage(e) {
  
  // function by MonkeeSage, modified by Cusser
  
  if (!e) var e = window.event;
  document.popupNode = imageToolbarCurrentImage;
   
  var url      = imageToolbarCurrentImage.src; // convenience variable
  var filename = url.substring(url.lastIndexOf('/') + 1)
  
  if (url.indexOf("?") != -1 && url.indexOf("=") != -1) {
  
    // sniff the real filename from the headers...
    var httpRequest = new XMLHttpRequest();
    
    httpRequest.open('GET', url, false); // syncronous transfer
    httpRequest.overrideMimeType('text/xml'); // prevent leakage
    httpRequest.send(null);
    
    // data comes after send for sync'd GET, no callbacks needed...
    try {
    
      var fname = httpRequest.getResponseHeader('content-disposition');
      if (fname) {
         if (/filename="?([^";]+)"?/.test(fname)) {
            fname = RegExp.$1;
         }
         else {
            delete fname;
         }
      }
      else {
         fname = httpRequest.getResponseHeader('content-location');
      }
    
      if (fname) {
         filename = fname;
      }
      
    }
    
    catch(e) {
    
      // foobar! using default filename...
    
    }
    
  }
  
  const nsILocalFile = Components.interfaces.nsILocalFile;
  imageToolbarFolder = imageToolbarPrefs.getComplexValue("imageFolder", nsILocalFile);  
  var savefile = imageToolbarFolder;
  
  if (!savefile.exists()) {
  
    var bundle = document.getElementById("imageToolbarStrings");
    var nofolder = bundle.getString("nofolder");
  
    alert(nofolder);
    var success = imageToolbarSelectFolder();
    if (success == false) return;
  
  }
  
  savefile.appendRelativePath(filename);
  
  var overwrite = imageToolbarPrefs.getBoolPref("overwrite");
    
  //if (imageToolbarButtonAction(e,imageToolbarArray[0]) == false) {
	
	var qqq = false;

	if (qqq == false) {
    
    if (!imageToolbarSaveDelay) {
    
      imageToolbarSaveDelay = true;
        
      if (savefile.exists() && overwrite == false)
  	    savefile.createUnique(0, 0777);
      
      try {
        // Support for Download Sort
        if (ds_getTargetFile) {
          saveURL(url, null, null, false, true);
          window.setTimeout("imageToolbarSaveDelay = false",250);
          return;
        }
      }
      catch (e) {} 
      
      // If Download Sort is not enabled, use default method
      saveURL(url, savefile, null, false, true);
      window.setTimeout("imageToolbarSaveDelay = false",250);
      
    }
  
  }
  
  else {
  
    // Save prompt
    
    var ext = filename.substring(filename.lastIndexOf('.'),filename.length);
    
    /* Download Sort code duplicated to provide adequate support */
    try {
      var foundExt = checkForExtension(ext); // Returns -1 if not found
      if (foundExt != -1) {
        var aSource = ds_RDF.GetResource("NC:ExtensionRoot:" + ext);
        var locRDF = ds_RDF.GetResource("http://home.netscape.com/NC-rdf#location");
        var autoLocation = ds_datasource.GetTarget(aSource, locRDF, true);
        autoLocation = autoLocation.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
      }
    }
    catch (e) {}
    
    if (autoLocation)
    {
      savefile.initWithPath(autoLocation);
      savefile.appendRelativePath(filename);
    }
    savePrompt(url, savefile, filename, autoLocation);
  
  }

if (e.button==2) getBrowser().removeCurrentTab();
  
}

function imageToolbarCopyImage(e) {
  
  // function by MonkeeSage, modified by Cusser
  
  if (!e) var e = window.event;
  document.popupNode = imageToolbarCurrentImage;
   
  var url      = imageToolbarCurrentImage.parentNode.href;

  var filename = url.substring(url.lastIndexOf('/') + 1)
  
  if (url.indexOf("?") != -1 && url.indexOf("=") != -1) {
  
    // sniff the real filename from the headers...
    var httpRequest = new XMLHttpRequest();
    
    httpRequest.open('GET', url, false); // syncronous transfer
    httpRequest.overrideMimeType('text/xml'); // prevent leakage
    httpRequest.send(null);
    
    // data comes after send for sync'd GET, no callbacks needed...
    try {
    
      var fname = httpRequest.getResponseHeader('content-disposition');
      if (fname) {
         if (/filename="?([^";]+)"?/.test(fname)) {
            fname = RegExp.$1;
         }
         else {
            delete fname;
         }
      }
      else {
         fname = httpRequest.getResponseHeader('content-location');
      }
    
      if (fname) {
         filename = fname;
      }
      
    }
    
    catch(e) {
    
      // foobar! using default filename...
    
    }
    
  }
  
  const nsILocalFile = Components.interfaces.nsILocalFile;
  imageToolbarFolder = imageToolbarPrefs.getComplexValue("imageFolder", nsILocalFile);  
  var savefile = imageToolbarFolder;
  
  if (!savefile.exists()) {
  
    var bundle = document.getElementById("imageToolbarStrings");
    var nofolder = bundle.getString("nofolder");
  
    alert(nofolder);
    var success = imageToolbarSelectFolder();
    if (success == false) return;
  
  }
  
  savefile.appendRelativePath(filename);
  
  var overwrite = imageToolbarPrefs.getBoolPref("overwrite");
    
  //if (imageToolbarButtonAction(e,imageToolbarArray[0]) == false) {
	
	var qqq = false;

	if (qqq == false) {
    
    if (!imageToolbarSaveDelay) {
    
      imageToolbarSaveDelay = true;
        
      if (savefile.exists() && overwrite == false)
  	    savefile.createUnique(0, 0777);
      
      try {
        // Support for Download Sort
        if (ds_getTargetFile) {
          saveURL(url, null, null, false, true);
          window.setTimeout("imageToolbarSaveDelay = false",250);
          return;
        }
      }
      catch (e) {} 
      
      // If Download Sort is not enabled, use default method
      saveURL(url, savefile, null, false, true);
      window.setTimeout("imageToolbarSaveDelay = false",250);
      
    }
  
  }
  
  else {
  
    // Save prompt
    
    var ext = filename.substring(filename.lastIndexOf('.'),filename.length);
    
    /* Download Sort code duplicated to provide adequate support */
    try {
      var foundExt = checkForExtension(ext); // Returns -1 if not found
      if (foundExt != -1) {
        var aSource = ds_RDF.GetResource("NC:ExtensionRoot:" + ext);
        var locRDF = ds_RDF.GetResource("http://home.netscape.com/NC-rdf#location");
        var autoLocation = ds_datasource.GetTarget(aSource, locRDF, true);
        autoLocation = autoLocation.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
      }
    }
    catch (e) {}
    
    if (autoLocation)
    {
      savefile.initWithPath(autoLocation);
      savefile.appendRelativePath(filename);
    }
    savePrompt(url, savefile, filename, autoLocation);
  
  }

if (e.button==2) getBrowser().removeCurrentTab();
}

Отсутствует

 

№914-11-2005 13:22:07

Silver_Dick
Участник
 
Группа: Members
Зарегистрирован: 24-07-2005
Сообщений: 6

Re: ImageToolbar++

А можно ли на одну из кнопок повесить действие "добавить картинку в письмо как приложение" ? Увидел что нибудь интересное, ткнул одну кнопку, дописал адрес и заслал другу. А то сначала сохранять их, а потом уже в письмо толкать - муторно. Есть в контекстном меню пункт "отправить изображение", но он ссылку вставляет, а не картинку. ВОт нужно точно такое, "но с перламутровыми пуговицами":) То есть картинка вместо ссылки.

Отсутствует

 

Board footer

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