Просмотр исходного кода

Merge branch 'master' of https://github.com/unaio/una

RomanL 5 лет назад
Родитель
Сommit
18282623f7
78 измененных файлов с 955 добавлено и 287 удалено
  1. 13 10
      install/sql/system.sql
  2. 1 1
      modules/base/profile/classes/BxBaseModProfileTemplate.php
  3. 12 0
      modules/boonex/artificer/data/template/bx_forum/css/main.css
  4. 3 3
      modules/boonex/artificer/data/template/bx_forum/participants.html
  5. 1 1
      modules/boonex/artificer/data/template/bx_timeline/item_outline.html
  6. 1 1
      modules/boonex/artificer/data/template/bx_timeline/item_timeline.html
  7. 1 1
      modules/boonex/artificer/data/template/bx_timeline/type_post.html
  8. 2 2
      modules/boonex/artificer/data/template/mod_general/css/main.css
  9. 2 2
      modules/boonex/artificer/data/template/mod_groups/cover.html
  10. 0 3
      modules/boonex/artificer/data/template/mod_groups/css/main.css
  11. 3 2
      modules/boonex/artificer/data/template/mod_groups/unit.html
  12. 3 3
      modules/boonex/artificer/data/template/mod_profile/cover.html
  13. 27 7
      modules/boonex/artificer/data/template/mod_profile/css/main.css
  14. 1 1
      modules/boonex/artificer/data/template/mod_profile/menu_custom_actions.html
  15. 1 1
      modules/boonex/artificer/data/template/mod_profile/menu_custom_item_actions.html
  16. 1 1
      modules/boonex/artificer/data/template/mod_profile/unit.html
  17. 4 3
      modules/boonex/artificer/data/template/mod_profile/unit_with_cover.html
  18. 5 1
      modules/boonex/artificer/data/template/system/_header_js_custom.html
  19. 7 0
      modules/boonex/artificer/data/template/system/_row_1_column_half.html
  20. 7 0
      modules/boonex/artificer/data/template/system/_row_1_column_thin.html
  21. 1 1
      modules/boonex/artificer/data/template/system/_sub_footer.html
  22. 3 3
      modules/boonex/artificer/data/template/system/_sub_header.html
  23. 16 0
      modules/boonex/artificer/data/template/system/comment_attachments.html
  24. 18 25
      modules/boonex/artificer/data/template/system/cover.html
  25. 27 33
      modules/boonex/artificer/data/template/system/cover_home.html
  26. 1 1
      modules/boonex/artificer/data/template/system/css/cmts.css
  27. 1 3
      modules/boonex/artificer/data/template/system/css/cover.css
  28. 22 10
      modules/boonex/artificer/data/template/system/css/default.less
  29. 26 21
      modules/boonex/artificer/data/template/system/css/forms.css
  30. 2 0
      modules/boonex/artificer/data/template/system/css/menu-sidebar.css
  31. 17 0
      modules/boonex/artificer/data/template/system/css/vote.css
  32. 2 2
      modules/boonex/artificer/data/template/system/informer.html
  33. 2 2
      modules/boonex/artificer/data/template/system/menu_meta_item.html
  34. 10 8
      modules/boonex/artificer/data/template/system/profile_avatar.html
  35. 1 1
      modules/boonex/artificer/data/template/system/profile_stats.html
  36. 21 0
      modules/boonex/artificer/data/template/system/scripts/BxTemplCmtsUploaderHTML5.php
  37. 3 0
      modules/boonex/artificer/data/template/system/scripts/BxTemplMenuToolbar.php
  38. 4 0
      modules/boonex/artificer/data/template/system/scripts/BxTemplPageHome.php
  39. 1 1
      modules/boonex/artificer/data/template/system/view_counter.html
  40. 2 2
      modules/boonex/artificer/data/template/system/view_counter_label.html
  41. 1 1
      modules/boonex/artificer/data/template/system/vote_counter_label_likes.html
  42. 1 1
      modules/boonex/artificer/data/template/system/vote_counter_label_reactions.html
  43. 16 0
      modules/boonex/artificer/data/template/system/vote_do_vote_stars.html
  44. 1 1
      modules/boonex/artificer/js/utils.js
  45. 21 0
      modules/boonex/decorous/data/template/system/scripts/BxTemplCmtsUploaderHTML5.php
  46. 2 0
      modules/boonex/english/data/langs/system/en.xml
  47. 21 0
      modules/boonex/lucid/data/template/system/scripts/BxTemplCmtsUploaderHTML5.php
  48. 21 0
      modules/boonex/ocean/data/template/system/scripts/BxTemplCmtsUploaderHTML5.php
  49. 21 0
      modules/boonex/protean/data/template/system/scripts/BxTemplCmtsUploaderHTML5.php
  50. 3 1
      modules/boonex/russian/data/langs/system/ru.xml
  51. 2 20
      modules/boonex/stream/classes/BxStrmTemplate.php
  52. 1 0
      modules/boonex/stream/install/config.php
  53. 2 0
      modules/boonex/stream/install/langs/en.xml
  54. 5 2
      modules/boonex/stream/install/sql/enable.sql
  55. 1 1
      modules/boonex/stream/template/css/main.css
  56. 155 28
      modules/boonex/stream/template/stream_broadcast_ome.html
  57. 9 7
      modules/boonex/timeline/classes/BxTimelineTemplate.php
  58. 224 11
      plugins_public/tailwind/css/tailwind.css
  59. 0 0
      plugins_public/tailwind/css/tailwind.min.css
  60. 34 4
      plugins_public/tailwind/js/tailwind.config.js
  61. 7 0
      template/_row_1_column_half.html
  62. 7 0
      template/_row_1_column_thin.html
  63. 2 2
      template/comments_uploader_bs.html
  64. 8 9
      template/cover.html
  65. 4 0
      template/css/common.css
  66. 4 0
      template/css/default.less
  67. 11 0
      template/css/page_layouts.css
  68. BIN
      template/images/layout_1_column_half.png
  69. BIN
      template/images/layout_1_column_thin.png
  70. 6 0
      template/layout_1_column_half.html
  71. 6 0
      template/layout_1_column_thin.html
  72. 7 5
      template/profile_avatar.html
  73. 2 2
      template/scripts/BxBaseCmtsForm.php
  74. 22 0
      template/scripts/BxBaseCmtsUploaderHTML5.php
  75. 26 21
      template/scripts/BxBaseCover.php
  76. 1 1
      template/scripts/BxBaseFormView.php
  77. 4 0
      template/scripts/BxBasePageHome.php
  78. 22 14
      template/scripts/BxBaseServiceProfiles.php

+ 13 - 10
install/sql/system.sql

