Browse Source

- Add the Contact widget

pull/16/head
Jaussoin Timothée 11 years ago
parent
commit
e5d5da1139
  1. 2
      app/views/contact.tpl
  2. 151
      app/widgets/About/about.tpl
  3. 114
      app/widgets/ConfigData/configdata.tpl
  4. 51
      app/widgets/Contact/Contact.php
  5. 181
      app/widgets/Contact/_contact.tpl
  6. 6
      app/widgets/Contact/_contact_empty.tpl
  7. 0
      app/widgets/Contact/contact.js
  8. 3
      app/widgets/Contact/contact.tpl
  9. 30
      app/widgets/Contact/locales.ini
  10. 8
      app/widgets/Login/login.tpl
  11. 6
      app/widgets/Navigation/navigation.tpl
  12. 1
      app/widgets/Post/Post.php
  13. 4
      app/widgets/Post/_post.tpl
  14. 3
      app/widgets/Presence/_presence_list.tpl
  15. 4
      app/widgets/Roster/roster.css
  16. 92
      app/widgets/Roster/roster.js
  17. 14
      app/widgets/Roster/roster.tpl
  18. 6
      linker.php
  19. 4
      themes/material/css/color.css
  20. 38
      themes/material/css/style.css

2
app/views/contact.tpl

@ -13,7 +13,7 @@
<section>
<?php $this->widget('Roster');?>
<div>
<?php $this->widget('Post');?>
<?php $this->widget('Contact');?>
</div>
</section>
</main>

151
app/widgets/About/about.tpl

