LS Google Wave

Google Wave — компьютерная платформа, призванная соединить в себе электронную почту, мгновенную передачу сообщений, Вики и социальную организацию сети с сильным совместным центром. Запуск программы намечен на конец 2009 года.
Однако, частично предоставлен доступ к функционалу данной платформы.

В данной статье описывается механизм добавления Google волн в создаваемые пользователями Вашего блога топики.
Добавление волн в комментарии запрещены.



Шаг 1:
Добавляем в файл /templates/skin/new/js/panel.js после функцию putWaveID.
Находим в файле код:

        putTagUrl: function(obj,sPromt) {
                obj=$(obj);
                if (url=prompt(sPromt,'http://')) {
                        var sel=obj.getSelectedText();
                this.putText(obj,'<a href="'+url+'">'+sel+'</a>');
        }
        },

и после добавляем

        putWaveID: function(obj,sPromt) {
                obj=$(obj);
                if (waveid=prompt(sPromt,'')) {
                        var sel=obj.getSelectedText();
                this.putText(obj,'<wave>'+waveid+'</wave>');
        }
        },


Шаг 2:
в файле /classes/modules/sys_text/Text.class.php

Модифицируем строку

$this->oJevix->cfgAllowTags(array('cut','a', 'img', 'i', 'b', 'u', 's','video',

на

$this->oJevix->cfgAllowTags(array('cut','a', 'img', 'i', 'b', 'u', 's', 'wave','video',

разрешая тег <wave>.

Отключаем типографирование для этого тега. Для этого после строки

$this->oJevix->cfgSetTagNoTypography('video');

добавляем строку

$this->oJevix->cfgSetTagNoTypography('wave');


Создаем функцию WaveParser обработки тега. Для этого после функции

        public function VideoParser($sText) {
                /**
                 * youtube.com
                 */
...

                return $sText;
        }


добавляем

        public function WaveParser($sText) {
                /**
                 * format WaveID domainname.com!w+abcd_ABC123%A
                 */
                $sText = preg_replace('/<wave>([a-zA-Z0-9\.!+\%_\-]+)<\/wave>/Ui', '<div id="waveframe" style="width: 100%; height: 100%"><img src="/templates/skin/new/images/
google-wave.jpg" alt="WaveID: \'$1\'"></div>', $sText);
                return $sText;
        }

Далее. Заменяем функцию

        public function Parser($sText) {
                $sResult=$this->FlashParamParser($sText);
                $sResult=$this->JevixParser($sResult);
                $sResult=$this->VideoParser($sResult);
        //      $sResult=$this->GeshiParser($sResult);
                $sResult=$this->CodeSourceParser($sResult);
                if (BLOG_URL_NO_INDEX) {
                        $sResult=$this->MakeUrlNoIndex($sResult);
                }
                return $sResult;
        }


на


        public function Parser($sText) {
                $sResult=$this->FlashParamParser($sText);
                $sResult=$this->JevixParser($sResult);
                $sResult=$this->VideoParser($sResult);
                $sResult=$this->WaveParser($sResult);
        //      $sResult=$this->GeshiParser($sResult);
                $sResult=$this->CodeSourceParser($sResult);
                if (BLOG_URL_NO_INDEX) {
                        $sResult=$this->MakeUrlNoIndex($sResult);
                }
                return $sResult;
        }


Шаг 3:
в файле /classes/actions/ActionBlog.class.php

в каждой из функций EventShowTopicPersonal(),EventShowTopic() после строки

$this->Viewer_SetHtmlDescription(func_text_words($sTextSeo,20));

добавляем

                if (preg_match('/<wave>([a-zA-Z0-9\.!+\%_\-]+)<\/wave>/Ui', $oTopic->getTextSource(), $sWave)) {
                        $this->Viewer_Assign('sWave',$sWave[1]);
                        }


Внедрение в движок закончено.

Шаг 4:
В файле /templates/skin/new/actions/ActionTopic/add.tpl
после строки

                                                        <a href="#" onclick="showImgUploadForm(); return false;" class="button"><img src="{$DIR_STATIC_SKIN}/images/panel/img.g
if" width="20" height="20" title="{$aLang.panel_image}"></a>

добавляем

                                                        <a href="#" onclick="lsPanel.putWaveID('topic_text','WAVE ID'); return false;" class="button"><img src="{$DIR_STATIC_SK
IN}/images/panel/wave-embed.gif" width="20" height="20" title="Google Wave"></a>


И в файле /templates/skin/new/header.tpl
перед закрывающимся тегом </head>
добавляем

        {if $sWave}
{literal}
            <script type="text/javascript" src="http://www.google.com/jsapi"></script>
            <script type="text/javascript" src="http://www.google.com/webelements/js/wave.js"></script>
            <script type="text/javascript">
function initialize() {
    google.load("wave", "1");
    var waveframe = document.getElementById("waveframe");
    var embedOptions = {
        target: waveframe,
        header: true,
        toolbar: true,
        footer: true
    };
    var wavePanel = new google.wave.WavePanel(embedOptions);
    wavePanel.loadWave("{/literal}{$sWave}{literal}"); 
}
            </script>
{/literal}
        {/if}

UPD: Со сменой API обновил блок с java кодом.

меняем строку

<body onload="prettyPrint();">

на

<body onload="prettyPrint(){if $sWave} ;initialize();{/if}">


Шаг 5 последний:

сохраняем картинки бара и кнопку добавления волны в каталог с шаблоном.

Это первая модификация, да и опыт, выходящий за рамки работы с шаблонами движка LiveStreet.

Комментария, критика, ваши мысли и идеи принимаются.

Пример можно посмотреть тут

UPD1: Для тех, у кого нет пока аккаунта — ниже приведен скриншот с вложенной в топик волной

15 комментариев

avatar
весьма интересно!)
  • F-5
  • 0
avatar
посмотрел презентацию GoogleWave — вероятно Одноклассникам придет копец:)))
avatar
По мне так, это отличная альтернатива текущей почте, интернет пейджерам (да и интеграция с jabber и сервером OpenFire), блогам и wiki.
avatar
А ЛС? :)
avatar
При том, что wave доступен только для разработчиков.
avatar
Пока да. Но как бы не совсем. Инвайты они раздают. Мне спустя неделю прислали.

