<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JSToolbox - все о JavaScript &#187; History</title>
	<atom:link href="http://www.jstoolbox.com/category/history/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jstoolbox.com</link>
	<description>Блог о программировании вообще и о JavaScript в частности, уроки, статьи, заметки, база знаний.</description>
	<lastBuildDate>Wed, 28 Jul 2010 22:33:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Добавление History в AJAX приложения при помощи Mootools</title>
		<link>http://www.jstoolbox.com/2008/07/30/dobavlenie-history-v-ajax-prilozheniya-pri-pomoshhi-mootools/</link>
		<comments>http://www.jstoolbox.com/2008/07/30/dobavlenie-history-v-ajax-prilozheniya-pri-pomoshhi-mootools/#comments</comments>
		<pubDate>Wed, 30 Jul 2008 19:54:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[History]]></category>
		<category><![CDATA[MooTools]]></category>

		<guid isPermaLink="false">http://www.jstoolbox.com/2008/07/30/dobavlenie-history-v-ajax-prilozheniya-pri-pomoshhi-mootools/</guid>
		<description><![CDATA[На днях мне пришлось разрабатывать сайт, в котором необходимо было сделать AJAX навигацию на Mootools. Естественно, нужно было сохранить возможность добавлять ссылки на страницы сайта в закладки и также сохранить поддержку кнопок Назад/Вперед в браузере. В общем типичная проблема для AJAX приложений. Ранее я писал, как сделать History при помощи YUI, однако, мне желательно было [...]]]></description>
			<content:encoded><![CDATA[<p>На днях мне пришлось разрабатывать сайт, в котором необходимо было сделать AJAX навигацию на Mootools. Естественно, нужно было сохранить возможность добавлять ссылки на страницы сайта в закладки и также сохранить поддержку кнопок Назад/Вперед в браузере. В общем типичная проблема для AJAX приложений. Ранее я писал, <a href="http://www.jstoolbox.com/2008/01/20/dobavlenie-podderzhki-obekta-history-v-ajax-prilozheniya/" title="Добавление поддержки объекта History в AJAX приложения">как сделать History при помощи YUI</a>, однако, мне желательно было сделать все в Mootools, поэтому пришлось искать решения для этой библиотеки. После некоторых поисков я все же нашел подходящий скрипт на <a href="http://digitarald.de/project/history-manager/" title="HistoryManager - The Ajax Back-Button">digitarald.de</a>, совместимый со всеми основными браузерами (Internet Explorer 6+, Opera 9, Firefox 1.5+, Safari 2+), однако он написан под Mootools 1.11. Этот же скрипт, но переделанный под новую версию (Mootools 1.2), я нашел на <a href="http://www.anobii.com/blog-wp/?p=75" title="aNobii Blog">aNobii Blog</a>. Однако он тоже отказался работать, поэтому пришлось его немного переделать. В результате я получил вполне работоспособный скрипт, которым хочу поделиться с вами. Скачать его можно <a href="http://www.jstoolbox.com/demo/moohistory/HistoryManager12.js" title="Скрипт Mootools History">здесь</a>.</p>
<p>Теперь о том как им пользоваться.</p>
<p><span id="more-185"></span></p>
<p>Самым первым шагом, конечно же является подключение скрипта в страницу:</p>
<pre class="prettyprint">
&lt;script src="mootools-1.2.js" type="text/javascript">&lt;/script>
&lt;script src="HistoryManager12.js" type="text/javascript">&lt;/script>
</pre>
<p>После этого, на странице будет доступен объект <strong>HistoryManager</strong>, который собственно и будет выполнять основную работу. Первое, что нужно здесь сделать, это инициализировать этот объект:</p>
<pre class="prettyprint">
HistoryManager.initialize();
</pre>
<p>Следующий шаг &#8211; регистрация модуля (этот пример взят из класса <em>PaginationClass</em>, полный вариант которого приведен в конце статьи):</p>
<pre class="prettyprint">
this.historyKey = 'ajax_';
this.history = HistoryManager.register(
	this.historyKey,
	[firstPage],
	function(values) {
		this.to(values[0]);
	}.bind(this),
	function(values) {
		return [this.historyKey, values[0]].join('');
	}.bind(this),
	this.historyKey + '(.+)'
);
</pre>
<p>Кажется сложным, но это лишь на первый взгляд, к этому можно быстро привыкнуть <img src='http://www.jstoolbox.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . После выполнения этой функции, мы получим объект <strong>this.history</strong>, который будет иметь следующие функции: <strong>setValues()</strong>, <strong>setValue()</strong>, <strong>generate()</strong> и <strong>unregister()</strong>. Теперь о параметрах функции <strong>register()</strong>. Первый параметр &#8211; <strong>this.historyKey</strong> &#8211; уникальный ключ модуля (можно регистрировать одновременно несколько модулей, поэтому и необходимо, чтобы они были уникальными).</p>
<div class="entry_picture" style="width:385px">
<img src='http://www.jstoolbox.com/wp-content/uploads/2008/07/history.png' alt='history.png' />
</div>
<p>Второй параметр это страницы по умолчанию; метки, указанные в этом массиве, будут добавлены в стек объекта HistoryManager. В моем примере, я добавляю в этот параметр первую страницу, на которую нужно перейти сразу после загрузки. Третий параметр &#8211; callback onMatch, который вызывается при изменении состояния (при вызове <strong>setValue()</strong>). Четвертый параметр &#8211; callback onGenerate, который должен возвращать строку для хэша (url после знака решетки). И последний параметр &#8211; регулярное выражение для хэша.</p>
<p>Теперь, при изменении состояния страницы, необходимо устанавливать &#8220;отметку&#8221; в истории, чтобы можно было потом вернуться, делается это так:</p>
<pre class="prettyprint">
this.history.setValue(0, value);
</pre>
<p>0 &#8211; это индекс страницы, <strong>value</strong> &#8211; это отметка для истории.</p>
<p>В самом конце, после регистрации всех модулей, нужно вызвать функцию <strong>start()</strong>:</p>
<pre class="prettyprint">
HistoryManager.start();
</pre>
<p><br/></p>
<h3>Пример приложения</h3>
<p>Итак, рабочий пример приложения написанного при помощи скрипта HistoryManager. Приложение будет просто выполнять навигацию с одной страницы на другую при помощи AJAX.</p>
<p><strong>Шаг 1: HTML</strong></p>
<p>HTML для страницы очень прост &#8211; сайдбар со ссылками и контейнер, в котором будет размещаться содержимое сайта (полчаемое через AJAX):</p>
<pre class="prettyprint">
&lt;!-- ссылки -->
&lt;ul id="sidebar">
	&lt;li>&lt;a href="yuihist1.html">Страница 1&lt;/a>&lt;/li>
	&lt;li>&lt;a href="yuihist2.html">Страница 2&lt;/a>&lt;/li>
	&lt;li>&lt;a href="yuihist3.html">Страница 3&lt;/a>&lt;/li>
&lt;/ul>

&lt;!-- контейнер для отображения полученных от сервера данных -->
&lt;div id="container">&lt;/div>
</pre>
<p><strong>Шаг 2: CSS</strong></p>
<pre class="prettyprint">
#header {
	text-align: center;
	background: #ccc;
	border-top: 1px solid #aaa;
	border-bottom: 1px solid #aaa;
}

#sidebar {
	width: 240px;
	float: left;
}

