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

Юристы зарабатывают огромные деньги и славу, оперируя хорошим знанием законов. Правила форума — простой путь к успешному общению.

№106-02-2013 00:12:49

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 18.0

[CB]Reload Broken Images

Reload Broken Images 0.3.1 (2015-04-02)
Автор: Infocatcher
Описание:
Кнопка обновляет поврежденные или незагруженные изображения.
Работает аналогично пункту «Перезагрузить изображение» в контекстном меню, но для всех изображений на странице.

Установить:

Выделить код

Код:

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%3EReload%20Broken%20Images%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAV1BMVEUAAABVu1URdxERdxEzmTMfhR9Vu1UzmTMfhR+xsbEfhR/l5eVHrUeI7ohVu1X///8zmTMRdxGcz5xxpHHA2sBgk2B6rXpv1G+91r3L5ct7rnuMpYyCr4Lz4NPdAAAACXRSTlMAgIBAQEBAgIDCV2g6AAAAd0lEQVR4Xm2PyQ6DMAxEHeg23pJA1+X/v7MQYaqivos17zAj0x8QrCI3INiILNiIMCEmfoQMfl4EJMtTVU3fUStjMbOblV0YNmZ23i+RqFairvaU0pwFdLni4AlwbysCyXe11huzjzJ1mpXj+tyLnZlP9KWv3Xw+8OkH1RK7f5sAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B//%20http%3A//infocatcher.ucoz.net/js/cb/reloadBrokenImages.js%0A//%20https%3A//forum.mozilla-russia.org/viewtopic.php%3Fid%3D57978%0A//%20https%3A//github.com/Infocatcher/Custom_Buttons/tree/master/Reload_Broken_Images%0A%0A//%20Reload%20Broken%20Images%20button%20for%20Custom%20Buttons%0A//%20%28code%20for%20%22code%22%20section%29%0A%0A//%20%28c%29%20Infocatcher%202012-2015%0A//%20version%200.3.1%20-%202015-04-02%0A%0Avar%20debug%20%3D%20false%3B%0Avar%20maxAttempts%20%3D%204%3B%0A%0Afunction%20_localize%28s%29%20%7B%0A%09var%20strings%20%3D%20%7B%0A%09%09%22%25label%25%3A%20%22%3A%20%7B%0A%09%09%09ru%3A%20%22%25label%25%3A%20%22%0A%09%09%7D%2C%0A%09%09%22Reloading%3A%20%241/%242%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u041E%u0431%u043D%u043E%u0432%u043B%u0435%u043D%u0438%u0435%3A%20%241/%242%22%0A%09%09%7D%2C%0A%09%09%22Done%20%5Btotal%3A%20%241%2C%20failed%3A%20%242%5D%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u0413%u043E%u0442%u043E%u0432%u043E%20%5B%u0432%u0441%u0435%u0433%u043E%3A%20%241%2C%20%u043D%u0435%u0443%u0434%u0430%u0447%u043D%u043E%3A%20%242%5D%22%0A%09%09%7D%2C%0A%09%09%22Done%20%5Btotal%3A%20%241%5D%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u0413%u043E%u0442%u043E%u0432%u043E%20%5B%u0432%u0441%u0435%u0433%u043E%3A%20%241%5D%22%0A%09%09%7D%2C%0A%09%09%22Start%20reloading%3A%20%241%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u0417%u0430%u043F%u0443%u0441%u043A%20%u043E%u0431%u043D%u043E%u0432%u043B%u0435%u043D%u0438%u044F%3A%20%241%22%0A%09%09%7D%2C%0A%09%09%22Nothing%20to%20reload%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u041E%u0431%u043D%u043E%u0432%u043B%u044F%u0442%u044C%20%u043D%u0435%u0447%u0435%u0433%u043E%22%0A%09%09%7D%0A%09%7D%3B%0A%09var%20locale%20%3D%20%28function%28%29%20%7B%0A%09%09//var%20prefs%20%3D%20Services.prefs%3B%0A%09%09var%20prefs%20%3D%20Components.classes%5B%22@mozilla.org/preferences-service%3B1%22%5D%0A%09%09%09.getService%28Components.interfaces.nsIPrefBranch%29%3B%0A%09%09if%28%21prefs.getBoolPref%28%22intl.locale.matchOS%22%29%29%20%7B%0A%09%09%09var%20locale%20%3D%20prefs.getCharPref%28%22general.useragent.locale%22%29%3B%0A%09%09%09if%28locale.substr%280%2C%209%29%20%21%3D%20%22chrome%3A//%22%29%0A%09%09%09%09return%20locale%3B%0A%09%09%7D%0A%09%09return%20Components.classes%5B%22@mozilla.org/chrome/chrome-registry%3B1%22%5D%0A%09%09%09.getService%28Components.interfaces.nsIXULChromeRegistry%29%0A%09%09%09.getSelectedLocale%28%22global%22%29%3B%0A%09%7D%29%28%29.match%28/%5E%5Ba-z%5D*/%29%5B0%5D%3B%0A%09_localize%20%3D%20%21locale%20%7C%7C%20locale%20%3D%3D%20%22en%22%0A%09%09%3F%20function%28s%29%20%7B%0A%09%09%09return%20s%3B%0A%09%09%7D%0A%09%09%3A%20function%28s%29%20%7B%0A%09%09%09return%20strings%5Bs%5D%20%26%26%20strings%5Bs%5D%5Blocale%5D%20%7C%7C%20s%3B%0A%09%09%7D%3B%0A%09return%20_localize.apply%28this%2C%20arguments%29%3B%0A%7D%0A%0Avar%20logPrefix%20%3D%20%22reloadImage%28%29%3A%20%22%3B%0Adebug%20%26%26%20Components.utils.import%28%22resource%3A//gre/modules/Services.jsm%22%29%3B%0Avar%20activeAttempts%20%3D%200%3B%0Avar%20totalImages%20%3D%200%3B%0Avar%20successImages%20%3D%200%3B%0Avar%20failedImages%20%3D%200%3B%0Afunction%20reloadImage%28img%29%20%7B%0A%09//%20Based%20on%20code%20from%20chrome%3A//browser/content/nsContextMenu.js%20%28Firefox%2021.0a1%29%0A%09if%28%21%28img%20instanceof%20Components.interfaces.nsIImageLoadingContent%29%20%7C%7C%20%21img.currentURI%29%0A%09%09return%3B%0A%09var%20request%20%3D%20img.getRequest%28Components.interfaces.nsIImageLoadingContent.CURRENT_REQUEST%29%3B%0A%09if%28%0A%09%09request%0A%09%09%26%26%20request.imageStatus%20%26%20request.STATUS_LOAD_COMPLETE%0A%09%09%26%26%20%21%28request.imageStatus%20%26%20request.STATUS_ERROR%29%20//%20We%20may%20have%20both%20flags%21%0A%09%29%0A%09%09return%3B%0A%09var%20uri%20%3D%20img.currentURI%3B%0A%09var%20src%20%3D%20uri.spec%3B%0A%09try%20%7B%0A%09%09urlSecurityCheck%28%0A%09%09%09src%2C%0A%09%09%09img.ownerDocument.nodePrincipal%2C%0A%09%09%09Components.interfaces.nsIScriptSecurityManager.DISALLOW_SCRIPT%0A%09%09%29%3B%0A%09%7D%0A%09catch%28e%29%20%7B%0A%09%09Components.utils.reportError%28e%29%3B%0A%09%09return%3B%0A%09%7D%0A%09debug%20%26%26%20Services.console.logStringMessage%28logPrefix%20+%20src%29%3B%0A%09var%20errors%20%3D%200%3B%0A%09function%20check%28e%29%20%7B%0A%09%09var%20error%20%3D%20e.type%20%3D%3D%20%22error%22%3B%0A%09%09if%28error%20%26%26%20++errors%20%3C%20maxAttempts%29%20%7B%0A%09%09%09try%20%7B%0A%09%09%09%09var%20tools%20%3D%20Components.classes%5B%22@mozilla.org/image/tools%3B1%22%5D%0A%09%09%09%09%09.getService%28Components.interfaces.imgITools%29%3B%0A%09%09%09%09var%20cache%20%3D%20%22getImgCacheForDocument%22%20in%20tools%20//%20Gecko%2018%0A%09%09%09%09%09%3F%20tools.getImgCacheForDocument%28img.ownerDocument%29%0A%09%09%09%09%09%3A%20Components.classes%5B%22@mozilla.org/image/cache%3B1%22%5D%0A%09%09%09%09%09%09.getService%28Components.interfaces.imgICache%29%3B%0A%09%09%09%09if%28cache.findEntryProperties%28uri%29%29%20%7B%0A%09%09%09%09%09cache.removeEntry%28uri%29%3B%0A%09%09%09%09%09debug%20%26%26%20Services.console.logStringMessage%28logPrefix%20+%20src%20+%20%22%5Cn%3D%3E%20remove%20this%20URI%20from%20cache%22%29%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%09catch%28e%29%20%7B%0A%09%09%09%09debug%20%26%26%20Services.console.logStringMessage%28logPrefix%20+%20src%20+%20%22%5Cn%3D%3E%20cache.removeEntry%28%29%20failed%22%29%3B%0A%09%09%09%09Components.utils.reportError%28e%29%3B%0A%09%09%09%7D%0A%0A%09%09%09//%20Workaround%20for%20%22Image%20corrupt%20or%20truncated%22%20error%0A%09%09%09var%20req%20%3D%20new%20XMLHttpRequest%28%29%3B%0A%09%09%09req.open%28%22GET%22%2C%20src%2C%20true%29%3B%0A%09%09%09req.channel.loadFlags%20%7C%3D%20Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE%3B%0A%09%09%09req.onload%20%3D%20req.onerror%20%3D%20resetSrc%3B%0A%09%09%09req.send%28null%29%3B%0A%0A%09%09%09resetSrc%28%29%3B%0A%09%09%7D%0A%09%09else%20%7B%0A%09%09%09if%28error%29%0A%09%09%09%09++failedImages%3B%0A%09%09%09else%0A%09%09%09%09++successImages%3B%0A%09%09%09feedback%28%22Reloading%3A%20%241/%242%22%2C%20%5BfailedImages%20+%20successImages%2C%20totalImages%5D%29%3B%0A%09%09%09destroy%28%29%3B%0A%09%09%7D%0A%09%09debug%20%26%26%20Services.console.logStringMessage%28logPrefix%20+%20src%20+%20%22%5Cn%3D%3E%20%22%20+%20e.type%20+%20%28error%20%3F%20%22%23%22%20+%20errors%20%3A%20%22%22%29%29%3B%0A%09%7D%0A%09function%20resetSrc%28%29%20%7B%0A%09%09img.src%20%3D%20%22about%3Ablank%22%3B%0A%09%09setTimeout%28function%28%29%20%7B%0A%09%09%09img.src%20%3D%20src%3B%0A%09%09%7D%2C%200%29%3B%0A%09%7D%0A%09function%20destroy%28%29%20%7B%0A%09%09clearTimeout%28stopWaitTimer%29%3B%0A%09%09img.removeEventListener%28%22load%22%2C%20check%2C%20true%29%3B%0A%09%09img.removeEventListener%28%22error%22%2C%20check%2C%20true%29%3B%0A%09%09if%28%21--activeAttempts%29%20%7B%0A%09%09%09feedback%28%0A%09%09%09%09failedImages%0A%09%09%09%09%09%3F%20%22Done%20%5Btotal%3A%20%241%2C%20failed%3A%20%242%5D%22%0A%09%09%09%09%09%3A%20%22Done%20%5Btotal%3A%20%241%5D%22%2C%0A%09%09%09%09%5BtotalImages%2C%20failedImages%5D%2C%0A%09%09%09%09true%0A%09%09%09%29%3B%0A%09%09%7D%0A%09%7D%0A%09img.addEventListener%28%22load%22%2C%20check%2C%20true%29%3B%0A%09img.addEventListener%28%22error%22%2C%20check%2C%20true%29%3B%0A%09var%20stopWaitTimer%20%3D%20setTimeout%28destroy%2C%208*60e3%29%3B%0A%09++activeAttempts%3B%0A%09++totalImages%3B%0A%09img.forceReload%28%29%3B%0A%7D%0Afunction%20feedback%28s%2C%20replacements%2C%20isLast%29%20%7B%0A%09if%28%22XULBrowserWindow%22%20in%20window%29%20%7B%0A%09%09s%20%3D%20_localize%28s%29%3B%0A%09%09if%28replacements%29%20replacements.forEach%28function%28replacement%2C%20i%29%20%7B%0A%09%09%09s%20%3D%20s.replace%28%22%24%22%20+%20++i%2C%20replacement%29%3B%0A%09%09%7D%29%3B%0A%09%09debug%20%26%26%20Services.console.logStringMessage%28logPrefix%20+%20%22feedback%28%29%3A%5Cn%22%20+%20s%29%3B%0A%09%09XULBrowserWindow.setOverLink%28feedbackPrefix%20+%20s%2C%20null%29%3B%0A%09%09if%28isLast%29%20setTimeout%28function%28%29%20%7B%0A%09%09%09XULBrowserWindow.setOverLink%28%22%22%2C%20null%29%3B%0A%09%09%7D%2C%201500%29%3B%0A%09%7D%0A%7D%0Afunction%20parseWin%28win%29%20%7B%0A%09Array.forEach%28win.frames%2C%20parseWin%29%3B%0A%09var%20doc%20%3D%20win.document%3B%0A%09if%28%22images%22%20in%20doc%29%20//%20HTML%20document%0A%09%09Array.forEach%28doc.images%2C%20reloadImage%29%3B%0A%09else%20%7B%0A%09%09Array.forEach%28%0A%09%09%09doc.getElementsByTagNameNS%28%22http%3A//www.w3.org/1999/xhtml%22%2C%20%22img%22%29%2C%0A%09%09%09reloadImage%0A%09%09%29%3B%0A%09%09Array.forEach%28%0A%09%09%09doc.getElementsByTagNameNS%28%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%2C%20%22image%22%29%2C%0A%09%09%09reloadImage%0A%09%09%29%3B%0A%09%7D%0A%7D%0Avar%20feedbackPrefix%20%3D%20_localize%28%22%25label%25%3A%20%22%29%0A%09.replace%28%0A%09%09%22%25label%25%22%2C%0A%09%09this%20instanceof%20XULElement%20%26%26%20this.label%0A%09%09%09%7C%7C%20%22Reload%20Broken%20Images%22%0A%09%29%3B%0AparseWin%28content%29%3B%0Afeedback%28totalImages%20%3F%20%22Start%20reloading%3A%20%241%22%20%3A%20%22Nothing%20to%20reload%22%2C%20%5BtotalImages%5D%2C%20%21totalImages%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