@ -1,101 +1,56 @@
<div class="tabelem paddedtop" title="{$c->__('page.about')}" id="about">
<h1><i class="fa fa-info-circle"></i> {$c->__('page.about')} </h1>
<div class="tabelem" title="{$c->__('page.about')}" id="about">
<h2 class="padded">{$c->__('page.about')} </h2>
<p>{$c->__('info')}
<a href="http://www.gnu.org/licenses/agpl-3.0.html">GNU Affero General Public License v3</a>.
</p>
<h2><i class="fa fa-users"></i> {$c->__('title.thanks')}</h2>
<dl>
<dt>{$c->__('title.developers')}</dt><dd><a href="http://edhelas.mov.im/">Jaussoin Timothée aka edhelas</a></dd>
<dt></dt><dd><a href="https://launchpad.net/~nodpounod">Ho Christine aka nodpounod</a></dd>
<dt></dt><dd><a href="https://etenil.net/">Pasquet Guillaume aka Etenil</a></dd>
<dt>{$c->__('title.translators')}</dt><dd>Arabic - <a href="https://launchpad.net/~gharbeia">Ahmad Gharbeia أحمد غربية</a></dd>
<dt></dt><dd>Brazilian - <a href="https://launchpad.net/~dnieper650">millemiglia</a></dd>
<dt></dt><dd>Chinese - <a href="https://launchpad.net/~dudumomo">dudumomo</a></dd>
<dt></dt><dd>Danish - <a href="https://launchpad.net/~ole-carlsen-web">Ole Carlsen</a></dd>
<dt></dt><dd>Dutch - <a href="https://launchpad.net/~laurens-debackere">Laurens Debackere</a></dd>
<dt></dt><dd>English UK - <a href="https://launchpad.net/~kevinbeynon">Kevin Beynon</a>, <a href="https://launchpad.net/~influence-pc">Vincent</a></dd>
<dt></dt><dd>Esperanto - <a href="https://launchpad.net/~eliovir">Eliovir</a></dd>
<dt></dt><dd>Finish - <a href="https://launchpad.net/~e1484180">Timo</a></dd>
<dt></dt><dd>French -
<a href="https://launchpad.net/~hyogapag">Hyogapag</a>,
<a href="https://launchpad.net/~e1484180">Hélion du Mas des Bourboux</a>,
<a href="https://launchpad.net/~jonathanmm">JonathanMM</a>,
<a href="https://launchpad.net/~grossard-o">Ludovic Grossard</a>,
<a href="https://launchpad.net/~schoewilliam">Schoewilliam</a>,
<a href="https://launchpad.net/~influence-pc">Vincent</a>,
<a href="https://launchpad.net/~edhelas">edhelas</a>,
<a href="https://launchpad.net/~nodpounod">pou</a>
</dd>
<dt></dt><dd>German -
<a href="https://launchpad.net/~q-d">Daniel Winzen</a>,
<a href="https://launchpad.net/~jonas-ehrhard">Jonas Ehrhard</a>,
<a href="https://launchpad.net/~jonatan-zeidler-gmx">Jonatan Zeidler</a>,
<a href="https://launchpad.net/~kili4n">Kilian Holzinger</a>,
</dd>
<dt></dt><dd>Greek -
<a href="https://launchpad.net/~d-rotarou">Rotaru Dorin</a>,
<a href="https://launchpad.net/~yang-hellug">aitolos</a>
</dd>
<dt></dt><dd>Hebrew - <a href="https://launchpad.net/~genghiskhan">GenghisKhan</a></dd>
<dt></dt><dd>Hungarian - <a href="https://launchpad.net/~batisteo">Baptiste Darthenay</a></dd>
<dt></dt><dd>Italian -
<a href="https://launchpad.net/~andrea-caratti-phys">Andrea Caratti</a>,
<a href="https://launchpad.net/~giacomo-alzetta">Giacomo Alzetta</a>,
<a href="https://launchpad.net/~emailadhoc">kimj</a>
</dd>
<dt></dt><dd>Japanese - <a href="https://launchpad.net/~fdelbrayelle">Franky</a></dd>
<dt></dt><dd>Occitan (post 1500) -
<a href="https://launchpad.net/~cvalmary">Cédric VALMARY (Tot en òc)</a>,
<a href="https://launchpad.net/~caillonm">Maime</a>
</dd>
<dt></dt><dd>Portuguese -
<a href="https://launchpad.net/~jonathanmm">JonathanMM</a>,
<a href="https://launchpad.net/~dnieper650">millemiglia</a>
</dd>
<dt></dt><dd>Russian -
<a href="https://launchpad.net/~ak099">Aleksey Kabanov</a>,
<a href="https://launchpad.net/~vsharmanov">Vyacheslav Sharmanov</a>,
<a href="https://launchpad.net/~hailaga">hailaga</a>,
<a href="https://launchpad.net/~salnsg">Сергей Сальников</a>,
<a href="https://launchpad.net/~mr-filinkov">DeforaD</a>
</dd>
<dt></dt><dd>Spanish -
<a href="https://launchpad.net/~alejandrosg">Alejandro Serrano González</a>,
<a href="https://launchpad.net/~edu5800">Eduardo Alberto Calvo</a>,
<a href="https://launchpad.net/~estebanmainieri">Esteban Mainieri</a>,
<a href="https://launchpad.net/~victormezio">Oizem Mushroom</a>,
<a href="https://launchpad.net/~kaiser-715-deactivatedaccount">Ricardo Sánchez Baamonde</a>,
<a href="https://launchpad.net/~invrom">Ubuntu</a>,
<a href="https://launchpad.net/~orochiforja">orochiforja</a>
</dd>
<dt></dt><dd>Turkish -
<a href="https://launchpad.net/~basaran-caner">Caner Başaran</a>,
<a href="https://launchpad.net/~emreakca">emre akça</a>
</dd>
</dl>
<h2><i class="fa fa-rocket"></i> {$c->__('title.software')}</h2>
<dl>
<dt>Database Library</dt><dd>Modl - Movim DB Layer - <i class="fa fa-github"></i> <a href="https://github.com/edhelas/modl">GitHub Modl</a> under AGPLv3</dd>
<dt>XMPP Library</dt><dd>Moxl - Movim XMPP Library - <i class="fa fa-github"></i> <a href="https://github.com/edhelas/moxl">GitHub Moxl</a> under AGPLv3</dd>
</dl>
<br />
<dl>
<dt>Map Library</dt><dd>Leaflet <a href="http://leafletjs.com/">leafletjs.com</a> under BSD</dd>
<dt>Markdown</dt><dd>Michel Fortin <a href="http://michelf.ca/projects/php-markdown/">michelf.ca</a> ©Michel Fortin</dd>
</dl>
<h2><i class="fa fa-html5"></i> {$c->__('title.resources')}</h2>
<dl>
<dt>Icons</dt><dd>Icomoon <a href="http://keyamoon.com/">by Keyamoon</a> under CC BY 3.0</dd>
<dt></dt><dd>FontAwesome <a href="http://fortawesome.github.io/">by Dave Gandy</a> under CC BY 3.0</dd>
<dt></dt><dd>Boyan Kostov <a href="http://boyankostov.com/">boyankostov.com</a> <a href="https://www.iconfinder.com/iconsets/flatified">Free for commercial use</a></dd>
</dl>
<ul class="thick divided">
<li class="condensed">
<span class="icon bubble color green"><i class="md md-info"></i></span>
<p>{$c->__('info')} <a href="http://www.gnu.org/licenses/agpl-3.0.html">GNU Affero General Public License v3</a>.</p>
</li>
<li class="subheader">{$c->__('title.thanks')}</li>
<li class="condensed">
<span class="icon bubble color red"><i class="md md-developer-mode"></i></span>
<span>{$c->__('title.developers')}</span>
<p>
<a href="http://edhelas.movim.eu/">Jaussoin Timothée aka edhelas</a></br>
<a href="https://launchpad.net/~nodpounod">Ho Christine aka nodpounod</a></br>
<a href="https://etenil.net/">Pasquet Guillaume aka Etenil</a>
</p>
</li>
<li class="condensed">
<span class="icon bubble color purple"><i class="md md-flag"></i></span>
<span>{$c->__('title.translators')}</span>
<p>
Thanks to all the translators https://translations.launchpad.net/movim
</p>
</li>
<li class="subheader">{$c->__('title.software')}</li>
<li class="condensed">
<span class="icon bubble color orange"><i class="md md-archive"></i></span>
<p>
Modl - Movim DB Layer - <a href="https://github.com/edhelas/modl">GitHub Modl</a> under AGPLv3</br>
Moxl - Movim XMPP Library - <a href="https://github.com/edhelas/moxl">GitHub Moxl</a> under AGPLv3</br>
<h2><i class="fa fa-code"></i> {$c->__('title.api')}</h2>
<dl>
<dt>OpenStreetMap</dt><dd>Nominatim <a href="http://nominatim.openstreetmap.org/">nominatim.openstreetmap.org</a></dd>
<dt>Last.fm API</dt><dd><a href="http://www.last.fm/api">www.last.fm/api</a></dd>
<dt>Youtube API</dt><dd><a href="http://developers.google.com/youtube">developers.google.com/youtube</a></dd>
</dl>
Map Library - Leaflet <a href="http://leafletjs.com/">leafletjs.com</a> under BSD</br>
Markdown - Michel Fortin <a href="http://michelf.ca/projects/php-markdown/">michelf.ca</a> ©Michel Fortin
</dl>
</p>
</li>
<li class="condensed">
<span class="icon bubble color brown"><i class="md md-insert-emoticon"></i></span>
<span>{$c->__('title.resources')}</span>
<p>
FontAwesome <a href="http://fortawesome.github.io/">by Dave Gandy</a> under CC BY 3.0</br>
Boyan Kostov <a href="http://boyankostov.com/">boyankostov.com</a> <a href="https://www.iconfinder.com/iconsets/flatified">Free for commercial use</a>
</p>
</li>
<li class="condensed">
<span class="icon bubble color indigo"><i class="md md-import-export"></i></span>
<span>{$c->__('title.api')}</span>
<p>
OpenStreetMap - Nominatim <a href="http://nominatim.openstreetmap.org/">nominatim.openstreetmap.org</a></br>
Last.fm API - <a href="http://www.last.fm/api">www.last.fm/api</a></br>
Youtube API - <a href="http://developers.google.com/youtube">developers.google.com/youtube</a></br>
</p>
</li>
</ul>
</div>

