Browse Source

Huge refactor of the lists in the UI + various fixes

pull/101/head
Jaussoin Timothée 10 years ago
parent
commit
6259c37d8e
  1. 21
      app/assets/js/movim_tpl.js
  2. 2
      app/views/chat.tpl
  3. 2
      app/views/conf.tpl
  4. 6
      app/views/contact.tpl
  5. 26
      app/views/friend.tpl
  6. 2
      app/views/group.tpl
  7. 2
      app/views/help.tpl
  8. 2
      app/views/login.tpl
  9. 4
      app/views/main.tpl
  10. 4
      app/views/news.tpl
  11. 4
      app/views/page.tpl
  12. 44
      app/widgets/About/about.tpl
  13. 40
      app/widgets/Account/account.tpl
  14. 16
      app/widgets/AdHoc/_adhoc_list.tpl
  15. 38
      app/widgets/AdminDB/admindb.tpl
  16. 14
      app/widgets/AdminMain/adminmain.tpl
  17. 40
      app/widgets/Api/api.tpl
  18. 23
      app/widgets/Avatar/_avatar_form.tpl
  19. 42
      app/widgets/Blog/blog.tpl
  20. 12
      app/widgets/Chat/_chat.tpl
  21. 18
      app/widgets/Chat/_chat_bubble.tpl
  22. 4
      app/widgets/Chat/_chat_bubble_room.tpl
  23. 16
      app/widgets/Chat/_chat_empty.tpl
  24. 64
      app/widgets/Chat/_chat_header.tpl
  25. 91
      app/widgets/Chat/_chat_header_room.tpl
  26. 61
      app/widgets/Chat/chat.css
  27. 14
      app/widgets/Chat/chat.js
  28. 2
      app/widgets/Chat/chat.tpl
  29. 20
      app/widgets/Chats/_chats_add.tpl
  30. 14
      app/widgets/Chats/_chats_add_extend.tpl
  31. 35
      app/widgets/Chats/_chats_item.tpl
  32. 2
      app/widgets/Chats/chats.tpl
  33. 10
      app/widgets/Contact/Contact.php
  34. 334
      app/widgets/Contact/_contact.tpl
  35. 6
      app/widgets/Contact/_contact_empty.tpl
  36. 2
      app/widgets/Contact/_contact_explore.tpl
  37. 33
      app/widgets/Contact/_contact_public.tpl
  38. 24
      app/widgets/Group/_group_empty.tpl
  39. 88
      app/widgets/Group/_group_header.tpl
  40. 13
      app/widgets/Group/_group_subscriptions.tpl
  41. 36
      app/widgets/Groups/_groups_header.tpl
  42. 41
      app/widgets/Groups/_groups_server.tpl
  43. 15
      app/widgets/Groups/_groups_subscriptions.tpl
  44. 11
      app/widgets/Header/_header_admin.tpl
  45. 10
      app/widgets/Header/_header_chat.tpl
  46. 10
      app/widgets/Header/_header_conf.tpl
  47. 10
      app/widgets/Header/_header_group.tpl
  48. 10
      app/widgets/Header/_header_help.tpl
  49. 8
      app/widgets/Header/_header_login.tpl
  50. 7
      app/widgets/Header/locales.ini
  51. 120
      app/widgets/Hello/hello.tpl
  52. 50
      app/widgets/Help/help.tpl
  53. 16
      app/widgets/Login/_login_sessions.tpl
  54. 1
      app/widgets/Login/login.css
  55. 25
      app/widgets/Login/login.tpl
  56. 2
      app/widgets/Menu/Menu.php
  57. 30
      app/widgets/Menu/_menu_list.tpl
  58. 5
      app/widgets/Menu/locales.ini
  59. 2
      app/widgets/Menu/menu.css
  60. 24
      app/widgets/Menu/menu.tpl
  61. 56
      app/widgets/Navigation/navigation.tpl
  62. 8
      app/widgets/Notification/_notification.tpl
  63. 6
      app/widgets/Notification/notification.js
  64. 1
      app/widgets/Post/Post.php
  65. 296
      app/widgets/Post/_post.tpl
  66. 50
      app/widgets/Post/_post_comments.tpl
  67. 8
      app/widgets/Post/_post_comments_error.tpl
  68. 25
      app/widgets/Post/_post_empty.tpl
  69. 2
      app/widgets/Post/locales.ini
  70. 2
      app/widgets/Post/post.tpl
  71. 33
      app/widgets/Presence/_presence.tpl
  72. 54
      app/widgets/Presence/_presence_list.tpl
  73. 2
      app/widgets/Presence/presence.tpl
  74. 46
      app/widgets/Publish/_publish_create.tpl
  75. 10
      app/widgets/Publish/_publish_gallery.tpl
  76. 62
      app/widgets/Publish/_publish_header.tpl
  77. 53
      app/widgets/Publish/_publish_help.tpl
  78. 2
      app/widgets/Publish/publish.js
  79. 24
      app/widgets/Rooms/_rooms.tpl
  80. 25
      app/widgets/Rooms/_rooms_list.tpl
  81. 6
      app/widgets/Roster/_roster_search.tpl
  82. 10
      app/widgets/Roster/_roster_search_results.tpl
  83. 16
      app/widgets/Roster/roster.css
  84. 65
      app/widgets/Roster/roster.tpl
  85. 12
      app/widgets/Statistics/statistics.tpl
  86. 8
      app/widgets/Upload/_upload.tpl
  87. 44
      app/widgets/Vcard4/_vcard4_form.tpl
  88. 9
      themes/material/css/article.css
  89. 1
      themes/material/css/block.css
  90. 82
      themes/material/css/color.css
  91. 16
      themes/material/css/form.css
  92. 388
      themes/material/css/listn.css
  93. 30
      themes/material/css/menu.css
  94. 52
      themes/material/css/style.css

21
app/assets/js/movim_tpl.js