@@ -1089,8 +1089,8 @@ INSERT INTO `sys_acl_levels` (`ID`, `Name`, `Icon`, `Description`, `Active`, `Pu
 (4, '_adm_prm_txt_level_unconfirmed', 'user bx-def-font-color', '', 'yes', 'no', 'no', 0, 0, 0, 4),
 (5, '_adm_prm_txt_level_pending', 'user bx-def-font-color', '', 'yes', 'no', 'no', 0, 0, 0, 5),
 (6, '_adm_prm_txt_level_suspended', 'user bx-def-font-color', '', 'yes', 'no', 'no', 0, 0, 0, 6),
-(7, '_adm_prm_txt_level_moderator', 'user-secret bx-def-font-color', '', 'yes', 'no', 'no', 0, 0, 0, 7),
-(8, '_adm_prm_txt_level_administrator', 'user-secret bx-def-font-color', '', 'yes', 'no', 'no', 0, 0, 0, 8),
+(7, '_adm_prm_txt_level_moderator', 'user-secret col-blue3', '', 'yes', 'no', 'no', 0, 0, 0, 7),
+(8, '_adm_prm_txt_level_administrator', 'user-secret col-blue3', '', 'yes', 'no', 'no', 0, 0, 0, 8),
 (9, '_adm_prm_txt_level_premium', 'user col-red3', '', 'yes', 'yes', 'no', 0, 0, 0, 9);
 
 
@@ -3180,6 +3180,7 @@ INSERT INTO `sys_objects_uploader` (`object`, `active`, `override_class_name`, `
 ('sys_video_recording', 1, 'BxTemplUploaderVideoRecording', ''),
 ('sys_crop', 1, 'BxTemplUploaderCrop', ''),
 ('sys_cmts_simple', 1, 'BxTemplCmtsUploaderSimple', ''),
+('sys_cmts_html5', 1, 'BxTemplCmtsUploaderHTML5', ''),
 ('sys_settings_html5', 1, 'BxTemplStudioSettingsUploaderHTML5', ''),
 ('sys_builder_page_simple', 1, 'BxTemplStudioBuilderPageUploaderSimple', ''),
 ('sys_builder_page_html5', 1, 'BxTemplStudioBuilderPageUploaderHTML5', ''),
@@ -3357,7 +3358,7 @@ INSERT INTO `sys_form_inputs` (`object`, `module`, `name`, `value`, `values`, `c
 ('sys_comment', 'system', 'cmt_parent_id', '', '', 0, 'hidden', '_sys_form_comment_input_caption_system_cmt_parent_id', '', '', 0, 0, 0, '', '', '', '', '', '', 'Int', '', 0, 0),
 ('sys_comment', 'system', 'cmt_text', '', '', 0, 'textarea', '_sys_form_comment_input_caption_system_cmt_text', '', '', 0, 0, 3, 'a:1:{s:12:"autocomplete";s:3:"off";}', '', '', '', '', '', 'XssHtml', '', 1, 0),
 ('sys_comment', 'system', 'cmt_anonymous', '', '', 0, 'switcher', '_sys_form_input_sys_anonymous', '_sys_form_input_anonymous', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
-('sys_comment', 'system', 'cmt_image', 'a:1:{i:0;s:15:"sys_cmts_simple";}', 'a:1:{s:15:"sys_cmts_simple";s:26:"_sys_uploader_simple_title";}', 0, 'files', '_sys_form_comment_input_caption_system_cmt_image', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('sys_comment', 'system', 'cmt_image', 'a:1:{i:0;s:14:"sys_cmts_html5";}', 'a:1:{s:14:"sys_cmts_html5";s:25:"_sys_uploader_html5_title";}', 0, 'files', '_sys_form_comment_input_caption_system_cmt_image', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
 ('sys_comment', 'system', 'cmt_controls', '', 'cmt_submit,cmt_cancel', 0, 'input_set', '', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 0, 0),
 ('sys_comment', 'system', 'cmt_cancel', '_sys_form_comment_input_cancel', '', 0, 'button', '_sys_form_comment_input_caption_system_cmt_cancel', '', '', 0, 0, 0, 'a:1:{s:5:"class";s:22:"bx-def-margin-sec-left";}', '', '', '', '', '', '', '', 0, 0),
 ('sys_comment', 'system', 'cmt_submit', '_sys_form_comment_input_submit', '', 0, 'submit', '_sys_form_comment_input_caption_system_cmt_submit', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 0, 0),
@@ -3370,7 +3371,7 @@ INSERT INTO `sys_form_inputs` (`object`, `module`, `name`, `value`, `values`, `c
 ('sys_review', 'system', 'cmt_text', '', '', 0, 'textarea', '_sys_form_review_input_caption_system_cmt_text', '', '', 0, 0, 3, 'a:1:{s:12:"autocomplete";s:3:"off";}', '', '', 'Length', 'a:2:{s:3:"min";i:1;s:3:"max";i:5000;}', '_Please enter n1-n2 characters', 'XssHtml', '', 1, 0),
 ('sys_review', 'system', 'cmt_mood', '', '', 0, 'custom', '_sys_form_review_input_caption_system_cmt_mood', '', '', 0, 0, 0, '', '', '', '', '', '', 'Int', '', 1, 0),
 ('sys_review', 'system', 'cmt_anonymous', '', '', 0, 'switcher', '_sys_form_input_sys_anonymous', '_sys_form_input_anonymous', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
-('sys_review', 'system', 'cmt_image', 'a:1:{i:0;s:15:"sys_cmts_simple";}', 'a:1:{s:15:"sys_cmts_simple";s:26:"_sys_uploader_simple_title";}', 0, 'files', '_sys_form_review_input_caption_system_cmt_image', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('sys_review', 'system', 'cmt_image', 'a:1:{i:0;s:14:"sys_cmts_html5";}', 'a:1:{s:14:"sys_cmts_html5";s:26:"_sys_uploader_simple_title";}', 0, 'files', '_sys_form_review_input_caption_system_cmt_image', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
 ('sys_review', 'system', 'cmt_submit', '_sys_form_review_input_submit', '', 0, 'submit', '_sys_form_review_input_caption_system_cmt_submit', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 0, 0),
 
 ('sys_report', 'system', 'sys', '', '', 0, 'hidden', '_sys_form_report_input_caption_system_sys', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 0, 0),
@@ -4990,10 +4991,10 @@ INSERT INTO `sys_objects_page` (`object`, `uri`, `title_system`, `title`, `modul
 ('sys_dashboard_content', 'dashboard-content', '_sys_page_title_system_dashboard_content', '_sys_page_title_dashboard_content', 'system', 1, 12, '', 2147483646, 1, 'page.php?i=dashboard-content', '', '', '', 0, 1, 0, 'BxTemplPageDashboard', '', 0),
 ('sys_dashboard_reports', 'dashboard-reports', '_sys_page_title_system_dashboard_reports', '_sys_page_title_dashboard_reports', 'system', 1, 12, '', 2147483646, 1, 'page.php?i=dashboard-reports', '', '', '', 0, 1, 0, 'BxTemplPageDashboard', '', 0),
 ('sys_dashboard_audit', 'dashboard-audit', '_sys_page_title_system_dashboard_audit', '_sys_page_title_dashboard_audit', 'system', 1, 12, '', 2147483646, 1, 'page.php?i=dashboard-audit', '', '', '', 0, 1, 0, 'BxTemplPageDashboard', '', 0),
-('sys_create_account', 'create-account', '_sys_page_title_system_create_account', '_sys_page_title_create_account', 'system', 1, 5, '', 2147483647, 1, 'page.php?i=create-account', '', '', '', 0, 1, 0, '', '', 0),
-('sys_login', 'login', '_sys_page_title_system_login', '_sys_page_title_login', 'system', 1, 5, '', 2147483647, 1, 'page.php?i=login', '', '', '', 0, 1, 0, '', '', 0),
-('sys_login_step2', 'login-step2', '_sys_page_title_system_login_step2', '_sys_page_title_login_step2', 'system', 1, 5, '', 2147483647, 1, 'page.php?i=login-step2', '', '', '', 0, 1, 0, '', '', 0),
-('sys_login_step3', 'login-step3', '_sys_page_title_system_login_step3', '_sys_page_title_login_step3', 'system', 1, 5, '', 2147483647, 1, 'page.php?i=login-step3', '', '', '', 0, 1, 0, '', '', 0),
+('sys_create_account', 'create-account', '_sys_page_title_system_create_account', '_sys_page_title_create_account', 'system', 1, 18, '', 2147483647, 1, 'page.php?i=create-account', '', '', '', 0, 1, 0, '', '', 0),
+('sys_login', 'login', '_sys_page_title_system_login', '_sys_page_title_login', 'system', 1, 18, '', 2147483647, 1, 'page.php?i=login', '', '', '', 0, 1, 0, '', '', 0),
+('sys_login_step2', 'login-step2', '_sys_page_title_system_login_step2', '_sys_page_title_login_step2', 'system', 1, 18, '', 2147483647, 1, 'page.php?i=login-step2', '', '', '', 0, 1, 0, '', '', 0),
+('sys_login_step3', 'login-step3', '_sys_page_title_system_login_step3', '_sys_page_title_login_step3', 'system', 1, 18, '', 2147483647, 1, 'page.php?i=login-step3', '', '', '', 0, 1, 0, '', '', 0),
 ('sys_forgot_password', 'forgot-password', '_sys_page_title_system_forgot_password', '_sys_page_title_forgot_password', 'system', 1, 5, '', 2147483647, 1, 'page.php?i=forgot-password', '', '', '', 0, 1, 0, '', '', 0),
 ('sys_confirm_email', 'confirm-email', '_sys_page_title_system_confirm_email', '_sys_page_title_confirm_email', 'system', 1, 5, '', 2147483647, 1, 'page.php?i=confirm-email', '', '', '', 0, 1, 0, '', '', 0),
 ('sys_confirm_phone', 'confirm-phone', '_sys_page_title_system_confirm_phone', '_sys_page_title_confirm_phone', 'system', 1, 5, '', 2147483647, 1, 'page.php?i=confirm-phone', '', '', '', 0, 1, 0, '', '', 0),
@@ -5052,7 +5053,9 @@ INSERT INTO `sys_pages_layouts` (`id`, `name`, `icon`, `title`, `template`, `cel
 (14, 'bar_content_bar', 'layout_bar_content_bar.png', '_sys_layout_bar_content_bar', 'layout_bar_content_bar.html', 3),
 (15, 'top_area_bar_content_bar', 'layout_top_area_bar_content_bar.png', '_sys_layout_top_area_bar_content_bar', 'layout_top_area_bar_content_bar.html', 4),
 (16, 'topbottom_area_col1_col3_col2', 'layout_topbottom_area_col1_col3_col2.png', '_sys_layout_topbottom_area_col1_col3_col2', 'layout_topbottom_area_col1_col3_col2.html', 5),
-(17, 'topbottom_area_col1_col5', 'layout_topbottom_area_col1_col5.png', '_sys_layout_topbottom_area_col1_col5', 'layout_topbottom_area_col1_col5.html', 4);
+(17, 'topbottom_area_col1_col5', 'layout_topbottom_area_col1_col5.png', '_sys_layout_topbottom_area_col1_col5', 'layout_topbottom_area_col1_col5.html', 4),
+(18, '1_column_thin', 'layout_1_column_thin.png', '_sys_layout_1_column_thin', 'layout_1_column_thin.html', 1),
+(19, '1_column_half', 'layout_1_column_half.png', '_sys_layout_1_column_half', 'layout_1_column_half.html', 1);
 
 CREATE TABLE IF NOT EXISTS `sys_pages_design_boxes` (
   `id` int(11) NOT NULL,
@@ -5145,7 +5148,7 @@ INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title_system`, `
 -- content blocks
 INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `tabs`, `async`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES
 
-('sys_home', 0, 'system', '', '_sys_page_block_title_profile_avatar', 3, 0, 0, 2147483644, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:14:"profile_avatar";s:6:"params";a:0:{}s:5:"class";s:20:"TemplServiceProfiles";}', 0, 0, 1, 1),
+('sys_home', 0, 'system', '', '_sys_page_block_title_profile_avatar', 3, 0, 0, 2147483646, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:14:"profile_avatar";s:6:"params";a:0:{}s:5:"class";s:20:"TemplServiceProfiles";}', 0, 0, 1, 1),
  
 ('sys_home', 0, 'system', '', '_sys_page_block_title_profile_menu', 3, 0, 0, 2147483644, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:12:"profile_menu";s:6:"params";a:0:{}s:5:"class";s:20:"TemplServiceProfiles";}', 0, 0, 1, 2),
 

+ 1 - 1
modules/base/profile/classes/BxBaseModProfileTemplate.php

@@ -184,7 +184,7 @@ class BxBaseModProfileTemplate extends BxBaseModGeneralTemplate
             $aTmplVarsMeta = $this->getSnippetMenuVars ($iProfile, $bPublic);
 
         return array_merge(array (
-            'class' => $this->_getUnitClass($aData, $sTemplate),
+            'class' => $this->_getUnitClass($aData, $sTemplate) . (!$bCoverUrl ? ' bx-cover-empty' : ''),
             'id' => $iContentId,
             'public' => $bPublic,
             'bx_if:show_thumbnail' => array(

+ 12 - 0
modules/boonex/artificer/data/template/bx_forum/css/main.css

@@ -26,6 +26,18 @@ div.bx-forum-participants.none .bx-forum-participant {
     float: none;
     margin-left: 0.75rem;
 }
+.bx-forum-participant .bx-forum-participant-alert-last-replier {
+    left: -0.375rem;
+    right: auto;
+    top: -0.375rem;
+    bottom: auto;
+}
+.bx-forum-participant .bx-forum-participant-alert-author {
+    left: -0.375rem;
+    right: auto;
+    top: auto;
+    bottom: -0.375rem;
+}
 
 
 /*-- Grid: Preview --*/

+ 3 - 3
modules/boonex/artificer/data/template/bx_forum/participants.html

@@ -3,15 +3,15 @@
         <div class="bx-forum-participant __class__ relative">
             __unit__
             <bx_if:replies_count>
-                <div class="bx-def-unit-alert absolute h-4 w-4 -top-1 bottom-auto left-auto -right-1.5 p-1 box-content bg-red-500">__count__</div>
+                <div class="bx-def-unit-alert absolute h-4 w-4 -top-1.5 bottom-auto left-auto -right-1.5 p-1 box-content bg-red-500">__count__</div>
             </bx_if:replies_count>
             <bx_if:last_replier>
-                <div title="__title__" class="bx-forum-participant-alert-last-replier bx-def-unit-alert absolute h-4 w-4 -top-1 bottom-auto -left-1.5 right-auto p-1 box-content bg-green-500">
+                <div title="__title__" class="bx-forum-participant-alert-last-replier bx-def-unit-alert absolute h-4 w-4 -top-1.5 bottom-auto -left-1.5 right-auto p-1 box-content bg-green-500">
                     <i class="sys-icon comments bx-def-font-contrasted"></i>
                 </div>
             </bx_if:last_replier>
             <bx_if:author>
-                <div title="__title__" class="bx-forum-participant-alert-author bx-def-unit-alert absolute h-4 w-4 top-auto -bottom-1 -left-1.5 right-auto p-1 box-content bg-green-500">
+                <div title="__title__" class="bx-forum-participant-alert-author bx-def-unit-alert absolute h-4 w-4 top-auto -bottom-1.5 -left-1.5 right-auto p-1 box-content bg-green-500">
                     <i class="sys-icon user bx-def-font-contrasted"></i>
                 </div>
             </bx_if:author>

+ 1 - 1
modules/boonex/artificer/data/template/bx_timeline/item_outline.html

@@ -15,7 +15,7 @@
                 <div class="__style_prefix__-owner-avatar flex-shrink-0">__item_owner_unit__</div>
                 <div class="__style_prefix__-owner-info ml-3">
                     <div class="__style_prefix__-owner-name flex flex-wrap text-sm text-gray-500 dark:text-gray-400">
-                        <a href="__item_owner_url__" class="__style_prefix__-owner-name mr-1 whitespace-nowrap hover:underline text-gray-700 dark:text-gray-200 hover:text-gray-900 dark:hover:text-white font-semibold" title="__item_owner_title__">__item_owner_name__</a>
+                        <a href="__item_owner_url__" class="__style_prefix__-owner-name mr-1 whitespace-nowrap text-gray-700 dark:text-gray-200 hover:text-gray-900 dark:hover:text-white font-semibold" title="__item_owner_title__">__item_owner_name__</a>
                         <bx_if:show_owner_actions>
                             <span class="__style_prefix__-owner-actions">
                                 <bx_repeat:owner_actions>

+ 1 - 1
modules/boonex/artificer/data/template/bx_timeline/item_timeline.html

@@ -19,7 +19,7 @@
             <div class="__style_prefix__-owner-avatar flex-shrink-0">__item_owner_unit__</div>
             <div class="__style_prefix__-owner-info ml-3">
                 <div class="__style_prefix__-owner-name flex flex-wrap text-sm text-gray-500 dark:text-gray-400">
-                    <a href="__item_owner_url__" class="__style_prefix__-owner-name mr-1 whitespace-nowrap hover:underline text-gray-700 dark:text-gray-200 hover:text-gray-900 dark:hover:text-white font-semibold" title="__item_owner_title__">__item_owner_name__</a> 
+                    <a href="__item_owner_url__" class="__style_prefix__-owner-name mr-1 whitespace-nowrap text-gray-700 dark:text-gray-200 hover:text-gray-900 dark:hover:text-white font-semibold" title="__item_owner_title__">__item_owner_name__</a> 
                     <bx_if:show_owner_actions>
                         <span class="__style_prefix__-owner-actions">
                             <bx_repeat:owner_actions>

+ 1 - 1
modules/boonex/artificer/data/template/bx_timeline/type_post.html

@@ -20,7 +20,7 @@
         <div class="__style_prefix__-title text-lg lg:text-xl font-semibold text-gray-700 group-hover:text-gray-900 dark:text-gray-300 dark:group-hover:text-white mb-1 lg:mb-2 ">__title__</div>
     </bx_if:show_title>
     <bx_if:show_content>
-        <div class="__style_prefix__-content text-sm lg:text-base text-gray-500 group-hover:text-gray-600 dark:text-gray-400 dark:group-hover:text-gray-300 mb-2 md:mb-3 lg:mb-4">__item_content__</div>
+        <div class="__style_prefix__-content text-sm lg:text-base text-gray-500 group-hover:text-gray-600 dark:text-gray-400 dark:group-hover:text-gray-300 mb-2">__item_content__</div>
     </bx_if:show_content>
 </div>
 <bx_if:show_attachments>

+ 2 - 2
modules/boonex/artificer/data/template/mod_general/css/main.css

@@ -87,12 +87,12 @@ div.bx-badge.bx-badge-compact img{
 }
 
 /* more menu */
+.bx-menu-submenu-more-auto .sys-action-do-icon,
 .bx-menu-submenu-more-auto .bx-vote-do-icon,
 .bx-menu-submenu-more-auto .bx-favorite-do-icon,
 .bx-menu-submenu-more-auto .bx-feature-do-icon,
 .bx-menu-submenu-more-auto .bx-report-do-icon,
-.bx-menu-submenu-more-auto .bx-score-do-icon
-{
+.bx-menu-submenu-more-auto .bx-score-do-icon {
     height: 1.25rem;
     width: 1.25rem;
     align-items: center;

+ 2 - 2
modules/boonex/artificer/data/template/mod_groups/cover.html

@@ -6,7 +6,7 @@
         </div>
         <div class="bx-base-pofile-cover">
             <div class="bx-base-pofile-cover-image-wrp relative xl:px-4 overflow-hidden">
-                <div class="bx-base-pofile-cover-image bx-def-page-width relative mx-auto opacity-100 <bx_if:show_cover_placeholder>h-32 lg:h-32</bx_if:show_cover_placeholder><bx_if:show_cover>h-64 lg:h-80</bx_if:show_cover> __add_class__">
+                <div class="bx-base-pofile-cover-image bx-def-page-width relative mx-auto opacity-100 xl:rounded-b-lg <bx_if:show_cover_placeholder>bx-bpci-holder h-32 lg:h-32 bg-gradient-to-b from-green-400 to-green-500</bx_if:show_cover_placeholder><bx_if:show_cover>h-64 lg:h-80</bx_if:show_cover> __add_class__">
                     <a class="bx-base-pofile-cover-image box-border absolute h-full w-full" href="__cover_href__" onclick="$('#__cover_popup_id__').dolPopupImage('__cover_url__', this)">
                         <img class="bx-base-pofile-cover-image w-full object-cover bg-cover xl:rounded-b-lg h-full relative __img_class__" style="background-image:url(__cover_url__)" src="<bx_icon_url:spacer.gif />" />
                     </a>
@@ -26,7 +26,7 @@
                         </div>
                     </bx_if:show_avatar>
                     <bx_if:show_avatar_placeholder>
-                        <div class="bx-base-pofile-cover-thumb-placeholder absolute h-48 lg:flex-none"></div>
+                        <div class="bx-base-pofile-cover-thumb-placeholder lg:absolute h-24 lg:flex-none"></div>
                     </bx_if:show_avatar_placeholder>
                     <div class="bx-base-pofile-cover-user relative flex flex-col lg:flex-row lg:items-start lg:justify-end mt-6 sm:pb-1 lg:w-full box-border">
                         <div class="bx-base-profile-cover-title-bages min-w-0 flex-1 lg:mt-14 lg:mr-12 mb-2">

+ 0 - 3
modules/boonex/artificer/data/template/mod_groups/css/main.css

@@ -3,9 +3,6 @@
     -webkit-justify-content: flex-start;
     justify-content: flex-start;
 }
-.bx-base-groups-unit-with-cover .bx-base-pofile-unit-info .bx-base-general-unit-meta ul.bx-menu-custom.bx-menu-custom-hor > li.bx-menu-item-nl {
-    height: 1rem;
-}
 .bx-base-groups-unit-with-cover .bx-base-pofile-unit-info .bx-base-general-unit-meta ul .bx-menu-item-nl ~ li {
     width: 50%;
 }

+ 3 - 2
modules/boonex/artificer/data/template/mod_groups/unit.html

@@ -1,6 +1,7 @@
 <div class="__class__ p-2 box-border">
-    <div class="bx-base-pofile-unit-cnt bx-def-box rounded ring-1 ring-gray-200 dark:ring-gray-700 overflow-hidden bg-white dark:bg-gray-800 shadow-sm h-full">
-        <a class="bx-base-pofile-unit-cover flex items-center justify-start w-full h-40 bg-no-repeat bg-center bg-cover" style="background-image:url(__cover_url__);" href="__content_url__" onclick="__content_click__">
+    <div class="bx-base-pofile-unit-cnt relative rounded ring-1 ring-gray-200 dark:ring-gray-700 overflow-hidden bg-white dark:bg-gray-800 shadow-sm h-full">
+        <div class="absolute z-0 w-full h-40 bg-gradient-to-b from-green-400 to-green-500"></div>
+        <a class="bx-base-pofile-unit-cover relative flex items-center justify-start w-full h-40 bg-no-repeat bg-center bg-cover" style="background-image:url(__cover_url__);" href="__content_url__" onclick="__content_click__">
             <bx_if:show_thumbnail>
                 <div class="bx-def-unit-img bx-def-__size__-size __class_size__ ml-5">
                     <bx_if:show_thumb_image>

+ 3 - 3
modules/boonex/artificer/data/template/mod_profile/cover.html

@@ -6,7 +6,7 @@
         </div>
         <div class="bx-base-pofile-cover">
             <div class="bx-base-pofile-cover-image-wrp relative xl:px-4 overflow-hidden">
-                <div class="bx-base-pofile-cover-image bx-def-page-width relative mx-auto opacity-100 <bx_if:show_cover_placeholder>h-32 lg:h-32</bx_if:show_cover_placeholder><bx_if:show_cover>h-64 lg:h-80</bx_if:show_cover> __add_class__">
+                <div class="bx-base-pofile-cover-image bx-def-page-width relative mx-auto opacity-100 xl:rounded-b-lg <bx_if:show_cover_placeholder>bx-bpci-holder h-32 lg:h-32 bg-gradient-to-b from-blue-400 to-blue-500</bx_if:show_cover_placeholder><bx_if:show_cover>h-64 lg:h-80</bx_if:show_cover> __add_class__">
                     <a class="bx-base-pofile-cover-image box-border absolute h-full w-full" href="__cover_href__" onclick="$('#__cover_popup_id__').dolPopupImage('__cover_url__', this)">
                         <img class="bx-base-pofile-cover-image w-full object-cover bg-cover xl:rounded-b-lg h-full relative __img_class__" style="background-image:url(__cover_url__)" src="<bx_icon_url:spacer.gif />" />
                     </a>
@@ -17,8 +17,8 @@
                     <bx_if:show_avatar>
                         <div class="bx-base-pofile-cover-thumb relative lg:absolute flex justify-center lg:flex-none z-10 __add_class__">
                             <a class="bx-base-pofile-cover-thumb" href="__picture_href__" onclick="$('#__picture_popup_id__').dolPopupImage('__picture_url__', $(this).parent()); event.stopPropagation();">
-                                    <img class="bx-base-pofile-unit-thumb bx-def-ava-big bx-def-ava-big-size rounded-full ring-4 mx-auto ring-white dark:ring-gray-900 h-48 w-48 __img_class__" src="__ava_url__"  <bx_if:show_ava_letter> style="display:none" </bx_if:show_ava_letter> />
-                                    <p class="bx-base-pofile-unit-thumb bx-def-ava-big bx-def-ava-big-size flex items-center justify-center box-border m-0 rounded-full ring-4 mx-auto ring-white dark:ring-gray-900 h-48 w-48 text-white font-bold text-5xl __img_class__-placeholder" style="background-color:rgba(__color__);<bx_if:show_ava_image>display:none</bx_if:show_ava_image>" >__letter__</p>
+                                <img class="bx-base-pofile-unit-thumb bx-def-ava-big bx-def-ava-big-size rounded-full ring-4 mx-auto ring-white dark:ring-gray-900 h-48 w-48 __img_class__" src="__ava_url__"  <bx_if:show_ava_letter> style="display:none" </bx_if:show_ava_letter> />
+                                <p class="bx-base-pofile-unit-thumb bx-def-ava-big bx-def-ava-big-size flex items-center justify-center box-border m-0 rounded-full ring-4 mx-auto ring-white dark:ring-gray-900 h-48 w-48 text-white font-bold text-5xl __img_class__-placeholder" style="background-color:rgba(__color__);<bx_if:show_ava_image>display:none</bx_if:show_ava_image>" >__letter__</p>
                             </a>
                             <bx_if:show_online>
                                 <div class="bx-base-pofile-unit-online"></div>

+ 27 - 7
modules/boonex/artificer/data/template/mod_profile/css/main.css

@@ -76,6 +76,7 @@
     width:calc(10.0%);
 }
 
+
 /*--- Unit ---*/
 p.bx-base-pofile-unit-thumb.bx-def-icon-size {
     font-size: 1.125rem;
@@ -101,12 +102,17 @@ p.bx-base-pofile-unit-thumb.bx-def-ava-big-size {
 .bx-base-pofile-unit-with-cover .bx-base-general-unit-meta ul.bx-menu-custom.bx-menu-custom-hor > li {
     margin-left: 1rem;
 }
-.bx-base-pofile-unit-with-cover .bx-base-general-unit-meta ul.bx-menu-custom.bx-menu-custom-hor > li:first-child {
+.bx-base-pofile-unit-with-cover .bx-base-general-unit-meta ul.bx-menu-custom.bx-menu-custom-hor > li:first-child,
+.bx-base-pofile-unit-with-cover .bx-base-general-unit-meta ul.bx-menu-custom.bx-menu-custom-hor > li.bx-menu-item-nl,
+.bx-base-pofile-unit-with-cover .bx-base-general-unit-meta ul.bx-menu-custom.bx-menu-custom-hor > li.bx-menu-item-nl + li {
     margin-left: 0;
 }
 
 
 /*--- Profile Cover ---*/
+.bx-base-pofile-cover-image.bx-bpci-holder img.bx-base-pofile-cover-image {
+    background-size: auto;
+}
 .bx-base-profile-cover-meta .bx-menu-custom.bx-menu-custom-hor {
     -webkit-align-items: center;
     align-items: center;
@@ -132,6 +138,25 @@ p.bx-base-pofile-unit-thumb.bx-def-ava-big-size {
     position: absolute;
     width: 100%;
 }
+.bx-base-pofile-cover-actions div.bx-base-general-entity-actions .bx-menu-custom-hor > li > .bx-base-general-entity-action > a,
+.bx-base-pofile-cover-actions div.bx-base-general-entity-actions .bx-menu-custom-hor li.bx-menu-item-more-auto .bx-popup .bx-menu-custom-ver .bx-menu-item > .bx-base-general-entity-action > a,
+.bx-base-pofile-cover-actions div.bx-base-general-entity-actions .bx-menu-custom-hor > li .sys-action-element-holder a {
+    padding: 0.5rem 1.0rem;
+}
+.bx-base-pofile-cover-actions div.bx-base-general-entity-actions .bx-menu-custom-hor > li .sys-action-element-holder a {
+    display: block;
+}
+.bx-base-pofile-cover-actions div.bx-base-general-entity-actions .bx-menu-custom-hor li.bx-menu-item-more-auto .bx-popup .bx-menu-custom-ver .bx-menu-item {
+    border-color: transparent;
+    border-radius: 0;
+    box-shadow: none;
+}
+.bx-base-pofile-cover-actions div.bx-base-general-entity-actions .bx-menu-custom-hor li.bx-menu-item-more-auto .bx-popup .bx-menu-custom-ver .bx-menu-item,
+.bx-base-pofile-cover-actions div.bx-base-general-entity-actions .bx-menu-custom-hor li.bx-menu-item-more-auto .bx-popup .bx-menu-custom-ver .bx-menu-item .bx-base-general-entity-action,
+.bx-base-pofile-cover-actions div.bx-base-general-entity-actions .bx-menu-custom-hor li.bx-menu-item-more-auto .bx-popup .bx-menu-custom-ver .bx-menu-item .sys-action,
+.bx-base-pofile-cover-actions div.bx-base-general-entity-actions .bx-menu-custom-hor li.bx-menu-item-more-auto .bx-popup .bx-menu-custom-ver .bx-menu-item .sys-action-element-holder {
+    width: 100%;
+}
 .bx-media-desktop .bx-base-pofile-cover-actions div.bx-base-general-entity-actions .bx-menu-custom-hor > .bx-menu-item-more-auto > .bx-base-general-entity-action > a > .bx-mi-text,
 .bx-media-tablet .bx-base-pofile-cover-actions div.bx-base-general-entity-actions .bx-menu-custom-hor > .bx-menu-item-more-auto > .bx-base-general-entity-action > a > .bx-mi-text {
     display: none;
@@ -151,12 +176,7 @@ p.bx-base-pofile-unit-thumb.bx-def-ava-big-size {
     margin: 0;
     padding: 0;
 }
-.bx-base-pofile-cover-actions div.bx-base-general-entity-actions .bx-menu-custom-hor li.bx-menu-item-more-auto .bx-popup .bx-menu-custom .bx-menu-item {
-    width: 100%;
-    border-color: transparent;
-    border-radius: 0;
-    box-shadow: none;
-}
+
 /* Cover block */
 .bx-base-profile-cover-block-wrapper .bx-base-pofile-cover-actions div.bx-base-general-entity-actions{
     position: relative;

+ 1 - 1
modules/boonex/artificer/data/template/mod_profile/menu_custom_actions.html

@@ -1,6 +1,6 @@
 <ul id="__html_id__" class="bx-menu-custom bx-menu-custom-hor bx-menu-hor-inline<bx_if:show_more_auto_class> bx-menu-more-auto</bx_if:show_more_auto_class> bx-menu-object-__object__ flex justify-center lg:justify-end items-stretch space-y-0 space-x-3">
     <bx_repeat:menu_items>
-        <li class="bx-menu-item bx-menu-item-__name____class__ group inline-flex items-center px-4 py-2 first:ml-0 border border-gray-300 dark:border-gray-700 shadow-sm hover:shadow-md text-sm font-medium rounded-md text-gray-700 dark:text-gray-300 dark:hover:text-white hover:text-gray-800 bg-white dark:bg-gray-800 dark:hover:bg-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500">__item__</li>
+        <li class="bx-menu-item bx-menu-item-__name____class__ group inline-flex items-center first:ml-0 border border-gray-300 dark:border-gray-700 shadow-sm hover:shadow-md text-sm font-medium rounded-md text-gray-700 dark:text-gray-300 dark:hover:text-white hover:text-gray-800 bg-white dark:bg-gray-800 dark:hover:bg-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500">__item__</li>
     </bx_repeat:menu_items>
 </ul>
 __js_code__

+ 1 - 1
modules/boonex/artificer/data/template/mod_profile/menu_custom_item_actions.html

@@ -1,4 +1,4 @@
 <span class="__class_wrp__ truncate">
-    <a class="__class_link__ flex flex-row sm:items-center" href="__link__" onclick="__onclick__" title="__title_attr__"__attrs__><span class="bx-mi-icon flex items-center justify-center h-5 w-5"><bx_if:icon><i class="sys-icon __icon__"></i></bx_if:icon><bx_if:image><img class="h-5 w-5" style="background-image:url(__icon_url__)" src="<bx_icon_url:spacer.gif />" /></bx_if:image></span><bx_if:title><span class="bx-mi-text ml-2 first:ml-0 whitespace-nowrap truncate">__title__</span></bx_if:title></a>
+    <a class="__class_link__ flex flex-row flex-nowrap sm:items-center" href="__link__" onclick="__onclick__" title="__title_attr__"__attrs__><span class="bx-mi-icon flex items-center justify-center h-5 w-5"><bx_if:icon><i class="sys-icon __icon__"></i></bx_if:icon><bx_if:image><img class="h-5 w-5" style="background-image:url(__icon_url__)" src="<bx_icon_url:spacer.gif />" /></bx_if:image></span><bx_if:title><span class="bx-mi-text ml-2 first:ml-0 whitespace-nowrap truncate">__title__</span></bx_if:title></a>
     <bx_if:addon>__addon__</bx_if:addon>
 </span>

+ 1 - 1
modules/boonex/artificer/data/template/mod_profile/unit.html

@@ -12,7 +12,7 @@
             <div class="bx-base-pofile-unit-online"></div>
         </bx_if:show_online>
     </div>
-    <div class="bx-def-unit-info bx-def-__size__-size-min-height bx-def-__size__-size-max-height flex items-center ml-4">
+    <div class="bx-def-unit-info bx-def-__size__-size-min-height bx-def-__size__-size-max-height flex items-center max-w-32 ml-4">
         <div class="bx-def-unit-info-cnt box-border overflow-hidden">
             <div class="bx-def-unit-line truncate">
                 <a class="bx-def-unit-info-title" href="__content_url__" onclick="__content_click__">__title__</a>

+ 4 - 3
modules/boonex/artificer/data/template/mod_profile/unit_with_cover.html

@@ -1,10 +1,11 @@
 <div class="__class__ p-2 box-border">
-    <div class="bx-base-pofile-unit-cnt bx-def-box rounded ring-1 ring-gray-200 dark:ring-gray-700 overflow-hidden bg-white dark:bg-gray-800 shadow-sm h-full">
-        <a class="bx-base-pofile-unit-cover flex items-center justify-center w-full h-40 bg-no-repeat bg-center bg-cover" style="background-image:url(__cover_url__);" href="__content_url__" onclick="__content_click__">
+    <div class="bx-base-pofile-unit-cnt relative h-full ring-1 ring-gray-200 dark:ring-gray-700 overflow-hidden bg-white dark:bg-gray-800 rounded-md shadow-sm">
+        <div class="absolute z-0 w-full h-40 bg-gradient-to-b from-blue-400 to-blue-500"></div>
+        <a class="bx-base-pofile-unit-cover relative flex items-center justify-center w-full h-40 bg-no-repeat bg-center bg-cover" style="background-image:url(__cover_url__);" href="__content_url__" onclick="__content_click__">
             <bx_if:show_thumbnail>
                 <div class="bx-def-unit-img bx-def-__size__-size __class_size__">
                     <bx_if:show_thumb_image>
-                        <img class="bx-base-pofile-unit-thumb bx-def-__size__ bx-def-__size__-size __class_size__ box-border" src="__thumb_url__" />
+                        <img class="bx-base-pofile-unit-thumb bx-def-__size__ bx-def-__size__-size __class_size__ rounded-full box-border" src="__thumb_url__" />
                     </bx_if:show_thumb_image>
                     <bx_if:show_thumb_letter>
                         <p class="bx-base-pofile-unit-thumb bx-def-__size__ bx-def-__size__-size __class_size__ flex items-center justify-center box-border m-0 rounded-full text-white font-bold" style="background-color:rgba(__color__)">__letter__</p>

+ 5 - 1
modules/boonex/artificer/data/template/system/_header_js_custom.html

@@ -40,8 +40,12 @@
     }
 
     function bx_site_search_complete(oContainer, oData) {
-        if(!oData)
+        if(!oData) {
+            if(oContainer.is(':visible'))
+                oContainer.hide();
+
             return;
+        }
 
         oContainer.show();
 

+ 7 - 0
modules/boonex/artificer/data/template/system/_row_1_column_half.html

@@ -0,0 +1,7 @@
+<div class="bx-layout-row">
+    <div class="bx-layout-col bx-layout-1-column-half-column1 bx-layout-column-half max-w-full md:w-1/2 mx-auto">
+        <div class="bx-layout-cell" id="bx-layout-cell-1">
+            __cell_1__
+        </div>
+    </div>
+</div>

+ 7 - 0
modules/boonex/artificer/data/template/system/_row_1_column_thin.html

@@ -0,0 +1,7 @@
+<div class="bx-layout-row">
+    <div class="bx-layout-col bx-layout-1-column-thin-column1 bx-layout-column-thin max-w-full md:w-1/3 mx-auto">
+        <div class="bx-layout-cell" id="bx-layout-cell-1">
+            __cell_1__
+        </div>
+    </div>
+</div>

+ 1 - 1
modules/boonex/artificer/data/template/system/_sub_footer.html

@@ -9,7 +9,7 @@
     <div id="bx-footer-wrapper" class="">
         <div class="bx-def-page-width mx-auto px-3 md:px-4 lg:px-6 box-border">
             <div id="bx-footer" class="bx-footer">
-                <div class="bx-footer-cnt">
+                <div class="bx-footer-cnt mb-4">
                     <bx_injection:injection_footer_before />
                     <div id="bx-menu-bottom">
                         <bx_menu:sys_footer />

+ 3 - 3
modules/boonex/artificer/data/template/system/_sub_header.html

@@ -8,7 +8,7 @@
             <div class="bx-toolbar-content-wrapper">
                 <div id="bx-toolbar-content" class="bx-toolbar-content relative flex items-center justify-start h-16">
                     <!-- Mobile: Hamburger -->
-                    <div class="flex-none items-center lg:hidden mr-3">
+                    <div class="flex-none items-center lg:hidden mr-4">
                         <bx_menu:sys_toolbar_site />
                     </div>
 
@@ -19,13 +19,13 @@
                         <bx_injection:injection_logo_after />
                     </div>
                     <!-- Menu -->
-                    <div class="bx-toolbar-item bx-ti-menu flex-2 hidden lg:block w-64 ml-6">
+                    <div class="bx-toolbar-item bx-ti-menu flex-2 hidden lg:block w-64 ml-4">
                         <div id="bx-menu-toolbar-1-container" class="bx-toolbar-item bx-ti-menu w-full">
                             <bx_menu:sys_site />
                         </div>
                     </div>
                     <!-- Search -->
-                    <div class="bx-toolbar-item bx-ti-search flex flex-1 items-center justify-end ml-6 min-w-88">
+                    <div class="bx-toolbar-item bx-ti-search flex flex-1 items-center justify-end ml-4 min-w-88">
                         <div class="flex items-start w-full hidden md:block">
                             <div class="relative w-full">__sys_site_search__</div>
                         </div>

+ 16 - 0
modules/boonex/artificer/data/template/system/comment_attachments.html

@@ -0,0 +1,16 @@
+<div class="flex">
+    <bx_repeat:attached>
+        <div class="__style_prefix__-attached-preview w-24 h-24 m-1">
+            <bx_if:show_image>
+                <a href="javascript:void(0)" onclick="__js_object__.showImage(this, '__file__'); return false;" title="<bx_text_attribute:_cmt_view_attached_image />">
+                    <img class="w-24 h-24 rounded" src="<bx_image_url:spacer.gif />" style="background-image:url(__preview__)" />
+                </a>
+            </bx_if:show_image>
+            <bx_if:show_file>
+                <a href="__file__" title="<bx_text_attribute:_cmt_download_attached_file />">
+                    <img class="w-24 h-24 rounded" src="<bx_image_url:spacer.gif />" style="background-image:url(__preview__)" />
+                </a>
+            </bx_if:show_file>
+        </div>
+    </bx_repeat:attached>
+</div>

+ 18 - 25
modules/boonex/artificer/data/template/system/cover.html

@@ -5,33 +5,26 @@
     }
 </style>
 </bx_if:logged_in>
-<div class="bx-cover-wrapper relative bg-gradient-to-br from-gray-100 to-blue-100 dark:bg-gradient-to-r dark:from-gray-900 dark:to-black overflow-hidden" <bx_if:bg>style="background-image:url(__image_url__)"</bx_if:bg>>
-    <div class="relative py-16">
-      <main class="">
-        <div class="mx-auto max-w-7xl">
-          <div class="">
-            <div class="relative">
-              <div class="absolute top-0 -left-8 w-96 h-96 bg-purple-700 rounded-full  filter blur-3xl z-0 opacity-60 animate-goo"></div>
-              <div class="absolute top-12 -right-8 w-96 h-96 bg-red-700 rounded-full filter blur-3xl z-0 opacity-60 animate-goo animation-delay-2000"></div>  
-              <div class="absolute -bottom-12 left-1/3 w-96 h-96 bg-green-700 rounded-full filter blur-3xl z-0 opacity-60 animate-goo animation-delay-4000"></div> 
-            </div>
-            <div class="relative text-center md:max-w-2xl md:mx-auto">
-                <bx_if:image>
-                    <div class="bx-cover-image">
-                        <img class="border rounded-md" style="background-image:url(__icon_url__)" src="<bx_icon_url:spacer.gif />" />
-                    </div>
-                </bx_if:image>
-                <div class="bx-cover-title flex justify-center items-center">
-                    <bx_if:icon><i class="sys-icon __icon__ mr-4 text-2xl text-gray-900 dark:text-gray-50"></i></bx_if:icon>
-                    <h1 class="text-4xl font-bold tracking-tight text-gray-900 dark:text-gray-50">
-                        <span class="block pb-1 relative">__title__</span>
-                        <span class="block pb-1  bg-clip-text text-transparent bg-gradient-to-r from-red-500 to-blue-500 "></span>
-                    </h1>
+<div class="bx-cover-gap overflow-hidden" >
+    <div class="bx-cover-wrapper<bx_if:empty_cover_class> bx-cover-empty</bx_if:empty_cover_class> relative bg-gradient-to-br from-gray-100 to-blue-100 dark:bg-gradient-to-r dark:from-gray-900 dark:to-black" <bx_if:bg>style="background-image:url(__image_url__)"</bx_if:bg>>
+        <div class="bx-def-page-width relative mx-auto">
+            <div class="absolute top-0 -left-8 w-96 h-96 bg-purple-700 rounded-full  filter blur-3xl z-0 opacity-60 animate-goo"></div>
+            <div class="absolute top-12 -right-8 w-96 h-96 bg-red-700 rounded-full filter blur-3xl z-0 opacity-60 animate-goo animation-delay-2000"></div>  
+            <div class="absolute -bottom-12 left-1/3 w-96 h-96 bg-green-700 rounded-full filter blur-3xl z-0 opacity-60 animate-goo animation-delay-4000"></div> 
+        </div>
+        <div class="relative mx-auto py-16 text-center">
+            <bx_if:image>
+                <div class="bx-cover-image">
+                    <img class="border rounded-md" style="background-image:url(__icon_url__)" src="<bx_icon_url:spacer.gif />" />
                 </div>
-                <div class="bx-cover-actions">__actions__</div>
+            </bx_if:image>
+            <div class="bx-cover-title flex justify-center items-center">
+                <h1 class="text-4xl font-bold tracking-tight text-gray-900 dark:text-gray-50">
+                    <span class="block pb-1 relative">__title__</span>
+                    <span class="block pb-1  bg-clip-text text-transparent bg-gradient-to-r from-red-500 to-blue-500 "></span>
+                </h1>
             </div>
-          </div>
+            <div class="bx-cover-actions">__actions__</div>
         </div>
-      </main>
     </div>
 </div>

+ 27 - 33
modules/boonex/artificer/data/template/system/cover_home.html

@@ -5,40 +5,34 @@
     }
 </style>
 </bx_if:logged_in>
-<div class="bx-cover-wrapper relative bg-gradient-to-br from-gray-100 to-blue-100 dark:bg-gradient-to-r dark:from-gray-900 dark:to-black overflow-hidden" <bx_if:bg>style="background-image:url(__image_url__)"</bx_if:bg>>
-    <div class="relative py-16">
-        <main class="">
-            <div class="mx-auto max-w-7xl">
-                <div class="">
-                    <div class="relative">
-                        <div class="absolute top-0 -left-8 w-96 h-96 bg-purple-700 rounded-full  filter blur-3xl z-0 opacity-60 animate-goo"></div>
-                        <div class="absolute top-12 -right-8 w-96 h-96 bg-red-700 rounded-full filter blur-3xl z-0 opacity-60 animate-goo animation-delay-2000"></div>  
-                        <div class="absolute -bottom-12 left-1/3 w-96 h-96 bg-green-700 rounded-full filter blur-3xl z-0 opacity-60 animate-goo animation-delay-4000"></div> 
-                    </div>
-                    <div class=" relative  text-center md:max-w-2xl md:mx-auto">
-                        <div>
-                            <h1 class="text-4xl  sm:text-5xl xl:text-6xl tracking-tight  font-bold text-gray-800 dark:text-white ">
-                                <span class="block pb-1 relative"><bx_text:_bx_artificer_txt_splash_welcome_l1 /></span>
-                                <span class="block pb-1  bg-clip-text text-transparent bg-gradient-to-r from-red-500 to-blue-500 "><bx_text:_bx_artificer_txt_splash_welcome_l2 /></span>
-                            </h1>
-                            <p class="p-8  font-light text-gray-700 dark:text-gray-300 text-base  sm:text-lg xl:text-xl">
-                                <span class="block"><bx_text:_bx_artificer_txt_splash_welcome_l3 /></span>
-                            </p>
-                            <div class=" w-full flex justify-center items-center">
-                                <button type="button" onclick="document.location='__link_join__'"  class="group inline-flex items-center px-4 py-2 border border-transparent shadow-sm hover:shadow-md text-sm font-medium rounded-md text-gray-200 hover:text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 ">
-                                    <bx_text:_bx_artificer_txt_splash_welcome_a1 />
-                                </button>
-                                <button type="button"  onclick="document.location='__link_login__'" class="ml-3 group inline-flex items-center px-4 py-2 border border-gray-300 dark:border-gray-700 shadow-sm hover:shadow-md text-sm font-medium rounded-md text-gray-700 dark:text-gray-300 dark:hover:text-white hover:text-gray-800 bg-white dark:bg-gray-800 dark:hover:bg-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500">
-                                    <svg xmlns="http://www.w3.org/2000/svg" class="-ml-1 mr-2 h-5 w-5" viewBox="0 0 20 20" fill="currentColor">
-                                      <path fill-rule="evenodd" d="M3 3a1 1 0 011 1v12a1 1 0 11-2 0V4a1 1 0 011-1zm7.707 3.293a1 1 0 010 1.414L9.414 9H17a1 1 0 110 2H9.414l1.293 1.293a1 1 0 01-1.414 1.414l-3-3a1 1 0 010-1.414l3-3a1 1 0 011.414 0z" clip-rule="evenodd"></path>
-                                    </svg>
-                                    <bx_text:_bx_artificer_txt_splash_welcome_a2 />
-                                </button>
-                            </div>
-                        </div>
-                    </div>
+<div class="bx-cover-gap overflow-hidden">
+    <div class="bx-cover-wrapper<bx_if:empty_cover_class> bx-cover-empty</bx_if:empty_cover_class> relative bg-gradient-to-br from-gray-100 to-blue-100 dark:bg-gradient-to-r dark:from-gray-900 dark:to-black" <bx_if:bg>style="background-image:url(__image_url__)"</bx_if:bg>>
+        <div class="bx-def-page-width relative mx-auto">
+            <div class="absolute top-0 -left-8 w-96 h-96 bg-purple-700 rounded-full  filter blur-3xl z-0 opacity-60 animate-goo"></div>
+            <div class="absolute top-12 -right-8 w-96 h-96 bg-red-700 rounded-full filter blur-3xl z-0 opacity-60 animate-goo animation-delay-2000"></div>  
+            <div class="absolute -bottom-12 left-1/3 w-96 h-96 bg-green-700 rounded-full filter blur-3xl z-0 opacity-60 animate-goo animation-delay-4000"></div> 
+        </div>
+        <div class="relative mx-auto py-16 text-center">
+            <div>
+                <div class="text-4xl  sm:text-5xl xl:text-6xl tracking-tight  font-bold text-gray-800 dark:text-white ">
+                    <span class="block pb-1 relative"><bx_text:_bx_artificer_txt_splash_welcome_l1 /></span>
+                    <span class="block pb-1  bg-clip-text text-transparent bg-gradient-to-r from-red-500 to-blue-500 "><bx_text:_bx_artificer_txt_splash_welcome_l2 /></span>
+                </div>
+                <p class="p-8  font-light text-gray-700 dark:text-gray-300 text-base  sm:text-lg xl:text-xl">
+                    <span class="block"><bx_text:_bx_artificer_txt_splash_welcome_l3 /></span>
+                </p>
+                <div class=" w-full flex justify-center items-center">
+                    <button type="button" onclick="document.location='__link_join__'"  class="group inline-flex items-center px-4 py-2 border border-transparent shadow-sm hover:shadow-md text-sm font-medium rounded-md text-gray-200 hover:text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 ">
+                        <bx_text:_bx_artificer_txt_splash_welcome_a1 />
+                    </button>
+                    <button type="button"  onclick="document.location='__link_login__'" class="ml-3 group inline-flex items-center px-4 py-2 border border-gray-300 dark:border-gray-700 shadow-sm hover:shadow-md text-sm font-medium rounded-md text-gray-700 dark:text-gray-300 dark:hover:text-white hover:text-gray-800 bg-white dark:bg-gray-800 dark:hover:bg-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500">
+                        <svg xmlns="http://www.w3.org/2000/svg" class="-ml-1 mr-2 h-5 w-5" viewBox="0 0 20 20" fill="currentColor">
+                          <path fill-rule="evenodd" d="M3 3a1 1 0 011 1v12a1 1 0 11-2 0V4a1 1 0 011-1zm7.707 3.293a1 1 0 010 1.414L9.414 9H17a1 1 0 110 2H9.414l1.293 1.293a1 1 0 01-1.414 1.414l-3-3a1 1 0 010-1.414l3-3a1 1 0 011.414 0z" clip-rule="evenodd"></path>
+                        </svg>
+                        <bx_text:_bx_artificer_txt_splash_welcome_a2 />
+                    </button>
                 </div>
             </div>
-        </main>
+        </div>
     </div>
 </div>

+ 1 - 1
modules/boonex/artificer/data/template/system/css/cmts.css

@@ -13,7 +13,7 @@ form.cmt-post-reply .bx-form-input-files-uploaders {
     margin-top: 0px;
 }
 
-a.cmts-uploader-button {
+form.cmt-post-reply .bx-form-input-files-uploaders a.cmts-uploader-button {
     position: absolute;
     z-index: 1;
     right: 0px;

+ 1 - 3
modules/boonex/artificer/data/template/system/css/cover.css

@@ -3,13 +3,11 @@ import url(../../../../../../../template/css/cover.css);
 --*/
 
 .bx-cover-wrapper {
-    position: relative;
-    background-image: url(../images/cover.svg);
+    background-color: #eee;
     background-repeat: no-repeat;
     background-position: center center;
     -webkit-background-size: cover;
     -moz-background-size: cover;
     -o-background-size: cover;
     background-size: cover;
-    overflow: hidden;
 }

+ 22 - 10
modules/boonex/artificer/data/template/system/css/default.less

@@ -1,4 +1,6 @@
-@import '../../../../../../../template/css/default.less';
+/*
+import '../../../../../../../template/css/default.less';
+*/
 
 /**
  * Is used for inputs and buttons. They should have the same value 
@@ -6,26 +8,36 @@
  */
 @base-input-box-sizing: border-box;
 
-
-/*--- Colors ---*/
-.bx-def-color-bg-hl,
-.bx-def-color-bg-hl-even:nth-child(even),
-.bx-def-color-bg-hl-hover:hover {
-    .background-color (transparent);
+.bx-def-page-width {
+    width: @bx-page-width;
 }
 
 /*--- Unit ---*/
 .bx-def-unit-alert,
 .bx-def-unit-alert-small,
 .bx-def-unit-alert-middle {
-    position: relative;
-    .font-size(@bx-font-size-small - 2);
+    font-size: @bx-font-size-small - 2;
 }
 
 
-/* image/thumbnail/gallery default styles */
+/*--- image/thumbnail/gallery ---*/
 .bx-def-unit .bx-def-unit-info,
 .bx-def-unit .bx-def-unit-img,
 .bx-def-unit img {
     display: inherit;
+}
+
+
+/*--- z-index ---*/
+.bx-def-z-index-front {
+    z-index:100;
+}
+.bx-def-z-index-nav {
+    z-index:5000;
+}
+.bx-def-z-index-overlay {
+    z-index:9700;
+}
+.bx-def-z-index-modal {
+    z-index:10000;
 }

+ 26 - 21
modules/boonex/artificer/data/template/system/css/forms.css

@@ -142,7 +142,7 @@ import url(../../../../../../../template/css/forms.css);
     height: 100%;
 
     margin: 0;
-    padding: 0;
+    padding: 0.5rem 2.125rem 0.5rem 0.75rem;
 
     border: 0;
     background-color: transparent;
@@ -153,11 +153,19 @@ import url(../../../../../../../template/css/forms.css);
     box-shadow: none;
 }
 
+
+/*-- Form field: Date/Time Pickers --*/
+.bx-form-datepicker-modal {
+    z-index: 10001 !important;
+}
+
+
 /*-- Form field: Switcher --*/
 .bx-switcher-cont-alt input {
    display: none !important;
 }
 
+
 /*--- Form field: File ---*/
 .bx-form-input-wrapper-file .bx-btn {
     display: inline-block;
@@ -223,14 +231,14 @@ import url(../../../../../../../template/css/forms.css);
 
 
 /*--- Form field: Auto-siggestion ---*/
-.bx-form-value .bx-form-input-autotoken:not(.bx-form-input-labels) {
+.bx-form-value .bx-form-input-autotoken:not(.bx-form-input-autotoken-labels) {
     float:left;
     padding:0px;
     height:auto;
     box-shadow: none;
     min-height: 2.8rem;
 }
-.bx-form-value .bx-form-input-autotoken b {
+.bx-form-value .bx-form-input-autotoken:not(.bx-form-input-autotoken-labels) b {
     display: block;
     margin: 0.125rem;
     padding-right: 1.5rem; 
@@ -241,10 +249,10 @@ import url(../../../../../../../template/css/forms.css);
     font-weight: normal;    
     cursor: pointer;
 }
-.bx-form-value .bx-form-input-autotoken b:hover {
+.bx-form-value .bx-form-input-autotoken:not(.bx-form-input-autotoken-labels) b:hover {
     opacity: 0.7;
 }
-.bx-form-value .bx-form-input-autotoken b:after {
+.bx-form-value .bx-form-input-autotoken:not(.bx-form-input-autotoken-labels) b:after {
     font-family: 'sys-user', 'sys-user-fal';
     content: "\f00d";    
     position:absolute;    
@@ -253,13 +261,13 @@ import url(../../../../../../../template/css/forms.css);
     font-size:0.7em;
     font-weight:bold;
 }
-.bx-form-value .bx-form-input-autotoken.bx-form-input-disabled b {
+.bx-form-value .bx-form-input-autotoken:not(.bx-form-input-autotoken-labels).bx-form-input-disabled b {
     cursor: default;
 }
-.bx-form-value .bx-form-input-autotoken.bx-form-input-disabled b:after{
+.bx-form-value .bx-form-input-autotoken:not(.bx-form-input-autotoken-labels).bx-form-input-disabled b:after{
     display: none;
 }
-.bx-form-value .bx-form-input-autotoken input {
+.bx-form-value .bx-form-input-autotoken:not(.bx-form-input-autotoken-labels) input {
     border:0;
     margin:0;
     padding:0 0 0 5px;
@@ -267,31 +275,28 @@ import url(../../../../../../../template/css/forms.css);
     float:left;
     box-shadow: none;
 }
-.bx-form-value .bx-form-input-autotoken .bx-base-pofile-unit-wo-info {
+.bx-form-value .bx-form-input-autotoken:not(.bx-form-input-autotoken-labels) .bx-base-pofile-unit-wo-info {
     display: inline-block;
     vertical-align: middle;
 
     margin-right: 8px;
     margin-right: 0.5rem;
 }
-.bx-form-value .bx-form-input-autotoken-labels b {
-    padding-left: 1em;
+.bx-form-value .bx-form-input-autotoken-labels > a {
+    margin-left: 0.5rem;
+}
+.bx-form-value .bx-form-input-autotoken-labels > a:first-child {
+    margin-left: 0;
 }
-.bx-form-value .bx-form-input-autotoken-labels-show-more,
-.bx-form-value .bx-form-input-autotoken-labels-sel b {
+.bx-form-value .bx-form-input-autotoken-labels-show-more {
     display:inline-block;
     line-height:1.5rem;
     font-size:85%;    
     padding-right:1em;
     margin-top:0.625rem;
-    font-style:normal;
-}
-.bx-form-value .bx-form-input-autotoken-labels-show-more {
     margin-left:0.1em;
     margin-right:0.1em;
-}
-.bx-form-value .bx-form-input-autotoken-labels-sel b:after {
-    display:none;
+    font-style:normal;
 }
 .bx-form-input-autotoken-labels-more {
     display:none;
@@ -299,10 +304,10 @@ import url(../../../../../../../template/css/forms.css);
 .select2-container {
     width:100% !important;
 }
-.bx-form-input-select 
-{
+.bx-form-input-select {
     -webkit-appearance:none;
 }
+
 /* tiny mce */
 .bx-form-input-wrapper-html .gray-theme.fr-toolbar.fr-top{
    border-radius: .375rem .375rem 0 0 !important; 

+ 2 - 0
modules/boonex/artificer/data/template/system/css/menu-sidebar.css

@@ -77,5 +77,7 @@
     margin: 0;
 }
 .bx-sidebar.bx-sidebar-account .bx-sb-menu .bx-menu-item-addon.bx-def-unit-alert {
+    top: auto;
+    right: 0.5rem;
     padding: 0 0.25rem;
 }

+ 17 - 0
modules/boonex/artificer/data/template/system/css/vote.css

@@ -58,6 +58,23 @@ import url(../../../../../../../template/css/vote.css);
     font-size: 1.5rem;
 }
 
+/*----------------------------------*/
+/*--- Stars based Element Styles ---*/
+/*----------------------------------*/
+.bx-vote-stars .bx-vote-element-holder a.bx-vote-button,
+.bx-vote-stars .bx-vote-element-holder i.bx-vote-star,
+.bx-vote-stars .bx-vote-element-holder span.bx-vote-star {
+    position: relative;
+    display: inline-block;
+    vertical-align: top;
+    height: 1rem;
+    width: 1rem;
+    margin: 0;
+    padding: 0;
+    text-align: center;
+}
+
+
 /*--- Voted By ---*/
 div.bx-vote-by-list {}
 div.bx-vote-by-list-cnt {

+ 2 - 2
modules/boonex/artificer/data/template/system/informer.html

@@ -2,7 +2,7 @@
     <div id="bx-informer">
         <bx_repeat:messages>
             <div id="__id__" class="bx-informer-msg __class__ flex items-center mt-4 first:mt-0 p-4 rounded-md">
-                <div class="flex-none">
+                <div class="flex-none w-5 h-5">
                     <svg class="bx-informer-icon bx-informer-icon-info text-blue-400 h-5 w-5" x-description="Heroicon name: solid/information-circle" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
                         <path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z" clip-rule="evenodd"></path>
                     </svg>
@@ -17,4 +17,4 @@
             </div>
         </bx_repeat:messages>
     </div>
-</div>
+</div>

+ 2 - 2
modules/boonex/artificer/data/template/system/menu_meta_item.html

@@ -1,4 +1,4 @@
-<span class=" bx-btn-height group flex items-center border-none rounded-full text-gray-500 dark:text-gray-500 dark:hover:text-gray-300" >
-    <span class="sys-action-counter-icon relative flex items-center justify-center ring-1  h-6 w-6 rounded-full ring-white dark:ring-gray-800 h-6 w-6 bg-gray-200 dark:bg-gray-800">__icon__</span>
+<span class="group flex items-center p-1 border-none rounded-full text-gray-500 dark:text-gray-500 hover:text-gray-700 dark:hover:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-600">
+    <span class="sys-action-counter-icon relative flex items-center justify-center ring-1  h-6 w-6 rounded-full ring-white dark:ring-gray-700 bg-gray-200 dark:bg-gray-700">__icon__</span>
     <span class="sys-action-counter-text ml-1">__caption__</span>
 </span>

+ 10 - 8
modules/boonex/artificer/data/template/system/profile_avatar.html

@@ -1,19 +1,21 @@
 <div class="bx-profile-avatar group text-gray-600 hover:text-gray-800 hover:bg-gray-200 dark:text-gray-300 dark:hover:bg-gray-800 rounded-md">
-    <a href="javascript:void(0)" onclick="javascript:$('#bx-profile-switcher').dolPopup({});">
-        <div class="bx-profile-avatar-cnt flex items-center px-4 py-2">
+    <a href="__switcher_url__" onclick="__switcher_onclick__">
+        <div class="bx-profile-avatar-cnt relative flex items-center px-4 py-2">
             <div class="bx-pa-img absolute">__profile_unit__</div>
             <div class="bx-pa-info w-full">
-                <div class="bx-pa-info-cnt pl-14 box-border">
+                <div class="bx-pa-info-cnt flex flex-col justify-center h-10 pl-14 pr-4 box-border">
                     <div class="bx-pai-line text-gray-600 dark:text-gray-300 text-sm group-hover:text-gray-800 dark:group-hover:text-white font-semibold truncate">__profile_title__</div>
                     <div class="bx-pai-line text-green-600 dark:text-green-400 text-xs truncate uppercase tracking-wider font-normal">
-                        <div><!--<bx_include_auto:menu_icon.html />--><span>__profile_acl_title__</span></div>
+                        <!--<bx_include_auto:menu_icon.html />--><span>__profile_acl_title__</span>
                     </div>
                 </div>
             </div>
-            <div class="bx-pa-actions">
-                <div class="bx-pa-action flex items-center justify-center h-5 w-5 ml-2"><i class="sys-icon arrows-alt-v flex-shrink-0 text-gray-400 group-hover:text-gray-500"></i></div>
-            </div>
+            <bx_if:show_switcher_icon>
+                <div class="bx-pa-actions absolute right-0">
+                    <div class="bx-pa-action flex items-center justify-center h-5 w-5"><i class="sys-icon arrows-alt-v flex-shrink-0 text-gray-400 group-hover:text-gray-500"></i></div>
+                </div>
+            </bx_if:show_switcher_icon>
         </div>
     </a>
 </div>
-__profile_switcher__
+__switcher__

+ 1 - 1
modules/boonex/artificer/data/template/system/profile_stats.html

@@ -4,7 +4,7 @@
             <div class="bx-profile-avatar-cnt flex items-center cursor-pointer" onclick="window.location.href='__profile_url__'">
                 <div class="bx-pa-img absolute">__profile_unit__</div>
                 <div class="bx-pa-info w-full">
-                    <div class="bx-pa-info-cnt pl-14 box-border">
+                    <div class="bx-pa-info-cnt flex flex-col justify-center h-10 pl-14 box-border">
                         <div class="bx-pai-line text-gray-600 dark:text-gray-300 text-sm group-hover:text-gray-800 dark:group-hover:text-white font-semibold truncate">__profile_title__</div>
                         <div class="bx-pai-line text-green-600 dark:text-green-400 text-xs truncate uppercase tracking-wider font-normal">
                             <div><!--<bx_include_auto:menu_icon.html />--><span>__profile_acl_title__</span></div>

+ 21 - 0
modules/boonex/artificer/data/template/system/scripts/BxTemplCmtsUploaderHTML5.php

@@ -0,0 +1,21 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaTemplate UNA Template Classes
+ * @{
+ */
+
+/**
+ * @see BxDolUploader
+ */
+class BxTemplCmtsUploaderHTML5 extends BxBaseCmtsUploaderHTML5
+{
+    function __construct($aObject, $sStorageObject, $sUniqId, $oTemplate)
+    {
+        parent::__construct($aObject, $sStorageObject, $sUniqId, $oTemplate);
+    }
+}
+
+/** @} */

+ 3 - 0
modules/boonex/artificer/data/template/system/scripts/BxTemplMenuToolbar.php

@@ -29,6 +29,9 @@ class BxTemplMenuToolbar extends BxBaseMenuToolbar
 
     protected function _getMenuItem ($a)
     {
+        if(in_array($a['hidden_on'], [7, 15])) 
+            return false;
+
     	//--- Hide '[Search]' from Site Toolbar
         if($this->_bSiteToolbar && in_array($a['name'], $this->_aHideFromSiteToolbar))
             return false;

+ 4 - 0
modules/boonex/artificer/data/template/system/scripts/BxTemplPageHome.php

@@ -27,6 +27,10 @@ class BxTemplPageHome extends BxBasePageHome
             'title' => _t('_sys_txt_homepage_cover', BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=create-account')),
             'link_join' => BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=create-account'),
             'link_login' => BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=login'),
+            'bx_if:empty_cover_class' => array (
+                'condition' => !$bTmplVarsCover,
+                'content' => array(),
+            ),
             'bx_if:bg' => array (
                 'condition' => $bTmplVarsCover,
                 'content' => $aTmplVarsCover,

+ 1 - 1
modules/boonex/artificer/data/template/system/view_counter.html

@@ -1,2 +1,2 @@
-<bx_if:show_text><span class="__class__" <bx_repeat:attrs>__key__="__value__"</bx_repeat:attrs>>__content__</span></bx_if:show_text><bx_if:show_link><a class="__class__ group flex items-center border-none rounded-full text-gray-500 hover:text-gray-700 dark:text-gray-500 dark:hover:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700" <bx_repeat:attrs>__key__="__value__"</bx_repeat:attrs>>__content__</a></bx_if:show_link>
+<bx_if:show_text><span class="__class__" <bx_repeat:attrs>__key__="__value__"</bx_repeat:attrs>>__content__</span></bx_if:show_text><bx_if:show_link><a class="__class__ group flex items-center border-none rounded-full text-gray-500 hover:text-gray-700 dark:text-gray-500 dark:hover:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-600" <bx_repeat:attrs>__key__="__value__"</bx_repeat:attrs>>__content__</a></bx_if:show_link>
 __script__

+ 2 - 2
modules/boonex/artificer/data/template/system/view_counter_label.html

@@ -1,8 +1,8 @@
 <span class="__style_prefix__-counter-label flex items-center text-sm font-normal p-1">
     <bx_if:show_icon>
-        <span class="sys-action-counter-icon __style_prefix__-counter-icon relative flex items-center justify-center ring-1 h-6 w-6 ring-white dark:ring-gray-800 h-6 w-6 bg-gray-200 dark:bg-gray-800 rounded-full">__name__</span>
+        <span class="sys-action-counter-icon __style_prefix__-counter-icon relative flex items-center justify-center ring-1 h-6 w-6 ring-white dark:ring-gray-700 h-6 w-6 bg-gray-200 dark:bg-gray-700 rounded-full">__name__</span>
     </bx_if:show_icon>
     <bx_if:show_text>
-        <span class="sys-action-counter-text __style_prefix__-counter-text ml-1">__text__</span>
+        <span class="sys-action-counter-text __style_prefix__-counter-text ml-1.5">__text__</span>
     </bx_if:show_text>
 </span>

+ 1 - 1
modules/boonex/artificer/data/template/system/vote_counter_label_likes.html

@@ -5,6 +5,6 @@
         </span>
     </bx_if:show_icon>
     <bx_if:show_text>
-        <span class="sys-action-counter-text __style_prefix__-counter-text ml-1">__text__</span>
+        <span class="sys-action-counter-text __style_prefix__-counter-text ml-1.5">__text__</span>
     </bx_if:show_text>
 </span>

+ 1 - 1
modules/boonex/artificer/data/template/system/vote_counter_label_reactions.html

@@ -5,6 +5,6 @@
         </span>
     </bx_if:show_icon>
     <bx_if:show_text>
-        <span class="sys-action-counter-text __style_prefix__-counter-text ml-1">__text__</span>
+        <span class="sys-action-counter-text __style_prefix__-counter-text ml-1.5">__text__</span>
     </bx_if:show_text>
 </span>

+ 16 - 0
modules/boonex/artificer/data/template/system/vote_do_vote_stars.html

@@ -0,0 +1,16 @@
+<div class="__style_prefix__-element relative inline-block">
+    <div class="__style_prefix__-underlay">
+        <bx_repeat:stars><i class="__style_prefix__-star sys-icon far star text-yellow-500"></i></bx_repeat:stars>
+    </div>
+    <bx_if:show_legend>
+        <div class="__style_prefix__-legend text-xs">
+            <bx_repeat:legend><span class="bx-vote-star text-yellow-500">__value__</span></bx_repeat:legend>
+        </div>
+    </bx_if:show_legend>
+    <div class="__style_prefix__-slider absolute z-1 top-0 left-0 whitespace-nowrap overflow-hidden">
+        <bx_repeat:slider><i class="__style_prefix__-star sys-icon star text-yellow-500"></i></bx_repeat:slider>
+    </div>
+    <div class="__style_prefix__-buttons absolute z-2 top-0 left-0">
+        <bx_repeat:buttons><a class="__style_prefix__-button hover:no-underline" href="javascript:void(0);" onmouseover="__js_object__.over(this);" onmouseout="__js_object__.out(this);" onclick="__js_object__.vote(this, __value__)"><i class="__style_prefix__-star sys-icon star text-transparent hover:text-yellow-600"></i></a></bx_repeat:buttons>
+    </div>
+</div>

+ 1 - 1
modules/boonex/artificer/js/utils.js

@@ -1,5 +1,5 @@
 function switcher_click(oObj){
-    $(oObj).toggleClass('bg-gray-200').toggleClass('bg-white').toggleClass('dark:bg-gray-900').toggleClass('dark:bg-gray-500')
+    $(oObj).toggleClass('bg-gray-200').toggleClass('bg-white').toggleClass('dark:bg-gray-900').toggleClass('dark:bg-gray-800')
     $(oObj).find('span').toggleClass('translate-x-5').toggleClass('translate-x-0').toggleClass('bg-green-500').toggleClass('bg-white').toggleClass('dark:bg-gray-500').toggleClass('dark:bg-green-500')
     $oChk = $(oObj).parents('.bx-switcher-cont-alt').find('input').first();
     $oChk.prop('checked',!$oChk.prop('checked'))

+ 21 - 0
modules/boonex/decorous/data/template/system/scripts/BxTemplCmtsUploaderHTML5.php

@@ -0,0 +1,21 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaTemplate UNA Template Classes
+ * @{
+ */
+
+/**
+ * @see BxDolUploader
+ */
+class BxTemplCmtsUploaderHTML5 extends BxBaseCmtsUploaderHTML5
+{
+    function __construct($aObject, $sStorageObject, $sUniqId, $oTemplate)
+    {
+        parent::__construct($aObject, $sStorageObject, $sUniqId, $oTemplate);
+    }
+}
+
+/** @} */

+ 2 - 0
modules/boonex/english/data/langs/system/en.xml

@@ -2626,6 +2626,8 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_inst_start_installation"><![CDATA[Start installation]]></string>
 	<string name="_sys_inst_title"><![CDATA[UNA {0} Installation]]></string>
 	<string name="_sys_layout_1_column"><![CDATA[1 column]]></string>
+        <string name="_sys_layout_1_column_thin"><![CDATA[1 column (thin)]]></string>
+        <string name="_sys_layout_1_column_half"><![CDATA[1 column (half)]]></string>
 	<string name="_sys_layout_2_columns"><![CDATA[2 columns]]></string>
 	<string name="_sys_layout_3_columns"><![CDATA[3 columns]]></string>
 	<string name="_sys_layout_bar_left"><![CDATA[With left bar]]></string>

+ 21 - 0
modules/boonex/lucid/data/template/system/scripts/BxTemplCmtsUploaderHTML5.php

@@ -0,0 +1,21 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaTemplate UNA Template Classes
+ * @{
+ */
+
+/**
+ * @see BxDolUploader
+ */
+class BxTemplCmtsUploaderHTML5 extends BxBaseCmtsUploaderHTML5
+{
+    function __construct($aObject, $sStorageObject, $sUniqId, $oTemplate)
+    {
+        parent::__construct($aObject, $sStorageObject, $sUniqId, $oTemplate);
+    }
+}
+
+/** @} */

+ 21 - 0
modules/boonex/ocean/data/template/system/scripts/BxTemplCmtsUploaderHTML5.php

@@ -0,0 +1,21 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaTemplate UNA Template Classes
+ * @{
+ */
+
+/**
+ * @see BxDolUploader
+ */
+class BxTemplCmtsUploaderHTML5 extends BxBaseCmtsUploaderHTML5
+{
+    function __construct($aObject, $sStorageObject, $sUniqId, $oTemplate)
+    {
+        parent::__construct($aObject, $sStorageObject, $sUniqId, $oTemplate);
+    }
+}
+
+/** @} */

+ 21 - 0
modules/boonex/protean/data/template/system/scripts/BxTemplCmtsUploaderHTML5.php

@@ -0,0 +1,21 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaTemplate UNA Template Classes
+ * @{
+ */
+
+/**
+ * @see BxDolUploader
+ */
+class BxTemplCmtsUploaderHTML5 extends BxBaseCmtsUploaderHTML5
+{
+    function __construct($aObject, $sStorageObject, $sUniqId, $oTemplate)
+    {
+        parent::__construct($aObject, $sStorageObject, $sUniqId, $oTemplate);
+    }
+}
+
+/** @} */

+ 3 - 1
modules/boonex/russian/data/langs/system/ru.xml

@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+_sys_layout_1_column<?xml version="1.0" encoding="utf-8"?>
 <resources name="ru" flag="ru" title="Russian">
 	<string name="_ADM_PROFILE_SEND_MSG"><![CDATA[Сообщение было удачно отправлено]]></string>
 	<string name="_ATT_ACTIVE_E"><![CDATA[Вы полноправный член нашего Сообщества. Но Вы можете заблокировать свой профиль, чтобы он был временно недоступен для других.]]></string>
@@ -2610,6 +2610,8 @@
 	<string name="_sys_inst_start_installation"><![CDATA[Начать установку]]></string>
 	<string name="_sys_inst_title"><![CDATA[Установка UNA {0}]]></string>
 	<string name="_sys_layout_1_column"><![CDATA[1 столбец]]></string>
+        <string name="_sys_layout_1_column_thin"><![CDATA[1 столбец (узкий)]]></string>
+        <string name="_sys_layout_1_column_half"><![CDATA[1 столбец (половина)]]></string>
 	<string name="_sys_layout_2_columns"><![CDATA[2 столбца]]></string>
 	<string name="_sys_layout_3_columns"><![CDATA[3 столбца]]></string>
 	<string name="_sys_layout_bar_left"><![CDATA[С левой линейкой]]></string>

+ 2 - 20
modules/boonex/stream/classes/BxStrmTemplate.php

@@ -81,6 +81,8 @@ class BxStrmTemplate extends BxBaseModTextTemplate
         $aForm = array(
             'form_attrs' => array(
                 'name' => 'bx-stream-form-settings',
+                'onsubmit' => 'return false',
+                'onreset' => 'return false',
             ),
             'inputs' => array(
                 'audio' => array(
@@ -95,26 +97,6 @@ class BxStrmTemplate extends BxBaseModTextTemplate
                     'caption' => _t('_bx_stream_field_video_source'),
                     'value' => '',
                 ),
-                'resolution' => array(
-                    'type' => 'select',
-                    'name' => 'resolution',
-                    'caption' => _t('_bx_stream_field_video_resolution'),
-                    'value' => '',
-                ),
-                'submit' => array(
-                    'type' => 'input_set',
-                    0 => array (
-                        'type' => 'submit',
-                        'name' => 'do_submit',
-                        'value' => _t('_Submit'),
-                    ),
-                    1 => array (
-                        'type' => 'reset',
-                        'name' => 'close',
-                        'value' => _t('_Cancel'),
-                        'attrs' => array('class' => 'bx-stream-popup-close bx-def-margin-sec-left'),
-                    ),
-                ),
             ),
         );
         $oForm = new BxTemplFormView ($aForm);

+ 1 - 0
modules/boonex/stream/install/config.php

@@ -45,6 +45,7 @@ $aConfig = array(
      */
     'page_triggers' => array (
     	'trigger_page_profile_view_entry',
+        'trigger_page_group_view_entry',
     ),
     
     /**

+ 2 - 0
modules/boonex/stream/install/langs/en.xml

@@ -140,6 +140,8 @@
     <string name="_bx_stream_page_block_title_entry_info"><![CDATA[Info]]></string>
     <string name="_bx_stream_page_block_title_sys_my_entries"><![CDATA[User Streams]]></string>
     <string name="_bx_stream_page_block_title_my_entries"><![CDATA[{display_name} Streams]]></string>
+    <string name="_bx_stream_page_block_title_sys_entries_in_context"><![CDATA[Streams in Context]]></string>
+    <string name="_bx_stream_page_block_title_my_entries"><![CDATA[Streams in {display_name}]]></string>
 
     <string name="_bx_stream_page_block_title_sys_entry_context"><![CDATA[Streamed in]]></string>
     <string name="_bx_stream_page_block_title_entry_context"><![CDATA[Streamed in]]></string>

+ 5 - 2
modules/boonex/stream/install/sql/enable.sql

@@ -142,8 +142,11 @@ INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbo
 
 -- PAGES: add page block to profiles modules (trigger* page objects are processed separately upon modules enable/disable)
 SET @iPBCellProfile = 3;
-INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES
-('trigger_page_profile_view_entry', @iPBCellProfile, 'bx_stream', '_bx_stream_page_block_title_sys_my_entries', '_bx_stream_page_block_title_my_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:9:"bx_stream";s:6:"method";s:13:"browse_author";s:6:"params";a:2:{i:0;s:12:"{profile_id}";i:1;a:2:{s:8:"per_page";s:26:"bx_stream_per_page_profile";s:13:"empty_message";b:0;}}}', 0, 0, 0);
+SET @iPBCellGroup = 3;
+INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES
+('trigger_page_profile_view_entry', @iPBCellProfile, 'bx_stream', '_bx_stream_page_block_title_sys_my_entries', '_bx_stream_page_block_title_my_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:9:"bx_stream";s:6:"method";s:13:"browse_author";s:6:"params";a:2:{i:0;s:12:"{profile_id}";i:1;a:2:{s:8:"per_page";s:26:"bx_stream_per_page_profile";s:13:"empty_message";b:0;}}}', 0, 0, 0, 0),
+('trigger_page_group_view_entry', @iPBCellGroup, 'bx_stream', '_bx_stream_page_block_title_sys_entries_in_context', '_bx_stream_page_block_title_entries_in_context', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:9:"bx_stream";s:6:"method";s:14:"browse_context";s:6:"params";a:2:{s:10:"profile_id";s:12:"{profile_id}";i:0;a:1:{s:13:"empty_message";b:0;}}}', 0, 0, 0, 0);
+
 
 -- PAGE: service blocks
 

+ 1 - 1
modules/boonex/stream/template/css/main.css

@@ -20,7 +20,7 @@
     height:360px;
     display:inline-block;
     background-color:black;
-    border:1px solid #eee;
+    border:1px solid #000;
 }
 
 .bx-stream-broadcast-preview-live {

+ 155 - 28
modules/boonex/stream/template/stream_broadcast_ome.html

@@ -7,38 +7,46 @@
         <button id="bx-stream-share-__suffix__" class="bx-btn bx-def-margin-sec-left"><i class="sys-icon share"></i></button>
     </div>
 </div>
-
+__popup_share__
+__popup_settings__
 <script src="https://cdn.jsdelivr.net/npm/ovenlivekit@latest/dist/OvenLiveKit.min.js"></script>
 <script>
+    // setup share btn
     $('#bx-stream-share-__suffix__').click(function() {
         $('#bx-stream-popup-share').dolPopup();
     });
+
+    // setup settings btn
     $('#bx-stream-settings-__suffix__').click(function() {
-        $('#bx-stream-popup-settings').dolPopup({'closeElement': '.bx-stream-popup-close'});
+        $('#bx-stream-popup-settings').dolPopup();
     });
 
+    // setup stop btn
     let fOnStreamingStop = function () {
         $('#bx-stream-preview-__suffix__').removeClass('bx-stream-broadcast-preview-live');
         $('#bx-stream-start-__suffix__').attr('disabled', false).removeClass('bx-btn-disabled');
         $('#bx-stream-stop-__suffix__').attr('disabled', true).addClass('bx-btn-disabled');
+        $('#bx-stream-settings-__suffix__').attr('disabled', false).removeClass('bx-btn-disabled');
     };
     $('#bx-stream-stop-__suffix__').click(function() {
         if ('undefined' === typeof(oOvenLivekit__suffix__) || !oOvenLivekit__suffix__)
             return;
         fInit();
-    });
+    });    
 
+    // setup start btn
     let fOnStreamingStart = function () {
         $('#bx-stream-preview-__suffix__').addClass('bx-stream-broadcast-preview-live');
         $('#bx-stream-start-__suffix__').attr('disabled', true).addClass('bx-btn-disabled');
         $('#bx-stream-stop-__suffix__').attr('disabled', false).removeClass('bx-btn-disabled');
+        $('#bx-stream-settings-__suffix__').attr('disabled', true).addClass('bx-btn-disabled');
     };
     $('#bx-stream-start-__suffix__').click(function() {
         if ('undefined' === typeof(oOvenLivekit__suffix__) || !oOvenLivekit__suffix__)
             return;
 
         // Get media stream from user device
-        oOvenLivekit__suffix__.getUserMedia().then(function () {
+        oOvenLivekit__suffix__.getUserMedia(fGetUserConstraints()).then(function () {
             const oConnectionConfig = {
                 iceServers : null ,
                 iceTransportPolicy: null,
@@ -55,38 +63,132 @@
         });
     });
 
+    // setup event for changing source devices
+    $('select[name=audio],select[name=video]').change(function () {
+        if ('undefined' === typeof(oOvenLivekit__suffix__) || !oOvenLivekit__suffix__)
+            return;
+        fInit();
+    });
+
+    // get currently selected devices
+    let fGetUserConstraints = function() {
+
+        let videoDeviceId = $('select[name=video]').val();
+        let audioDeviceId = $('select[name=audio]').val();
+
+        let newConstraint = {};
+
+        if (videoDeviceId) {
+            newConstraint.video = {
+                deviceId: {
+                    exact: videoDeviceId
+                }
+            };
+        }
+
+        if (audioDeviceId) {
+            newConstraint.audio = {
+                deviceId: {
+                    exact: audioDeviceId
+                }
+            };
+        }
+
+        return newConstraint;
+    }
+
+    // fill list of source devices
+    let fSetDevice = function (sType, eSelect, oDevices) {
+
+        eSelect.html('');
+
+        if (oDevices.length === 0) {
+
+            eSelect.append('<option value="">No Source Available</option>'); // TODO: add to lang
+
+        } else {
+
+            $.each(oDevices, function () {
+                let oDevice = this;
+                let option = $('<option></option>');
+
+                option.text(oDevice.label);
+                option.val(oDevice.deviceId);
+
+                eSelect.append(option);
+            });
+        }
+
+        eSelect.find('option').eq(0).prop('selected', true);
+    }
+
+    // initialize
     let fInit = function () {
         if ('undefined' !== typeof(oOvenLivekit__suffix__) && oOvenLivekit__suffix__)
             oOvenLivekit__suffix__.remove();
-        
-        // Lists the available media input and output devices
-        OvenLiveKit.getDevices().then(function (devices) {
-            // Got a list of user devices
-            console.log(devices);
-        }).catch(function (error) {
-            // Failed to get a list of user devices
-            console.log(error);
-        });
 
         // Configuration
         var oConfig = {
             callbacks: {
                 error: function (error) {
-                    console.log("Error ---------------- ");
-                    console.log(error);
+                    let errorMessage = '';
+
+                    if (error.message)
+                        errorMessage = error.message;
+                    else if (error.name)
+                        errorMessage = error.name;
+                    else
+                        errorMessage = error.toString();
+
+                    if (errorMessage === 'OverconstrainedError')
+                        errorMessage = 'The input device does not support the specified resolution or frame rate.';
+
+                    console.error(errorMessage);
                 },
                 connected: function (event) {
-                    console.log("Connected ---------------- ");
-                    console.log(event);
                 },
                 connectionClosed: function (type, event) {
-                    console.log("ConnectionClosed ---------------- ");
-                    console.log(type);
-                    console.log(event);
+
+                    if (type === 'websocket') {
+                        let reason;
+                        // See http://tools.ietf.org/html/rfc6455#section-7.4.1
+                        if (event.code === 1000)
+                            reason = "Normal closure, meaning that the purpose for which the connection was established has been fulfilled.";
+                        else if (event.code === 1001)
+                            reason = "An endpoint is \"going away\", such as a server going down or a browser having navigated away from a page.";
+                        else if (event.code === 1002)
+                            reason = "An endpoint is terminating the connection due to a protocol error";
+                        else if (event.code === 1003)
+                            reason = "An endpoint is terminating the connection because it has received a type of data it cannot accept (e.g., an endpoint that understands only text data MAY send this if it receives a binary message).";
+                        else if (event.code === 1004)
+                            reason = "Reserved. The specific meaning might be defined in the future.";
+                        else if (event.code === 1005)
+                            reason = "No status code was actually present.";
+                        else if (event.code === 1006)
+                            reason = "The connection was closed abnormally, e.g., without sending or receiving a Close control frame";
+                        else if (event.code === 1007)
+                            reason = "An endpoint is terminating the connection because it has received data within a message that was not consistent with the type of the message (e.g., non-UTF-8 [http://tools.ietf.org/html/rfc3629] data within a text message).";
+                        else if (event.code === 1008)
+                            reason = "An endpoint is terminating the connection because it has received a message that \"violates its policy\". This reason is given either if there is no other sutible reason, or if there is a need to hide specific details about the policy.";
+                        else if (event.code === 1009)
+                            reason = "An endpoint is terminating the connection because it has received a message that is too big for it to process.";
+                        else if (event.code === 1010) // Note that this status code is not used by the server, because it can fail the WebSocket handshake instead.
+                            reason = "An endpoint (client) is terminating the connection because it has expected the server to negotiate one or more extension, but the server didn't return them in the response message of the WebSocket handshake. <br /> Specifically, the extensions that are needed are: " + event.reason;
+                        else if (event.code === 1011)
+                            reason = "A server is terminating the connection because it encountered an unexpected condition that prevented it from fulfilling the request.";
+                        else if (event.code === 1015)
+                            reason = "The connection was closed due to a failure to perform a TLS handshake (e.g., the server certificate can't be verified).";
+                        else
+                            reason = "Unknown reason";
+
+                        console.log('Web Socket is closed. ' + reason);
+                    }
+                    if (type === 'ice') {
+                        console.log('Peer Connection is closed. State: ' + input.peerConnection.iceConnectionState);
+                    }                    
                 },
                 iceStateChange: function (state) {
-                    console.log("IceStateChange ---------------- ");
-                    console.log(state);
+                    console.log("IceStateChange: " + state);
                 }
             }
         }
@@ -97,7 +199,7 @@
         // Attaching video element for playing device stream
         oOvenLivekit__suffix__.attachMedia(document.getElementById('bx-stream-preview-__suffix__'));
 
-        oOvenLivekit__suffix__.getUserMedia().then(function () {
+        oOvenLivekit__suffix__.getUserMedia(fGetUserConstraints()).then(function () {
             fOnStreamingStop(); // instead of init
         }).catch(function (error) {
             // Failed to get device stream.
@@ -105,9 +207,34 @@
         });
     };
     
-    $(document).ready(fInit);
-    
-</script>
+    let fPreInit = function () {
 
-__popup_share__
-__popup_settings__
+        fSetDevice('audio', $('select[name=audio]'), glAllDevices.audioinput);
+        fSetDevice('video', $('select[name=video]'), glAllDevices.videoinput);
+
+        fInit();
+    };
+
+    $(document).ready(function() {
+        // get all devices at the first time
+        OvenLiveKit.getDevices().then(function (devices) {
+
+            glAllDevices = devices;
+            fPreInit();
+
+        }).catch(function (error) {
+
+            let errorMessage = '';
+
+            if (error.message) {
+                errorMessage = error.message;
+            } else if (error.name) {
+                errorMessage = error.name;
+            } else {
+                errorMessage = error.toString();
+            }
+
+            console.error(errorMessage);
+        });
+    });
+</script>

+ 9 - 7
modules/boonex/timeline/classes/BxTimelineTemplate.php

@@ -2089,7 +2089,7 @@ class BxTimelineTemplate extends BxBaseModNotificationsTemplate
             $sAttachmentsLayout = BX_TIMELINE_ML_GALLERY;
 
         $iAttachmentsTotal = 0;
-        $aTmplVarsImages = $aTmplVarsVideos = $aTmplVarsFiles = $aTmplVarsAttachments = array();
+        $aTmplVarsImages = $aTmplVarsVideos = $aTmplVarsFiles = $aTmplVarsAttachments = $aTmplVarsAttachmentsFiles = array();
 
         //--- Process Photos ---//
         $bImages = !empty($aContent['images']) && is_array($aContent['images']);
@@ -2156,16 +2156,18 @@ class BxTimelineTemplate extends BxBaseModNotificationsTemplate
                 );
         }
 
-		$bFilesAttach = !empty($aContent['files_attach']) && is_array($aContent['files_attach']);
+        $bFilesAttach = !empty($aContent['files_attach']) && is_array($aContent['files_attach']);
         if($bFilesAttach) {
             $aFilesAttach = $this->_getTmplVarsFiles($aContent['files_attach'], $aEvent, $aBrowseParams);
-			if(!empty($aFilesAttach)) {
-                $iAttachmentsTotal += $aFilesAttach['total'];
-                $aTmplVarsAttachments = array_merge($aTmplVarsAttachments, $aFilesAttach['items']);
+            if(!empty($aFilesAttach)) {
+                $aTmplVarsAttachmentsFiles = array(
+                    'style_prefix' => $sStylePrefix,
+                    'bx_repeat:items' => $aFilesAttach['items']
+                );
             }
         }
-		
-		/*
+
+        /*
          *  Process collected attachments in case of Showcase layout.
          */
         $iAttachmentsShow = 4;

+ 224 - 11
plugins_public/tailwind/css/tailwind.css

@@ -14,19 +14,22 @@
 
 @layer components {
     /* Defaults */
-    .bx-artificer .bx-def-a-colored {
-        @apply no-underline text-blue-600 hover:text-blue-700 dark:text-blue-500 dark:hover:text-blue-600;
+    .bx-artificer .bx-def-box-sizing {
+        @apply box-border;
     }
 
-    .bx-artificer .bx-def-hr {
-        @apply m-0 p-0 border-t border-gray-200 dark:border-gray-700;
+    .bx-artificer .bx-def-align-center {
+        @apply flex items-center justify-center !important;
     }
 
-    .bx-artificer .bx-def-font-grayed {
-        @apply text-gray-700 dark:text-gray-500 text-opacity-60;
+    .bx-artificer .bx-def-valign-center {
+        @apply flex items-center !important;
     }
 
     /* Margins and Paddings */
+    .bx-artificer .bx-def-centered {
+        @apply mx-auto;
+    }
     .bx-artificer .bx-def-margin {
         @apply m-4;
     }
@@ -48,6 +51,18 @@
     .bx-artificer .bx-def-margin-bottom {
         @apply mb-4;
     }
+    .bx-artificer .bx-def-margin-leftright {
+        @apply mx-4;
+    }
+    .bx-artificer .bx-def-margin-leftright-neg {
+        @apply -mx-4;
+    }
+    .bx-artificer .bx-def-margin-topbottom {
+        @apply my-4;
+    }
+    .bx-artificer .bx-def-margin-topbottom-neg {
+        @apply -my-4;
+    }
     
     .bx-artificer .bx-def-margin-sec {
         @apply m-2;
@@ -70,6 +85,52 @@
     .bx-artificer .bx-def-margin-sec-bottom {
         @apply mb-2;
     }
+    .bx-artificer .bx-def-margin-sec-leftright {
+        @apply mx-2;
+    }
+    .bx-artificer .bx-def-margin-sec-leftright-neg {
+        @apply -mx-2;
+    }
+    .bx-artificer .bx-def-margin-sec-topbottom {
+        @apply my-2;
+    }
+    .bx-artificer .bx-def-margin-sec-topbottom-neg {
+        @apply -my-2;
+    }
+    
+    .bx-artificer .bx-def-margin-thd {
+        @apply m-1;
+    }
+    .bx-artificer .bx-def-margin-thd-left {
+        @apply ml-1;
+    }
+    .bx-artificer .bx-def-margin-thd-left-auto {
+        @apply ml-1 first:ml-0;
+    }
+    .bx-artificer .bx-def-margin-thd-right {
+        @apply mr-1;
+    }
+    .bx-artificer .bx-def-margin-thd-top {
+        @apply mt-1;
+    }
+    .bx-artificer .bx-def-margin-thd-top-auto {
+        @apply mt-1 first:mt-0;
+    }
+    .bx-artificer .bx-def-margin-thd-bottom {
+        @apply mb-1;
+    }
+    .bx-artificer .bx-def-margin-thd-leftright {
+        @apply mx-1;
+    }
+    .bx-artificer .bx-def-margin-thd-leftright-neg {
+        @apply -mx-1;
+    }
+    .bx-artificer .bx-def-margin-thd-topbottom {
+        @apply my-1;
+    }
+    .bx-artificer .bx-def-margin-thd-topbottom-neg {
+        @apply -my-1;
+    }
 
     .bx-artificer .bx-def-padding {
         @apply p-4;
@@ -92,6 +153,18 @@
     .bx-artificer .bx-def-padding-bottom {
         @apply pb-4;
     }
+    .bx-artificer .bx-def-padding-leftright {
+        @apply px-4;
+    }
+    .bx-artificer .bx-def-padding-topbottom {
+        @apply py-4;
+    }
+    .bx-artificer .bx-def-padding-lefttopright {
+        @apply px-4 pt-4;
+    }
+    .bx-artificer .bx-def-padding-rightbottomleft {
+        @apply px-4 pb-4;
+    }
     
     .bx-artificer .bx-def-padding-sec {
         @apply p-2;
@@ -114,8 +187,95 @@
     .bx-artificer .bx-def-padding-sec-bottom {
         @apply pb-2;
     }
+    .bx-artificer .bx-def-padding-sec-leftright {
+        @apply px-2;
+    }
+    .bx-artificer .bx-def-padding-sec-topbottom {
+        @apply py-2;
+    }
+    .bx-artificer .bx-def-padding-lefttopright {
+        @apply px-2 pt-2;
+    }
+    .bx-artificer .bx-def-padding-rightbottomleft {
+        @apply px-2 pb-2;
+    }
+
+    .bx-artificer .bx-def-padding-thd {
+        @apply p-1;
+    }
+    .bx-artificer .bx-def-padding-thd-left {
+        @apply pl-1;
+    }
+    .bx-artificer .bx-def-padding-thd-left-auto {
+        @apply pl-1 first:pl-0;
+    }
+    .bx-artificer .bx-def-padding-thd-right {
+        @apply pr-1;
+    }
+    .bx-artificer .bx-def-padding-thd-top {
+        @apply pt-1;
+    }
+    .bx-artificer .bx-def-padding-thd-top-auto {
+        @apply pt-1 first:pt-0;
+    }
+    .bx-artificer .bx-def-padding-thd-bottom {
+        @apply pb-1;
+    }
+    .bx-artificer .bx-def-padding-thd-leftright {
+        @apply px-1;
+    }
+    .bx-artificer .bx-def-padding-thd-topbottom {
+        @apply py-1;
+    }
+    .bx-artificer .bx-def-padding-lefttopright {
+        @apply px-1 pt-1;
+    }
+    .bx-artificer .bx-def-padding-rightbottomleft {
+        @apply px-1 pb-1;
+    }
+
+    /* Fonts */
+    .bx-artificer .bx-def-font,
+    .bx-artificer .bx-def-font-inputs {
+        @apply font-inter;
+    }
+
+    .bx-artificer .bx-def-font-grayed {
+        @apply text-gray-700 dark:text-gray-500 text-opacity-60;
+    }
+
+    .bx-artificer .bx-def-a-colored {
+        @apply no-underline text-blue-600 hover:text-blue-700 dark:text-blue-500 dark:hover:text-blue-600;
+    }
+
+    .bx-artificer .bx-def-font-small {
+        @apply text-sm;
+    }
+    
+    .bx-artificer .bx-def-font-middle {
+        @apply text-lg;
+    }
+
+    .bx-artificer .bx-def-font-large {
+        @apply text-xl;
+    }
+    
+    .bx-artificer h3,
+    .bx-artificer .bx-def-font-h3 {
+        @apply text-2xl;
+    }
+    
+    .bx-artificer h2,
+    .bx-artificer .bx-def-font-h2 {
+        @apply text-3xl;
+    }
+
+    .bx-artificer h1,
+    .bx-artificer .bx-def-font-h1 {
+        @apply text-4xl;
+    }
 
-    /* Blocks, Boxes, etc. */
+    /* Common elements: Blocks, Boxes, etc. */
     .bx-artificer .bx-def-color-bg-block {
         @apply bg-gray-50 dark:bg-gray-900;
     }
@@ -123,9 +283,30 @@
         @apply bg-white dark:bg-gray-800;
     }
 
+    /* Common Elements: HR */
+    .bx-artificer .bx-def-hr {
+        @apply m-0 p-0 border-t border-gray-200 dark:border-gray-700;
+    }
+
+    /* Common Elements: Labels */
+    .bx-artificer .bx-def-label {
+        @apply min-w-6 px-4 py-1 bg-gray-500 hover:bg-gray-600 dark:hover:bg-gray-400 text-gray-800 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-200 text-sm font-normal rounded-full box-border;
+    }
+    
+    /* Common Elements: Alerts */
+    .bx-def-unit-alert,
+    .bx-def-unit-alert-small,
+    .bx-def-unit-alert-middle {
+        @apply block absolute top-0 -right-0.5 text-center text-white;
+    }
+    .bx-def-unit-alert {
+        @apply h-4 p-1 leading-4 rounded-full text-xs;
+        min-width: 1rem;
+    }
+
     /* Common elements: Buttons */
     .bx-artificer .bx-btn {
-        @apply relative inline-flex justify-center items-center px-4 py-2 border border-gray-300 dark:border-gray-700 text-sm font-medium text-gray-700 dark:text-gray-300 dark:hover:text-white hover:text-gray-800 whitespace-nowrap bg-white dark:bg-gray-800 dark:hover:bg-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 rounded-md shadow-sm hover:shadow-md;
+        @apply relative inline-flex justify-center items-center px-4 py-2 border border-gray-300 dark:border-gray-700 text-sm font-medium text-gray-700 dark:text-gray-300 dark:hover:text-white hover:text-gray-800 whitespace-nowrap bg-white dark:bg-gray-800 dark:hover:bg-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 rounded-md shadow-sm hover:shadow-md cursor-pointer;
     }
 
     .bx-artificer .bx-btn i, 
@@ -188,6 +369,10 @@
         @apply font-normal text-blue-600 hover:text-blue-700 dark:text-blue-500 dark:hover:text-blue-600;
     }
 
+    .bx-artificer .bx-form-value {
+        @apply mt-1 first:mt-0;
+    }
+
     .bx-artificer .bx-form-required,
     .bx-artificer .bx-form-warn {
         @apply text-red-400;
@@ -246,8 +431,15 @@
 
     /* Main menu */
     .bx-artificer .bx-toolbar-item.bx-ti-menu .bx-menu-main .bx-menu-item.bx-menu-tab-active {
-        @apply opacity-100 ring-1 ring-gray-200 dark:ring-gray-600 bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-white shadow;
+        @apply opacity-100 ring-1 ring-gray-200 dark:ring-gray-600 bg-gray-50 dark:bg-gray-700 shadow;
+    }
+    .bx-artificer .bx-toolbar-item.bx-ti-menu .bx-menu-main .bx-menu-item.bx-menu-tab-active a {
+        @apply text-gray-900 dark:text-white;
     }
+    .bx-artificer .bx-toolbar-item.bx-ti-menu .bx-menu-main .bx-popup .bx-menu-item.bx-menu-tab-active {
+        @apply opacity-100 ring-0 bg-gray-50 dark:bg-gray-700 shadow-none;
+    }
+
 
     /* Page Submenu */
     .bx-artificer .bx-menu-main-submenu .bx-menu-item.bx-menu-tab-active a {
@@ -263,7 +455,7 @@
     }
 
 
-    /* Common elements: Alerts */
+    /* Common elements: Informers */
     .bx-artificer .bx-informer-msg a {
         @apply text-blue-600 hover:text-blue-700 dark:text-blue-500 dark:hover:text-blue-600;
     }
@@ -276,8 +468,29 @@
     .bx-artificer .bx-informer-msg-error {
         @apply bg-red-50 text-red-700;
     }
+    .bx-artificer .bx-form-row-view-value {
+        @apply truncate;
+    }
+
+    /* Common elements: Comments */
+    .bx-artificer .cmt .bx-base-general-unit-meta-username {
+        @apply text-gray-700 dark:text-gray-200 hover:text-gray-900 dark:hover:text-white;
+    }
+
+    /* Common elements: Units */
+    .bx-artificer .bx-def-icon-size {
+        @apply h-8 w-8;
+    }
+    .bx-artificer .bx-def-thumb-size {
+        @apply h-10 w-10;
+    }
+    .bx-artificer .bx-def-ava-size {
+        @apply h-24 w-24;
+    }
+    .bx-artificer .bx-def-ava-big-size {
+        @apply w-48 h-48;
+    }
 
-    
     /* Modules: Timeline */
     .bx-artificer .bx-menu-custom-hor.bx-menu-object-bx_timeline_menu_view li.bx-menu-tab-active a {
         @apply bg-gray-50 dark:bg-gray-700 ring-1 ring-gray-200 dark:ring-gray-600 text-gray-900 dark:text-white shadow;

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
plugins_public/tailwind/css/tailwind.min.css


+ 34 - 4
plugins_public/tailwind/js/tailwind.config.js

@@ -11,6 +11,9 @@ module.exports = {
         './inc/js/*.js',
         './inc/js/classes/*.js',
 
+        './modules/base/**/js/*.js',
+        './modules/base/**/template/*.html',
+
         // Artificer
         './modules/boonex/artificer/js/*.js',
         './modules/boonex/artificer/data/template/**/*.html',
@@ -27,14 +30,29 @@ module.exports = {
         'h-8', 'h-10', 'h-24', 'h-48',
         '-m-2',
         'text-red-400', 
-        'bx-def-margin', 'bx-def-margin-left', 'bx-def-margin-left-auto', 'bx-def-margin-right', 'bx-def-margin-top', 'bx-def-margin-top-auto', 'bx-def-margin-bottom',
-        'bx-def-margin-sec', 'bx-def-margin-sec-left', 'bx-def-margin-sec-left-auto', 'bx-def-margin-sec-right', 'bx-def-margin-sec-top', 'bx-def-margin-sec-top-auto', 'bx-def-margin-sec-bottom',
-        'bx-def-padding', 'bx-def-padding-left', 'bx-def-padding-left-auto', 'bx-def-padding-right', 'bx-def-padding-top', 'bx-def-padding-top-auto', 'bx-def-padding-bottom',
-        'bx-def-padding-sec', 'bx-def-padding-sec-left', 'bx-def-padding-sec-left-auto', 'bx-def-padding-sec-right', 'bx-def-padding-sec-top', 'bx-def-padding-sec-top-auto', 'bx-def-padding-sec-bottom',
+        'ring-blue-500', 'ring-opacity-20', 
+        'focus:ring-blue-500', 'focus:ring-opacity-20',
+        'border-blue-500', 'border-opacity-70', 
+        'focus:border-blue-500', 'focus:border-opacity-70',
+
+        'bx-def-box-sizing', 'bx-def-align-center',  'bx-def-valign-center', 'bx-def-centered', 
+        'bx-def-margin', 'bx-def-margin-left', 'bx-def-margin-left-auto', 'bx-def-margin-right', 'bx-def-margin-top', 'bx-def-margin-top-auto', 'bx-def-margin-bottom', 'bx-def-margin-leftright', 'bx-def-margin-leftright-neg', 'bx-def-margin-topbottom', 'bx-def-margin-topbottom-neg', 
+        'bx-def-margin-sec', 'bx-def-margin-sec-left', 'bx-def-margin-sec-left-auto', 'bx-def-margin-sec-right', 'bx-def-margin-sec-top', 'bx-def-margin-sec-top-auto', 'bx-def-margin-sec-bottom', 'bx-def-margin-sec-leftright', 'bx-def-margin-sec-leftright-neg', 'bx-def-margin-sec-topbottom', 'bx-def-margin-sec-topbottom-neg', 
+        'bx-def-margin-thd', 'bx-def-margin-thd-left', 'bx-def-margin-thd-left-auto', 'bx-def-margin-thd-right', 'bx-def-margin-thd-top', 'bx-def-margin-thd-top-auto', 'bx-def-margin-thd-bottom', 'bx-def-margin-thd-leftright', 'bx-def-margin-thd-leftright-neg', 'bx-def-margin-thd-topbottom', 'bx-def-margin-thd-topbottom-neg', 
+        'bx-def-padding', 'bx-def-padding-left', 'bx-def-padding-left-auto', 'bx-def-padding-right', 'bx-def-padding-top', 'bx-def-padding-top-auto', 'bx-def-padding-bottom', 'bx-def-padding-leftright', 'bx-def-padding-topbottom', 'bx-def-padding-lefttopright', 'bx-def-padding-rightbottomleft', 
+        'bx-def-padding-sec', 'bx-def-padding-sec-left', 'bx-def-padding-sec-left-auto', 'bx-def-padding-sec-right', 'bx-def-padding-sec-top', 'bx-def-padding-sec-top-auto', 'bx-def-padding-sec-bottom', 'bx-def-padding-sec-leftright', 'bx-def-padding-sec-topbottom', 'bx-def-padding-sec-lefttopright', 'bx-def-padding-sec-rightbottomleft', 
+        'bx-def-padding-thd', 'bx-def-padding-thd-left', 'bx-def-padding-thd-left-auto', 'bx-def-padding-thd-right', 'bx-def-padding-thd-top', 'bx-def-padding-thd-top-auto', 'bx-def-padding-thd-bottom', 'bx-def-padding-thd-leftright', 'bx-def-padding-thd-topbottom', 'bx-def-padding-thd-lefttopright', 'bx-def-padding-thd-rightbottomleft', 
+        'bx-def-font-small', 'bx-def-font-middle', 'bx-def-font-large', 'bx-def-font-h3', 'bx-def-font-h2', 'bx-def-font-h1', 
         'bx-def-a-colored',
+
         'bx-form-required', 'bx-form-warn',
         'bx-popup-full-screen', 'bx-popup-fog',
         'bx-informer-msg-info', 'bx-informer-msg-alert', 'bx-informer-msg-error',
+        'bx-def-unit-alert', 'bx-def-unit-alert-small', 'bx-def-unit-alert-middle',
+        'bx-def-label',
+        'bx-def-icon-size', 'bx-def-thumb-size', 'bx-def-ava-size', 'bx-def-ava-big-size',
+
+        'bx-base-general-unit-meta-username',
     ]
   },
   darkMode: 'media', // false or 'media' or 'class'
@@ -50,8 +68,13 @@ module.exports = {
             144: '36rem'
         },
         minWidth: {
+            4: '1rem',
+            6: '1.5rem',
             88: '22rem'
         },
+        maxWidth: {
+            32: '8rem',
+        },
         height: {
             112: '28rem',
             128: '32rem',
@@ -65,6 +88,13 @@ module.exports = {
             15: '3.75rem',
             16: '4rem',
         },
+        zIndex: {
+            1: 1,
+            2: 2,
+            3: 3,
+            4: 4,
+            5: 5,
+        },
         flex: {
             2: '2 2 0%',
         },

+ 7 - 0
template/_row_1_column_half.html

@@ -0,0 +1,7 @@
+<div class="bx-layout-row bx-clearfix">
+    <div class="bx-layout-col bx-layout-1-column-half-column1 bx-layout-column-half bx-def-centered">
+        <div class="bx-layout-cell" id="bx-layout-cell-1">
+            __cell_1__
+        </div>
+    </div>
+</div>

+ 7 - 0
template/_row_1_column_thin.html

@@ -0,0 +1,7 @@
+<div class="bx-layout-row bx-clearfix">
+    <div class="bx-layout-col bx-layout-1-column-thin-column1 bx-layout-column-thin bx-def-centered">
+        <div class="bx-layout-cell" id="bx-layout-cell-1">
+            __cell_1__
+        </div>
+    </div>
+</div>

+ 2 - 2
template/comments_uploader_bs.html

@@ -1,4 +1,4 @@
-<a href="javascript:void(0);" onclick="__uploader_instance_name__.showUploaderForm();" class="bx-btn bx-def-margin-sec-top bx-def-margin-sec-left cmts-uploader-button">
+<a __attrs__ href="javascript:void(0);" class="bx-btn bx-def-margin-sec-top bx-def-margin-sec-left cmts-uploader-button __btn_class__">
     <i class="sys-icon __button_title__"></i>
 </a>
-<bx_include_auto:uploader_button_simple_js.html />
+<bx_include_auto:uploader_button_html5_js.html />

+ 8 - 9
template/cover.html

@@ -12,16 +12,15 @@
             <div class="bx-cover-gradient"></div>
             <div class="bx-cover bx-def-padding bx-def-box-sizing">
                 <div class="bx-cover-cnt">
-                        <bx_if:image>
-                            <div class="bx-cover-image">
-                                <img class="bx-def-border bx-def-round-corners" style="background-image:url(__icon_url__)" src="<bx_icon_url:spacer.gif />" />
-                            </div>
-                        </bx_if:image>
-                        <div class="bx-cover-title bx-def-margin-sec-topbottom bx-def-font-h1" style="z-index:2;">
-                            <bx_if:icon><i class="sys-icon bx-def-font-contrasted bx-def-margin-sec-right __icon__"></i></bx_if:icon>
-                            <span class="bx-def-font-contrasted">__title__</span>
+                    <bx_if:image>
+                        <div class="bx-cover-image">
+                            <img class="bx-def-border bx-def-round-corners" style="background-image:url(__icon_url__)" src="<bx_icon_url:spacer.gif />" />
                         </div>
-                        <div class="bx-cover-actions">__actions__</div>
+                    </bx_if:image>
+                    <div class="bx-cover-title bx-def-margin-sec-topbottom bx-def-font-h1" style="z-index:2;">
+                        <span class="bx-def-font-contrasted">__title__</span>
+                    </div>
+                    <div class="bx-cover-actions">__actions__</div>
                 </div>
             </div>
         </div>

+ 4 - 0
template/css/common.css

@@ -24,6 +24,10 @@ a > img {
 html {
     height:100%;
 }
+/*-- Tailwind overwrite --*/
+html.hidden {
+    display: block !important;
+}
 body {
 	min-height: 100%;
     min-height: 100vh;

+ 4 - 0
template/css/default.less

@@ -569,6 +569,10 @@ h3,
     position:relative;
     white-space:nowrap;
 }
+/*-- Tailwind overwrite --*/
+.bx-def-unit.absolute {
+    position: relative;
+}
 .bx-def-unit .bx-def-unit-info,
 .bx-def-unit .bx-def-unit-img,
 .bx-def-unit img {

+ 11 - 0
template/css/page_layouts.css

@@ -19,6 +19,17 @@
     float:none;
 }
 
+/* layout 1 column thin */
+.bx-layout-1-column-thin-column1 {
+    float:none;
+    width:33.3%;
+}
+
+/* layout 1 column half */
+.bx-layout-1-column-half-column1 {
+    float:none;
+    width:50%;
+}
 
 /* layout 3 columns */
 .bx-layout-3-columns-column3,

BIN
template/images/layout_1_column_half.png


BIN
template/images/layout_1_column_thin.png


+ 6 - 0
template/layout_1_column_half.html

@@ -0,0 +1,6 @@
+<!-- layout 1 column half [ start ] -->
+<div id="__page_id__" class="bx-layout-wrapper bx-layout-1-column-half">
+    <bx_include_auto:_row_1_column_half.html />
+    <bx_include_auto:_row_1_column_dump.html />
+</div>
+<!-- layout 1 column half [  end  ] -->

+ 6 - 0
template/layout_1_column_thin.html

@@ -0,0 +1,6 @@
+<!-- layout 1 column thin [ start ] -->
+<div id="__page_id__" class="bx-layout-wrapper bx-layout-1-column-thin">
+    <bx_include_auto:_row_1_column_thin.html />
+    <bx_include_auto:_row_1_column_dump.html />
+</div>
+<!-- layout 1 column thin [  end  ] -->

+ 7 - 5
template/profile_avatar.html

@@ -1,5 +1,5 @@
 <div class="bx-profile-avatar bx-def-border-radius-block">
-    <a href="javascript:void(0)" onclick="javascript:$('#bx-profile-switcher').dolPopup({});">
+    <a href="__switcher_url__" onclick="__switcher_onclick__">
         <div class="bx-profile-avatar-cnt bx-def-padding-sec">
             <div class="bx-pa-img">__profile_unit__</div>
             <div class="bx-pa-info">
@@ -10,10 +10,12 @@
                     </div>
                 </div>
             </div>
-            <div class="bx-pa-actions">
-                <div class="bx-pa-action bx-def-margin-sec-left"><i class="sys-icon arrows-alt-v"></i></div>
-            </div>
+            <bx_if:show_switcher_icon>
+                <div class="bx-pa-actions">
+                    <div class="bx-pa-action bx-def-margin-sec-left"><i class="sys-icon arrows-alt-v"></i></div>
+                </div>
+            </bx_if:show_switcher_icon>
         </div>
     </a>
 </div>
-__profile_switcher__
+__switcher__

+ 2 - 2
template/scripts/BxBaseCmtsForm.php

@@ -33,8 +33,8 @@ class BxBaseCmtsForm extends BxTemplFormView
     	if(isset($this->aInputs['cmt_image'])) {
             $this->aInputs['cmt_image']['storage_object'] = 'sys_cmts_images';
             $this->aInputs['cmt_image']['images_transcoder'] = 'sys_cmts_images_preview';
-            $this->aInputs['cmt_image']['uploaders'] = !empty($this->aInputs['cmt_image']['value']) ? unserialize($this->aInputs['cmt_image']['value']) : array('sys_cmts_simple');
-            $this->aInputs['cmt_image']['upload_buttons_titles'] = array('Simple' => 'camera');
+            $this->aInputs['cmt_image']['uploaders'] = !empty($this->aInputs['cmt_image']['value']) ? unserialize($this->aInputs['cmt_image']['value']) : array('sys_cmts_html5');
+            $this->aInputs['cmt_image']['upload_buttons_titles'] = array('Simple' => 'camera', 'HTML5' => 'camera');
             $this->aInputs['cmt_image']['storage_private'] = 0;
             $this->aInputs['cmt_image']['multiple'] = true;
             $this->aInputs['cmt_image']['content_id'] = 0;

+ 22 - 0
template/scripts/BxBaseCmtsUploaderHTML5.php

@@ -0,0 +1,22 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaBaseView UNA Base Representation Classes
+ * @{
+ */
+
+/**
+ * @see BxBaseUploaderHTML5, BxDolUploader
+ */
+class BxBaseCmtsUploaderHTML5 extends BxTemplUploaderHTML5
+{
+    function __construct ($aObject, $sStorageObject, $sUniqId, $oTemplate)
+    {
+        parent::__construct($aObject, $sStorageObject, $sUniqId, $oTemplate);
+        $this->_sButtonTemplate = 'comments_uploader_bs.html';
+    }
+}
+
+/** @} */

+ 26 - 21
template/scripts/BxBaseCover.php

@@ -32,35 +32,40 @@ class BxBaseCover extends BxDolCover
      */
     public function display ()
     {
-		if (getParam('sys_site_cover_disabled') == 'on')
-			return '';
-		
+        if (getParam('sys_site_cover_disabled') == 'on')
+            return '';
+
         $this->_addJsCss();
 
         if(!empty($this->_aOptions) && is_array($this->_aOptions))
-        	return $this->_oTemplate->parseHtmlByName($this->_sTemplateName, array_merge($this->_aOptiondDefault, $this->_aOptions));
+            return $this->_oTemplate->parseHtmlByName($this->_sTemplateName, array_merge($this->_aOptiondDefault, $this->_aOptions));
+
+        $oPage = BxDolPage::getObjectInstanceByURI();
+        if(empty($oPage) || !is_a($oPage, 'BxDolPage'))
+            return $this->displayEmpty();
 
-		$oPage = BxDolPage::getObjectInstanceByURI();
-		if(empty($oPage) || !is_a($oPage, 'BxDolPage'))
-			return $this->displayEmpty();
+        $mixedOptions = $oPage->getPageCoverParams();
+        if(empty($mixedOptions) || !is_array($mixedOptions))
+            return $this->displayEmpty();
 
-		$mixedOptions = $oPage->getPageCoverParams();
-		if(empty($mixedOptions) || !is_array($mixedOptions))
-			return $this->displayEmpty();
+        if(!$this->_sCoverImageUrl) {
+            $iId = (int)getParam('sys_site_cover_common');
+            if($iId != 0)
+                $this->setCoverImageUrl(array('id' => $iId, 'transcoder' => BX_DOL_TRANSCODER_OBJ_COVER));
+        }
 
-		if(!$this->_sCoverImageUrl) {
-			$iId = (int)getParam('sys_site_cover_common');
-			if($iId != 0)
-				$this->setCoverImageUrl(array('id' => $iId, 'transcoder' => BX_DOL_TRANSCODER_OBJ_COVER));
-		}
+        if($this->_sCoverImageUrl)
+            $mixedOptions['bx_if:bg'] = array (
+                'condition' => true,
+                'content' => array('image_url' => $this->_sCoverImageUrl),
+            );
 
-		if($this->_sCoverImageUrl)
-			$mixedOptions['bx_if:bg'] = array (
-				'condition' => true,
-				'content' => array('image_url' => $this->_sCoverImageUrl),
-			);
+        $mixedOptions['bx_if:empty_cover_class'] = array (
+            'condition' => empty($this->_sCoverImageUrl),
+            'content' => array(),
+        );
 
-		return $this->_oTemplate->parseHtmlByName($this->_sTemplateName, array_merge($this->_aOptiondDefault, $mixedOptions));        
+        return $this->_oTemplate->parseHtmlByName($this->_sTemplateName, array_merge($this->_aOptiondDefault, $mixedOptions));        
     }
     
     /**

+ 1 - 1
template/scripts/BxBaseFormView.php

@@ -1567,7 +1567,7 @@ BLAH;
         
         $s = ''; 
         foreach ($aInput['value'] as $sLabel)
-            $s .= '<a href="' . $oMetatags->keywordsGetHashTagUrl($sLabel, $aInput['content_id']) . '"><b class="val bx-def-color-bg-hl bx-def-round-corners">' . trim($sLabel) . '</b></a>';
+            $s .= '<a href="' . $oMetatags->keywordsGetHashTagUrl($sLabel, $aInput['content_id']) . '"><b class="bx-def-label val">' . trim($sLabel) . '</b></a>';
 
         return $this->oTemplate->parseHtmlByName('form_field_labels_view.html', array(
             'values' => $s,

+ 4 - 0
template/scripts/BxBasePageHome.php

@@ -25,6 +25,10 @@ class BxBasePageHome extends BxTemplPage
         BxDolCover::getInstance()->set(array(
             'class' => 'bx-cover-homepage',
             'title' => _t('_sys_txt_homepage_cover', BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=create-account')),
+            'bx_if:empty_cover_class' => array (
+                'condition' => !$bTmplVarsCover,
+                'content' => array(),
+            ),
             'bx_if:bg' => array (
                 'condition' => $bTmplVarsCover,
                 'content' => $aTmplVarsCover,

+ 22 - 14
template/scripts/BxBaseServiceProfiles.php

@@ -46,26 +46,28 @@ class BxBaseServiceProfiles extends BxDol
         if(!$oProfile)
             return '';
 
-        $oAcl = BxDolAcl::getInstance();
-        $aAcl = $oAcl->getMemberMembershipInfo($iProfileId);
-        $aAclInfo = $oAcl->getMembershipInfo($aAcl['id']);
-
         $oTemplate = BxDolTemplate::getInstance();
 
+        $sSwitcher = '';
         $aSwitcher = bx_srv('system', 'account_profile_switcher', array(false, null, '', true), 'TemplServiceProfiles');
-        $sSwitcher = $aSwitcher !== false ? BxTemplFunctions::getInstance()->transBox('bx-profile-switcher', $oTemplate->parseHtmlByName('profile_avatar_switcher.html', array(
-            'profile_switcher' => $aSwitcher['content'],
-            'bx_if:multiple_profiles_mode' => array(
-                'condition' => (int)getParam('sys_account_limit_profiles_number') != 1,
-                'content' => array(
-                    'url_switch_profile' => BxDolPermalinks::getInstance()->permalink('page.php?i=account-profile-switcher')
+        if($aSwitcher !== false)
+            $sSwitcher = BxTemplFunctions::getInstance()->transBox('bx-profile-switcher', $oTemplate->parseHtmlByName('profile_avatar_switcher.html', array(
+                'profile_switcher' => $aSwitcher['content'],
+                'bx_if:multiple_profiles_mode' => array(
+                    'condition' => empty($aSwitcher['content']) || (int)getParam('sys_account_limit_profiles_number') != 1,
+                    'content' => array(
+                        'url_switch_profile' => BxDolPermalinks::getInstance()->permalink('page.php?i=account-profile-switcher')
+                    )
                 )
-            )
-        )), true) : '';
+            )), true);
+        $bSwitcher = !empty($sSwitcher);
 
         $sDisplayName = $oProfile->getDisplayName();
 
-        list ($sIcon, $sIconUrl, $sIconA, $sIconHtml) = $this->_getIcon($aAclInfo['icon']);
+        $oAcl = BxDolAcl::getInstance();
+        $aAcl = $oAcl->getMemberMembershipInfo($iProfileId);
+        $aAclInfo = $oAcl->getMembershipInfo($aAcl['id']);
+        list($sIcon, $sIconUrl, $sIconA, $sIconHtml) = $this->_getIcon($aAclInfo['icon']);
 
         $aVars = array(
             'profile_id' => $oProfile->id(),
@@ -99,7 +101,13 @@ class BxBaseServiceProfiles extends BxDol
                 'condition' => (bool)$sIconHtml,
                 'content' => array('icon' => $sIconHtml),
             ),
-            'profile_switcher' => $sSwitcher
+            'switcher_url' => $bSwitcher ? 'javascript:void(0)' : $oProfile->getUrl(),
+            'switcher_onclick' => $bSwitcher ? "javascript:$('#bx-profile-switcher').dolPopup({});" : "",
+            'bx_if:show_switcher_icon' => array(
+                'condition' => $bSwitcher,
+                'content' => array()
+            ),
+            'switcher' => $sSwitcher
         );
 
         return $oTemplate->parseHtmlByName('profile_avatar.html', $aVars);

Некоторые файлы не были показаны из-за большого количества измененных файлов