Исходный код, секция «код»: reloadBrokenImages.js

Отредактировано Infocatcher (02-04-2015 10:20:55)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№206-02-2013 00:50:07

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 18.0

Re: [CB]Reload Broken Images

Тестовая версия, будьте осторожны!

Разрабатываемая версия


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№320-06-2014 12:32:03

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 30.0

Re: [CB]Reload Broken Images

Reload Broken Images 0.3.0 (2014-06-20)
[+] Добавлена поддержка XML-документов.
[x] Workaround для ошибки "Image corrupt or truncated".
[x] Исправлена обработка корректной загрузки не с первой попытки.
[x] Исправлена обработка ограничений безопасности: теперь будет проигнорировано обновление только одного изображения.
[+] Добавлено отображение статистики в строке состояния.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№420-06-2014 17:46:26

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 30.0

Re: [CB]Reload Broken Images

Reload Broken Images 0.3.0.1 (2014-06-20)
[*] Добавлено автоматическое скрытие сообщения в строке состояния.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№520-06-2014 22:33:44

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

Re: [CB]Reload Broken Images

Чтобы перезагрузить изображения, нужно кликнуть на кнопку, или она сама эти изображения перезагружает.
Я просто нигде в коде не видел "click"


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

Отсутствует

 

№620-06-2014 23:07:55

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 30.0