114
app/widgets/ConfigData/configdata.tpl

@ -1,61 +1,65 @@
<div class="tabelem" title="{$c->__('title')}" id="configdata" >
<form enctype="multipart/form-data" method="post" action="index.php" name="general">
<h3>{$c->__('title.contacts')} - {$stats.rosterlink}</h3>
<div class="element thin">
<a
type="button"
class="button color red"
onclick="{$clearrosterlink}">
<i class="fa fa-trash-o"></i> {$c->__('button.clear')}
</a>
</div>
<ul class="thick">
<li>
<div class="control">
<a
class="button flat red"
onclick="{$clearrosterlink}">
{$c->__('button.clear')}
</a>
</div>
<span class="icon bubble color orange"><i class="md md-contacts"></i></span>
<span>{$c->__('title.contacts')} - {$stats.rosterlink}</span>
</li>
</ul>
<legend><i class="fa fa-pencil"></i> {$c->__('title.posts')} - {$stats.post}</legend>
<div class="clear"></div>
<ul class="stats">
{loop="$pstats"}
<li style="height: {$c->formatHeight($value.count)}%;">
<span class="date">
{$c->formatDate($value.month, $value.year)}
</span>
<span class="num">
{$value.count}
</span>
</li>
{/loop}
</ul>
<div class="element thin">
<a
type="button"
name="email"
class="button color red"
onclick="{$clearpost}">
<i class="fa fa-trash-o"></i> {$c->__('button.clear')}
</a>
</div>
<legend><i class="fa fa-pencil"></i> {$c->__('title.posts')} - {$stats.post}</legend>
<div class="clear"></div>
<ul class="stats">
{loop="$pstats"}
<li style="height: {$c->formatHeight($value.count)}%;">
<span class="date">
{$c->formatDate($value.month, $value.year)}
</span>
<span class="num">
{$value.count}
</span>
</li>
{/loop}
</ul>
<div class="element thin">
<a
type="button"
name="email"
class="button color red"
onclick="{$clearpost}">
<i class="fa fa-trash-o"></i> {$c->__('button.clear')}
</a>
</div>
<legend><i class="fa fa-comment"></i> {$c->__('title.messages')} - {$stats.message}</legend>
<div class="clear"></div>
<ul class="stats">
{loop="$mstats"}
<li style="height: {$c->formatHeight($value.count)}%">
<span class="date">
{$c->formatDate($value.month, $value.year)}
</span>
<span class="num">
{$value.count}
</span>
</li>
{/loop}
</ul>
<div class="element thin">
<a
type="button"
name="email"
class="button color red"
onclick="{$clearmessage}">
<i class="fa fa-trash-o"></i> {$c->__('button.clear')}
</a>
</div>
<legend><i class="fa fa-comment"></i> {$c->__('title.messages')} - {$stats.message}</legend>
<div class="clear"></div>
<ul class="stats">
{loop="$mstats"}
<li style="height: {$c->formatHeight($value.count)}%">
<span class="date">
{$c->formatDate($value.month, $value.year)}
</span>
<span class="num">
{$value.count}
</span>
</li>
{/loop}
</ul>
<div class="element thin">
<a
type="button"
name="email"
class="button color red"
onclick="{$clearmessage}">
<i class="fa fa-trash-o"></i> {$c->__('button.clear')}
</a>
</div>
</form>
</div>