@ -57,13 +57,32 @@ var MovimTpl = {
init : function() {
if(document.getElementById('back') != null)
document.getElementById('back').style.display = 'none';
MovimTpl.scrollHeaders();
},
scrollHeaders : function() {
var headers = document.querySelectorAll('main > section > div > header');
for(var i = 0, len = headers.length; i < len; ++i ) {
var header = headers[i];
header.parentNode.onscroll = function() {
var header = this.querySelector('header');
if(this.scrollTop == 0) {
movim_remove_class(header, 'scroll');
} else {
movim_add_class(header, 'scroll');
}
}
}
},
showPanel : function() {
movim_add_class('main section > div:first-child:nth-last-child(2) ~ div', 'enabled');
MovimTpl.scrollPanelTop();
//MovimTpl.scrollHeaders();
},
hidePanel : function() {
Header_ajaxReset(CURRENT_PAGE);
//Header_ajaxReset(CURRENT_PAGE);
var selector = 'main section > div:first-child:nth-last-child(2) ~ div';
var inner = document.querySelector(selector + ' div');

2
app/views/chat.tpl

@ -1,6 +1,6 @@
<nav class="color dark">
<?php $this->widget('Navigation');?>
<?php $this->widget('Presence');?>
<?php $this->widget('Navigation');?>
</nav>
<main>

2
app/views/conf.tpl

@ -1,6 +1,6 @@
<nav class="color dark">
<?php $this->widget('Navigation');?>
<?php $this->widget('Presence');?>
<?php $this->widget('Navigation');?>
</nav>
<main>

6
app/views/contact.tpl

@ -1,16 +1,16 @@
<nav class="color dark">
<?php $this->widget('Navigation');?>
<?php $this->widget('Presence');?>
<?php $this->widget('Navigation');?>
</nav>
<main>
<?php $this->widget('Header'); ?>
<?php //$this->widget('Header'); ?>
<section>
<div>
<?php $this->widget('Notifs');?>
<?php $this->widget('Roster');?>
</div>
<div id="contact_widget" class="card shadow">
<div id="contact_widget">
<?php $this->widget('Contact');?>
</div>
</section>

26
app/views/friend.tpl

@ -1,26 +0,0 @@
<?php /* -*- mode: html -*- */
?>
<?php $this->widget('Presence');?>
<?php $this->widget('Chat');?>
<?php $this->widget('VisioExt');?>
<div id="main">
<div id="left">
<?php $this->widget('ContactSummary');?>
<?php $this->widget('ContactInfo');?>
<?php $this->widget('ContactAction');?>
<div class="clear"></div>
<?php $this->widget('ContactManage');?>
</div>
<?php $this->widget('Tabs');?>
<div id="center">
<?php $this->widget('Wall');?>
<?php $this->widget('ContactCard');?>
<?php $this->widget('ContactPubsubSubscription');?>
</div>
</div>
<div id="right">
<?php $this->widget('Roster');?>
</div>

2
app/views/group.tpl

@ -1,8 +1,8 @@
<?php $this->widget('Upload'); ?>
<nav class="color dark">
<?php $this->widget('Navigation');?>
<?php $this->widget('Presence');?>
<?php $this->widget('Navigation');?>
</nav>
<main>

2
app/views/help.tpl

@ -1,6 +1,6 @@
<nav class="color dark">
<?php $this->widget('Navigation');?>
<?php $this->widget('Presence');?>
<?php $this->widget('Navigation');?>
</nav>
<main>

2
app/views/login.tpl

@ -1,6 +1,6 @@
<?php $this->widget('Presence'); ?>
<main>
<?php $this->widget('Header');?>
<?php //$this->widget('Header');?>
<section>
<div>
<?php $this->widget('Login'); ?>

4
app/views/main.tpl

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

4
app/views/news.tpl

@ -2,12 +2,12 @@
<?php $this->widget('Upload');?>
<nav class="color dark">
<?php $this->widget('Navigation');?>
<?php $this->widget('Presence');?>
<?php $this->widget('Navigation');?>
</nav>
<main>
<?php $this->widget('Header');?>
<?php //$this->widget('Header');?>
<section>
<?php $this->widget('Menu');?>
<?php $this->widget('Post');?>

4
app/views/page.tpl

@ -19,7 +19,9 @@
<?php
$this->addCss('style.css');
$this->addCss('list.css');
$this->addCss('header.css');
//$this->addCss('list.css');
$this->addCss('listn.css');
$this->addCss('grid.css');
$this->addCss('article.css');
$this->addCss('form.css');

44
app/widgets/About/about.tpl

@ -1,31 +1,37 @@
<div class="tabelem" title="{$c->__('page.about')}" id="about">
<h2 class="padded_top_bottom">Movim {$version} - {$c->__('page.about')} </h2>
<ul class="thick divided">
<li class="condensed">
<span class="icon bubble color green"><i class="zmdi zmdi-info"></i></span>
<ul class="list thick divided">
<li>
<span class="primary icon bubble color green"><i class="zmdi zmdi-info"></i></span>
<p>{$c->__('page.about')}</p>
<p class="all">{$c->__('about.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->__('about.thanks')}</li>
<li class="condensed">
<span class="icon bubble color red"><i class="zmdi zmdi-code"></i></span>
<span>{$c->__('about.developers')}</span>
<li class="subheader">
<p>{$c->__('about.thanks')}</p>
</li>
<li>
<span class="primary icon bubble color red"><i class="zmdi zmdi-code"></i></span>
<p>{$c->__('about.developers')}</p>
<p class="all">
<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="zmdi zmdi-flag"></i></span>
<span>{$c->__('about.translators')}</span>
<li>
<span class="primary icon bubble color purple"><i class="zmdi zmdi-flag"></i></span>
<p>{$c->__('about.translators')}</p>
<p>
{$c->__('about.translators_text')} <a href="https://www.transifex.com/projects/p/movim/">www.transifex.com/projects/p/movim/</a>
</p>
</li>
<li class="subheader">{$c->__('about.software')}</li>
<li class="condensed">
<span class="icon bubble color orange"><i class="zmdi zmdi-archive"></i></span>
<li class="subheader">
<p>{$c->__('about.software')}</p>
</li>
<li>
<span class="primary icon bubble color orange"><i class="zmdi zmdi-archive"></i></span>
<p>{$c->__('about.software')}</p>
<p class="all">
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/>
@ -39,17 +45,17 @@
WebSocket and Daemon engine - ReactPHP - <a href="http://socketo.me/">socketo.me</a> ©Chris Boden<br/>
</p>
</li>
<li class="condensed">
<span class="icon bubble color brown"><i class="zmdi zmdi-mood"></i></span>
<span>{$c->__('about.resources')}</span>
<li>
<span class="primary icon bubble color brown"><i class="zmdi zmdi-mood"></i></span>
<p>{$c->__('about.resources')}</p>
<p class="all">
Material Design Iconic Font <a href="http://zavoloklom.github.io/material-design-iconic-font/icons.html">by Google and Sergey Kupletsky</a> under SIL OFL 1.1<br/>
Twemoji <a href="http://twitter.github.io/twemoji/">by Twitter</a> under MIT and CC-BY<br/>
</p>
</li>
<li class="condensed">
<span class="icon bubble color indigo"><i class="zmdi zmdi-import-export"></i></span>
<span>{$c->__('about.api')}</span>
<li>
<span class="primary icon bubble color indigo"><i class="zmdi zmdi-import-export"></i></span>
<p>{$c->__('about.api')}</p>
<p class="all">
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/>

40
app/widgets/Account/account.tpl

@ -1,25 +1,29 @@
<div class="tabelem" title="{$c->__('account.title')}" id="account_widget">
{if="isset($gateway)"}
<ul class="active middle divided">
<li class="subheader">{$c->__('account.gateway_title')}</li>
<ul class="list active middle divided">
<li class="subheader">
<p>{$c->__('account.gateway_title')}</p>
</li>
{loop="$gateway"}
<li class="condensed action" onclick="Account_ajaxGetRegistration('{$value->node}')">
<div class="action">
<i class="zmdi zmdi-chevron-right"></i>
</div>
<span class="icon">
<li onclick="Account_ajaxGetRegistration('{$value->node}')">
<span class="primary icon">
<i class="zmdi zmdi-swap"></i>
</span>
<span>{$value->name}</span>
<span class="control icon gray">
<i class="zmdi zmdi-chevron-right"></i>
</span>
<p>{$value->name}</p>
<p>{$value->node}</p>
</li>
{/loop}
</ul>
{/if}
<ul class="middle active divided ">
<li class="subheader">{$c->__('account.password_change_title')}</li>
<ul class="list middle active divided ">
<li class="subheader">
<p>{$c->__('account.password_change_title')}</p>
</li>
<li>
<span class="icon gray">
<span class="primary icon gray">
<i class="zmdi zmdi-key"></i>
</span>
<form name="password" class="">
@ -38,15 +42,17 @@
</a>
</form>
</li>
<li class="subheader">{$c->__('account.delete_title')}</li>
<li class="action" onclick="Account_ajaxRemoveAccount()">
<span class="icon red">
<li class="subheader">
<p>{$c->__('account.delete_title')}</p>
</li>
<li onclick="Account_ajaxRemoveAccount()">
<span class="primary icon red">
<i class="zmdi zmdi-delete"></i>
</span>
<div class="action">
<span class="control icon gray">
<i class="zmdi zmdi-chevron-right"></i>
</div>
<span>{$c->__('account.delete')}</span>
</span>
<p class="normal">{$c->__('account.delete')}</p>
</li>
</ul>
</div>

16
app/widgets/AdHoc/_adhoc_list.tpl

@ -1,14 +1,16 @@
<ul class="divided active spaced">
<li class="subheader">{$c->__('adhoc.title')}</li>
<ul class="list middle divided active spaced">
<li class="subheader">
<p>{$c->__('adhoc.title')}</p>
</li>
{loop="$list"}
<li class="action" data-node="{$value->attributes()->node}" data-jid="{$value->attributes()->jid}">
<span class="icon gray">
<li data-node="{$value->attributes()->node}" data-jid="{$value->attributes()->jid}">
<span class="primary icon gray">
<i class="zmdi {$c->getIcon((string)$value->attributes()->node)}"></i>
</span>
<div class="action">
<span class="control icon gray">
<i class="zmdi zmdi-chevron-right"></i>
</div>
<span>{$value->attributes()->name}</span>
</span>
<p class="normal">{$value->attributes()->name}</p>
</li>
{/loop}
</ul>

38
app/widgets/AdminDB/admindb.tpl

@ -1,45 +1,47 @@
<div id="admindb" class="tabelem" title="{$c->__('db.legend')}">
<ul class="flex large">
<li class="subheader">{$c->__('db.legend')}</li>
<ul class="list flex large">
<li class="subheader">
<p>{$c->__('db.legend')}</p>
</li>
{if="!$connected"}
<li class="block large condensed">
<span class="icon bubble color red">
<li class="block large">
<span class="primary icon bubble color red">
<i class="zmdi zmdi-code-setting"></i>
</span>
<span>{$c->__('db.connect_error')}</span>
<p>{$c->__('db.connect_error')}</p>
<p>{$errors}</p>
</li>
</li>
{else}
<li class="block large">
<span class="icon bubble color green">
<span class="primary icon bubble color green">
<i class="zmdi zmdi-code-setting"></i>
</span>
<span>{$c->__('db.connect_success')}</span>
<p class="normal">{$c->__('db.connect_success')}</p>
</li>
{if="null !== $infos"}
<li class="block large condensed action">
<div class="action">
<a class="button" onclick="{$db_update}"> {$c->__('button.update')}</a>
</div>
<span class="icon bubble color orange">
<li class="block large">
<span class="primary icon bubble color orange">
<i class="zmdi zmdi-refresh"></i>
</span>
<span>{$c->__('db.update')}</span>
<span class="control">
<a class="button" onclick="{$db_update}"> {$c->__('button.update')}</a>
</span>
<p>{$c->__('db.update')}</p>
{loop="$infos"}
<p>{$value}</p>
{/loop}
</li>
{else}
<li class="block large">
<span class="icon bubble color green">
<i class="zmdi zmdi-refresh"></i>
<span class="primary icon bubble color green">
<i class="zmdi zmdi-refresh"></i>
</span>
<span>{$c->__('db.up_to_date')}</span>
<p class="normal">{$c->__('db.up_to_date')}</p>
</li>
{/if}
{/if}
</ul>
</ul>
<form class="flex padded_top_bottom">
<div class="block">

14
app/widgets/AdminMain/adminmain.tpl

@ -68,9 +68,9 @@
<label for="xmppwhitelist">{$c->__('whitelist.label')}</label>
</div>
<ul class="thick">
<li class="condensed">
<span class="icon bubble color blue">
<ul class="list thick">
<li>
<span class="primary icon bubble color blue">
<i class="zmdi zmdi-info"></i>
</span>
<p>{$c->__('whitelist.info1')}</p>
@ -92,12 +92,12 @@
<label for="info">{$c->__('information.label')}</label>
</div>
<ul class="thick">
<li class="condensed">
<span class="icon bubble color blue">
<ul class="list thick">
<li>
<span class="primary icon bubble color blue">
<i class="zmdi zmdi-info"></i>
</span>
<span>{$c->__('information.info1')}</span>
<p>{$c->__('information.info1')}</p>
<p>{$c->__('information.info2')}</p>
</li>
</ul>

40
app/widgets/Api/api.tpl

@ -1,69 +1,71 @@
<div id="api" class="tabelem paddedtop" title="{$c->__("api.title")}">
<ul>
<li class="subheader">{$infos}</li>
<ul class="list">
<li class="subheader">
<p>{$infos}</p>
</li>
{if="isset($json)"}
{if="$json->status == 200"}
<li>
<span class="icon bubble color green">
<span class="primary icon bubble color green">
<i class="zmdi zmdi-cloud"></i>
</span>
{if="!$unregister_status"}
<div class="action">
<span class="control">
<a class="button oppose" onclick="{$unregister}">
{$c->__('button.unregister')}
</a>
</div>
</span>
{/if}
<span>{$c->__('api.registered')}</span>
<p class="normal">{$c->__('api.registered')}</p>
</li>
{if="$json->pod->activated"}
<li>
<span class="icon bubble color green">
<span class="primary icon bubble color green">
<i class="zmdi zmdi-cloud"></i>
</span>
<span>{$c->__('api.validated')}</span>
<p class="normal">{$c->__('api.validated')}</p>
</li>
{else}
<li>
<span class="icon bubble color gray">
<span class="primary icon bubble color gray">
<i class="zmdi zmdi-cloud-off"></i>
</span>
<span>{$c->__('api.wait')}</span>
<p class="normal">{$c->__('api.wait')}</p>
</li>
{/if}
{if="$unregister_status"}
<li>
<div class="action">
<span class="control">
<a class="button oppose" onclick="{$unregister}">
{$c->__('button.reset')}
</a>
</div>
<span>{$c->__('api.unregister')}</span>
</span>
<p class="normal">{$c->__('api.unregister')}</p>
</li>
{/if}
<script type="text/javascript">AdminTest.enableAPI();</script>
{else}
<li>
<span class="icon bubble color blue">
<span class="primary icon bubble color blue">
<i class="zmdi zmdi-cloud-off"></i>
</span>
<div class="action">
<span class="control">
<a class="button oppose" onclick="{$register}">
{$c->__('button.register')}
</a>
</div>
<span>{$c->__('api.register')}</span>
</span>
<p class="normal">{$c->__('api.register')}</p>
</li>
{/if}
{else}
<li>
<span class="icon bubble color gray">
<span class="primary icon bubble color gray">
<i class="zmdi zmdi-cloud-off"></i>
</span>
{$c->__('api.error')}
<p class="normal">{$c->__('api.error')}</p>
</li>
{/if}
</ul>

23
app/widgets/Avatar/_avatar_form.tpl

@ -24,28 +24,27 @@
</div>
</div>
<div class="block">
<ul class="thick divided">
<li class="condensed">
<span class="icon bubble color green">
<ul class="list thick divided">
<li>
<span class="primary icon bubble color green">
<i class="zmdi zmdi-attachment-alt"></i>
</span>
<span>{$c->__('avatar.file')}</span>
<p>{$c->__('avatar.file')}</p>
<p><input type="file" onchange="Avatar.file(this.files);"></p>
</li>
{if="isset($gravatar)"}
<li class="condensed action">
<div class="action">
<li>
<span class="primary icon bubble color blue">
<img src="http://www.gravatar.com/avatar/{$gravatar->entry[0]->hash}?s=50" />
</span>
<p>Gravatar</p>
<p>We found a Gravatar picture<br />
<a
onclick="Avatar.preview('data:image/jpeg;base64,{$gravatar_bin}')"
class="button flat">
{$c->__('avatar.use_it')}
</a>
</div>
<span class="icon bubble color blue">
<img src="http://www.gravatar.com/avatar/{$gravatar->entry[0]->hash}?s=50" />
</span>
<span>Gravatar</span>
<p>We found a Gravatar picture</p>
</p>
</li>
{/if}
</ul>

42
app/widgets/Blog/blog.tpl

@ -1,8 +1,11 @@
<div class="card shadow" title="{$c->__('page.feed')}" id="blog" >
<ul class="thick">
<ul class="list thick">
{if="$mode == 'blog'"}
<li class="action {if="isset($contact->description)"}condensed{/if}">
<div class="action">
<li>
<span class="primary icon gray">
<i class="zmdi zmdi-edit"></i>
</span>
<span class="control icon">
<a
href="{$c->route('feed', array($contact->jid))}"
target="_blank"
@ -10,22 +13,19 @@
>
<i class="zmdi zmdi-portable-wifi"></i>
</a>
</div>
<span class="icon gray">
<i class="zmdi zmdi-edit"></i>
</span>
{if="$contact"}
<h2>
<p>
<a href="{$c->route('blog', array($contact->jid))}">
{$c->__('blog.title', $contact->getTrueName())}
</a>
</h2>
</p>
{else}
<h2>
<p>
<a href="{$c->route('blog', array($contact->jid))}">
{$c->__('page.blog')}
</a>
</h2>
</p>
{/if}
{if="isset($contact->description)"}
<p>{$contact->description}</p>
@ -82,36 +82,34 @@
{/loop}
{if="isset($more)"}
<article>
<ul class="active">
<ul class="list active">
{if="$mode == 'blog'"}
<a href="{$c->route('blog', array($contact->jid, $more))}">
{else}
<a href="{$c->route('group', array($server, $node, $more))}">
{/if}
<li id="history" class="block large">
<span class="icon"><i class="zmdi zmdi-time-restore"></i></span>
<span>{$c->__('post.older')}</span>
<span class="primary icon"><i class="zmdi zmdi-time-restore"></i></span>
<p class="normal line">{$c->__('post.older')}</p>
</li>
</a>
</ul>
</article>
{/if}
{if="$posts == null"}
<ul class="simple thick">
<ul class="list simple thick">
<li>
<span>{$c->__('blog.empty')}</span>
<p>{$c->__('blog.empty')}</p>
</li>
</ul>
{/if}
<ul>
<ul class="list">
<li>
<a target="_blank" href="https://movim.eu">
<span class="icon">
<i class="zmdi zmdi-cloud-outline"></i>
</span>
<span>Powered by Movim</span>
</a>
<span class="primary icon gray">
<i class="zmdi zmdi-cloud-outline"></i>
</span>
<p class="center normal"><a target="_blank" href="https://movim.eu">Powered by Movim</a></p>
</li>
</ul>
</div>

12
app/widgets/Chat/_chat.tpl

@ -1,17 +1,17 @@
<div id="{$jid}_discussion" class="contained">
<section id="{$jid}_messages">
<ul class="{if="$muc"}thin simple{else}middle{/if}" id="{$jid}_conversation"></ul>
<ul class="list {if="$muc"}thin simple{else}thick{/if}" id="{$jid}_conversation"></ul>
</section>
</div>
<div class="chat_box">
<ul class="thin">
<li class="action">
<span class="icon gray emojis_open" onclick="Chat_ajaxSmiley()">
<ul class="list thin">
<li>
<span class="primary icon gray emojis_open" onclick="Chat_ajaxSmiley()">
<img alt=":smiley:" class="emoji large" src="{$c->getSmileyPath('1f603')}">
</span>
<div class="action" data-jid="{$jid}" onclick="Chat.sendMessage(this.dataset.jid, {if="$muc"}true{else}false{/if})">
<span class="control icon gray" data-jid="{$jid}" onclick="Chat.sendMessage(this.dataset.jid, {if="$muc"}true{else}false{/if})">
<i class="zmdi zmdi-mail-send"></i>
</div>
</span>
<form>
<div>
<textarea

18
app/widgets/Chat/_chat_bubble.tpl

@ -1,21 +1,21 @@
<li {if="$me"}class="oppose"{/if}>
{$url = $contact->getPhoto('s')}
{if="$url"}
{if="$me == null"}<a href="{$c->route('contact', $contact->jid)}">{/if}
<span class="icon bubble">
<span class="{if="$me"}control{else}primary{/if} icon bubble">
{if="$me == null"}<a href="{$c->route('contact', $contact->jid)}">{/if}
<img src="{$url}">
</span>
{if="$me == null"}</a>{/if}
{if="$me == null"}</a>{/if}
</span>
{else}
{if="$me == null"}<a href="{$c->route('contact', $contact->jid)}">{/if}
<span class="icon bubble color {$contact->jid|stringToColor}">
<span class="{if="$me"}control{else}primary{/if} icon bubble color {$contact->jid|stringToColor}">
{if="$me == null"}<a href="{$c->route('contact', $contact->jid)}">{/if}
<i class="zmdi zmdi-account"></i>
</span>
{if="$me == null"}</a>{/if}
{if="$me == null"}</a>{/if}
</span>
{/if}
<div class="bubble">
<div></div>
<p></p>
<span class="info"></span>
</div>
</li>

4
app/widgets/Chat/_chat_bubble_room.tpl

@ -1,5 +1,5 @@
<li class="room">
<p class="user"></p>
<span class="info"></span>
<span class="user"></span>
<div></div>
<p class="message"></p>
</li>

16
app/widgets/Chat/_chat_empty.tpl

@ -3,31 +3,33 @@
<h4>{$c->__('chat.empty_text')}</h4>
</div>
<ul class="flex middle active">
<ul class="list flex middle active">
{if="$top"}
<li class="subheader block large">{$c->__('chat.frequent')}</li>
<li class="subheader block large">
<p>{$c->__('chat.frequent')}</p>
</li>
{/if}
{loop="$top"}
<li class="condensed block {if="$value->last > 60"} inactive{/if}"
<li class="block {if="$value->last > 60"} inactive{/if}"
onclick="Chats_ajaxOpen('{$value->jid}'); Chat_ajaxGet('{$value->jid}');">
{$url = $value->getPhoto('s')}
{if="$url"}
<span class="icon bubble
<span class="primary icon bubble
{if="$value->value"}
status {$presencestxt[$value->value]}
{/if}">
<img src="{$url}">
</span>
{else}
<span class="icon bubble color {$value->jid|stringToColor}
<span class="primary icon bubble color {$value->jid|stringToColor}
{if="$value->value"}
status {$presencestxt[$value->value]}
{/if}">
<i class="zmdi zmdi-account"></i>
</span>
{/if}
<span>{$value->getTrueName()}</span>
<p class="wrap">{$value->jid}</p>
<p>{$value->getTrueName()}</p>
<p>{$value->jid}</p>
</li>
{/loop}
</ul>

64
app/widgets/Chat/_chat_header.tpl

@ -1,46 +1,40 @@
<div>
<ul class="active">
<li onclick="Rooms_ajaxAdd()">
<span class="icon">
<i class="zmdi zmdi-group-add"></i>
</span>
<ul class="list middle">
<li>
<span class="primary on_desktop icon"><i class="zmdi zmdi-comments"></i></span>
<p>
{$c->__('page.chats')}
</p>
</li>
</ul>
<span class="on_desktop icon"><i class="zmdi zmdi-comments"></i></span>
<h2 class="r1">
{$c->__('page.chats')}
</h2>
</div>
<div>
<ul class="active">
{if="$c->supported('upload')"}
<li onclick="Upload_ajaxRequest()">
<span class="icon">
<i class="zmdi zmdi-attachment-alt"></i>
<ul class="list middle active">
<li id="chat_header">
<span onclick="
MovimTpl.hidePanel();
Notification.current('chat');
Header_ajaxReset('chat');
Chat_ajaxGet();"
id="back" class="primary icon active">
<i class="zmdi zmdi-arrow-back"></i>
</span>
</li>
{/if}
<li onclick="Chats_ajaxClose('{$jid|echapJS}'); MovimTpl.hidePanel();">
<span class="icon">
<span class="control icon active" onclick="Chats_ajaxClose('{$jid|echapJS}'); MovimTpl.hidePanel();">
<i class="zmdi zmdi-close"></i>
</span>
{if="$c->supported('upload')"}
<span class="control icon active" onclick="Upload_ajaxRequest()">
<i class="zmdi zmdi-attachment-alt"></i>
</span>
{/if}
<p class="line">
{if="$contact != null"}
{$contact->getTrueName()}
{else}
{$jid|echapJS}
{/if}
</p>
<p class="line" id="{$jid}_state">{$contact->jid}</p>
</li>
</ul>
<div
id="chat_header"
class="return active {if="$c->supported('upload')"}r2{else}r1{/if} condensed"
onclick="
MovimTpl.hidePanel();
Notification.current('chat');
Chat_ajaxGet();">
<span id="back" class="icon"><i class="zmdi zmdi-arrow-back"></i></span>
<h2>
{if="$contact != null"}
{$contact->getTrueName()}
{else}
{$jid|echapJS}
{/if}
</h2>
<h4 id="{$jid}_state">{$contact->jid}</h4>
</h2>
</div>

91
app/widgets/Chat/_chat_header_room.tpl

@ -1,76 +1,75 @@
{$anon = $c->supported('anonymous')}
<div>
{if="!$anon"}
<ul class="active">
<!--<ul class="active">
<li onclick="Rooms_ajaxAdd()">
<span class="icon">
<i class="zmdi zmdi-group-add"></i>
</span>
</li>
</ul>
{/if}
<span class="on_desktop icon"><i class="zmdi zmdi-comments"></i></span>
{if="!$anon"}
<h2>{$c->__('page.chats')}</h2>
{else}
<h2>{$c->__('page.room')}</h2>
</ul>-->
{/if}
<ul class="list middle">
<li>
<span class="primary on_desktop icon"><i class="zmdi zmdi-comments"></i></span>
{if="!$anon"}
<p>{$c->__('page.chats')}</p>
{else}
<p>{$c->__('page.room')}</p>
{/if}
</li>
</ul>
</div>
<div>
<ul class="active">
{if="$c->supported('upload')"}
<li onclick="Upload_ajaxRequest()">
<span class="icon">
<i class="zmdi zmdi-attachment-alt"></i>
<ul class="list middle active">
<li>
<span id="back" class="primary icon active" {if="!$anon"}onclick="Header_ajaxReset('chat'); MovimTpl.hidePanel(); Chat_ajaxGet();"{/if}>
{if="!$anon"}
<i class="zmdi zmdi-arrow-back"></i>
{else}
<i class="zmdi zmdi-comment-text-alt"></i>
{/if}
</span>
</li>
{/if}
<li onclick="Rooms_ajaxExit('{$room}'); MovimTpl.hidePanel(); {if="$anon"}Presence_ajaxLogout(){/if}">
<span class="icon">
<i class="zmdi zmdi-close"></i>
</span>
</li>
<li class="thin show_context_menu">
<span class="icon">
<span class="control icon show_context_menu active">
<i class="zmdi zmdi-more-vert"></i>
</span>
</li>
</ul>
<div
class="return {if="!$anon"}active{/if} {if="$c->supported('upload')"}r3{else}r2{/if} {if="$subject != null"}condensed{/if}"
{if="!$anon"}onclick="MovimTpl.hidePanel(); Chat_ajaxGet();"{/if}>
<span id="back" class="icon" >
{if="!$anon"}
<i class="zmdi zmdi-arrow-back"></i>
{if="$c->supported('upload')"}
<span class="control icon active" onclick="Upload_ajaxRequest()">
<i class="zmdi zmdi-attachment-alt"></i>
</span>
{/if}
<span class="control icon active" onclick="Rooms_ajaxExit('{$room}'); MovimTpl.hidePanel(); {if="$anon"}Presence_ajaxLogout(){/if}">
<i class="zmdi zmdi-close"></i>
</span>
{if="$conference != null && $conference->name"}
<p class="line" title="{$room}">{$conference->name}</p>
{else}
<i class="zmdi zmdi-comment-text-alt"></i>
<p class="line">{$room}</p>
{/if}
{if="$subject != null"}
<p class="line" title="{$subject->subject}">{$subject->subject}</p>
{/if}
</span>
</li>
</ul>
{if="$conference != null && $conference->name"}
<h2 title="{$room}">{$conference->name}</h2>
{else}
<h2>{$room}</h2>
{/if}
{if="$subject != null"}
<h4 title="{$subject->subject}">{$subject->subject}</h4>
{/if}
</div>
<ul class="simple context_menu active">
<ul class="list context_menu active">
<li onclick="Rooms_ajaxList('{$room}')">
<span>{$c->__('chatroom.members')}</span>
<p class="normal">{$c->__('chatroom.members')}</p>
</li>
{if="!$anon"}
<li onclick="Rooms_ajaxRemoveConfirm('{$room}')">
<span>{$c->__('button.delete')}</span>
<p class="normal">{$c->__('button.delete')}</p>
</li>
{/if}
{if="$presence != null && $presence->mucrole == 'moderator' && !$anon"}
<li onclick="Chat_ajaxGetRoomConfig('{$room}')">
<span>{$c->__('chatroom.config')}</span>
<p class="normal">{$c->__('chatroom.config')}</p>
</li>
<li onclick="Chat_ajaxGetSubject('{$room}')">
<span>{$c->__('chatroom.subject')}</span>
<p class="normal">{$c->__('chatroom.subject')}</p>
</li>
{/if}
</ul>

61
app/widgets/Chat/chat.css

@ -23,7 +23,7 @@
}
#chat_widget .chat_box form {
width: calc(100% - 1rem);
width: calc(100% - 5rem);
}
#chat_widget .chat_box form > div {
@ -35,25 +35,32 @@
padding: 3rem 0px 1rem;
}
#chat_widget .chat_box div.action {
#chat_widget .chat_box span.control {
font-size: 4rem;
color: gray;
}
#chat_widget .chat_box div.action:hover {
#chat_widget .chat_box span.control:hover {
cursor: pointer;
color: #333;
}
#chat_widget section {
margin-bottom: 1rem;
padding-bottom: 2rem;
}
#chat_width li > p {
font-size: 2rem;
}
/* Chatroom */
#chat_widget ul.simple {
padding-left: 2rem;
}
#chat_widget li span.icon {
top: 0%;
margin-top: 0.85rem;
top: 4rem;
}
#chat_widget li img:not(.emoji):not(.hfr) {
@ -61,11 +68,51 @@
max-width: 100%;
display: block;
}
#chat_widget li.room {
padding: 0.25rem 0;
}
#chat_widget li.room > p {
font-size: 2rem;
display: inline;
}
#chat_widget li.room span.info {
float: right;
width: auto;
margin-top: 0.5rem;
}
#chat_widget li.room:first-child {
margin-top: 1rem;
}
#chat_widget li.room p.user {
font-weight: 700;
padding: 0;
}
#chat_widget li.room > p.message {
color: black;
padding-left: 1rem;
}
#chat_widget li.room p.user:hover {
cursor: pointer;
}
#chat_widget ul:after {
content: " ";
display: block;
clear: both;
}
/*
#chat_widget li img.emoji {
padding: 0.25rem;
}
*/
/*
#chat_widget li.room {
min-height: 3rem;
margin-bottom: 0.5rem;
@ -93,6 +140,7 @@
#chat_widget li.room span.user:hover {
cursor: pointer;
}
*/
#chat_widget .placeholder {
padding-top: 37em;
@ -117,6 +165,7 @@ table.emojis td:hover {
@media screen and (max-width: 1024px) {
#chat_widget .chat_box {
width: 100%;
left: 0;
}
#chat_widget .chat_box ul {

14
app/widgets/Chat/chat.js

@ -88,23 +88,23 @@ var Chat = {
message.body = message.body.substr(4);
}
bubble.querySelector('div').innerHTML = message.body;
bubble.querySelector('p.message').innerHTML = message.body;
bubble.querySelector('span.info').innerHTML = message.publishedPrepared;
bubble.querySelector('span.user').className = 'user ' + message.color;
bubble.querySelector('p.user').className = 'user ' + message.color;
bubble.querySelector('span.user').onclick = function(n) {
bubble.querySelector('p.user').onclick = function(n) {
var textarea = document.querySelector('#chat_textarea');
textarea.value = this.innerHTML + ', ' + textarea.value;
textarea.focus();
};
bubble.querySelector('span.user').innerHTML = message.resource;
bubble.querySelector('p.user').innerHTML = message.resource;
var conversation = document.getElementById(id);
if(conversation) {
conversation.appendChild(bubble);
}
bubble.querySelector('div').className = '';
//bubble.querySelector('p.message').className = '';
} else if(Chat.left != null) {
if(message.session == message.jidfrom) {
bubble = Chat.right.cloneNode(true);
@ -130,9 +130,9 @@ var Chat = {
}
if(bubble) {
bubble.querySelector('div.bubble div').innerHTML = message.body;
bubble.querySelector('div.bubble > p').innerHTML = message.body;
bubble.querySelector('div.bubble span.info').innerHTML = message.publishedPrepared;
bubble.querySelector('div.bubble > span.info').innerHTML = message.publishedPrepared;
if(prepend) {
Chat.date = message.published;

2
app/widgets/Chat/chat.tpl

@ -1,4 +1,4 @@
<div id="chat_widget" {if="$jid"}data-jid="{$jid}"{/if}>
<div id="chat_widget" {if="$jid"}data-jid="{$jid}"{/if} style="background-color: #EEE;">
{if="$jid"}
{$c->prepareChat($jid)}
{else}

20
app/widgets/Chats/_chats_add.tpl

@ -1,37 +1,39 @@
<section class="scroll">
<h3>{$c->__('chats.add')}</h3>
<ul class="active" id="add_extend">
<li class="subheader">{$c->__('chats.frequent')}</li>
<ul class="list active" id="add_extend">
<li class="subheader">
<p>{$c->__('chats.frequent')}</p>
</li>
{loop="$top"}
{if="!in_array($value->jid, $chats)"}
<li class="condensed {if="$value->last > 60"} inactive{/if}"
<li class="{if="$value->last > 60"} inactive{/if}"
onclick="Chats_ajaxOpen('{$value->jid}'); Dialog.clear()">
{$url = $value->getPhoto('s')}
{if="$url"}
<span class="icon bubble
<span class="primary icon bubble
{if="$value->value"}
status {$presencestxt[$value->value]}
{/if}">
<img src="{$url}">
</span>
{else}
<span class="icon bubble color {$value->jid|stringToColor}
<span class="primary icon bubble color {$value->jid|stringToColor}
{if="$value->value"}
status {$presencestxt[$value->value]}
{/if}">
<i class="zmdi zmdi-account"></i>
</span>
{/if}
<span>{$value->getTrueName()}</span>
<p class="wrap">{$value->jid}</p>
<p class="line">{$value->getTrueName()}</p>
<p class="line">{$value->jid}</p>
</li>
{/if}
{/loop}
<li onclick="Chats_ajaxAddExtend()">
<span class="icon">
<span class="primary icon">
<i class="zmdi zmdi-plus"></i>
</span>
<span>{$c->__('chats.more')}</span>
<p class="normal">{$c->__('chats.more')}</p>
</li>
</ul>
<br />

14
app/widgets/Chats/_chats_add_extend.tpl

@ -2,21 +2,23 @@
{$group = ''}
{loop="$contacts"}
{if="$group != $value->groupname"}
<li class="subheader">{$value->groupname}</li>
<li class="subheader">
<p>{$value->groupname}</p>
</li>
{/if}
<li class="condensed" onclick="Chats_ajaxOpen('{$value->jid}'); Dialog.clear()">
<li onclick="Chats_ajaxOpen('{$value->jid}'); Dialog.clear()">
{$url = $value->getPhoto('s')}
{if="$url"}
<span class="icon bubble">
<span class="primary icon bubble">
<img src="{$url}">
</span>
{else}
<span class="icon bubble color {$value->jid|stringToColor}">
<span class="primary icon bubble color {$value->jid|stringToColor}">
<i class="zmdi zmdi-account"></i>
</span>
{/if}
<span>{$value->getTrueName()}</span>
<p class="wrap">{$value->jid}</p>
<p class="line">{$value->getTrueName()}</p>
<p class="line">{$value->jid}</p>
</li>
{$group = $value->groupname}
{/loop}

35
app/widgets/Chats/_chats_item.tpl

@ -9,36 +9,39 @@
{/if}
"
title="{$contact->jid}">
{if="$caps && in_array($caps->type, array('handheld', 'phone'))"}
<div class="action">
<i class="zmdi zmdi-smartphone"></i>
</div>
{/if}
{if="$caps && $caps->type == 'web'"}
<div class="action">
<i class="zmdi zmdi-globe-alt"></i>
</div>
{/if}
<span data-key="chat|{$contact->jid}" class="counter bottom"></span>
{$url = $contact->getPhoto('s')}
{if="$url"}
<span class="icon bubble {if="isset($presence)"}status {$presence}{/if}">
<span class="primary icon bubble {if="isset($presence)"}status {$presence}{/if}">
<img src="{$url}">
</span>
{else}
<span class="icon bubble color {$contact->jid|stringToColor} {if="isset($presence)"}status {$presence}{/if}">
<span class="primary icon bubble color {$contact->jid|stringToColor} {if="isset($presence)"}status {$presence}{/if}">
<i class="zmdi zmdi-account"></i>
</span>
{/if}
<span>{$contact->getTrueName()}</span>
{if="$caps && in_array($caps->type, array('handheld', 'phone'))"}
<span class="control icon gray">
<i class="zmdi zmdi-smartphone"></i>
</span>
{/if}
{if="$caps && $caps->type == 'web'"}
<span class="control icon gray">
<i class="zmdi zmdi-globe-alt"></i>
</span>
{/if}
<span data-key="chat|{$contact->jid}" class="counter bottom"></span>
<p class="normal">
<span class="info">{$message->published|strtotime|prepareDate}</span>
{$contact->getTrueName()}
</p>
{if="isset($status)"}
<p>{$status}</p>
{else}
{if="isset($message)"}
<span class="info">{$message->published|strtotime|prepareDate}</span>
{if="preg_match('#^\?OTR#', $message->body)"}
<p><i class="zmdi zmdi-lock"></i> {$c->__('message.encrypted')}</p>
{else}
{elseif="stripTags(prepareString($message->body)) != ''"}
<p>{$message->body|prepareString|stripTags}</p>
{/if}
{/if}

2
app/widgets/Chats/chats.tpl

@ -1,4 +1,4 @@
<ul id="chats_widget_list" class="middle active divided spaced">{$list}</ul>
<ul id="chats_widget_list" class="list middle active divided spaced">{$list}</ul>
<div class="placeholder icon">
<h1>{$c->__('chats.empty_title')}</h1>

10
app/widgets/Contact/Contact.php

@ -43,6 +43,7 @@ class Contact extends WidgetBase
Header::fill($header);
RPC::call('movim_fill', 'contact_widget', $html);
RPC::call('MovimTpl.showPanel');
RPC::call('MovimTpl.scrollHeaders');
}
function ajaxEditSubmit($form)
@ -226,6 +227,15 @@ class Contact extends WidgetBase
$presencestxt = getPresencesTxt();
$view->assign('edit',
$this->call(
'ajaxEditContact',
"'".echapJS($jid)."'"));
$view->assign('delete',
$this->call(
'ajaxDeleteContact',
"'".echapJS($jid)."'"));
if(isset($c)) {
$view->assign('mood', getMood());

334
app/widgets/Contact/_contact.tpl

@ -1,95 +1,124 @@
{if="$contact != null"}
{$url = $contact->getPhoto('s')}
<div class="block">
<header class="big"
{if="$url"}
style="background-image: linear-gradient(to bottom, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0) 100%), url('{$contact->getPhoto('xxl')}');"
{else}
style="background-color: rgba(62,81,181,1);"
{/if}
>
<ul class="thick">
<li class="condensed">
{if="$url"}
<span class="icon bubble color {if="isset($presence)"}status {$presence}{/if}">
<img src="{$url}">
</span>
<header class="big"
{if="$url"}
style="background-image: linear-gradient(to bottom, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0) 100%), url('{$contact->getPhoto('xxl')}');"
{else}
style="background-color: rgba(62,81,181,1);"
{/if}
>
<ul class="list middle">
<li>
<span class="primary icon active" onclick="MovimTpl.hidePanel(); Contact_ajaxClear({$page});">
<i class="zmdi zmdi-arrow-back"></i>
</span>
{if="$contactr != null"}
<span class="control icon active" onclick="{$edit}">
<i class="zmdi zmdi-edit"></i>
</span>
<span class="control icon active" onclick="{$delete}">
<i class="zmdi zmdi-delete"></i>
</span>
<p class="line">{$contactr->getTrueName()}</p>
{else}
<span class="control icon active" onclick="Roster_ajaxDisplaySearch('{$jid}')">
<i class="zmdi zmdi-account-add"></i>
</span>
{if="$contact != null"}
<p class="line">{$contact->getTrueName()}</p>
{else}
<span class="icon bubble color {$contact->jid|stringToColor} {if="isset($presence)"}status {$presence}{/if}">
<i class="zmdi zmdi-account"></i>
</span>
<p class="line">{$jid}</p>
{/if}
{/if}
</li>
</ul>
<ul class="list thick">
<li>
{if="$url"}
<span class="primary icon bubble color {if="isset($presence)"}status {$presence}{/if}">
<img src="{$url}">
</span>
{else}
<span class="primary icon bubble color {$contact->jid|stringToColor} {if="isset($presence)"}status {$presence}{/if}">
<i class="zmdi zmdi-account"></i>
</span>
{/if}
<p class="line">{$contact->getTrueName()}</p>
<p class="line">{$contact->jid}</p>
</li>
<!--
{if="$caps"}
<li>
<span class="icon">
<i class="zmdi
{if="$caps->type == 'handheld' || $caps->type == 'phone'"}
zmdi-smartphone-android
{elseif="$caps->type == 'bot'"}
zmdi-memory
{else}
zmdi-laptop
{/if}
">
</i>
</span>
<span>
<h2>{$contact->getTrueName()}</h2>
{$caps->name}
{if="isset($clienttype[$caps->type])"}
- {$clienttype[$caps->type]}
{/if}
</span>
<p>{$contact->jid}</p>
</li>
{if="$caps"}
<li>
<span class="icon">
<i class="zmdi
{if="$caps->type == 'handheld' || $caps->type == 'phone'"}
zmdi-smartphone-android
{elseif="$caps->type == 'bot'"}
zmdi-memory
{else}
zmdi-laptop
{/if}
">
</i>
</span>
<span>
{$caps->name}
{if="isset($clienttype[$caps->type])"}
- {$clienttype[$caps->type]}
{/if}
</span>
</li>
{/if}
</ul>
</header>
{/if}-->
</ul>
</header>
<div class="block">
<a onclick="{$chat}" class="button action color red">
<i class="zmdi zmdi-comment-text-alt"></i>
</a>
<ul class="flex">
<ul class="list flex">
{if="$contact->delay != null"}
<li class="condensed block">
<li class="block">
<span class="icon brown"><i class="zmdi zmdi-restore"></i></span>
<span>{$c->__('last.title')}</span>
<p>{$c->__('last.title')}</p>
<p>{$contact->delay}</p>
</li>
{/if}
{if="$contact->fn != null"}
<li class="condensed block">
<span class="icon gray">{$contact->fn|firstLetterCapitalize}</span>
<span>{$c->__('general.name')}</span>
<li class="block">
<span class="primary icon gray">{$contact->fn|firstLetterCapitalize}</span>
<p>{$c->__('general.name')}</p>
<p>{$contact->fn}</p>
</li>
{/if}
{if="$contact->nickname != null"}
<li class="condensed block">
<span class="icon gray">{$contact->nickname|firstLetterCapitalize}</span>
<span>{$c->__('general.nickname')}</span>
<li class="block">
<span class="primary icon gray">{$contact->nickname|firstLetterCapitalize}</span>
<p>{$c->__('general.nickname')}</p>
<p>{$contact->nickname}</p>
</li>
{/if}
{if="strtotime($contact->date) != 0"}
<li class="condensed block">
<span class="icon gray"><i class="zmdi zmdi-cake"></i></span>
<span>{$c->__('general.date_of_birth')}</span>
<li class="block">
<span class="primary icon gray"><i class="zmdi zmdi-cake"></i></span>
<p>{$c->__('general.date_of_birth')}</p>
<p>{$contact->date|strtotime|prepareDate:false}</p>
</li>
{/if}
{if="$contact->url != null"}
<li class="condensed block">
<span class="icon gray"><i class="zmdi zmdi-link"></i></span>
<span>{$c->__('general.website')}</span>
<p class="wrap">
<li class="block">
<span class="primary icon gray"><i class="zmdi zmdi-link"></i></span>
<p>{$c->__('general.website')}</p>
<p>
{if="filter_var($contact->url, FILTER_VALIDATE_URL)"}
<a href="{$contact->url}" target="_blank">{$contact->url}</a>
{else}
@ -100,42 +129,42 @@
{/if}
{if="$contact->email != null"}
<li class="condensed block">
<span class="icon gray"><i class="zmdi zmdi-email"></i></span>
<span>{$c->__('general.email')}</span>
<li class="block">
<span class="primary icon gray"><i class="zmdi zmdi-email"></i></span>
<p>{$c->__('general.email')}</p>
<p><img src="{$contact->getPhoto('email')}"/></p>
</li>
{/if}
{if="$contact->getMarital() != null"}
<li class="condensed block">
<span class="icon gray"><i class="zmdi zmdi-accounts"></i></span>
<span>{$c->__('general.marital')}</span>
<li class="block">
<span class="primary icon gray"><i class="zmdi zmdi-accounts"></i></span>
<p>{$c->__('general.marital')}</p>
<p>{$contact->getMarital()}</p>
</li>
{/if}
{if="$contact->getGender() != null"}
<li class="condensed block">
<span class="icon gray"><i class="zmdi zmdi-face"></i></span>
<span>{$c->__('general.gender')}</span>
<li class="block">
<span class="primary icon gray"><i class="zmdi zmdi-face"></i></span>
<p>{$c->__('general.gender')}</p>
<p>{$contact->getGender()}</p>
</li>
{/if}
{if="$contactr->delay != null"}
<li class="condensed block">
<span class="icon gray"><i class="zmdi zmdi-time-countdown"></i></span>
<span>{$c->__('last.title')}</span>
<li class="block">
<span class="primary icon gray"><i class="zmdi zmdi-time-countdown"></i></span>
<p>{$c->__('last.title')}</p>
<p>{$contactr->delay|strtotime|prepareDate}</p>
</li>
{/if}
{if="$contact->mood != null"}
{$moods = unserialize($contact->mood)}
<li class="condensed block">
<span class="icon gray"><i class="zmdi zmdi-mood"></i></span>
<span>{$c->__('mood.title')}</span>
<li class="block">
<span class="primary icon gray"><i class="zmdi zmdi-mood"></i></span>
<p>{$c->__('mood.title')}</p>
<p>{loop="$moods"}
{$mood[$value]}
{/loop}
@ -144,9 +173,9 @@
{/if}
{if="$contact->description != null && trim($contact->description) != ''"}
<li class="condensed block large">
<span class="icon gray"><i class="zmdi zmdi-format-align-justify"></i></span>
<span>{$c->__('general.about')}</span>
<li class="pblock large">
<span class="primary icon gray"><i class="zmdi zmdi-format-align-justify"></i></span>
<p>{$c->__('general.about')}</p>
<p class="all">{$contact->description}</p>
</li>
{/if}
@ -154,37 +183,39 @@
<br />
{if="$blog != null"}
<ul class="active block flex">
<li class="block large subheader">{$c->__('blog.last')}</li>
<ul class="list middle active block flex">
<li class="block large subheader">
<p>{$c->__('blog.last')}</p>
</li>
{loop="$blog"}
<li class="block condensed" onclick="movim_reload('{$c->route('news', $value->nodeid)}')">
<li class="block" onclick="movim_reload('{$c->route('news', $value->nodeid)}')">
{$url = $value->getContact()->getPhoto('l')}
{if="$url"}
<span class="icon bubble" style="background-image: url({$url});">
<span class="primary icon bubble" style="background-image: url({$url});">
</span>
{else}
<span class="icon thumb color {$value->getContact()->jid|stringToColor}">
<span class="primary icon thumb color {$value->getContact()->jid|stringToColor}">
<i class="zmdi zmdi-account"></i>
</span>
{/if}
{if="$value->title != null"}
<span>{$value->title}</span>
<p class="line">{$value->title}</p>
{else}
<span>{$c->__('hello.contact_post')}</span>
<p class="line">{$c->__('hello.contact_post')}</p>
{/if}
<p>{$value->published|strtotime|prepareDate}</p>
<p>{$value->contentcleaned|strip_tags}</p>
<span class="info">{$value->published|strtotime|prepareDate}</span>
</li>
{/loop}
<a href="{$c->route('blog', array($contact->jid))}" target="_blank" class="block large">
<li class="action">
<div class="action">
<i class="zmdi zmdi-chevron-right"></i>
</div>
<span class="icon">
<li>
<span class="primary icon">
<i class="zmdi zmdi-portable-wifi"></i>
</span>
<span>{$c->__('blog.visit')}</span>
<span class="control icon">
<i class="zmdi zmdi-chevron-right"></i>
</span>
<p class="normal">{$c->__('blog.visit')}</p>
</li>
</a>
</ul>
@ -192,35 +223,36 @@
{$album = $contact->getAlbum()}
{if="$album"}
<ul class="flex">
<li class="subheader block large">{$c->__('general.tune')}</li>
<ul class="list flex">
<li class="subheader block large">
<p>{$c->__('general.tune')}</p>
</li>
<li class="
block
{if="$contact->tunetitle"}condensed{/if}
action
">
<div class="action">
<a href="{$album->url}" target="_blank">
<i class="zmdi zmdi-radio"></i>
</a>
</div>
<span class="icon bubble">
<span class="primary icon bubble">
{if="isset($album->url)"}
<img src="{$album->url}"/>
{else}
<i class="zmdi zmdi-play-circle-fill"></i>
{/if}
</span>
<span>
<span class="control icon">
<a href="{$album->url}" target="_blank">
<i class="zmdi zmdi-radio"></i>
</a>
</span>
<p>
{if="$contact->tuneartist"}
{$contact->tuneartist} -
{/if}
{if="$contact->tunesource"}
{$contact->tunesource}
{/if}
</span>
</p>
{if="$contact->tunetitle"}
<p>{$contact->tunetitle}</p>
{/if}
@ -230,25 +262,23 @@
{/if}
{if="$contact->adrlocality != null || $contact->adrcountry != null"}
<ul class="flex">
<li class="subheader block large">{$c->__('position.legend')}</li>
<ul class="list flex">
<li class="subheader block large">
<p>{$c->__('position.legend')}</p>
</li>
{if="$contact->adrlocality != null"}
<li class="condensed block">
<span class="icon gray"><i class="zmdi zmdi-city"></i></span>
<span>{$c->__('position.locality')}</span>
<p>
{$contact->adrlocality}
</p>
<li class="block">
<span class="primary icon gray"><i class="zmdi zmdi-city"></i></span>
<p>{$c->__('position.locality')}</p>
<p>{$contact->adrlocality}</p>
</li>
{/if}
{if="$contact->adrcountry != null"}
<li class="condensed block">
<span class="icon gray"><i class="zmdi zmdi-pin"></i></span>
<span>{$c->__('position.country')}</span>
<p>
{$contact->adrcountry}
</p>
<li class="block">
<span class="primary icon gray"><i class="zmdi zmdi-pin"></i></span>
<p>{$c->__('position.country')}</p>
<p>{$contact->adrcountry}</p>
</li>
{/if}
</ul>
@ -257,15 +287,17 @@
<div class="clear"></div>
{if="$contact->twitter != null || $contact->skype != null || $contact->yahoo != null"}
<ul class="flex">
<li class="subheader block large">{$c->__('general.accounts')}</li>
<ul class="list flex">
<li class="subheader block large">
<p>{$c->__('general.accounts')}</p>
</li>
{if="$contact->twitter != null"}
<li class="condensed block">
<span class="icon gray">
<li class="block">
<span class="primary icon gray">
<i class="zmdi zmdi-twitter"></i>
</span>
<span>Twitter</span>
<p>Twitter</p>
<p>
<a
target="_blank"
@ -276,9 +308,9 @@
</li>
{/if}
{if="$contact->skype != null"}
<li class="condensed block">
<span class="icon gray">S</span>
<span>Skype</span>
<li class="block">
<span class="primary icon gray">S</span>
<p>Skype</p>
<p>
<a
target="_blank"
@ -289,9 +321,9 @@
</li>
{/if}
{if="$contact->yahoo != null"}
<li class="condensed block">
<span class="icon gray">Y</span>
<span>Yahoo!</span>
<li class="block">
<span class="primary icon gray">Y</span>
<p>Yahoo!</p>
<p>
<a
target="_blank"
@ -306,8 +338,10 @@
{/if}
{if="isset($gallery)"}
<ul>
<li class="subheader">{$c->__('page.gallery')}</li>
<ul class="list">
<li class="subheader">
<p>{$c->__('page.gallery')}</p>
</li>
</ul>
<ul class="grid active padded">
{loop="$gallery"}
@ -324,38 +358,44 @@
{if="$contactr && $contactr->rostersubscription != 'both'"}
<div class="card">
<ul class="middle">
<li class="condensed">
<ul class="list middle">
<li>
{if="$contactr->rostersubscription == 'to'"}
<span class="icon gray">
<span class="primary icon gray">
<i class="zmdi zmdi-arrow-in"></i>
</span>
<span>{$c->__('subscription.to')}</span>
<p>{$c->__('subscription.to')}</p>
<p>{$c->__('subscription.to_text')}</p>
<a class="button flat" onclick="Notifs_ajaxAccept('{$contactr->jid}')">
{$c->__('subscription.to_button')}
</a>
<p>
<a class="button flat" onclick="Notifs_ajaxAccept('{$contactr->jid}')">
{$c->__('subscription.to_button')}
</a>
</p>
{/if}
{if="$contactr->rostersubscription == 'from'"}
<span class="icon gray">
<span class="primary icon gray">
<i class="zmdi zmdi-arrow-out"></i>
</span>
<span>{$c->__('subscription.from')}</span>
<p>{$c->__('subscription.from')}</p>
<p>{$c->__('subscription.from_text')}</p>
<a class="button flat" onclick="Notifs_ajaxAsk('{$contactr->jid}')">
{$c->__('subscription.from_button')}
</a>
<p>
<a class="button flat" onclick="Notifs_ajaxAsk('{$contactr->jid}')">
{$c->__('subscription.from_button')}
</a>
</p>
{/if}
{if="$contactr->rostersubscription == 'none'"}
<span class="icon gray">
<span class="primary icon gray">
<i class="zmdi zmdi-block"></i>
</span>
<span>{$c->__('subscription.nil')}</span>
<p>{$c->__('subscription.nil')}</p>
<p>{$c->__('subscription.nil_text')}</p>
<a class="button flat" onclick="Notifs_ajaxAsk('{$contactr->jid}')">
{$c->__('subscription.nil_button')}
</a>
<p>
<a class="button flat" onclick="Notifs_ajaxAsk('{$contactr->jid}')">
{$c->__('subscription.nil_button')}
</a>
</p>
{/if}
</li>
</ul>

6
app/widgets/Contact/_contact_empty.tpl

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

2
app/widgets/Contact/_contact_explore.tpl

@ -1,6 +1,6 @@
<br />
<h2>{$c->__('explore.explore')}</h2>
<ul id="public_list" class="flex card shadow active middle">
<ul id="public_list" class="list flex card shadow active middle">
{$users}
</ul>

33
app/widgets/Contact/_contact_public.tpl

@ -1,24 +1,25 @@
{loop="$users"}
<li class="{if="$value->description != ''"}condensed{/if} block" style="background-image: url();" onclick="Contact_ajaxGetContact('{$value->jid}', {$page});">
<li class="block" style="background-image: url();" onclick="Contact_ajaxGetContact('{$value->jid}', {$page});">
{$url = $value->getPhoto('s')}
{if="$url"}
<span class="icon bubble">
<span class="primary icon bubble">
<img src="{$url}">
</span>
{else}
<span class="icon bubble color {$value->jid|stringToColor}">
<span class="primary icon bubble color {$value->jid|stringToColor}">
<i class="zmdi zmdi-account"></i>
</span>
{/if}
<span>{$value->getTrueName()}</span>
{if="$value->getAge()"}
<span class="info">{$c->__('age.years', $value->getAge())}</span>
{/if}
{if="$value->getGender()"}
<span class="info">{$value->getGender()}</span>
{/if}
<p class="normal">
{if="$value->getAge()"}
<span class="info">{$c->__('age.years', $value->getAge())}</span>
{/if}
{if="$value->getGender()"}
<span class="info">{$value->getGender()}</span>
{/if}
{$value->getTrueName()}
</p>
{if="$value->description != ''"}
<p>
@ -28,12 +29,14 @@
</li>
{/loop}
{if="$pages"}
<li class="block condensed">
<span class="icon gray">
<i class="zmdi zmdi-my-library-books"></i>
<li class="block">
<span class="primary icon gray">
<i class="zmdi zmdi-book"></i>
</span>
{loop="$pages"}
<a onclick="Contact_ajaxPublic('{$key}');" class="button flat {if="$key == $page"}on{/if}">{$key+1}</a>
<p>
<a onclick="Contact_ajaxPublic('{$key}');" class="button flat {if="$key == $page"}on{/if}">{$key+1}</a>
</p>
{/loop}
</li>
{/if}

24
app/widgets/Group/_group_empty.tpl

@ -2,34 +2,38 @@
<h1>{$c->__('group.empty_title')}</h1>
<h4>{$c->__('group.empty_text')}</h4>
</div>
<ul class="card thick">
<ul class="list card thick">
<li class="block">
<span class="icon gray">
<span class="primary icon gray">
<i class="zmdi zmdi-help"></i>
</span>
<p class="all">
{$c->__('group.help_info1')}<br />
<br />
{$c->__('group.help_info1')}
</p>
<p>
{$c->___('group.help_info2', '<i class="zmdi zmdi-bookmark"></i>', '<i class="zmdi zmdi-plus"></i> ')}<br />
{$c->___('group.help_info3', '<i class="zmdi zmdi-edit"></i>')}<br />
<br />
</p>
<p>
{$c->___('group.help_info4', '<a href="'.$c->route('news').'"><i class="zmdi zmdi-receipt"></i> ','</a>')}
</p>
</li>
</ul>
<h2>{$c->__('group.servers')}</h2>
<ul class="flex middle active">
<ul class="list flex middle active">
{loop="$servers"}
{if="!filter_var($value->server, FILTER_VALIDATE_EMAIL)"}
<li class="block condensed" onclick="Groups_ajaxDisco('{$value->server}')">
<span class="icon bubble color {$value->server|stringToColor}">{$value->server|firstLetterCapitalize}</span>
<span title="{$value->server} - {$value->name}">{$value->server} - {$value->name}</span>
<li class="block" onclick="Groups_ajaxDisco('{$value->server}')">
<span class="primary icon bubble color {$value->server|stringToColor}">
{$value->server|firstLetterCapitalize}
</span>
<p title="{$value->server} - {$value->name}">{$value->server} - {$value->name}</p>
<p>{$c->__('group.counter', $value->number)}</p>
</li>
{/if}
{/loop}
<li class="block large">
<span class="icon">
<span class="primary icon">
<i class="zmdi zmdi-search-for"></i>
</span>
<form>

88
app/widgets/Group/_group_header.tpl

@ -1,64 +1,64 @@
<div>
<span class="on_desktop icon"><i class="zmdi zmdi-pages"></i></span>
<h2>
{$c->__('page.groups')}
</h2>
<ul class="list middle">
<li>
<span class="primary on_desktop icon"><i class="zmdi zmdi-pages"></i></span>
<p>
{$c->__('page.groups')}
</p>
</li>
</ul>
</div>
<div>
<ul class="active">
{if="$subscription == null"}
<li title="{$c->__('group.subscribe')}"
<ul class="list middle">
<li>
<span id="back" class="primary icon active" onclick="MovimTpl.hidePanel(); Group_ajaxClear(); Groups_ajaxHeader();">
<i class="zmdi zmdi-arrow-back"></i>
</span>
{if="$role == 'owner'"}
<span class="control show_context_menu icon active">
<i class="zmdi zmdi-more-vert"></i>
</span>
{/if}
{if="$subscription == null"}
<span class="control icon active" title="{$c->__('group.subscribe')}"
onclick="Group_ajaxAskSubscribe('{$item->server}', '{$item->node}')">
<span class="icon">
<i class="zmdi zmdi-bookmark-outline"></i>
</span>
</li>
{else}
<li title="{$c->__('group.unsubscribe')}"
{else}
<span class="control icon active" title="{$c->__('group.unsubscribe')}"
onclick="Group_ajaxAskUnsubscribe('{$item->server}', '{$item->node}')">
<span class="icon">
<i class="zmdi zmdi-bookmark"></i>
</span>
</li>
{/if}
{if="$role == 'owner'"}
<li class="thin show_context_menu">
<span class="icon">
<i class="zmdi zmdi-more-vert"></i>
</span>
</li>
{/if}
</ul>
<div class="return active condensed {if="$role == 'owner'"}r2{else}r1{/if}"
onclick="MovimTpl.hidePanel(); Group_ajaxClear(); Groups_ajaxHeader();">
<span id="back" class="icon"><i class="zmdi zmdi-arrow-back"></i></span>
<h2>
{if="$item != null"}
{if="$item->name"}
{$item->name}
{else}
{$item->node}
{/if}
<p class="line">
{if="$item != null"}
{if="$item->name"}
{$item->name}
{else}
{$item->node}
{/if}
{/if}
</p>
{if="$item->description"}
<p class="line" title="{$item->description|strip_tags}">
{$item->description|strip_tags}
</p>
{else}
<p class="line">{$item->server}</p>
{/if}
</h2>
{if="$item->description"}
<h4 title="{$item->description|strip_tags}">
{$item->description|strip_tags}
</h4>
{else}
<h4>{$item->server}</h4>
{/if}
</div>
</li>
</ul>
{if="$role == 'owner'"}
<ul class="simple context_menu active">
<ul class="list context_menu active">
<li onclick="Group_ajaxGetConfig('{$item->server}', '{$item->node}')">
<span>{$c->__('group.configuration')}</span>
<p class="normal">{$c->__('group.configuration')}</p>
</li>
<li onclick="Group_ajaxGetSubscriptions('{$item->server}', '{$item->node}', true)">
<span>{$c->__('group.subscriptions')}</span>
<p class="normal">{$c->__('group.subscriptions')}</p>
</li>
<li onclick="Group_ajaxDelete('{$item->server}', '{$item->node}')">
<span>{$c->__('button.delete')}</span>
<p class="normal">{$c->__('button.delete')}</p>
</li>
</ul>
{/if}

13
app/widgets/Group/_group_subscriptions.tpl

@ -1,14 +1,15 @@
<section class="scroll">
<ul class="thin divided simple">
<ul class="list thin divided simple">
<li class="subheader">
{$c->__('group.subscriptions')}
<span class="info">{$subscriptions|count}</span>
<p><span class="info">{$subscriptions|count}</span>{$c->__('group.subscriptions')}</p>
</li>
{loop="$subscriptions"}
<li>
<a href="{$c->route('contact', $value.jid)}">
{$value.jid}
</a>
<p class="normal">
<a href="{$c->route('contact', $value.jid)}">
{$value.jid}
</a>
</p>
</li>
{/loop}
</ul>

36
app/widgets/Groups/_groups_header.tpl

@ -1,18 +1,22 @@
<div>
<span id="menu" class="on_mobile icon active" onclick="MovimTpl.toggleMenu()"><i class="zmdi zmdi-menu"></i></span>
<span class="on_desktop icon"><i class="zmdi zmdi-pages"></i></span>
<form>
<div>
<div class="select">
<select onchange="window[this.value].apply(this, [this.options[this.selectedIndex].dataset['server']]);" name="language" id="language">
<option value="Groups_ajaxSubscriptions" selected="selected">{$c->__('groups.subscriptions')}</option>
{loop="$servers"}
{if="!filter_var($value->server, FILTER_VALIDATE_EMAIL)"}
<option value="Groups_ajaxDisco" data-server="{$value->server}">{$value->server} - {$value->name} ({$value->number})</option>
{/if}
{/loop}
</select>
</div>
</div>
</form>
<ul class="list middle">
<li>
<span id="menu" class="primary on_mobile icon active" onclick="MovimTpl.toggleMenu()"><i class="zmdi zmdi-menu"></i></span>
<span class="primary on_desktop icon"><i class="zmdi zmdi-pages"></i></span>
<form>
<div>
<div class="select">
<select onchange="window[this.value].apply(this, [this.options[this.selectedIndex].dataset['server']]);" name="language" id="language">
<option value="Groups_ajaxSubscriptions" selected="selected">{$c->__('groups.subscriptions')}</option>
{loop="$servers"}
{if="!filter_var($value->server, FILTER_VALIDATE_EMAIL)"}
<option value="Groups_ajaxDisco" data-server="{$value->server}">{$value->server} - {$value->name} ({$value->number})</option>
{/if}
{/loop}
</select>
</div>
</div>
</form>
</li>
</ul>
</div>

41
app/widgets/Groups/_groups_server.tpl

@ -1,4 +1,4 @@
<ul class="middle divided spaced active">
<ul class="list middle divided spaced active">
{loop="$nodes"}
<li
class="
@ -10,33 +10,36 @@
title="{$value->server} - {$value->node}"
>
{if="$value->subscription == 'subscribed'"}
<div class="action">
<span class="control icon gray">
<i class="zmdi zmdi-bookmark"></i>
</div>
</span>
{/if}
<span class="icon bubble color {$value->node|stringToColor}">{$value->node|firstLetterCapitalize}</span>
<span>
<span class="primary icon bubble color {$value->node|stringToColor}">{$value->node|firstLetterCapitalize}</span>
<p class="line">
{if="$value->name"}
{$value->name}
{else}
{$value->node}
{/if}
{if="$value->description"}
<span class="second">
{$value->description|strip_tags}
{if="$value->description"}
{$value->description|strip_tags}
{/if}
</span>
{/if}
</span>
<p class="wrap">
{if="$value->sub > 0"}
{$c->__('groups.sub', $value->sub)}
{/if}
{if="$value->sub > 0 && $value->num > 0"}
-
{/if}
{if="$value->num > 0"}
{$c->__('groups.num', $value->num)}
</p>
<p>
{if="isset($value->sub)"}
{if="$value->sub > 0"}
{$c->__('groups.sub', $value->sub)}
{/if}
{if="$value->sub > 0 && $value->num > 0"}
-
{/if}
{if="$value->num > 0"}
{$c->__('groups.num', $value->num)}
{/if}
{else}
{$value->node}
{/if}
</p>
</li>

15
app/widgets/Groups/_groups_subscriptions.tpl

@ -7,29 +7,30 @@
</li>
</ul>
{else}
<ul class="divided spaced middle active">
<ul class="list divided spaced middle active">
{loop="$subscriptions"}
{if="$c->checkNewServer($value)"}
<li class="subheader">
<a href="#" onclick="Groups_ajaxDisco('{$value->server}')">{$value->server} - {$value->servicename}</a>
<p>
<a href="#" onclick="Groups_ajaxDisco('{$value->server}')">{$value->server} - {$value->servicename}</a>
</p>
</li>
{/if}
<li
{if="$value->description"}class="condensed"{/if}
data-server="{$value->server}"
data-node="{$value->node}"
title="{$value->server} - {$value->node}"
>
<span class="icon bubble color {$value->node|stringToColor}">{$value->node|firstLetterCapitalize}</span>
<span>
<span class="primary icon bubble color {$value->node|stringToColor}">{$value->node|firstLetterCapitalize}</span>
<p class="line normal">
{if="$value->name"}
{$value->name}
{else}
{$value->node}
{/if}
</span>
</p>
{if="$value->description"}
<p class="wrap">{$value->description|strip_tags}</p>
<p class="line">{$value->description|strip_tags}</p>
{/if}
</li>
{/loop}

11
app/widgets/Header/_header_admin.tpl

@ -1,6 +1,9 @@
<div>
<a href="{$c->route('main')}" class="classic">
<span id="menu" class="icon"><i class="zmdi zmdi-home"></i></span>
</a>
<h2>{$c->__('page.administration')}</h2>
<ul class="list middle">
<li>
<a href="{$c->route('main')}" class="active classic">
<span id="menu" class="icon"><i class="zmdi zmdi-home"></i></span>
</a>
</li>
</ul>
</div>

10
app/widgets/Header/_header_chat.tpl

@ -1,5 +1,9 @@
<div>
<span id="menu" class="on_mobile icon active" onclick="MovimTpl.toggleMenu()"><i class="zmdi zmdi-menu"></i></span>
<span class="on_desktop icon"><i class="zmdi zmdi-comments"></i></span>
<h2>{$c->__('page.chats')}</h2>
<ul class="list middle">
<li>
<span id="menu" class="primary on_mobile icon active" onclick="MovimTpl.toggleMenu()"><i class="zmdi zmdi-menu"></i></span>
<span class="primary icon on_desktop icon"><i class="zmdi zmdi-comments"></i></span>
<p>{$c->__('page.chats')}</p>
</li>
</ul>
</div>

10
app/widgets/Header/_header_conf.tpl

@ -1,5 +1,9 @@
<div>
<span id="menu" class="on_mobile icon active" onclick="MovimTpl.toggleMenu()"><i class="zmdi zmdi-menu"></i></span>
<span class="on_desktop icon"><i class="zmdi zmdi-settings"></i></span>
<h2>{$c->__('page.configuration')}</h2>
<ul class="list middle">
<li>
<span id="menu" class="primary on_mobile icon active" onclick="MovimTpl.toggleMenu()"><i class="zmdi zmdi-menu"></i></span>
<span class="primary on_desktop icon"><i class="zmdi zmdi-settings"></i></span>
<p>{$c->__('page.configuration')}</p>
</li>
</ul>
</div>

10
app/widgets/Header/_header_group.tpl

@ -1,5 +1,9 @@
<div>
<span id="menu" class="on_mobile icon active" onclick="MovimTpl.toggleMenu()"><i class="zmdi zmdi-menu"></i></span>
<span class="on_desktop icon"><i class="zmdi zmdi-pages"></i></span>
<h2>{$c->__('page.groups')}</h2>
<ul class="list middle">
<li>
<span id="menu" class="primary on_mobile icon active" onclick="MovimTpl.toggleMenu()"><i class="zmdi zmdi-menu"></i></span>
<span class="primary on_desktop icon"><i class="zmdi zmdi-pages"></i></span>
<p>{$c->__('page.groups')}</p>
</li>
</ul>
</div>

10
app/widgets/Header/_header_help.tpl

@ -1,5 +1,9 @@
<div>
<span id="menu" class="on_mobile icon active" onclick="MovimTpl.toggleMenu()"><i class="zmdi zmdi-menu"></i></span>
<span class="on_desktop icon"><i class="zmdi zmdi-help"></i></span>
<h2>{$c->__('page.help')}</h2>
<ul class="list middle">
<li>
<span id="menu" class="primary on_mobile icon active" onclick="MovimTpl.toggleMenu()"><i class="zmdi zmdi-menu"></i></span>
<span class="primary on_desktop icon active"><i class="zmdi zmdi-help"></i></span>
<p>{$c->__('page.help')}</p>
</li>
</ul>
</div>

8
app/widgets/Header/_header_login.tpl

@ -1,9 +1,11 @@
<div></div>
<div>
<ul class="active">
<ul class="list"><li></li></ul>
</div>
<div>
<ul class="list medium">
<a class="classic" href="{$c->route('pods')}">
<li>
<span class="icon">
<span class="control icon">
<i class="zmdi zmdi-apps"></i>
</span>
</li>

7
app/widgets/Header/locales.ini

@ -1,9 +1,2 @@
[menu]
all = All
groups = Groups
contacts = Contacts
refresh = Refresh all the streams
me = My publications
[roster]
search = Search in your contacts

120
app/widgets/Hello/hello.tpl

@ -1,40 +1,52 @@
<header>
<ul class="list middle">
<li>
<span id="menu" class="primary on_mobile icon active" onclick="MovimTpl.toggleMenu()"><i class="zmdi zmdi-menu"></i></span>
<span class="primary on_desktop icon"><i class="zmdi zmdi-home"></i></span>
<p class="center">{$c->__('page.home')}</p>
</li>
</ul>
</header>
<div id="hello_widget" class="divided">
{if="!isset($top) || !isset($news)"}
<ul class="simple thick">
<ul class="list thick">
{$a = '1f600'}
<li>
<h2>{$c->__('hello.enter_title')}</h2>
<p class="all">{$c->__('hello.enter_paragraph')} <img alt=":smiley:" class="emoji" src="{$a|getSmileyPath}"></p>
<p>{$c->__('hello.enter_title')}</p>
<p>{$c->__('hello.enter_paragraph')} <img alt=":smiley:" class="emoji" src="{$a|getSmileyPath}"></p>
</li>
</ul>
<ul class="middle">
<li class="condensed">
<span class="icon gray">
<ul class="list middle">
<li>
<span class="primary icon gray">
<i class="zmdi zmdi-menu on_mobile"></i>
<i class="zmdi zmdi-cloud-outline on_desktop"></i>
</span>
<span>{$c->__('hello.menu_title')}</span>
<p class="all">{$c->__('hello.menu_paragraph')}</p>
<p>{$c->__('hello.menu_title')}</p>
<p>{$c->__('hello.menu_paragraph')}</p>
</li>
</ul>
{/if}
<ul class="flex active middle">
<li class="subheader block large">{$c->__('chat.frequent')}</li>
<ul class="list flex active middle">
<li class="subheader block large">
<p>{$c->__('chat.frequent')}</p>
</li>
{if="empty($top)"}
<li>
<span class="icon gray">
<span class="primary icon gray">
<i class="zmdi zmdi-info-outline"></i>
</span>
<span>{$c->__('chats.empty_title')}</span>
<p class="normal">{$c->__('chats.empty_title')}</p>
</li>
{/if}
{loop="$top"}
<li tabindex="{$key+1}" class="block action {if="$value->status"}condensed{/if}"
<li tabindex="{$key+1}" class="block"
onclick="Hello_ajaxChat('{$value->jid}')">
{$url = $value->getPhoto('s')}
{if="$url"}
<span
class="icon bubble
class="primary icon bubble
{if="$value->value"}
status {$presencestxt[$value->value]}
{/if}">
@ -42,7 +54,7 @@
</span>
{else}
<span
class="icon bubble color {$value->jid|stringToColor}
class="primary icon bubble color {$value->jid|stringToColor}
{if="$value->value"}
status {$presencestxt[$value->value]}
{/if}">
@ -50,35 +62,41 @@
</span>
{/if}
<span>{$value->getTrueName()}</span>
<p class="wrap">{$value->status}</p>
<p>{$value->getTrueName()}</p>
<p>
{if="isset($value->status)"}
{$value->status}
{else}
{$value->jid}
{/if}
</p>
</li>
{/loop}
<a class="block large" href="{$c->route('chat')}">
<li class="action">
<div class="action">
<i class="zmdi zmdi-chevron-right"></i>
</div>
<span class="icon">
<li>
<span class="primary icon">
<i class="zmdi zmdi-comments"></i>
</span>
<span>{$c->__('hello.chat')}</span>
<span class="control icon">
<i class="zmdi zmdi-chevron-right"></i>
</span>
<p class="normal">{$c->__('hello.chat')}</p>
</li>
</a>
</ul>
{if="$c->supported('pubsub')"}
<ul id="news" class="card shadow flex active">
<ul id="news" class="list card shadow flex active">
{if="empty($news)"}
<li>
<span class="icon gray">
<span class="control icon gray">
<i class="zmdi zmdi-info-outline"></i>
</span>
<span>{$c->__('menu.empty_title')}</span>
<p>{$c->__('menu.empty_title')}</p>
</li>
{/if}
{loop="$news"}
{$attachements = $value->getAttachements()}
<li class="block condensed"
<li class="block "
data-id="{$value->nodeid}"
{if="$value->title != null"}
title="{$value->title|strip_tags}"
@ -89,29 +107,29 @@
>
{$picture = $value->getPicture()}
{if="current(explode('.', $value->origin)) == 'nsfw'"}
<span class="icon thumb color red tiny">
<span class="primary icon thumb color red tiny">
+18
</span>
{elseif="$picture != null"}
<span class="icon thumb" style="background-image: url({$picture});"></span>
<span class="primary icon thumb" style="background-image: url({$picture});"></span>
{elseif="$value->node == 'urn:xmpp:microblog:0'"}
{$url = $value->getContact()->getPhoto('l')}
{if="$url"}
<span class="icon thumb" style="background-image: url({$url});">
<span class="primary icon thumb" style="background-image: url({$url});">
</span>
{else}
<span class="icon thumb color {$value->getContact()->jid|stringToColor}">
<span class="primary icon thumb color {$value->getContact()->jid|stringToColor}">
<i class="zmdi zmdi-account"></i>
</span>
{/if}
{else}
<span class="icon thumb color {$value->node|stringToColor}">{$value->node|firstLetterCapitalize}</span>
<span class="primary icon thumb color {$value->node|stringToColor}">{$value->node|firstLetterCapitalize}</span>
{/if}
{if="$value->title != null"}
<span>{$value->title}</span>
<p class="line">{$value->title}</p>
{else}
<span>{$c->__('hello.contact_post')}</span>
<p class="line">{$c->__('hello.contact_post')}</p>
{/if}
<p>
{if="$value->node == 'urn:xmpp:microblog:0'"}
@ -137,39 +155,39 @@
</li>
{/loop}
<a href="{$c->route('news')}">
<li class="action">
<div class="action">
<i class="zmdi zmdi-chevron-right"></i>
</div>
<span class="icon">
<li>
<span class="primary icon">
<i class="zmdi zmdi-receipt"></i>
</span>
<span>{$c->__('hello.news_page')}</span>
<span class="control icon">
<i class="zmdi zmdi-chevron-right"></i>
</span>
<p class="normal line">{$c->__('hello.news_page')}</p>
</li>
</a>
</ul>
<br />
<ul class="active thick on_desktop">
<ul class="list active on_desktop">
<a href="{$c->route('blog', array($jid))}" target="_blank">
<li class="condensed action">
<div class="action">
<i class="zmdi zmdi-chevron-right"></i>
</div>
<span class="icon">
<li>
<span class="primary icon">
<i class="zmdi zmdi-portable-wifi"></i>
</span>
<span>{$c->__('hello.blog_title')}</span>
<span class="control icon">
<i class="zmdi zmdi-chevron-right"></i>
</span>
<p class="list">{$c->__('hello.blog_title')}</p>
<p>{$c->__('hello.blog_text')}</p>
</li>
<br/>
</a>
</ul>
<ul class="thick flex on_desktop">
<li class="condensed block">
<span class="icon bubble color blue">
<ul class="list thick flex on_desktop">
<li class="block">
<span class="primary icon bubble color blue">
<i class="zmdi zmdi-share"></i>
</span>
<span>{$c->__('hello.share_title')}</span>
<p class="line">{$c->__('hello.share_title')}</p>
<p>{$c->__('hello.share_text')}</p>
</li>
<li class="block">

50
app/widgets/Help/help.tpl

@ -1,45 +1,41 @@
<div class="tabelem" title="{$c->__('page.help')}" id="help_widget">
<ul class="thick active">
<li class="condensed action">
<a href="https://github.com/edhelas/movim/wiki" target="_blank">
<span class="icon bubble color blue">
<i class="zmdi zmdi-github-alt"></i>
</span>
<span>{$c->__('wiki.question')}</span>
<p>{$c->__('wiki.button')}</p>
</a>
<div class="action">
<ul class="list thick active">
<li>
<span class="primary icon bubble color blue">
<i class="zmdi zmdi-github-alt"></i>
</span>
<span class="control icon gray">
<i class="zmdi zmdi-chevron-right"></i>
</div>
</span>
<p>{$c->__('wiki.question')}</p>
<p><a href="https://github.com/edhelas/movim/wiki" target="_blank">{$c->__('wiki.button')}</a></p>
</li>
<li class="condensed action">
<a href="https://github.com/edhelas/movim/wiki/Mailing-List" target="_blank">
<span class="icon bubble color orange">
<i class="zmdi zmdi-email"></i>
</span>
<span>{$c->__('ml.question')}</span>
<p>{$c->__('ml.button')}</p>
</a>
<div class="action">
<li>
<span class="primary icon bubble color orange">
<i class="zmdi zmdi-email"></i>
</span>
<span class="control icon gray">
<i class="zmdi zmdi-chevron-right"></i>
</div>
</span>
<p>{$c->__('ml.question')}</p>
<p><a href="https://github.com/edhelas/movim/wiki/Mailing-List" target="_blank">{$c->__('ml.button')}</a></p>
</li>
<li class="condensed action" onclick="Help_ajaxAddChatroom()">
<span class="icon bubble color green">
<span class="primary icon bubble color green">
<i class="zmdi zmdi-comment-text-alt"></i>
</span>
<span>{$c->__('chatroom.question')}</span>
<p>{$c->__('chatroom.button')}<br/>movim@conference.movim.eu</p>
<div class="action">
<span class="control icon gray">
<i class="zmdi zmdi-accounts-add"></i>
</div>
</span>
<p>{$c->__('chatroom.question')}</p>
<p>{$c->__('chatroom.button')}<br/>movim@conference.movim.eu</p>
</li>
</ul>
<!--
<div class="clear spacetop"></div>
<h2 class="padded_top_bottom">{$c->__('help.faq')}</h2>
<div class="card">
<article>
<header>

16
app/widgets/Login/_login_sessions.tpl

@ -1,23 +1,23 @@
<section>
<h3>{$c->__('account.title')}</h3>
<br />
<ul class="active">
<ul class="list active middle">
{loop="$sessions"}
<li id="{$value->jid}" class="action condensed" title="{$value->jid}">
<div class="action">
<i class="zmdi zmdi-close"></i>
</div>
<li id="{$value->jid}" title="{$value->jid}">
{$url = $value->getPhoto('s')}
{if="$url"}
<span class="icon bubble">
<span class="primary icon bubble">
<img src="{$url}">
</span>
{else}
<span class="icon bubble color {$value->jid|stringToColor}">
<span class="primary icon bubble color {$value->jid|stringToColor}">
<i class="zmdi zmdi-account"></i>
</span>
{/if}
<span>{$value->getTrueName()}</span>
<span class="control icon gray">
<i class="zmdi zmdi-close"></i>
</span>
<p>{$value->getTrueName()}</p>
<p>{$value->jid}</p>
</li>
{/loop}

1
app/widgets/Login/login.css

@ -60,7 +60,6 @@ body main > header {
#login_widget form ul input {
margin: 0;
display: block;
height: 5rem;
}

25
app/widgets/Login/login.tpl

@ -30,26 +30,26 @@
<label for="pass">{$c->__('form.password')}</label>
</div>
<div>
<ul class="simple thin">
<li class="action">
<div class="action">
<ul class="list thin">
<li>
<p class="center">
<a id="return_sessions" class="button flat" href="#" onclick="Login.toChoose()">
{$c->__('account.title')}
</a>
<input
type="submit"
disabled
data-loading="{$c->__('button.connecting')}"
value="{$c->__('button.come_in')}"
class="button flat"/>
</div>
<a id="return_sessions" class="button flat" href="#" onclick="Login.toChoose()">
{$c->__('account.title')}
</a>
</p>
</li>
</ul>
</div>
</form>
{if="isset($info) && $info != ''"}
<ul class="thin simple card">
<ul class="list thin card">
<li class="info">
<p>{$info}</p>
</li>
@ -57,20 +57,21 @@
{/if}
{if="isset($whitelist) && $whitelist != ''"}
<ul class="thin simple card">
<ul class="list thin card">
<li class="info">
<p>{$c->__('whitelist.info')} : {$whitelist}</p>
</li>
</ul>
{/if}
<ul class="thin simple">
<ul class="list thin">
<li class="new_account">
<span>{$c->__('form.no_account')}<br />
<p class="normal center">
{$c->__('form.no_account')}
<a class="button flat" href="{$c->route('account')}">
{$c->__('form.create_one')}
</a>
</span>
</p>
</li>
</ul>
</section>

2
app/widgets/Menu/Menu.php

@ -108,6 +108,7 @@ class Menu extends WidgetBase
RPC::call('movim_posts_unread', 0);
}
RPC::call('Menu.refresh');
RPC::call('MovimTpl.scrollTop');
}
function ajaxRefresh()
@ -162,6 +163,7 @@ class Menu extends WidgetBase
}
$view->assign('items', $items);
$view->assign('type', $type);
$view->assign('page', $page);
$view->assign('paging', $this->_paging);

30
app/widgets/Menu/_menu_list.tpl

@ -1,7 +1,7 @@
{if="$items"}
{if="$page == 0"}
<div id="menu_refresh"></div>
<ul class="card shadow active flex stacked" id="menu_wrapper">
<ul class="list card shadow active flex stacked" id="menu_wrapper">
{/if}
{loop="$items"}
@ -24,25 +24,31 @@
+18
</span>
{elseif="$picture != null"}
<span class="icon thumb" style="background-image: url({$picture});"></span>
<span class="primary icon thumb" style="background-image: url({$picture});"></span>
{elseif="$value->node == 'urn:xmpp:microblog:0'"}
{$url = $value->getContact()->getPhoto('l')}
{if="$url"}
<span class="icon thumb" style="background-image: url({$url});">
<span class="primary icon thumb" style="background-image: url({$url});">
</span>
{else}
<span class="icon thumb color {$value->getContact()->jid|stringToColor}">
<span class="primary icon thumb color {$value->getContact()->jid|stringToColor}">
<i class="zmdi zmdi-account"></i>
</span>
{/if}
{else}
<span class="icon thumb color {$value->node|stringToColor}">{$value->node|firstLetterCapitalize}</span>
<span class="primary icon thumb color {$value->node|stringToColor}">{$value->node|firstLetterCapitalize}</span>
{/if}
{if="$value->privacy"}
<span class="control icon gray" title="{$c->__('menu.public')}">
<i class="zmdi zmdi-portable-wifi"></i>
</span>
{/if}
{if="$value->title != null"}
<span>{$value->title}</span>
<p class="line">{$value->title}</p>
{else}
<span>{$c->__('menu.contact_post')}</span>
<p class="line">{$c->__('menu.contact_post')}</p>
{/if}
<p>
{if="$value->node == 'urn:xmpp:microblog:0'"}
@ -58,19 +64,13 @@
{$value->published|strtotime|prepareDate}
{if="$value->published != $value->updated"}<i class="zmdi zmdi-edit"></i>{/if}
</p>
{if="$value->privacy"}
<span class="info" title="{$c->__('menu.public')}">
<i class="zmdi zmdi-portable-wifi"></i>
</span>
{/if}
<p>{$value->contentcleaned|stripTags}</p>
</li>
{/loop}
{if="count($items) == $paging"}
<li id="history" class="block large" onclick="{$history} this.parentNode.removeChild(this);">
<span class="icon"><i class="zmdi zmdi-time-restore"></i></span>
<span>{$c->__('post.older')}</span>
<span class="icon primary"><i class="zmdi zmdi-time-restore"></i></span>
<p class="normal center">{$c->__('post.older')}</p>
</li>
{/if}

5
app/widgets/Menu/locales.ini

@ -4,3 +4,8 @@ contact_post = Contact post
empty = Welcome on your news feed, here you will see all the posts published by your contacts and in the groups you have subscribed.
refresh = Refreshing all the streams
public = This post is public
all = All
groups = Groups
contacts = Contacts
refresh = Refresh all the streams

2
app/widgets/Menu/menu.css

@ -1,4 +1,4 @@
#menu_widget {
#menu_widget_wrapper {
background-color: #EEE;
}

24
app/widgets/Menu/menu.tpl

@ -1,3 +1,23 @@
<div id="menu_widget">
{$c->prepareList('all')}
<div id="menu_widget_wrapper">
<header>
<ul class="list">
<li>
<span id="menu" class="primary on_mobile icon active" onclick="MovimTpl.toggleMenu()"><i class="zmdi zmdi-menu"></i></span>
<span class="primary on_desktop icon gray"><i class="zmdi zmdi-filter-list"></i></span>
<p>{$c->__('page.news')}</p>
</li>
<li>
<ul class="tabs">
<li {if="$type == 'all'"}class="active"{/if}><a href="#" onclick="Menu_ajaxGetAll()">{$c->__('menu.all')}</a></li>
<li {if="$type == 'news'"}class="active"{/if} ><a href="#" onclick="Menu_ajaxGetNews()"><i class="zmdi zmdi-pages"></i></a></li>
<li {if="$type == 'feed'"}class="active"{/if}><a href="#" onclick="Menu_ajaxGetFeed()"><i class="zmdi zmdi-accounts"></i></a></li>
<li {if="$type == 'me'"}class="active"{/if}><a href="#" onclick="Menu_ajaxGetMe()"><i class="zmdi zmdi-portable-wifi"></i></a></li>
</ul>
</li>
</ul>
</header>
<div id="menu_widget">
{$c->prepareList('all')}
</div>
</div>

56
app/widgets/Navigation/navigation.tpl

@ -1,48 +1,49 @@
<ul class="active">
<ul class="list active">
<a class="classic on_mobile" href="#">
<li class="action" onclick="MovimTpl.toggleMenu()">
<span class="icon bubble on_mobile"><i class="zmdi zmdi-menu"></i></span>
<span>Movim</span>
<li onclick="MovimTpl.toggleMenu()">
<span class="primary icon bubble on_mobile"><i class="zmdi zmdi-menu"></i></span>
<span class="control icon bubble"><i class="zmdi zmdi-arrow-back"></i></span>
<p class="normal">Movim</p>
</li>
</a>
<a class="classic on_desktop" href="{$c->route('root')}">
<li class="action {if="$page == 'main'"}active{/if}">
<span class="icon bubble"><i class="zmdi zmdi-cloud-outline"></i></span>
<span>{$c->__('page.home')}</span>
<li class="{if="$page == 'main'"}active{/if}">
<span class="primary icon bubble"><i class="zmdi zmdi-cloud-outline"></i></span>
<p class="normal">{$c->__('page.home')}</p>
</li>
</a>
<a class="classic on_mobile" href="{$c->route('root')}">
<li class="action {if="$page == 'main'"}active{/if}">
<span class="icon bubble"><i class="zmdi zmdi-home"></i></span>
<span>{$c->__('page.home')}</span>
<li class="{if="$page == 'main'"}active{/if}">
<span class="primary icon bubble"><i class="zmdi zmdi-home"></i></span>
<p class="normal">{$c->__('page.home')}</p>
</li>
</a>
<a class="classic {if="!$c->supported('pubsub')"}disabled{/if}" href="{$c->route('news')}">
<li {if="$page == 'news'"}class="active"{/if}>
<span class="icon"><i class="zmdi zmdi-receipt"></i></span>
<span class="primary icon"><i class="zmdi zmdi-receipt"></i></span>
<span data-key="news" class="counter"></span>
<span>{$c->__('page.news')}</span>
<p class="normal">{$c->__('page.news')}</p>
</li>
</a>
<a class="classic" href="{$c->route('contact')}">
<li {if="$page == 'contact'"}class="active"{/if}>
<span class="icon"><i class="zmdi zmdi-accounts"></i></span>
<span class="primary icon"><i class="zmdi zmdi-accounts"></i></span>
<span data-key="invite" class="counter"></span>
<span>{$c->__('page.contacts')}</span>
<p class="normal">{$c->__('page.contacts')}</p>
</li>
</a>
<a class="classic {if="!$c->supported('pubsub')"}disabled{/if}" href="{$c->route('group')}">
<li {if="$page == 'group'"}class="active"{/if}>
<span class="icon"><i class="zmdi zmdi-pages"></i></span>
<span class="primary icon"><i class="zmdi zmdi-pages"></i></span>
<span class="counter"></span>
<span>{$c->__('page.groups')}</span>
<p class="normal">{$c->__('page.groups')}</p>
</li>
</a>
<a class="classic" href="{$c->route('chat')}">
<li {if="$page == 'chat'"}class="active"{/if}>
<span class="icon"><i class="zmdi zmdi-comments"></i></span>
<span class="primary icon"><i class="zmdi zmdi-comments"></i></span>
<span data-key="chat" class="counter"></span>
<span>{$c->__('page.chats')}</span>
<p class="normal">{$c->__('page.chats')}</p>
</li>
</a>
<!--
@ -54,3 +55,22 @@
</li>
</a>-->
</ul>
<ul class="list oppose active">
<a class="classic {if="!$c->supported('pubsub')"}disabled{/if}" href="{$c->route('conf')}">
<li>
<span class="primary icon">
<i class="zmdi zmdi-settings"></i>
</span>
<p class="normal">{$c->__('page.configuration')}</p>
</li>
</a>
<a class="classic" href="{$c->route('help')}">
<li>
<span class="primary icon">
<i class="zmdi zmdi-help"></i>
</span>
<p class="normal">{$c->__('page.help')}</p>
</li>
</a>
</ul>

8
app/widgets/Notification/_notification.tpl

@ -1,12 +1,12 @@
{if="isset($action)"}
<a href="{$action}">
{/if}
<ul class="{if="!isset($picture)"}simple{/if}">
<li class="{if="isset($body)"}condensed{/if}">
<ul class="list">
<li>
{if="isset($picture)"}
<span class="icon bubble"><img src="{$picture}"></span>
<span class="primary icon bubble"><img src="{$picture}"></span>
{/if}
<span>{$title}</span>
<p>{$title}</p>
{if="isset($body)"}
<p>{$body}</p>
{/if}

6
app/widgets/Notification/notification.js

@ -77,7 +77,7 @@ var Notification = {
if(Notification.favicon != null)
Notification.favicon.badge(Notification.tab_counter1 + Notification.tab_counter2);
if(Notification.electron != null)
Notification.electron.notification(Notification.tab_counter1 + Notification.tab_counter2);
}
@ -115,11 +115,11 @@ var Notification = {
target.innerHTML = html;
}
setTimeout(function() {
/*setTimeout(function() {
target = document.getElementById('snackbar');
target.innerHTML = '';
},
time*1000);
time*1000);*/
},
desktop : function(title, body, picture, action) {
if(Notification.inhibed == true

1
app/widgets/Post/Post.php

@ -111,6 +111,7 @@ class Post extends WidgetBase
Header::fill($header);
RPC::call('movim_fill', 'post_widget', $html);
RPC::call('MovimTpl.scrollHeaders');
}
function ajaxDelete($to, $node, $id)

296
app/widgets/Post/_post.tpl

@ -1,89 +1,128 @@
{if="$external || $public"}
<article class="block">
{if="isset($attachements.pictures)"}
{if="($public && $post->isPublic()) || !$public"}
<header
class="big"
style="
background-image: linear-gradient(to bottom, rgba(0,0,0,0.9) 0%, rgba(0,0,0,0.5) 100%), url('{$attachements['pictures'][0]['href']}');">
{/if}
{else}
<header>
{/if}
{if="isset($attachements.pictures)"}
{if="($public && $post->isPublic()) || !$public"}
<header
class="big"
style="
background-image: linear-gradient(to bottom, rgba(0,0,0,0.9) 0%, rgba(0,0,0,0.5) 100%), url('{$attachements['pictures'][0]['href']}');">
{/if}
<ul class="thick">
<li class="condensed">
{if="$recycled"}
{$contact = $recycled}
{else}
{$contact = $post->getContact()}
{else}
<header>
{/if}
{if="!$external && !$public"}
<ul class="list middle">
<li>
<span class="primary icon active" onclick="MovimTpl.hidePanel(); Post_ajaxClear();">
<i class="zmdi zmdi-arrow-back"></i>
</span>
{if="$post->isMine() && !$public"}
{if="$post->isEditable()"}
<span class="control icon active" onclick="Publish_ajaxCreate('{$post->origin}', '{$post->node}', '{$post->nodeid}')" title="{$c->__('button.edit')}">
<i class="zmdi zmdi-edit"></i>
</span>
{/if}
<span class="control icon active" onclick="Post_ajaxDelete('{$post->origin}', '{$post->node}', '{$post->nodeid}')" title="{$c->__('button.delete')}">
<i class="zmdi zmdi-delete"></i>
</span>
{/if}
{if="$post->node == 'urn:xmpp:microblog:0'"}
<a href="{$c->route('contact', $contact->jid)}">
{$url = $contact->getPhoto('s')}
{if="$url"}
<span class="icon bubble">
<img src="{$url}">
</span>
{else}
<span class="icon bubble color {$contact->jid|stringToColor}">
<i class="zmdi zmdi-account"></i>
</span>
{/if}
</a>
<p class="line">
{if="$post->title != null"}
{$post->title}
{else}
{$c->__('post.default_title')}
{/if}
</p>
</li>
</div>
{/if}
<ul class="list thick">
<li>
{if="$recycled"}
{$contact = $recycled}
{else}
{$contact = $post->getContact()}
{/if}
{if="$post->node == 'urn:xmpp:microblog:0'"}
{$url = $contact->getPhoto('s')}
{if="$url"}
<span class="icon primary bubble">
<a href="{$c->route('contact', $contact->jid)}">
<img src="{$url}">
</a>
</span>
{else}
<a href="{$c->route('group', array($post->origin, $post->node))}">
<span class="icon bubble color {$post->node|stringToColor}">{$post->node|firstLetterCapitalize}</span>
</a>
<span class="icon primary bubble color {$contact->jid|stringToColor}">
<a href="{$c->route('contact', $contact->jid)}">
<i class="zmdi zmdi-account"></i>
</a>
</span>
{/if}
<h2 {if="$post->title != null"}title="{$post->title|strip_tags}"{/if}>
<a {if="$public"}
{if="$post->isMicroblog()"}
href="{$c->route('blog', array($post->origin, $post->nodeid))}"
{else}
href="{$c->route('node', array($post->origin, $post->node, $post->nodeid))}"
{/if}
{else}
href="{$c->route('news', $post->nodeid)}"
{/if}
>
{if="$post->title != null"}
{$post->title}
{else}
<span class="icon primary bubble color {$post->node|stringToColor}">
{$post->node|firstLetterCapitalize}
</span>
{/if}
<p {if="$post->title != null"}title="{$post->title|strip_tags}"{/if}>
<a {if="$public"}
{if="$post->isMicroblog()"}
href="{$c->route('blog', array($post->origin, $post->nodeid))}"
{else}
{$c->__('post.default_title')}
{/if}
</a>
</h2>
<p>
{if="$contact->getTrueName() != ''"}
{if="!$public"}
<a href="{$c->route('contact', $contact->jid)}">
href="{$c->route('node', array($post->origin, $post->node, $post->nodeid))}"
{/if}
<i class="zmdi zmdi-account"></i> {$contact->getTrueName()}
{if="!$public"}</a>{/if}
{else}
href="{$c->route('news', $post->nodeid)}"
{/if}
{if="$post->node != 'urn:xmpp:microblog:0'"}
{$post->origin} /
{if="!$public"}
<a href="{$c->route('group', array($post->origin, $post->node))}">
{/if}
<i class="zmdi zmdi-pages"></i> {$post->node}
{if="!$public"}</a>{/if}
>
{if="$post->title != null"}
{$post->title}
{else}
{$c->__('post.default_title')}
{/if}
{$post->published|strtotime|prepareDate}
{if="$post->published != $post->updated"}
- <i class="zmdi zmdi-edit"></i> {$post->updated|strtotime|prepareDate}
</a>
</p>
<p>
{if="$contact->getTrueName() != ''"}
{if="!$public"}
<a href="{$c->route('contact', $contact->jid)}">
{/if}
</p>
</li>
</ul>
</header>
<i class="zmdi zmdi-account"></i> {$contact->getTrueName()}
{if="!$public"}</a>{/if}
{/if}
{if="$post->node != 'urn:xmpp:microblog:0'"}
{$post->origin} /
{if="!$public"}
<a href="{$c->route('group', array($post->origin, $post->node))}">
{/if}
<i class="zmdi zmdi-pages"></i> {$post->node}
{if="!$public"}</a>{/if}
{/if}
{$post->published|strtotime|prepareDate}
{if="$post->published != $post->updated"}
- <i class="zmdi zmdi-edit"></i> {$post->updated|strtotime|prepareDate}
{/if}
</p>
</li>
</ul>
</header>
{if="!$external && !$public"}
<article class="block">
{/if}
{if="$public && !$post->isPublic()"}
<ul class="thick">
<ul class="list thick">
<li>
<span class="icon color gray bubble">
<span class="primary icon color gray bubble">
<i class="zmdi zmdi-lock"></i>
</span>
<p class="center"> {$c->__('blog.private')} - <a href="{$c->route('main')}">{$c->__('page.login')}</a></p>
<p class="line center normal"> {$c->__('blog.private')} - <a href="{$c->route('main')}">{$c->__('page.login')}</a></p>
</li>
</ul>
<br />
@ -108,28 +147,30 @@
<footer>
{$tags = $post->getTags()}
{if="isset($tags)"}
<ul class="middle">
<ul class="list middle">
<li>
<span class="icon zmdi zmdi-tag gray"></span>
<span>
<span class="primary icon zmdi zmdi-tag gray"></span>
<p class="normal">
{loop="$tags"}
<a target="_blank" href="{$c->route('tag', array($value))}">#{$value}</a>
{/loop}
</span>
</p>
</li>
</ul>
{/if}
<ul class="middle divided spaced">
<ul class="list middle divided spaced">
{if="isset($attachements.links)"}
{loop="$attachements.links"}
{if="substr($value.href, 0, 5) != 'xmpp:' && filter_var($value.href, FILTER_VALIDATE_URL)"}
<li>
<span class="icon">
<span class="primary icon">
<img src="https://icons.duckduckgo.com/ip2/{$value.url.host}.ico"/>
</span>
<a href="{$value.href}" class="alternate" target="_blank">
<span>{$value.href|urldecode}</span>
</a>
<p class="normal line">
<a href="{$value.href}" class="alternate" target="_blank">
{$value.href|urldecode}
</a>
</p>
</li>
{/if}
{/loop}
@ -152,10 +193,10 @@
{/if}
</ul>
{if="!$post->isShort() && isset($attachements.pictures)"}
<ul class="flex middle">
<ul class="list flex middle">
{loop="$attachements.pictures"}
<li class="block pic">
<span class="icon gray">
<span class="primary icon gray">
<i class="zmdi zmdi-image"></i>
</span>
<a href="{$value.href}" class="alternate" target="_blank">
@ -166,36 +207,38 @@
</ul>
{/if}
{if="$post->isMine() && !$public"}
<ul class="middle">
<li class="action">
<form>
<div class="action">
<div class="checkbox">
<input
type="checkbox"
id="privacy"
name="privacy"
{if="$post->privacy"}
checked
{/if}
{if="$external"}
onclick="Group_ajaxTogglePrivacy('{$post->nodeid}')"
{else}
onclick="Post_ajaxTogglePrivacy('{$post->nodeid}')"
{/if}
>
<label for="privacy"></label>
</div>
</div>
</form>
<span class="icon gray">
<ul class="list middle">
<li>
<span class="primary icon gray">
<i class="zmdi zmdi-portable-wifi"></i>
</span>
<span>
<span class="control">
<form>
<div class="action">
<div class="checkbox">
<input
type="checkbox"
id="privacy"
name="privacy"
{if="$post->privacy"}
checked
{/if}
{if="$external"}
onclick="Group_ajaxTogglePrivacy('{$post->nodeid}')"
{else}
onclick="Post_ajaxTogglePrivacy('{$post->nodeid}')"
{/if}
>
<label for="privacy"></label>
</div>
</div>
</form>
</span>
<p class="line normal">
<a target="_blank" href="{$post->getPublicUrl()}">
{$c->__('post.public')}
</a>
</span>
</p>
</li>
</ul>
{/if}
@ -203,23 +246,24 @@
{if="$recycled"}
<a href="{$c->route('contact', $post->getContact()->jid)}">
<ul class="active middle">
<li class="condensed action">
<div class="action">
<i class="zmdi zmdi-chevron-right"></i>
</div>
<ul class="list active middle">
<li>
{$url = $post->getContact()->getPhoto('s')}
{if="$url"}
<span class="icon bubble" style="background-image: url('{$url}');">
<span class="primary icon bubble" style="background-image: url('{$url}');">
<i class="zmdi zmdi-loop"></i>
</span>
{else}
<span class="icon bubble color {$post->getContact()->jid|stringToColor}">
<span class="primary icon bubble color {$post->getContact()->jid|stringToColor}">
<i class="zmdi zmdi-loop"></i>
</span>
{/if}
<span>{$c->__('post.repost', $post->getContact()->getTrueName())}</span>
<div class="control">
<i class="zmdi zmdi-chevron-right"></i>
</div>
<p>{$c->__('post.repost', $post->getContact()->getTrueName())}</p>
<p>{$c->__('post.repost_profile', $post->getContact()->getTrueName())}</p>
</li>
</ul>
@ -229,28 +273,30 @@
{if="$external"}
{$comments = $c->getComments($post)}
{if="$comments"}
<ul class="spaced middle">
<ul class="list spaced middle">
<li class="subheader">
{$c->__('post.comments')}
<span class="info">{$comments|count}</span>
<p>
<span class="info">{$comments|count}</span>
{$c->__('post.comments')}
</p>
</li>
{loop="$comments"}
<li class="condensed">
<li>
{$url = $value->getContact()->getPhoto('s')}
{if="$url"}
<span class="icon bubble">
<span class="primary icon bubble">
<img src="{$url}">
</span>
{else}
<span class="icon bubble color {$value->getContact()->jid|stringToColor}">
<span class="primary icon bubble color {$value->getContact()->jid|stringToColor}">
<i class="zmdi zmdi-account"></i>
</span>
{/if}
<span class="info">{$value->published|strtotime|prepareDate}</span>
<span>
<p>
{$value->getContact()->getTrueName()}
</span>
<p class="all">
</p>
<p>
<span class="info">{$value->published|strtotime|prepareDate}</span>
{if="$value->title"}
{$value->title}
{else}

50
app/widgets/Post/_post_comments.tpl

@ -1,33 +1,35 @@
<ul class="divided spaced middle">
<ul class="list divided spaced middle">
<li class="subheader">
{$c->__('post.comments')}
<span class="info">{$comments|count}</span>
<p><span class="info">{$comments|count}</span> {$c->__('post.comments')}</p>
</li>
{loop="$comments"}
<li class="condensed {if="$value->isMine()"}action{/if}">
<li>
{if="$value->isMine()"}
<div class="action" onclick="Post_ajaxDelete('{$value->origin}', '{$value->node}', '{$value->nodeid}')">
<span class="control" onclick="Post_ajaxDelete('{$value->origin}', '{$value->node}', '{$value->nodeid}')">
<i class="zmdi zmdi-delete"></i>
</div>
</span>
{/if}
<a href="{$c->route('contact', $value->getContact()->jid)}">
{$url = $value->getContact()->getPhoto('s')}
{if="$url"}
<span class="icon bubble">
{$url = $value->getContact()->getPhoto('s')}
{if="$url"}
<span class="primary icon bubble">
<a href="{$c->route('contact', $value->getContact()->jid)}">
<img src="{$url}">
</span>
{else}
<span class="icon bubble color {$value->getContact()->jid|stringToColor}">
</a>
</span>
{else}
<span class="primary icon bubble color {$value->getContact()->jid|stringToColor}">
<a href="{$c->route('contact', $value->getContact()->jid)}">
<i class="zmdi zmdi-account"></i>
</span>
{/if}
</a>
<span class="info">{$value->published|strtotime|prepareDate}</span>
<span>
</a>
</span>
{/if}
<p>
<span class="info">{$value->published|strtotime|prepareDate}</span>
<a href="{$c->route('contact', $value->getContact()->jid)}">
{$value->getContact()->getTrueName()}
</a>
</span>
</p>
<p class="all">
{if="$value->contentraw"}
{$value->contentraw}
@ -37,13 +39,13 @@
</p>
</li>
{/loop}
<li class="action">
<div class="action" onclick="Post_ajaxPublishComment(movim_form_to_json('comment'),'{$server}', '{$node}', '{$id}')">
<i class="zmdi zmdi-mail-send"></i>
</div>
<span class="icon gray">
<li>
<span class="primary icon gray">
<i class="zmdi zmdi-comment"></i>
</span>
<span class="control icon gray" onclick="Post_ajaxPublishComment(movim_form_to_json('comment'),'{$server}', '{$node}', '{$id}')">
<i class="zmdi zmdi-mail-send"></i>
</span>
<form name="comment">
<div>
<textarea

8
app/widgets/Post/_post_comments_error.tpl

@ -1,10 +1,10 @@
<ul class="middle">
<ul class="list middle">
<li>
<span class="icon gray">
<span class="primary icon gray">
<i class="zmdi zmdi-comment"></i>
</span>
<span>
<p class="normal">
{$c->__('post.comments_disabled')}
</span>
</p>
</li>
</ul>

25
app/widgets/Post/_post_empty.tpl

@ -1,6 +1,7 @@
<br />
<h2 class="thin">{$c->__('post.hot')}</h2>
<h4 class="gray">{$c->__('post.hot_text')}</h4><br />
<ul class="flex card shadow active">
<ul class="list flex card shadow active">
{loop="$posts"}
{if="!filter_var($value->origin, FILTER_VALIDATE_EMAIL)"}
{$attachements = $value->getAttachements()}
@ -11,23 +12,23 @@
data-node="{$value->node}">
{$picture = $value->getPicture()}
{if="current(explode('.', $value->origin)) == 'nsfw'"}
<span class="icon thumb color red tiny">
<span class="primary icon thumb color red tiny">
+18
</span>
{elseif="$picture != null"}
<span class="icon thumb" style="background-image: url({$picture});"></span>
<span class="primary icon thumb" style="background-image: url({$picture});"></span>
{else}
<span class="icon thumb color {$value->node|stringToColor}">
<span class="primary icon thumb color {$value->node|stringToColor}">
{$value->node|firstLetterCapitalize}
</span>
{/if}
<span>
<p class="line">
{if="isset($value->title)"}
{$value->title}
{else}
{$value->node}
{/if}
</span>
</p>
<p>
{$value->origin} /
<a href="{$c->route('group', array($value->origin, $value->node))}">
@ -45,14 +46,14 @@
{/if}
{/loop}
</ul>
<ul class="active thick">
<ul class="list active thick">
<a href="{$c->route('group')}">
<li class="action">
<div class="action">
<li>
<span class="primary icon"><i class="zmdi zmdi-pages"></i></span>
<span class="control icon">
<i class="zmdi zmdi-chevron-right"></i>
</div>
<span class="icon"><i class="zmdi zmdi-pages"></i></span>
<span>Discover more articles on the Groups page</span>
</span>
<p class="normal">{$c->__('post.discover')}</p>
</li>
</a>
</ul>

2
app/widgets/Post/locales.ini

@ -17,5 +17,7 @@ public_no = This post is now private
delete_title = Delete this post
delete_text = You are going to delete this post, please confirm your action
discover = Discover more articles on the Groups page
comments_disabled = Comments disabled
comment_published = Comment published

2
app/widgets/Post/post.tpl

@ -1,4 +1,4 @@
<div id="post_widget" class="card shadow">
<div id="post_widget">
{$c->prepareEmpty()}
{if="$nodeid"}
<script type="text/javascript">

33
app/widgets/Presence/_presence.tpl

@ -1,34 +1,19 @@
<li onclick="{$dialog} MovimTpl.hideMenu()" class="condensed action">
<div class="action">
<i class="zmdi zmdi-edit"></i>
</div>
<li onclick="{$dialog} MovimTpl.hideMenu()">
{$url = $me->getPhoto('s')}
{if="$url"}
<span
class="icon bubble status {if="$presence->value != null"}{$presencetxt[$presence->value]}{/if}"
class="primary icon bubble status {if="$presence->value != null"}{$presencetxt[$presence->value]}{/if}"
style="background-image: url({$me->getPhoto('m')})">
</span>
{else}
<span class="icon bubble color {$me->jid|stringToColor} status {if="$presence->value != null"}{$presencetxt[$presence->value]}{/if}">
<span class="primary icon bubble color {$me->jid|stringToColor} status {if="$presence->value != null"}{$presencetxt[$presence->value]}{/if}">
<i class="zmdi zmdi-account"></i>
</span>
{/if}
<span>{$me->getTrueName()}</span>
<p class="wrap">{$presence->status}</p>
<!--
<span class="control icon gray">
<i class="zmdi zmdi-edit"></i>
</span>-->
<p class="line">{$me->getTrueName()}</p>
<p class="line">{$presence->status}</p>
</li>
<a class="classic {if="!$c->supported('pubsub')"}disabled{/if}" href="{$c->route('conf')}">
<li>
<span class="icon">
<i class="zmdi zmdi-settings"></i>
</span>
<span>{$c->__('page.configuration')}</span>
</li>
</a>
<a class="classic" href="{$c->route('help')}">
<li>
<span class="icon">
<i class="zmdi zmdi-help"></i>
</span>
<span>{$c->__('page.help')}</span>
</li>
</a>

54
app/widgets/Presence/_presence_list.tpl

@ -3,7 +3,7 @@
<h3>{$c->__('status.status')}</h3>
<div>
<textarea
<textarea
spellcheck="false"
name="status"
placeholder="{$c->__('status.here')}"
@ -12,55 +12,57 @@
</div>
<div>
<ul class="active">
<li class="action">
<span class="icon bubble color small green"></span>
<div class="action">
<ul class="list active">
<li>
<span class="primary icon bubble color small green"></span>
<span class="control">
<div class="radio">
<input type="radio" name="value" id="chat" value="chat" {if="isset($p) && $p->value == 1"}checked="checked"{/if}/>
<label for="chat"></label>
</div>
</div>
<span>{$txt[1]}</span>
</span>
<p class="normal">{$txt[1]}</p>
</li>
<li class="action">
<span class="icon bubble color small orange"></span>
<div class="action">
<li>
<span class="primary icon bubble color small orange"></span>
<span class="control">
<div class="radio">
<input type="radio" name="value" id="away" value="away" {if="isset($p) && $p->value == 2"}checked="checked"{/if}/>
<label for="away"></label>
</div>
</div>
<span>{$txt[2]}</span>
</span>
<p class="normal">{$txt[2]}</p>
</li>
<li class="action">
<span class="icon bubble color small red"></span>
<div class="action">
<li>
<span class="primary icon bubble color small red"></span>
<span class="control">
<div class="radio">
<input type="radio" name="value" id="dnd" value="dnd" {if="isset($p) && $p->value == 3"}checked="checked"{/if}/>
<label for="dnd"></label>
</div>
</div>
<span>{$txt[3]}</span>
</span>
<p class="normal">{$txt[3]}</p>
</li>
<li class="action">
<span class="icon bubble color small purple"></span>
<div class="action">
<li>
<span class="primary icon bubble color small purple"></span>
<span class="control">
<div class="radio">
<input type="radio" name="value" id="xa" value="xa" {if="isset($p) && $p->value == 4"}checked="checked"{/if}/>
<label for="xa"></label>
</div>
</div>
<span>{$txt[4]}</span>
</span>
<p class="normal">{$txt[4]}</p>
</li>
</ul>
</div>
</form>
<ul class="active">
<li class="subheader">{$c->__('status.disconnect')}</li>
<ul class="list active">
<li class="subheader">
<p class="normal">{$c->__('status.disconnect')}</p>
</li>
<li onclick="{$calllogout}">
<span class="icon"><i class="zmdi zmdi-sign-in"></i></span>
<span>{$c->__('status.disconnect')}</span>
<span class="primary icon"><i class="zmdi zmdi-sign-in"></i></span>
<p class="normal">{$c->__('status.disconnect')}</p>
</li>
</ul>
<!--

2
app/widgets/Presence/presence.tpl

@ -1,3 +1,3 @@
<ul id="presence_widget" class="active oppose thick">
<ul id="presence_widget" class="list active thick">
{$presence}
</ul>

46
app/widgets/Publish/_publish_create.tpl

@ -1,4 +1,42 @@
<form name="post" class="block">
<header>
<ul class="list middle">
<li>
<span class="primary icon active" onclick="Publish.headerBack('{$server}', '{$node}', false);">
<i class="zmdi zmdi-arrow-back"></i>
</span>
<span id="button_send" class="control icon active" onclick="Publish.disableSend(); Publish_ajaxPublish(movim_form_to_json('post'));">
<i class="zmdi zmdi-mail-send"></i>
</span>
<span class="control icon active" onclick="Publish_ajaxHelp()">
<i class="zmdi zmdi-help"></i>
</span>
<span class="control icon active" onclick="Publish_ajaxPreview(movim_form_to_json('post'))">
<i class="zmdi zmdi-eye"></i>
</span>
{if="$item != false"}
<p class="line">{$c->__('publish.edit')}</p>
{else}
<p class="line">{$c->__('publish.new')}</p>
{/if}
<!--
<p>
{if="$item != null && $item->node != 'urn:xmpp:microblog:0'"}
{if="$item->name"}
{$item->name}
{else}
{$item->node}
{/if}
{else}
{$c->__('page.blog')}
{/if}
</p>-->
</li>
</ul>
</header>
<form name="post" class="block padded">
<input type="hidden" name="to" value="{$to}">
<input type="hidden" name="node" value="{$node}">
<input type="hidden" name="id" value="{if="$item != false"}{$item->nodeid}{/if}">
@ -38,13 +76,13 @@
<label for="content">{$c->__('post.content_label')}</label>
</div>
<ul class="middle flex active">
<ul class="list middle flex active">
{if="$c->supported('upload')"}
<li class="block large" onclick="Upload_ajaxRequest()">
<span class="icon">
<span class="primary icon">
<i class="zmdi zmdi-attachment-alt"></i>
</span>
<span>{$c->__('publish.attach')}</span>
<p class="normal line">{$c->__('publish.attach')}</p>
</li>
{/if}
</ul>

10
app/widgets/Publish/_publish_gallery.tpl

@ -1,10 +1,10 @@
<ul class="thick">
<li class="condensed">
<span class="icon bubble" style="background-image: url({$embed->images[0]['value']|htmlspecialchars});">
<ul class="list thick">
<li>
<span class="primary icon bubble" style="background-image: url({$embed->images[0]['value']|htmlspecialchars});">
<i class="zmdi zmdi-image"></i>
</span>
<span>{$c->__('post.gallery')}</span>
<p>
<p>{$c->__('post.gallery')}</p>
<p class="list">
<a href="{$embed->images[0]['value']|htmlspecialchars}" target="_blank">
{$embed->images[0]['value']|htmlspecialchars}
</a>

62
app/widgets/Publish/_publish_header.tpl

@ -1,44 +1,44 @@
<div>
<span class="on_desktop icon"><i class="zmdi zmdi-edit"></i></span>
<h2>{$c->__('publish.title')}</h2>
<ul class="list middle">
<li>
<span class="primary on_desktop icon"><i class="zmdi zmdi-edit"></i></span>
<p>{$c->__('publish.title')}</p>
</li>
</ul>
</div>
<div>
<div class="return active r3 condensed"
onclick="Publish.headerBack('{$server}', '{$node}', false)">
<span id="back" class="icon" ><i class="zmdi zmdi-arrow-back"></i></span>
{if="$post != false"}
<h2>{$c->__('publish.edit')}</h2>
{else}
<h2>{$c->__('publish.new')}</h2>
{/if}
<h4>
{if="$item != null && $item->node != 'urn:xmpp:microblog:0'"}
{if="$item->name"}
{$item->name}
{else}
{$item->node}
{/if}
{else}
{$c->__('page.blog')}
{/if}
</h4>
</div>
<ul class="active">
<li onclick="Publish_ajaxHelp()">
<span class="icon">
<ul class="list middle active">
<li>
<span id="back" class="primary icon" onclick="Publish.headerBack('{$server}', '{$node}', false)">
<i class="zmdi zmdi-arrow-back"></i>
</span>
<span class="control icon" onclick="Publish_ajaxHelp()">
<i class="zmdi zmdi-help"></i>
</span>
</li>
<li onclick="Publish_ajaxPreview(movim_form_to_json('post'))">
<span class="icon">
<span class="control icon" onclick="Publish_ajaxPreview(movim_form_to_json('post'))">
<i class="zmdi zmdi-eye"></i>
</span>
</li>
<li id="button_send"
<span class="control icon" id="button_send"
onclick="Publish.disableSend(); Publish_ajaxPublish(movim_form_to_json('post'));">
<span class="icon">
<i class="zmdi zmdi-mail-send"></i>
</span>
{if="$post != false"}
<p>{$c->__('publish.edit')}</p>
{else}
<p>{$c->__('publish.new')}</p>
{/if}
<p>
{if="$item != null && $item->node != 'urn:xmpp:microblog:0'"}
{if="$item->name"}
{$item->name}
{else}
{$item->node}
{/if}
{else}
{$c->__('page.blog')}
{/if}
</p>
</li>
</ul>
</div>

53
app/widgets/Publish/_publish_help.tpl

@ -1,81 +1,86 @@
<section>
<h3>{$c->__('post.help')}</h3>
<ul class="thick flex">
<ul class="list thick flex">
<li class="block">
<span class="icon">
<span class="primary icon">
<i class="zmdi zmdi-format-size"></i>
</span>
<p># Title H1</p>
<p>## Title H2…</p>
</li>
<li class="block">
<span class="icon">
<span class="primary icon">
<i class="zmdi zmdi-format-bold"></i>
</span>
<p>**bolded**</p>
<p>__bolded__</p>
</li>
<li class="block">
<span class="icon">
<span class="primary icon">
<i class="zmdi zmdi-format-italic"></i>
</span>
<p>*emphasis*</p>
<p>_emphasis_</p>
</li>
<li class="block">
<span class="icon">
<span class="primary icon">
<i class="zmdi zmdi-format-quote"></i>
</span>
<p>> Quoted line</p>
<p>> Quoted line</p>
</li>
<li class="block">
<span class="icon">
<span class="primary icon">
<i class="zmdi zmdi-format-list-bulleted"></i>
</span>
<p>* Item 1</p>
<p>* Item 2</p>
</li>
<li class="block">
<span class="icon">
<span class="primary icon">
<i class="zmdi zmdi-format-list-numbered"></i>
</span>
<p>1. Item 1</p>
<p>2. Item 2</p>
</li>
<li class="block">
<span class="icon">
<span class="primary icon">
<i class="zmdi zmdi-functions"></i>
</span>
<p>`Sourcecode`</p>
<p class="normal">`Sourcecode`</p>
</li>
<li class="block large">
<span class="icon">
<span class="primary icon">
<i class="zmdi zmdi-link"></i>
</span>
<p>[my text](http://my_url/)</p>
<p class="normal">[my text](http://my_url/)</p>
</li>
<li class="block large">
<span class="icon">
<span class="primary icon">
<i class="zmdi zmdi zmdi-image"></i>
</span>
<p>![Alt text](http://my_image_url/)</p>
<p class="normal">![Alt text](http://my_image_url/)</p>
</li>
</ul>
<ul class="active">
<li class="subheader">{$c->__('post.help_more')}</li>
<a href="http://daringfireball.net/projects/markdown/syntax" target="_blank">
<li class="condensed action">
<div class="action">
<i class="zmdi zmdi-chevron-right"></i>
</div>
<span class="icon color bubble blue">
<ul class="list">
<li class="subheader">
<p>{$c->__('post.help_more')}</p>
</li>
<li>
<span class="primary icon color bubble blue">
<i class="zmdi zmdi-star"></i>
</span>
<span>
{$c->__('post.help_manual')}
<span class="control icon gray">
<i class="zmdi zmdi-chevron-right"></i>
</span>
<p>http://daringfireball.net/projects/markdown/syntax</p>
<p class="line">
{$c->__('post.help_manual')}
</p>
<p class="line">
<a href="http://daringfireball.net/projects/markdown/syntax" target="_blank">
http://daringfireball.net/projects/markdown/syntax
</a>
</p>
</li>
</a>
</ul>

2
app/widgets/Publish/publish.js

@ -38,7 +38,7 @@ var Publish = {
// We are on the news page
if(typeof Post_ajaxClear === 'function') {
Post_ajaxClear();
Header_ajaxReset('news');
//Header_ajaxReset('news');
MovimTpl.hidePanel();
} else {
Group_ajaxGetItems(server, node);

24
app/widgets/Rooms/_rooms.tpl

@ -1,30 +1,32 @@
{if="!$c->supported('anonymous') && $c->getView() != 'room'"}
<ul class="thin divided spaced active">
<ul class="list divided spaced active">
<li class="subheader">
{$c->__('chatrooms.title')}
<span class="info">{$conferences|count}</span>
<p>
<span class="info">{$conferences|count}</span>
{$c->__('chatrooms.title')}
</p>
</li>
{loop="$conferences"}
<li data-jid="{$value->conference}"
{if="$value->nick != null"} data-nick="{$value->nick}" {/if}
class="room {if="$value->connected"}online{/if}">
{if="$value->connected"}
<span class="icon small bubble color {$value->name|stringToColor}"><i class="zmdi zmdi-accounts"></i></span>
<span class="primary icon small bubble color {$value->name|stringToColor}"><i class="zmdi zmdi-accounts"></i></span>
{else}
<span class="disabled icon small bubble color {$value->name|stringToColor}"><i class="zmdi zmdi-accounts-outline"></i></span>
<span class="primary disabled icon small bubble color {$value->name|stringToColor}"><i class="zmdi zmdi-accounts-outline"></i></span>
{/if}
<span>{$value->name}</span>
<span class="second">{$value->conference}</span>
<p class="normal line">{$value->name} <span class="second">{$value->conference}</span></p>
</li>
{/loop}
</ul>
{if="$conferences == null"}
<ul class="thick spaced">
<li class="condensed">
<span class="icon green">
<ul class="list thick spaced">
<li>
<span class="primary icon green">
<i class="zmdi zmdi-accounts-outline"></i>
</span>
<p>{$c->__('rooms.empty_text1')} {$c->__('rooms.empty_text2')}</p>
<p>{$c->__('rooms.empty_text1')}</p>
<p>{$c->__('rooms.empty_text2')}</p>
</li>
</ul>
{/if}

25
app/widgets/Rooms/_rooms_list.tpl

@ -1,38 +1,35 @@
<section class="scroll">
<h3>{$c->__('chatrooms.users')}</h3>
<br />
<ul>
<ul class="list middle">
{$presence = getPresencesTxt()}
{loop="$list"}
<li class="
action
{if="$value->last > 60"} inactive{/if}
{if="$value->status"}condensed{/if}"
<li class="{if="$value->last > 60"} inactive{/if}"
title="{$value->resource}">
{$url = $value->getPhoto('s')}
{if="$url"}
<span class="icon bubble status {$presence[$value->value]}">
<span class="primary icon bubble status {$presence[$value->value]}">
<img src="{$url}">
</span>
{else}
<span class="icon bubble color {$value->resource|stringToColor} status {$presence[$value->value]}">
<span class="primary icon bubble color {$value->resource|stringToColor} status {$presence[$value->value]}">
<i class="zmdi zmdi-account"></i>
</span>
</span>
{/if}
{if="$value->mucaffiliation =='owner'"}
<div class="action">
<div class="control">
<i class="zmdi zmdi-beenhere"></i>
</div>
{/if}
{if="$value->mucjid && strpos($value->mucjid, '/') == false && !$c->supported('anonymous')"}
<a href="{$c->route('contact', $value->mucjid)}">
<span>{$value->resource}</span>
</a>
<p class="line normal">
<a href="{$c->route('contact', $value->mucjid)}">{$value->resource}</a>
</p>
{else}
<span>{$value->resource}</span>
<p class="line normal">{$value->resource}</p>
{/if}
{if="$value->status"}
<p class="wrap">{$value->status}</p>
<p class="line">{$value->status}</p>
{/if}
</li>
{/loop}

6
app/widgets/Roster/_roster_search.tpl

@ -1,11 +1,11 @@
<section>
<h3>{$c->__('roster.search')}</h3>
<ul class="simple">
<ul class="list">
<li>
<form name="add">
<div>
<input
name="searchjid"
<input
name="searchjid"
type="email"
title="{$c->__('roster.jid')}"
placeholder="user@server.tld"

10
app/widgets/Roster/_roster_search_results.tpl

@ -1,17 +1,17 @@
<ul class="active">
<ul class="list active middle">
{loop="$contacts"}
<li class="condensed" onclick="Roster.setFound('{$value->jid}')">
<li onclick="Roster.setFound('{$value->jid}')">
{$url = $value->getPhoto('s')}
{if="$url"}
<span class="icon bubble">
<span class="primary icon bubble">
<img src="{$url}">
</span>
{else}
<span class="icon bubble color {$value->jid|stringToColor}">
<span class="primary icon bubble color {$value->jid|stringToColor}">
<i class="zmdi zmdi-account"></i>
</span>
{/if}
<span>{$value->getTrueName()}</span>
<p>{$value->getTrueName()}</p>
<p>{$value->jid}</p>
</li>
{/loop}

16
app/widgets/Roster/roster.css

@ -1,5 +1,10 @@
#roster form {
padding: 0 2rem;
#roster form div {
min-height: 0;
top: 0;
}
#roster form div input {
padding-top: 2rem;
}
#roster ul#rosterlist > div > li {
@ -16,16 +21,17 @@
overflow: hidden;
}
#roster ul#rosterlist > div li:first-child:before {
#roster ul#rosterlist > div li:first-child p:before {
font-family: "Material-Design-Iconic-Font";
content: "\f2fb";
display: inline-block;
float: left;
margin-right: 1rem;
}
#roster ul#rosterlist > div.groupshown li:first-child:before {
#roster ul#rosterlist > div.groupshown li:first-child p:before {
font-family: "Material-Design-Iconic-Font";
content: "\f2f9";
display: inline-block;
}
#roster ul#rosterlist > div.groupshown {

65
app/widgets/Roster/roster.tpl

@ -1,15 +1,30 @@
<div id="roster" ng-controller="RosterController as rosterCtrl">
<ul id="rosterlist" class="{if="isset($conf) && isset($conf.roster) && $conf.roster == 'show'"}offlineshown{/if} active all">
<header>
<ul class="list">
<li>
<span id="menu" class="primary on_mobile icon active" onclick="MovimTpl.toggleMenu()"><i class="zmdi zmdi-menu"></i></span>
<span class="primary on_desktop icon gray"><i class="zmdi zmdi-search"></i></span>
<form>
<div onclick="Roster.init();">
<input type="text" name="search" id="rostersearch" autocomplete="off" placeholder="{$c->__('roster.search');}"/>
</div>
</form>
</li>
</ul>
</header>
<ul id="rosterlist" class="list {if="isset($conf) && isset($conf.roster) && $conf.roster == 'show'"}offlineshown{/if} active all">
<div ng-if="contacts == null" class="empty placeholder icon contacts">
<h1>{$c->__('roster.no_contacts_title')}</h1>
<h4>{$c->__('roster.no_contacts_text')}</h4>
</div>
<li class="subheader search">{$c->__('roster.results')}</li>
<li class="subheader search">
<p>{$c->__('roster.results')}</p>
</li>
<div id="spinner">
<img src="{$base_uri}/app/widgets/Roster/img/movim_cloud.svg"/>
</div>
<div id="spinner">
<img src="{$base_uri}/app/widgets/Roster/img/movim_cloud.svg"/>
</div>
<div
ng-if="contacts != null && !group.tombstone"
@ -18,8 +33,10 @@
ng-class="{groupshown: rosterCtrl.groupIsShown(group.agroup)}" >
<li class="subheader" ng-click="rosterCtrl.showHideGroup(group.agroup)">
{{::group.agroup}}
<span class="info">{{rosterCtrl.getOnlineCount(group.agroupitems)}}/{{group.agroupitems.length}}</span>
<p>
<span class="info">{{rosterCtrl.getOnlineCount(group.agroupitems)}}/{{group.agroupitems.length}}</span>
{{::group.agroup}}
</p>
</li>
<li
ng-repeat="myjid in group.agroupitems track by myjid.ajid"
@ -28,9 +45,20 @@
class="{{myjid.ajiditems.rosterview.inactive}} action {{myjid.ajiditems.rosterview.presencetxt}}"
ng-attr-title="{{rosterCtrl.getContactTitle(myjid.ajiditems)}}"
ng-class="{condensed: myjid.ajiditems.status != '' && myjid.ajiditems.status != null }">
<!--ng-class="rosterCtrl.getContactClient(myjid.ajiditems)"-- >-->
<div
class="action"
<span
ng-if="::myjid.ajiditems.rosterview.avatar != false"
class="primary icon bubble status {{myjid.ajiditems.rosterview.presencetxt}}"
style="background-image: url({{::myjid.ajiditems.rosterview.avatar}})">
</span>
<span
ng-if="::myjid.ajiditems.rosterview.avatar== false"
class="primary icon bubble status {{myjid.ajiditems.rosterview.presencetxt}} color {{myjid.ajiditems.rosterview.color}}">
<i class="zmdi zmdi-account"></i>
</span>
<span
class="control icon gray"
ng-if="myjid.ajiditems.rosterview.tune || myjid.ajiditems.rosterview.type != '' || myjid.ajiditems.rosterview.subscription != 'both'"
ng-switch on="myjid.ajiditems.rosterview.type">
<i ng-switch-when="handheld" class="zmdi zmdi-smartphone"></i>
@ -41,23 +69,12 @@
<i ng-if="myjid.ajiditems.rosterview.subscription == 'to'" class="zmdi zmdi-arrow-in"></i>
<i ng-if="myjid.ajiditems.rosterview.subscription == 'from'" class="zmdi zmdi-arrow-out"></i>
<i ng-if="myjid.ajiditems.rosterview.subscription == 'none'" class="zmdi zmdi-block"></i>
</div>
<span
ng-if="::myjid.ajiditems.rosterview.avatar != false"
class="icon bubble status {{myjid.ajiditems.rosterview.presencetxt}}"
style="background-image: url({{::myjid.ajiditems.rosterview.avatar}})">
</span>
<span
ng-if="::myjid.ajiditems.rosterview.avatar== false"
class="icon bubble status {{myjid.ajiditems.rosterview.presencetxt}} color {{myjid.ajiditems.rosterview.color}}">
<i class="zmdi zmdi-account"></i>
</span>
<span>{{myjid.ajiditems.rosterview.name}}</span>
<p ng-if="myjid.ajiditems.status != ''" class="wrap">
<span>{{myjid.ajiditems.status}}</span>
<p class="normal">{{myjid.ajiditems.rosterview.name}}</p>
<p ng-if="myjid.ajiditems.status && myjid.ajiditems.status != ''">
{{myjid.ajiditems.status}}
</p>
</li>
</div>

12
app/widgets/Statistics/statistics.tpl

@ -1,22 +1,22 @@
<div id="statistics" class="tabelem" title="{$c->__("statistics.title")}">
<ul class="divided thick">
<ul class="list divided thick">
<li class="subheader">
{$c->__('statistics.sessions')} - {$sessions|count}
<p>{$c->__('statistics.sessions')} - {$sessions|count}</p>
</li>
{loop="$sessions"}
{$user = $c->getContact($value->username, $value->host)}
<li class="condensed">
<li>
{$url = $user->getPhoto('s')}
{if="$url"}
<span class="icon bubble">
<span class="primary icon bubble">
<img src="{$url}">
</span>
{else}
<span class="icon bubble color {$user->jid|stringToColor}">
<span class="primary icon bubble color {$user->jid|stringToColor}">
<i class="zmdi zmdi-account"></i>
</span>
{/if}
<span>{$user->getTrueName()} - {$value->username}@{$value->host} - {$value->domain}</span>
<p>{$user->getTrueName()} - {$value->username}@{$value->host} - {$value->domain}</p>
<p>
{if="isset($value->start)"}
{$c->getTime($value->start)}

8
app/widgets/Upload/_upload.tpl

@ -1,11 +1,11 @@
<section>
<h3>{$c->__('upload.title')}</h3>
<ul class="thick">
<li class="condensed">
<span class="icon bubble color green">
<ul class="list thick">
<li>
<span class="primary icon bubble color green">
<i class="zmdi zmdi-upload"></i>
</span>
<span>{$c->__('upload.choose')}</span>
<p>{$c->__('upload.choose')}</p>
<p>
<input type="file" id="file" />
</p>

44
app/widgets/Vcard4/_vcard4_form.tpl

@ -1,26 +1,30 @@
<ul>
<li class="subheader"> {$c->__('privacy.privacy_title')}</li>
<li class="condensed action">
<form>
<div class="control action">
<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 class="icon bubble color blue">
<ul class="list middle">
<li class="subheader">
<p>{$c->__('privacy.privacy_title')}</p>
</li>
<li>
<span class="primary icon bubble color blue">
<i class="zmdi zmdi-shield-security"></i>
</span>
<span class="control">
<form>
<div class="control action">
<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>
<span>{$c->__('privacy.privacy_question')}</span>
<p>{$c->__('privacy.privacy_question')}</p>
<p class="all">{$c->__('privacy.privacy_info')}</p>
</li>
</ul>

9
themes/material/css/article.css

@ -29,6 +29,7 @@ article section {
line-height: 3rem;
font-weight: 500;
padding: 0 2rem;
padding-top: 2rem;
}
article img,
@ -77,6 +78,14 @@ article section content pre {
font-family: monospace;
}
article section content pre {
color: white;
padding: 1rem;
font-size: 1.5rem;
margin: 1rem 0;
background-color: #333;
}
article section content cite,
article section content blockquote {
padding-left: 4rem;

1
themes/material/css/block.css

@ -33,5 +33,6 @@
.flex .block {
margin-bottom: 0;
flex: 1 100%;
max-width: 100%;
}
}

82
themes/material/css/color.css

@ -23,36 +23,6 @@ main > header a,
color: white;
}
/* Animations */
@keyframes colorful {
0% { background-color: #9E9E9E; }
10% { background-color: #607D8B; }
20% { background-color: #F44336; }
30% { background-color: #9C27B0; }
40% { background-color: #3F51B5; }
50% { background-color: #2196F3; }
60% { background-color: #689F38; }
70% { background-color: #FF9800; }
80% { background-color: #FDD835; }
90% { background-color: #795548; }
100% { background-color: #9E9E9E; }
}
@-webkit-keyframes colorful {
0% { background-color: #9E9E9E; }
10% { background-color: #607D8B; }
20% { background-color: #F44336; }
30% { background-color: #9C27B0; }
40% { background-color: #3F51B5; }
50% { background-color: #2196F3; }
60% { background-color: #689F38; }
70% { background-color: #FF9800; }
80% { background-color: #FDD835; }
90% { background-color: #795548; }
100% { background-color: #9E9E9E; }
}
/* Elements */
.bubble.color , .icon.color { color: white; background-color: #607D8B; border-color: #607D8B }
@ -72,18 +42,18 @@ span.icon.status.away:after,
.bubble.color.gray , .icon.color.gray { color: white; background-color: #9E9E9E; border-color: #9E9E9E }
.bubble.color.black , .icon.color.black { color: white; background-color: #000; border-color: #000 }
label.red , .icon.red , span.user.red { color: #F44336; }
label.purple, .icon.purple, span.user.purple { color: #9C27B0; }
label.indigo, .icon.indigo, span.user.indigo { color: #3F51B5; }
label.blue , .icon.blue , span.user.blue { color: #2196F3; }
label.green , .icon.green , span.user.green { color: #689F38; }
label.orange, .icon.orange, span.user.orange { color: #FF9800; }
label.yellow, .icon.yellow, span.user.yellow { color: #FBC02D; }
label.brown , .icon.brown , span.user.brown { color: #795548; }
label.red , .icon.red , p.user.red { color: #F44336; }
label.purple, .icon.purple, p.user.purple { color: #9C27B0; }
label.indigo, .icon.indigo, p.user.indigo { color: #3F51B5; }
label.blue , .icon.blue , p.user.blue { color: #2196F3; }
label.green , .icon.green , p.user.green { color: #689F38; }
label.orange, .icon.orange, p.user.orange { color: #FF9800; }
label.yellow, .icon.yellow, p.user.yellow { color: #FBC02D; }
label.brown , .icon.brown , p.user.brown { color: #795548; }
ul li.action > div.action,
ul li.action > form > div.action,
label.gray , .icon.gray , span.user.gray { color: #9E9E9E; }
label.black , .icon.black , span.user.black { color: #000; }
label.gray , .icon.gray , p.user.gray { color: #9E9E9E; }
label.black , .icon.black , p.user.black { color: #000; }
form input:focus:invalid,
form textarea:focus:invalid {
@ -94,24 +64,49 @@ form textarea:focus:invalid + label {
color: #F44336;
}
ul.list li > p:nth-last-of-type(3) + p,
ul.list li > p:nth-last-of-type(2) + p {
color: rgba(0, 0, 0, 0.60);
}
/* Default color : violet */
.button.color,
input[type=button].color,
ul li span.counter,
/*main > section > div > header,*/
main > header { background-color: #3F51B5; color: white; border-color: #3F51B5; }
.tabs,
.tabs a:not(.classic) {
.tabs a:not(.classic):not(.activity):not(.action) {
border-color: #3F51B5;
color: #3F51B5;
}
main > section > div > header.scroll {
background-color: #EEE;
}
main > section > div > header.big *,
.snackbar ul.list li > p:nth-last-of-type(2) + p,
main > header ul.list li > p:nth-last-of-type(2) + p,
header.big ul.list li > p:nth-last-of-type(2) + p {
color: white;
}
/*
.button.activity,
main > section > div > header ul.tabs > li,
main > section > div > header a:not(.classic):not(.activity):not(.action) {
border-color: white;
color: white;
}
*/
/* Gray accent : orange */
.button,
.button:not(.color),
input[type=button],
a:not(.classic) { color: #FF5722; border-color: #FF5722; }
a/*,
a:not(.classic):not(.activity):not(.action):not(.button)*/ { color: #FF5722; border-color: #FF5722; }
form > div .checkbox:before { background-color: #FFE0B2; }
form > div .checkbox > input[type="checkbox"]:checked + label { background-color: #FF5722; }
@ -121,6 +116,7 @@ ul li span.counter,
form > div .radio > input[type="radio"]:checked + label {
border-color: #FF5722;
background-color: #FF5722;
color: white;
}
form input:focus:not(:invalid) + label,

16
themes/material/css/form.css

@ -71,10 +71,13 @@ main > header form > div:not(.clear):not(.control) {
min-height: 0;
}
main > header li > form > div:not(.clear):not(.control) {
top: 1rem;
}
main > header form > div:not(.clear):not(.control) > input,
main > header form > div:not(.clear):not(.control) > .select {
margin-top: 1.5rem;
padding-top: 0.4rem;
padding-top: 0;
}
main > header form > div:not(.clear):not(.control) > .select option {
@ -389,6 +392,15 @@ header.big ~ .button.action {
background-color: white;
}
.button.activity {
display: inline-block;
margin: 0;
font-size: 3rem;
line-height: 7rem;
height: auto;
width: 7rem;
}
/* The textarea hidden div */
#hiddendiv {
position: fixed;

388
themes/material/css/listn.css

@ -0,0 +1,388 @@
ul.list {
list-style-type: none;
padding: 0;
}
ul.list.middle li:not(.subheader) {
padding: 0.75rem 0;
}
ul.list.thick li:not(.subheader) {
padding: 1.5rem 0;
}
ul.list li {
clear: both;
position: relative;
}
ul.list li > *:not(p) {
display: inline-block;
top: 0;
}
/* Active list */
ul.list.active li:hover:not(.subheader),
ul.list.active.all li:hover,
ul.list.active li.active:not(.subheader) {
background-color: rgba(0, 0, 0, 0.03);
cursor: pointer;
}
/* Divided list */
/*
ul.list.divided:not(.spaced) > li:not(:last-child),
ul.list.divided.spaced > li:not(:last-child).subheader,
ul.list.divided.spaced > li:not(:last-child):not(.subheader):after {
border-bottom-width: 1px;
border-bottom-style: solid;
}
ul.list.divided.spaced > *:not(:last-child):after {
position: absolute;
right: 0;
bottom: 0rem;
content: "";
display: block;
width: calc(100% - 9rem);
}
*/
/* Main elements */
ul.list li > .control,
ul.list li > .primary {
width: 5rem;
height: 5rem;
top: 50%;
margin-top: -2.5rem;
position: absolute;
}
ul.list li > .control.active,
ul.list li > .primary.active {
width: 7rem;
height: 7rem;
margin-top: -3.5rem;
line-height: 7rem;
}
ul.list li > .primary.active {
left: 0;
}
ul.list li > .control.small,
ul.list li > .primary.small {
width: 3rem;
height: 3rem;
margin-top: -1.5rem;
}
ul.list > li > *:not(.counter):not(span):not(.bubble),
ul.list li.subheader p {
width: 100%;
box-sizing: border-box;
padding-right: 2rem;
padding-left: 2rem;
}
/* Truncated content */
ul.list li.subheader > p,
ul.list li > p.line {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* Not sure */
/*ul.list li > p > span {
float: right;
font-size: 1.5rem;
color: gray;
}
*/
ul.list li > span.active {
transition: background-color 0.25s ease;
}
ul.list li > span.active:hover {
cursor: pointer;
background-color: rgba(0, 0, 0, 0.1);
}
/*
ul.list li > span.active {
overflow: hidden;
margin: -1rem;
padding: 1rem;
top: 1rem;
}
ul.list li > span.active:hover {
cursor: pointer;
}
ul.list li > span.active:after {
content: "";
background: rgba(255,255,255,0.3);
display: block;
position: absolute;
border-radius: 50%;
padding-top: 240%;
padding-left: 240%;
margin-top: -120%;
margin-left: -120%;
opacity: 0;
transition: all 1s;
}
ul.list li > span.active:active:after {
padding-top: 0;
padding-left: 0;
margin-top: 0;
margin-left: 0;
opacity: 1;
transition: 0s;
}
*/
ul.list li > p > span.second {
color: gray;
}
ul.list li > p > span.info {
float: right;
font-size: 1.5rem;
color: gray;
}
/* Size automagicaly the content */
ul.list li > p:first-of-type {
line-height: 5.5rem;
font-size: 3rem;
}
ul.list li > p.normal {
font-size: 2rem;
}
ul.list li > p.center {
text-align: center;
}
ul.list li > p:nth-last-of-type(3),
ul.list li > p:nth-last-of-type(2) {
line-height: 3rem;
font-size: 2rem;
}
ul.list li > p:nth-last-of-type(3) + p,
ul.list li > p:nth-last-of-type(2) + p {
line-height: 2.5rem;
font-size: 1.75rem;
max-height: 7.5rem;
overflow: hidden;
}
ul.list li > p:nth-last-of-type(3) + p.all,
ul.list li > p:nth-last-of-type(2) + p.all {
max-height: auto;
}
/* Subheader */
ul.list li.subheader > p {
font-size: 1.75rem;
line-height: 5rem;
font-weight: 600;
padding: 0 2rem;
}
/* If we have a primary control */
ul.list li > .primary {
left: 2rem;
}
ul.list li > .primary ~ *:not(.primary):not(.counter):not(.bubble):not(.control) {
padding-left: 9rem;
}
/* Place the other controls */
ul.list li > .control {
right: 0;
}
ul.list li > .control ~ .control {
right: 8rem;
}
ul.list li > .control ~ .control ~ .control {
right: 16rem;
}
/* Limit the size of the main content */
ul.list li > .control ~ *:not(.control):not(.bubble) {
width: calc(100% - 8rem);
}
ul.list li > .control ~ .control ~ *:not(.control):not(.bubble) {
width: calc(100% - 16rem);
}
ul.list li > .control ~ .control ~ .control ~ *:not(.control):not(.bubble) {
width: calc(100% - 24rem);
}
/* Tabs */
ul.tabs {
text-align: center;
border-bottom: 1px solid rgba(0, 0, 0, 0.12);
overflow: hidden;
white-space: nowrap;
height: 6rem;
line-height: 6rem;
}
ul.tabs:hover {
overflow-x: auto;
}
ul.tabs > li {
display: inline-block;
white-space: nowrap;
text-transform: uppercase;
font-size: 1.75rem;
font-weight: 600;
opacity: 0.6;
height: 6rem;
box-sizing: border-box;
}
ul.tabs > li > a {
padding: 0 3rem;
}
ul.tabs > li:hover {
cursor: pointer;
background-color: rgba(0, 0, 0, 0.05);
}
ul.tabs > li.active {
opacity: 1;
border-bottom-width: 2px;
border-bottom-style: solid;
}
/* Counter */
ul li span.counter:empty {
display: none;
}
ul li span.counter {
position: absolute;
right: 1rem;
top: calc(50% - 1.5rem);
line-height: 2rem;
border-radius: 3rem;
padding: 0.5rem;
text-align: center;
min-width: 2rem;
font-size: 2rem;
}
ul li span.counter.bottom {
top: calc(50%);
}
/* Bubble */
ul li div.bubble {
padding: 1rem 2rem;
border-radius: 0.25rem;
line-height: 2.75rem;
position: relative;
box-sizing: border-box;
display: block;
font-size: 1.75rem;
background-color: white;
border-color: white;
max-width: calc(100% - 9rem);
float: left;
left: 9rem;
padding-left: 2rem;
width: auto;
}
ul li div.bubble > p {
display: inline;
}
ul li.oppose div.bubble {
margin-right: 9rem;
float: right;
position: initial;
}
ul li div.bubble span.info {
float: right;
padding-left: 1rem;
}
ul li.same span.icon {
display: none;
}
ul li div.bubble:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}
ul li:not(.same) div.bubble:before {
content: "";
position: absolute;
top: 0;
left: -1.5rem;
border-top: 1.5rem solid black;
border-top-color: inherit;
border-left: 1.5rem solid transparent;
border-right: 1.5rem solid transparent;
}
ul li.oppose:not(.same) div.bubble:before {
left: calc(100% - 10.5rem);
top: 1.5rem;
}
/* Menu */
ul.context_menu {
border-radius: 0.25rem;
overflow: hidden;
background-color: white;
color: #333;
position: absolute;
top: 0;
right: 0;
margin: 0.5rem;
z-index: 3;
box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.26), 0px 2px 10px 0px rgba(0, 0, 0, 0.16);
display: none;
}
ul.context_menu.shown {
display: block;
}

30
themes/material/css/menu.css

@ -1,27 +1,37 @@
/* Menu */
body > nav > ul span.icon {
body > nav > ul.list li > .primary {
left: 1rem;
}
/*
body > nav > ul:first-child > a:first-child > li,
body > nav > ul:first-child > a:nth-child(2) > li {
height: 7rem;
line-height: 7rem;
height: 8rem;
line-height: 8rem;
}
*/
body > nav > ul:nth-child(2) li p.normal,
body > nav > ul:nth-child(3) li p.normal {
height: 6rem;
line-height: 6rem;
}
/*
body > nav > ul:first-child > a:first-child > li div.control {
line-height: 7rem;
line-height: 8rem;
}
*/
body > nav > ul a {
color: white;
}
body > nav > ul p {
body > nav > ul.list li > p:nth-last-of-type(2) + p {
color: gray;
}
body > nav > ul.list.active li:hover:not(.subheader),
body > nav > ul.list.active li.active:not(.subheader) {
background-color: rgba(255, 255, 255, 0.035);
}
/*
body > nav > header.big {
overflow: hidden;
height: 7rem;
@ -40,6 +50,7 @@ body > nav > header.big ul li .icon {
body > nav > header.big ul li .control {
line-height: 5rem;
}
*/
ul.oppose {
position: absolute;
@ -47,3 +58,4 @@ ul.oppose {
width: 100%;
min-width: 10rem;
}

52
themes/material/css/style.css

@ -247,13 +247,13 @@ main > header {
}
main > header > div {
padding-left: 9rem;
/*padding-left: 9rem;*/
position: relative;
width: 35%;
display: inline-block;
/*overflow: hidden;*/
box-sizing: border-box;
padding-right: 1rem;
/*padding-right: 1rem;*/
}
main > header > div > .return > * {
@ -262,7 +262,7 @@ main > header > div > .return > * {
overflow: hidden;
}
main > header > div > ul.active:not(.context_menu) {
/*main > header > div > ul.active:not(.context_menu) {
float: right;
margin-right: -1rem;
}
@ -288,7 +288,7 @@ main > header > div > ul.active:not(.context_menu) li span.icon {
main > header > div > ul.active:not(.context_menu) li.thin span.icon {
width: 3rem;
}
*/
main > header > div:first-child:nth-last-child(2) ~ div {
width: 65%;
position: absolute;
@ -392,10 +392,12 @@ main > section > div:first-child:nth-last-child(2) ~ div {
position: absolute;
top: 0;
right: 0;
/*transition: right 0.2s ease;*/
-webkit-transition: -webkit-transform .3s cubic-bezier(.4,0,.2,1);
transition: transform .3s cubic-bezier(.4,0,.2,1);
background-color: #EEE;
-webkit-transition: left .3s cubic-bezier(.4,0,.2,1);
transition: left .3s cubic-bezier(.4,0,.2,1);
}
main > section > div:first-child:nth-last-child(2) ~ div {
background-color: white;
}
main > section > div > div.contained { /* Specific behaviour when the scroll need to be inside the block */
@ -418,15 +420,13 @@ main > section > div > div.contained > * {
}
main > section > div:first-child:nth-last-child(2) ~ div {
width: 100%;
-webkit-transform: translateX(100%);
transform: translateX(100%);
left: 100%;
z-index: 1;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.23), 0 0 10px rgba(0, 0, 0, 0.16);
}
main > section > div:first-child:nth-last-child(2) ~ div.enabled {
-webkit-transform: translateX(0);
transform: translateX(0);
left: 0%;
}
main,
@ -445,15 +445,15 @@ main footer {
/* Icon */
span.icon {
width: 5rem;
/*width: 5rem;
height: 5rem;
position: absolute;
position: absolute;*/
font-size: 3rem;
line-height: 5rem;
top: 50%;
left: 2rem;
/*top: 50%;
left: 2rem;*/
text-align: center;
margin-top: -2.5rem;
/*margin-top: -2.5rem;*/
background-size: cover;
background-position: center;
}
@ -463,7 +463,7 @@ span.icon img {
max-height: 100%;
}
span.icon.thumb {
span.icon.primary.thumb {
left: 0;
width: 7rem;
top: 0;
@ -561,22 +561,6 @@ main ul li .control > i {
border: none;
}
/* Header */
header.big {
background-size: cover, cover;
background-position: center center;
width: 100%;
max-width: 100%;
color: white;
position: relative;
margin-bottom: 2rem;
}
header.big p {
color: white;
}
/* Dialog */
.dialog {

Loading…
Cancel
Save