среда, 26 марта 2008 г.

Cut для blogspot

Факт: blogger.com не умеет делать cut хоть сколько-нибудь элегантно. Погуглив, нашёл решение от PhoeniX'a, основанное на сворачивании блоков с классом "cut" посредством и динамическом из разворачивании яваскриптов. В нём были две вещи, которые мне не очень нравились. Во-первых, человек без яваскрипта не видел ни кнопку развернуть, ни остатка текста. Ну и чисто из идеалогических соображений, мне не нравилаль необходимость лезть в скрипт, чтоб поменять картинки.

Моя версия работает вообще без картинок, и позволяет указывать текст для ката. Установка почти аналогична установке скрипта-оригинала.

1. Необходимо подключить библиотеку jquery и сам скрипт сворачивания. Также надо добавить стили для кат-блока (класс cut) и блока с кат-надписью (класс cut_toogle_text).

<script type='text/javascript' src='http://jqueryjs.googlecode.com/files/jquery-1.2.1.pack.js'/>
<script type='text/javascript' src='http://4me.net.ru/ln/script4blogger2_noimgs.js'/>
<style>
<b:if cond='data:blog.pageType != "item"'>
BODY.js .cut {display:none;}
<b:else/>
.cut {display: block;}
</b:if>
.cut_toogle_text  {color: #336699; cursor: pointer; display: inline; font-weight: bold;}
.cut_toogle_text:hover  { text-decoration: underline;}
</style>

Внимание, мой скрипт для ката является "живым", так что если вы ссылаетесь на него, и вдруг начнут выскакивать алерты - не пугайтесь ;)

2. Далее, надо сделать так, чтоб при загрузке к BODY добавлялся класс js (чтоб каты сворачивались).

Для этого сразу после тэга BODY добавьте:


<script type='text/javascript'>
   $("BODY").addClass("js");
</script>
3. Теперь сделаем так, чтоб в посте, открытом отдельно, ничего не сворачивалось.

Поставьте галочку на пункте "Расширить шаблоны виджета" и замените строку <data:post.body/> на


<b:if cond='data:blog.pageType != "item"'>
<div expr:id='data:post.id' class='pxpostwrap'>
<data:post.body/>
</div>
<b:else/>
<data:post.body/>
</b:if>
4. Осталось добавить кат-блог

Оберните часть поста, которую надо свернуть, в div блок с классом cut. Если хотите, можете переопределить кат-надпись в атрибуте alt


<div class="cut" alt="Здесь будет cut">
Этот текст будет свёрнут.
</div>

Ну и напоследок, пример использования и текст текущей версии скрипта


/*
Published under GNU GPL2
Author Leonid "PhoeniX" Ponomarev
Edited by Vah aka Anton Bakhtin 
*/
$(document).ready(initCut);

var cut_settings={'more_text': 'Читать далее...', 'less_text': 'Свернуть'};

function initCut()
{
 $("div.pxpostwrap div.cut").each(function(){
  var alt=$(this).attr('alt');
  if (!alt) alt=cut_settings['more_text'];
  pc=$("P", this).size(); var pc_string="абзацев";
  if (pc%10==1) pc_string="абзац";
  if (pc%10==2 || pc%10==3 || pc%10==4) pc_string="абзаца";
  alt=alt + " (" +pc + " " + pc_string + ")";
  $(this).after("<div class=\"cut_toogle_text\" alt=\"" + alt + "\">" + alt + "</div>");
 });
 $("div.cut_toogle_text").toggle(
  function(){
   $(this).text("Загрузка...").prev().fadeIn("slow",
    function(){$(this).next().text(cut_settings['less_text']);}
   );
  },
  function(){
    $(this).prev().fadeOut("fast");
    $(this).text($(this).attr("alt"));
  }
 );
}

среда, 5 марта 2008 г.

sk1 ebuild

В январском (русском) номере LinuxFormat была статья о чудо векторном редакторе sk1, умеющим с лёгкостью открывать ai. Это надо было попробовать. Однако команда eix sk1 выдала (sic!): "No matches found."

Что ж, не можешь - поможем, не хочешь - заставим.

Сайт проекта также не предлагал варианта, для Gentoo, поэтому пришлось писать ebuild.

Итак, инструкция по применению.

1. Создать локальный overlay

Например, создадим его в папке /usr/local/portage, и добавим к списку известных portage


# mkdir -p /usr/local/portage
# echo "PORTDIR_OVERLAY=\"/usr/local/portage/ \${PORTDIR_OVERLAY}\"" >> /etc/make.conf
2. Положить туда ebuild sk1

# cd /usr/local/portage/
# wget http://4me.net.ru/ln/sk.tar.gz
# tar -xvzf sk.tar.gz
# rm sk.tar.gz
3. Размаскирование необходимых пакетов

sK1 требует tk и tcl ветки 8.5, которые жёстко маскированы. Кроме того маскрирован (на всяких случай) и сам sk1. На момент написания поста, в портежах были только версии 8.5.1, поэтому в примере расмаскируются именно они.


# echo -e "=dev-lang/tcl-8.5.1\n=dev-lang/tk-8.5.1\nmedia-gfx/sK1" >> /etc/portage/package.keywords
# echo -e "=dev-lang/tcl-8.5.1\n=dev-lang/tk-8.5.1" >> /etc/portage/package.unmask  
4. Добавление use флагов

Для корректной работы программы также необходимо, чтобы python был собран с USE-флагом tk, а media-libs/lcms с флагом python. Если это не так - добавьте их в make.conf или package.use и пересоберите пакеты:


# echo "dev-lang/python tk" >> /etc/portage/package.use
# echo "media-libs/lcms python" >> /etc/portage/package.use
# emerge -Nuva dev-lang/python media-libs/lcms
5. Установка sK1

# emerge -av sK1

Вот, собственно, и все. Чтобы запустить редактор, наберите sk1.

Критика и сообщения о корявости ebuild'а - приветствуются!