51
app/widgets/Contact/Contact.php

@ -0,0 +1,51 @@
<?php
class Contact extends WidgetCommon
{
function load()
{
}
function ajaxGetContact($jid)
{
$html = $this->prepareContact($jid);
RPC::call('movim_fill', 'contact_widget', $html);
}
function prepareEmpty($jid)
{
$view = $this->tpl();
$view->assign('jid', $jid);
return $view->draw('_contact_empty', true);
}
function prepareContact($jid)
{
$cd = new \Modl\ContactDAO;
$c = $cd->get($jid);
$cd = new \Modl\ContactDAO;
$cr = $cd->getRosterItem($jid);
$view = $this->tpl();
if(isset($c)) {
$view->assign('gender' , getGender());
$view->assign('marital', getMarital());
$view->assign('mood', getMood());
$view->assign('contact', $c);
$view->assign('contactr', $cr);
return $view->draw('_contact', true);
} elseif(isset($cr)) {
$view->assign('contact', null);
$view->assign('contactr', $cr);
return $view->draw('_contact', true);
} else {
return $this->prepareEmpty($jid);
}
}
function display()
{
}
}

181
app/widgets/Contact/_contact.tpl

@ -0,0 +1,181 @@
{if="$contact != null"}
<ul class="thick">
<li>
<span class="icon bubble"><img src="{$contact->getPhoto('l')}"></span>
<h2>{$contact->getTrueName()}</h2>
</li>
</ul>
<ul>
{if="$contact->delay != null"}
<li class="condensed block">
<span class="icon bubble color brown"><i class="md md-restore"></i></span>
<span>{$c->__('last.title')}</span>
<p>{$contact->delay}</p>
</li>
{/if}
{if="$contact->fn != null"}
<li class="condensed block">
<span class="icon bubble color green">{$contact->fn|firstLetterCapitalize}</span>
<span>{$c->__('general.name')}</span>
<p>{$contact->fn}</p>
</li>
{/if}
{if="$contact->nickname != null"}
<li class="condensed block">
<span class="icon bubble color indigo">{$contact->nickname|firstLetterCapitalize}</span>
<span>{$c->__('general.nickname')}</span>
<p>{$contact->nickname}</p>
</li>
{/if}
{if="strtotime($contact->date) != 0"}
<li class="condensed block">
<span class="icon bubble color red"><i class="md md-cake"></i></span>
<span>{$c->__('general.date_of_birth')}</span>
<p>{$contact->date|strtotime|prepareDate:false}</p>
</li>
{/if}
{if="$contact->url != null"}
<li class="condensed block">
<span class="icon bubble color blue"><i class="md md-link"></i></span>
<span>{$c->__('general.website')}</span>
<p class="wrap"><a href="{$contact->url}" target="_blank">{$contact->url}</a></p>
</li>
{/if}
{if="$contact->email != null"}
<li class="condensed block">
<span class="icon bubble color orange"><i class="md md-mail"></i></span>
<span>{$c->__('general.email')}</span>
<p><img src="{$contact->getPhoto('email')}"/></p>
</li>
{/if}
{if="$contact->marital != null && $contact->marital != 'none'"}
<li class="condensed block">
<span class="icon bubble color green"><i class="md md-people"></i></span>
<span>{$c->__('general.marital')}</span>
<p>{$marital[$contact->marital]}</p>
</li>
{/if}
{if="$contact->gender != null && $contact->gender != 'N'"}
<li class="condensed block">
<span class="icon bubble color red"><i class="md md-face-unlock"></i></span>
<span>{$c->__('general.gender')}</span>
<p>{$gender[$contact->gender]}</p>
</li>
{/if}
{if="$contactr->delay != null"}
<li class="condensed block">
<span class="icon bubble color gray"><i class="md md-av-timer"></i></span>
<span>{$c->__('last.title')}</span>
<p>{$contactr->delay|strtotime|prepareDate}</p>
</li>
{/if}
{if="$contact->description != null"}
<li class="condensed block">
<span class="icon bubble color indigo"><i class="md md-format-align-justify"></i></span>
<span>{$c->__('general.about')}</span>
<p>{$contact->description}</p>
</li>
{/if}
{if="$contact->mood != null"}
{$moods = unserialize($contact->mood)}
<li class="condensed block">
<span class="icon bubble color purple"><i class="md md-mood"></i></span>
<span>{$c->__('mood.title')}</span>
<p>{loop="$moods"}
{$mood[$value]}
{/loop}
</p>
</li>
{/if}
</ul>
<div class="clear"></div>
{if="$contact->adrlocality != null || $contact->adrcountry != null"}
<ul>
<li class="subheader">{$c->__('position.legend')}</li>
{if="$contact->adrlocality != null"}
<li class="condensed block">
<span class="icon bubble color yellow"><i class="md md-location-city"></i></span>
<span>{$c->__('position.locality')}</span>
<p>
{$contact->adrlocality}
</p>
</li>
{/if}
{if="$contact->adrcountry != null"}
<li class="condensed block">
<span class="icon bubble color orange"><i class="md md-place"></i></span>
<span>{$c->__('position.country')}</span>
<p>
{$contact->adrcountry}
</p>
</li>
{/if}
</ul>
{/if}
<div class="clear"></div>
{if="$contact->twitter != null || $contact->skype != null || $contact->yahoo != null"}
<ul class="thick">
<li class="subheader">{$c->__('general.accounts')}</li>
{if="$contact->twitter != null"}
<li class="condensed block">
<span class="icon bubble color blue"></span>
<span>Twitter</span>
<p>
<a
target="_blank"
href="https://twitter.com/{$contact->twitter}">
@{$contact->twitter}
</a>
</p>
</li>
{/if}
{if="$contact->skype != null"}
<li class="condensed block">
<span class="icon bubble color green"></span>
<span>Skype</span>
<p>
<a
target="_blank"
href="callto://{$contact->skype}">
{$contact->skype}
</a>
</p>
</li>
{/if}
{if="$contact->yahoo != null"}
<li class="condensed block">
<span class="icon bubble color green"></span>
<span>Yahoo!</span>
<p>
<a
target="_blank"
href="ymsgr:sendIM?{$contact->yahoo}">
{$contact->yahoo}
</a>
</p>
</li>
{/if}
</ul>
{/if}
{else}
<ul class="thick">
<li>
<span class="icon bubble"><img src="{$contactr->getPhoto('l')}"></span>
<h2>{$contactr->getTrueName()}</h2>
</li>
</ul>
{/if}