Re: [CB]Reload Broken Images

difabor пишет

Чтобы перезагрузить изображения, нужно кликнуть на кнопку, или она сама эти изображения перезагружает.
Я просто нигде в коде не видел "click"

// (code for "code" section)

Код выполняется только после клика по кнопке, никакой автоматики.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№721-06-2014 02:24:59

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

Re: [CB]Reload Broken Images

Infocatcher пишет
difabor пишет

Чтобы перезагрузить изображения, нужно кликнуть на кнопку, или она сама эти изображения перезагружает.
Я просто нигде в коде не видел "click"

// (code for "code" section)

Код выполняется только после клика по кнопке, никакой автоматики.

А не могли бы Вы подсказать - где в коде отражается этот самый клик по кнопке?
Почему я это спрашиваю?
Допустим, я хочу реализовать то же не по нажатию на кнопку, а, например, нажатие левой клавиши мышки, затем клик ПКМ, но не на кнопке, а в любом месте браузера...
Как можно было бы сделать такое?
Если бы я видел что-то типа

Выделить код

Код:

this.onclick = function(e) {
   if (e.button == 0) {
    ... перезагрузка изображения ...
   } 
}

я бы как-то смог ... перезагрузка изображения ... попытаться вызвать как-то по-другому, а тут - непонятно :(

Отредактировано difabor (21-06-2014 02:26:01)


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

Отсутствует

 

№821-06-2014 20:51:30

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 30.0

Re: [CB]Reload Broken Images

difabor пишет

А не могли бы Вы подсказать - где в коде отражается этот самый клик по кнопке?

Нигде не отражается, запуском занимается Custom Buttons: код выполняется после события "command" кнопки.

Можно вот так сделать:

Выделить код

Код:

this.onclick = function(e) {
    if (e.button == 0) {
        reloadBrokenImages();
    }
};

var reloadBrokenImages = function() {
    // Здесь код из секции "код"
}.bind(this);

Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№921-06-2014 21:07:49

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

Re: [CB]Reload Broken Images

Большущее спасибо!
И, как я понял, код из секции код убрать из секции код в этом случае.


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

Отсутствует

 

№1021-06-2014 21:17:47

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 30.0

Re: [CB]Reload Broken Images

difabor пишет

И, как я понял, код из секции код убрать из секции код в этом случае.

Да, разумеется.

Хотя можно сделать вот так:

Выделить код

Код:

this.onclick = function(e) {
    if (e.button == 0) {
        e.preventDefault();
        reloadBrokenImages();
    }
};

, так тоже секция «код» не выполнится (и можно будет использовать ее для сочетания клавиш).
но обычно проще вот такое в «код»:

Выделить код

Код:

if(!event.target) { // Button's hotkey pressed
    // ...
}

Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1102-04-2015 10:23:10

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 37.0

Re: [CB]Reload Broken Images

Reload Broken Images 0.3.1 (2015-04-02)
[x] Исправлено определение не полностью загруженных изображений в новых версиях Firefox.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

Board footer

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