>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Firefox http://forum.mozilla-russia.org/viewforum.php?id=4 >Закладки с сохранением позиции http://forum.mozilla-russia.org/viewtopic.php?id=11201 |
Somniator > 04-07-2006 09:07:13 |
Господа! Потребность в таком расширении возникла при чтении книг - очень не хватает возможности создавать закладки в определенной позиции читаемого файла. |
stoneflash > 04-07-2006 11:21:42 |
Somniator |
Somniator > 04-07-2006 15:32:20 |
Частично задача решается расширением eReader (см. http://forum.mozilla.ru/viewtopic.php?id=7296 и http://forum.mozilla.ru/doku.php?id=gen … bookreader). Однако это расширение позволяет сохранить только одну позицию в файле. stoneflash В целом вопрос остается открытым. |
Shura > 04-07-2006 17:06:08 |
SessionSaver сохраняет позиции открытых страничек. |
Somniator > 05-07-2006 15:28:50 |
Задача решается следующим образом. 1. Подготовка страницы. Открывается страница большого размера (например, книга). Запускается закладурка со следующим кодом: Выделить код Код:javascript:( function() { function modifyElement(node) { node.style.setProperty('background', 'none', ''); var color = getRGBColor(node, 'background-color'); if (typeof(color) != 'string' && color[0] + color[1] + color[2] >= 2.8) node.style.setProperty('background-color', backgroundColor, ''); var tagName = node.tagName.toLowerCase(); if (isBlock(tagName) && (containText(node) || containInlineElement(node))) { var block = document.createElement('div'); block.style.setProperty('max-width', '35em', ''); var cur_align = getComputedStyle(node, null).getPropertyValue('text-align'); if (cur_align == 'justify') block.style.setProperty('text-align', 'left', ''); block.style.setProperty('margin', 'auto', ''); block.style.setProperty('line-height', '150%', ''); var color = getRGBColor(node, 'color'); if (typeof(color) != 'string' && color[0] + color[1] + color[2] <= 0.3) { block.style.setProperty('color', foregroundColor, ''); } while (node.childNodes.length > 0) { var child = node.childNodes[0]; block.appendChild(child.cloneNode(true)); node.removeChild(child); } node.appendChild(block); } } function isWhitespace(s) { for(var i = 0; i < s.length; ++i) { if (s.charCodeAt(i) > 32) return false; } return true; } var textNodeNumber = 0; function getNextTextNodeNumber() { return textNodeNumber++; } function modifyNode(n) { if (n.nodeType == Node.ELEMENT_NODE) { for(var i = 0; i < n.childNodes.length; ++i) { var x = n.childNodes[i]; modifyNode(x); } } else if (n.nodeType == Node.TEXT_NODE) { var s = n.nodeValue; if (isWhitespace(s) == false) { var a = document.createElement('a'); name = getNextTextNodeNumber().toString(); a.setAttribute('href', '#n' + name); a.setAttribute('name', 'n' + name); a.setAttribute('style', 'text-decoration: none; color: inherit !important;'); var t = n.cloneNode(n); a.appendChild(t); n.parentNode.replaceChild(a, n); } } } modifyNode(document.body); } )() Обработанная этой закладуркой страница сохраняется в Scrapbook'е. 2. Создание закладок и переход по ним. Открывается сохраненная в Scrapbook'е страница. Щелкается фрагмент текста (каждый фрагмент текста представляет собой ссылку, при щелчке изменится адрес в строке адреса). Создается закладка штатными средствами. Для перехода к нужному фрагменту текста осуществляется переход по созданной закладке. Итого: всё просто - подготавливаем файл и сохраняем в scrapbook'е, затем пользуемся обычными закладками. P.S. Код закладурки далек от совершенства (например, теряются адреса всех ссылок на странице). Если эта идея мне понравится - доработаю. |
hasherfrog > 05-07-2006 22:54:28 |
Somniator , как-то много требований. Scrapbook? Рискну предложить такой вариант: В принципе, можно ставить таким образом (вызовом 2) неограниченное количество закладок на странице. Вижу (пока) только одно дополнительное телодвижение - букмарклет должен "прихватывать" в кукис размеры окна, и восстанавливать его, соответственно. А это может быть отключено у пользователя в политиках javascript. |