6
app/widgets/Contact/_contact_empty.tpl

@ -0,0 +1,6 @@
<ul class="thick">
<li>
<span class="icon bubble color {$jid|stringToColor}">{$jid|firstLetterCapitalize}</span>
<h2>{$jid}</h2>
</li>
</ul>

0
app/widgets/Contact/contact.js

3
app/widgets/Contact/contact.tpl

@ -0,0 +1,3 @@
<div id="contact_widget">
{$c->prepareEmpty()}
</div>

30
app/widgets/Contact/locales.ini

@ -0,0 +1,30 @@
[general]
general.legend = 'General Informations'
general.name = 'Name'
general.nickname = 'Nickname'
general.date_of_birth = 'Date of Birth'
general.gender = 'Gender'
general.marital = 'Marital Status'
general.email = 'Email'
general.website = 'Website'
general.about = 'About Me'
general.accounts = 'Other Accounts'
[position]
position.legend = 'Geographic Position'
position.locality = 'Locality'
position.country = 'Country'
[mood]
mood.title = 'Mood'
mood.im = "I'm "
[listen]
listen.title = 'Listening'
listen.on = 'on'
[last]
last.title = 'Last seen'
[client]
client.title = 'Client Informations'

8
app/widgets/Login/login.tpl

@ -79,10 +79,10 @@
</div>
</div>
<ul class="thin simple admin">
<ul class="thin simple admin">
<li>{$c->__('connected')} {$connected}{$c->__('population')} {$pop}
<a href="{$c->route('admin')}">
{$c->__('page.administration')}
</a>
<a href="{$c->route('admin')}">
{$c->__('page.administration')}
</a>
</li>
</ul>

