Browse Source

- Continue Material implementation

pull/16/head
Jaussoin Timothée 11 years ago
parent
commit
564c294278
  1. 10
      app/assets/js/movim_tpl.js
  2. 11
      app/controllers/ChatController.php
  3. 2
      app/helpers/StringHelper.php
  4. 18
      app/models/contact/ContactDAO.php
  5. 14
      app/views/chat.tpl
  6. 1
      app/views/conf.tpl
  7. 7
      app/views/contact.tpl
  8. 7
      app/views/main.tpl
  9. 4
      app/widgets/ConfigData/ConfigData.php
  10. 102
      app/widgets/ConfigData/configdata.tpl
  11. 48
      app/widgets/Contact/Contact.php
  12. 47
      app/widgets/Contact/_contact.tpl
  13. 23
      app/widgets/Contact/_contact_explore.tpl
  14. 32
      app/widgets/Contact/_contact_header.tpl
  15. 3
      app/widgets/Contact/locales.ini
  16. 2
      app/widgets/Explore/Explore.php
  17. 31
      app/widgets/Header/Header.php
  18. 6
      app/widgets/Header/_header_chat.tpl
  19. 12
      app/widgets/Header/_header_contact.tpl
  20. 6
      app/widgets/Header/_header_main.tpl
  21. 1
      app/widgets/Header/header.tpl
  22. 3
      app/widgets/Menu/Menu.php
  23. 2
      app/widgets/Menu/_menu_refresh.tpl
  24. 15
      app/widgets/Navigation/navigation.tpl
  25. 27
      app/widgets/Roster/Roster.php
  26. 30
      app/widgets/Roster/_roster_search.tpl
  27. 9
      app/widgets/Roster/_roster_search_results.tpl
  28. 5
      app/widgets/Roster/roster.js
  29. 11
      app/widgets/Roster/roster.tpl
  30. 328
      app/widgets/Vcard4/_vcard4_form.tpl
  31. 2
      locales/locales.ini
  32. 1
      system/Route.php
  33. 6
      system/controllers/BaseController.php
  34. 22
      system/template/TplPageBuilder.php
  35. 12
      system/widget/WidgetBase.php
  36. 26
      system/widget/WidgetWrapper.php
  37. 24
      themes/material/css/article.css
  38. 12
      themes/material/css/form.css
  39. 2
      themes/material/css/list.css
  40. 27
      themes/material/css/style.css

10
app/assets/js/movim_tpl.js