#sidebar li {
	list-style-type: none;
}

#container {
	width: 440px;
	height: 400px;
	padding: 8px;
	border: 1px solid #aaa;
	float: left;
	overflow: auto;
}
</pre>
<p><strong>Шаг 3: JavaScript</strong></p>
<p>Ну и последнее, наш скрипт:</p>
<pre class="prettyprint">
window.addEvent('domready', function(){
	HistoryManager.initialize();

	// устанавливаем в первоначальную позицию
	var firstPage = '/demo/moohistory/yuihist1.html';
	var pagi = new PaginationClass(firstPage);

	$$('a').addEvent('click', function(e) {
		e.stop();
		pagi.to(this.href);
	});

	HistoryManager.start();

});

var PaginationClass = new Class({

	initialize: function(firstPage) {

		this.historyKey = 'ajax_';
		this.history = HistoryManager.register(
			this.historyKey,
			[firstPage],
			function(values) {
				this.to(values[0]);
			}.bind(this),
			function(values) {
				return [this.historyKey, values[0]].join('');
			}.bind(this),
			this.historyKey + '(.+)'
		);
	},

	to: function(page) {
		if (page === undefined || page === null /*|| dCond*/) return;

		page = page.replace(/^http:\/\/[^\/]+/, '');
		this.page = page;

		var req = new Request.HTML({url:page,update:'container'}).get(page);

		this.history.setValue(0, this.page);
	}
});
</pre>
<p>Как видите, для навигации я использовал упомянутый выше класс <em>PaginationClass</em>. При инициализации этого класса вызывается одна единственная функция <strong>register()</strong>, описанная выше. Вторая функция &#8211; <strong>to()</strong> выполняет AJAX запрос и устанавливает отметку в history.</p>
<p>В самом же начале скрипта (который выполняется при событии <strong>domready</strong>) инициализируется объект <strong>HistoryManager</strong> и назначается обработчик событий для ссылок в сайдбаре. В итоге, при щелчке на ссылках, будет получаться атрибут <strong>href</strong> и далее, функция <strong>PaginationClass.to()</strong> будет обновлять содержимое контейнера и устанавливать соответствующую точку в истории.</p>
<p>Посмотреть этот пример в действии можно по следующей ссылке:</p>
<p><a href="http://www.jstoolbox.com/demo/moohistory/index.html" title="демо пример" class="demo">посмотреть демо</a></p>
<p>Еще более совершенный демо пример можно найти на сайте автора этого чудесного скрипта:</p>
<p><a href="http://digitarald.de/project/history-manager/1-0/showcase/complex/" class="external">HistoryManager</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jstoolbox.com/2008/07/30/dobavlenie-history-v-ajax-prilozheniya-pri-pomoshhi-mootools/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Добавление поддержки объекта History в AJAX приложения.</title>
		<link>http://www.jstoolbox.com/2008/01/20/dobavlenie-podderzhki-obekta-history-v-ajax-prilozheniya/</link>
		<comments>http://www.jstoolbox.com/2008/01/20/dobavlenie-podderzhki-obekta-history-v-ajax-prilozheniya/#comments</comments>
		<pubDate>Sun, 20 Jan 2008 20:24:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[History]]></category>
		<category><![CDATA[YUI]]></category>

		<guid isPermaLink="false">http://www.jstoolbox.com/2008/01/20/dobavlenie-podderzhki-obekta-history-v-ajax-prilozheniya/</guid>
		<description><![CDATA[Одной из основных проблем при использовании AJAX является невозможность навигации при помощи кнопок BACK и FORWARD,  а также функций history.back(), history.go() и др., потому что изменения в веб странице, которые осуществляются через AJAX никак не отображаются на объекте History. Кроме того, страницы, полученные с использованием AJAX, невозможно добавлять в закладки.
Эти проблемы можно решить при [...]]]></description>
			<content:encoded><![CDATA[<p>Одной из основных проблем при использовании AJAX является невозможность навигации при помощи кнопок BACK и FORWARD,  а также функций <strong>history.back()</strong>, <strong>history.go()</strong> и др., потому что изменения в веб странице, которые осуществляются через AJAX никак не отображаются на объекте History. Кроме того, страницы, полученные с использованием AJAX, невозможно добавлять в закладки.</p>
<p>Эти проблемы можно решить при помощи утилиты Browser History Manager, входящей в состав библиотеки <a href="http://developer.yahoo.com/yui/">YUI</a>. Она позволяет создавать веб приложения с полностью функциональным объектом History, а также возможностью сохранять другие параметры состояния приложения, например, информацию о том, какие панели или кнопки на странице активны.</p>
<p><span id="more-5"></span></p>
<p>У этой утилиты есть и несколько ограничений. Основное &#8211; это невозможность использовать её в браузере Opera, из-за того что последний не обновляет свойство location.hash при использовании кнопок back/forward. Также, из-за того, что утилита записывает историю в фрагменты URL (часть, которая идет после знака #), есть ограничения на длину имени состояния. Например, для Internet Explorer этот лимит составляет 2083 символа (длина URL вместе с фрагментом).</p>
<p>Теперь о том как этим пользоваться.<br />
Во первых, нужно подключить необходимые модули:</p>
<pre class="prettyprint">
&lt;script src="http://yui.yahooapis.com/2.4.1/build/yahoo/yahoo-min.js">&lt;/script>
&lt;script src="http://yui.yahooapis.com/2.4.1/build/event/event-min.js">&lt;/script>
&lt;script src="http://yui.yahooapis.com/2.4.1/build/history/history-min.js">&lt;/script>
</pre>
<p>Затем нужно добавить следующие две строки, сразу после тэга &lt;body&gt;:</p>
<pre class="prettyprint">
&lt;iframe id="yui-history-iframe" src="path_to_asset" style="position:absolute; top:0; left:0;width:1px; height:1px; visibility:hidden;">&lt;/iframe>
&lt;input id="yui-history-field" type="hidden" />
</pre>
<p>Вместо path-to-asset в аттрибуте url нужно вставить существующий url, ссылающийся на тот же домен, на котором находится ваша страница. Лучше всего здесь использовать относительные пути. Стили в тэге iframe необходимы только для того, чтобы сделать его невидимым.</p>
<p>Следующий шаг &#8211; регистрация модуля.<br />
Здесь, <strong>модуль</strong> это видимый объект на странице с которым пользователь будет взаимодействовать и состояния которого нужно будет сохранять в истории браузера. Содержимое модуля изменяется, и для того, чтобы сохранять состояние этих изменений, и затем переходить по этим состояниям при помощи кнопок back/forward, нужно этот модуль зарегистрировать. Делается это функцией <strong>YAHOO.util.History.register()</strong>, которая принимает 3 параметра : идетнификатор модуля (не пустая строка, уникально идентифицирующая этот модуль), начальное состояние модуля (т.е. состояние, соответствующее первой точке в истории), и функция обработчик, которая будет вызываться всякий раз, когда состояние модуля изменится.</p>
<p>Начальное состояние это состояние объекта при первом открытии страницы. Суть в том, что пользователь мог ранее посещать эту страницу и сохранить ссылку на определённое состояние модуля, к примеру URL может выглядеть так: www.example.com/index.php#page=tenth_page. В этом случае необходимо открыть страницу именно в том состоянии, на которое указывает идентификатор состояния модуля. Чтобы получить это состояние используйте функцию <strong>YAHOO.util.History.getBookmarkedState()</strong>, которая принимает один параметр &#8211; идинтификатор модуля:</p>
<pre class="prettyprint">var bookmarkedState = YAHOO.util.History.getBookmarkedState("module_name");</pre>
<p>В том случае если пользователь ввел ссылку без каких либо идентифкаторов, нужно показать страницу по умолчанию, т.е. передать в функцию <strong>register()</strong> идентификатор начального состояния модуля.</p>
<pre class="prettyprint">var initialState = bookmarkedState || "defaultState";</pre>
<p>Последним аргументом в функцию <strong>register()</strong> должен быть обработчик события <strong>onStateChange</strong>. Этот обработчик будет вызываться каждый раз при изменении состояния модуля (например, при нажатии пользователем кнопок back/forward).</p>
<pre class="prettyprint">function stateChangeHandler(state){
	// Обновляем интерфейс модуля в соответствии с параметром состояния - state
}</pre>
<p>Теперь, получив все параметры, вызываем функцию <strong>YAHOO.util.History.register()</strong>:</p>
<pre class="prettyprint">YAHOO.util.History.register("myModule", initialState, stateChangeHandler);</pre>
<p>Использование метода <strong>onReady</strong></p>
<p>Инициализация Browser History Manager происходит асинхронно, поэтому все его методы доступны только после полной инициализации менеджера. Для этого используется метод <strong>onReady()</strong>. Типичное применение для этого метода &#8211; это получение первоначального значения состояния и обновление интерфейса в соответствии с этим состоянием. Пример:</p>
<pre class="prettyprint">YAHOO.util.History.onReady(function () {
	var сurrentState = YAHOO.util.History.getCurrentState("myModule");
	// Обновление интерфейса модуля до состояния "сurrentState"

});</pre>
<p>Теперь последняя составляющая инициализации History менеджера &#8211; вызов функции <strong>YAHOO.util.History.initialize()</strong>:</p>
<pre class="prettyprint">try {
	YAHOO.util.History.initialize("yui-history-field", "yui-history-iframe");
} catch (error){
	// обработка ошибки инициализации
}</pre>
<p>где, &#8220;yui-history-field&#8221; и &#8220;yui-history-iframe&#8221; &#8211; это id обязательных элементов, созданных нами выше.</p>
<p>Теперь, когда модуль инициализирован, можно использовать его, т.е. изменять его состояния в соответствии с выполенными изменениями. Делается это при помощи функции <strong>YAHOO.util.History.navigate()</strong>, в которую нужно передать 2 параметра &#8211; имя модуля и новое название состояния:</p>
<pre class="prettyprint">YAHOO.util.History.navigate("myModule", "newState");</pre>
<p></p>
<h3>Создание приложения</h3>
<p>Теперь от теории к практике. Напишем простой пример коммуникации с сервером посредством AJAX с использованием History Browser Manager. Наше приложение будет иметь меню с тремя ссылками на три разные страницы, содержимое этих страниц будет асинхронно подгружаться в div контейнер. После нескольких AJAX запросов можно будет возвращаться взад/вперед при помощи кнопок back/forward.</p>
<p>
<h5>Шаг 1</h5>
<p>Создаем основной HTML документ, который будет содержать все необходимые процедуры. Добавляем туда необходимые библиотеки и обязательные тэги &lt;iframe&gt; и &lt;input&gt;. Необходимо также добавить библиотеку connection.js для осуществления запросов AJAX. Далее создаём меню со ссылками и контейнер для отображения информации, полученной от сервера. После первого шага, получаем следующий HTML документ:</p>
<pre class="prettyprint">
&lt;html>
&lt;head>
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
&lt;head>
&lt;title>Демонстрация работы модуля Browser History Manager библиотеки YUI&lt;/title>
&lt;style>
#header {
	text-align: center;
	background: #ccc;
	border-top: 1px solid #aaa;
	border-bottom: 1px solid #aaa;
}

#sidebar {
	width: 240px;
	float: left;
}

