Merge branch 'master' of gitlab.tp.rulingcom.com:saurabh/orbit4-5 into nccu

This commit is contained in:
Harry Bomrah 2015-07-03 20:42:05 +08:00
commit 78399d4f91
168 changed files with 5035 additions and 2121 deletions

View File

@ -31,7 +31,8 @@ gem 'nokogiri'
gem 'httparty'
#database
gem 'mongoid', github: "mongoid/mongoid"
# gem 'mongoid', github: "mongoid/mongoid"
gem 'mongoid', '~> 4.0.2'
#file uploading and carrierwave
gem "mini_magick", "3.5.0"

Binary file not shown.

After

Width:  |  Height:  |  Size: 928 B

View File

@ -138,7 +138,7 @@ var StoreManager = function(section){
"url" : "/admin/store/check_credentials"
}).done(function(status){
if(status.success == true){
resendEmail();
authorizeAllModules();
}else if(status.success == false){
waitForStoreResponseCount++;
if(waitForStoreResponseCount > 5){
@ -152,6 +152,22 @@ var StoreManager = function(section){
}).fail(showError);
}
var authorizeAllModules = function(){
loadingAreaStatus.text("Authorizing default modules.");
$.ajax({
"type" : "post",
"dataType" : "json",
"url" : "/admin/store/authorize_default_modules"
}).done(function(status){
if(status.success == true){
resendEmail();
}else if(status.success == false){
loadingArea.find("img").hide();
loadingAreaStatus.text(data.message);
}
}).fail(showError);
}
var resendEmail = function(){
loadingArea.find("img").show();
loadingAreaStatus.text("Sending verification email.");

View File

@ -291,6 +291,7 @@ if($.support.touch) {
$el.find('a').removeAttr('href');
};
$el.on(mouseenterEvent, function(e) {
$sidebar.addClass('on')
$block.siblings().removeClass('show').end().eq($(this).index()).addClass('show');
$arrow.stop(true, false).animate({
top: ($(this).position().top+$(this).height()/2)-$arrowHeightFormat+$('.scroller').position().top,
@ -346,6 +347,7 @@ if($.support.touch) {
$el.eq($blockIndex).hasClass('active') ? '':$el.eq($blockIndex).children('span').addClass('hover');
},
mouseleave: function() {
$sidebar.removeClass('on');
$block.removeClass('show');
if(!$sidebarState || !$el.hasClass('active')) {
$blockList.css({'width': 0});

View File

@ -5,11 +5,14 @@
CKEDITOR.editorConfig = function( config ) {
config.uiColor = '#e6e6e6';
config.language = 'zh';
config.defaultLanguage = "en";
config.language = '<%= (I18n.locale.to_s == "zh_tw" || I18n.locale.to_s == "zh_cn" ? "zh" : I18n.locale.to_s) %>';
config.height = 400;
config.resize_minHeight = 400;
config.toolbarCanCollapse = true;
config.allowedContent = true;
config.pasteFromWordRemoveFontStyles=false;
config.pasteFromWordRemoveStyles=false;
config.plugins = 'dialogui,dialog,about,a11yhelp,dialogadvtab,basicstyles,blockquote,clipboard,button,panelbutton,panel,floatpanel,colorbutton,colordialog,templates,menu,contextmenu,resize,toolbar,elementspath,enterkey,entities,popup,filebrowser,find,image,fakeobjects,floatingspace,listblock,richcombo,font,format,horizontalrule,htmlwriter,iframe,wysiwygarea,indent,indentblock,indentlist,justify,menubutton,link,list,liststyle,magicline,maximize,newpage,pastetext,pastefromword,removeformat,selectall,showblocks,showborders,sourcearea,specialchar,scayt,stylescombo,tab,table,tabletools,undo,wsc,youtube,codemirror';

View File

@ -7,47 +7,133 @@
var group = {
// Detect and change the top position of the cycle navs
cycleFix: function() {
if( doc.querySelectorAll( ".group-post-banner-image").length >= 1 ) {
var imgs = doc.querySelectorAll( ".group-post-banner-image" ),
cycleNav = doc.querySelectorAll( ".cycle-nav" ),
len = cycleNav.length,
i = -1;
if (doc.querySelectorAll(".group-show-post-banner-image").length >= 1) {
var imgs = doc.querySelectorAll(".group-show-post-banner-image"),
cycleNav = doc.querySelectorAll(".cycle-nav"),
len = cycleNav.length,
i = -1;
// Hide the navs when there's noly one slide
if( imgs.length <= 1 ) {
for( i = 0; i < len; i++ ) {
cycleNav[ i ].classList.add( "hide" );
}
}
} else if ( doc.querySelectorAll( ".group-post-banner-image").length === 0 && doc.querySelector( ".group-post-image-wrap" ) ) {
doc.querySelector( ".group-post-image-wrap").classList.add( "hide" );
}
// Hide the navs when there's noly one slide
if (imgs.length <= 1) {
for (i = 0; i < len; i++) {
cycleNav[i].classList.add("hide");
}
}
} else if (doc.querySelectorAll(".group-show-post-banner-image").length === 0 && doc.querySelector(".group-show-post-image-wrap")) {
doc.querySelector(".group-show-post-image-wrap").classList.add("hide");
}
},
// Create scroll effect (with css)
scrollEffect: function() {
if( doc.querySelector( ".group-page") ) {
var page = doc.querySelector( ".group-page" ),
wrap = doc.querySelector( ".group-page-banner-image-wrap" ),
scrollClass = "scroll";
scrollEffect: function(el) {
var wrap = doc.querySelector(el),
scrollClass = "scroll";
// Use pageYOffset to get the Y positoin and add scroll on it, the animation
// is done by css transition
window.addEventListener( "scroll", function() {
if( window.pageYOffset !== 0 ) {
page.classList.add( scrollClass );
} else {
page.classList.remove( scrollClass );
// Use pageYOffset to get the Y positoin and add scroll on it, the animation
// is done by css transition
if (el) {
window.addEventListener("scroll", function() {
if (window.pageYOffset > 0) {
wrap.classList.add(scrollClass);
} else {
wrap.classList.remove(scrollClass);
}
}, false);
}
}, false);
}
},
// Equal height for card
equalHeight: function(el) {
var bigbrother = -1,
$el = $(el);
$el.each(function() {
bigbrother = bigbrother > $(this).height() ? bigbrother : $(this).height();
});
$el.each(function() {
$(this).height(bigbrother);
});
},
// We want to place a dropdown in group-post-item, but link cannot be nested, hance this fix
makePostClick: function() {
var postLink = doc.querySelectorAll('.group-post-link');
if (postLink) {
Array.prototype.forEach.call(postLink, function(item) {
item.parentNode.classList.add('clickable');
item.parentNode.addEventListener('click', function(e) {
window.location.href = item.href;
});
});
}
},
// Bootstrap dropdown is too much of a hassle, using this instead
makeDropdown: function(container, toggle, dropdown, kls) {
var $container = $(container),
$toggle = $container.find(toggle),
$dropdown = $container.find(dropdown),
klass = 'open';
$container.on('click', '.toggle', function(e) {
if ($(this).hasClass(klass)) {
$(toggle).removeClass(klass);
$(dropdown).removeClass(klass);
} else {
$(toggle).removeClass(klass);
$(dropdown).removeClass(klass);
$(this)
.addClass(klass)
.next(dropdown)
.addClass(klass)
}
return false;
});
$(document.body).on('click', function() {
$(toggle).removeClass(klass)
$(dropdown).removeClass(klass);
});
},
// Third-party plugin settings
plugins: function() {
// WOWjs
if (typeof window.WOW !== 'undefined') {
new WOW().init();
}
}
}
// When DOM is completely loaded, execute these functions
document.addEventListener( "DOMContentLoaded", function( event ) {
document.addEventListener("DOMContentLoaded", function(event) {
if (doc.querySelector('.group-post')) {
group.scrollEffect('.group-post');
group.makeDropdown('.group-post', '.group-post-dropdown-toggle', '.group-post-dropdown');
}
if (doc.querySelector('.group-card')) {
group.makeDropdown('.group-public', '.group-card-dropdown-toggle', '.group-card-dropdown');
}
if (doc.querySelector('.group-index')) {
group.makeDropdown('.group-index', '.group-card-dropdown-toggle', '.group-card-dropdown');
}
if (doc.querySelector('.group-show-post')) {
group.makeDropdown('.group-show-post', '.group-show-post-dropdown-toggle', '.group-show-post-dropdown');
}
if (doc.querySelector('.group-member')) {
group.scrollEffect('.group-member');
}
group.cycleFix();
group.scrollEffect();
group.equalHeight('.group-card-inner');
group.equalHeight('.group-admin-edit-image-item');
group.plugins();
});
})();

View File

@ -33,6 +33,9 @@ var FormValidator = function(form){
return re.test(value);
},
url : function(value){
if(value == "#"){
return true;
}
var reg = new RegExp(/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/);
return reg.test(value);
}

View File

@ -49,7 +49,7 @@ input:focus::-webkit-input-placeholder {
color: transparent;
}
body {
background-color: #F3F3F3;
background-color: #f3f3f3;
font-family: 'Chivo';
}
body.modalBlur > nav,
@ -319,6 +319,18 @@ legend {
background-color: rgba(0, 136, 204, .6);
}
/* sidebar on */
#sidebar.on ~ #main-wrap .fc-border-separate {
table-layout: fixed;
}
#sidebar.on ~ #main-wrap .fc-view-month .fc-day-header {
width: auto !important;
}
#sidebar.on ~ #main-wrap .fc-view-agendaWeek .fc-widget-header.fc-last {
width: 15px !important;
}
/* Main Wrap */
#main-wrap {
@ -779,6 +791,15 @@ legend {
display: block;
}
.simple-date-picker input:first-child {
margin-right: 3px;
}
.simple-date-picker select {
margin-right: 3px;
}
/* IE go die */
:root #sidebar .sub-nav-block:before {
display: block\9;

View File

@ -3,7 +3,7 @@
left: -10px;
right: -10px;
height: 40px;
z-index: 1041;
z-index: 1040;
position: fixed;
margin-bottom: 0;
}
@ -16,7 +16,7 @@
background-repeat: no-repeat;
background-image: url('<%= asset_path 'orbit-logo.svg' %>');
/* For Suck IE */
/* For IE */
background-image: url('<%= asset_path 'orbit-logo.png' %>');
}
#orbit-bar.navbar .nav > li > a {
@ -318,9 +318,9 @@
}
}
@media (max-width: 540px) {
@media (max-width: 640px) {
#orbit-bar .orbit-bar-search-sign-language #search input[type="search"] {
width: 130px;
width: 100px;
}
}

View File

@ -1,107 +0,0 @@
@charset "utf-8";
@import url(http://fonts.googleapis.com/css?family=Maven+Pro);
@import url(http://fonts.googleapis.com/css?family=Roboto);
// Font stacks
$main-font: "Maven Pro", "微軟正黑體" sans-serif;
$paragraph-font: "Roboto", "微軟正黑體", sans-serif;
$gray: #f3f3f3;
$dark-gray: #aaaaaa;
$light-gray: #cdcdcd;
$white: white;
$light-black: #353535;
$black: black;
$green: #4ad976;
$blue: #4171d5;
$red: #c71932;
$blue-green: #00acee;
$group-page-bar-color: #171717;
// Transition units
$fast: 0.3s;
$normal: 0.6s;
$slow: 1s;
// Border radius units
$general: 0.25rem;
// General style
body {
background: $gray;
font-family: $main-font;
}
// Override and resolve the conflict with main-form.css for that I need RWD support for this page
.main-forms fieldset .input-area .controls textarea {
max-width: none;
}
// Override select2 styles, I need this evil power
#main-wrap {
.select2-container-multi {
margin-right: 0.9375rem;
min-width: 200px;
.select2-choices {
padding: 8px 0.5rem 6px;
border-radius: $general;
}
.select2-search-choice {
padding: 10px 1.75rem 10px 0.7rem;
border-color: lighten($light-gray, 5%);
background: $white;
> div {
&:before {
content: "\F007";
font-family: FontAwesome;
display: inline-block;
font-size: 0.9375rem;
color: $blue;
margin: 0 0.5rem 0 0;
}
}
}
.select2-search-choice-close {
right: 15px;
left: auto;
&:before {
content: "\f057";
font-family: FontAwesome;
position: absolute;
cursor: pointer;
left: 6px;
top: 6px;
font-size: 0.9375rem;
color: $dark-gray;
}
&:hover {
&:before {
color: $red;
}
}
}
}
}
.wrap-inner {
.upload-status-notice {
position: fixed;
right: 1rem;
top: 4rem;
color: $white;
padding: 16px 1.375rem;
background-color: $blue;
border-radius: $general;
font-size: 0.8125rem;
box-shadow: 0px 0px 16px 3px rgba(0, 0, 0, 0.2);
-webkit-animation-duration: .3s;
animation-duration: .3s;
z-index: 3000;
}
}
.img-avatar {
width: 50px;
height: 50px;
}

View File

@ -1,765 +0,0 @@
@charset "utf-8";
@import url(http://fonts.googleapis.com/css?family=Maven+Pro);
@import url(http://fonts.googleapis.com/css?family=Roboto);
// Font stacks
$main-font: "Maven Pro", "微軟正黑體" sans-serif;
$paragraph-font: "Roboto", "微軟正黑體", sans-serif;
$gray: #f3f3f3;
$dark-gray: #aaaaaa;
$light-gray: #cdcdcd;
$white: white;
$light-black: #353535;
$black: black;
$green: #4ad976;
$blue: #4171d5;
$red: #c71932;
$blue-green: #00acee;
$group-page-bar-color: #171717;
// Transition units
$fast: 0.3s;
$normal: 0.6s;
$slow: 1s;
// Border radius units
$general: 0.25rem;
// General style
body {
background: $gray;
font-family: $main-font;
}
*,
*:before,
*:after {
box-sizing: border-box;
}
h1, h2, h3, h4, h5, h6, label, legend {
font-family: $main-font;
}
img {
width: 100%;
max-width: 100%;
height: auto;
}
a {
text-decoration: none;
}
a:hover, a:visited {
text-decoration: none;
}
// General classes
.screen-reader {
position: absolute;
top: -9999px;
left: -9999px;
}
// Buttons
.button {
padding: 8px .75rem;
color: $black;
border: none;
border-radius: 15rem;
background: $gray;
}
.button-default {
color: $blue;
background-color: transparent;
border: 2px solid $blue;
transition: $fast all;
&:hover {
color: $white;
background-color: $blue;
}
}
.button-activated {
color: #fff;
background-color: $green;
}
.button-primary {
color: $white;
background-color: $blue;
transition: $fast all;
&:hover {
color: $white;
background-color: darken($blue, 15%);
}
}
// Button group
.button-group {
display: inline-block;
list-style: none;
> .button-group-common {
display: inline-block;
}
> .button:first-child {
border-radius: 15rem 0 0 15rem;
margin-right: -4px;
}
> .button:last-child {
border-radius: 0 15rem 15rem 0;
}
li {
color: $blue;
background-color: rgba($white, 0.2);
&:hover {
a {
color: $white;
}
}
}
> .active {
color: $white;
background-color: $blue;
a {
color: $white;
}
}
}
// Tool Tip
.tool-tip-parent {
position: relative;
&:hover {
.tool-tip {
display: block;
}
}
}
.tool-tip {
padding: 10px 0.75rem;
border-radius: .2rem;
color: $white;
background: rgba($black, 0.85);
position: absolute;
left: 0;
bottom: 100%;
z-index: 150;
display: none;
&:after {
border: 5px solid transparent;
border-top-color: rgba($black, 0.85);
content: "";
position: absolute;
left: 10px;
bottom: -10px;
}
&.right {
left: auto;
right: 0;
&:after {
left: auto;
right: 10px;
}
}
}
.topnav {
display: none;
}
// breadcrumb
.breadcrumb {
padding-left: 0;
margin: 0;
background: none;
> li {
text-shadow: none;
font-size: 13px;
}
}
// dropzone
.dropzone-pool {
border: 2px dashed $blue;
margin-bottom: 16px;
font-family: $paragraph-font;
font-size: 0.9375rem;
color: $dark-gray;
margin-right: 1rem;
border-radius: $general;
}
// overriding member css
#main-wrap {}
// Group page
#main-wrap {
padding-top: 0;
}
.group-page-banner-wrap {
height: 280px;
overflow: hidden;
position: fixed;
top: 0;
left: 0;
width: 100%;
transition: $fast all;
z-index: 500;
background: $black;
}
.group-page-banner-image-wrap {
background-color: $black;
text-align: center;
}
.group-page-view-switch {
position: absolute;
top: 4rem;
right: 2rem;
}
.group-page-banner-image {
width: auto;
max-width: 100%;
height: auto;
}
.group-page-bar {
padding: 0 2rem 20px 6rem;
text-align: center;
background: rgba($group-page-bar-color, 0.95);
width: 100%;
position: absolute;
left: 0;
bottom: 0;
}
.group-page-view-switch-in-bar {
display: none;
.button {
padding: 3px .75rem;
}
}
.group-page-title {
margin-bottom: 12px;
padding: 6px 0;
color: $white;
font-family: $main-font;
font-weight: normal;
}
.group-page-section {
overflow: hidden;
max-width: 1150px;
margin: auto;
padding: 300px 2rem 30px;
}
.gorup-page-info-wrap {
font-size: .9rem;
padding: 6px 1rem;
display: block;
float: right;
cursor: pointer;
}
.group-page-description-wrap {
clear: both;
}
.gorup-page-info-wrap {
margin-bottom: 10px;
text-align: right;
}
.group-page-status-wrap {
font-size: .75rem;
float: right;
padding: 2px 0.5rem;
margin-bottom: 10px;
}
.group-page-status-wrap.close-eye {
margin-left: 5px;
background: $red;
}
.group-page-description-wrap {
margin-bottom: 15px;
padding: 16px 1.2rem 16px;
border-radius: .2rem;
box-shadow: inset 0 0 8px $dark-gray;
}
.group-page-description {
clear: both;
text-align: justify;
}
.group-page-post {
clear: both;
margin-bottom: 40px;
padding: 28px 1.5rem;
text-align: center;
border-radius: $general;
background: $white;
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2);
transition: $normal box-shadow;
}
.group-page-post-link {
text-decoration: none;
color: $black;
}
.group-page-post:hover {
box-shadow: 0 1px 25px 0 rgba(0, 0, 0, 0.2);
}
.group-page-post-link:hover {
text-decoration: none;
color: $black;
}
.group-page-post-image-wrap {
display: inline-block;
margin-bottom: 12px;
}
.group-page-post-image {
width: 100%;
max-width: 100%;
height: auto;
margin-top: 12px;
border: 2px solid $gray;
border-radius: $general;
}
.group-page-post-content {
margin-bottom: .5rem;
color: $dark-gray;
overflow: hidden;
}
.group-page-post-title {
font-size: 1.5rem;
font-weight: normal;
line-height: 1;
margin-bottom: 12px;
color: $light-black;
font-family: $paragraph-font;
}
.group-page-post-sub-wrap {
display: inline-block;
}
.group-page-post-meta-wrap {
color: $dark-gray;
}
.group-page-post-author,
.group-page-post-sub-wrap {
margin-right: .5rem;
}
.group-page-seen-by {
display: inline-block;
}
.group-page-seen-by-lead {
font-style: normal;
}
// scroll view
.group-page.scroll {
padding-top: 7rem;
.group-page-banner-wrap {
height: 120px;
}
.group-page-title {
margin-bottom: 0;
font-size: 1.625rem;
line-height: 50px;
}
.group-page-new-post {
margin-top: 18px;
padding: 6px 10px;
}
.group-page-new-post {
display: inline-block;
vertical-align: top;
}
.group-page-view-switch {
position: static;
display: inline-block;
margin: 6px .5rem 0 0;
display: none;
}
.group-page-view-switch-in-bar {
display: inline-block;
margin-top: 18px;
.button {
padding: 4px .75rem;
}
}
.group-page-section {
padding-top: 60px;
}
.btn {
padding: 2px 5px;
}
}
.group-page li a {
text-decoration: none;
}
.group-page-switch-btn {
color: $blue;
&:hover {
color: $white;
}
}
// 400px
@media screen and (min-width: 25rem) {
.group-page-new-post {
margin: 0 0.625rem 16px;
float: none;
display: inline-block;
}
.group-page-view-switch-in-bar {
float: none;
margin: 0;
.button {
padding: 6px .75rem;
}
}
}
// 600px
@media screen and (min-width: 37.5rem) {
.group-page-post {
margin-bottom: 35px;
text-align: left;
}
.group-page-post-image-wrap {
float: left;
width: 12%;
min-width: 100px;
margin-right: 4%;
max-height: 140px;
overflow: hidden;
}
.group-page-post-content-wrap {
float: left;
width: 70%;
font-family: $paragraph-font;
}
}
/* 760px */
@media screen and (min-width: 47.5rem) {
.group-page-post-content-wrap {
width: 70%;
}
.group-page-bar {
text-align: left;
}
.group-page-title {
display: inline-block;
margin: 0;
padding: 0;
line-height: 70px;
transition: .6s all;
}
.group-page-new-post {
float: right;
margin: 18px 0 0 0;
}
.group-page-view-switch-in-bar {
margin: 18px 8px 0 0;
float: right;
li {
padding: 8px .75rem;
}
}
.group-page-view-switch {
float: right;
}
}
// 900px
@media screen and (min-width: 56.25rem) {
.group-page-post-content-wrap {
width: 80%;
}
}
// Group post
.group-post {
padding: 50px 2rem 30px;
max-width: 1150px;
margin: auto;
}
.group-post-meta {
margin-bottom: 15px;
}
.group-post-title {
font-family: $main-font;
float: left;
width: 90%;
font-weight: normal;
line-height: 1;
}
.group-post-avatar-wrap {
float: right;
padding: 0 0.375rem 0 0;
}
.group-post-avatar-username-toggle {
display: block;
}
.group-post-avatar {
width: 60px;
height: 60px;
border-radius: 50%;
}
.group-post-username {
display: none;
top: 100%;
padding-bottom: 30px;
right: 0;
left: auto;
white-space: nowrap;
font-size: 0.75rem;
&:after {
border-top-color: transparent;
border-bottom-color: rgba(0, 0, 0, 0.85);
top: -10px;
left: auto;
right: 20px;
bottom: auto;
}
}
.group-post-postdate {
display: inline-block;
clear: both;
}
.group-post-image-wrap {
position: relative;
background: $black;
&:hover {
.cycle-nav {
opacity: 1;
}
.group-post-cycle-prev {
left: 2rem;
}
.group-post-cycle-next {
right: 2rem;
}
}
}
.group-post-image-list {
margin: 0;
padding: 0;
list-style: none;
}
.cycle-nav {
font-size: 1.2rem;
position: absolute;
top: 50%;
margin-top: -1.25rem;
line-height: 1.5rem;
color: $white;
z-index: 500;
width: 2.5rem;
height: 2.5rem;
cursor: pointer;
-webkit-transition: $normal all;
transition: $normal all;
text-align: center;
background-color: rgba($black, 0.8);
border-radius: 50%;
opacity: 0;
&:hover {
background-color: $blue;
}
.group-post-cycle-nav-icon {
line-height: 2.6rem;
}
}
.group-post-cycle-prev {
left: 0;
}
.group-post-cycle-next {
right: 0;
}
.group-post-content {
font-family: $main-font;
font-size: .8125rem;
margin: 15px 0;
}
.group-post-attachment-wrap {
float: left;
width: 80%;
margin: 10px 0 25px;
}
.group-post-attachments {
a {
margin-bottom: 10px;
}
}
.group-post-attachment-file-format {
margin-right: 8px;
}
.group-post-seen-by {
float: right;
cursor: pointer;
&:hover {
.group-post-seen-by-names {
display: block;
white-space: nowrap;
}
}
.group-post-seen-by-name {
display: block;
color: #fff;
white-space: nowrap;
}
}
.group-post-seen-by-lead {
margin-right: 4px;
font-style: normal;
}
.group-post-seen-by-names {
display: none;
}
.group-post-seen-by-count {
border-radius: 50%;
background: $gray;
display: inline-block;
}
// Comment section
.comments {
clear: both;
}
.comments .group-post-respond-comment {
width: 100%;
height: 60px;
padding: 0 1rem;
box-shadow: none;
}
.group-post-respond-submit {
font-size: 0.75rem;
}
.group-post-comment-list {
margin: 0;
padding: 0;
list-style: none;
}
.group-post-comment-wrap {
overflow: hidden;
margin-bottom: 25px;
padding-bottom: 8px;
border-bottom: 1px solid lighten($light-gray, 12%);
}
.group-post-no-comment {
font-size: 0.8125rem;
}
.group-post-comment-avatar {
float: left;
width: 60px;
margin-right: 1rem;
img {
width: 60px;
height: 60px;
border-radius: 50%;
}
}
.group-post-comment-author {
font-size: .9375rem;
float: left;
}
.group-post-comment-time {
float: right;
}
.group-post-comment-content {
clear: both;
}
.group-post-comment-body {
float: left;
width: 80%;
}
// 260px
@media screen and (min-width: 16.25rem) {
.group-post-attachments {
a {
display: inline-block;
text-overflow: ellipsis;
}
}
.group-post-attachments-file-name {
display: inline-block;
text-overflow: ellipsis;
overflow: hidden;
vertical-align: middle;
}
}
@media screen and (min-width: 370px) {
.group-post-comment-body {
width: 60%;
}
}
// group new

View File

@ -0,0 +1,110 @@
@charset "utf-8";
@import "group-variables";
// Group category page
.group-category {
margin-bottom: 16px;
}
.group-category-tab {
.group-category-tab-nav {
font-size: 0.8125rem;
padding: 10px 12px;
}
.active {
.group-category-tab-nav {
background-color: $blue;
&:hover {
background-color: lighten($blue, 5%);
}
}
}
}
.group-category-item {
float: left;
margin: 0 0.625rem 1rem 0;
background-color: $green;
&:hover {
background-color: lighten($green, 5%);
}
.group-category-tag-icon {
font-size: 1rem;
vertical-align: middle;
}
a {
font-size: 0.8125rem;
font-family: $sub-font;
color: $white;
}
}
.group-category-request {
.group-category-item {
background-color: darken($dark-gray, 25%);
}
}
.group-category-tab-content {
border-top: 1px solid #ddd;
padding: 16px 0;
overflow: visible;
}
.group-category-controls {
margin-left: 8px;
a {
padding: 2px 0.4rem;
color: $white;
display: inline-block;
border-radius: 50%;
}
.group-category-approve {
background-color: $green;
}
.group-category-reject {
background-color: $red;
}
}
.group-category-approve-tootip {
white-space: nowrap;
}
.card-ownership {
border-top: 6px solid darken($gray, 7%);
&:before {
border-top-left-radius: $general;
content: "";
height: 6px;
width: 80%;
position: absolute;
left: 0;
top: -6px;
}
}
.card-owner {
&:before {
background-color: lighten($blue, 10%);
}
}
.card-public {
&:before {
background-color: lighten($green, 10%);
}
}
.card-member {
&:before {
background-color: lighten($red, 20%);
}
}

View File

@ -0,0 +1,306 @@
@charset "utf-8";
@import "group-variables";
// Genernal classes and modules
.screen-reader {
position: absolute;
top: -9999px;
left: -9999px;
}
.img-reponsive {
max-width: 100%;
width: 100%;
height: auto;
}
.wrapper {
margin: auto;
max-width: $boundary;
}
.radius {
border-radius: $general;
}
// Buttons
.button {
padding: 8px .75rem;
color: $black;
border: none;
border-radius: 15rem;
background: $gray;
}
.button-default {
color: $blue;
background-color: transparent;
border: 2px solid $blue;
transition: $fast all;
&:hover {
color: $white;
background-color: $blue;
}
&.gray {
color: $dark-gray;
border: 2px solid $dark-gray;
&:hover {
color: $white;
background-color: $dark-gray;
}
}
}
.button-activated {
color: #fff;
background-color: $green;
}
.button-primary {
color: $white;
background-color: $blue;
transition: $fast all;
&:hover {
color: $white;
background-color: darken($blue, 15%);
}
}
.button-small {
padding: 4px 0.625rem;
font-size: 0.75rem;
}
.button-large {
padding: 14px 1.3rem;
}
// Button group
.button-group {
display: inline-block;
list-style: none;
> .button-group-common {
display: inline-block;
}
> .button:first-child {
border-radius: 15rem 0 0 15rem;
margin-right: -4px;
}
> .button:last-child {
border-radius: 0 15rem 15rem 0;
}
li {
color: $blue;
background-color: rgba($white, 0.2);
&:hover {
a {
color: $white;
}
}
}
> .active {
color: $white;
background-color: $blue;
a {
color: $white;
}
}
}
// Tool Tip
.tool-tip-parent {
position: relative;
&:hover {
.tool-tip {
display: block;
}
}
}
.tool-tip {
padding: 10px 0.75rem;
border-radius: .2rem;
color: $white;
background: rgba($black, 0.85);
position: absolute;
left: 0;
bottom: 100%;
z-index: 150;
display: none;
&:after {
border: 5px solid transparent;
border-top-color: rgba($black, 0.85);
content: "";
position: absolute;
left: 10px;
bottom: -10px;
}
&.right {
left: auto;
right: 0;
&:after {
left: auto;
right: 10px;
}
}
&.bottom {
top: 100%;
bottom: auto;
&:after {
top: -10px;
bottom: auto;
border-top-color: transparent;
border-bottom-color: rgba(0, 0, 0, 0.85);
}
}
&.nowrap {
white-space: nowrap;
}
}
.action {
position: relative;
.toggle {
border: none;
border-left: 1px solid darken($gray, 6%);
border-bottom: 1px solid darken($gray, 6%);
background: none;
padding: 2px 8px;
transition: $fast all;
&:hover, &.open {
border-color: $blue;
background: $blue;
.caret {
border-top-color: $white;
}
}
}
&:hover, &.open {
border-radius: $general;
background: $blue;
.caret {
border-top-color: $white;
}
}
.caret {
border-top-color: darken($gray, 30%);
vertical-align: middle;
}
.action-dropdown {
display: none;
position: absolute;
right: 0;
top: 102%;
list-style: none;
margin: 0;
padding: 0;
background: $white;
border: 1px solid darken($gray, 6%);
border-radius: $general;
box-shadow: 0 1px 3px 0 rgba($black, 0.2);
a {
display: block;
padding: 3px 12px;
white-space: nowrap;
&:hover {
color: $white;
background-color: $blue;
}
}
&.open {
display: block;
}
}
}
.card {
border-radius: $general;
background: $white;
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2);
transition: $normal box-shadow;
&:hover {
box-shadow: 0 1px 25px 0 rgba(0, 0, 0, 0.2);
}
}
// responsive grid
.square {
float: left;
position: relative;
width: 20%;
padding-bottom: 20%;
margin: 1%;
background-color: $white;
overflow: hidden;
.content {
position: absolute;
height: 90%;
width: 90%;
padding: 5%;
.rs {
width: auto;
height: auto;
max-height: 90%;
max-width: 100%;
}
}
.table {
display: table;
width: 100%;
height: 100%;
}
.table-cell {
display: table-cell;
vertical-align: middle;
}
}
// avatar
.admin-avatar {
width: 60px;
height: 60px;
max-width: none;
border-radius: $round;
}
// breadcrumb
.breadcrumb {
padding-left: 0;
margin: 0;
background: none;
> li {
text-shadow: none;
font-size: 13px;
}
}

View File

@ -0,0 +1,227 @@
@charset "utf-8";
@import "group-variables";
// Group index and public
#main-wrap .wrap-inner {
padding: 80px 20px 20px;
}
.group-public,
.group-index {
margin: auto;
max-width: 1500px;
}
.group-card {
list-style: none;
margin-bottom: 20px;
}
.group-card-action {
position: absolute;
right: 12px;
top: 6px;
z-index: 200;
.group-card-dropdown-toggle {
border: 1px solid darken($gray, 6%);
border-radius: $general;
&:hover {
border-radius: $general;
}
}
.group-card-dropdown {}
}
.group-card-inner {
padding: 2.6rem 0.8rem;
position: relative;
min-height: 280px;
hr {
margin: 8px 0 10px 0;
}
}
.group-avatar {
position: relative;
width: 100%;
height: 200px;
overflow: hidden;
background: $dark-gray;
z-index: 100;
&:hover .action {
z-index: 600;
opacity: 1;
}
img {
width: 100%;
height: auto;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 500;
margin: auto;
}
.action {
opacity: 0;
background: rgba($blue, 0.9);
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
}
.edit {
color: $white;
font-size: 25px;
position: absolute;
top: 50%;
left: 45%;
transform: translate(-50%, -50%);
margin: auto;
}
.trash {
color: $red;
font-size: 25px;
position: absolute;
top: 49%;
left: 60%;
transform: translate(-50%, -50%);
margin: auto;
}
}
.group-info {
overflow: hidden;
}
.group-mail {
color: $dark-gray;
font-family: $sub-font;
}
.group-roles {
list-style: none;
margin: 0;
padding: 0;
font-family: $sub-font;
.label {
font-family: $main-font;
text-transform: capitalize;
text-shadow: none;
}
.label.private {
background-color: $red;
}
.label.public {
background-color: #74c25d;
}
}
.group-privacy {
color: $dark-gray;
margin-bottom: 8px;
}
.group-description {
overflow: hidden;
max-height: 150px;
}
.group-name {
margin-bottom: 4px;
}
// 370px
@media screen and (min-width: 23.125rem) {
.group-index {
width: 90%;
}
.group-card {
width: 100%;
}
}
// 600px
@media screen and (min-width: 37.5rem) {
.group-index {
margin-top: 0;
width: 100%;
}
.group-card {
float: left;
padding: 0 0.5rem;
width: 50%;
&:nth-child(2n+1) {
clear: both;
padding-left: 0;
}
}
}
// 900px
@media screen and (min-width: 56.25rem) {
.group-card {
width: 33.3%;
&:nth-child(2n+1) {
clear: none;
padding-left: 0.5rem;
}
&:nth-child(3n+1) {
clear: both;
padding-left: 0;
}
}
}
// 1080px
@media screen and (min-width: 67.5rem) {
.group-card {
width: 25%;
&:nth-child(3n+1) {
clear: none;
padding-left: 0.5rem;
}
&:nth-child(4n+1) {
clear: both;
padding-left: 0;
}
}
}
// 1400px
@media screen and (min-width: 87.5rem) {
.group-card {
width: 20%;
&:nth-child(4n+1) {
clear: none;
padding-left: 0.5rem;
}
&:nth-child(5n+1) {
clear: both;
padding-left: 0;
}
}
}

View File

@ -0,0 +1,154 @@
@import "group-variables";
// Group page
#main-wrap {
padding-top: 0;
.wrap-inner {
// padding: 0;
}
}
.group-member-banner-wrap {
height: 280px;
overflow: hidden;
position: fixed;
top: 0;
left: 0;
width: 100%;
transition: $fast all;
z-index: 500;
background: lighten($black, 25%);
}
.group-member-bar {
padding: 0 2rem 0 6rem;
background: rgba(25, 27, 29, 0.95);
width: 100%;
position: absolute;
left: 0;
bottom: 0;
}
.group-member-page-title {
margin-bottom: 12px;
padding: 6px 0;
color: $white;
font-family: $main-font;
font-weight: normal;
max-width: 100%;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.group-member-dropdown {
margin: 12px 0;
> button {
padding: 8px 0.75rem;
}
.badge {
margin-left: 4px;
}
}
.group-member-section {
overflow: hidden;
padding: 220px 2rem 30px;
}
.group-member-list {
padding: 0;
margin: 0;
}
.group-member-item {
list-style: none;
padding: 16px 1rem;
margin: 8px 0 12px 0;
}
.group-member-photo-wrap {
display: inline-block;
vertical-align: top;
margin-right: 0.5rem;
}
.group-member-meta-wrap {
display: inline-block;
vertical-align: top;
width: 50%;
}
.group-member-name {
font-size: 0.8125rem;
}
.group-member-photo {
width: 60px;
height: 60px;
border-radius: $round;
}
// scroll view
.group-member.scroll {
padding-top: 2rem;
padding-bottom: 9rem;
.group-member-page-title {
margin-top: 0;
margin-bottom: 0;
font-size: 1.625rem;
line-height: 50px;
}
.group-member-banner-wrap {
height: 120px;
}
.group-member-page-title {
margin-bottom: 0;
font-size: 1.625rem;
line-height: 50px;
}
.group-member-section {
padding-top: 60px;
}
}
// 620
@media screen and (min-width: 38.75rem) {
.group-member-item {
float: left;
margin-right: 1rem;
width: 45%;
}
}
// 980px
@media screen and (min-width: 61.25rem) {
.group-member-content-wrap {
width: 70%;
}
.group-member-item {
width: 30%;
}
.group-member-page-title {
display: inline-block;
margin: 0;
padding: 0;
line-height: 70px;
transition: .6s all;
}
}
// 1400px
@media screen and (min-width: 87.5rem) {
.group-member-item {
width: 20%;
}
}

View File

@ -0,0 +1,394 @@
@charset "utf-8";
@import "group-variables";
// Group page
#main-wrap {
padding-top: 0;
}
.group-post-banner-wrap {
height: 280px;
overflow: hidden;
position: fixed;
top: 0;
left: 0;
width: 100%;
transition: $fast all;
z-index: 500;
background: lighten($black, 25%);
}
.group-post-banner-image-wrap {
background-color: $black;
text-align: center;
}
.group-post-view-switch {
position: absolute;
top: 4rem;
right: 2rem;
}
.group-post-banner-image {
width: auto;
max-width: 100%;
height: auto;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
}
.group-post-bar {
padding: 0 2rem 0 6rem;
text-align: center;
background: rgba(25, 27, 29, 0.95);
width: 100%;
position: absolute;
left: 0;
bottom: 0;
}
.group-post-view-switch-in-bar {
display: none;
.button {
padding: 3px .75rem;
}
}
.group-post-page-title {
margin-bottom: 12px;
padding: 6px 0;
color: $white;
font-family: $main-font;
font-weight: normal;
max-width: 100%;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.group-post-section {
overflow: hidden;
padding: 300px 2rem 30px;
}
.breadcrumb {
li {
overflow: hidden;
max-width: 150px;
display: inline-block;
vertical-align: middle;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.gorup-page-info-wrap {
font-size: .9rem;
padding: 6px 1rem;
display: block;
float: right;
cursor: pointer;
}
.group-post-description-wrap {
clear: both;
}
.gorup-page-info-wrap {
margin-bottom: 10px;
text-align: right;
}
.group-post-status-wrap {
font-size: .75rem;
float: right;
padding: 2px 0.5rem;
margin-bottom: 10px;
}
.group-post-status-wrap.close-eye {
margin-left: 5px;
background: $red;
}
.group-post-description-wrap {
margin-bottom: 15px;
padding: 16px 1.2rem 16px;
border-radius: .2rem;
box-shadow: inset 0 0 8px $dark-gray;
}
.group-post-description {
clear: both;
text-align: justify;
}
.group-post-member-count,
.group-post-no-member {
background: $blue;
color: $white;
padding: 6px 0.625rem;
border-radius: $general;
&:hover {
background: darken($blue, 10%);
color: $white;
}
}
.group-post-item {
position: relative;
clear: both;
margin-bottom: 40px;
padding: 28px 1.5rem;
text-align: center;
&.clickable {
cursor: pointer;
}
&:hover {
.group-post-title {
color: $blue;
}
}
}
.group-post-actions {
position: absolute;
right: 0;
top: 0;
}
.group-post-dropdown-toggle {
&:hover, &.open {
.caret {
}
}
.caret {
}
}
.group-post-dropdown {
a {
&:hover {
}
}
&.open {
}
}
.group-post-action-hint {
white-space: nowrap;
}
.group-post-image-wrap {
display: inline-block;
margin-bottom: 12px;
}
.group-post-image {
width: 100%;
max-width: 100%;
height: auto;
margin-top: 12px;
border: 2px solid $gray;
border-radius: $general;
}
.group-post-content {
margin-bottom: .5rem;
color: $dark-gray;
overflow: hidden;
}
.group-post-title {
font-size: 1.5rem;
font-weight: normal;
line-height: 1;
margin-bottom: 12px;
color: $light-black;
font-family: $paragraph-font;
}
.group-post-sub-wrap {
display: inline-block;
}
.group-post-meta-wrap {
color: $dark-gray;
}
.group-post-author,
.group-post-sub-wrap {
margin-right: .5rem;
}
.group-post-seen-by {
display: inline-block;
}
.group-post-seen-by-lead {
font-style: normal;
}
// scroll view
.group-post.scroll {
padding-top: 7rem;
padding-bottom: 6rem;
.group-post-banner-wrap {
height: 120px;
}
.group-post-page-title {
margin-bottom: 0;
font-size: 1.625rem;
line-height: 50px;
}
.group-post-new-post,
.group-post-join {
margin-top: 12px;
padding: 6px 10px;
}
.group-post-new-post {
display: inline-block;
vertical-align: top;
}
.group-post-view-switch {
position: static;
display: inline-block;
margin: 6px .5rem 0 0;
display: none;
}
.group-post-view-switch-in-bar {
display: inline-block;
margin-top: 12px;
.button {
padding: 4px .75rem;
}
}
.group-post-section {
padding-top: 60px;
}
.btn {
padding: 2px 5px;
}
}
.group-post li a {
text-decoration: none;
text-align: left;
}
.group-post-switch-btn {
color: $blue;
&:hover {
color: $white;
}
}
// 400px
@media screen and (min-width: 25rem) {
.group-post-new-post,
.group-post-join {
margin: 0 0.625rem 16px;
float: none;
display: inline-block;
}
.group-post-view-switch-in-bar {
float: none;
margin: 0;
.button {
padding: 6px .75rem;
}
}
}
// 600px
@media screen and (min-width: 37.5rem) {
.group-post-item {
margin-bottom: 35px;
text-align: left;
}
.group-post-image-wrap {
float: left;
width: 12%;
min-width: 100px;
margin-right: 4%;
max-height: 140px;
overflow: hidden;
}
.group-post-content-wrap {
float: left;
width: 70%;
font-family: $paragraph-font;
}
}
/* 760px */
@media screen and (min-width: 47.5rem) {
.group-post-content-wrap {
width: 70%;
}
.group-post-bar {
text-align: left;
}
.group-post-page-title {
display: inline-block;
margin: 0;
padding: 0;
line-height: 70px;
transition: .6s all;
max-width: 80%;
}
.group-post-new-post,
.group-post-join {
float: right;
margin: 18px 0 0 0;
}
.group-post-view-switch-in-bar {
margin: 18px 8px 0 0;
float: right;
li {
padding: 8px .75rem;
}
}
.group-post-view-switch {
float: right;
}
}
// 900px
@media screen and (min-width: 56.25rem) {
.group-post-content-wrap {
width: 80%;
}
}

View File

@ -0,0 +1,38 @@
@charset "utf-8";
@import "group-variables";
// General style
body {
background: $gray;
font-family: $main-font;
}
.group-show-post-respond-comment,
ul, li, div, img {
box-sizing: border-box;
}
h1, h2, h3, h4, h5, h6, label, legend {
font-family: $main-font;
}
img {
max-width: 100%;
height: auto;
}
a {
color: $blue;
text-decoration: none;
&:hover {
color: lighten($blue, 5%);
text-decoration: none;
}
}
a, button {
&:focus {
outline: none;
}
}

View File

@ -0,0 +1,308 @@
@charset "utf-8";
@import "group-variables";
// Group show post
.group-show-post {
padding: 0 2rem 30px;
}
.group-show-post-meta {
margin-bottom: 15px;
}
.group-show-post-title {
font-family: $main-font;
float: left;
width: 90%;
font-weight: normal;
line-height: 1;
}
.group-show-post-avatar-wrap {
float: right;
padding: 0 0.375rem 0 0;
}
.group-show-post-avatar-username-toggle {
display: block;
}
.group-show-post-avatar {
width: 60px;
height: 60px;
border-radius: 50%;
}
.group-show-post-username {
display: none;
top: 100%;
padding-bottom: 30px;
right: 0;
left: auto;
white-space: nowrap;
font-size: 0.75rem;
&:after {
border-top-color: transparent;
border-bottom-color: rgba(0, 0, 0, 0.85);
top: -10px;
left: auto;
right: 20px;
bottom: auto;
}
}
.group-show-post-postdate {
display: inline-block;
clear: both;
}
.group-show-post-image-wrap {
position: relative;
background: $black;
overflow: hidden;
&:hover {
.cycle-nav {
opacity: 1;
}
.group-show-post-cycle-prev {
left: 2rem;
}
.group-show-post-cycle-next {
right: 2rem;
}
}
}
.group-show-post-image-list {
margin: 0;
padding: 0;
list-style: none;
}
.cycle-nav {
font-size: 1.2rem;
position: absolute;
top: 50%;
margin-top: -1.25rem;
line-height: 1.5rem;
color: $white;
z-index: 500;
width: 2.5rem;
height: 2.5rem;
cursor: pointer;
-webkit-transition: $fast all;
transition: $fast all;
text-align: center;
background-color: rgba($black, 0.8);
border-radius: 50%;
opacity: 0;
&:hover {
background-color: $blue;
}
.group-show-post-cycle-nav-icon {
line-height: 2.6rem;
}
}
.group-show-post-cycle-prev {
left: 0;
}
.group-show-post-cycle-next {
right: 0;
}
.group-show-post-content {
font-family: $main-font;
font-size: .8125rem;
margin: 15px 0;
}
.group-show-post-attachment-wrap {
float: left;
width: 80%;
margin: 10px 0 25px;
.group-show-post-attachment-file-format {
margin-right: 8px;
vertical-align: middle;
font-size: 1rem;
}
}
.group-show-post-seen-by {
float: right;
cursor: pointer;
&:hover {
.group-show-post-seen-by-names {
display: block;
white-space: nowrap;
}
}
.group-show-post-seen-by-name {
display: block;
color: #fff;
white-space: nowrap;
}
}
.group-show-post-seen-by-lead {
margin-right: 4px;
font-style: normal;
}
.group-show-post-seen-by-names {
display: none;
}
.group-show-post-seen-by-count {
border-radius: 50%;
background: $gray;
display: inline-block;
}
// Comment section
.comments {
clear: both;
.group-show-post-respond-comment {
width: 100%;
height: 60px;
padding: 0 1rem;
box-shadow: none;
width: 100%;
}
.group-show-post-avatar {
display: none;
}
}
.group-show-post-actions {
position: absolute;
right: 0;
top: 0;
}
.group-no-permission {
padding-left: 2rem;
background: $red;
color: $white;
padding: 10px 0.75rem;
border-radius: $general;
i {
margin-right: 8px;
}
}
.group-show-post-respond-wrap {
margin-bottom: 16px;
}
.group-show-post-respond-submit {
font-size: 0.875rem;
}
.group-show-post-comment-list {
margin: 0;
padding: 0;
list-style: none;
}
.group-show-post-comment {
position: relative;
border-radius: 0;
box-shadow: none;
border-bottom: 2px solid $gray;
&:hover {
box-shadow: none;
}
}
.group-show-post-comment-wrap {
overflow: hidden;
padding: 16px 1.25rem;
}
.group-show-post-no-comment {
font-size: 0.8125rem;
}
.group-show-post-comment-avatar {
float: left;
width: 60px;
margin-right: 1rem;
img {
width: 60px;
height: 60px;
border-radius: 50%;
}
}
.group-show-post-comment-author {
font-size: .9375rem;
float: left;
margin-right: 0.5rem;
}
.group-show-post-comment-time {
float: left;
}
.group-show-post-comment-content {
clear: both;
}
.group-show-post-comment-body {
float: left;
width: 60%;
}
// 260px
@media screen and (min-width: 16.25rem) {
.group-show-post-attachments {
a {
display: inline-block;
text-overflow: ellipsis;
}
}
.group-show-post-attachments-file-name {
display: inline-block;
text-overflow: ellipsis;
overflow: hidden;
vertical-align: middle;
width: 80px;
white-space: nowrap;
}
}
// 370px
@media screen and (min-width: 23.125rem) {
.group-show-post-comment-body {
width: 70%;
}
}
// 800px
@media screen and (min-width: 50rem) {
.group-show-post-comment-body {
width: 85%;
}
.comments {
.group-show-post-avatar {
float: left;
width: 10%;
max-width: 60px;
min-width: 60px;
display: block;
}
.group-show-post-respond-comment {
float: left;
width: 89%;
margin-left: 1%;
}
}
}
// 960px
@media screen and (min-width: 60rem) {
.group-show-post-comment-body {
width: 90%;
}
}

View File

@ -0,0 +1,36 @@
@charset "utf-8";
// Google fonts
@import url(http://fonts.googleapis.com/css?family=Maven+Pro);
@import url(http://fonts.googleapis.com/css?family=Roboto);
// Font stacks
$main-font: "Maven Pro", "微軟正黑體" sans-serif;
$sub-font: "Roboto", "微軟正黑體", sans-serif;
$paragraph-font: "Roboto", "微軟正黑體", sans-serif;
// Colors
$gray: #f3f3f3;
$dark-gray: #aaaaaa;
$light-gray: #cdcdcd;
$white: white;
$light-black: #353535;
$black: black;
$green: #74c25d;
$blue: #4171d5;
$red: #dd5933;
$blue-green: #00acee;
$group-page-bar-color: #171717;
// Transition units
$fast: 0.3s;
$normal: 0.6s;
$slow: 1s;
// Border radius units
$general: 0.25rem;
$round: 50%;
// Commonly use units
$boundary: 1150px;

View File

@ -0,0 +1,270 @@
@charset "utf-8";
@import "group-variables";
@import "group-classes";
@import "group-reset";
// General style
body {
background: $gray;
font-family: $main-font;
}
// dropzone
.dropzone-pool {
border: 2px dashed $blue;
margin-bottom: 16px;
font-family: $paragraph-font;
font-size: 0.9375rem;
color: $dark-gray;
margin-right: 1rem;
border-radius: $general;
}
// Override and resolve the conflict with main-form.css for that I need RWD support for this page
.main-forms fieldset .input-area .controls textarea {
max-width: none;
}
// Override Bootstrap modal
.modal.fade {
top: -65%;
}
// Override select2 styles, I need this evil power
#main-wrap {
.select2-container-multi {
margin-right: 0.9375rem;
min-width: 200px;
.select2-choices {
padding: 0;
border-radius: $general;
.select2-search-field {
input {
padding: 10px 5px;
}
}
}
.select2-search-choice {
padding: 10px 1.75rem 10px 0.7rem;
border-color: lighten($light-gray, 5%);
background: $white;
> div {
&:before {
content: "\F007";
font-family: FontAwesome;
display: inline-block;
font-size: 0.9375rem;
color: $blue;
margin: 0 0.5rem 0 0;
}
}
}
.select2-search-choice-close {
right: 15px;
left: auto;
&:before {
content: "\f057";
font-family: FontAwesome;
position: absolute;
cursor: pointer;
left: 6px;
top: 6px;
font-size: 0.9375rem;
color: $dark-gray;
}
&:hover {
&:before {
color: $red;
}
}
}
}
}
.select2-result-label {
> span {
white-space: nowrap;
}
}
.wrap-inner {
.upload-status-notice {
position: fixed;
right: 1rem;
top: 4rem;
color: $white;
padding: 16px 1.375rem;
background-color: $blue;
border-radius: $general;
font-size: 0.8125rem;
box-shadow: 0px 0px 16px 3px rgba(0, 0, 0, 0.2);
-webkit-animation-duration: .3s;
animation-duration: .3s;
z-index: 3000;
}
}
.fileupload {
.thumbnail {
max-width: 60%;
height: auto;
}
}
.img-avatar {
width: 50px;
height: 50px;
}
// members page
.existing-phone-avatar {
vertical-align: top;
margin: 0 0.5rem 0.5rem 0;
}
.existing-member-count {
width: 60px;
height: 60px;
display: inline-block;
box-sizing: border-box;
line-height: 40px;
text-align: center;
white-space: nowrap;
padding: 8px 0.45rem;
font-size: 0.8125rem;
}
.group-edit-button {
box-sizing: border-box;
vertical-align: top;
line-height: 40px;
width: 60px;
height: 60px;
display: inline-block;
text-align: center;
font-size: 0.8125rem;
}
.group-edit-avatar {
width: 60;
}
.group-member-edit-table {
width: 100%;
tr {
border-bottom: 1px solid $gray;
}
td {
padding: 8px 0.75rem;
&:first-child {
width: 60px;
}
}
.make-admin-checkbox {
display: inline-block;
vertical-align: top;
margin-right: 0.3125rem;
}
.group-member-permission {
display: inline-block;
vertical-align: text-top;
}
}
.group-admin-edit-image-wrap {
margin: 0 24px 1rem 0;
}
.group-admin-edit-image-item {
margin: 0 10px 16px 0;
padding: 16px 0.5rem;
}
.group-admin-edit-image-container {
max-width: 100px;
margin: 0 1rem 16px 0;
}
.group-admin-edit-checkbox-wrap {
color: $white;
font-size: 0.8125rem;
background: $blue;
padding: 2px 0.625rem;
border-radius: $general;
float: left;
}
.group-admin-edit-image-checkbox {
display: inline-block;
vertical-align: top;
}
.group-admin-edit-image-label {
display: inline-block;
vertical-align: text-top;
font-size: 0.75rem;
}
.group-admin-edit-image-item-inner {
padding: 16px 0.625rem;
background: $white;
border-radius: $general;
}
.group-admin-edit-file-wrap {
margin-bottom: 10px;
}
.group-admin-edit-file-item {
padding: 10px 16px;
float: left;
margin: 0 8px 0.5rem 0;
font-size: 0.8125rem;
.group-admin-edit-file-checkbox {
margin: 0;
}
}
.group-admin-edit-filename {
margin-right: 0.3125rem;
}
.group-admin-edit-file-delete {
padding-bottom: 4px;
border-bottom: 1px dotted $red;
vertical-align: top;
}
@media screen and (min-width: 700px) {
.group-admin-edit-image-item {
float: left;
width: 45%;
}
}
@media screen and (min-width: 960px) {
.group-admin-edit-image-item {
width: 30%;
}
}
@media screen and (min-width: 1150px) {
.group-admin-edit-image-item {
width: 20%;
}
}

View File

@ -0,0 +1,15 @@
@charset "utf-8";
@import "group-variables";
@import "group-classes";
@import "group-reset";
@import "group-index";
@import "group-post";
@import "group-show-post";
@import "group-category";
@import "group-members";
.topnav {
display: none;
}

View File

@ -66,7 +66,7 @@ $orbit-bar-bgc-lighter: lighten($orbit-bar-bgc, 20%) !default;
left: 0;
font-family: 'Chivo';
font-size: 16px;
z-index: 1060;
z-index: 1040;
-webkit-box-sizing: initial;
-moz-box-sizing: initial;
box-sizing: initial;
@ -203,6 +203,7 @@ $orbit-bar-bgc-lighter: lighten($orbit-bar-bgc, 20%) !default;
border-color: #e6e6e6 #e6e6e6 #bfbfbf;
border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);
box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);
color: #fff;
&:hover {
color: #fff;
background-color: #d92b0e;
@ -310,24 +311,25 @@ $orbit-bar-bgc-lighter: lighten($orbit-bar-bgc, 20%) !default;
}
li {
min-width: 100px;
padding: 0 0.8em;
padding: 0;
&.divider {
height: 1px;
margin: 0.3em 0;
background-color: lighten($orbit-bar-bgc, 60%);
}
&:hover, &.active {
color: #fff;
background-color: #0095CF;
a {
color: #FFF;
}
}
}
a {
a, .active {
color: $orbit-bar-bgc-lighter;
font-size: 0.8em;
display: block;
padding: 0.5em 0;
padding: 0.5em 1.2em;
white-space: nowrap;
}
}
@ -345,10 +347,6 @@ $orbit-bar-bgc-lighter: lighten($orbit-bar-bgc, 20%) !default;
width: auto;
height: 85%;
}
// background-position: center;
// background-repeat: no-repeat;
// background-image: url('<%= asset_path 'orbit-logo.svg' %>');
// background-image: url('<%= asset_path 'orbit-logo.png' %>')\9;
& + ul {
left: 0;
}
@ -419,7 +417,7 @@ $orbit-bar-bgc-lighter: lighten($orbit-bar-bgc, 20%) !default;
}
}
@media (max-width: 479px) {
@media (max-width: 540px) {
#orbit-bar {
.login-window {
width: 90%;

View File

@ -9,7 +9,15 @@ class Admin::GroupsController < OrbitGroupController
end
def categories
@categories = GroupCategory.all
old_categories = GroupCategory.where(:is_accepted.ne => false)
if old_categories.count > 0
old_categories.each do |oc|
oc.is_accepted = true
oc.save
end
end
@admin_categories = GroupCategory.by_admin
@requested_categories = GroupCategory.is_requested
end
def newpost
@ -25,6 +33,20 @@ class Admin::GroupsController < OrbitGroupController
redirect_to admin_group_path(@group)
end
def updatepost
@post = GroupPost.find(params[:id])
group = @post.group
@post.update_attributes(post_update_params)
@post.save
redirect_to admin_group_path(group)
end
def deletepost
gp = GroupPost.find(params[:id])
gp.destroy
render :json => {"success" => true}.to_json
end
def showpost
render_401 and return if !user_can_read?
if (current_user.id.to_s != @post.author.to_s) && (!@post.read_by.include?(current_user.id.to_s))
@ -38,6 +60,12 @@ class Admin::GroupsController < OrbitGroupController
}
end
def editpost
render_401 and return if @post.author != current_user.id
@no_breadcrumb = true
@grouppost = @post
end
def show
@no_breadcrumb = true
@no_filter = true
@ -46,10 +74,41 @@ class Admin::GroupsController < OrbitGroupController
end
end
def members
render_401 and return if !user_can_read?
@group_members = []
@group.users.each do |user|
mp = user.member_profile rescue nil
if !mp.nil?
avatar = (mp.avatar.thumb.url == "thumb_person.png" ? "/assets/thumb_person.png" : mp.avatar.thumb.url rescue "/assets/thumb_person.png")
@group_members << {
"id" => user.id.to_s,
"user_name" => (user.user_name rescue ""),
"avatar" => avatar,
"name" => (mp.name_translations rescue {"en" => "","zh_tw" => ""}),
"admin" => @group.admins.include?(user.id.to_s)
}
end
end
end
def create_category
gc = GroupCategory.new(category_params)
gc.save
@categories = GroupCategory.all
if !current_user.is_admin?
@requested_categories = GroupCategory.is_requested
render :partial => "group_requested_categories"
else
@admin_categories = GroupCategory.by_admin
render :partial => "group_categories"
end
end
def update_category
gc = GroupCategory.find(params[:category_id])
gc.update_attributes(category_params)
gc.save
@admin_categories = GroupCategory.by_admin
render :partial => "group_categories"
end
@ -81,9 +140,23 @@ class Admin::GroupsController < OrbitGroupController
redirect_to admin_groups_path
end
def update
@group = Group.find(params[:id])
@group.update_attributes(group_update_params)
@group.save
redirect_to admin_groups_path
end
def destroy
group = Group.find(params[:id])
group.destroy
render :json => {"success" => true}.to_json
end
def new
@group = Group.new
@categories = GroupCategory.all.collect{|gc| [gc.title,gc.id]}
@no_breadcrumb = true
@categories = GroupCategory.by_admin.collect{|gc| [gc.title,gc.id]}
@members = []
MemberProfile.all.each do |mp|
user = mp.user rescue nil
@ -99,6 +172,81 @@ class Admin::GroupsController < OrbitGroupController
end
end
def edit
render_401 and return if !is_user_group_admin?
@no_breadcrumb = true
@members = []
MemberProfile.all.each do |mp|
user = mp.user rescue nil
if !user.nil? && user.id.to_s != current_user.id.to_s && user.user_name != "rulingcom" && !@group.users.include?(user)
avatar = (mp.avatar.thumb.url == "thumb_person.png" ? "/assets/thumb_person.png" : mp.avatar.thumb.url rescue "/assets/thumb_person.png")
@members << {
"id" => user.id.to_s,
"user_name" => (user.user_name rescue ""),
"avatar" => avatar,
"name" => (mp.name_translations rescue {"en" => "","zh_tw" => ""})
}
end
end
@existing_members = []
@group.users.each do |user|
mp = user.member_profile rescue nil
if !mp.nil?
avatar = (mp.avatar.thumb.url == "thumb_person.png" ? "/assets/thumb_person.png" : mp.avatar.thumb.url rescue "/assets/thumb_person.png")
@existing_members << {
"id" => user.id.to_s,
"user_name" => (user.user_name rescue ""),
"avatar" => avatar,
"name" => (mp.name_translations rescue {"en" => "","zh_tw" => ""}),
"admin" => @group.admins.include?(user.id.to_s)
}
end
end
end
def get_existing_member_template
g = params[:group_id]
group = Group.find(g)
@existing_members = []
group.users.each do |user|
mp = user.member_profile rescue nil
if !mp.nil?
avatar = (mp.avatar.thumb.url == "thumb_person.png" ? "/assets/thumb_person.png" : mp.avatar.thumb.url rescue "/assets/thumb_person.png")
@existing_members << {
"id" => user.id.to_s,
"user_name" => (user.user_name rescue ""),
"avatar" => avatar,
"name" => (mp.name_translations rescue {"en" => "","zh_tw" => ""}),
"admin" => group.admins.include?(user.id.to_s)
}
end
end
render :partial => "group_existing_member"
end
def remove_user
group = Group.find(params[:group_id])
user_id = params[:user_id]
user = User.find(user_id)
group.users.delete(user)
group.admins.delete(user.id.to_s) if group.admins.include?(user.id.to_s)
group.save
render :json => {"success" => true}.to_json
end
def toggle_admin
group = Group.find(params[:group_id])
user_id = params[:user_id]
user = User.find(user_id)
if params[:admin] == "true"
group.admins << user.id.to_s
else
group.admins.delete(user.id.to_s)
end
group.save
render :json => {"success" => true}.to_json
end
def new_comment
gpc = GroupPostComment.new(comment_params)
gpc.save
@ -108,7 +256,13 @@ class Admin::GroupsController < OrbitGroupController
private
def category_params
params.require(:category).permit!
p = params.require(:category).permit!
if p[:is_accepted].nil?
p[:is_accepted] = true
else
p[:is_accepted] = false
end
p
end
def comment_params
@ -137,6 +291,42 @@ class Admin::GroupsController < OrbitGroupController
p
end
def post_update_params
p = params.require(:group_post).permit!
p["author"] = current_user.id
params[:images_to_destroy].each do |img|
gpi = GroupPostImage.find(img) rescue nil
gpi.destroy if !gpi.nil?
end if !params[:images_to_destroy].nil?
images = @post.group_post_images
p[:group_post_images].each do |id|
gpi = GroupPostImage.find(id) rescue nil
if !gpi.nil?
images << gpi
end
end if !p[:group_post_images].nil?
params[:files_to_destroy].each do |fil|
gpf = GroupPostFile.find(fil) rescue nil
gpf.destroy if !gpf.nil?
end if !params[:files_to_destroy].nil?
files = @post.group_post_files
p[:group_post_files].each do |id|
gpf = GroupPostFile.find(id) rescue nil
if !gpf.nil?
files << gpf
end
end if !p[:group_post_files].nil?
p[:group_post_images] = images
p[:group_post_files] = files
p
end
def post_image_params
params.require(:group_post_image).permit!
end
@ -154,4 +344,16 @@ class Admin::GroupsController < OrbitGroupController
p
end
def group_update_params
p = params.require(:group).permit!
p["user_ids"] = [] if p["user_ids"].nil?
p["user_ids"].concat(@group.users.collect{|u| u.id.to_s})
p
end
end

View File

@ -468,12 +468,15 @@ class Admin::MembersController < OrbitMemberController
def create
@member = MemberProfile.new(member_profile_params)
if user_params["user_name"] != ""
@user = User.new(user_params) rescue nil
@user.member_profile = @member
@user.save
end
if @member.save
if user_params["user_name"] != ""
@user = User.new(user_params) rescue nil
@user.member_profile = @member
if !@user.save
@member.destroy
render 'new' and return
end
end
if !params[:member_profile_field_values].nil?
params[:member_profile_field_values].each_with_index do |m,i|
@custom_field_value = @member.member_profile_field_values.build(value: m.second["value"], member_profile_field_id: m.second["member_profile_field_id"])

View File

@ -42,8 +42,11 @@ class Admin::RoleStatusesController < OrbitMemberController
end
def toggle
@role_status.disable = @role_status.disable ? false : true
@role_status.save!
role_status = RoleStatus.find(params[:role_status_id]) rescue nil
if !role_status.nil?
role_status.disable = role_status.disable ? false : true
role_status.save!
end
render action: :index
end

View File

@ -35,6 +35,35 @@ class Admin::StoreController < OrbitAdminController
response = http.request(request)
data = JSON.parse(response.body)
render :json => data.to_json
%x(kill -s USR2 `cat tmp/pids/unicorn.pid`)
sleep 5
end
def authorize_default_modules
modules = ModuleApp.all
ids = modules.collect{|ma| ma.key}
store_token = Site.first.store_token rescue nil
if !store_token.nil?
module_apps = ModuleApp.all
params_to_send = {'store_token' => store_token, "apps" => ids}
uri = URI.parse(OrbitStore::URL)
http = Net::HTTP.new(uri.host,uri.port)
request = Net::HTTP::Post.new("/store/register_old_sites_modules")
request.body = params_to_send.to_query
response = http.request(request) rescue nil
if response.nil?
render :json => {"success" => false, "message" => "Could not connect to the store."}.to_json
else
data = JSON.parse(response.body)
if data["success"]
render :json => {"success" => true}.to_json
elsif !data["success"]
render :json => {"success" => false, "message" => data["message"]}.to_json
end
end
else
render :json => {"success" => false, "message" => "Cannot register modules, site is not registered with store."}.to_json
end
end
def check_permissions

View File

@ -4,13 +4,13 @@ class OrbitGroupController < ApplicationController
def get_group
case params[:action]
when "show"
when "show","edit"
uid = params[:id].split("-").last
@group = Group.find_by(:uid => uid)
when "newpost", "createpost"
when "newpost", "createpost", "members"
uid = params[:group_id].split("-").last
@group = Group.find_by(:uid => uid)
when "showpost"
when "showpost", "editpost"
uid = params[:id].split("-").last
@post = GroupPost.find_by(:uid => uid)
@group = @post.group
@ -21,7 +21,7 @@ class OrbitGroupController < ApplicationController
@access_right_level = "none"
read_or_write = @group.permission rescue "read"
case params[:action]
when "show", "showpost", "newpost"
when "show", "showpost", "newpost", "edit", "members", "editpost"
is_member = @group.users.include?(current_user)
if @group.admins.include?(current_user.id.to_s)
@access_right_level = "admin"

View File

@ -31,14 +31,18 @@ class PagesController < ApplicationController
impressionist(page)
page.inc(view_count: 1)
end
params[:is_frontend_view] = "true"
OrbitHelper.set_params params,current_user
OrbitHelper.set_site_locale locale
OrbitHelper.set_request_object request
OrbitHelper.render_meta_tags []
render :html => render_final_page("home",page,true).html_safe
end
def show
display_type = ""
path = request.path.split('/')
params[:is_frontend_view] = "true"
if path.size <= 2
redirect_to root_path
else
@ -100,6 +104,7 @@ class PagesController < ApplicationController
end
@manifest = @key
OrbitHelper.set_params params,current_user
OrbitHelper.set_request_object request
OrbitHelper.set_site_locale locale
OrbitHelper.set_this_module_app module_app.singularize
OrbitHelper.set_page_categories categories || ["all"]
@ -122,7 +127,7 @@ class PagesController < ApplicationController
if Site.first.enable_redirect_index
redirect_to root_url
else
render :file => "#{Rails.root}/public/404.html", :layout => false, :status => :not_found
render :file => "#{Rails.root}/public/411.html", :layout => false, :status => :not_found
end
end
else
@ -131,6 +136,17 @@ class PagesController < ApplicationController
end
end
def update_child_pages_url(page)
page.child_page.each do |cp|
if !cp.child_page.blank?
update_child_pages_url(cp)
else
cp.url = page.url + "/#{cp.page_id}"
cp.save
end
end
end
def update_item_position
@page = Page.find(params[:id])
new_parent_page = Page.find(params[:parent_id])
@ -139,6 +155,9 @@ class PagesController < ApplicationController
if new_parent_page.id != old_parent_page_id
url = (new_parent_page.url == "/" ? "" : new_parent_page.url)
@page.url = url + "/#{@page.page_id}"
if !@page.child_page.blank?
update_child_pages_url(@page)
end
end
@page.save
params["children_ids"].each_with_index do |child,i|
@ -198,11 +217,11 @@ class PagesController < ApplicationController
{"key" => "email", "human_readable" => I18n.t("users.email")}
]
custom_attribs = MemberProfileField.all.collect do |mpf|
custom_attribs = MemberProfileField.all.asc(:created_at).collect do |mpf|
{"key" => mpf.key, "human_readable" => mpf.title}
end
role_attribs = AttributeField.all.collect do |af|
role_attribs = AttributeField.all.asc(:created_at).collect do |af|
{"key" => af.key, "human_readable" => af.title}
end
@ -380,6 +399,7 @@ class PagesController < ApplicationController
OrbitHelper.set_widget_data_count subpart.data_count
OrbitHelper.set_widget_module_app subpart.module
OrbitHelper.set_widget_item_url subpart
OrbitHelper.render_meta_tags []
OrbitHelper.set_widget_title subpart.title
OrbitHelper.set_widget_categories subpart.categories || ["all"]
OrbitHelper.set_widget_tags subpart.tags || []
@ -416,7 +436,8 @@ class PagesController < ApplicationController
end
@layout_html = render_to_string(@file)
doc = Nokogiri::HTML(@layout_html, nil, "UTF-8")
head = doc.css("head")
head[0].inner_html = head.inner_html + OrbitHelper.get_css_to_render_in_head
@part_partials.each do |key, partial|
html_string = ""
partial.each do |p|
@ -447,6 +468,7 @@ class PagesController < ApplicationController
if original_view != "home"
viewarea = doc.css("*[data-content='true']")[0]
viewarea.inner_html = render_to_string(original_view) rescue "<div></div>"
head[0].inner_html = OrbitHelper.meta_tags_html + head.inner_html
end
link = doc.css("link")[0]
link.attributes["href"].value = current_site.favicon.url.nil? ? "/assets/favicon.ico" : current_site.favicon.url
@ -569,7 +591,7 @@ class PagesController < ApplicationController
def change_to_language(final_html)
if session[:zh_cn]
final_html = ZhConv.convert("zh-cn", final_html)
final_html = ZhConv.convert("zh-cn", final_html,false)
final_html.gsub!('/zh_tw/','/zh_cn/')
final_html.sub!('<a href="'+request.path+'">繁体中文</a>','<a href="'+(request.path.sub('/zh_cn/','/zh_tw/'))+'">繁体中文</a>')
end

View File

@ -50,6 +50,24 @@ class StoreApiController < ApplicationController
render :layout => "back_end"
end
# this is for feed module.
def get_channel_lists
apps = ModuleApp.where(:feeds_url.ne => nil)
channels = []
if apps.count > 0
apps.each do |app|
channel = {}
channel["title"] = app.title
channel["key"] = app.key
channel["url"] = app.feeds_url
channel["app_icon"] = app.get_registration.get_side_bar.get_icon_class
channels << channel
end
end
render :json => {"channels" => channels}.to_json
end
private
def bundle_install
Bundler.with_clean_env { `cd #{Rails.root} && BUNDLE_GEMFILE=downloaded_extensions.rb bundle update && bundle` }

View File

@ -1,6 +1,5 @@
module Admin::AttributeValuesViewHelper
OPT = [
["YYYY / MM / DD hh : mm","format1"],
["YYYY / MM / DD","format2"],
["YYYY / MM","format3"],
["YYYY","format4"]

View File

@ -20,12 +20,16 @@ module ApplicationHelper
header_file = File.join('../templates', "#{@key}", "/home/header.html.erb")
header_file_html = render :file => header_file
header = Nokogiri::HTML(header_file_html, nil, "UTF-8")
site_logo = header.css("img[src='{{logo_url}}']")[0]
site_logo.remove if site.site_logo.url.nil?
sub_menu_html = site.sub_menu
html = header.to_s
html = html.gsub("{{site_name}}",(site.title rescue ""))
html = html.gsub("%7B%7Blogo_url%7D%7D",(site.site_logo.url.nil? ? "/assets/site-logo.png" : site.site_logo.url))
t = site.title rescue ""
html = html.gsub("{{site_name}}",(site.display_title_in_frontend ? t : ""))
html = html.gsub("%7B%7Blogo_url%7D%7D",(site.site_logo.url.nil? ? "/assets/default-site-logo.png" : site.site_logo.url))
if site.sitemap_menu_in_header
sub_menu_html = sub_menu_html + "<a href='/#{I18n.locale.to_s}#{site.site_map_link}'>Sitemap</a>"
sitemap = Page.find_by_key(:sitemap).name rescue "Sitemap"
sub_menu_html = sub_menu_html + "<a href='/#{I18n.locale.to_s}#{site.site_map_link}'>#{sitemap}</a>"
end
sub_menu_html = sub_menu_html.nil? ? "" : sub_menu_html
html = html.gsub("{{header-data}}",sub_menu_html)
@ -65,6 +69,7 @@ module ApplicationHelper
site_footer = site_footer.nil? ? "" : site_footer
html = html.gsub("{{footer-data}}",site_footer)
counter = Page.root.view_count.to_s rescue ""
counter = t(:visitors_count) + " : " + counter
html = html.gsub("{{site-counter}}",counter)
html.html_safe
end

View File

@ -20,7 +20,7 @@ module AttributeFieldsHelper
@new_attribute = @attribute_value.nil?
@attribute_value = @attribute_value || (attribute_type.eql?("role") ? @member.attribute_values.build(attribute_field_id: id) : @member.member_profile_field_values.build(member_profile_field: id))
@prefiled_value = @attribute_value.value rescue nil
return instance_eval("render_#{markup}") rescue ""
return instance_eval("render_#{markup}")# rescue ""
end
end
@ -101,14 +101,17 @@ module AttributeFieldsHelper
# @prefiled_value = @attribute_value.get_date
case self.typeC['format']
when 'format1'
tmp = datetime_picker(get_field_name_base, (@prefiled_value ? @prefiled_value : d.strftime("%Y/%m/%d %H:%M")), 'yyyy/MM/dd hh:mm', true)
when 'format2'
tmp = datetime_picker(get_field_name_base, (@prefiled_value ? @prefiled_value : d.strftime("%Y/%m/%d")), 'yyyy/MM/dd')
# when 'format1'
# tmp = datetime_picker(get_field_name_base, (@prefiled_value ? @prefiled_value : d.strftime("%Y/%m/%d %H:%M")), 'yyyy/MM/dd hh:mm', true)
when 'format1','format2'
# tmp = datetime_picker(get_field_name_base, (@prefiled_value ? @prefiled_value : d.strftime("%Y/%m/%d")), 'yyyy/MM/dd')
tmp = very_simple_picker(get_field_name_base, (@prefiled_value ? @prefiled_value : d.strftime("%Y/%m/%d")), self.typeC['format'])
when 'format3'
tmp = datetime_picker(get_field_name_base, (@prefiled_value ? @prefiled_value : d.strftime("%Y/%m")), 'yyyy/MM')
# tmp = datetime_picker(get_field_name_base, (@prefiled_value ? @prefiled_value : d.strftime("%Y/%m")), 'yyyy/MM')
tmp = very_simple_picker(get_field_name_base, (@prefiled_value ? @prefiled_value : d.strftime("%Y/%m")), self.typeC['format'])
when 'format4'
tmp = datetime_picker(get_field_name_base, (@prefiled_value ? @prefiled_value : d.strftime("%Y")), 'yyyy')
# tmp = datetime_picker(get_field_name_base, (@prefiled_value ? @prefiled_value : d.strftime("%Y")), 'yyyy')
tmp = very_simple_picker(get_field_name_base, (@prefiled_value ? @prefiled_value : d.strftime("%Y")), self.typeC['format'])
end
control_group_wrapper{tmp}
@ -117,6 +120,28 @@ module AttributeFieldsHelper
end
end
def very_simple_picker(object_name, value, format)
id = object_name.gsub("[","_").gsub("]","")
values = value.split("/") rescue []
html = "<div class='simple-date-picker'>"
if format == "format1" || format == "format2"
html = html + "<input type='text' class='span1' #{(!values.blank? ? "value='#{values[2]}'" : "")} placeholder='Date' onkeypress='return (event.charCode >= 48 && event.charCode <= 57) || event.keyCode == 8 || event.keyCode == 46 || (event.keyCode >= 37 && event.keyCode <= 40) || event.keyCode == 9' onkeyup='this.value=(this.value.length <= 2 ? (parseInt(this.value) > 0 && parseInt(this.value) < 32 ? this.value : this.value.substring(0,this.value.length-1)) : this.value.substring(0,this.value.length-1))' onblur='var el = document.getElementById(\"#{id}\");var k = el.value.split(\"/\");if(this.value){k[2]=this.value; el.value = k.join(\"/\")};'>"
end
if format == "format1" || format == "format2" || format == "format3"
html = html + "<select class='span2' onchange='var el = document.getElementById(\"#{id}\");var k = el.value.split(\"/\");if(this.value){k[1]=this.value; el.value = k.join(\"/\")};'>"
["January","February","March","April","May","June","July","August","September","October","November","December"].each_with_index do |mon,index|
mon_value = "#{(index < 9 ? "0" : "")}#{(index + 1).to_s}"
html = html + "<option value='#{(index < 9 ? "0" : "")}#{(index + 1).to_s}' #{values[1] == mon_value ? 'selected="selected"' : ""}>#{mon}</option>"
end
html = html + "</select>"
end
html = html + "<input type='text' class='span1' #{(!values.blank? ? "value='#{values[0]}'" : "")} placeholder='Year' onkeypress='return (event.charCode >= 48 && event.charCode <= 57) || event.keyCode == 8 || event.keyCode == 46 || (event.keyCode >= 37 && event.keyCode <= 40) event.keyCode == 9' onkeyup='this.value=(this.value.length == 4 ? (parseInt(this.value) > 1900 && parseInt(this.value) < 3000 ? this.value : this.value.substring(0,this.value.length-1)) : (this.value.length > 4 ? this.value.substring(0,this.value.length-1) : this.value))' onblur='var el = document.getElementById(\"#{id}\");var k = el.value.split(\"/\");if(this.value){k[0]=this.value; el.value = k.join(\"/\")};'>"
html = html + hidden_field_tag(object_name, (value || "1901/01/01"))
html = html + "</div>"
html.html_safe
end
def datetime_picker(object_name, value, format, time=false)
content_tag :div, :class => "input-append datetimepick", "data-date-format"=>format, "data-picktime"=>"#{time}" do
concat text_field_tag(object_name, value, :placeholder=>format)

View File

@ -41,6 +41,10 @@ module OrbitBackendHelper
concat hidden_field(object_name, method, :value => options[:value])
concat separated_picker(object_name, method, options)
end
when 'simple'
content_tag :div, :id => options[:id], :class => options[:class] do
simple_picker(object_name, method, options)
end
else
content_tag :div, :id => options[:id], :class => options[:class] do
default_picker(object_name, method, options)

View File

@ -32,6 +32,19 @@ module OrbitFormHelper
end
end
def simple_picker(object_name, method, options)
html = "<div class='simple-date-picker'>
<input type='text' class='span1' #{(options[:value] ? "value='#{options[:value].day}'" : "")} placeholder='Date' onkeypress='return (event.charCode >= 48 && event.charCode <= 57) || event.keyCode == 8 || event.keyCode == 46 || (event.keyCode >= 37 && event.keyCode <= 40) || event.keyCode == 9' onkeyup='this.value=(this.value.length <= 2 ? (parseInt(this.value) > 0 && parseInt(this.value) < 32 ? this.value : this.value.substring(0,this.value.length-1)) : this.value.substring(0,this.value.length-1))' onblur='var el = document.getElementById(\"#{object_name.to_s}_#{method.to_s}\");var k = el.value.split(\"-\");if(this.value){k[2]=this.value; el.value = k.join(\"-\")};'>
<select class='span2' onchange='var el = document.getElementById(\"#{object_name.to_s}_#{method.to_s}\");var k = el.value.split(\"-\");if(this.value){k[1]=this.value; el.value = k.join(\"-\")};'>"
["January","February","March","April","May","June","July","August","September","October","November","December"].each_with_index do |mon,index|
html = html + "<option value='#{(index < 9 ? "0" : "")}#{(index + 1).to_s}' #{(options[:value] && options[:value].month == (index + 1) ? "selected='selected'" : "")}>#{mon}</option>"
end
html = html + "</select><input type='text' class='span1' #{(options[:value] ? "value='#{options[:value].year}'" : "")} placeholder='Year' onkeypress='return (event.charCode >= 48 && event.charCode <= 57) || event.keyCode == 8 || event.keyCode == 46 || (event.keyCode >= 37 && event.keyCode <= 40) event.keyCode == 9' onkeyup='this.value=(this.value.length == 4 ? (parseInt(this.value) > 1900 && parseInt(this.value) < 3000 ? this.value : this.value.substring(0,this.value.length-1)) : (this.value.length > 4 ? this.value.substring(0,this.value.length-1) : this.value))' onblur='var el = document.getElementById(\"#{object_name.to_s}_#{method.to_s}\");var k = el.value.split(\"-\");if(this.value){k[0]=this.value; el.value = k.join(\"-\")};'>"
html = html + hidden_field(object_name, method, :value => options[:value] || "1901-01-01")
html = html + "</div>"
html.html_safe
end
def date_picker(object_name, method, options)
custom = {}
custom[:format] = options[:format] || 'yyyy/MM'

View File

@ -267,6 +267,14 @@ module OrbitHelper
"#{request.host_with_port}/#{locale}#{url}"
end
def self.set_request_object(request)
@site_request_object = request
end
def self.request
@site_request_object
end
def self.set_site_locale(locale)
@site_locale = locale
end
@ -339,6 +347,40 @@ module OrbitHelper
!$mobile.blank?
end
def self.render_css_in_head(css=[])
@css_to_render_in_head = css
end
def self.get_css_to_render_in_head
css_html = ""
@css_to_render_in_head.each do |css|
css_html = css_html + "<link rel='stylesheet' media='screen' href='/assets/#{css}'>\n"
end
return css_html
end
def self.render_meta_tags(metas=[])
@page_meta_tags = metas
end
def self.meta_tags_html
html = ""
if !@page_meta_tags.nil?
@page_meta_tags.each do |meta|
html = html + "<meta "
meta.keys.each do |attrib|
html = html + "#{attrib}='#{self.strip_html_tags(meta[attrib])}' "
end
html = html + ">"
end
end
html
end
def self.strip_html_tags(string)
ActionView::Base.full_sanitizer.sanitize(string)
end
# ===============================================================
# Breadcrumbs
# ===============================================================

View File

@ -46,7 +46,7 @@ class AttributeValue
def get_field_value
if (self.attribute_field.markup.eql?("text_field") || self.attribute_field.markup.eql?("text_area"))
field_value = self.value[I18n.locale]
field_value = self.value[I18n.locale].gsub("\r\n","<br>")
elsif (self.attribute_field.markup.eql?("select") || self.attribute_field.markup.eql?("radio_button"))
field_value = self.attribute_field.markup_value["#{self.value}"][I18n.locale] rescue nil
elsif self.attribute_field.markup.eql?("address")

View File

@ -13,12 +13,16 @@ class Group
belongs_to :group_category
has_and_belongs_to_many :users
has_many :group_posts
has_many :group_posts, :dependent => :destroy
scope :closed, ->{ where(privacy: "closed") }
scope :open, ->{ where(privacy: "open") }
scope :archived, ->{ where(archive: true) }
scope :not_archived, ->{ where(archive: false) }
def privacy_name
return self.privacy == "closed" ? "private" : "public"
end
end

View File

@ -3,6 +3,10 @@ class GroupCategory
include Mongoid::Timestamps
field :title, localize: true
field :is_accepted, type: Boolean, :default => true
has_many :groups
scope :is_requested, ->{ where(is_accepted: false) }
scope :by_admin, ->{ where(is_accepted: true) }
end

View File

@ -13,7 +13,7 @@ class MemberProfile
field :sex
field :sid
field :office_tel
field :birthday, type: DateTime
field :birthday, type: Date
field :address, type: String, localize: true
field :personal_website
field :autobiography, type: String, localize: true

View File

@ -22,7 +22,7 @@ class MemberProfileFieldValue
index.nil? ? self["val"] : self["val"][index]
# self.member_profile_field.get_data[:cross_lang] ? Hash[VALID_LOCALES.collect{|lang| [lang,self[lang.to_sym]]}] : self["val"] #if !self.member_profile_field.get_data[:cross_lang]
else
self.member_profile_field.get_data["cross_lang"] =="true" ? self["val"] : Hash[site.valid_locales.collect{|lang| [lang,self[lang.to_sym]]}]
self.member_profile_field.get_data["cross_lang"] =="true" ? self["val"].gsub("\r\n","<br>") : Hash[site.valid_locales.collect{|lang| [lang,self[lang.to_sym].gsub("\r\n","<br>")]}]
end
when 'select','radio_button','address'
self["val"]

View File

@ -16,6 +16,7 @@ class ModuleApp
field :widget_settings
field :store_permission_granted, type: Boolean, default: false
field :cache_models, type: Array, default: []
field :feeds_url
has_many :categories, dependent: :destroy, :autosave => true
has_and_belongs_to_many :tags, dependent: :destroy, :autosave => true
@ -36,6 +37,7 @@ class ModuleApp
self[:widget_settings] = reg.get_widget_settings
self[:desktop_enabled] = reg.is_desktop_enabled
self[:cache_models] = reg.get_models_to_cache
self[:feeds_url] = reg.get_feeds_url
end
def sub_managers

View File

@ -25,12 +25,14 @@ class Site
field :enable_language_detection, :type => Boolean, :default => false
field :enable_redirect_index, :type => Boolean, :default => false
field :enable_zh_cn, :type => Boolean, :default => true
field :enable_language_options, :type => Boolean, :default => true
field :default_locale, :default => "zh_tw"
field :mobile_on, :type => Boolean, :default => false
field :announcement_category, :type => Array, :default=>[]
field :mobile_bar_color, :type => Array, :default=>[]
field :phone_number, :type => Array,:default=>[]
field :title_always_on, :type => Boolean, :default => false
field :display_title_in_frontend, :type => Boolean, :default => true
field :sitemap_menu_in_header, :type => Boolean, :default => false
field :enable_terms_of_use, :type => Boolean, :default => false
field :search,:type => Hash

View File

@ -1,146 +1,189 @@
(function( $ ) {
(function($) {
"use strict";
'use strict';
function init() {
var doc = document,
lang = doc.documentElement.lang,
pageModule = doc.body.getAttribute( "data-module" );
function init() {
var doc = document,
lang = doc.documentElement.lang,
pageModule = doc.body.getAttribute('data-module');
var orbit = {
var orbit = {
helpers : {
// Cross-browser class manipulation
addClass: function( el, className ) {
if ( el.classList ) {
el.classList.add( className );
} else {
el.className += " " + className;
}
},
hasClass: function( el, cls ) {
return ( " " + el.className + " " ).indexOf( " " + cls + " " ) > -1;
}
},
plugins : {
// RWD image resize script
bullEye: function() {
$( ".bullseye" ).bullseye({
fadeEffect: false
});
}
},
nav : {
// Add class name to the menu item when its child items are more than 8 items
addMegaDropdownClass: function( els, len, className ) {
var els = doc.querySelectorAll( els ),
elsLen = els.length,
i = -1;
if( elsLen > 1 ) {
for ( i = 0; i < elsLen; i++ ) {
if ( els[ i ].children.length > len ) {
this.helpers.addClass( els[ i ].parentNode, className || "mega-dropdown" );
helpers: {
// Cross-browser class manipulation
addClass: function(el, className) {
if (el.classList) {
el.classList.add(className);
} else {
el.className += ' ' + className;
}
},
hasClass: function(el, cls) {
return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1;
}
}
}
},
// Append caret to menu item if it has dropdown
addCaret: function() {
var els = doc.querySelectorAll( ".page_menu.level_2" ),
len = els.length,
i = -1;
},
for ( i = 0; i < len; i++ ) {
var node = doc.createElement( "span" );
node.className = "caret";
els[ i ].parentNode.appendChild( node );
}
}
},
plugins: {
// RWD image resize script
bullEye: function() {
$('.bullseye').bullseye({
fadeEffect: false
});
}
},
announcement: {
// Announcement text truncation
truncateAnnouncement: function( els, maxLen ) {
var els = doc.querySelectorAll( els ),
newTitle = "";
i = -1,
elsLen = els.length;
nav: {
// Add class name to the menu item when its child items are more than 8 items
addMegaDropdownClass: function(els, len, className) {
var els = doc.querySelectorAll(els),
elsLen = els.length,
i = -1;
for ( i = 0; i < elsLen; i ++ ) {
if ( els[ i ].firstChild !== null ) {
if( els[ i ].firstChild.length > maxLen ) {
newTitle = els[ i ].firstChild.textContent;
els[ i ].textContent = newTitle.substring( 0, maxLen ) + "...";
}
}
}
}
},
member: {
equalHeight: function() {
var bigbrother = -1;
$( ".i-member-item" ).each( function() {
bigbrother = bigbrother > $( ".i-member-item" ).height() ? bigbrother : $( ".i-member-item" ).height();
});
$( ".i-member-item" ).each( function() {
$( ".i-member-item" ).height( bigbrother );
});
}
},
// Add link and cursor class name on element that has data-link attribute
addLinkOnADBanner: function( els ) {
$.each( els, function() {
if ( $( this ).data( "link" ) !== "" && !$( this ).hasClass( "youtube" ) ) {
$( this ).on( "click", function() {
var target = $( this ).data( "target" ),
link = $( this ).data( "link" );
if ( target === "_blank" ) {
window.open( link, target );
} else {
window.location.href = link;
if (elsLen > 1) {
for (i = 0; i < elsLen; i++) {
if (els[i].children.length > len) {
this.helpers.addClass(els[i].parentNode, className || 'mega-dropdown');
}
}
}).addClass( "cursor" );
}
},
// Append caret to menu item if it has dropdown
addCaret: function() {
var els = doc.querySelectorAll('.page_menu.level_2'),
len = els.length,
i = -1;
for (i = 0; i < len; i++) {
var node = doc.createElement('span');
node.className = 'caret';
els[i].parentNode.appendChild(node);
}
}
});
},
},
// Sitemenu dropdown
sitemenuDropdown: function( els ) {
var els = doc.querySelectorAll(".sitemenu__list.level-2"),
len = els.length,
i = -1;
for ( i = 0; i < len; i++ ) {
if ( els[ i ].children.length ) {
var caret = doc.createElement( "span" );
caret.className = "sitemenu___dropdown-toggle fa fa-caret-down";
caret.setAttribute( "data-toggle", "dropdown" );
announcement: {
// Announcement text truncation
truncateAnnouncement: function(els, maxLen) {
var els = doc.querySelectorAll(els),
newTitle = '';
i = -1,
elsLen = els.length;
els[ i ].parentNode.insertBefore( caret, els[ i ] );
this.helpers.addClass( els[ i ], "dropdown-menu" );
for (i = 0; i < elsLen; i++) {
if (els[i].firstChild !== null) {
if (els[i].firstChild.length > maxLen) {
newTitle = els[i].firstChild.textContent;
els[i].textContent = newTitle.substring(0, maxLen) + '...';
}
}
}
}
},
member: {
equalHeight: function() {
var bigbrother = -1;
$('.i-member-item').each(function() {
bigbrother = bigbrother > $('.i-member-item').height() ? bigbrother : $('.i-member-item').height();
});
$('.i-member-item').each(function() {
$('.i-member-item').height(bigbrother);
});
},
// Remove table row, list item if it only has sigle title or value not in pair
removeEmptyRow: function() {
// Remove index page empty item
$('.i-member-profile-item .i-member-value').each(function() {
if ($(this).text().trim() === '' || $(this).text().trim() === ':') {
$(this).parent().addClass('hide');
}
});
// Remove empty table cell on show page
$('.show-member th, .show-member td').each(function() {
if ($(this).text().trim() === '') {
$(this).parent('tr').addClass('hide');
}
});
},
},
// Add link and cursor class name on element that has data-link attribute
addLinkOnADBanner: function(els) {
$.each(els, function() {
if ($(this).data('link') !== '' && !$(this).hasClass('youtube')) {
$(this).on('click', function() {
var target = $(this).data('target'),
link = $(this).data('link');
if (target === '_blank') {
window.open(link, target);
} else {
window.location.href = link;
}
}).addClass('cursor');
}
});
},
// Sitemenu dropdown
sitemenuDropdown: function(els) {
var els = doc.querySelectorAll('.sitemenu-list.level-2'),
len = els.length,
i = -1;
for (i = 0; i < len; i++) {
if (els[i].children.length) {
var caret = doc.createElement('span');
caret.className = 'sitemenu-dropdown-toggle fa fa-caret-down';
caret.setAttribute('data-toggle', 'dropdown');
els[i].parentNode.insertBefore(caret, els[i]);
this.helpers.addClass(els[i], 'dropdown-menu');
}
}
},
// Go back top button
goBackTop: function(txt, speed) {
var top = document.createElement('div');
top.className = 'go-back-top';
top.textContent = txt;
doc.body.appendChild(top);
$(window).scroll(function() {
if($(this).scrollTop() != 0) {
$('.go-back-top').fadeIn();
} else {
$('.go-back-top').fadeOut();
}
});
$('.go-back-top').click(function() {
$('body, html').animate({scrollTop:0}, speed);
return false;
});
}
}
};
// Specific functions that will be running on homepage
if (pageModule === 'home') {
}
if (pageModule === 'member') {
orbit.member.removeEmptyRow();
}
};
// Specific functions that will be running on homepage
if ( pageModule === "home" ) {
// Functions that will be running on every page
orbit.sitemenuDropdown();
orbit.goBackTop('top', 800);
orbit.plugins.bullEye();
}
// Functions that will be running on every page
orbit.sitemenuDropdown();
orbit.plugins.bullEye();
}
// Run the init function when DOM is ready
$(document).ready(function() {
init();
});
$( document ).ready(function() {
init();
});
}( jQuery ));
}(jQuery));

View File

@ -0,0 +1,7 @@
@charset "utf-8";
a[accesskey] {
position: absolute;
margin-left: -15px;
color: transparent !important;
}

View File

@ -1,37 +1,81 @@
@charset "utf-8";
@import "../initial";
@import "variables";
html {
font-size: 100%;
font-size: 100%;
}
body {
font-family: $sub-font;
font-size: inherit;
margin-top: 40px;
font-family: $sub-font;
font-size: inherit;
margin-top: 40px;
}
a:link,
a:visited {
color: $brand-primary;
}
a:hover,
a:focus {
text-decoration: none;
color: lighten($brand-primary, 10%);
text-decoration: none;
}
img {
max-width: 100%;
height: auto;
max-width: 100%;
height: auto;
}
.admin-edit {
clear: both;
clear: both;
}
// override bootsrap settings
th,
td {
padding: 8px .5rem;
padding: 8px .5rem;
}
.borderless>tbody>tr>td,
.borderless>tbody>tr>th,
.borderless>tfoot>tr>td,
.borderless>tfoot>tr>th,
.borderless>thead>tr>td,
.borderless>thead>tr>th {
border: none !important;
.borderless > tbody > tr > td,
.borderless > tbody > tr > th,
.borderless > tfoot > tr > td,
.borderless > tfoot > tr > th,
.borderless > thead > tr > td,
.borderless > thead > tr > th {
border: none !important;
}
a.btn-primary {
color: $theme-white;
border-color: $theme-color-main;
background-color: $theme-color-main;
font-size: 0.8125rem;
&:hover {
background-color: darken($theme-color-main, 10%);
border-color: darken($theme-color-main, 10%);
}
}
// Page heading
.page-module-title {
@extend .unity-title;
margin-bottom: 18px;
}
.view-count {
font-size: 0.75rem;
}
.view_count {
> i {
font-size: 0.75rem;
&:before {
margin-right: 8px;
}
}
}

View File

@ -0,0 +1,21 @@
@charset "utf-8";
@import "variables";
.go-back-top {
background: rgba($theme-color-main, .9);
text-align: center;
padding: 10px 12px;
position: fixed;
bottom: 15px;
right: 15px;
cursor: pointer;
display: none;
color: $theme-white;
font-size: 12px;
border-radius: 2px;
z-index: 1050;
&:hover {
background: rgba($theme-color-main, 1);
}
}

View File

@ -35,7 +35,7 @@ body {
}
}
@media (max-width: 479px) {
@media (max-width: 540px) {
body {
#orbit-bar ul.orbit-bar-search-sign-language > li + li:hover > a,
#orbit-bar ul.orbit-bar-search-sign-language > li + li:hover > span {

View File

@ -1,10 +1,20 @@
@charset "utf-8";
@import "variables";
.pagination {
li {
a {
font-size: 0.8125rem;
margin: 0 0.2em;
color: $theme-color-main;
}
}
.active {
a {
background-color: $theme-color-main;
border-color: $theme-color-main;
}
}
}

View File

@ -5,6 +5,7 @@
margin: 0.5em 0;
line-height: 1.5;
font-family: $main-font;
font-size: 1.5rem;
.layout-footer & {
margin-bottom: 10px;
border-bottom: none;

View File

@ -2,6 +2,7 @@
// Base Color
$theme-gray: #495054;
$theme-gray-subtle: #ddd;
$theme-gray-light: #cecece;
$theme-gray-lighter: #f3f3f3;
$theme-gray-dark: #363636;

View File

@ -12,7 +12,7 @@
@extend .response-content;
}
.header-nav {
padding-top: 0.5rem;
padding: 16px 0;
color: #FFF;
& > * {
display: inline-block;

View File

@ -5,4 +5,9 @@
position: relative;
margin-bottom: 2rem;
z-index: 0;
background: $theme-gray;
.w-ad-banner {
max-width: 1200px;
margin: auto;
}
}

View File

@ -0,0 +1,52 @@
@charset "utf-8";
.w-calendar {
width: 100%;
position: relative;
.widget-title {
text-align: center;
border: 1px solid $theme-gray-subtle;
margin: 0;
padding: 8px 0;
}
th {
background: $theme-color-main;
color: $theme-white;
text-align: center;
font-size: 0.8125rem;
}
td {
border: 1px solid $theme-gray-subtle;
text-align: center;
font-size: 0.8125rem;
}
}
.w-calendar-table {
margin-bottom: 0;
.w-calendar-today {
background: $theme-color-main;
color: $theme-white;
}
.w-calendar-event {
background: $theme-color-third;
color: $theme-white;
cursor: pointer;
}
}
.w-calendar-nav {
a {
position: absolute;
top: 8px;
left: 10px;
color: $theme-color-main;
}
.w-calendar-nav-next {
left: auto;
right: 10px;
}
}

View File

@ -1,49 +1,54 @@
@charset "utf-8";
@import "../initial";
// Faqs MODULES
.widget-faqs {
&.widget1 {
.widget-content {
padding-bottom: 10px;
& + .widget-content {
border-top: 1px dotted $theme-gray-light;
}
.widget-content-title {
display: inline-block;
padding: 5px 0;
}
}
&.widget1 {
.widget-content {
padding-bottom: 10px;
// layout-content 下的樣式
.layout-content & {
.widget-title {
@extend .unity-title;
}
}
& + .widget-content {
border-top: 1px dotted $theme-gray-light;
}
// layout-footer 下的樣式
.layout-footer & {
.widget-content {
line-height: 2em;
border-top-color: $theme-gray;
}
.widget-content-title {
display: inline-block;
padding: 5px 0;
}
}
// layout-content 下的樣式
.layout-content & {
.widget-title {
@extend .unity-title;
}
}
// layout-footer 下的樣式
.layout-footer & {
.widget-content {
line-height: 2em;
border-top-color: $theme-gray;
}
}
}
}
}
// Faqs INDEX
.index-faqs {
.index-title {
@extend .unity-title;
}
&.index1 {
.index-content {
list-style-type: decimal-leading-zero;
list-style-position: inside;
& + .index-content {
border-top: 1px dotted $theme-gray-light;
}
.index-title {
@extend .unity-title;
}
&.index1 {
.index-content {
list-style-type: decimal-leading-zero;
list-style-position: inside;
& + .index-content {
border-top: 1px dotted $theme-gray-light;
}
}
}
}
}

View File

@ -1,124 +1,144 @@
@charset "utf-8";
@import "../initial";
// Gallery MODULES
.widget-gallery {
.widget-title {
@extend .unity-title;
}
.widget-content {
position: relative;
}
&.widget1 {
.widget-content {
overflow: hidden;
.widget-pic {
display: inline-block;
padding: 1px;
text-align: center;
@include size(33.3333%, auto);
img {
@include size(100%, 100%);
}
}
.widget-title {
@extend .unity-title;
}
}
&.widget2 {
.widget-content {
margin-left: -5px;
margin-right: -5px;
.widget-pic {
margin-bottom: 10px;
padding-left: 5px;
padding-right: 5px;
img {
@include size(100%, auto);
}
}
position: relative;
}
&.widget1 {
.widget-content {
overflow: hidden;
.widget-pic {
display: inline-block;
padding: 1px;
text-align: center;
@include size(33.3333%, auto);
img {
@include size(100%, 100%);
}
}
}
}
&.widget2 {
.widget-content {
margin-left: -5px;
margin-right: -5px;
.widget-pic {
margin-bottom: 10px;
padding-left: 5px;
padding-right: 5px;
img {
@include size(100%, auto);
}
}
}
}
}
}
.index-gallery {
.index-title {
@extend .unity-title;
}
&.index1 {
.index-content {
.index-content-inner {
position: relative;
}
.index-part {
position: absolute;
top: 4px;
right: 4px;
bottom: 4px;
left: 4px;
overflow: hidden;
background-color: rgba($theme-color-main, 0.8);
@include transition(all 0.5s ease);
@include opacity(0);
.index-content-title {
@include transition(all 0.3s ease);
@include transition-delay(0.1s);
@include scale(0);
}
&:hover {
@include opacity(1);
.index-content-title {
@include scale(1);
}
}
}
.index-content-title {
display: table;
margin: 0;
@include size(100%, 100%);
a {
display: table-cell;
color: #FFF;
text-decoration: none;
text-align: center;
vertical-align: middle;
}
}
.index-title {
@extend .unity-title;
}
&.index1 {
.index-content {
.index-content-inner {
position: relative;
}
.index-part {
position: absolute;
top: 4px;
right: 4px;
bottom: 4px;
left: 4px;
overflow: hidden;
background-color: rgba($theme-color-main, 0.8);
@include transition(all 0.5s ease);
@include opacity(0);
.index-content-title {
@include transition(all 0.3s ease);
@include transition-delay(0.1s);
@include scale(0);
}
&:hover {
@include opacity(1);
.index-content-title {
@include scale(1);
}
}
}
.index-content-title {
display: table;
margin: 0;
@include size(100%, 100%);
a {
display: table-cell;
color: #FFF;
text-decoration: none;
text-align: center;
vertical-align: middle;
}
}
}
}
}
}
.show-gallery {
.show-title {
@extend .unity-title;
}
.show-content {
padding-right: 0;
padding-left: 0;
.img {
display: inline-block;
width: 100%;
height: auto;
opacity: (0.8);
-webkit-filter: grayscale(100%) brightness(1.2);
-moz-filter: grayscale(100%) brightness(1.2);
filter: grayscale(100%) brightness(1.2);
@include transition(all 0.2s ease);
.show-title {
@extend .unity-title;
}
.show-content-inner {
position: relative;
padding: 2px;
z-index: 0;
@include scale(1);
@include transition(all 0.2s ease);
&:hover {
z-index: 1;
@include scale(1.1);
.show-content {
padding-right: 0;
padding-left: 0;
.img {
opacity: (1);
-webkit-filter: grayscale(0%) brightness(1);
-moz-filter: grayscale(0%) brightness(1);
filter: grayscale(0%) brightness(1);
display: inline-block;
width: 100%;
height: auto;
opacity: 0.8;
-webkit-filter: grayscale(100%) brightness(1.2);
-moz-filter: grayscale(100%) brightness(1.2);
filter: grayscale(100%) brightness(1.2);
@include transition(all 0.2s ease);
}
.show-content-inner {
position: relative;
padding: 2px;
z-index: 0;
@include scale(1);
@include transition(all 0.2s ease);
&:hover {
z-index: 1;
@include scale(1.1);
.img {
opacity: 1;
-webkit-filter: grayscale(0%) brightness(1);
-moz-filter: grayscale(0%) brightness(1);
filter: grayscale(0%) brightness(1);
}
}
}
}
}
}
}

View File

@ -7,6 +7,20 @@
//
// Member Index
// ## Gerneral styles for Index
// Index 1
.index-member-1 {
.i-member-tr-head {
&:nth-child(1n+2) {
display: none;
}
th {
background: $theme-color-main;
color: #fff;
}
}
}
// Index 2
.index-member-2 {
.i-member-section {
@ -100,13 +114,6 @@
height: 125px;
}
.i-member-pic {
position: absolute;
top: -100%;
left: 0;
right: 0;
bottom: -100%;
margin: auto;
width: 100%;
}
}
}
@ -118,7 +125,7 @@
font-size: .8125rem;
}
.member-plugins {
margin-bottom: 20px;
margin: 20px 0;
a {
font-size: .8125rem;
}

View File

@ -1,225 +1,271 @@
@charset "utf-8";
@import "../initial";
.modules-menu {
font-family: $sub-font;
max-height: none;
li {
white-space: nowrap;
& > a, & > .fa {
color: #ffffff;
}
&:hover {
& > a, & > .fa {
color: $brand-primary;
text-decoration: none;
}
}
}
.modules-menu-level-0 {
margin: 0;
padding: 0;
list-style: none;
& > li {
margin: 0 -15px;
padding: 0 15px;
border-bottom: 1px solid lighten($theme-gray, 5%);
& > a {
display: inline-block;
padding: 1rem 0;
}
& > .fa {
position: absolute;
right: 10px;
@include size(45px, 45px);
cursor: pointer;
line-height: 45px;
font-size: 1.5em;
text-align: center;
}
&:hover {
& > a {
background-color: transparent;
}
}
@media (min-width: $screen-sm) {
position: relative;
margin: 0 10px;
padding: 0;
border-bottom: none;
&:first-child {
margin-left: 0;
}
&:last-child {
margin-right: 0;
.modules-menu-level-1 {
right: 15px;
left: auto;
&:before {
right: 10px;
left: auto;
}
& > li {
padding-right: 15px;
padding-left: 15px;
& > a {
padding-left: 0;
}
}
.modules-menu-level-2 {
right: 100%;
left: auto;
&:before {
right: -6px;
left: auto;
@include arrow('left', 6px, 6px, $theme-gray-darker);
}
}
}
}
& > a {
padding: 2rem 0;
border-bottom: 0.5rem solid transparent;
}
& > .fa {
position: static;
@include size(auto, auto);
padding: 0;
line-height: 1;
font-size: 1em;
cursor: default;
}
&:hover {
& > a {
padding: 2rem 0;
border-bottom-color: $brand-primary;
}
.modules-menu-level-1 {
display: block;
}
}
}
}
}
.modules-menu-level-1 {
display: none;
min-width: 100%;
margin: 0 -15px;
padding: 0;
background-color: $theme-gray-dark;
list-style: none;
z-index: 1;
& > li {
position: relative;
& + li {
border-top: 1px solid lighten($theme-gray-dark, 5%);
}
& > a {
display: inline-block;
padding: 0.7em 0 0.7em 30px;
}
& > .fa {
position: absolute;
right: 15px;
@include size(38px, 38px);
line-height: 38px;
font-size: 1.2em;
text-align: center;
cursor: pointer;
}
&:hover {
background-color: darken($brand-primary, 10%);
font-family: $sub-font;
max-height: none;
li {
white-space: nowrap;
& > a, & > .fa {
color: #FFF;
}
}
}
@media (min-width: $screen-sm) {
position: absolute;
left: 15px;
margin-top: -0.5rem;
border-top: 0.5rem solid $brand-primary;
&:before {
content: "";
display: block;
position: absolute;
top: -16px;
left: 10px;
@include arrow('bottom', 10px, 8px, $brand-primary);
}
& > li {
padding-right: 30px;
& > a {
padding-left: 15px;
}
& > .fa {
position: static;
@include size(auto, auto);
padding: 0;
margin-right: 0;
line-height: 1;
float: none;
font-size: 1em;
cursor: default;
color: #ffffff;
}
&:hover {
.modules-menu-level-2 {
display: block;
}
& > a, & > .fa {
color: $brand-primary;
text-decoration: none;
}
}
}
.fa {
&:before {
content: "\f105";
}
}
}
}
.modules-menu-level-2 {
display: none;
margin: 0;
padding: 0;
background-color: $theme-gray-darker;
list-style: none;
& > li {
& + li {
border-top: 1px solid lighten($theme-gray-darker, 5%);
}
& > a {
display: inline-block;
padding: 0.5em 0 0.5em 45px;
}
&:hover {
background-color: darken($brand-primary, 20%);
& > a {
color: #FFF;
.modules-menu-level-0 {
margin: 0;
padding: 0;
list-style: none;
& > li {
margin: 0 -15px;
padding: 0 15px;
border-bottom: 1px solid lighten($theme-gray, 5%);
& > a {
display: inline-block;
padding: 1rem 0;
}
& > .fa {
position: absolute;
right: 10px;
@include size(45px, 45px);
cursor: pointer;
line-height: 45px;
font-size: 1.5em;
text-align: center;
}
&:hover {
& > a {
background-color: transparent;
}
}
@media (min-width: $screen-sm) {
position: relative;
margin: 0 10px;
padding: 0;
border-bottom: none;
&:first-child {
margin-left: 0;
}
&:last-child {
margin-right: 0;
.modules-menu-level-1 {
right: 15px;
left: auto;
&:before {
right: 10px;
left: auto;
}
& > li {
padding-right: 15px;
padding-left: 15px;
& > a {
padding-left: 0;
}
}
.modules-menu-level-2 {
right: 100%;
left: auto;
&:before {
right: -6px;
left: auto;
@include arrow("left", 6px, 6px, $theme-gray-darker);
}
}
}
}
& > a {
padding: 2rem 0;
border-bottom: 0.5rem solid transparent;
}
& > .fa {
position: static;
@include size(auto, auto);
padding: 0;
line-height: 1;
font-size: 1em;
cursor: default;
}
&:hover {
& > a {
padding: 2rem 0;
border-bottom-color: $brand-primary;
}
.modules-menu-level-1 {
display: block;
}
}
}
}
}
}
@media (min-width: $screen-sm) {
position: absolute;
top: 0;
left: 100%;
&:before {
content: "";
display: block;
position: absolute;
top: 13px;
left: -6px;
@include arrow('right', 6px, 6px, $theme-gray-darker);
}
& > li {
padding-right: 15px;
& > a {
padding-left: 15px;
padding: 0.7em 0 0.7em 15px;
.modules-menu-level-1 {
display: none;
min-width: 100%;
margin: 0 -15px;
padding: 0;
background-color: $theme-gray-dark;
list-style: none;
z-index: 1;
& > li {
position: relative;
& + li {
border-top: 1px solid lighten($theme-gray-dark, 5%);
}
& > a {
display: inline-block;
padding: 0.7em 0 0.7em 30px;
}
& > .fa {
position: absolute;
right: 15px;
@include size(38px, 38px);
line-height: 38px;
font-size: 1.2em;
text-align: center;
cursor: pointer;
}
&:hover {
background-color: darken($brand-primary, 10%);
& > a, & > .fa {
color: #FFF;
}
}
}
}
.fa {
&:before {
content: "\f105";
@media (min-width: $screen-sm) {
position: absolute;
left: 15px;
margin-top: -0.5rem;
border-top: 0.5rem solid $brand-primary;
&:before {
content: "";
display: block;
position: absolute;
top: -16px;
left: 10px;
@include arrow("bottom", 10px, 8px, $brand-primary);
}
& > li {
padding-right: 30px;
& > a {
padding-left: 15px;
}
& > .fa {
position: static;
@include size(auto, auto);
padding: 0;
margin-right: 0;
line-height: 1;
float: none;
font-size: 1em;
cursor: default;
}
&:hover {
.modules-menu-level-2 {
display: block;
}
}
}
.fa {
&:before {
content: "\f105";
}
}
}
}
.modules-menu-level-2 {
display: none;
margin: 0;
padding: 0;
background-color: $theme-gray-darker;
list-style: none;
& > li {
& + li {
border-top: 1px solid lighten($theme-gray-darker, 5%);
}
& > a {
display: inline-block;
padding: 0.5em 0 0.5em 45px;
}
&:hover {
background-color: darken($brand-primary, 20%);
& > a {
color: #FFF;
}
}
}
@media (min-width: $screen-sm) {
position: absolute;
top: 0;
left: 100%;
&:before {
content: "";
display: block;
position: absolute;
top: 13px;
left: -6px;
@include arrow("right", 6px, 6px, $theme-gray-darker);
}
& > li {
padding-right: 15px;
& > a {
padding-left: 15px;
padding: 0.7em 0 0.7em 15px;
}
}
.fa {
&:before {
content: "\f105";
}
}
}
}
}
}
}

View File

@ -1,50 +1,57 @@
@charset "utf-8";
@import "../initial";
// Link MODULES
.widget-link {
// layout-content 下的樣式
.widget-title {
@extend .unity-title;
}
&.widget1 {
.widget-content {
line-height: 2.5em;
& + .widget-content {
border-top: 1px dotted $theme-gray-light;
}
.widget-content-title {
display: inline-block;
}
// layout-content 下的樣式
.widget-title {
@extend .unity-title;
}
// layout-footer 下的樣式
.layout-footer & {
.widget-content {
line-height: 2em;
border-top-color: $theme-gray;
}
&.widget1 {
.widget-content {
line-height: 2.5em;
& + .widget-content {
border-top: 1px dotted $theme-gray-light;
}
.widget-content-title {
display: inline-block;
}
}
// layout-footer 下的樣式
.layout-footer & {
.widget-content {
line-height: 2em;
border-top-color: $theme-gray;
}
}
}
}
}
// Link INDEX
.index-link {
.index-title {
@extend .unity-title;
}
&.index1 {
.index-content {
list-style-type: decimal-leading-zero;
list-style-position: inside;
& + .index-content {
border-top: 1px dotted $theme-gray-light;
}
.index-context {
display: inline-block;
margin: 0 0 10px 2em;
color: darken($theme-gray-light, 20%);
}
.index-title {
@extend .unity-title;
}
&.index1 {
.index-content {
list-style-type: decimal-leading-zero;
list-style-position: inside;
& + .index-content {
border-top: 1px dotted $theme-gray-light;
}
.index-context {
display: inline-block;
margin: 0 0 10px 2em;
color: darken($theme-gray-light, 20%);
}
}
}
}
}

View File

@ -4,6 +4,8 @@
@import "base/pagination";
@import "base/orbitbar-override";
@import "base/global";
@import "base/accesskey";
@import "base/go_back_top";
// Layout
@import "layout/header";
@ -12,16 +14,12 @@
@import "layout/footer";
// Modules
@import "modules/menu";
@import "modules/ad_banner";
@import "modules/announcement";
@import "modules/faq";
@import "modules/web_resource";
@import "modules/gallery";
@import "modules/archives";
@import "modules/member";
@import "modules/personal_plugin";
@import "modules/*";
// Widget
@import "widget/breadcrumb";
@import "widget/sitemenu";
.container {
width: 980px !important;
}

View File

@ -1,16 +1,20 @@
@charset "utf-8";
@import "../initial";
.widget-breadcrumb {
&.widget1 {
li {
&:last-child {
a {
color: $theme-gray-dark;
pointer-events: none;
}
}
}
}
}
&.widget1 {
li {
a {
font-size: 0.8125rem;
}
&:last-child {
a {
color: $theme-gray-dark;
pointer-events: none;
}
}
}
}
}

View File

@ -1,18 +1,22 @@
@charset "utf-8";
@import "../initial";
.sitemenu-wrap {
padding: 10px 0;
@include clearfix;
.sitemenu__title {
.sitemenu-title {
display: none;
}
.sitemenu__list {
.sitemenu-list {
margin: 0;
padding: 0;
list-style: none;
}
.sitemenu__item.level-1 {
.sitemenu-item.level-1 {
font-size: 0.8125rem;
position: relative;
float: left;
@ -23,31 +27,37 @@
color: #fff;
border-radius: .2em;
background: $theme-color-second;
&:hover {
background: darken($theme-color-second, 10%);
}
}
.sitemenu__link.level-1 {
.sitemenu-link.level-1 {
margin-right: .25rem;
color: #fff;
}
.sitemenu___dropdown-toggle {
.sitemenu-dropdown-toggle {
font-size: 0.75rem;
padding: 2px .3125rem;
cursor: pointer;
}
// sitemenu dropdown
.sitemenu__list.dropdown-menu {
.sitemenu-list.dropdown-menu {
min-width: 100%;
margin-top: 4px;
border: none;
border-radius: .2em;
background: $theme-color-main;
}
.sitemenu__link.level-2 {
.sitemenu-link.level-2 {
color: #fff;
font-size: 0.8125rem;
padding: 4px 0.625rem;
&:hover {
background: lighten($theme-color-second, 5%);
}

View File

@ -12,6 +12,7 @@
<header class="navbar layout-header" role="navigation">
<div class="container">
<div class="header-nav" >
<a id="accesskey_top" accesskey="Q" href="/<%= "#{locale.to_s}" %>/accesskey" title="Toolbar">:::</a>
{{header-data}}
</div>
<div class="navbar-header">
@ -21,9 +22,10 @@
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/"><img class="site-logo" src="{{logo_url}}"> {{site_name}}</a>
<a class="navbar-brand" href="/"><img class="site-logo" src="{{logo_url}}" alt="Site Logo"> {{site_name}}</a>
</div>
<div class="collapse navbar-collapse modules-menu" id="layout-navigation">
<a id="accesskey_menu" accesskey="M" href="/<%= "#{locale.to_s}" %>/accesskey" title="Main menu">:::</a>
<%= render_menu %>
</div>
</div>

View File

@ -8,6 +8,7 @@
<%= render_header %>
<section class="layout-slide" data-pp="300"></section>
<div class="layout-content">
<a id="accesskey_content" accesskey="C" href="/<%= "#{locale.to_s}" %>/accesskey" title="Content">:::</a>
<div class="layout-content-inner container">
<section class="layout-content-box" data-pp="1"></section>
<div class="row">

View File

@ -1,27 +1,24 @@
<table class="table table-hover table-striped active-index">
<caption>
<h3>{{page-title}}</h3>
</caption>
<thead>
<tr>
<th class="col-md-2">{{th_category}}</th>
<th class="col-md-2">{{th_act_time_range}}</th>
<th class="col-md-5">{{th_title}}</th>
<th class="col-md-2">{{th_sign_up_time_range}}</th>
<th class="col-md-2">{{th_sign_up}}</th>
</tr>
</thead>
<tbody data-level="0" data-list="acts">
<tr>
<td>{{category}}</td>
<td>{{act_start_date}} ~
<br /> {{act_end_date}}</td>
<td>{{title}}</td>
<td>{{sign_start_date}} ~
<br /> {{sign_end_date}}</td>
<td>{{sign_up}}</i>
</td>
</tr>
</tbody>
<caption>
<h3>{{page-title}}</h3>
</caption>
<thead>
<tr>
<th class="col-md-2">{{th_category}}</th>
<th class="col-md-2">{{th_act_time_range}}</th>
<th class="col-md-5">{{th_title}}</th>
<th class="col-md-2">{{th_sign_up_time_range}}</th>
<th class="col-md-2">{{th_sign_up}}</th>
</tr>
</thead>
<tbody data-level="0" data-list="acts">
<tr>
<td>{{category}}</td>
<td>{{act_start_date}} ~ <br /> {{act_end_date}}</td>
<td>{{title}}</td>
<td>{{sign_start_date}} ~ <br /> {{sign_end_date}}</td>
<td>{{sign_up}}</i></td>
</tr>
</tbody>
</table>
{{pagination_goes_here}}

View File

@ -5,6 +5,7 @@
data-cycle-slides=".w-ad-banner__slide"
data-cycle-log="false"
data-overlay=".w-ad-banner__caption"
data-cycle-auto-height="calc"
data-pager=".w-ad-banner__pager-1"
data-pager-template="<li><a href='#'></a></li>"
data-pager-active-class="active-slide"
@ -14,8 +15,9 @@
data-cycle-title="{{title}}"
data-cycle-desc="{{context}}"
data-overlay-template="<h2>{{title}}</h2>{{desc}}"
data-target="{{target}}"
>
<img class="w-ad-banner__image banner-responsive" src="{{image_link}}">
<img class="w-ad-banner__image banner-responsive" src="{{image_link}}" alt="{{alt_title}}">
</div>
</div>
<div class="w-ad-banner__caption"></div>

View File

@ -4,6 +4,7 @@
data-level="0"
data-cycle-slides=".w-ad-banner__slide"
data-cycle-log="false"
data-cycle-auto-height="calc"
data-overlay=".w-ad-banner__caption"
data-pager=".w-ad-banner__pager"
data-pager-template="<li><a href='#'></a></li>"

View File

@ -7,6 +7,7 @@
data-cycle-log="false"
data-overlay=".w-ad-banner__caption"
data-cycle-auto-height="640:360"
data-cycle-auto-height="calc"
data-pager=".w-ad-banner__pager-2"
data-pager-template="<li><a href='#'></a></li>"
data-pager-active-class="active-slide"

View File

@ -4,6 +4,7 @@
data-level="0"
data-cycle-slides=".w-ad-banner__slide"
data-cycle-log="false"
data-cycle-auto-height="calc"
data-pager=".w-ad-banner__pager-3"
data-pager-template="<li><a href='#'></a></li>"
data-pager-active-class="active-slide"
@ -13,8 +14,9 @@
data-cycle-title="{{title}}"
data-cycle-desc="{{context}}"
data-overlay-template="<h2>{{title}}</h2>{{desc}}"
data-target="{{target}}"
>
<img class="w-ad-banner__image banner-responsive" src="{{image_link}}">
<img class="w-ad-banner__image banner-responsive" src="{{image_link}}" alt="{{alt_title}}">
</div>
</div>
<ul class="w-ad-banner__pager-3 banner-pager"></ul>

View File

@ -4,11 +4,13 @@
data-level="0"
data-cycle-slides=".w-ad-banner__slide"
data-cycle-log="false"
data-cycle-auto-height="calc"
>
<div class="w-ad-banner__slide {{class}}"
data-link="{{link}}"
data-target="{{target}}"
>
<img class="w-ad-banner__image banner-responsive" src="{{image_link}}">
<img class="w-ad-banner__image banner-responsive" src="{{image_link}}" alt="{{alt_title}}">
</div>
</div>
</div>

View File

@ -6,7 +6,7 @@
"zh_tw" : "1. 橫幅輪播 ( 圖片, 圖片說明文字, 導航圖示 )",
"en" : "1. Carousel ( image, description, navigation )"
},
"thumbnail" : "thumbnail-block.png"
"thumbnail" : "thumb.png"
},
{
"filename" : "ad_banner_widget2_video",
@ -14,7 +14,7 @@
"zh_tw" : "2. 橫幅輪播 + Youtube影片 ( 圖片, Youtube影片, 導航圖示 )",
"en" : "2. Carousel ( image, Youtube video, navigation )"
},
"thumbnail" : "thumbnail-block.png"
"thumbnail" : "thumb.png"
},
{
"filename" : "ad_banner_widget3",
@ -22,7 +22,7 @@
"zh_tw" : "3. 橫幅輪播 ( 圖片, 導航圖示 )",
"en" : "3. Carousel ( image, navigation )"
},
"thumbnail" : "thumbnail-block.png"
"thumbnail" : "thumb.png"
},
{
"filename" : "ad_banner_widget4",
@ -30,7 +30,7 @@
"zh_tw" : "4. 廣告輪播 ( 圖片 )",
"en" : "4. AD banner ( image )"
},
"thumbnail" : "thumbnail-block.png"
"thumbnail" : "thumb.png"
}
]

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

View File

@ -26,4 +26,7 @@
<p class="w-annc__subtitle">{{subtitle}}</p>
</li>
</ul>
<div class="w-annc__more-wrap clearfix">
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}">Read more</a>
</div>
</div>

View File

@ -1,19 +1,22 @@
<div class="w-annc widget-announcement-10">
<div class="w-annc widget-announcement-10">
<h3 class="w-annc__widget-title">
<span>{{widget-title}}</span>
</h3>
<ul class="w-annc__list" data-level="0" data-list="announcements">
<li class="w-annc__item row">
<h4 class="w-annc__entry-title col-sm-9">
<h4 class="w-annc__entry-title col-sm-9">
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label {{status-class}}">{{status}}</span>
</span>
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</h4>
<span class="w-annc__postdate-wrap col-sm-3" date-format="%Y-%m-%d">
<span class="w-annc__postdate-wrap col-sm-3" date-format="%Y-%m-%d">
<i class="fa fa-calendar-o"></i>
<span class="w-annc__postdate">{{postdate}}</span>
</span>
</li>
</ul>
<div class="w-annc__more-wrap clearfix">
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}">Read more</a>
</div>
</div>

View File

@ -16,4 +16,7 @@
</h4>
</li>
</ul>
<div class="w-annc__more-wrap clearfix">
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}">Read more</a>
</div>
</div>

View File

@ -21,4 +21,7 @@
</tr>
</tbody>
</table>
<div class="w-annc__more-wrap clearfix">
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}">Read more</a>
</div>
</div>

View File

@ -21,4 +21,7 @@
</tr>
</tbody>
</table>
<div class="w-annc__more-wrap clearfix">
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}">Read more</a>
</div>
</div>

View File

@ -3,19 +3,19 @@
<span>{{widget-title}}</span>
</h3>
<div class="w-annc__inner row">
<div class="w-annc__img-wrap col-md-4 bullseye">
<div class="w-annc__img-wrap col-xs-4 bullseye">
<img class="w-annc__img" src="{{main_picture}}" alt="{{main_picture_description}}" title="{{main_picture_description}}">
</div>
<ul class="w-annc__list col-md-8" data-level="0" data-list="announcements">
<ul class="w-annc__list col-xs-8" data-level="0" data-list="announcements">
<li class="w-annc__item">
<div class="w-annc__content row">
<h4 class="w-annc__entry-title col-md-9">
<h4 class="w-annc__entry-title col-xs-9">
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label {{status-class}}">{{status}}</span>
</span>
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</h4>
<span class="w-annc__postdate-wrap col-md-3" date-format="%Y-%m-%d">
<span class="w-annc__postdate-wrap col-xs-3" date-format="%Y-%m-%d">
<i class="fa fa-calendar-o"></i>
<span class="w-annc__postdate">{{postdate}}</span>
</span>
@ -23,5 +23,7 @@
</li>
</ul>
</div>
<div class="w-annc__more-wrap clearfix">
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}">Read more</a>
</div>
</div>

View File

@ -28,4 +28,7 @@
</div>
</li>
</ul>
<div class="w-annc__more-wrap clearfix">
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}">Read more</a>
</div>
</div>

View File

@ -24,8 +24,11 @@
<p class="w-annc__subtitle">{{subtitle}}</p>
</div>
<div class="w-annc__img-wrap col-sm-4 bullseye">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}"">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
</div>
</li>
</ul>
<div class="w-annc__more-wrap clearfix">
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}">Read more</a>
</div>
</div>

View File

@ -28,4 +28,7 @@
</div>
</li>
</ul>
<div class="w-annc__more-wrap clearfix">
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}">Read more</a>
</div>
</div>

View File

@ -1,8 +1,8 @@
<div class="w-annc widget-announcement-5">
<div class="w-annc widget-announcement-5">
<h3 class="w-annc__widget-title">
<span>{{widget-title}}</span>
</h3>
<ul class="w-annc__list row" data-level="0" data-list="announcements">
<ul class="w-annc__list row" data-level="0" data-list="announcements">
<li class="w-annc__item">
<div class="w-annc__content-wrap">
<div class="w-annc__meta">
@ -25,4 +25,7 @@
</div>
</li>
</ul>
<div class="w-annc__more-wrap clearfix">
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}">Read more</a>
</div>
</div>

View File

@ -1,23 +1,26 @@
<div class="w-annc widget-announcement-6">
<div class="w-annc widget-announcement-6">
<h3 class="w-annc__widget-title">
<span>{{widget-title}}</span>
</h3>
<ul class="w-annc__list" data-level="0" data-list="announcements">
<li class="w-annc__item row">
<li class="w-annc__item row">
<span class="w-annc__category-wrap col-sm-2">
<i class="fa fa-tasks"></i>
<span class="w-annc__category">{{category}}</span>
</span>
<h4 class="w-annc__entry-title col-sm-8">
<h4 class="w-annc__entry-title col-sm-8">
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label {{status-class}}">{{status}}</span>
</span>
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</h4>
<span class="w-annc__postdate-wrap col-sm-2" date-format="%Y-%m-%d">
<span class="w-annc__postdate-wrap col-sm-2" date-format="%Y-%m-%d">
<i class="fa fa-calendar-o"></i>
<span class="w-annc__postdate">{{postdate}}</span>
</span>
</li>
</ul>
<div class="w-annc__more-wrap clearfix">
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}">Read more</a>
</div>
</div>

View File

@ -1,23 +1,26 @@
<div class="w-annc widget-announcement-7">
<div class="w-annc widget-announcement-7">
<h3 class="w-annc__widget-title">
<span>{{widget-title}}</span>
</h3>
<ul class="w-annc__list" data-level="0" data-list="announcements">
<li class="w-annc__item row">
<span class="w-annc__postdate-wrap col-sm-2" date-format="%Y-%m-%d">
<li class="w-annc__item row">
<span class="w-annc__postdate-wrap col-sm-2" date-format="%Y-%m-%d">
<i class="fa fa-calendar-o"></i>
<span class="w-annc__postdate">{{postdate}}</span>
</span>
<h4 class="w-annc__entry-title col-sm-8">
<h4 class="w-annc__entry-title col-sm-8">
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label {{status-class}}">{{status}}</span>
</span>
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</h4>
<span class="w-annc__category-wrap col-sm-2">
<span class="w-annc__category-wrap col-sm-2">
<i class="fa fa-tasks"></i>
<span class="w-annc__category">{{category}}</span>
</span>
</li>
</ul>
<div class="w-annc__more-wrap clearfix">
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}">Read more</a>
</div>
</div>

View File

@ -1,13 +1,13 @@
<div class="w-annc widget-announcement-8">
<div class="w-annc widget-announcement-8">
<h3 class="w-annc__widget-title">
<span>{{widget-title}}</span>
</h3>
<table class="w-annc__table table">
<table class="w-annc__table table">
<thead>
<tr>
<th class="w-annc__th w-annc__th--category">{{category-head}}</th>
<th class="w-annc__th w-annc__th--title">{{title-head}}</th>
<th class="w-annc__th w-annc__th--date">{{date-head}}</th>
<th class="w-annc__th w-annc__th--category">{{category-head}}</th>
<th class="w-annc__th w-annc__th--title">{{title-head}}</th>
<th class="w-annc__th w-annc__th--date">{{date-head}}</th>
</tr>
</thead>
<tbody data-level="0" data-list="announcements">
@ -15,7 +15,7 @@
<td class="w-annc__category">{{category}}</td>
<td>
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
</span>
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</td>
@ -23,4 +23,7 @@
</tr>
</tbody>
</table>
<div class="w-annc__more-wrap clearfix">
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}">Read more</a>
</div>
</div>

View File

@ -1,13 +1,13 @@
<div class="w-annc widget-announcement-9">
<div class="w-annc widget-announcement-9">
<h3 class="w-annc__widget-title">
<span>{{widget-title}}</span>
</h3>
<table class="w-annc__table table">
<table class="w-annc__table table">
<thead>
<tr>
<th class="w-annc__th w-annc__th--date">{{date-head}}</th>
<th class="w-annc__th w-annc__th--title">{{title-head}}</th>
<th class="w-annc__th w-annc__th--category">{{category-head}}</th>
<th class="w-annc__th w-annc__th--date">{{date-head}}</th>
<th class="w-annc__th w-annc__th--title">{{title-head}}</th>
<th class="w-annc__th w-annc__th--category">{{category-head}}</th>
</tr>
</thead>
<tbody data-level="0" data-list="announcements">
@ -15,7 +15,7 @@
<td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
<td>
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
</span>
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</td>
@ -23,4 +23,7 @@
</tr>
</tbody>
</table>
<div class="w-annc__more-wrap clearfix">
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}">Read more</a>
</div>
</div>

View File

@ -12,7 +12,7 @@
"filename" : "annc_index2",
"name" : {
"zh_tw" : "2. 標準標題列表-1B ( 模組標題, 類別, 狀態, 標題, 日期, 瀏覽人次 )",
"en" : "2. Standard Title List-1B (widget-title, category, status, title, postdate, view-counts)"
"en" : "2. Standard Title List-1B (widget-title, category, status, title, postdate, view-count)"
},
"thumbnail" : "annc_index2_thumbs.png"
},
@ -28,7 +28,7 @@
"filename" : "annc_index4",
"name" : {
"zh_tw" : "4. 標準表格列表-2B ( 模組標題, 日期, 狀態, 標題, 類別, 瀏覽人次 )",
"en" : "4. Standard Table List-2 (widget-title, postdate, status, title, category, view-counts)"
"en" : "4. Standard Table List-2 (widget-title, postdate, status, title, category, view-count)"
},
"thumbnail" : "annc_index4_thumbs.png"
},
@ -116,15 +116,15 @@
"filename" : "annc_index15",
"name" : {
"zh_tw" : "15. 精簡表格列表-3 ( 模組標題, 日期, 狀態, 標題, 瀏覽人次 )",
"en" : "15. Simple Table List (widget-title, postdate, status, title, view-counts)"
"en" : "15. Simple Table List (widget-title, postdate, status, title, view-count)"
},
"thumbnail" : "annc_index15_thumbs.png"
},
{
"filename" : "annc_index16",
"name" : {
"zh_tw" : "16. 連結 + 附件表格列表 ( 模組標題, 日期, 狀態, 標題 )",
"en" : "16. Table List including Links and attachments (widget-title, postdate, status, title, view-counts)"
"zh_tw" : "16. 連結 + 附件表格列表 ( 模組標題, 類別, 狀態, 標題 )",
"en" : "16. Table List including Links and attachments (widget-title, category, status, title, view-count)"
},
"thumbnail" : "annc_index16_thumbs.png"
}
@ -238,7 +238,7 @@
"filename" : "annc_widget14",
"name" : {
"zh_tw" : "14. 一圖 + 標題列表 ( 模組標題, 圖片, 狀態, 標題, 日期 )",
"en" : "14. 1 Image + Title List (widget-title, status, title, postdate)"
"en" : "14. 1 Image + Title List (widget-title, image, status, title, postdate)"
},
"thumbnail" : "annc_widget14_thumbs.png"
}

View File

@ -26,7 +26,7 @@
<li class="s-annc__related-file">
<i class="fa fa-fw fa-paperclip"></i>
<div class="s-annc__related-file-list" data-list="bulletin_files" data-level="0">
<a class="s-annc__flie-title btn btn-default btn-sm" href="{{file_url}}" target="_blank">{{file_title}}</a>
<a class="s-annc__flie-title btn btn-default btn-sm" href="{{file_url}}">{{file_title}}</a>
</div>
</li>

View File

@ -1,10 +1,10 @@
<div class="w-archive widget-archive-1" module="archive" data-ps="">
<div class="w-archive widget-archive-1" module="archive" data-ps="">
<h3 class="w-archive__widget-title">{{widget-title}}</h3>
<ul class="w-archive__list level-1" data-list="categories" data-level="0">
<li class="w-archive__item level-1">
<ul class="w-archive__list level-1" data-list="categories" data-level="0">
<li class="w-archive__item level-1">
<h4 class="w-archive__item-heading">{{category-title}}</h4>
<ul class="w-archive__list level-2" data-list="archives" data-level="1">
<li class="w-archive__item level-2">
<ul class="w-archive__list level-2" data-list="archives" data-level="1">
<li class="w-archive__item level-2">
<a class="w-archive__link" href="{{archive_url}}">{{archive-title}}</a>
</li>
</ul>

View File

@ -1,4 +1,4 @@
<div class="i-archive index-archive-1">
<div class="i-archive index-archive-1">
<h3 class="i-archive__page-title">{{page-title}}</h3>
<ul class="i-archive__list" data-list="categories" data-level="0">
<li class="i-archive__item">
@ -8,13 +8,13 @@
<dt class="i-archive__category-item">
<sapn class="i-archive__archive-title">{{archive-title}}</span>
<span class="i-archive__status-wrap" data-list="statuses" data-level="2">
<span class="i-archive__status label status {{status-class}}">{{status}}</span>
<span class="i-archive__status label status {{status-class}}">{{status}}</span>
</span>
</dt>
<dl class="i-archive__file-list" data-list="files" data-level="2">
<dd class="i-archive__file-wrap">
<a class="i-archive__file-name" href="{{file-url}}" target="_blank">{{file-name}}</a>
<span class="i-archive__file-type label label-primary">{{file-type}}</span>
<span class="i-archive__file-type label label-primary">{{file-type}}</span>
</dd>
</dl>
</div>

View File

@ -12,7 +12,7 @@
</a>
</h4>
</div>
<div id="collapse" class="panel-collapse collapse in">
<div id="collapse" class="panel-collapse collapse">
<div class="panel-body">
<dl class="dl-horizontal index-archive-item-group" data-list="archives" data-level="1">
<dt class="index-archive-item-list">
@ -21,7 +21,7 @@
<span class="label status {{status-class}}">{{status}}</span>
</span>
</dt>
<dl class="index-archives-files-list" data-list="files" data-level="2">
<dl class="index-archives-files-list" data-list="files" data-level="2">
<dd>
<a href="{{file-url}}" class="index-archives-files-item" target="_blank">{{file-name}}</a>
<span class="label label-primary">{{file-type}}</span>

View File

@ -3,36 +3,36 @@
{
"filename" : "archive_index1",
"name" : {
"zh_tw" : "1. 列表",
"en" : "1. List"
"zh_tw" : "1. 列表 ( 模組標題, 類別標題, 檔案名稱, 下載連結 )",
"en" : "1. List (widget-title, category, filename, download link)"
},
"thumbnail" : "thumbnail-block-list.png"
"thumbnail" : "thumb.png"
},
{
"filename" : "archive_index2",
"name" : {
"zh_tw" : "2. 互動式列表",
"en" : "2. Accordion list"
"zh_tw" : "2. 手風琴式列表 ( 模組標題, 類別標題, 檔案名稱, 下載連結 )",
"en" : "2. Accordion list (widget-title, category, filename, download link)"
},
"thumbnail" : "thumbnail-block.png"
"thumbnail" : "thumb.png"
}
],
"widgets" : [
{
"filename" : "archive_widget1",
"name" : {
"zh_tw" : "1. 列表",
"en" : "1. List"
"zh_tw" : "1. 列表 ( 模組標題, 類別標題, 下載頁面連結 )",
"en" : "1. List (widget-title, category, link of download page)"
},
"thumbnail" : "thumbnail-block.png"
"thumbnail" : "thumb.png"
},
{
"filename" : "archive_widget2",
"name" : {
"zh_tw" : "2. 互動式列表",
"en" : "2. Accordion list"
"zh_tw" : "2. 手風琴式列表 ( 模組標題, 類別標題, 下載頁面連結 )",
"en" : "2. Accordion list (widget-title, category, link of download page)"
},
"thumbnail" : "thumbnail-block.png"
"thumbnail" : "thumb.png"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

View File

@ -1,40 +0,0 @@
<div id="orbit_calendar">
<div id="sec1">
<div class="btn-toolbar" id="navigation">
<div id="calendar-nav">
<div class="btn-group">
<button class="btn btn-default btn-sm" id="prev_month_btn">
<i class="icon-chevron-left"></i>
</button>
<button class="btn btn-default btn-sm" id="next_month_btn">
<i class="icon-chevron-right"></i>
</button>
<button class="btn btn-default btn-sm" id="today_btn">Today</button>
</div>
</div>
</div>
<div class="form-inline" id="range_selection"></div>
</div>
<div id='sec3' class="btn-toolbar">
<div class="btn-group calendar_mode">
<button class="btn btn-default mode_switch btn-sm" data-mode="agendaDay" >day</button>
<button class="btn btn-default mode_switch btn-sm" data-mode="agendaWeek" >week</button>
<button class="btn btn-default active mode_switch btn-sm" data-mode="month" >month</button>
<button class="btn btn-default mode_switch btn-sm" data-mode="agenda" >agenda</button>
</div>
<button id="refresh_btn" class="btn btn-default btn-sm">
<i class="icons-cycle"></i>
</button>
</div>
<div id="view_holder">
<h3 id="current_title" class="current_day_title"></h3>
<div id="calendar"></div>
<div id="calendar_agenda"></div>
</div>
</div>
<div id="event_quick_view" class="modal" style="width: 300px; display:none; margin:0 0 0 0;"></div>
<div id="calendar-loading"></div>
<script type="text/javascript">
var calendar = new Calendar("#calendar","{{page_id}}");
</script>

View File

@ -1,16 +0,0 @@
<div class="widget-faqs widget1">
<h3 class="widget-title">
<span>{{widget-title}}</span>
</h3>
<ul class="list-unstyled" data-list="faqs" data-level="0">
<li class="widget-content">
<a class="widget-content-title" href="{{link_to_show}}" target="_blank">{{title}}</a>
<span data-list="statuses" data-level="1">
<span class="label status {{status-class}}">{{status}}</span>
</span>
</li>
</ul>
<p class="more text-right">
<a class="btn btn-sm btn-info" href="{{more_url}}">More</a>
</p>
</div>

View File

@ -1,16 +0,0 @@
<div class="index-faqs index1">
<h3 class="index-title">
<span>{{page-title}}</span>
</h3>
<ul class="list-unstyled" data-list="faqs" data-level="0">
<li class="index-content">
<h4>
<a class="index-content-title" href="{{link_to_show}}">{{question}}</a>
<span data-list="statuses" data-level="1">
<span class="label status {{status-class}}">{{status}}</span>
</span>
</h4>
</li>
</ul>
</div>
{{pagination_goes_here}}

Some files were not shown because too many files have changed in this diff Show More