필요할 때 라이믹스 (Rhymix PRN) - 멤버 모바일 스킨 (#885)

* 필요할 때 라이믹스 (Rhymix PRN)

# 필요할 때 라이믹스 (Rhymix PRN)

마더캣님과 작업하는 정식 라이믹스 회원 모듈 모바일 스킨
디자인: 마더캣
구현: 미솔

참고: 미솔의 개인적인 스케줄이 바빠서 오래 걸릴 예정. rhymix-designs 에서 작업하고 사용할만하게 되면 옮겨오는
식으로 작업중...

* Simple world 스킨 흔적 지우기.

* 프로필 이미지 등록, 삭제 UI

* 탈퇴 페이지에서 필수가 아닌 변수 삭제

https://github.com/rhymix/rhymix/pull/885 @bjrambo 님 의견 반영

* 회원 모듈 스킨, 커뮤니케이션 모듈 스킨

* 잘못 들어간 파일삭제

* 잘못 들어간 파일 삭제

* 깨진 이미지 복구

* 스킨 다듬기
This commit is contained in:
Min-Soo Kim 2017-09-20 09:21:51 +09:00 committed by GitHub
parent 1b5818e73c
commit 09e60ee3eb
53 changed files with 2937 additions and 0 deletions

View file

@ -0,0 +1,28 @@
{@ $communication_popup = TRUE;}
<load target="filter/add_friend.xml" />
<include target="./common_header.html" />
<section class="prn-body">
<h1>{$lang->cmd_add_friend}</h1>
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/communication/skins/rx_prn/add_friend/1'" class="rx_prn-notice {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="addFriend" action="./" method="post">
<input type="hidden" name="module" value="communication" />
<input type="hidden" name="act" value="procCommunicationAddFriend" />
<input type="hidden" name="target_srl" value="{$target_info->member_srl}" />
<input type="hidden" name="xe_validator_id" value="modules/communication/skins/rx_prn/add_friend/1" />
<div class="control-group">
<label for="n_name">{$lang->nick_name}</label>
<input type="text" disabled="disabled" name="nick_name" id="n_name" value="{$target_info->nick_name}" title="{lang('common.user_id')}" />
<label for="friend_group_srl">{$lang->friend_group}<a class="pos-right" href="{getUrl('act','dispCommunicationAddFriendGroup')}" onclick="popopen(this.href);return false;">{$lang->cmd_add_friend_group}</a></label>
<select name="friend_group_srl" id="friend_group_srl">
<option value="">{$lang->default_friend_group}</option>
<option loop="$friend_group_list => $key,$val" value="{$val->friend_group_srl}">{$val->title}</option>
</select>
</div>
<div class="control-group">
<input type="submit" value="{lang('communication.cmd_add_friend')}" />
</div>
</form>
</section>
<include target="./common_footer.html" />

View file

@ -0,0 +1,29 @@
{@ $communication_popup = TRUE;}
<include target="./common_header.html" />
<load target="js/communication.js" />
<section class="prn-body">
<h1>
<!--@if($friend_group->friend_group_srl)-->
{$lang->cmd_rename_friend_group}
<!--@else-->
{$lang->cmd_add_friend_group}
<!--@end-->
</h1>
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/communication/skins/rx_prn/add_friend_group/1'" class="rx_prn-notice {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="addFriendGroup" action="./" method="post" class="form-horizontal">
<input type="hidden" name="module" value="communication" />
<input type="hidden" name="act" value="procCommunicationAddFriendGroup" />
<input type="hidden" name="friend_group_srl" value="{$friend_group->friend_group_srl}" />
<input type="hidden" name="xe_validator_id" value="modules/communication/skins/rx_prn/add_friend_group/1" />
<div class="control-group">
<label for="title">{$lang->msg_insert_group_name}</label>
<input name="title" id="title" type="text" value="{htmlspecialchars($friend_group->title, ENT_COMPAT | ENT_HTML401, 'UTF-8', false)}"/>
</div>
<div class="control-group">
<input cond="$friend_group->friend_group_srl" type="submit" value="{$lang->cmd_modify}" />
<input cond="!$friend_group->friend_group_srl" type="submit" value="{$lang->cmd_insert}" />
</div>
</form>
</section>

View file

@ -0,0 +1 @@
</section>

View file

@ -0,0 +1,81 @@
<!--// responsible layout -->
<!--@if($communication_popup === TRUE)-->
{@Context::addMetaTag("viewport", "width=device-width, user-scalable=yes")}
<!--@endif-->
<load target="js/communication.js" />
<!--// Check layout. If it is Simple World, select layout primary colors as a primary color of this skin -->
<block cond="$layout_info->extra_var->primary_color->type === 'select' || $layout_info->extra_var->customized_primary_color->type === 'colorpicker'">
{@
if(!$layout_info->primary_color)
$layout_info->primary_color = 'red';
if(!$layout_info->primary_color && $layout_info->customized_primary_color)
$layout_info->primary_color = 'customized';
if(!$layout_info->customized_primary_color)
$layout_info->customized_primary_color = '#f44336';
}
</block>
<block cond="$layout_info->extra_var->primary_color->type !== 'select' && $layout_info->extra_var->customized_primary_color->type !== 'colorpicker'">
{@$layout_info->primary_color = 'red';}
</block>
{@
$material_colors = array(
'red' => '#f44336',
'crimson' => '#aa0000',
'pink' => '#e91e63',
'purple' => '#9c27b0',
'deep-purple' => '#673ab7',
'indigo' => '#3f51b5',
'deep-blue' => '#00397f',
'blue' => '#2196f3',
'light-blue' => '#03a9f4',
'cyan' => '#00bcd4',
'teal' => '#009688',
'green' => '#4caf50',
'light-green' => '#8bc34a',
'lime' => '#cddc39',
'yellow' => '#ffeb3b',
'amber' => '#ffc107',
'orange' => '#ff9800',
'deep-orange' => '#ff5722',
'brown' => '#795548',
'grey' => '#9e9e9e',
'blue-grey' => '#607d8b',
'black' => '#000000',
'white' => '#ffffff',
'customized' => $layout_info->customized_primary_color,
);
}
<!--// Load styles -->
{@$colorset = $material_colors[$member_config->colorset];}
{@$skin_color = $material_colors[$layout_info->primary_color];}
<block cond="$colorset">
<!--@if(preg_match("/#([a-f0-9]{3}){1,2}/i", trim($colorset)) && in_array(strlen(trim($colorset)), array(4, 7)))-->
{@$skin_color = trim($colorset)}
<!--@if(strlen(trim($colorset)) === 4)-->
{@$skin_color = trim($colorset)[1].trim($colorset)[1].trim($colorset)[2].trim($colorset)[2].trim($colorset)[3].trim($colorset)[3]}
<!--@endif-->
<!--@else-->
{@$skin_color = '#f44336'}
<!--@endif-->
</block>
<block cond="!$skin_color">
<!--@if(preg_match("/#([a-f0-9]{3}){1,2}/i", $layout_info->primary_color) && in_array(strlen(trim($colorset)), array(4, 7)))-->
{@$skin_color = $layout_info->primary_color}
<!--@if(strlen($layout_info->primary_color) === 4)-->
{@$skin_color = $layout_info->primary_color[1].$layout_info->primary_color[1].$layout_info->primary_color[2].$layout_info->primary_color[2].$layout_info->primary_color[3].$layout_info->primary_color[3]}
<!--@endif-->
<!--@else-->
{@$skin_color = '#f44336'}
<!--@endif-->
</block>
{@Context::set('prn_less_value', array('red' => hexdec(substr($skin_color, 1, 2)), 'green' => hexdec(substr($skin_color, 3, 2)), 'blue' => hexdec(substr($skin_color, 5, 2)) ))}
<load target="css/css.less" vars="$prn_less_value" />
<section class="rx_prn_communication">
<div class="rx_prn_tab" cond="$communication_popup !== TRUE && $is_logged && $logged_info->menu_list && (!$member_srl || $member_srl == $logged_info->member_srl)">
<ul class="rx_prn_tab">
<li loop="$logged_info->menu_list=>$key,$val" class="active"|cond="$key==$act">
<a href="{getUrl('', 'act',$key, 'mid', $mid, 'vid', $vid)}"><span>{lang($val)}</span></a>
</li>
</ul>
</div>

View file

@ -0,0 +1,467 @@
@charset "UTF-8";
/*
@method .text-contrast()
@author misol <misol.kr@gmail.com>
@brief Select a text color according to WCAG 2.0 contrast guideline. The calcualtion of contrast follows the formula on the guideline.
*/
.text-contrast(@bg_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i >= 100) and ( ( (luma(@bg_color) + 0.05) / (luma(@dark_color) + 0.05) ) =< ( ( luma(@bright_color) + 0.05) / ( luma(@bg_color) + 0.05) )) {
color: @bright_color;
}
.text-contrast(@bg_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i >= 100) and ( ( (luma(@bg_color) + 0.05) / (luma(@dark_color) + 0.05) ) > ( ( luma(@bright_color) + 0.05) / ( luma(@bg_color) + 0.05) )) {
color: @dark_color;
}
.text-contrast(@bg_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i < 100) and ( ( (luma(@bg_color) + 0.05) / (luma(@dark_color) + 0.05) ) =< ( ( luma(@bright_color) + 0.05) / ( luma(@bg_color) + 0.05) )) and ( ( ( luma(@bright_color) + 0.05) / ( luma(@bg_color) + 0.05) ) > 4.5 * @multi ) {
color: @bright_color;
}
.text-contrast(@bg_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i < 100) and ( ( (luma(@bg_color) + 0.05) / (luma(@dark_color) + 0.05) ) =< ( ( luma(@bright_color) + 0.05) / ( luma(@bg_color) + 0.05) ) ) and ( ( ( luma(@bright_color) + 0.05) / ( luma(@bg_color) + 0.05) ) =< 4.5 * @multi ) {
.text-contrast(@bg_color; lighten(@bright_color, 5%); @dark_color; @multi; @i + 1);
}
.text-contrast(@bg_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i < 100) and ( ( (luma(@bg_color) + 0.05) / (luma(@dark_color) + 0.05) ) > ( ( luma(@bright_color) + 0.05) / ( luma(@bg_color) + 0.05) )) and ( ( (luma(@bg_color) + 0.05) / (luma(@dark_color) + 0.05) ) > 4.5 * @multi ) {
color: @dark_color;
}
.text-contrast(@bg_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i < 100) and (( (luma(@bg_color) + 0.05) / (luma(@dark_color) + 0.05) ) > ( ( luma(@bright_color) + 0.05) / ( luma(@bg_color) + 0.05) )) and ( ( (luma(@bg_color) + 0.05) / (luma(@dark_color) + 0.05) ) =< 4.5 * @multi ) {
.text-contrast(@bg_color; @bright_color; darken(@dark_color, 5%); @multi; @i + 1);
}
/*
@method .bg-contrast()
@author misol <misol.kr@gmail.com>
@brief Select a background color, which has less contrast background color than WCAG 2.0 contrast guideline. On the WCAG 2.0 guideline, bigger string can have less contrast as 3.0.
*/
.bg-contrast(@text_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i >= 100) and ( ( (luma(@text_color) + 0.05) / (luma(@dark_color) + 0.05) ) =< ( ( luma(@bright_color) + 0.05) / ( luma(@text_color) + 0.05) )) {
background: @bright_color;
}
.bg-contrast(@text_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i >= 100) and ( ( (luma(@text_color) + 0.05) / (luma(@dark_color) + 0.05) ) > ( ( luma(@bright_color) + 0.05) / ( luma(@text_color) + 0.05) )) {
background: @dark_color;
}
.bg-contrast(@text_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i < 100) and ( ( (luma(@text_color) + 0.05) / (luma(@dark_color) + 0.05) ) =< ( ( luma(@bright_color) + 0.05) / ( luma(@text_color) + 0.05) )) and ( ( ( luma(@bright_color) + 0.05) / ( luma(@text_color) + 0.05) ) > 3 * @multi ) {
background: @bright_color;
}
.bg-contrast(@text_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i < 100) and ( ( (luma(@text_color) + 0.05) / (luma(@dark_color) + 0.05) ) =< ( ( luma(@bright_color) + 0.05) / ( luma(@text_color) + 0.05) ) ) and ( ( ( luma(@bright_color) + 0.05) / ( luma(@text_color) + 0.05) ) =< 3 * @multi ) {
.bg-contrast(@text_color; lighten(@bright_color,3%); @dark_color; @multi; @i + 1);
}
.bg-contrast(@text_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i < 100) and ( ( (luma(@text_color) + 0.05) / (luma(@dark_color) + 0.05) ) > ( ( luma(@bright_color) + 0.05) / ( luma(@text_color) + 0.05) )) and ( ( (luma(@text_color) + 0.05) / (luma(@dark_color) + 0.05) ) > 3 * @multi ) {
background: @dark_color;
}
.bg-contrast(@text_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i < 100) and (( (luma(@text_color) + 0.05) / (luma(@dark_color) + 0.05) ) > ( ( luma(@bright_color) + 0.05) / ( luma(@text_color) + 0.05) )) and ( ( (luma(@text_color) + 0.05) / (luma(@dark_color) + 0.05) ) =< 3 * @multi ) {
.bg-contrast(@text_color; @bright_color; darken(@dark_color, 3%); @multi; @i + 1);
}
/* As LESS library in Rhymix substitude variables as an strings, convert colors as the color objects of LESS. */
@color: rgb(@red, @green, @blue);
/* As this file handle some wild-selectors to control display settings, hide inline script and style codes. */
script, style
{
display:none!important;
}
/* Member skin container, default settings */
.rx_prn_communication
{
/* font-size */
.font-xl()
{
/* font-size: 45; 1 */
font-size: 1.25em;
}
.font-l()
{
/* font-size: 40; 1_2, 1_3, 2_1, 4, 5_1 */
font-size: 1.11em;
}
.font-m()
{
/* font-size: 36; 1_4, 2_2, 4_1, 5_2 */
font-size: 1em;
}
.font-s()
{
/* font-size: 30; 2_3, 3_1, 5_3 */
font-size: 0.833em;
}
/* font-weight */
.font-bold()
{
font-weight: 700;
}
/* font-color */
.font-point()
{
/* 4, 4_1 */
color: lighten(@color, 5%)
}
.font-dark()
{
color: #484848
}
.font-gray()
{
color: #757575
}
.font-light()
{
color: #bdbdbd
}
.background-lightgray()
{
background-color: #fafafa
}
.background-gray()
{
background-color: #bdbdbd
}
.background-lightpoint()
{
color: lighten(@color, 10%)
}
.background-point()
{
color: @color
}
font-family: "맑은 고딕", "Apple SD Gothic Neo","나눔고딕",NanumGothic,'Nanum Gothic',Arial,Helvetica,sans-serif;
font-size: 14px;
text-align: justify;
margin: 8px 0px;
padding: 0 5px;
.font-dark();
a
{
.font-dark();
text-decoration: none;
}
.pos-right
{
position:absolute;
right:0
}
/* Tab over the main content. */
div.rx_prn_tab{
background: #ffffff;
margin: 5px 0 0;
box-sizing: border-box;
overflow: hidden;
width:100%;
ul.rx_prn_tab{
margin: 0;
padding: 0;
list-style: outside none none;
display: block;
text-decoration: none;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
&>li {
display:inline-block;
line-height: 1.5;
position: relative;
padding: 0 10px;
a {
display:inline-block;
letter-spacing: -1px;
line-height: 3;
border-bottom: solid 3px #fff;
padding: 0 5px;
.font-l();
.font-bold();
}
a:hover, a:focus, &.active a{
border-bottom: solid 3px @color;
}
}
}
}
/* member forms */
.prn-narrow
{
max-width:400px;
margin:0px auto;
box-sizing:border-box;
}
.prn-body
{
box-sizing:border-box;
border-radius: 25px;
.background-lightgray();
margin: 0 0 17px;
padding: 1px 0;
&>*
{
padding: 5px 20px;
margin:0;
border: 0;
&:first-child {
padding-top: 20px;
}
&:last-child {
padding-bottom: 20px;
}
}
h1
{
padding: 15px 5px;
margin: 5px 15px;
border-bottom: 1px solid #d1d1d1;
.font-l();
.font-bold();
}
.prn-anchor-buttons
{
margin: 5px 0px;
&>a, &>label, &>button, &>select, &>input[type="submit"]
{
display: block;
width: 100%;
-webkit-appearance: none;
box-sizing: border-box;
border-top: none;
border-right: none;
border-bottom: 1px solid #d1d1d1;
border-left: none;
border-radius: 0px;
background-color: #fff;
padding: 10px 15px;
text-decoration: none;
text-align: center;
.font-m();
.font-point();
&:hover, &:focus
{
.bg-contrast(#000; lighten(@color,5%); darken(@color,5%); 4.0);
}
&:first-child
{
border-top: 1px solid #d1d1d1;
}
}
}
}
form
{
overflow: hidden;
width:100%;
white-space: normal;
box-sizing: border-box;
div.control-group
{
&>*
{
display:block;
position:relative;
box-sizing: border-box;
width:100%;
height: auto;
margin:0px;
margin-top: 10px;
}
&>*:first-child
{
margin-top: 0;
}
&>input, &>select, button, #prn_profile_imagetag label.prn_button
{
border: 1px solid #d1d1d1;
border-radius: 25px;
margin-top: 0;
padding: 8px 15px;
-webkit-appearance: none;
line-height: 2;
height: auto;
.font-gray();
.font-m();
}
&>label, &>div.control-label
{
font-weight: bold;
border:0;
}
}
}
form input[type="submit"], form button
{
padding: 10px;
vertical-align: bottom;
.bg-contrast(#000; lighten(@color,5%); darken(@color,5%); 3.0);
font-weight: bold;
text-shadow: none;
border:0;
color: #000;
&:hover, &:focus
{
.bg-contrast(#000; lighten(@color,5%); darken(@color,5%); 4.0);
}
}
form div.control-group>input[type="submit"], .prn-footer{
margin: 20px 0 0;
}
.prn-footer.prn-anchor-buttons {
text-align:right;
&>a {
display:inline-block;
}
}
/* message; error, info, update */
.rx_prn-notice, .rx_prn-notice.info
{
.bg-contrast(#000; lighten(@color, 5%); darken(@color, 5%); 5.0);
color: #000;
border-radius: 15px;
padding: 15px;
margin: 10px;
margin-top:0;
text-align: justify;
.font-gray();
.font-m();
}
.rx_prn-notice.error
{
background: #fff3e0;
.text-contrast(#fff3e0);
}
.rx_prn-notice.update
{
background: #e8f5e9;
.text-contrast(#e8f5e9);
}
.rx_prn-notice>*
{
padding: 0;
margin:0;
}
/* The list of document style */
.content_basic{
position:relative;
display:inline-block;
max-width:100%;
vertical-align: middle;
overflow:hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.content_subinfo
{
color: #9e9e9e;
font-size: 12px;
margin: 0 3px 0 7px;
overflow:hidden;
}
ul.rx_sw_list {
list-style: outside none none;
margin: 20px 0px;
padding: 0;
border-bottom: 1px solid #e0e0e0;
li {
position:relative;
border-top: 1px solid #e0e0e0;
overflow: hidden;
padding:0;
}
.cont_a {
color: #222;
display: block;
letter-spacing: -1px;
line-height: 18px;
margin: 0;
overflow: hidden;
padding: 0.667em 70px 0.733em 15px;
text-overflow: ellipsis;
white-space: nowrap;
text-decoration: none;
&.no_delete {
padding-right: 15px;
}
&:hover, &:focus {
.text-contrast(#fff; darken(@color,5%); lighten(@color,5%));
}
}
.content_delete{
position:absolute;
top:0;
right:2px;
button{
background: lighten(@color, 5%);
font-size: 14px;
border:0;
border-radius: 25px;
.text-contrast(lighten(@color, 5%));
padding: 10px 15px;
vertical-align: bottom;
&:hover, &:focus
{
.bg-contrast(#000; lighten(@color,5%); darken(@color,5%); 4.0);
}
}
input[type="checkbox"]
{
width: 30px;
height: 30px;
}
}
}
.pagination ul
{
display:block;
list-style: outside none none;
text-align:center;
padding: 0;
margin: 0;
li{
display:inline-block;
&>a
{
display: inline-block;
border-radius: 50%;
background-color: #fff;
padding: 10px 15px;
text-decoration: none;
.font-m();
&:hover, &:focus
{
.bg-contrast(#000; lighten(@color,5%); darken(@color,5%); 4.0);
}
}
&.active>a
{
background-color: #d1d1d1;
font-weight:bold;
color:#000;
}
}
}
.prn-footer
{
&>a
{
display: block;
border-radius: 25px;
border: 1px solid #d1d1d1;
background-color: #fff;
padding: 10px 15px;
text-decoration: none;
text-align: center;
.font-m();
&:hover, &:focus
{
.bg-contrast(#000; lighten(@color,5%); darken(@color,5%); 4.0);
}
}
}
}

View file

@ -0,0 +1,9 @@
<filter name="add_friend" module="communication" act="procCommunicationAddFriend" confirm_msg_code="confirm_submit">
<form />
<parameter />
<response callback_func="completeAddFriend">
<tag name="error" />
<tag name="message" />
<tag name="member_srl" />
</response>
</filter>

View file

@ -0,0 +1,10 @@
<filter name="add_friend_group" module="communication" act="procCommunicationAddFriendGroup" confirm_msg_code="confirm_submit">
<form>
<node target="title" required="true" minlength="1" maxlength="240" />
</form>
<parameter />
<response callback_func="completeAddFriendGroup">
<tag name="error" />
<tag name="message" />
</response>
</filter>

View file

@ -0,0 +1 @@
<filter name="delete_checked_friend" module="communication" act="procCommunicationDeleteFriend" confirm_msg_code="confirm_delete" />

View file

@ -0,0 +1 @@
<filter name="delete_checked_message" module="communication" act="procCommunicationDeleteMessages" confirm_msg_code="confirm_delete" />

View file

@ -0,0 +1 @@
<filter name="delete_friend_group" module="communication" act="procCommunicationDeleteFriendGroup" confirm_msg_code="confirm_delete" />

View file

@ -0,0 +1 @@
<filter name="move_friend" module="communication" act="procCommunicationMoveFriend" confirm_msg_code="confirm_move" />

View file

@ -0,0 +1,12 @@
<filter name="send_message" module="communication" act="procCommunicationSendMessage" confirm_msg_code="confirm_submit">
<form>
<node target="title" required="true" minlength="1" maxlength="240" />
<node target="content" required="true" minlength="1" />
</form>
<parameter />
<response callback_func="completeSendMessage">
<tag name="error" />
<tag name="message" />
<tag name="redirect_url" />
</response>
</filter>

View file

@ -0,0 +1,5 @@
<filter name="update_allow_message" module="communication" act="procCommunicationUpdateAllowMessage">
<form />
<parameter />
<response />
</filter>

View file

@ -0,0 +1,80 @@
<include target="./common_header.html" />
<load target="filter/delete_friend_group.xml" />
<load target="filter/move_friend.xml" />
<div class="prn-narrow">
<section class="prn-body">
<h1>{$member_title = $lang->cmd_view_friend}</h1>
<div class="rx_prn-notice">{lang('common.total')}: {number_format($total_count)}</div>
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/communication/skins/rx_prn/frineds/1'" class="rx_prn-notice {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<div>
<form action="./" method="get" class="pos-left">
<input type="hidden" name="act" value="dispCommunicationFriend" />
<input type="hidden" name="message_type" value="{$message_type}" />
<input type="hidden" name="mid" value="{$mid}" />
<div class="control-group">
<select name="friend_group_srl" id="jumpMenu">
<option value="">{$lang->default_friend_group}</option>
<option loop="$friend_group_list => $key,$val" value="{$val->friend_group_srl}" selected="selected"|cond="$val->friend_group_srl == $friend_group_srl">{$val->title}</option>
</select>
<input type="submit" value="{$lang->cmd_view_selected_frend_group}">
</div>
</form>
</div>
<form ruleset="deleteCheckedFriend" id="fo_friend_list" action="./" method="post">
<input type="hidden" name="module" value="communication" />
<input type="hidden" name="act" value="procCommunicationDeleteFriend" />
<input type="hidden" name="xe_validator_id" value="modules/communication/skins/rx_prn/frineds/1" />
<ul class="rx_sw_list">
<li loop="$friend_list => $no,$val">
<a href="#popup_menu_area" class="cont_a member_{$val->target_srl}">
<span class="content_basic member_{$val->target_srl}">
<span class="content_title member_{$val->target_srl}">
{escape($val->nick_name)}
</span>
<span class="content_subinfo member_{$val->target_srl}">
{escape($val->group_title?$val->group_title:$lang->default_friend_group)} / {zdate($val->regdate,"Y-m-d H:i")}
</span>
</span>
</a>
<span class="content_delete">
<input name="friend_srl_list[]" type="checkbox" value="{$val->friend_srl}" />
</span>
</li>
</ul>
<div class="prn-anchor-buttons">
<label for="check_all">
{$lang->cmd_select_all}
<input name="check_all" id="check_all" type="checkbox" onclick="XE.checkboxToggleAll('friend_srl_list[]', {wrap:'fo_friend_list'})"/>
</label>
<button type="submit" name="act" value="procCommunicationDeleteFriend">{$lang->cmd_delete}</button>
</div>
<div class="prn-anchor-buttons">
<select name="target_friend_group_srl" id="target_friend_group_srl" cond="count($friend_group_list)" style="margin:0">
<option loop="$friend_group_list => $key,$val" value="{$val->friend_group_srl}">{$val->title}</option>
</select>
<button type="submit" name="act" cond="count($friend_group_list)" value="procCommunicationMoveFriend">{$lang->cmd_move}</button>
<button type="button" value="{getUrl('','module','communication','act','dispCommunicationAddFriendGroup')}" onclick="popopen(this.value);return false;">{$lang->cmd_add_friend_group}...</button>
<button type="button" cond="count($friend_group_list)" onclick="doRenameFriendGroup();return false;">{$lang->cmd_rename_friend_group}...</button>
<button type="button" cond="count($friend_group_list)" onclick="doDeleteFriendGroup();return false;">{$lang->cmd_delete_friend_group}</button>
</div>
</form>
</section>
</div>
<div class="pagination pagination-centered">
<ul>
{@$rx_prn = FALSE}
<!--@while($page_no = $page_navigation->getNextPage())-->
<li cond="$rx_prn === FALSE && ($page_no - 1) > 0"><a href="{getUrl('page', ($page_no - 1),'module_srl','')}" class="direction">&lsaquo;</a></li>
{@$rx_prn = $page_no}
<li class="active"|cond="$page == $page_no"><a href="{getUrl('page',$page_no,'module_srl','')}">{$page_no}</a></li>
<!--@end-->
<li cond="$page_navigation->last_page > $rx_prn && $rx_prn > 0"><a href="{getUrl('page', ($rx_prn + 1),'module_srl','')}" class="direction">&rsaquo;</a></li>
</ul>
</div>
<form action="./" method="get" id="for_delete_group">
<input type="hidden" name="friend_group_srl" value="" />
<input type="hidden" name="xe_validator_id" value="modules/communication/skins/rx_prn/frineds/1" />
</form>
<include target="./common_footer.html" />

View file

@ -0,0 +1,119 @@
/* 쪽지 발송 */
function completeSendMessage(ret_obj) {
alert(ret_obj['message']);
window.close();
}
function doSendMessage(member_srl, message_srl) {
if(typeof(message_srl)=='undefined') message_srl = 0;
var url = request_uri.setQuery('module','communication').setQuery('act','dispCommunicationSendMessage').setQuery('receiver_srl',member_srl).setQuery('message_srl',message_srl);
popopen(url, 'sendMessage');
}
/* 개별 쪽지 삭제 */
function doDeleteMessage(message_srl) {
if(!message_srl) return;
var params = new Array();
params['message_srl'] = message_srl;
exec_xml('communication', 'procCommunicationDeleteMessage', params, completeDeleteMessage);
}
function completeDeleteMessage(ret_obj) {
alert(ret_obj['message']);
location.href = current_url.setQuery('message_srl','');
}
/* 개별 쪽지 보관 */
function doStoreMessage(message_srl) {
if(!message_srl) return;
var params = new Array();
params['message_srl'] = message_srl;
exec_xml('communication', 'procCommunicationStoreMessage', params, completeStoreMessage);
}
function completeStoreMessage(ret_obj) {
alert(ret_obj['message']);
location.href = current_url.setQuery('message_srl','');
}
/* 친구 추가 후 */
function completeAddFriend(ret_obj) {
alert(ret_obj['message']);
var member_srl = ret_obj['member_srl'];
if(opener && opener.loaded_member_menu_list) {
opener.loaded_member_menu_list[ret_obj['member_srl']] = '';
}
window.close();
}
/* 친구 그룹 추가 후 */
function completeAddFriendGroup(ret_obj) {
alert(ret_obj['message']);
if(opener) opener.location.href = opener.location.href;
window.close();
}
/* 친구 그룹 삭제 */
function doDeleteFriendGroup() {
var friend_group_srl = jQuery('#target_friend_group_srl option:selected').val();
if(!friend_group_srl) return;
var fo_obj = jQuery('#for_delete_group').get(0);
fo_obj.friend_group_srl.value = friend_group_srl;
procFilter(fo_obj, delete_friend_group);
}
function completeDeleteFriendGroup(ret_obj) {
alert(ret_obj['message']);
location.href = current_url.setQuery('friend_group_srl','');
}
/* 친구 그룹의 이름 변경 */
function doRenameFriendGroup() {
var friend_group_srl = jQuery('#target_friend_group_srl option:selected').val();
if(!friend_group_srl) return;
popopen("./?module=communication&act=dispCommunicationAddFriendGroup&friend_group_srl="+friend_group_srl);
}
/* 친구 그룹 이동 */
function doMoveFriend() {
var fo_obj = jQuery('#fo_friend_list').get(0);
procFilter(fo_obj, move_friend);
}
/* 친구 그룹 선택 */
function doJumpFriendGroup() {
var sel_val = jQuery('#jumpMenu option:selected').val();
location.href = current_url.setQuery('friend_group_srl', sel_val);
}
function isRxPrnTouchable() {
var el = document.createElement('div');
el.setAttribute('ontouchstart', 'return;'); // or try "ontouchstart"
return typeof el.ontouchstart === "function";
}
$(document).ready(function() {
$('.__submit_group button[type=submit]').click(function(e){
var sel_val = $('input[name="friend_srl_list[]"]:checked').length;
if(sel_val == 0)
{
e.preventDefault();
return false;
}
});
if(isRxPrnTouchable()) {
$(".rx_prn_communication div.rx_prn_tab ul.rx_prn_tab").css('white-space', 'nowrap');
try
{
$(".rx_prn_communication div.rx_prn_tab ul.rx_prn_tab").animate({
scrollLeft: $(".rx_prn_communication div.rx_prn_tab ul.rx_prn_tab li.active").offset().left
}, 300);
} catch (e) {
}
}
});

View file

@ -0,0 +1,84 @@
<include target="./common_header.html" />
<load target="filter/delete_checked_message.xml" />
<load target="filter/update_allow_message.xml" />
<div class="prn-narrow">
<section class="prn-body" cond="$message">
<h1>{escape($message->title)}</h1>
<div>
<a href="popup_menu_area" class="member_{$message->member_srl}">{$message->nick_name}</a> / {zdate($message->regdate, "Y-m-d H:i")}
</div>
<div class="xe_content">
{$message->content}
</div>
<div class="prn-anchor-buttons">
<a cond="$message->message_type != 'S' && $message->member_srl != $logged_info->member_srl" href="#" onclick="doSendMessage('{$message->sender_srl}','{$message->message_srl}');">{$lang->cmd_reply_message}</a>
<a cond="$message->message_type == 'R'" href="#" onclick="doStoreMessage('{$message->message_srl}');">{$lang->cmd_store}</a>
<a href="#" onclick="doDeleteMessage('{$message->message_srl}');">{$lang->cmd_delete}</a>
</div>
</section>
<section class="prn-body">
<h1 loop="$lang->message_box => $key,$val" cond="$message_type == $key">{$val}</h1>
<div class="prn-footer prn-anchor-buttons prn-headers" cond="$message_type == 'R'">
<form action="./" method="POST" class="pos-left">
<input type="hidden" name="module" value="communication" />
<input type="hidden" name="act" value="procCommunicationUpdateAllowMessage" />
<input type="hidden" name="message_type" value="{$message_type}" />
<div class="control-group">
<select name="allow_message">
<option loop="$lang->allow_message_type => $key,$val" value="{$key}" selected="selected"|cond="$logged_info->allow_message==$key">{$val}</option>
</select>
<input type="submit" value="{$lang->cmd_save}">
</div>
</form>
<div style="clear:both"></div>
</div>
<form action="./" method="post" id="fo_message_list">
<input type="hidden" name="module" value="communication" />
<input type="hidden" name="act" value="procCommunicationDeleteMessages" />
<input type="hidden" name="message_type" value="{$message_type}" />
<ul class="rx_sw_list">
<li loop="$message_list => $key, $val">
<a href="{getUrl('message_srl',$val->message_srl)}" class="cont_a">
<span class="content_basic">
<span class="content_title">
{escape($val->title)}
</span>
<span class="content_subinfo">
{escape($val->nick_name)} / {zdate($val->regdate,"Y-m-d H:i")}<block cond="$val->readed=='Y'"> / {zdate($val->readed_date,"Y-m-d H:i")}</block>
</span>
</span>
</a>
<span class="content_delete">
<input name="message_srl_list[]" type="checkbox" value="{$val->message_srl}" />
</span>
</li>
</ul>
<div class="prn-anchor-buttons">
<label for="check_all">
{$lang->cmd_select_all}
<input name="check_all" id="check_all" type="checkbox" onclick="XE.checkboxToggleAll('message_srl_list[]', {wrap:'fo_message_list'})"/>
</label>
<input type="submit" value="{$lang->cmd_delete}" />
</div>
</form>
<div class="prn-anchor-buttons">
<a loop="$lang->message_box => $key,$val" href="{getUrl('message_type', $key, 'message_srl', '')}" class="active"|cond="$message_type == $key">{$val}</a>
</div>
</section>
</div>
<div class="pagination pagination-centered">
<ul>
{@$rx_prn = FALSE}
<!--@while($page_no = $page_navigation->getNextPage())-->
<li cond="$rx_prn === FALSE && ($page_no - 1) > 0"><a href="{getUrl('page', ($page_no - 1),'module_srl','')}" class="direction">&lsaquo;</a></li>
{@$rx_prn = $page_no}
<li class="active"|cond="$page == $page_no"><a href="{getUrl('page',$page_no,'module_srl','')}">{$page_no}</a></li>
<!--@end-->
<li cond="$page_navigation->last_page > $rx_prn && $rx_prn > 0"><a href="{getUrl('page', ($rx_prn + 1),'module_srl','')}" class="direction">&rsaquo;</a></li>
</ul>
</div>
<include target="./common_footer.html" />

View file

@ -0,0 +1,19 @@
{@ $communication_popup = TRUE}
<include target="./common_header.html" />
<div class="prn-narrow">
<section class="prn-body" cond="$message">
<h1>{escape($message->title)}</h1>
<div>
<a href="popup_menu_area" class="member_{$message->member_srl}">{$message->nick_name}</a> / {zdate($message->regdate, "Y-m-d H:i")}
</div>
<div class="xe_content">
{$message->content}
</div>
<div class="prn-anchor-buttons">
<a cond="$message->message_type != 'S' && $message->member_srl != $logged_info->member_srl" href="#" onclick="doSendMessage('{$message->sender_srl}','{$message->message_srl}');">{$lang->cmd_reply_message}</a>
<a cond="$message->message_type == 'R'" href="#" onclick="doStoreMessage('{$message->message_srl}');">{$lang->cmd_store}</a>
<a href="#" onclick="doDeleteMessage('{$message->message_srl}');">{$lang->cmd_delete}</a>
</div>
</section>
</div>
<include target="./common_footer.html" />

View file

@ -0,0 +1,30 @@
{@ $communication_popup = TRUE}
<include target="./common_header.html" />
<div class="prn-narrow">
<section class="prn-body">
<h1>{$lang->cmd_send_message}</h1>
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/communication/skins/rx_prn/send_message/1'" class="rx_prn-notice {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="sendMessage" action="./" method="post">
<input type="hidden" name="module" value="communication" />
<input type="hidden" name="act" value="procCommunicationSendMessage" />
<input type="hidden" name="content" value="{htmlspecialchars($source_message->content)}" />
<input type="hidden" name="receiver_srl" value="{$receiver_info->member_srl}" />
<input type="hidden" name="xe_validator_id" value="modules/communication/skins/rx_prn/send_message/1" />
<div class="control-group">
<label for="message_receiver">{$lang->receiver}</label>
<a id="message_receiver" href="#popup_menu_area" class="member_{$receiver_info->member_srl}">{$receiver_info->nick_name}</a>
<label for="message_title">{$lang->title}</label>
<input type="text" name="title" id="message_title" value="{$source_message->title}" />
<label for="message_send_mail"><input type="checkbox" value="Y" name="send_mail" id="message_send_mail" /> {$lang->cmd_send_mail}</label>
<div class="rx_prn-notice info">{$lang->msg_send_mail_privacy}</div>
</div>
{$editor}
<div class="control-group">
<input type="submit" value="{$lang->cmd_send_message}" />
</div>
</form>
</section>
</div>
<include target="./common_footer.html" />

View file

@ -0,0 +1,108 @@
<?xml version="1.0" encoding="UTF-8"?>
<skin version="0.2">
<title xml:lang="ko">필요할 때 라이믹스</title>
<title xml:lang="en">Rhymix PRN</title>
<description xml:lang="ko">필요할 때 꺼내보는 라이믹스. 캡슐 모양의 둥근 라이믹스 커뮤니케이션 모듈 스킨입니다.</description>
<description xml:lang="en">You need Rhymix. A skin of the communication module of Rhymix with round, capsule-like shapes.</description>
<version>0.1</version>
<date>2017-08-09</date>
<author email_address="misol.kr@gmail.com" link="https://github.com/misol">
<name xml:lang="ko">misol</name>
<name xml:lang="en">misol</name>
</author>
<author email_address="mely4506@naver.com" link="https://github.com/mothercat">
<name xml:lang="ko">마더캣</name>
<name xml:lang="en">Mothercat</name>
</author>
<colorset>
<color name="theme">
<title xml:lang="ko">사이트 테마 색</title>
<title xml:lang="en">The site theme color</title>
</color>
<color name="red">
<title xml:lang="ko">붉은 색</title>
<title xml:lang="en">Red</title>
</color>
<color name="crimson">
<title xml:lang="ko">크림슨</title>
<title xml:lang="en">Crimson</title>
</color>
<color name="pink">
<title xml:lang="ko">분홍</title>
<title xml:lang="en">Pink</title>
</color>
<color name="purple">
<title xml:lang="ko">보라</title>
<title xml:lang="en">Purple</title>
</color>
<color name="deep-purple">
<title xml:lang="ko">진보라</title>
<title xml:lang="en">Deep Purple</title>
</color>
<color name="indigo">
<title xml:lang="ko">인디고</title>
<title xml:lang="en">Indigo</title>
</color>
<color name="deep-blue">
<title xml:lang="ko">짙은 파랑</title>
<title xml:lang="en">Deep Blue</title>
</color>
<color name="blue">
<title xml:lang="ko">파랑</title>
<title xml:lang="en">Blue</title>
</color>
<color name="light-blue">
<title xml:lang="ko">밝은 파랑</title>
<title xml:lang="en">Light Blue</title>
</color>
<color name="cyan">
<title xml:lang="ko">시안</title>
<title xml:lang="en">Cyan</title>
</color>
<color name="teal">
<title xml:lang="ko"></title>
<title xml:lang="en">Teal</title>
</color>
<color name="green">
<title xml:lang="ko">초록</title>
<title xml:lang="en">Green</title>
</color>
<color name="light-green">
<title xml:lang="ko">연한 초록</title>
<title xml:lang="en">Light Green</title>
</color>
<color name="lime">
<title xml:lang="ko">라임</title>
<title xml:lang="en">Lime</title>
</color>
<color name="yellow">
<title xml:lang="ko">노랑</title>
<title xml:lang="en">Yellow</title>
</color>
<color name="amber">
<title xml:lang="ko">앰버</title>
<title xml:lang="en">Amber</title>
</color>
<color name="orange">
<title xml:lang="ko">주황</title>
<title xml:lang="en">Orange</title>
</color>
<color name="deep-orange">
<title xml:lang="ko">진한 주황</title>
<title xml:lang="en">Deep Orange</title>
</color>
<color name="brown">
<title xml:lang="ko">갈색</title>
<title xml:lang="en">Brown</title>
</color>
<color name="grey">
<title xml:lang="ko">회색</title>
<title xml:lang="en">Grey</title>
</color>
<color name="blue-grey">
<title xml:lang="ko">푸른 회색</title>
<title xml:lang="en">Blue Grey</title>
</color>
</colorset>
</skin>