#sidebar li {
	list-style-type: none;
}

#container {
	width: 440px;
	height: 400px;
	padding: 8px;
	border: 1px solid #aaa;
	float: left;
	overflow: auto;
}
&lt;/style>

&lt;!-- Зависимости -->
&lt;script src="http://yui.yahooapis.com/2.4.1/build/yahoo/yahoo-min.js">&lt;/script>
&lt;script src="http://yui.yahooapis.com/2.4.1/build/event/event-min.js">&lt;/script>

&lt;!-- Для использования ajax запросов -->
&lt;script src="http://yui.yahooapis.com/2.2.2/build/connection/connection-min.js" type="text/javascript">&lt;/script>

&lt;!-- Browser History Manager -->
&lt;script src="http://yui.yahooapis.com/2.4.1/build/history/history-min.js">&lt;/script>
&lt;/head>
&lt;body>
&lt;!-- следующие 2 строки обязательны для объекта history -->
&lt;iframe id="yui-history-iframe" src="yuihist1.html" style="position:absolute; top:0; left:0;width:1px; height:1px; visibility:hidden;">&lt;/iframe>
&lt;input id="yui-history-field" type="hidden">

&lt;!-- заголовок -->
&lt;h2 id="header">Демонстрация работы модуля Browser History Manager библиотеки YUI&lt;/h2>
&lt;!-- ссылки -->
&lt;ul id="sidebar">
	&lt;li>&lt;a href="yuihist1.html" onclick="navigate(this);return false">Страница 1&lt;/a>&lt;/li>
	&lt;li>&lt;a href="yuihist2.html" onclick="navigate(this);return false">Страница 2&lt;/a>&lt;/li>
	&lt;li>&lt;a href="yuihist3.html" onclick="navigate(this);return false">Страница 3&lt;/a>&lt;/li>