Кроме этого идет разработка альтернативного pygowave сервера.
avatar
Инвайтов ещё ждать хз сколько.
pygowave так и не заводится со вчерашнего вечера.
avatar
Позавчера работал вполне нормально. Да и на официальной инсталляции pygowave сервера сейчас проблемы с кириллицей. На том, что ставил я, таких проблем не было. Но его погасил и отложил, хоть питон мне более симпатичен, нежели ява. Из текущих задач, запустить таки базовый прототип сервера. Как только решу проблему с libnet.so из diablo jdk под FreeBSD )
avatar
Ну я вчера вечером не мог пробиться вообще.
А ранее не могу даже волну создать, выдавало ошибки =\
avatar
Сейчас попробовал. Работает.
Волны с кириллическими названиями PyGoWave на pygowave.p2k-network.org создавать пока не может.
Так же могут быть проблемы из браузеров, отличных от Chrome, FireFox 3+ Safari3+
avatar
Сколько не читал о Google Wave — так толком и не понял почему это будет «революция».
Быть может, люди правы, революция и все такое — но я пока скептически к этому отношусь.

ps спасибо за первые интеграции автору топика!
  • Mmka
  • 0
avatar
так лучше один раз увидеть, чем 100 раз прочитать. а там сами решайте — революция или переворот:)
avatar
Интересный вопрос состоит в том, как все это совмещать с обычными комментариями ЛС? Ведь смысла-то особого нет на одной странице предлагать две разных формы общения. Может быть как-то можно их приятно совместить через API?

К сожалению аккаунта нет пока и я не могу оценить что дает использование текущего варианта интеграции.
  • Carw
  • 0
avatar
Понимаю Ваш интерес. Сам не раз задавался этим вопросом.
В данной статье я привел механизм встраивания (Embed). Сам по себе он может оказаться полезным, для того, чтобы в место ссылки на источник, сразу встроить в топик уже готовую волну, оформленную например ввиде wiki.

Но кроме встраивания разработчик предлагает еще два дополнения, одним из которых являются роботы.

Роботы представляют собой автоматизированных участников волны Google Wave, исходный код которых находится на стороне сервера. Они могут выполнять задачи за пользователей, в том числе синхронизировать данные с другими службами. На данный момент роботы размещены на Google App Engine и для работы с ними мы предоставляем клиентские библиотеки на языках Java и Python. Также мы заняты разработкой более низкоуровневых API-методов, которые бы позволили создавать роботов на любом веб-сервере. Для иллюстрации возможностей мы сделали робота с ласковым именем Tweety, с его помощью вы сможете без проблем обращаться к Twitter из волны Google Wave.
Взято от сюда

А это означает, что ничего не мешает произвести аналогичного рода интеграцию и с LS.
avatar
Да, видимо постепенно к практике использования этой замечательной штуки будем идти. Пока еще не совсем понятно на сколько это станет популярным и удобным в использовании для множества людей.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.