6
app/widgets/Navigation/navigation.tpl

@ -27,8 +27,7 @@
<span class="icon">
<i class="md md-help"></i>
</span>
<span>{$c->__('page.help')}</span>
<span>{$c->__('page.help')}</span>
</li>
</a>
<a class="classic" href="{$c->route('conf')}">
@ -36,8 +35,7 @@
<span class="icon">
<i class="md md-settings"></i>
</span>
<span>{$c->__('page.configuration')}</span>
</a>
<span>{$c->__('page.configuration')}</span>
</li>
</a>
</ul>

1
app/widgets/Post/Post.php

@ -22,7 +22,6 @@ class Post extends WidgetCommon
{
function load()
{
//$this->addcss('post.css');
}
function ajaxGetPost($id)

4
app/widgets/Post/_post.tpl

@ -1,4 +1,3 @@
{if="isset($attachements.pictures)"}
<header
class="big"
@ -7,7 +6,6 @@
</header>
{/if}
<article>
<header>
<ul class="thick">
@ -30,7 +28,7 @@
{if="isset($attachements.links)"}
{loop="$attachements.links"}
<li>
<span class="icon"><img src="http://icons.duckduckgo.com/ip2/{$value.url.host}.ico"/></span>
<span class="icon small"><img src="http://icons.duckduckgo.com/ip2/{$value.url.host}.ico"/></span>
<a href="{$value.href}" class="alternate" target="_blank">
<span>{$value.href}</span>
</a>

3
app/widgets/Presence/_presence_list.tpl

@ -2,7 +2,7 @@
<ul class="active">
<li class="subheader">Status **Fixme**</li>
<li>
<span class="icon"><i class="md md-thumbs-up-down"></i></span>
<span class="icon"><i class="md md-mode-edit"></i></span>
<form>
<div>
<textarea
@ -11,6 +11,7 @@
placeholder="{$c->__('status.here')}"
onload="movim_textarea_autoheight(this);"
onkeyup="movim_textarea_autoheight(this);">{if="isset($p)"}{$p->status}{/if}</textarea>
<label>{$c->__('status.here')}</label>
</div>
</form>
</li>

4
app/widgets/Roster/roster.css

@ -94,11 +94,11 @@
height: 100%;
}
#roster ul#rosterlist > div > li >ul.contact > li:first-child:not(.offline):not(.server_error) {
#roster ul#rosterlist > div > li > ul.contact > li:first-child:not(.offline):not(.server_error) {
display: list-item;
}
#roster ul#rosterlist.offlineshown > div.groupshown > li {
#roster ul#rosterlist.offlineshown > div.groupshown > li > ul.contact > li {
display: list-item;
}
/*

92
app/widgets/Roster/roster.js

@ -277,6 +277,8 @@ function initContacts(tab){
angular.element(roster).scope().contacts = null;
else
angular.element(roster).scope().initContacts(JSON.parse(tab));
Roster.refresh();
}
function initGroups(tab){
@ -335,41 +337,73 @@ MovimWebsocket.attach(function(){
Roster_ajaxGetRoster();
});
movim_add_onload(function(){
var search = document.querySelector('#rostersearch');
var roster = document.querySelector('#roster');
var rosterlist = document.querySelector('#rosterlist');
var roster_classback = document.querySelector('#roster').className;
var rosterlist_classback = document.querySelector('#rosterlist').className;
var Roster = {
init : function() {
var search = document.querySelector('#rostersearch');
var roster = document.querySelector('#roster');
var rosterlist = document.querySelector('#rosterlist');
var roster_classback = document.querySelector('#roster').className;
var rosterlist_classback = document.querySelector('#rosterlist').className;
roster.onblur = function() {
roster.className = roster_classback;
rosterlist.className = rosterlist_classback;
};
search.onkeyup = function(event) {
if(search.value.length > 0) {
roster.className = 'search';
rosterlist.className = 'offlineshown';
} else {
roster.onblur = function() {
roster.className = roster_classback;
rosterlist.className = rosterlist_classback;
}
};
search.onkeyup = function(event) {
if(search.value.length > 0) {
roster.className = 'search';
rosterlist.className = 'offlineshown';
} else {
roster.className = roster_classback;
rosterlist.className = rosterlist_classback;
}
// We clear the old search
var selector_clear = '#rosterlist div > li:not(.subheader)';
var li = document.querySelectorAll(selector_clear);
// We clear the old search
var selector_clear = '#rosterlist div > li:not(.subheader)';
var li = document.querySelectorAll(selector_clear);
for(i = 0; i < li.length; i++) {
li.item(i).className = '';
}
for(i = 0; i < li.length; i++) {
li.item(i).className = '';
}
// We select the interesting li
var selector = '#rosterlist div > li[title*="' + search.value.toLowerCase() + '"]:not(.subheader)';
var li = document.querySelectorAll(selector);
// We select the interesting li
var selector = '#rosterlist div > li[title*="' + search.value.toLowerCase() + '"]:not(.subheader)';
var li = document.querySelectorAll(selector);
for(i = 0; i < li.length; i++) {
li.item(i).className = 'found';
for(i = 0; i < li.length; i++) {
li.item(i).className = 'found';
}
};
},
refresh: function() {
var items = document.querySelectorAll('#rosterlist div > li:not(.subheader)');
var i = 0;
while(i < items.length -1)
{
items[i].onclick = function(e) {
MovimTpl.showPanel();
Contact_ajaxGetContact(this.id);
Roster.reset(items);
movim_add_class(this, 'active');
}
i++;
}
};
},
reset: function(list) {
for(i = 0; i < list.length; i++) {
movim_remove_class(list[i], 'active');
}
}
}
MovimWebsocket.attach(function() {
Roster.refresh();
});
movim_add_onload(function(){
Roster.init();
});

14
app/widgets/Roster/roster.tpl

@ -38,15 +38,11 @@
ng-click="rosterCtrl.postJingleAction(contact)">
</div>
<a href="{{contact.rosterview.friendpage}}">
{{contact.rosterview.name}}
</a>
<p class="wrap">
<span ng-if="contact.status != ''">{{contact.status}} -</span>
{{contact.ressource}}
</p>
</a>
{{contact.rosterview.name}}
<p class="wrap">
<span ng-if="contact.status != ''">{{contact.status}} -</span>
{{contact.ressource}}
</p>
</li>
</ul>
</li>

6
linker.php

@ -45,7 +45,7 @@ $connector($config->websocketurl, array('xmpp'))->then(function($conn) use (&$st
$conn->on('message', function($message) use ($conn, $loop) {
if($message != '') {
//fwrite(STDERR, colorize($message, 'yellow')." : ".colorize('received', 'green')."\n");
fwrite(STDERR, colorize($message, 'yellow')." : ".colorize('received', 'green')."\n");
if($message == '</stream:stream>') {
$conn->close();
@ -76,7 +76,7 @@ $connector($config->websocketurl, array('xmpp'))->then(function($conn) use (&$st
}
if(!empty($xml)) {
//fwrite(STDERR, colorize(trim($xml), 'yellow')." : ".colorize('sent to XMPP', 'green')."\n");
fwrite(STDERR, colorize(trim($xml), 'yellow')." : ".colorize('sent to XMPP', 'green')."\n");
$conn->send(trim($xml));
}
}
@ -118,7 +118,7 @@ $connector($config->websocketurl, array('xmpp'))->then(function($conn) use (&$st
\Moxl\API::clear();
if(!empty($xml)) {
//fwrite(STDERR, colorize(trim($xml), 'yellow')." : ".colorize('sent to XMPP', 'green')."\n");
fwrite(STDERR, colorize(trim($xml), 'yellow')." : ".colorize('sent to XMPP', 'green')."\n");
$conn->send(trim($xml));
}

4
themes/material/css/color.css

@ -28,9 +28,9 @@
.bubble.color.blue , .icon.color.blue { color: white; background-color: #2196F3; border-color: #2196F3 }
.bubble.color.green , .icon.color.green { color: white; background-color: #689F38; border-color: #689F38 }
.bubble.color.orange, .icon.color.orange { color: white; background-color: #FF9800; border-color: #FF9800 }
.bubble.color.yellow, .icon.color.yellow { color: white; background-color: #FFEB3B; border-color: #FFEB3B }
.bubble.color.yellow, .icon.color.yellow { color: white; background-color: #FDD835; border-color: #FDD835 }
.bubble.color.brown , .icon.color.brown { color: white; background-color: #795548; border-color: #795548 }
.bubble.color.brown , .icon.color.brown { color: white; background-color: #9E9E9E; border-color: #9E9E9E }
.bubble.color.gray , .icon.color.gray { color: white; background-color: #9E9E9E; border-color: #9E9E9E }
label.red , .icon.red { color: #F44336; }
label.purple, .icon.purple { color: #9C27B0; }

38
themes/material/css/style.css

@ -382,12 +382,11 @@ header.big p {
.dialog > section {
margin: 0 3rem;
height: calc(100% - 8rem);
overflow-y: hidden;
overflow-y: auto;
position: relative;
}
.dialog > section:hover {
overflow-y: auto;
}
.dialog > section > ul li {
@ -398,7 +397,7 @@ header.big p {
}
.dialog > section > ul li .icon {
left: 0;
left: 1rem;
}
.dialog .actions {
@ -478,6 +477,39 @@ header.big p {
}
}
/* Definition list */
dl dt,
dl dd {
box-sizing: border-box;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
padding: 0 1rem;
display: inline-block;
line-height: 2rem;
vertical-align: middle;
}
dl di {
border-bottom: 1px solid #DDD;
display: block;
padding: 1em 0;
}
dl dt {
text-align: right;
font-weight: bold;
width: 25%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
dl dd {
text-align: left;
width: 74%;
}
/* Padded */
@media screen and (max-width: 800px) {

Loading…
Cancel
Save