&lt;/ul>

&lt;!-- контейнер для отображения полученных от сервера данных -->
&lt;div id="container">&lt;/div>

&lt;/body>
&lt;/html></pre>
<p></p>
<h5>Шаг 2 &#8211; инициализация.</h5>
<p>Модулем в нашем приложении будет контейнер div. Именно изменения в этом объекте будут отслеживаться при помощи History менеджера. Назовем этот модуль именем &#8220;page&#8221;. Состояниями контейнера в нашем случае будут URL получаемых документов. Первым документом будет страница с именем yuihist1.html. Обработчиком события <strong>onStateChange</strong> будет функция <strong>ajaxCall()</strong>, которая будет выполнять запрос AJAX и, следовательно, изменять состояние нашего модуля. Обратите внимание на функцию <strong>onReady()</strong>, которая отображает первую страницу при инициализации приложения.</p>
<pre class="prettyprint">
// Инициализация history
window.onload = function(){
	try {
		// определяем, какая страница должна быть открыта первой
		var bookmark = YAHOO.util.History.getBookmarkedState("page");
		var initialState = bookmark || "yuihist1.html";

		// каждый раз при изменении состояния объекта history будет вызываться обработчик ajaxCall
		YAHOO.util.History.register("page", initialState, ajaxCall);

		YAHOO.util.History.onReady(function () {
			var firstPage = YAHOO.util.History.getCurrentState("page");
			ajaxCall(firstPage);
		});

		YAHOO.util.History.initialize("yui-history-field", "yui-history-iframe");
	} catch (e){
		// в случае ошибки инициализации, переопределяем функцию navigate,
		// чтобы не использовать функции history
		navigate = ajaxCall;

		// открываем первую страницу
		navigate('yuihist1.html');
	}
}
</pre>
<p><br/></p>
<h5>Шаг 3 &#8211; создание функций, выполняющих AJAX запрос посредством History менеджера.</h5>
<p>Функцей, которая будет выполнять AJAX запрос, является упомянутая выше <strong>ajaxCall()</strong>. Другая функция &#8211; <strong>navigate()</strong> будет выполнять AJAX запрос посредством History менеджера. Ключевой здесь является последняя строка, вызывающая функцию <strong>navigate()</strong>. Устанавливая новое имя состояния модуля, она вызывает событие onStateChanged, которое в свою очередь вызывает обработчик &#8211; функцию <strong>ajaxCall()</strong>, которой передается текущее состояние модуля (в нашем случае URL).</p>
<pre class="prettyprint">// функции осуществляющие ajax запрос
var callback = {
	success : function(o){
		document.getElementById('container').innerHTML = o.responseText;
	},
	failure : function(o){
		alert(o.responseText);
	}
}

function ajaxCall(sURL){
	YAHOO.util.Connect.asyncRequest('GET', sURL, callback, null);
}

// функция, осуществляющая ajax запрос посредством объекта history
function navigate(elem){
	// определяем url
	var url = elem.getAttribute("href");

	// параметр url будет передаваться обработчику (в нашем случае это функция ajaxCall)
	YAHOO.util.History.navigate("page", url);
}</pre>
</p>
<p>Посмотреть демо примера можно <a href="http://www.jstoolbox.com/demo/yuihist/yuihist.html" rel="nofollow">здесь</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jstoolbox.com/2008/01/20/dobavlenie-podderzhki-obekta-history-v-ajax-prilozheniya/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