@ -49,13 +49,13 @@ var MovimTpl = {
},
showPanel : function() {
movim_add_class('main section > div:first-child:nth-last-child(2) ~ div', 'enabled');
document.getElementById('menu').style.display = 'none';
document.getElementById('back').style.display = '';
},
hidePanel : function() {
movim_remove_class('main section > div:first-child:nth-last-child(2) ~ div', 'enabled');
document.getElementById('menu').style.display = '';
document.getElementById('back').style.display = 'none';
Header_ajaxReset(CURRENT_PAGE);
var selector = 'main section > div:first-child:nth-last-child(2) ~ div';
document.querySelector(selector + ' div').innerHTML = '';
movim_remove_class(selector, 'enabled');
},
showMenu : function() {
movim_add_class('body > nav', 'active');

11
app/controllers/ChatController.php

@ -0,0 +1,11 @@
<?php
class ChatController extends BaseController {
function load() {
$this->session_only = true;
}
function dispatch() {
$this->page->setTitle(__('title.main', APP_TITLE));
}
}

2
app/helpers/StringHelper.php

@ -299,6 +299,6 @@ function stringToColor($string) {
* @return string
*/
function firstLetterCapitalize($string) {
return strtoupper(substr($string, 0, 1));
return ucfirst(strtolower(substr($string, 0, 2)));
}

18
app/models/contact/ContactDAO.php

@ -328,6 +328,24 @@ class ContactDAO extends SQL {
return $this->run('Contact');
}
function searchJid($search) {
$this->_sql =
'select *, privacy.value as privacy from contact
left outer join privacy
on contact.jid = privacy.pkey
where jid like :jid
and privacy.value = 1
order by jid';
$this->prepare(
'Contact',
array(
'jid' => '%'.$search.'%'
)
);
return $this->run('Contact');
}
function getAllPublic() {
$this->_sql =
'select *, privacy.value as privacy from contact

14
app/views/chat.tpl

@ -0,0 +1,14 @@
<nav class="color dark">
<?php $this->widget('Presence');?>
<?php $this->widget('Navigation');?>
</nav>
<main>
<?php $this->widget('Header'); ?>
<section>
<?php $this->widget('Roster');?>
<div>
<?php $this->widget('Contact');?>
</div>
</section>
</main>

1
app/views/conf.tpl

@ -18,6 +18,7 @@
<section>
<div>
<?php $this->widget('Tabs');?>
<?php $this->widget('Vcard4');?>
<?php $this->widget('Config');?>
<?php $this->widget('ConfigData');?>
<?php $this->widget('PubsubSubscriptionConfig');?>

7
app/views/contact.tpl

@ -4,12 +4,7 @@
</nav>
<main>
<header>
<span id="menu" class="on_mobile icon" onclick="MovimTpl.showMenu()"><i class="md md-menu"></i></span>
<span id="back" class="on_mobile icon" onclick="MovimTpl.hidePanel()"><i class="md md-arrow-back"></i></span>
<span class="on_desktop icon"><i class="md md-people"></i></span>
<h2>Contacts **FIXME**</h2>
</header>
<?php $this->widget('Header'); ?>
<section>
<?php $this->widget('Roster');?>
<div>

7
app/views/main.tpl

@ -6,12 +6,7 @@
</nav>
<main>
<header>
<span id="menu" class="on_mobile icon" onclick="MovimTpl.showMenu()"><i class="md md-menu"></i></span>
<span id="back" class="on_mobile icon" onclick="MovimTpl.hidePanel()"><i class="md md-arrow-back"></i></span>
<span class="on_desktop icon"><i class="md md-speaker-notes"></i></span>
<h2>News **FIXME**</h2>
</header>
<?php $this->widget('Header');?>
<section>
<?php $this->widget('Menu');?>
<?php $this->widget('Post');?>

4
app/widgets/ConfigData/ConfigData.php

@ -64,10 +64,10 @@ class ConfigData extends WidgetBase
$stats = $cd->getStatistics();
$pd = new \modl\PostnDAO();
$pstats = array_slice($pd->getStatistics(), 0, 10);
$pstats = array_slice($pd->getStatistics(), 0, 7);
$md = new \modl\MessageDAO();
$mstats = array_slice($md->getStatistics(), 0, 10);
$mstats = array_slice($md->getStatistics(), 0, 7);
$this->view->assign('stats', $stats[0]);
$this->view->assign('pstats', $pstats);

102
app/widgets/ConfigData/configdata.tpl

@ -4,7 +4,7 @@
<li>
<div class="control">
<a
class="button flat red"
class="button"
onclick="{$clearrosterlink}">
{$c->__('button.clear')}
</a>
@ -12,54 +12,62 @@
<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>
<li>
<div class="control">
<a
type="button"
name="email"
class="button"
onclick="{$clearpost}">
{$c->__('button.clear')}
</a>
</div>
<span class="icon bubble color blue"><i class="md md-contacts"></i></span>
<span>{$c->__('title.posts')} - {$stats.post}</span>
</li>
<li>
<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>
</li>
<li>
<div class="control">
<a
type="button"
name="email"
class="button"
onclick="{$clearmessage}">
{$c->__('button.clear')}
</a>
</div>
<span class="icon bubble color brown"><i class="md md-forum"></i></span>
<span>{$c->__('title.messages')} - {$stats.message}</span>
</li>
<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}
<li>
<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>
</li>
</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>

48
app/widgets/Contact/Contact.php

@ -9,30 +9,64 @@ class Contact extends WidgetCommon
function ajaxGetContact($jid)
{
$html = $this->prepareContact($jid);
$header = $this->prepareHeader($jid);
Header::fill($header);
RPC::call('movim_fill', 'contact_widget', $html);
RPC::call('MovimTpl.showPanel');
}
function prepareEmpty($jid)
function prepareHeader($jid)
{
$cd = new \Modl\ContactDAO;
$cr = $cd->getRosterItem($jid);
$view = $this->tpl();
$view->assign('jid', $jid);
return $view->draw('_contact_empty', true);
if(isset($cr)) {
$view->assign('contactr', $cr);
} else {
$view->assign('contactr', null);
$c = $cd->get($jid);
if(isset($c)) {
$view->assign('contact', $c);
} else {
$view->assign('contact', null);
}
}
return $view->draw('_contact_header', true);
}
function prepareEmpty($jid = null)
{
if($jid == null) {
$cd = new \modl\ContactDAO();
$users = $cd->getAllPublic();
$view = $this->tpl();
$view->assign('users', array_reverse($users));
return $view->draw('_contact_explore', true);
} else {
$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);
$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);

47
app/widgets/Contact/_contact.tpl

@ -8,7 +8,7 @@
<ul>
{if="$contact->delay != null"}
<li class="condensed block">
<span class="icon bubble color brown"><i class="md md-restore"></i></span>
<span class="icon brown"><i class="md md-restore"></i></span>
<span>{$c->__('last.title')}</span>
<p>{$contact->delay}</p>
</li>
@ -16,7 +16,7 @@
{if="$contact->fn != null"}
<li class="condensed block">
<span class="icon bubble color green">{$contact->fn|firstLetterCapitalize}</span>
<span class="icon gray">{$contact->fn|firstLetterCapitalize}</span>
<span>{$c->__('general.name')}</span>
<p>{$contact->fn}</p>
</li>
@ -24,7 +24,7 @@
{if="$contact->nickname != null"}
<li class="condensed block">
<span class="icon bubble color indigo">{$contact->nickname|firstLetterCapitalize}</span>
<span class="icon gray">{$contact->nickname|firstLetterCapitalize}</span>
<span>{$c->__('general.nickname')}</span>
<p>{$contact->nickname}</p>
</li>
@ -32,7 +32,7 @@
{if="strtotime($contact->date) != 0"}
<li class="condensed block">
<span class="icon bubble color red"><i class="md md-cake"></i></span>
<span class="icon gray"><i class="md md-cake"></i></span>
<span>{$c->__('general.date_of_birth')}</span>
<p>{$contact->date|strtotime|prepareDate:false}</p>
</li>
@ -40,7 +40,7 @@
{if="$contact->url != null"}
<li class="condensed block">
<span class="icon bubble color blue"><i class="md md-link"></i></span>
<span class="icon gray"><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>
@ -48,39 +48,39 @@
{if="$contact->email != null"}
<li class="condensed block">
<span class="icon bubble color orange"><i class="md md-mail"></i></span>
<span class="icon gray"><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'"}
{if="$contact->getMarital() != null"}
<li class="condensed block">
<span class="icon bubble color green"><i class="md md-people"></i></span>
<span class="icon gray"><i class="md md-people"></i></span>
<span>{$c->__('general.marital')}</span>
<p>{$marital[$contact->marital]}</p>
<p>{$contact->getMarital()}</p>
</li>
{/if}
{if="$contact->gender != null && $contact->gender != 'N'"}
{if="$contact->getGender() != null"}
<li class="condensed block">
<span class="icon bubble color red"><i class="md md-face-unlock"></i></span>
<span class="icon gray"><i class="md md-face-unlock"></i></span>
<span>{$c->__('general.gender')}</span>
<p>{$gender[$contact->gender]}</p>
<p>{$contact->getGender()}</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 class="icon 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"}
{if="$contact->description != null && trim($contact->description) != ''"}
<li class="condensed block">
<span class="icon bubble color indigo"><i class="md md-format-align-justify"></i></span>
<span class="icon gray"><i class="md md-format-align-justify"></i></span>
<span>{$c->__('general.about')}</span>
<p>{$contact->description}</p>
</li>
@ -89,7 +89,7 @@
{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 class="icon gray"><i class="md md-mood"></i></span>
<span>{$c->__('mood.title')}</span>
<p>{loop="$moods"}
{$mood[$value]}
@ -102,11 +102,12 @@
<div class="clear"></div>
{if="$contact->adrlocality != null || $contact->adrcountry != null"}
<ul>
<li class="subheader"></li>
<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 class="icon gray"><i class="md md-location-city"></i></span>
<span>{$c->__('position.locality')}</span>
<p>
{$contact->adrlocality}
@ -115,7 +116,7 @@
{/if}
{if="$contact->adrcountry != null"}
<li class="condensed block">
<span class="icon bubble color orange"><i class="md md-place"></i></span>
<span class="icon gray"><i class="md md-place"></i></span>
<span>{$c->__('position.country')}</span>
<p>
{$contact->adrcountry}
@ -132,7 +133,7 @@
{if="$contact->twitter != null"}
<li class="condensed block">
<span class="icon bubble color blue"></span>
<span class="icon gray">T</span>
<span>Twitter</span>
<p>
<a
@ -145,7 +146,7 @@
{/if}
{if="$contact->skype != null"}
<li class="condensed block">
<span class="icon bubble color green"></span>
<span class="icon gray">S</span>
<span>Skype</span>
<p>
<a
@ -158,7 +159,7 @@
{/if}
{if="$contact->yahoo != null"}
<li class="condensed block">
<span class="icon bubble color green"></span>
<span class="icon gray">Y</span>
<span>Yahoo!</span>
<p>
<a
@ -179,3 +180,7 @@
</li>
</ul>
{/if}
<a class="button action color red">
<i class="md md-chat"></i>
</a>

23
app/widgets/Contact/_contact_explore.tpl

@ -0,0 +1,23 @@
<h2 class="padded">{$c->__('last_registered')}</h2>
<ul class="active">
{loop="$users"}
<li class="condensed">
<span class="icon bubble"><img class="avatar" src="{$value->getPhoto('m')}"/></span>
<span>{$value->getTrueName()}</span>
<p>
{if="$value->getAge()"}
<span class="tag blue on_desktop">{$value->getAge()}</span>
{/if}
{if="$value->getGender()"}
<span class="tag green on_desktop">{$value->getGender()}</span>
{/if}
{if="$value->getMarital()"}
<span class="tag yellow on_desktop">{$value->getMarital()}</span>
{/if}
<br/>
<span class="desc on_desktop">{$value->description|strip_tags}</span>
</p>
</li>
{/loop}
</ul>

32
app/widgets/Contact/_contact_header.tpl

@ -0,0 +1,32 @@
<span id="back" class="on_mobile icon" onclick="MovimTpl.hidePanel()"><i class="md md-arrow-back"></i></span>
<span class="on_desktop icon" onclick="MovimTpl.hidePanel()"><i class="md md-person"></i></span>
{if="$contactr != null"}
<ul>
<li>
<span class="icon">
<i class="md md-star"></i>
</span>
</li>
</ul>
<h2>{$contactr->getTrueName()}</h2>
{else}
{if="$contact != null"}
<ul>
<li>
<span class="icon">
<i class="md md-person-add"></i>
</span>
</li>
</ul>
<h2>{$contact->getTrueName()}</h2>
{else}
<ul>
<li>
<span class="icon">
<i class="md md-person-add"></i>
</span>
</li>
</ul>
<h2>{$jid}</h2>
{/if}
{/if}

3
app/widgets/Contact/locales.ini

@ -28,3 +28,6 @@ last.title = 'Last seen'
[client]
client.title = 'Client Informations'
[explore]
last_registered = 'Last registered'

2
app/widgets/Explore/Explore.php

@ -1,6 +1,6 @@
<?php
class Explore extends WidgetCommon {
class Explore extends WidgetCommon {
function load() {
}

31
app/widgets/Header/Header.php

@ -0,0 +1,31 @@
<?php
class Header extends WidgetCommon
{
function load()
{
}
static function fill($html)
{
RPC::call('movim_fill', 'header', $html);
}
function ajaxReset($view)
{
$html = $this->prepareHeader($view);
RPC::call('movim_fill', 'header', $html);
}
function prepareHeader($view = null)
{
if($view == null) $view = $this->_view;
$tpl = $this->tpl();
return $tpl->draw('_header_'.$view, true);
}
function display()
{
$this->view->assign('header', $this->prepareHeader());
}
}

6
app/widgets/Header/_header_chat.tpl

@ -0,0 +1,6 @@
<header>
<span id="menu" class="on_mobile icon" onclick="MovimTpl.showMenu()"><i class="md md-menu"></i></span>
<span id="back" class="on_mobile icon" onclick="MovimTpl.hidePanel()"><i class="md md-arrow-back"></i></span>
<span class="on_desktop icon"><i class="md md-forum"></i></span>
<h2>{$c->__('page.chats')}</h2>
</header>

12
app/widgets/Header/_header_contact.tpl

@ -0,0 +1,12 @@
<header id="header">
<ul>
<li onclick="Roster_ajaxDisplaySearch()">
<span class="icon">
<i class="md md-person-add"></i>
</span>
</li>
</ul>
<span id="menu" class="on_mobile icon" onclick="MovimTpl.showMenu()"><i class="md md-menu"></i></span>
<span class="on_desktop icon"><i class="md md-people"></i></span>
<h2>{$c->__('page.contacts')}</h2>
</header>

6
app/widgets/Header/_header_main.tpl

@ -0,0 +1,6 @@
<header>
<span id="menu" class="on_mobile icon" onclick="MovimTpl.showMenu()"><i class="md md-menu"></i></span>
<span id="back" class="on_mobile icon" onclick="MovimTpl.hidePanel()"><i class="md md-arrow-back"></i></span>
<span class="on_desktop icon"><i class="md md-speaker-notes"></i></span>
<h2>{$c->__('page.news')}</h2>
</header>

1
app/widgets/Header/header.tpl

@ -0,0 +1 @@
{$header}

3
app/widgets/Menu/Menu.php

@ -8,8 +8,7 @@ class Menu extends WidgetCommon
{
$this->registerEvent('post', 'onStream');
$this->registerEvent('stream', 'onStream');
//$this->addcss('menu.css');
$this->addjs('menu.js');
}

2
app/widgets/Menu/_menu_refresh.tpl

@ -1,3 +1,3 @@
<a class="button color green" onclick="{$refresh}">
<a class="button flat" onclick="{$refresh}">
<i class="fa fa-refresh"></i> {$c->__('post.new_items', $count)} - {$c->__('button.refresh')}
</a>

15
app/widgets/Navigation/navigation.tpl

@ -10,14 +10,21 @@
<li>
<span class="icon"><i class="md md-people"></i></span>
<span class="counter"></span>
<span>Contacts</span>
<span>{$c->__('page.contacts')}</span>
</li>
</a>
<a class="classic" href="{$c->route('help')}">
<a class="classic" href="{$c->route('chat')}">
<li>
<span class="icon"><i class="md md-forum"></i></span>
<span class="counter">5</span>
<span>Chats</span>
<span class="counter"></span>
<span>{$c->__('page.chats')}</span>
</li>
</a>
<a class="classic" href="{$c->route('media')}">
<li>
<span class="icon"><i class="md md-photo"></i></span>
<span class="counter"></span>
<span>{$c->__('page.media')}</span>
</li>
</a>
</ul>

27
app/widgets/Roster/Roster.php

@ -91,6 +91,33 @@ class Roster extends WidgetBase
$r->request();
}
/**
* @brief Display the search contact form
*/
function ajaxDisplaySearch()
{
$view = $this->tpl();
$view->assign('search', $this->call('ajaxDisplayFound', 'this.value'));
Dialog::fill($view->draw('_roster_search', true));
}
/**
* @brief Return the found jid
*/
function ajaxDisplayFound($jid)
{
if($jid != '') {
$cd = new \Modl\ContactDAO();
$contacts = $cd->searchJid($jid);
$view = $this->tpl();
$view->assign('contacts', $contacts);
$html = $view->draw('_roster_search_results', true);
RPC::call('movim_fill', 'search_results', $html);
}
}
private function getCaps() {
$capsdao = new \Modl\CapsDAO();
$caps = $capsdao->getAll();

30
app/widgets/Roster/_roster_search.tpl

@ -0,0 +1,30 @@
<section>
<ul class="simple">
<li class="subheader">{$c->__('roster.search')}</li>
<li>
<form>
<div>
<input
name="searchjid"
type="email"
title="{$c->__('roster.jid')}"
placeholder="user@server.tld"
onkeyup="if(this.validity.valid == true) { {$search} }"
/>
<label for="searchjid">{$c->__('roster.add_contact_info1')}</label>
</div>
</form>
</li>
</ul>
<div id="search_results">
</div>
</section>
<div class="actions">
<a onclick="Dialog.clear()" class="button flat">
{$c->__('button.close')}
</a>
<a onclick="{$calllogout} movim_toggle_class('#logoutlist', 'show');" class="button flat">
{$c->__('button.add')}
</a>
</div>

9
app/widgets/Roster/_roster_search_results.tpl

@ -0,0 +1,9 @@
<ul class="active">
{loop="$contacts"}
<li class="condensed" onclick="Roster.setFound('{$value->jid}')">
<span class="icon bubble"><img src="{$value->getPhoto('m')}"></span>
<span>{$value->getTrueName()}</span>
<p>{$value->jid}</p>
</li>
{/loop}
</ul>

5
app/widgets/Roster/roster.js

@ -383,7 +383,6 @@ var Roster = {
while(i < items.length -1)
{
items[i].onclick = function(e) {
MovimTpl.showPanel();
Contact_ajaxGetContact(this.id);
Roster.reset(items);
movim_add_class(this, 'active');
@ -396,6 +395,10 @@ var Roster = {
for(i = 0; i < list.length; i++) {
movim_remove_class(list[i], 'active');
}
},
setFound : function(jid) {
document.querySelector('input[name=searchjid]').value = jid;
}
}

11
app/widgets/Roster/roster.tpl

@ -28,16 +28,19 @@
/>
</span>
<div class="chat on" ng-click="rosterCtrl.postChatAction(contact)" ></div>
<div ng-if="contact.rosterview.type == 'handheld'" class="infoicon mobile"></div>
<div ng-if="contact.rosterview.type == 'web'" class="infoicon web"></div>
<div ng-if="contact.rosterview.type == 'bot'" class="infoicon bot"></div>
<div ng-if="contact.rosterview.tune" class="infoicon tune"></div>
<div
ng-if="contact.rosterview.jingle"
class="infoicon jingle"
ng-click="rosterCtrl.postJingleAction(contact)">
</div>
<div class="control">
<i ng-if="contact.rosterview.type == 'handheld'" class="md md-smartphone"></i>
<i ng-if="contact.rosterview.type == 'web'" class="md md-language"></i>
<i ng-if="contact.rosterview.type == 'bot'" class="md md-memory"></i>
<i ng-if="contact.rosterview.tune" class="md md-play-arrow"></i>
</div>
{{contact.rosterview.name}}
<p class="wrap">
<span ng-if="contact.status != ''">{{contact.status}} -</span>

328
app/widgets/Vcard4/_vcard4_form.tpl

@ -1,188 +1,188 @@
<ul>
<li class="subheader"> {$c->__('vcard.privacy_title')}</li>
<li class="condensed">
<span class="icon bubble color blue">
<i class="md md-security"></i>
</span>
<form>
<div class="control">
<div class="checkbox">
<input
type="checkbox"
id="privacy"
name="privacy"
{if="$me->privacy"}
checked
{/if}
onchange="{$privacy}">
<label for="privacy"></label>
</div>
</div>
</form>
<span>{$c->__('vcard.privacy_question')}</span>
<p>{$c->__('vcard.privacy_info')}</p>
</li>
</ul>
<form name="vcard4" id="vcard4form">
<fieldset>
<legend><i class="fa fa-user"></i> {$c->__('page.profile')}</legend>
<div class="element">
<label for="fn">{$c->__('vcard.name')}</label>
<input type="text" name="fn" class="content" value="{$me->fn}">
</div>
<div class="element">
<label for="fn">{$c->__('vcard.nickname')}</label>
<input type="text" name="name" class="content" value="{$me->name}">
</div>
<div class="element">
<label for="fn">{$c->__('vcard.email')}</label>
<input type="email" name="email" class="content" value="{$me->email}">
</div>
<h4>{$c->__('page.profile')}</h4>
<div class="block">
<input type="text" name="fn" class="content" value="{$me->fn}">
<label for="fn">{$c->__('vcard.name')}</label>
</div>
<div class="block">
<input type="text" name="name" class="content" value="{$me->name}">
<label for="fn">{$c->__('vcard.nickname')}</label>
</div>
<!-- The date picker -->
<div class="block">
<input type="email" name="email" class="content" value="{$me->email}">
<label for="fn">{$c->__('vcard.email')}</label>
</div>
<div class="element ">
<label for="day">{$c->__('vcard.date_of_birth')}</label>
<div class="select" style="width: 33%; float: left;">
<select name="day" class="datepicker">
<option value="-1">{$c->__('Day')}</option>
{loop="$days"}
<option value="{$value}"
{if="$key == substr($me->date, 8)"}
selected
{/if}
>{$value}</option>
{/loop}
</select>
</div>
<div class="select" style="width: 34%; float: left;">
<select name="month" class="datepicker">
<option value="-1">{$c->__('Month')}</option>
{loop="$months"}
<option value="{$key}"
{if="$key == substr($me->date,5,2)"}
selected
{/if}
>{$value}</option>
{/loop}
</select>
</div>
<div class="select" style="width: 33%; float: left;">
<select name="year" class="datepicker">
<option value="-1">{$c->__('Year')}</option>
{loop="$years"}
<option value="{$value}"
{if="$value == substr($me->date,0,4)"}
selected
{/if}
>{$value}</option>
{/loop}
</select>
</div>
</div>
<div class="clear"></div>
<div class="element">
<label for="gender">{$c->__('vcard.gender')}</label>
<div class="select">
<select name="gender">
{loop="$gender"}
<option
{if="$key == $me->gender"}
<!-- The date picker -->
<div class="element ">
<label for="day">{$c->__('vcard.date_of_birth')}</label>
<div class="select" style="width: 33%; float: left;">
<select name="day" class="datepicker">
<option value="-1">{$c->__('Day')}</option>
{loop="$days"}
<option value="{$value}"
{if="$key == substr($me->date, 8)"}
selected
{/if}
value="{$key}">{$value}</option>
>{$value}</option>
{/loop}
</select>
</div>
</select>
</div>
<div class="element">
<label for="marital">{$c->__('vcard.marital')}</label>
<div class="select">
<select name="marital">
{loop="$marital"}
<option
{if="$key == $me->marital"}
<div class="select" style="width: 34%; float: left;">
<select name="month" class="datepicker">
<option value="-1">{$c->__('Month')}</option>
{loop="$months"}
<option value="{$key}"
{if="$key == substr($me->date,5,2)"}
selected
{/if}
value="{$key}">{$value}</option>
>{$value}</option>
{/loop}
</select>
</div>
</select>
</div>
<div class="element large">
<label for="url">{$c->__('vcard.website')}</label>
<input type="url" name ="url" class="content" value="{$me->url}">
<div class="select" style="width: 33%; float: left;">
<select name="year" class="datepicker">
<option value="-1">{$c->__('Year')}</option>
{loop="$years"}
<option value="{$value}"
{if="$value == substr($me->date,0,4)"}
selected
{/if}
>{$value}</option>
{/loop}
</select>
</div>
</div>
<div class="element large">
<label for="desc">{$c->__('vcard.about')}</label>
<textarea name="desc" id="desctext" class="content" onkeyup="movim_textarea_autoheight(this);">{$desc}</textarea>
<div>
<label for="gender">{$c->__('vcard.gender')}</label>
<div class="select">
<select name="gender">
{loop="$gender"}
<option
{if="$key == $me->gender"}
selected
{/if}
value="{$key}">{$value}</option>
{/loop}
</select>
</div>
</fieldset>
</div>
<fieldset>
<legend><i class="fa fa-compass"></i> {$c->__('vcard.position_title')}</legend>
<div class="element">
<label for="url">{$c->__('vcard.locality')}</label>
<input type="text" type="locality" name ="locality" class="content" value="{$me->adrlocality}" placeholder="{$c->__('Locality')}">
</div>
<div class="element">
<label for="country">{$c->__('vcard.country')}</label>
<div class="select">
<select name="country">
<option value=""></option>
{loop="$countries"}
<option
{if="$value == $me->adrcountry"}
selected
{/if}
value="{$value}">{$value}</option>
{/loop}
</select>
</div>
<div>
<label for="marital">{$c->__('vcard.marital')}</label>
<div class="select">
<select name="marital">
{loop="$marital"}
<option
{if="$key == $me->marital"}
selected
{/if}
value="{$key}">{$value}</option>
{/loop}
</select>
</div>
</div>
</fieldset>
<div class="element large">
<input type="url" name ="url" class="content" value="{$me->url}">
<label for="url">{$c->__('vcard.website')}</label>
</div>
<fieldset>
<legend><i class="fa fa-circle-thin"></i> {$c->__('vcard.accounts_title')}</legend>
<div class="element">
<label for="twitter"><i class="fa fa-twitter"></i> {$c->__('vcard.twitter')}</label>
<input type="text" name="twitter" class="content" value="{$me->twitter}" placeholder="{$c->__('Nickname')}">
</div>
<div class="element">
<label for="skype"><i class="fa fa-skype"></i> {$c->__('vcard.skype')}</label>
<input type="text" name="skype" class="content" value="{$me->skype}" placeholder="{$c->__('Nickname')}">
</div>
<div class="element large">
<textarea name="desc" id="desctext" class="content" onkeyup="movim_textarea_autoheight(this);">{$desc}</textarea>
<label for="desc">{$c->__('vcard.about')}</label>
</div>
<legend><i class="fa fa-compass"></i> {$c->__('vcard.position_title')}</legend>
<div class="element">
<label for="skype"><i class="fa fa-yahoo"></i> {$c->__('vcard.yahoo')}</label>
<input type="email" name="yahoo" class="content" value="{$me->yahoo}" placeholder="{$c->__('Yahoo Account')}">
<div>
<input type="text" type="locality" name ="locality" class="content" value="{$me->adrlocality}" placeholder="{$c->__('Locality')}">
<label for="url">{$c->__('vcard.locality')}</label>
</div>
<div>
<label for="country">{$c->__('vcard.country')}</label>
<div class="select">
<select name="country">
<option value=""></option>
{loop="$countries"}
<option
{if="$value == $me->adrcountry"}
selected
{/if}
value="{$value}">{$value}</option>
{/loop}
</select>
</div>
</fieldset>
</div>
<fieldset>
<a
onclick="
{$submit}
movim_button_save('#vcard4validate');
this.value = '{$c->__('Submitting')}';
this.className='button color orange oppose merged right inactive';"
class="button merged right color green oppose"
id="vcard4validate"
>
<i class="fa fa-check"></i> {$c->__('Submit')}
</a>
<a
onclick="document.querySelector('#vcard4form').reset();"
class="button merged left color orange oppose">
<i class="fa fa-eraser"></i> {$c->__('Reset')}
</a>
</fieldset>
<fieldset>
<legend><i class="fa fa-lock"></i> {$c->__('vcard.privacy_title')}</legend>
<div class="element">
<label>{$c->__('vcard.privacy_question')}</label>
<div class="checkbox">
<input
type="checkbox"
id="privacy"
name="privacy"
{if="$me->privacy"}
checked
{/if}
onchange="{$privacy}"/>
<label for="privacy"></label>
</div>
</div>
<div class="element">
<div class="message info">
{$c->__('vcard.privacy_info')}
</div>
</div>
</fieldset>
<legend><i class="fa fa-circle-thin"></i> {$c->__('vcard.accounts_title')}</legend>
<div>
<input type="text" name="twitter" class="content" value="{$me->twitter}" placeholder="{$c->__('Nickname')}">
<label for="twitter"><i class="fa fa-twitter"></i> {$c->__('vcard.twitter')}</label>
</div>
<div>
<input type="text" name="skype" class="content" value="{$me->skype}" placeholder="{$c->__('Nickname')}">
<label for="skype"><i class="fa fa-skype"></i> {$c->__('vcard.skype')}</label>
</div>
<div>
<input type="email" name="yahoo" class="content" value="{$me->yahoo}" placeholder="{$c->__('Yahoo Account')}">
<label for="skype"><i class="fa fa-yahoo"></i> {$c->__('vcard.yahoo')}</label>
</div>
<a
onclick="
{$submit}
movim_button_save('#vcard4validate');
this.value = '{$c->__('Submitting')}';
this.className='button color orange oppose merged right inactive';"
class="button merged right color green oppose"
id="vcard4validate"
>
<i class="fa fa-check"></i> {$c->__('Submit')}
</a>
<a
onclick="document.querySelector('#vcard4form').reset();"
class="button merged left color orange oppose">
<i class="fa fa-eraser"></i> {$c->__('Reset')}
</a>
</form>

2
locales/locales.ini

@ -10,6 +10,8 @@ page.explore = 'Explore'
page.account_creation = 'Account Creation'
page.news = 'News'
page.avatar = 'Avatar'
page.contacts = 'Contacts'
page.chats = 'Chats'
page.configuration = 'Configuration'
page.server = 'Server'
page.public_groups = 'Public Groups'

1
system/Route.php

@ -16,6 +16,7 @@ class Route extends \BaseController {
'discover' => false,
'profile' => false,
'contact' => false,
'chat' => false,
'infos' => false,
'media' => array('f'),
'conf' => false,

6
system/controllers/BaseController.php

@ -73,12 +73,12 @@ class BaseController {
}
if($this->raw) {
echo $content->build($this->name.'.tpl');
echo $content->build($this->name);
exit;
} else {
$built = $content->build($this->name.'.tpl');
$built = $content->build($this->name);
$this->page->setContent($built);
echo $this->page->build('page.tpl');
echo $this->page->build('page');
}
}
}

22
system/template/TplPageBuilder.php

@ -12,15 +12,14 @@
class TplPageBuilder
{
// internal variables
private $theme = 'movim';
private $_view = '';
private $title = '';
private $menu = array();
private $content = '';
private $user;
private $css = array();
private $scripts = array();
private $polling = true;
/**
* Constructor. Determines whether to show the login page to the user or the
@ -70,8 +69,10 @@ class TplPageBuilder
/**
* Actually generates the page from templates.
*/
function build($template)
function build($view)
{
$this->_view = $view;
$template = $this->_view.'.tpl';
//if (ENVIRONMENT === 'production') ob_clean();
ob_start();
@ -199,15 +200,6 @@ class TplPageBuilder
$this->content .= $data;
}
function addContent($data, $append = true)
{
if($append) {
$this->content .= $data;
} else {
$this->content = $data . $this->content;
}
}
function content()
{
echo $this->content;
@ -216,9 +208,11 @@ class TplPageBuilder
/**
* Loads up a widget and prints it at the current place.
*/
function widget($name, $register = true)
function widget($name)
{
$widgets = WidgetWrapper::getInstance($register);
$widgets = WidgetWrapper::getInstance();
$widgets->setView($this->_view);
echo $widgets->runWidget($name, 'build');
}

12
system/widget/WidgetBase.php

@ -28,15 +28,19 @@ class WidgetBase
protected $name;
protected $pure; // To render the widget without the container
protected $translations = array(); // Set translations in the controller
protected $_view;
public $events;
/**
* Initialises Widget stuff.
*/
function __construct($light = false)
function __construct($light = false, $view = null)
{
if($view != null) $this->_view = $view;
$this->load();
$this->name = get_class($this);
// If light loading enabled, we stop here
if($light)
return;
@ -78,12 +82,10 @@ class WidgetBase
$this->view->objectConfigure($config);
$this->view->assign('c', $this);
$this->name = get_class($this);
$this->pure = false;
}
function t() {
return call_user_func_array('t',func_get_args());
}

26
system/widget/WidgetWrapper.php

@ -27,6 +27,8 @@ class WidgetWrapper
private $_widgets = array();
private $_events = array();
private $_view = ''; // The current page where the widget is displayed
private $css = array(); // All the css loaded by the widgets so far.
private $js = array(); // All the js loaded by the widgets so far.
@ -37,8 +39,6 @@ class WidgetWrapper
public function registerAll($load = false)
{
$widgets_dir = scandir(APP_PATH ."widgets/");
$old = memory_get_usage();
foreach($widgets_dir as $widget_dir) {
if(is_dir(APP_PATH ."widgets/".$widget_dir) &&
@ -47,8 +47,6 @@ class WidgetWrapper
if($load) $this->loadWidget($widget_dir, true);
array_push($this->_widgets, $widget_dir);
}
$old = memory_get_usage();
}
}
@ -67,6 +65,15 @@ class WidgetWrapper
}
}
/**
* @desc Set the view
* @param $page the name of the current view
*/
public function setView($view)
{
$this->_view = $view;
}
/**
* @desc Loads a widget and returns it
* @param $name the name of the widget
@ -101,11 +108,17 @@ class WidgetWrapper
}
}
} else {
$widget = new $name();
if($this->_view != '') {
$widget = new $name(false, $this->_view);
} else {
$widget = new $name();
}
// Collecting stuff generated by the widgets.
$this->css = array_merge($this->css, $widget->loadcss());
$this->js = array_merge($this->js, $widget->loadjs());
}
return $widget;
}
/**
@ -119,8 +132,7 @@ class WidgetWrapper
*/
function runWidget($widget_name, $method, array $params = null)
{
$this->loadWidget($widget_name);
$widget = new $widget_name();
$widget = $this->loadWidget($widget_name);
if(!is_array($params))
$params = array();

24
themes/material/css/article.css

@ -30,3 +30,27 @@ article img {
article section p {
margin-bottom: 1rem;
}
article section content ul li {
line-height: 3rem;
padding-left: 2rem;
list-style-type: circle;
list-style-position: inside;
min-height: 4rem;
}
article section content strong,
article section content b {
font-weight: 700;
}
article section content code,
article section content pre {
font-family: monospace;
}
article section content cite,
article section content blockquote {
padding-left: 4rem;
font-style: italic;
}

12
themes/material/css/form.css

@ -192,5 +192,15 @@ input[type=button].flat:focus {
}
.button.action {
position: fixed;
bottom: 2rem;
right: 2rem;
border-radius: 10rem;
width: 3rem;
min-height: 0rem;
line-height: 6rem;
padding: 1rem;
height: 8rem;
z-index: 1;
font-size: 3rem;
}

2
themes/material/css/list.css

@ -89,7 +89,7 @@ ul li span {
ul li > div.control {
float: right;
text-align: center;
text-align: right;
min-width: 5rem;
font-size: 2.5rem;
opacity: 0.7;

27
themes/material/css/style.css

@ -171,6 +171,8 @@ main > header {
color: white;
z-index: 2;
box-shadow: 0 0 0.5rem rgba(0, 0, 0, 0.5);
white-space: nowrap;
text-overflow: ellipsis;
}
main > header ul {
@ -180,6 +182,7 @@ main > header ul {
main > header ul li {
float: left;
height: 7rem;
min-width: 0;
line-height: 7rem;
width: 7rem;
padding: 0;
@ -198,6 +201,7 @@ main header + section {
main section > div {
overflow-y: auto;
display: block;
position: relative;
float: left;
height: 100%;
width: 100%;
@ -282,9 +286,9 @@ span.icon.bubble {
overflow: hidden;
color: white;
font-size: 0;
font-size: 2.5rem;
}
span.icon.bubble:first-letter,
span.icon.bubble i {
font-size: 3rem;
line-height: 5rem;
@ -311,6 +315,14 @@ span.icon.small.bubble i {
vertical-align: text-top;
}
main > header ul li span.icon {
left: 1rem;
}
main ul li .control > i {
margin-left: 0;
}
/* Card */
.card {
@ -337,8 +349,8 @@ header .icon:hover {
header.big {
background-size: cover, cover;
background-position: center center;
height: 20rem;
max-height: 20rem;
height: 25rem;
max-height: 25rem;
width: 100%;
max-width: 100%;
color: white;
@ -389,14 +401,17 @@ header.big p {
.dialog > section:hover {
}
.dialog > section > ul li {
.dialog > section ul li {
padding-right: 0;
padding-left: 7rem;
}
.dialog > section > ul li.subheader {
.dialog > section ul li.subheader,
.dialog > section ul.simple li {
padding-left: 0;
}
.dialog > section > ul li .icon {
.dialog > section ul li .icon {
left: 1rem;
}

Loading…
Cancel
Save