forked from saurabh/orbit4-5
Merge branch 'development' of gitlab.tp.rulingcom.com:saurabh/orbit4-5 into nccu
This commit is contained in:
commit
ceb110e030
2
Gemfile
2
Gemfile
|
@ -34,7 +34,7 @@ gem 'mongoid', github: "mongoid/mongoid"
|
||||||
gem "mini_magick", "3.5.0"
|
gem "mini_magick", "3.5.0"
|
||||||
gem 'carrierwave'
|
gem 'carrierwave'
|
||||||
gem 'carrierwave-mongoid', :require => 'carrierwave/mongoid'
|
gem 'carrierwave-mongoid', :require => 'carrierwave/mongoid'
|
||||||
|
gem 'zip-zip'
|
||||||
gem 'kaminari'
|
gem 'kaminari'
|
||||||
gem "impressionist"
|
gem "impressionist"
|
||||||
gem "chartkick"
|
gem "chartkick"
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
|
@ -1,8 +1,16 @@
|
||||||
(function($) {
|
(function($) {
|
||||||
$("document").ready(function(){
|
$("document").ready(function(){
|
||||||
// Get link data-attribute and make the banner clickable
|
// Get link data-attribute and make the banner clickable
|
||||||
$('.w-ad-banner__slide').not('[data-link=""]').not(".youtube").addClass('cursor').on("click",function(){
|
$('.w-ad-banner__slide')
|
||||||
window.open($(this).data("link"),"_blank");
|
.not('[data-link=""]')
|
||||||
|
.not(".youtube")
|
||||||
|
.addClass('cursor')
|
||||||
|
.on("click",function(){
|
||||||
|
if( $(this).data('target') === '_blank' ) {
|
||||||
|
window.open($(this).data("link"), "_blank");
|
||||||
|
} else {
|
||||||
|
window.location.href = ($(this).data("link"));
|
||||||
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}(jQuery));
|
}(jQuery));
|
|
@ -25,6 +25,9 @@ var FormValidator = function(form){
|
||||||
nospace : function(value){
|
nospace : function(value){
|
||||||
return (/\s/.test(value) ? false : true);
|
return (/\s/.test(value) ? false : true);
|
||||||
},
|
},
|
||||||
|
lowercase : function(value){
|
||||||
|
return (value == value.toLowerCase() ? true : false);
|
||||||
|
},
|
||||||
email : function(value){
|
email : function(value){
|
||||||
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
||||||
return re.test(value);
|
return re.test(value);
|
||||||
|
@ -40,35 +43,39 @@ var FormValidator = function(form){
|
||||||
|
|
||||||
var _attachSubmitHandler = function(){
|
var _attachSubmitHandler = function(){
|
||||||
fv.form.on("submit",function(){
|
fv.form.on("submit",function(){
|
||||||
failed_elements = [];
|
return fv.isFormValidated();
|
||||||
$.each(elements_data,function(key,element){
|
})
|
||||||
var validators = element.validators,
|
}
|
||||||
messages = element.messages,
|
|
||||||
el = fv.form.find("#" + key);
|
this.isFormValidated = function(){
|
||||||
for(i = 0; i < validators.length; i++){
|
failed_elements = [];
|
||||||
var error_span = (fv.form.find("div[for=" + key + "]").length ? $("div[for=" + key + "]") : $("<div class='validator_error_class text-error' for='" + key + "'></div>"));
|
$.each(elements_data,function(key,element){
|
||||||
if(typeof fv.validate_functions[validators[i]] == "function"){
|
var validators = element.validators,
|
||||||
if(!fv.validate_functions[validators[i]](el.val(),el)){
|
messages = element.messages,
|
||||||
error_span.text(messages[i]);
|
el = fv.form.find("#" + key);
|
||||||
el.after(error_span);
|
for(i = 0; i < validators.length; i++){
|
||||||
failed_elements.push(el);
|
var error_span = (fv.form.find("div[for=" + key + "]").length ? $("div[for=" + key + "]") : $("<div class='validator_error_class text-error' for='" + key + "'></div>"));
|
||||||
break;
|
if(typeof fv.validate_functions[validators[i]] == "function"){
|
||||||
}else{
|
if(!fv.validate_functions[validators[i]](el.val(),el)){
|
||||||
error_span.remove();
|
error_span.text(messages[i]);
|
||||||
}
|
el.after(error_span);
|
||||||
|
failed_elements.push(el);
|
||||||
|
break;
|
||||||
}else{
|
}else{
|
||||||
console.info("Not validating for " + validators[i] + ". Skipping.");
|
error_span.remove();
|
||||||
}
|
}
|
||||||
|
}else{
|
||||||
|
console.info("Not validating for " + validators[i] + ". Skipping.");
|
||||||
}
|
}
|
||||||
})
|
|
||||||
if(failed_elements.length){
|
|
||||||
var offset = failed_elements[0].offset().top - fv.form.offset().top + fv.form.scrollTop();
|
|
||||||
fv.form.parent().animate({scrollTop:offset-50}, '300', 'swing');
|
|
||||||
return false;
|
|
||||||
}else{
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
if(failed_elements.length){
|
||||||
|
var offset = failed_elements[0].offset().top - fv.form.offset().top + fv.form.scrollTop();
|
||||||
|
fv.form.parent().animate({scrollTop:offset-50}, '300', 'swing');
|
||||||
|
return false;
|
||||||
|
}else{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var _putFieldsValidatorAndMessage = function(){
|
var _putFieldsValidatorAndMessage = function(){
|
||||||
|
|
|
@ -122,6 +122,20 @@ legend {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
}
|
}
|
||||||
|
#sidebar .sidebar-nav .license-denied {
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
#sidebar .sidebar-nav .license-denied > span {
|
||||||
|
position: relative;
|
||||||
|
width: 60px;
|
||||||
|
}
|
||||||
|
#sidebar .sidebar-nav .license-denied > span:before {
|
||||||
|
position: absolute;
|
||||||
|
top: 10px;
|
||||||
|
left: 12px;
|
||||||
|
font-size: 3.1em;
|
||||||
|
color: rgba(205, 10, 10, 0.46);
|
||||||
|
}
|
||||||
#sidebar > h2.position {
|
#sidebar > h2.position {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
width: 61px;
|
width: 61px;
|
||||||
|
@ -188,6 +202,7 @@ legend {
|
||||||
}
|
}
|
||||||
#sidebar .sidebar-nav > li a {
|
#sidebar .sidebar-nav > li a {
|
||||||
display: block;
|
display: block;
|
||||||
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
#sidebar .sidebar-nav > li i {
|
#sidebar .sidebar-nav > li i {
|
||||||
font-size: 1.6em;
|
font-size: 1.6em;
|
||||||
|
|
|
@ -318,7 +318,7 @@ $orbit-bar-bgc-lighter: lighten($orbit-bar-bgc, 20%) !default;
|
||||||
display: none;
|
display: none;
|
||||||
top: 0;
|
top: 0;
|
||||||
margin: 0 2em;
|
margin: 0 2em;
|
||||||
padding: 0.3em 0;
|
padding: 0;
|
||||||
color: #FFF;
|
color: #FFF;
|
||||||
font-size: 1.4em;
|
font-size: 1.4em;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
@ -328,6 +328,9 @@ $orbit-bar-bgc-lighter: lighten($orbit-bar-bgc, 20%) !default;
|
||||||
a {
|
a {
|
||||||
color: #FFF;
|
color: #FFF;
|
||||||
}
|
}
|
||||||
|
.page-main & {
|
||||||
|
padding: 0.3em 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.orbit-bar-search-sign-language {
|
.orbit-bar-search-sign-language {
|
||||||
float: right;
|
float: right;
|
||||||
|
@ -339,6 +342,7 @@ $orbit-bar-bgc-lighter: lighten($orbit-bar-bgc, 20%) !default;
|
||||||
input[type="search"] {
|
input[type="search"] {
|
||||||
color: $orbit-bar-bgc-lighter;
|
color: $orbit-bar-bgc-lighter;
|
||||||
border: none;
|
border: none;
|
||||||
|
margin-bottom: 0;
|
||||||
border-radius: 1.7em;
|
border-radius: 1.7em;
|
||||||
line-height: 1.3em;
|
line-height: 1.3em;
|
||||||
padding: 0.2em 0.8em;
|
padding: 0.2em 0.8em;
|
||||||
|
|
|
@ -3,7 +3,7 @@ class Admin::ModuleStoreController < OrbitAdminController
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@extensions = []
|
@extensions = []
|
||||||
@downloaded_extensions = get_downloaded_extension
|
@downloaded_extensions = []
|
||||||
# if current_site.site_token?
|
# if current_site.site_token?
|
||||||
# if current_site.store_confirmation
|
# if current_site.store_confirmation
|
||||||
# @extensions = get_extensions
|
# @extensions = get_extensions
|
||||||
|
|
|
@ -106,7 +106,9 @@ class Admin::SitesController < OrbitAdminController
|
||||||
else
|
else
|
||||||
result = "success"
|
result = "success"
|
||||||
# Bundler.with_clean_env { `cd #{Rails.root} && bundle update` }
|
# Bundler.with_clean_env { `cd #{Rails.root} && bundle update` }
|
||||||
Bundler.with_clean_env { `cd #{Rails.root} && BUNDLE_GEMFILE=built_in_extensions.rb bundle update && bundle` }
|
Bundler.with_clean_env { `cd #{Rails.root} && BUNDLE_GEMFILE=built_in_extensions.rb bundle update && bundle` }
|
||||||
|
Bundler.with_clean_env { `cd #{Rails.root} && BUNDLE_GEMFILE=downloaded_extensions.rb bundle update && bundle` }
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
render :text => result
|
render :text => result
|
||||||
|
@ -117,6 +119,7 @@ class Admin::SitesController < OrbitAdminController
|
||||||
|
|
||||||
def bundle_install
|
def bundle_install
|
||||||
Bundler.with_clean_env { `cd #{Rails.root} && BUNDLE_GEMFILE=built_in_extensions.rb bundle update && bundle` }
|
Bundler.with_clean_env { `cd #{Rails.root} && BUNDLE_GEMFILE=built_in_extensions.rb bundle update && bundle` }
|
||||||
|
Bundler.with_clean_env { `cd #{Rails.root} && BUNDLE_GEMFILE=downloaded_extensions.rb bundle update && bundle` }
|
||||||
%x(kill -s USR2 `cat tmp/pids/unicorn.pid`)
|
%x(kill -s USR2 `cat tmp/pids/unicorn.pid`)
|
||||||
sleep 5
|
sleep 5
|
||||||
render :nothing => true
|
render :nothing => true
|
||||||
|
|
|
@ -139,29 +139,44 @@ class MembersController < ApplicationController
|
||||||
plugins = OrbitApp::Plugin::Registration.all rescue nil
|
plugins = OrbitApp::Plugin::Registration.all rescue nil
|
||||||
plugin_list = plugins.collect.with_index do |plugin, idx|
|
plugin_list = plugins.collect.with_index do |plugin, idx|
|
||||||
intro = PersonalPluginIntro.find_by(member_profile_id: member.id, _type: "#{plugin.app_name}Intro") rescue nil
|
intro = PersonalPluginIntro.find_by(member_profile_id: member.id, _type: "#{plugin.app_name}Intro") rescue nil
|
||||||
if intro.nil? or intro.complete_list
|
if !intro.blank?
|
||||||
plugin_data = plugin.app_name.constantize.where(member_profile_id: member) rescue nil
|
if !intro.complete_list.blank?
|
||||||
pd = plugin_data.collect do |p|
|
plugin_data = plugin.app_name.constantize.where(member_profile_id: member) rescue nil
|
||||||
slug_title = ["JournalPaper","WritingConference"].include?(plugin.app_name) ? p.create_link : p.slug_title
|
pd = plugin_data.collect do |p|
|
||||||
{
|
slug_title = ["JournalPaper","WritingConference"].include?(plugin.app_name) ? p.create_link : p.slug_title
|
||||||
"data_title" => slug_title,
|
{
|
||||||
"link_to_show" => OrbitHelper.url_to_plugin_show(p.to_param,plugin.module_app_name.underscore)
|
"data_title" => slug_title,
|
||||||
}
|
"link_to_show" => OrbitHelper.url_to_plugin_show(p.to_param,plugin.module_app_name.underscore)
|
||||||
|
}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
elsif intro.brief_intro == true
|
|
||||||
pd = []
|
|
||||||
pd << {"data_title" => intro.text.html_safe}
|
|
||||||
end
|
|
||||||
|
|
||||||
{
|
if !intro.brief_intro.blank?
|
||||||
|
pdi = []
|
||||||
|
pdi << {"data_intro_title" => intro.text.html_safe}
|
||||||
|
end
|
||||||
|
|
||||||
|
if intro.complete_list.blank?
|
||||||
|
complete_display = "hide"
|
||||||
|
end
|
||||||
|
|
||||||
|
if intro.brief_intro.blank?
|
||||||
|
brief_display = "hide"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
{
|
||||||
"plugin_data" => pd,
|
"plugin_data" => pd,
|
||||||
|
"plugin_data_intro" => pdi,
|
||||||
|
"complete_display" => complete_display,
|
||||||
|
"brief_display" => brief_display,
|
||||||
"plugin_name" => plugin.module_app_name.underscore,
|
"plugin_name" => plugin.module_app_name.underscore,
|
||||||
"plugin_title" => t('module_name.'+plugin.module_app_name.underscore),
|
"plugin_title" => t('module_name.'+plugin.module_app_name.underscore),
|
||||||
"plugin_class" => idx==0 ? "active" : ""
|
"plugin_class" => idx==0 ? "active" : ""
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
plugin_list = plugin_list.reject{|plugin| plugin['plugin_data'].blank?}
|
|
||||||
|
|
||||||
|
plugin_list = plugin_list.reject{|plugin| plugin['plugin_data'].blank? and plugin['plugin_data_intro'].blank?}
|
||||||
{
|
{
|
||||||
"plugins" => plugin_list,
|
"plugins" => plugin_list,
|
||||||
"profile_data" => profile_data,
|
"profile_data" => profile_data,
|
||||||
|
@ -175,7 +190,6 @@ class MembersController < ApplicationController
|
||||||
def member_data(member, fields_to_show)
|
def member_data(member, fields_to_show)
|
||||||
profile_data = []
|
profile_data = []
|
||||||
fields_to_show.each do |field|
|
fields_to_show.each do |field|
|
||||||
# debugger
|
|
||||||
case field['type']
|
case field['type']
|
||||||
when 'profile'
|
when 'profile'
|
||||||
field_data = member.get_attribute_data(field) rescue {}
|
field_data = member.get_attribute_data(field) rescue {}
|
||||||
|
|
|
@ -11,7 +11,7 @@ class PagesController < ApplicationController
|
||||||
before_filter :set_edit_mode
|
before_filter :set_edit_mode
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@pages = Page.all
|
@pages = Page.all
|
||||||
# render json: @pages
|
# render json: @pages
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -76,10 +76,14 @@ class PagesController < ApplicationController
|
||||||
params[:url] = page.url
|
params[:url] = page.url
|
||||||
categories = []
|
categories = []
|
||||||
if page.module == "member"
|
if page.module == "member"
|
||||||
page.categories.each do |c|
|
if page.categories.first == "all"
|
||||||
category = Role.find(c) rescue nil
|
categories = ["all"]
|
||||||
if !category.nil? && !category.disabled
|
else
|
||||||
categories << c
|
page.categories.each do |c|
|
||||||
|
category = Role.find(c) rescue nil
|
||||||
|
if !category.nil? && !category.disabled
|
||||||
|
categories << c
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
@ -89,8 +93,8 @@ class PagesController < ApplicationController
|
||||||
categories << c
|
categories << c
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
categories = ["all"] if categories.blank?
|
||||||
end
|
end
|
||||||
categories = ["all"] if categories.blank?
|
|
||||||
@manifest = @key
|
@manifest = @key
|
||||||
OrbitHelper.set_params params,current_user
|
OrbitHelper.set_params params,current_user
|
||||||
OrbitHelper.set_site_locale locale
|
OrbitHelper.set_site_locale locale
|
||||||
|
@ -186,30 +190,38 @@ class PagesController < ApplicationController
|
||||||
"id" => cat.id.to_s
|
"id" => cat.id.to_s
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
tags = module_app.tags.collect do |t|
|
||||||
|
{
|
||||||
|
"name" => t.name,
|
||||||
|
"id" => t.id.to_s
|
||||||
|
}
|
||||||
|
end
|
||||||
else
|
else
|
||||||
categories = []
|
categories = []
|
||||||
|
tags = []
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
roles = roles.nil? ? [] : roles
|
roles = roles.nil? ? [] : roles
|
||||||
categories = categories.nil? ? [] : categories
|
categories = categories.nil? ? [] : categories
|
||||||
|
tags = tags.nil? ? [] : tags
|
||||||
|
|
||||||
if module_app.data_count.nil?
|
if module_app.data_count.nil?
|
||||||
render :json => {"categories" => categories, "tags" => module_app.tags,"roles" => roles,"layouts" => (get_layouts module_app.key),"data_count" => {"present"=>false}, "locale" => I18n.locale.to_s}.to_json
|
render :json => {"categories" => categories, "tags" => tags,"roles" => roles,"layouts" => (get_layouts module_app.key),"data_count" => {"present"=>false}, "locale" => I18n.locale.to_s}.to_json
|
||||||
else
|
else
|
||||||
render :json => {"categories" => categories, "tags" => module_app.tags,"roles" => roles,"layouts" => (get_layouts module_app.key),"data_count" => {"present"=>true,"start"=>module_app.data_count.begin, "end" => module_app.data_count.end}, "locale" => I18n.locale.to_s}.to_json
|
render :json => {"categories" => categories, "tags" => tags,"roles" => roles,"layouts" => (get_layouts module_app.key),"data_count" => {"present"=>true,"start"=>module_app.data_count.begin, "end" => module_app.data_count.end}, "locale" => I18n.locale.to_s}.to_json
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@page = Page.new(
|
@page = Page.new(
|
||||||
:enabled_for_mobile=>true,
|
:enabled_for_mobile=>true,
|
||||||
:menu_enabled_for=>["en", "zh_tw"],
|
:menu_enabled_for=>["en", "zh_tw"],
|
||||||
:enabled_for=>["en", "zh_tw"],
|
:enabled_for=>["en", "zh_tw"],
|
||||||
:enabled_for_sitemap=>["en", "zh_tw"]
|
:enabled_for_sitemap=>["en", "zh_tw"]
|
||||||
)
|
)
|
||||||
@pages = Page.where(:page_id.ne => "" , :page_id.exists => true)
|
@pages = Page.where(:page_id.ne => "" , :page_id.exists => true)
|
||||||
@modules = ModuleApp.all.frontend_enabled.order_by(:key=>'asc')
|
@modules = ModuleApp.all.frontend_enabled.order_by(:key=>'asc')
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -260,7 +272,7 @@ class PagesController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def get_layouts(module_app)
|
def get_layouts(module_app)
|
||||||
layout_types = []
|
layout_types = []
|
||||||
|
@ -432,6 +444,7 @@ class PagesController < ApplicationController
|
||||||
p = params.require(:page).permit(:number, :page_type, :page_id, :module, :layout, :parent_page, :data_count, :enabled_for_mobile, :member_sort_position, enabled_for_sitemap: [], enabled_for: [],menu_enabled_for: [], categories: [], tags: [], role_status: [], name_translations: valid_locales, external_url_translations: valid_locales)
|
p = params.require(:page).permit(:number, :page_type, :page_id, :module, :layout, :parent_page, :data_count, :enabled_for_mobile, :member_sort_position, enabled_for_sitemap: [], enabled_for: [],menu_enabled_for: [], categories: [], tags: [], role_status: [], name_translations: valid_locales, external_url_translations: valid_locales)
|
||||||
p["role_status"] = p["role_status"] || []
|
p["role_status"] = p["role_status"] || []
|
||||||
p["categories"] = p["categories"] || []
|
p["categories"] = p["categories"] || []
|
||||||
|
p["tags"] = p["tags"] || []
|
||||||
p["enabled_for"] = p["enabled_for"] || []
|
p["enabled_for"] = p["enabled_for"] || []
|
||||||
p["menu_enabled_for"] = p["menu_enabled_for"] || []
|
p["menu_enabled_for"] = p["menu_enabled_for"] || []
|
||||||
p["enabled_for_sitemap"] = p["enabled_for_sitemap"] || []
|
p["enabled_for_sitemap"] = p["enabled_for_sitemap"] || []
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
require "net/http"
|
||||||
|
require 'open-uri'
|
||||||
|
require 'zip/zip'
|
||||||
class StoreApiController < ApplicationController
|
class StoreApiController < ApplicationController
|
||||||
def confirmation
|
def confirmation
|
||||||
site_token = params[:site_token]
|
site_token = params[:site_token]
|
||||||
|
@ -11,4 +14,80 @@ class StoreApiController < ApplicationController
|
||||||
render :json => {"success" => false}.to_json
|
render :json => {"success" => false}.to_json
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def install_module
|
||||||
|
if current_site.store_token.nil?
|
||||||
|
response = {"success" => false}
|
||||||
|
elsif current_site.store_token == params[:site_token]
|
||||||
|
file = File.join(Rails.root,"downloaded_extensions.rb")
|
||||||
|
g = "gem '#{params[:module_key]}', git: '#{params[:git_path]}'"
|
||||||
|
File.open(file,"a+") { |f| f.puts(g) }
|
||||||
|
if !directory_exists?(File.join(Rails.root,"app","templates","#{Site.first.template}","modules","#{params[:module_key]}"))
|
||||||
|
download_template(params[:template],params[:template_filename])
|
||||||
|
end
|
||||||
|
response = {"success" => true}
|
||||||
|
else
|
||||||
|
response = {"success" => false}
|
||||||
|
end
|
||||||
|
render :json => response.to_json
|
||||||
|
if response["success"]
|
||||||
|
bundle_install
|
||||||
|
# give_permissions(params[:module_key])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def uninstall_module
|
||||||
|
file = File.join(Rails.root,"downloaded_extensions.rb")
|
||||||
|
data = File.read(file)
|
||||||
|
g = "gem '#{params[:module_key]}', git: '#{params[:git_path]}'\n"
|
||||||
|
data = data.gsub(g,"")
|
||||||
|
File.write(file,data)
|
||||||
|
bundle_install
|
||||||
|
render :json => {"success" => true}.to_json
|
||||||
|
end
|
||||||
|
|
||||||
|
def render_license_denied
|
||||||
|
render :layout => "back_end"
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def bundle_install
|
||||||
|
Bundler.with_clean_env { `cd #{Rails.root} && BUNDLE_GEMFILE=downloaded_extensions.rb bundle update && bundle` }
|
||||||
|
%x(kill -s USR2 `cat tmp/pids/unicorn.pid`)
|
||||||
|
sleep 5
|
||||||
|
end
|
||||||
|
|
||||||
|
def restart_server_after_install
|
||||||
|
%x(kill -s USR2 `cat tmp/pids/unicorn.pid`)
|
||||||
|
sleep 5
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def download_template(url,name)
|
||||||
|
dir = File.join(Rails.root,"public","template_cache")
|
||||||
|
destination = File.join(Rails.root,"app","templates","#{Site.first.template}","modules")
|
||||||
|
if !directory_exists?(dir)
|
||||||
|
Dir.mkdir dir
|
||||||
|
end
|
||||||
|
zipfile = File.join(Rails.root, "public" , "template_cache", name)
|
||||||
|
open(zipfile, 'wb') do |fo|
|
||||||
|
fo.print open(url).read
|
||||||
|
end
|
||||||
|
unzip_file(zipfile,destination)
|
||||||
|
end
|
||||||
|
|
||||||
|
def directory_exists?(directory)
|
||||||
|
File.directory?(directory)
|
||||||
|
end
|
||||||
|
|
||||||
|
def unzip_file (file, destination)
|
||||||
|
Zip::ZipFile.open(file) { |zip_file|
|
||||||
|
zip_file.each { |f|
|
||||||
|
f_path=File.join(destination, f.name)
|
||||||
|
FileUtils.mkdir_p(File.dirname(f_path))
|
||||||
|
zip_file.extract(f, f_path) unless File.exist?(f_path)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FileUtils.rm_rf(File.join(Rails.root,"public","template_cache"))
|
||||||
|
end
|
||||||
end
|
end
|
|
@ -64,6 +64,8 @@ module ApplicationHelper
|
||||||
end
|
end
|
||||||
site_footer = site_footer.nil? ? "" : site_footer
|
site_footer = site_footer.nil? ? "" : site_footer
|
||||||
html = html.gsub("{{footer-data}}",site_footer)
|
html = html.gsub("{{footer-data}}",site_footer)
|
||||||
|
counter = Page.root.view_count.to_s rescue ""
|
||||||
|
html = html.gsub("{{site-counter}}",counter)
|
||||||
html.html_safe
|
html.html_safe
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -172,8 +172,15 @@ module OrbitBackendHelper
|
||||||
http = Net::HTTP.new(uri.host,uri.port)
|
http = Net::HTTP.new(uri.host,uri.port)
|
||||||
request = Net::HTTP::Get.new("/site/permissions")
|
request = Net::HTTP::Get.new("/site/permissions")
|
||||||
request.body = params_to_send.to_query
|
request.body = params_to_send.to_query
|
||||||
response = http.request(request)
|
response = http.request(request) rescue nil
|
||||||
data = JSON.parse(response.body)
|
if response.nil?
|
||||||
|
data = {}
|
||||||
|
data["message"] = "Could not connect to the store."
|
||||||
|
data["error"] = "CONNECTION_REFUSED"
|
||||||
|
data["success"] = false
|
||||||
|
else
|
||||||
|
data = JSON.parse(response.body)
|
||||||
|
end
|
||||||
if !data["success"]
|
if !data["success"]
|
||||||
case data["error"]
|
case data["error"]
|
||||||
when "INVALID_SITE_TOKEN"
|
when "INVALID_SITE_TOKEN"
|
||||||
|
|
|
@ -14,6 +14,7 @@ class ModuleApp
|
||||||
field :widget_methods
|
field :widget_methods
|
||||||
field :desktop_enabled, type: Boolean, default: false
|
field :desktop_enabled, type: Boolean, default: false
|
||||||
field :widget_settings
|
field :widget_settings
|
||||||
|
field :store_permission_granted, type: Boolean, default: false
|
||||||
|
|
||||||
has_many :categories, dependent: :destroy, :autosave => true
|
has_many :categories, dependent: :destroy, :autosave => true
|
||||||
has_and_belongs_to_many :tags, dependent: :destroy, :autosave => true
|
has_and_belongs_to_many :tags, dependent: :destroy, :autosave => true
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
class OrbitStore
|
class OrbitStore
|
||||||
URL = "http://store.tp.rulingcom.com"
|
URL = "http://store.tp.rulingcom.com"
|
||||||
|
MODULE_EXCEPTIONS = ["category","tag","authorization"]
|
||||||
end
|
end
|
|
@ -1,110 +1,106 @@
|
||||||
(function($) {
|
(function($) {
|
||||||
|
|
||||||
"use strict"
|
"use strict"
|
||||||
|
|
||||||
// Init functions
|
|
||||||
function init () {
|
function init () {
|
||||||
// Announcement modules
|
var doc = document;
|
||||||
var annc = {
|
|
||||||
truncation : function (el, maxLength) {
|
var orbit = {
|
||||||
|
// Cross browser add class function
|
||||||
|
addClass : function(el, className) {
|
||||||
|
if( el.classList ) {
|
||||||
|
el.classList.add(className);
|
||||||
|
} else {
|
||||||
|
el.className += ' ' + className;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// Cross browser has class function
|
||||||
|
hasClass : function(el, cls) {
|
||||||
|
return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1;
|
||||||
|
},
|
||||||
|
// Add class name to the menu item when its children items are more than eight
|
||||||
|
addMegaDropdownClass : function(el, len) {
|
||||||
|
for( var i = 0; i < el.length; i++ ) {
|
||||||
|
if( el[i].children.length > len ) {
|
||||||
|
orbit.addClass(el[i].parentNode, 'mega-dropdown');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// Append caret to menu item if it has dropdown
|
||||||
|
addCaret : function() {
|
||||||
|
var list = doc.querySelectorAll('.page_menu.level_2');
|
||||||
|
for( var i = 0, len = list.length; i < len; i++ ) {
|
||||||
|
var node = doc.createElement('span');
|
||||||
|
node.className = 'caret';
|
||||||
|
list[i].parentNode.appendChild(node);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// Add link and cursor class name on element that has data-link attribute
|
||||||
|
addLinkOnADBanner : function(els) {
|
||||||
|
$.each(els, function(i) {
|
||||||
|
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');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// Announcement text truncation
|
||||||
|
truncation : function (el, len) {
|
||||||
for( var i = 0; i < el.length; i ++ ) {
|
for( var i = 0; i < el.length; i ++ ) {
|
||||||
if ( el[i].firstChild !== null ) {
|
if ( el[i].firstChild !== null ) {
|
||||||
if( el[i].firstChild.length > maxLength ) {
|
if( el[i].firstChild.length > len ) {
|
||||||
var newTitle = el[i].firstChild.nodeValue;
|
var newStr = el[i].firstChild.nodeValue,
|
||||||
var newTitle = newTitle.substring(0, maxLength) + '...'
|
newStr = newStr.substring(0, len) + '...'
|
||||||
el
|
el
|
||||||
.eq(i)
|
.eq(i)
|
||||||
.text(newTitle);
|
.text(newStr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
}
|
// Sitemenu dropdown
|
||||||
|
sitemenuDropdown : function() {
|
||||||
|
var el = doc.querySelectorAll('.sitemenu__list.level-2');
|
||||||
|
for( var i = 0, len = el.length; i < len; i++ ) {
|
||||||
|
if( el[i].hasChildNodes() ) {
|
||||||
|
var caret = doc.createElement('span');
|
||||||
|
caret.className = 'sitemenu___dropdown-toggle fa fa-caret-down';
|
||||||
|
caret.setAttribute('data-toggle', 'dropdown');
|
||||||
|
|
||||||
function anncFix() {
|
el[i].parentNode.insertBefore(caret, el[i]);
|
||||||
var w$ = $('.w-announcement-4');
|
orbit.addClass(el[i], 'dropdown-menu');
|
||||||
if( w$.length ) {
|
|
||||||
annc.truncation(w$.find('.w-annc__subtitle'), 25);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Necessary for Responsive images
|
|
||||||
function bullEye() {
|
|
||||||
// $(".bullseye").bullseye({
|
|
||||||
// fadeEffect: false
|
|
||||||
// });
|
|
||||||
}
|
|
||||||
|
|
||||||
// Adding class to submenu that has dropdown items
|
|
||||||
function submenuFix () {
|
|
||||||
var item$ = $('.submenu__item.level-1');
|
|
||||||
var itemLen = item$.length;
|
|
||||||
var list$ = item$.find('.submenu__list.level-2');
|
|
||||||
|
|
||||||
for( var i=0; i<itemLen; i++ ) {
|
|
||||||
if( list$.eq(i).find('li').length ) {
|
|
||||||
list$
|
|
||||||
.eq(i)
|
|
||||||
.addClass('dropdown');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Main navigation dropdown
|
|
||||||
function dropdown () {
|
|
||||||
var navItemLevel1$ = $('.main-nav-item.level-1');
|
|
||||||
var dropdownMenu$ = $('.dropdown-menu.level-2');
|
|
||||||
|
|
||||||
// Adding class if nav item has dropdown
|
|
||||||
$(navItemLevel1$)
|
|
||||||
.has('.dropdown-menu')
|
|
||||||
.children('a')
|
|
||||||
.addClass('has-dropdown-menu');
|
|
||||||
|
|
||||||
// Hide all dropdowns when click on any HTML elements
|
|
||||||
$(document).on('click', function() {
|
|
||||||
$('.dropdown-menu.level-2')
|
|
||||||
.addClass('hide')
|
|
||||||
.removeClass('show');
|
|
||||||
})
|
|
||||||
|
|
||||||
// Hide all dropdown after page load
|
|
||||||
dropdownMenu$
|
|
||||||
.addClass('hide')
|
|
||||||
.removeClass('show');
|
|
||||||
|
|
||||||
$('.has-dropdown-menu').on('click', function () {
|
|
||||||
if( $(this).hasClass('has-dropdown-menu') ) {
|
|
||||||
if( $(this).next('.dropdown-menu').hasClass('show') ) {
|
|
||||||
dropdownMenu$.addClass('hide');
|
|
||||||
$(this)
|
|
||||||
.next('.dropdown-menu')
|
|
||||||
.removeClass('show')
|
|
||||||
.addClass('hide')
|
|
||||||
|
|
||||||
} else if ( $(this).next('.dropdown-menu').hasClass('hide') ) {
|
|
||||||
dropdownMenu$.addClass('hide');
|
|
||||||
dropdownMenu$.removeClass('show');
|
|
||||||
dropdownMenu$.addClass('hide');
|
|
||||||
$(this)
|
|
||||||
.next('.dropdown-menu')
|
|
||||||
.removeClass('hide')
|
|
||||||
.addClass('show')
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return false;
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Targeting internal page
|
var plugin = {
|
||||||
if( $('body').attr('class') !== 'page-main' ) {
|
// RWD image resize script
|
||||||
submenuFix();
|
bullEye : function() {
|
||||||
}
|
$(".bullseye").bullseye({
|
||||||
dropdown();
|
fadeEffect: false
|
||||||
bullEye();
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Specific functions that will be running on homepage
|
||||||
|
if( doc.body.getAttribute('data-module') === 'home' ) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Functions that will be running on every page
|
||||||
|
orbit.sitemenuDropdown();
|
||||||
|
plugin.bullEye();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$(document).ready(function($) {
|
$(document).ready(function($) {
|
||||||
init();
|
init();
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
.admin-edit {
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
max-width: 100%;
|
|
||||||
height: auto;
|
|
||||||
}
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
html {
|
||||||
|
font-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: $sub-font;
|
||||||
|
margin-top: 40px; // needed for Orbit bar
|
||||||
|
font-size: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {}
|
||||||
|
|
||||||
|
a:hover, a:focus {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:focus {}
|
||||||
|
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.admin-edit {
|
||||||
|
clear: both;
|
||||||
|
}
|
|
@ -1,5 +1,8 @@
|
||||||
@charset "utf-8";
|
@charset "utf-8";
|
||||||
|
|
||||||
|
// Google fonts
|
||||||
|
@import url(http://fonts.googleapis.com/css?family=Roboto);
|
||||||
|
|
||||||
// Base Color
|
// Base Color
|
||||||
$theme-gray: #495054;
|
$theme-gray: #495054;
|
||||||
$theme-gray-light: #cecece;
|
$theme-gray-light: #cecece;
|
||||||
|
@ -16,8 +19,8 @@ $theme-color-third: #ed4c43;
|
||||||
|
|
||||||
|
|
||||||
// Font stacks
|
// Font stacks
|
||||||
$main-font: Arial, "微軟正黑體", "Helvetica Neue", Helvetica, sans-serif;
|
$main-font: 'Roboto', "微軟正黑體", "Helvetica Neue", Helvetica, sans-serif;
|
||||||
$sub-font: Arial, "新細明體", "Helvetica Neue", Helvetica, sans-serif;
|
$sub-font: 'Roboto', "新細明體", "Helvetica Neue", Helvetica, sans-serif;
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -61,7 +61,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// Widget-1
|
// Widget-1
|
||||||
.w-announcement-1 {
|
.widget-announcement-1 {
|
||||||
.w-annc__img-wrap {
|
.w-annc__img-wrap {
|
||||||
height: 200px;
|
height: 200px;
|
||||||
margin: 0 0 1em 0;
|
margin: 0 0 1em 0;
|
||||||
|
@ -74,7 +74,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// Widget-2
|
// Widget-2
|
||||||
.w-announcement-2 {
|
.widget-announcement-2 {
|
||||||
.w-annc__img-wrap {
|
.w-annc__img-wrap {
|
||||||
height: 200px;
|
height: 200px;
|
||||||
margin: 0 0 1em 0;
|
margin: 0 0 1em 0;
|
||||||
|
@ -87,7 +87,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// Widget-3
|
// Widget-3
|
||||||
.w-announcement-3 {
|
.widget-announcement-3 {
|
||||||
.w-annc__img-wrap {
|
.w-annc__img-wrap {
|
||||||
height: 200px;
|
height: 200px;
|
||||||
margin: 0 0 1em 0;
|
margin: 0 0 1em 0;
|
||||||
|
@ -100,7 +100,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// Widget-4
|
// Widget-4
|
||||||
.w-announcement-4 {
|
.widget-announcement-4 {
|
||||||
.w-annc__title {
|
.w-annc__title {
|
||||||
font-family: $main-font;
|
font-family: $main-font;
|
||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
|
@ -116,7 +116,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// Widget-5
|
// Widget-5
|
||||||
.w-announcement-5 {
|
.widget-announcement-5 {
|
||||||
.w-annc__title {
|
.w-annc__title {
|
||||||
font-family: $main-font;
|
font-family: $main-font;
|
||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
|
@ -130,7 +130,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// Widget-6
|
// Widget-6
|
||||||
.w-announcement-6 {
|
.widget-announcement-6 {
|
||||||
.w-annc__item {
|
.w-annc__item {
|
||||||
margin-bottom: 0.8em;
|
margin-bottom: 0.8em;
|
||||||
padding-bottom: 0.8em;
|
padding-bottom: 0.8em;
|
||||||
|
@ -151,7 +151,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// Widget-7
|
// Widget-7
|
||||||
.w-announcement-7 {
|
.widget-announcement-7 {
|
||||||
.w-annc__item {
|
.w-annc__item {
|
||||||
margin-bottom: 0.8em;
|
margin-bottom: 0.8em;
|
||||||
padding-bottom: 0.8em;
|
padding-bottom: 0.8em;
|
||||||
|
@ -173,7 +173,7 @@
|
||||||
|
|
||||||
// Widget-8
|
// Widget-8
|
||||||
// ## Table
|
// ## Table
|
||||||
.w-announcement-8 {
|
.widget-announcement-8 {
|
||||||
.w-annc__th {
|
.w-annc__th {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background: $theme-color-main;
|
background: $theme-color-main;
|
||||||
|
@ -194,7 +194,7 @@
|
||||||
|
|
||||||
// Widget-9
|
// Widget-9
|
||||||
// ## Table
|
// ## Table
|
||||||
.w-announcement-9 {
|
.widget-announcement-9 {
|
||||||
.w-annc__th {
|
.w-annc__th {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background: $theme-color-main;
|
background: $theme-color-main;
|
||||||
|
@ -214,7 +214,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// Widget-10
|
// Widget-10
|
||||||
.w-announcement-10 {
|
.widget-announcement-10 {
|
||||||
.w-annc__item {
|
.w-annc__item {
|
||||||
margin-bottom: 0.8em;
|
margin-bottom: 0.8em;
|
||||||
padding-bottom: 0.8em;
|
padding-bottom: 0.8em;
|
||||||
|
@ -234,7 +234,7 @@
|
||||||
|
|
||||||
// Widget-11
|
// Widget-11
|
||||||
// ## Table
|
// ## Table
|
||||||
.w-announcement-11 {
|
.widget-announcement-11 {
|
||||||
.w-annc__th {
|
.w-annc__th {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background: $theme-color-main;
|
background: $theme-color-main;
|
||||||
|
@ -254,7 +254,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// Widget-12
|
// Widget-12
|
||||||
.w-announcement-12 {
|
.widget-announcement-12 {
|
||||||
.w-annc__list {
|
.w-annc__list {
|
||||||
padding: 0 15px;
|
padding: 0 15px;
|
||||||
}
|
}
|
||||||
|
@ -348,7 +348,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// Index-1
|
// Index-1
|
||||||
.i-announcement-1 {
|
.index-announcement-1 {
|
||||||
.i-annc__th {
|
.i-annc__th {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background: $theme-color-main;
|
background: $theme-color-main;
|
||||||
|
@ -407,18 +407,7 @@
|
||||||
}
|
}
|
||||||
.s-annc__tag-wrap {
|
.s-annc__tag-wrap {
|
||||||
.s-annc__tag {
|
.s-annc__tag {
|
||||||
display: inline-block;
|
font-weight: normal;
|
||||||
margin-bottom: 4px;
|
|
||||||
padding: 5px 8px;
|
|
||||||
font-size: 0.8em;
|
|
||||||
color: $theme-gray;
|
|
||||||
border: 1px solid $theme-gray-light;
|
|
||||||
text-decoration: none;
|
|
||||||
&:hover {
|
|
||||||
color: $theme-color-main;
|
|
||||||
border-color: $theme-color-main;
|
|
||||||
background-color: $theme-gray-lighter;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -430,6 +419,9 @@
|
||||||
padding-top: 1em;
|
padding-top: 1em;
|
||||||
border-top: 1px dotted $theme-gray-light;
|
border-top: 1px dotted $theme-gray-light;
|
||||||
}
|
}
|
||||||
|
.s-annc__related-file {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
.s-annc__related-file,
|
.s-annc__related-file,
|
||||||
.s-annc__related-link {
|
.s-annc__related-link {
|
||||||
padding-bottom: 6px;
|
padding-bottom: 6px;
|
||||||
|
@ -440,22 +432,17 @@
|
||||||
color: darken($theme-gray-light, 10%);
|
color: darken($theme-gray-light, 10%);
|
||||||
}
|
}
|
||||||
a {
|
a {
|
||||||
display: inline-block;
|
|
||||||
margin-bottom: 4px;
|
|
||||||
padding: 5px 8px;
|
|
||||||
font-size: 0.8em;
|
|
||||||
color: $theme-gray;
|
|
||||||
border: 1px solid $theme-gray-light;
|
|
||||||
text-decoration: none;
|
|
||||||
&:hover {
|
|
||||||
color: $theme-color-main;
|
|
||||||
border-color: $theme-color-main;
|
|
||||||
background-color: $theme-gray-lighter;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.s-annc__related-link-list,
|
.s-annc__related-link-list,
|
||||||
.s-annc__related-file-list {
|
.s-annc__related-file-list {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
.s-annc__flie-title {
|
||||||
|
max-width: 9.375rem;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,99 +1,64 @@
|
||||||
// Member INDEX
|
// Member index page
|
||||||
.index-member {
|
.index-member {
|
||||||
.index-title {
|
.index-title {
|
||||||
@extend .unity-title;
|
@extend .unity-title;
|
||||||
}
|
}
|
||||||
&.index1 {
|
th,
|
||||||
|
td {
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
font-family: $main-font;
|
||||||
|
}
|
||||||
|
th[class^="member-data-title"] {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.index-member-item {
|
||||||
|
min-height: 200px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.index-member-item:nth-child(2n+1) {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
.member-data-title-job-title:before,
|
||||||
|
.member-data-title-name:before,
|
||||||
|
.member-data-title-email:before,
|
||||||
|
.member-data-title-office-tel:before{
|
||||||
|
content: "\f007";
|
||||||
|
font-family: "fontAwesome";
|
||||||
|
display: inline-block;
|
||||||
|
margin-right: 0.3125rem;
|
||||||
|
color: gray;
|
||||||
|
min-width: 15px;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
}
|
||||||
|
.member-data-title-job-title:before {
|
||||||
|
content: "\f19d";
|
||||||
|
}
|
||||||
|
.member-data-title-email:before {
|
||||||
|
content: "\f0e0";
|
||||||
|
}
|
||||||
|
.member-data-title-office-tel:before{
|
||||||
|
content: "\f098";
|
||||||
|
}
|
||||||
|
.member-profile-data-wrap {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.member-pic {
|
||||||
|
border-radius: 0.25rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Member SHOW
|
// Member show page
|
||||||
.show-member {
|
.show-member {
|
||||||
.show-title {
|
font-family: $main-font;
|
||||||
@extend .unity-title;
|
th,
|
||||||
|
td {
|
||||||
|
font-size: 0.8125rem;
|
||||||
}
|
}
|
||||||
.post-metadata {
|
.member-plugins {
|
||||||
border-bottom: 1px solid $theme-gray-light;
|
margin-bottom: 20px;
|
||||||
@include clearfix();
|
a {
|
||||||
li {
|
font-size: 0.8125rem;
|
||||||
margin-right: 1em;
|
|
||||||
margin-bottom: 0.6em;
|
|
||||||
float: left;
|
|
||||||
&.metadata-tags {
|
|
||||||
position: relative;
|
|
||||||
margin-right: 0;
|
|
||||||
padding-left: 1.6em;
|
|
||||||
clear: both;
|
|
||||||
float: none;
|
|
||||||
i {
|
|
||||||
position: absolute;
|
|
||||||
top: 7px;
|
|
||||||
left: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.metadata-tags {
|
|
||||||
.tag {
|
|
||||||
display: inline-block;
|
|
||||||
margin-bottom: 4px;
|
|
||||||
padding: 5px 8px;
|
|
||||||
font-size: 0.8em;
|
|
||||||
color: $theme-gray;
|
|
||||||
border: 1px solid $theme-gray-light;
|
|
||||||
text-decoration: none;
|
|
||||||
&:hover {
|
|
||||||
color: $theme-color-main;
|
|
||||||
border-color: $theme-color-main;
|
|
||||||
background-color: $theme-gray-lighter;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
i {
|
|
||||||
color: darken($theme-gray-light, 10%);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.post-section {
|
|
||||||
@include clearfix();
|
|
||||||
margin-bottom: 2em;
|
|
||||||
.post-pic {
|
|
||||||
img {
|
|
||||||
@include size(100%, auto);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.post-related {
|
|
||||||
padding-top: 1em;
|
|
||||||
border-top: 1px solid $theme-gray-light;
|
|
||||||
li {
|
|
||||||
padding-bottom: 3px;
|
|
||||||
padding-left: 1.6em;
|
|
||||||
& + li {
|
|
||||||
padding-top: 8px;
|
|
||||||
border-top: 1px dotted $theme-gray-light;
|
|
||||||
}
|
|
||||||
i {
|
|
||||||
margin: 8px 0 0 -1.6em;
|
|
||||||
float: left;
|
|
||||||
color: darken($theme-gray-light, 10%);
|
|
||||||
}
|
|
||||||
& > div {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
display: inline-block;
|
|
||||||
margin-bottom: 4px;
|
|
||||||
padding: 5px 8px;
|
|
||||||
font-size: 0.8em;
|
|
||||||
color: $theme-gray;
|
|
||||||
border: 1px solid $theme-gray-light;
|
|
||||||
text-decoration: none;
|
|
||||||
&:hover {
|
|
||||||
color: $theme-color-main;
|
|
||||||
border-color: $theme-color-main;
|
|
||||||
background-color: $theme-gray-lighter;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,5 +1,4 @@
|
||||||
// Base
|
// Base
|
||||||
@import url("http://fonts.googleapis.com/css?family=Droid+Sans:400,700");
|
|
||||||
@import "bootstrap/mixins";
|
@import "bootstrap/mixins";
|
||||||
@import "bootstrap/variables";
|
@import "bootstrap/variables";
|
||||||
@import "base/mixins";
|
@import "base/mixins";
|
||||||
|
@ -7,7 +6,7 @@
|
||||||
@import "base/unity";
|
@import "base/unity";
|
||||||
@import "base/pagination";
|
@import "base/pagination";
|
||||||
@import "base/orbitbar-override";
|
@import "base/orbitbar-override";
|
||||||
@import "base/genernal";
|
@import "base/global";
|
||||||
|
|
||||||
// Layout
|
// Layout
|
||||||
@import "layout/header";
|
@import "layout/header";
|
||||||
|
@ -29,11 +28,3 @@
|
||||||
// Widget
|
// Widget
|
||||||
@import "widget/breadcrumb";
|
@import "widget/breadcrumb";
|
||||||
@import "widget/sitemenu";
|
@import "widget/sitemenu";
|
||||||
|
|
||||||
html {
|
|
||||||
font-size: 100%;
|
|
||||||
}
|
|
||||||
body {
|
|
||||||
margin-top: 40px; // needed for Orbit bar
|
|
||||||
font-size: inherit;
|
|
||||||
}
|
|
|
@ -1,86 +1,52 @@
|
||||||
.submenu-wrap {
|
.sitemenu-wrap {
|
||||||
@include clearfix();
|
|
||||||
padding: 10px 0;
|
padding: 10px 0;
|
||||||
|
@include clearfix;
|
||||||
.submenu__title {
|
.sitemenu__title {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
.sitemenu__list {
|
||||||
.submenu__list {
|
|
||||||
list-style: none;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
list-style: none;
|
||||||
}
|
}
|
||||||
|
.sitemenu__item.level-1 {
|
||||||
.submenu__item.level-1 {
|
font-size: 0.8125rem;
|
||||||
position: relative;
|
position: relative;
|
||||||
float: left;
|
float: left;
|
||||||
margin-right: 1%;
|
margin-right: 1%;
|
||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
}
|
padding: 8px .8em;
|
||||||
|
|
||||||
.submenu__link.level-1 {
|
|
||||||
float: left;
|
|
||||||
padding-bottom: 8px;
|
padding-bottom: 8px;
|
||||||
font-size: 13px;
|
|
||||||
font-size: 0.8125rem;
|
|
||||||
background: $theme-color-second;
|
|
||||||
color: #fff;
|
color: #fff;
|
||||||
padding: 8px 0.8em;
|
border-radius: .2em;
|
||||||
border-radius: 0.2em;
|
background: $theme-color-second;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background: darken($theme-color-second, 10%);
|
background: darken($theme-color-second, 10%);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.sitemenu__link.level-1 {
|
||||||
.submenu__item:hover .dropdown {
|
margin-right: .25rem;
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.touch .submenu__item .dropdown {
|
|
||||||
display: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Submenu dropdown
|
|
||||||
.submenu__list.dropdown {
|
|
||||||
display: none;
|
|
||||||
padding: 20px 0 0 0;
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
top: 80%;
|
|
||||||
border-radius: 2px;
|
|
||||||
z-index: 200;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.submenu__list .dropdown:before {
|
|
||||||
content: "";
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 0px 7px 7px 7px;
|
|
||||||
border-color: transparent transparent $theme-color-main transparent;
|
|
||||||
position: absolute;
|
|
||||||
top: 15px;
|
|
||||||
left: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.submenu__item.level-2 {
|
|
||||||
display: block;
|
|
||||||
padding: 4px 8px;
|
|
||||||
background: $theme-color-main;
|
|
||||||
font-size: 0.8125rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.submenu__link.level-2 {
|
|
||||||
color: #fff;
|
color: #fff;
|
||||||
white-space: nowrap;
|
|
||||||
}
|
}
|
||||||
|
.sitemenu___dropdown-toggle {
|
||||||
.submenu__list.hidden--item {
|
font-size: 0.75rem;
|
||||||
display: none;
|
padding: 2px .3125rem;
|
||||||
|
cursor: pointer;
|
||||||
&:before {
|
}
|
||||||
display: none;
|
// sitemenu dropdown
|
||||||
|
.sitemenu__list.dropdown-menu {
|
||||||
|
min-width: 100%;
|
||||||
|
margin-top: 4px;
|
||||||
|
border: none;
|
||||||
|
border-radius: .2em;
|
||||||
|
background: $theme-color-main;
|
||||||
|
}
|
||||||
|
.sitemenu__link.level-2 {
|
||||||
|
color: #fff;
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
padding: 4px 0.625rem;
|
||||||
|
&:hover {
|
||||||
|
background: lighten($theme-color-second, 5%);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
<footer class="layout-footer">
|
<footer class="layout-footer">
|
||||||
<div class="container layout-footer-inner">
|
<div class="container layout-footer-inner">
|
||||||
<div class="layout-footer-content">{{footer-data}}</div>
|
<div class="layout-footer-content">{{footer-data}}</div>
|
||||||
|
<div>{{site-counter}}</div>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
|
@ -3,7 +3,7 @@
|
||||||
<head>
|
<head>
|
||||||
<%= render_partial("head") %>
|
<%= render_partial("head") %>
|
||||||
</head>
|
</head>
|
||||||
<body class="page-main">
|
<body class="page-home">
|
||||||
<%= render_orbit_bar %>
|
<%= render_orbit_bar %>
|
||||||
<%= render_header %>
|
<%= render_header %>
|
||||||
<section class="layout-slide" data-pp="4"></section>
|
<section class="layout-slide" data-pp="4"></section>
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
<ul class="pagination" data-pagination="true">
|
<ul class="pagination pagination-sm" data-pagination="true">
|
||||||
<li class="{{pagination_active}}"><a href="{{pagination_link}}">{{page_number}}</a></li>
|
<li class="{{pagination_active}}">
|
||||||
</ul>
|
<a href="{{pagination_link}}">{{page_number}}</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="w-ad-banner ad-banner-widget-1 container">
|
<div class="w-ad-banner ad-banner-widget-1">
|
||||||
<div class="w-ad-banner__wrap cycle-slideshow"
|
<div class="w-ad-banner__wrap cycle-slideshow"
|
||||||
data-list="images"
|
data-list="images"
|
||||||
data-level="0"
|
data-level="0"
|
||||||
|
@ -21,3 +21,5 @@
|
||||||
<div class="w-ad-banner__caption"></div>
|
<div class="w-ad-banner__caption"></div>
|
||||||
<ul class="w-ad-banner__pager"></ul>
|
<ul class="w-ad-banner__pager"></ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
<div class="w-ad-banner ad-banner-widget-3">
|
||||||
|
<div class="w-ad-banner__wrap cycle-slideshow"
|
||||||
|
data-list="images"
|
||||||
|
data-level="0"
|
||||||
|
data-cycle-slides=".w-ad-banner__slide"
|
||||||
|
data-cycle-log="false"
|
||||||
|
data-overlay=".w-ad-banner__caption"
|
||||||
|
data-pager=".w-ad-banner__pager"
|
||||||
|
data-pager-template="<li><a href='#'></a></li>"
|
||||||
|
data-pager-active-class="active-slide"
|
||||||
|
data-cycle-youtube=true
|
||||||
|
data-cycle-youtube-autostart=false
|
||||||
|
>
|
||||||
|
{{html}}
|
||||||
|
</div>
|
||||||
|
<ul class="w-ad-banner__pager"></ul>
|
||||||
|
</div>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="w-ad-banner ad-banner-widget-2 container">
|
<div class="w-ad-banner ad-banner-widget-2">
|
||||||
<div class="w-ad-banner__wrap cycle-slideshow"
|
<div class="w-ad-banner__wrap cycle-slideshow"
|
||||||
data-list="images"
|
data-list="images"
|
||||||
data-level="0"
|
data-level="0"
|
||||||
|
@ -19,7 +19,6 @@
|
||||||
</div>
|
</div>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$("document").ready(function(){
|
$("document").ready(function(){
|
||||||
// total_players = $("*[data-youtube-id]").length
|
|
||||||
$("*[data-youtube-id]").each(function(){
|
$("*[data-youtube-id]").each(function(){
|
||||||
var obj = $(this).find("embed");
|
var obj = $(this).find("embed");
|
||||||
obj.attr("id",$(this).data("youtube-id"));
|
obj.attr("id",$(this).data("youtube-id"));
|
||||||
|
|
|
@ -1,12 +1,19 @@
|
||||||
<div class="w-ad-banner ad-banner-widget-2 container">
|
<div class="w-ad-banner ad-banner-widget-3">
|
||||||
<div class="w-ad-banner__wrap cycle-slideshow"
|
<div class="w-ad-banner__wrap cycle-slideshow"
|
||||||
data-list="images"
|
data-list="images"
|
||||||
data-level="0"
|
data-level="0"
|
||||||
data-cycle-slides=".w-ad-banner__slide"
|
data-cycle-slides=".w-ad-banner__slide"
|
||||||
data-cycle-log="false"
|
data-cycle-log="false"
|
||||||
|
data-pager=".w-ad-banner__pager"
|
||||||
|
data-pager-template="<li><a href='#'></a></li>"
|
||||||
|
data-pager-active-class="active-slide"
|
||||||
>
|
>
|
||||||
<div class="w-ad-banner__slide {{class}}">
|
<div class="w-ad-banner__slide {{class}}"
|
||||||
|
data-link="{{link}}"
|
||||||
|
>
|
||||||
<img class="w-ad-banner__image" src="{{image_link}}">
|
<img class="w-ad-banner__image" src="{{image_link}}">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<ul class="w-ad-banner__pager"></ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -11,8 +11,8 @@
|
||||||
{
|
{
|
||||||
"filename" : "ad_banner_widget2_video",
|
"filename" : "ad_banner_widget2_video",
|
||||||
"name" : {
|
"name" : {
|
||||||
"zh_tw" : "2. 橫幅輪播 ( 圖片, 導航圖示 )",
|
"zh_tw" : "2. 橫幅輪播 + Youtube影片 ( 圖片, Youtube影片, 導航圖示 )",
|
||||||
"en" : "2. Carousel ( image, navigation, video )"
|
"en" : "2. Carousel ( image, Youtube video, navigation )"
|
||||||
},
|
},
|
||||||
"thumbnail" : "thumbnail-block.png"
|
"thumbnail" : "thumbnail-block.png"
|
||||||
},
|
},
|
||||||
|
@ -20,9 +20,18 @@
|
||||||
"filename" : "ad_banner_widget3",
|
"filename" : "ad_banner_widget3",
|
||||||
"name" : {
|
"name" : {
|
||||||
"zh_tw" : "3. 廣告輪播 ( 圖片 )",
|
"zh_tw" : "3. 廣告輪播 ( 圖片 )",
|
||||||
"en" : "2. AD banner ( image )"
|
"en" : "3. AD banner ( image )"
|
||||||
|
},
|
||||||
|
"thumbnail" : "thumbnail-block.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "ad_banner_widget4",
|
||||||
|
"name" : {
|
||||||
|
"zh_tw" : "4. 廣告輪播 ( 圖片 )",
|
||||||
|
"en" : "4. AD banner ( image )"
|
||||||
},
|
},
|
||||||
"thumbnail" : "thumbnail-block.png"
|
"thumbnail" : "thumbnail-block.png"
|
||||||
}
|
}
|
||||||
|
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="w-annc w-announcement-1">
|
<div class="w-annc widget-announcement-1">
|
||||||
<h3 class="w-annc__widget-title">
|
<h3 class="w-annc__widget-title">
|
||||||
<span>{{widget-title}}</span>
|
<span>{{widget-title}}</span>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="w-annc w-announcement-10">
|
<div class="w-annc widget-announcement-10">
|
||||||
<h3 class="w-annc__widget-title">
|
<h3 class="w-annc__widget-title">
|
||||||
<span>{{widget-title}}</span>
|
<span>{{widget-title}}</span>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="w-annc w-announcement-11">
|
<div class="w-annc widget-announcement-11">
|
||||||
<h3 class="w-annc__widget-title">
|
<h3 class="w-annc__widget-title">
|
||||||
<span>{{widget-title}}</span>
|
<span>{{widget-title}}</span>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="w-annc w-announcement-12">
|
<div class="w-annc widget-announcement-12">
|
||||||
<h3 class="w-annc__widget-title">
|
<h3 class="w-annc__widget-title">
|
||||||
<span>{{widget-title}}</span>
|
<span>{{widget-title}}</span>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="w-annc w-announcement-2">
|
<div class="w-annc widget-announcement-2">
|
||||||
<h3 class="w-annc__widget-title">
|
<h3 class="w-annc__widget-title">
|
||||||
<span>{{widget-title}}</span>
|
<span>{{widget-title}}</span>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="w-annc w-announcement-3">
|
<div class="w-annc widget-announcement-3">
|
||||||
<h3 class="w-annc__widget-title">
|
<h3 class="w-annc__widget-title">
|
||||||
<span>{{widget-title}}</span>
|
<span>{{widget-title}}</span>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="w-annc w-announcement-4">
|
<div class="w-annc widget-announcement-4">
|
||||||
<h3 class="w-annc__widget-title">
|
<h3 class="w-annc__widget-title">
|
||||||
<span>{{widget-title}}</span>
|
<span>{{widget-title}}</span>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="w-annc w-announcement-5">
|
<div class="w-annc widget-announcement-5">
|
||||||
<h3 class="w-annc__widget-title">
|
<h3 class="w-annc__widget-title">
|
||||||
<span>{{widget-title}}</span>
|
<span>{{widget-title}}</span>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="w-annc w-announcement-6">
|
<div class="w-annc widget-announcement-6">
|
||||||
<h3 class="w-annc__widget-title">
|
<h3 class="w-annc__widget-title">
|
||||||
<span>{{widget-title}}</span>
|
<span>{{widget-title}}</span>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="w-annc w-announcement-7">
|
<div class="w-annc widget-announcement-7">
|
||||||
<h3 class="w-annc__widget-title">
|
<h3 class="w-annc__widget-title">
|
||||||
<span>{{widget-title}}</span>
|
<span>{{widget-title}}</span>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="w-annc w-announcement-8">
|
<div class="w-annc widget-announcement-8">
|
||||||
<h3 class="w-annc__widget-title">
|
<h3 class="w-annc__widget-title">
|
||||||
<span>{{widget-title}}</span>
|
<span>{{widget-title}}</span>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="w-annc w-announcement-9">
|
<div class="w-annc widget-announcement-9">
|
||||||
<h3 class="w-annc__widget-title">
|
<h3 class="w-annc__widget-title">
|
||||||
<span>{{widget-title}}</span>
|
<span>{{widget-title}}</span>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="i-annc i-announcement-1">
|
<div class="i-annc index-announcement-1">
|
||||||
<h3 class="i-annc__page-title">{{page-title}}</h3>
|
<h3 class="i-annc__page-title">{{page-title}}</h3>
|
||||||
<table class="i-annc__table table table-striped">
|
<table class="i-annc__table table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="i-annc i-announcement-2">
|
<div class="i-annc index-announcement-2">
|
||||||
<h3 class="i-annc__page-title">{{page-title}}</h3>
|
<h3 class="i-annc__page-title">{{page-title}}</h3>
|
||||||
<ul class="i-annc__list" data-level="0" data-list="announcements">
|
<ul class="i-annc__list" data-level="0" data-list="announcements">
|
||||||
<li class="i-annc__item">
|
<li class="i-annc__item">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<article class="s-annc s-announcement">
|
<article class="s-annc show-announcement">
|
||||||
<h1 class="s-annc__show-title">{{title}}</h1>
|
<h3 class="s-annc__show-title">{{title}}</h3>
|
||||||
|
|
||||||
<ul class="s-annc__meta-wrap list-unstyled">
|
<ul class="s-annc__meta-wrap list-unstyled">
|
||||||
<li class="s-annc__date-wrap s-annc__meta--item">
|
<li class="s-annc__date-wrap s-annc__meta--item">
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
<li class="s-annc__tag-wrap s-annc__meta--item ">
|
<li class="s-annc__tag-wrap s-annc__meta--item ">
|
||||||
<i class="fa fa-tags"></i>
|
<i class="fa fa-tags"></i>
|
||||||
<span data-list="tags" data-level="0">
|
<span data-list="tags" data-level="0">
|
||||||
<a href="{{url}}"><span class="s-annc__tag">{{tag}}</span></a>
|
<a href="{{url}}"><span class="s-annc__tag label label-default">{{tag}}</span></a>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -26,14 +26,14 @@
|
||||||
<li class="s-annc__related-file">
|
<li class="s-annc__related-file">
|
||||||
<i class="fa fa-fw fa-paperclip"></i>
|
<i class="fa fa-fw fa-paperclip"></i>
|
||||||
<div class="s-annc__related-file-list" data-list="bulletin_files" data-level="0">
|
<div class="s-annc__related-file-list" data-list="bulletin_files" data-level="0">
|
||||||
<a class="s-annc__flie-title" href="{{file_url}}">{{file_title}}</a>
|
<a class="s-annc__flie-title btn btn-default btn-sm" href="{{file_url}}">{{file_title}}</a>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="s-annc__related-link">
|
<li class="s-annc__related-link">
|
||||||
<i class="fa fa-fw fa-link"></i>
|
<i class="fa fa-fw fa-link"></i>
|
||||||
<div class="s-annc__related-link-list" data-list="bulletin_links" data-level="0">
|
<div class="s-annc__related-link-list" data-list="bulletin_links" data-level="0">
|
||||||
<a href="{{link_url}}" target="_blank">{{link_title}}</a>
|
<a class="s-annc__link-title btn btn-default btn-sm" href="{{link_url}}" target="_blank">{{link_title}}</a>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -47,26 +47,23 @@
|
||||||
{{link_to_edit}}
|
{{link_to_edit}}
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
(function($) {
|
||||||
|
|
||||||
// 當metadata-tags沒內容時將會隱藏
|
function hideEmptyEl(el, elParent) {
|
||||||
if(!$('.metadata-tags .tag').length) {
|
if( el.length === 0) {
|
||||||
$('.metadata-tags').remove();
|
elParent.addClass('hide');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 當post-related沒內容時會隱藏
|
// Hiding parent element when children elements are not present
|
||||||
if($('.post-related').length) {
|
// Tags
|
||||||
var element = ['.post-related-flises-list', '.post-related-links-list'],
|
hideEmptyEl($('.s-annc__tag'), $('.s-annc__tag-wrap'));
|
||||||
n = 0;
|
|
||||||
$.each(element, function(index, val) {
|
// Attachments
|
||||||
if(!$(val).text()) {
|
hideEmptyEl($('.s-annc__flie-title'), $('.s-annc__related-file'));
|
||||||
$(val).closest('li').remove();
|
|
||||||
n += 1;
|
// Links
|
||||||
}
|
hideEmptyEl($('.s-annc__link-title'), $('.s-annc__related-link'));
|
||||||
if(n == element.length) {
|
|
||||||
$('.post-related').remove();
|
}(jQuery));
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="w-archive archive-widget-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>
|
<h3 class="w-archive__widget-title">{{widget-title}}</h3>
|
||||||
<ul class="w-archive__list level-1" data-list="categories" data-level="0">
|
<ul class="w-archive__list level-1" data-list="categories" data-level="0">
|
||||||
<li class="w-archive__item level-1">
|
<li class="w-archive__item level-1">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="i-archive archive-index-1">
|
<div class="i-archive index-archive-1">
|
||||||
<h3 class="i-archive__page-title">{{page-title}}</h3>
|
<h3 class="i-archive__page-title">{{page-title}}</h3>
|
||||||
<ul class="i-archive__list" data-list="categories" data-level="0">
|
<ul class="i-archive__list" data-list="categories" data-level="0">
|
||||||
<li class="i-archive__item">
|
<li class="i-archive__item">
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
|
<i class="fa fa-th-list"></i>
|
||||||
<a data-toggle="collapse" data-parent="#index-archive-group" href="#collapse" class="collapsed">
|
<a data-toggle="collapse" data-parent="#index-archive-group" href="#collapse" class="collapsed">
|
||||||
{{category-title}}
|
{{category-title}}
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<div class="show-archive">
|
<div class="show-archive">
|
||||||
<h1 class="show-title">
|
<h3 class="show-title">
|
||||||
<span>{{title}}</span>
|
<span>{{title}}</span>
|
||||||
</h1>
|
</h3>
|
||||||
<div class="show-archive-body">
|
<div class="show-archive-body">
|
||||||
<dl class="dl-horizontal show-archive-item-group" data-list="archives" data-level="1">
|
<dl class="dl-horizontal show-archive-item-group" data-list="archives" data-level="1">
|
||||||
<dt class="show-archive-item-list">
|
<dt class="show-archive-item-list">
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
<div id="orbit_calendar">
|
<div id="orbit_calendar">
|
||||||
<div id='sec1' class="cal-fn">
|
<div id="sec1">
|
||||||
<div class="btn-toolbar" id="navigation">
|
<div class="btn-toolbar" id="navigation">
|
||||||
<div id="calendar-nav">
|
<div id="calendar-nav">
|
||||||
<button class="btn" id="today_btn">Today</button>
|
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<button class="btn" id="prev_month_btn">
|
<button class="btn btn-default btn-sm" id="prev_month_btn">
|
||||||
<i class="icon-chevron-left"></i>
|
<i class="icon-chevron-left"></i>
|
||||||
</button>
|
</button>
|
||||||
<button class="btn" id="next_month_btn">
|
<button class="btn btn-default btn-sm" id="next_month_btn">
|
||||||
<i class="icon-chevron-right"></i>
|
<i class="icon-chevron-right"></i>
|
||||||
</button>
|
</button>
|
||||||
|
<button class="btn btn-default btn-sm" id="today_btn">Today</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -17,12 +17,12 @@
|
||||||
</div>
|
</div>
|
||||||
<div id='sec3' class="btn-toolbar">
|
<div id='sec3' class="btn-toolbar">
|
||||||
<div class="btn-group calendar_mode">
|
<div class="btn-group calendar_mode">
|
||||||
<button class="btn mode_switch" data-mode="agendaDay" >day</button>
|
<button class="btn btn-default mode_switch btn-sm" data-mode="agendaDay" >day</button>
|
||||||
<button class="btn mode_switch" data-mode="agendaWeek" >week</button>
|
<button class="btn btn-default mode_switch btn-sm" data-mode="agendaWeek" >week</button>
|
||||||
<button class="btn active mode_switch" data-mode="month" >month</button>
|
<button class="btn btn-default active mode_switch btn-sm" data-mode="month" >month</button>
|
||||||
<button class="btn mode_switch" data-mode="agenda" >agenda</button>
|
<button class="btn btn-default mode_switch btn-sm" data-mode="agenda" >agenda</button>
|
||||||
</div>
|
</div>
|
||||||
<button id="refresh_btn" class="btn">
|
<button id="refresh_btn" class="btn btn-default btn-sm">
|
||||||
<i class="icons-cycle"></i>
|
<i class="icons-cycle"></i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -33,7 +33,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="event_quick_view" class="modal" style="width: 300px; display:none; margin:0 0 0 0;"></div>
|
<div id="event_quick_view" class="modal" style="width: 300px; display:none; margin:0 0 0 0;"></div>
|
||||||
<div id="calendar-loading">Loading...</div>
|
<div id="calendar-loading"></div>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var calendar = new Calendar("#calendar","{{page_id}}");
|
var calendar = new Calendar("#calendar","{{page_id}}");
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<article>
|
<article>
|
||||||
<div class="post-title">
|
<div class="post-title">
|
||||||
<h1>{{question}}</h1>
|
<h3>{{question}}</h3>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span data-list="tags" data-level="0">
|
<span data-list="tags" data-level="0">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="widget-gallery widget1">
|
<div class="widget-gallery widget2">
|
||||||
<h3 class="widget-title">
|
<h3 class="widget-title">
|
||||||
<span>{{widget-title}}</span>
|
<span>{{widget-title}}</span>
|
||||||
</h3>
|
</h3>
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="widget-gallery widget2">
|
<div class="widget-gallery widget3">
|
||||||
<h3 class="widget-title">
|
<h3 class="widget-title">
|
||||||
<span>{{widget-title}}</span>
|
<span>{{widget-title}}</span>
|
||||||
</h3>
|
</h3>
|
|
@ -0,0 +1,46 @@
|
||||||
|
{
|
||||||
|
"frontend": [
|
||||||
|
{
|
||||||
|
"filename" : "gallery_index1",
|
||||||
|
"name" : {
|
||||||
|
"zh_tw" : "1. 相本排版-1",
|
||||||
|
"en" : "1. Gallery-1"
|
||||||
|
},
|
||||||
|
"thumbnail" : "thumbnail-block-list.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "gallery_index2",
|
||||||
|
"name" : {
|
||||||
|
"zh_tw" : "2. 相本排版-2",
|
||||||
|
"en" : "2. Gallery-2"
|
||||||
|
},
|
||||||
|
"thumbnail" : "thumbnail-block.png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"widgets" : [
|
||||||
|
{
|
||||||
|
"filename" : "gallery_widget1",
|
||||||
|
"name" : {
|
||||||
|
"zh_tw" : "1. 相本排版-1",
|
||||||
|
"en" : "1. Gallery-1"
|
||||||
|
},
|
||||||
|
"thumbnail" : "thumbnail-block.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "gallery_widget2",
|
||||||
|
"name" : {
|
||||||
|
"zh_tw" : "2. 相本排版-2",
|
||||||
|
"en" : "2. Gallery-2"
|
||||||
|
},
|
||||||
|
"thumbnail" : "thumbnail-block.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "gallery_widget3",
|
||||||
|
"name" : {
|
||||||
|
"zh_tw" : "3. 相本排版-3",
|
||||||
|
"en" : "2. Gallery-3"
|
||||||
|
},
|
||||||
|
"thumbnail" : "thumbnail-block.png"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,30 +1,30 @@
|
||||||
<div class="index-member index1">
|
<div class="index-member index1">
|
||||||
<div class="index-member-group" data-list="roles" data-level="0">
|
<div class="index-member-group" data-list="roles" data-level="0">
|
||||||
<div class="index-member-group-item">
|
<div class="index-member-group-item">
|
||||||
|
|
||||||
<div class="index-member-status" data-level="1" data-list="status-list">
|
<div class="index-member-status" data-level="1" data-list="status-list">
|
||||||
|
|
||||||
<h3 class="index-title">
|
<h3 class="index-title">
|
||||||
<span>{{status-title}}</span>
|
<span>{{status-title}}</span>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<div class="index-member-list row" data-level="2" data-list="members">
|
<div class="index-member-list row" data-level="2" data-list="members">
|
||||||
<div class="index-member-item clearfix col-sm-6 row" style="font-size: 12px; min-height:180px;">
|
<div class="index-member-item clearfix col-lg-6 row">
|
||||||
<div class="col-sm-4">
|
<div class="member-pic-wrap col-xs-4">
|
||||||
<a href="{{link_to_show}}"><img class="member-pic" src="{{image}}" alt="{{name}}" title="{{name}}" width="100%"></a>
|
<a href="{{link_to_show}}">
|
||||||
|
<img class="member-pic" src="{{image}}" alt="{{name}}" title="{{name}}" width="100%">
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-8">
|
<div class="member-profile-data-wrap col-xs-8">
|
||||||
<table class="table table-condensed">
|
<table class="table">
|
||||||
<tbody data-list="profile_data" data-level="3">
|
<tbody data-list="profile_data" data-level="3">
|
||||||
<tr><th class="{{title_class}}" style="min-width:70px;">{{title}}</th><td class="{{value_class}}">{{value}}</td></tr>
|
<tr>
|
||||||
|
<th class="{{title_class}}">{{title}}</th>
|
||||||
|
<td class="{{value_class}}">{{value}}</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
|
@ -1,30 +1,30 @@
|
||||||
<div class="index-member index1">
|
<div class="index-member index1">
|
||||||
<div class="index-member-group" data-list="roles" data-level="0">
|
<div class="index-member-group" data-list="roles" data-level="0">
|
||||||
<div class="index-member-group-item">
|
<div class="index-member-group-item">
|
||||||
|
|
||||||
<div class="index-member-status" data-level="1" data-list="status-list">
|
<div class="index-member-status" data-level="1" data-list="status-list">
|
||||||
|
|
||||||
<h3 class="index-title">
|
<h3 class="index-title">
|
||||||
<span>{{status-title}}</span>
|
<span>{{status-title}}</span>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<div class="index-member-list row" data-level="2" data-list="members">
|
<div class="index-member-list row" data-level="2" data-list="members">
|
||||||
<div class="index-member-item clearfix col-sm-6 row" style="font-size: 12px; min-height:180px;">
|
<div class="index-member-item clearfix col-lg-6 row">
|
||||||
<div class="col-sm-4">
|
<div class="member-pic-wrap col-xs-4">
|
||||||
<a href="{{link_to_show}}"><img class="member-pic" src="{{image}}" alt="{{name}}" title="{{name}}" width="100%"></a>
|
<a href="{{link_to_show}}">
|
||||||
|
<img class="member-pic" src="{{image}}" alt="{{name}}" title="{{name}}" width="100%">
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-8">
|
<div class="member-profile-data-wrap col-xs-8">
|
||||||
<table class="table table-condensed">
|
<table class="table">
|
||||||
<tbody data-list="profile_data" data-level="3">
|
<tbody data-list="profile_data" data-level="3">
|
||||||
<tr><th class="{{title_class}}" style="min-width:70px;">{{title}}</th><td class="{{value_class}}">{{value}}</td></tr>
|
<tr>
|
||||||
|
<th class="{{title_class}}">{{title}}</th>
|
||||||
|
<td class="{{value_class}}">{{value}}</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
|
@ -6,22 +6,25 @@
|
||||||
<span>{{status-title}}</span>
|
<span>{{status-title}}</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div class="index-member-list row" data-level="2" data-list="members">
|
<div class="index-member-list row" data-level="2" data-list="members">
|
||||||
<div class="index-member-item clearfix col-sm-6 row" style="font-size: 12px; min-height:180px;">
|
<div class="index-member-item clearfix col-lg-6 row">
|
||||||
<div class="col-sm-4">
|
<div class="member-pic-wrap col-xs-4">
|
||||||
<a href="{{link_to_show}}"><img class="member-pic" src="{{image}}" alt="{{name}}" title="{{name}}" width="100%"></a>
|
<a href="{{link_to_show}}">
|
||||||
|
<img class="member-pic" src="{{image}}" alt="{{name}}" title="{{name}}" width="100%">
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-8">
|
<div class="member-profile-data-wrap col-xs-8">
|
||||||
<table class="table table-condensed">
|
<table class="table">
|
||||||
<tbody data-list="profile_data" data-level="3">
|
<tbody data-list="profile_data" data-level="3">
|
||||||
<tr><th class="{{title_class}}" style="min-width:70px;">{{title}}</th><td class="{{value_class}}">{{value}}</td></tr>
|
<tr>
|
||||||
|
<th class="{{title_class}}">{{title}}</th>
|
||||||
|
<td class="{{value_class}}">{{value}}</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
|
@ -1,28 +1,47 @@
|
||||||
<div class="show" module="member">
|
<div class="show-member" module="member">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="member-pic col-md-3">
|
<div class="member-pic col-xs-3">
|
||||||
<img src="{{image}}" alt="{{name}}" title="{{name}}" width="100%">
|
<img src="{{image}}" alt="{{name}}" title="{{name}}" width="100%">
|
||||||
</div>
|
</div>
|
||||||
<div class="member-data col-md-9">
|
<div class="member-data col-xs-9">
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<div data-list="profile_data" data-level="0">
|
<div data-list="profile_data" data-level="0">
|
||||||
<tr><th class="{{title_class}}" width="30%">{{title}}</th><td class="{{value_class}}">{{value}}</td></tr>
|
<tr><th class="{{title_class}}">{{title}}</th><td class="{{value_class}}">{{value}}</td></tr>
|
||||||
</div>
|
</div>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br/>
|
<ul class="member-plugins nav nav-pills" role="tablist" data-list="plugins" data-level="0">
|
||||||
<ul class="nav nav-pills" role="tablist" data-list="plugins" data-level="0">
|
|
||||||
<li class="{{plugin_class}}"><a href="#{{plugin_name}}" role="tab" data-toggle="tab">{{plugin_title}}</a></li>
|
<li class="{{plugin_class}}"><a href="#{{plugin_name}}" role="tab" data-toggle="tab">{{plugin_title}}</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<br/>
|
|
||||||
<div class="tab-content" data-list="plugins" data-level="0">
|
<div class="tab-content" data-list="plugins" data-level="0">
|
||||||
<div class="tab-pane {{plugin_class}}" id="{{plugin_name}}">
|
<div class="tab-pane {{plugin_class}}" id="{{plugin_name}}">
|
||||||
<table class="table table-hover table-striped">
|
<table class="table table-hover table-striped">
|
||||||
|
<tbody data-list="plugin_data_intro" data-level="1">
|
||||||
|
<tr class="{{brief_display}}"><td>{{data_intro_title}}</td></tr>
|
||||||
|
</tbody>
|
||||||
<tbody data-list="plugin_data" data-level="1">
|
<tbody data-list="plugin_data" data-level="1">
|
||||||
<tr><td><a href="{{link_to_show}}">{{data_title}}</a></td></tr>
|
<tr><td class="{{complete_display}}"><a href="{{link_to_show}}">{{data_title}}</a></td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<script>
|
||||||
|
(function() {
|
||||||
|
// Adding class on first element
|
||||||
|
function memberPlugins() {
|
||||||
|
var plugins = document.querySelector('.member-plugins');
|
||||||
|
if( plugins.children.length === 0 ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if( plugins.querySelectorAll('.member-plugins .active').length === 0 ) {
|
||||||
|
var navs = plugins.querySelectorAll('.member-plugins > li'),
|
||||||
|
contents = plugins.nextElementSibling.children[0];
|
||||||
|
navs[0].className += ' ' + 'active';
|
||||||
|
contents.className += ' ' + 'active';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
memberPlugins();
|
||||||
|
}())
|
||||||
|
</script>
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
<div class="submenu-wrap">
|
<div class="sitemenu-wrap">
|
||||||
<h3 class="submenu__title">{{widget_title}}</h3>
|
<h3 class="sitemenu__title">{{widget_title}}</h3>
|
||||||
<ul data-list="pages" class="submenu__list level-1" data-level="0">
|
<ul data-list="pages" class="sitemenu__list level-1" data-level="0">
|
||||||
<li class="submenu__item level-1">
|
<li class="sitemenu__item level-1">
|
||||||
<a class="submenu__link level-1" href="{{url}}" target="{{target}}">{{page_name}}</a>
|
<a class="sitemenu__link level-1" href="{{url}}" target="{{target}}">{{page_name}}</a>
|
||||||
<ul class="submenu__list level-2" data-list="children" data-level="1">
|
<ul class="sitemenu__list level-2" data-list="children" data-level="1">
|
||||||
<li class="submenu__item level-2">
|
<li class="sitemenu__item level-2">
|
||||||
<a class="submenu__link level-2" href="{{url}}" target="{{target}}">{{page_name}}</a>
|
<a class="sitemenu__link level-2" href="{{url}}" target="{{target}}">{{page_name}}</a>
|
||||||
<ul data-list="children" data-level="2">
|
<ul data-list="children" data-level="2">
|
||||||
<li>
|
<li>
|
||||||
<a href="{{url}}" target="{{target}}">{{page_name}}</a>
|
<a href="{{url}}" target="{{target}}">{{page_name}}</a>
|
||||||
|
|
|
@ -126,6 +126,8 @@
|
||||||
<div style="height: 55px;">
|
<div style="height: 55px;">
|
||||||
<% if @store_permissions["permission_granted"] %>
|
<% if @store_permissions["permission_granted"] %>
|
||||||
<button id="update_btn" class="btn btn-primary pull-right" style="margin: 10px;"><i class="icon-inbox icon-white"></i> <%= t("update_manager_.system_update") %></button>
|
<button id="update_btn" class="btn btn-primary pull-right" style="margin: 10px;"><i class="icon-inbox icon-white"></i> <%= t("update_manager_.system_update") %></button>
|
||||||
|
|
||||||
|
<button id="module_update_btn" class="btn btn-primary pull-right" style="margin-right: 10px;"><i class="icon-inbox icon-white"></i> <%= t("update_manager_.module_update") %></button>
|
||||||
<% else %>
|
<% else %>
|
||||||
<a href="/<%= I18n.locale.to_s %>/admin/designs" class="pull-right">Please register here.</a>
|
<a href="/<%= I18n.locale.to_s %>/admin/designs" class="pull-right">Please register here.</a>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
@ -171,6 +173,9 @@
|
||||||
</div>
|
</div>
|
||||||
<div style="padding: 10px 0; height: 65px;">
|
<div style="padding: 10px 0; height: 65px;">
|
||||||
<button id="chech_update_btn" class="btn btn-small btn-inverse pull-right"><i class="icon-refresh icon-white"></i> <%= t("update_manager_.check_update") %></button>
|
<button id="chech_update_btn" class="btn btn-small btn-inverse pull-right"><i class="icon-refresh icon-white"></i> <%= t("update_manager_.check_update") %></button>
|
||||||
|
<% if @store_permissions["permission_granted"] %>
|
||||||
|
<button id="module_update_btn" class="btn btn-primary btn-small pull-right" style="margin-right: 10px;"><i class="icon-inbox icon-white"></i> <%= t("update_manager_.module_update") %></button>
|
||||||
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -245,10 +250,27 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function check_module_updates(){
|
||||||
|
$("#progress_msg").html("<strong><%= t("update_manager_.updating_orbit") %></strong>");
|
||||||
|
$("#new_update_container").fadeOut(function(){
|
||||||
|
$("#update_done").fadeOut(function(){
|
||||||
|
$("#update_status").fadeIn(function(){
|
||||||
|
$("#update_progress").fadeIn();
|
||||||
|
$.get("<%= admin_site_bundle_install_path %>",function(result){
|
||||||
|
$("#update_progress").fadeOut(function(){$("#update_done").fadeIn();});
|
||||||
|
$("#update_status").fadeIn();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
check_updates();
|
check_updates();
|
||||||
get_update_history();
|
get_update_history();
|
||||||
|
|
||||||
|
$("#module_update_btn").click(check_module_updates);
|
||||||
|
|
||||||
$("#chech_update_btn").click(check_updates);
|
$("#chech_update_btn").click(check_updates);
|
||||||
|
|
||||||
$("#update_btn").click(function(){
|
$("#update_btn").click(function(){
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
<style>
|
||||||
|
#main-wrap {
|
||||||
|
height: 100vh;
|
||||||
|
background-image: url(/assets/license-denied.png);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: 50% 25%;
|
||||||
|
}
|
||||||
|
.license-denied-wrap {
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 200px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.license-denied-wrap .license-denied {
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div class="license-denied-wrap">
|
||||||
|
<h3 class="license-denied">License Denied.</h3>
|
||||||
|
<p class="">Please contact <a href="http://www.rulingdigital.com">www.rulingdigital.com</a>.</p>
|
||||||
|
</div>
|
|
@ -3,7 +3,7 @@ gem 'news', git: 'http://gitlab.tp.rulingcom.com/root/nccu-news.git'
|
||||||
gem 'ad_banner', git: 'http://gitlab.tp.rulingcom.com/saurabh/adbanner-test.git'
|
gem 'ad_banner', git: 'http://gitlab.tp.rulingcom.com/saurabh/adbanner-test.git'
|
||||||
gem "archive", git: 'http://gitlab.tp.rulingcom.com/saurabh/archive.git'
|
gem "archive", git: 'http://gitlab.tp.rulingcom.com/saurabh/archive.git'
|
||||||
gem 'gallery', git: 'http://gitlab.tp.rulingcom.com/saurabh/gallery.git'
|
gem 'gallery', git: 'http://gitlab.tp.rulingcom.com/saurabh/gallery.git'
|
||||||
gem 'links', git: 'http://gitlab.tp.rulingcom.com/saurabh/links.git'
|
gem 'web_resource', git: 'http://gitlab.tp.rulingcom.com/saurabh/links.git'
|
||||||
gem 'page_content', git: 'http://gitlab.tp.rulingcom.com/saurabh/pagecontent.git'
|
gem 'page_content', git: 'http://gitlab.tp.rulingcom.com/saurabh/pagecontent.git'
|
||||||
gem 'faq', git: 'http://gitlab.tp.rulingcom.com/saurabh/faq.git'
|
gem 'faq', git: 'http://gitlab.tp.rulingcom.com/saurabh/faq.git'
|
||||||
#Personal Plugins
|
#Personal Plugins
|
||||||
|
|
|
@ -5,6 +5,7 @@ require File.expand_path('../application', __FILE__)
|
||||||
Orbit::Application.initialize!
|
Orbit::Application.initialize!
|
||||||
Orbit::Application.config.secret_key_base = 'acc6ffc5a7d360c9cf2a7bdb4ddf9a897942ec6767413a5c0324a0fa8b86197a96298288a66bd46d8770d8b6edf509aad65716961c2c364ce006b475e6cfd418'
|
Orbit::Application.config.secret_key_base = 'acc6ffc5a7d360c9cf2a7bdb4ddf9a897942ec6767413a5c0324a0fa8b86197a96298288a66bd46d8770d8b6edf509aad65716961c2c364ce006b475e6cfd418'
|
||||||
OrbitApp.cleanup_modules
|
OrbitApp.cleanup_modules
|
||||||
|
OrbitApp.check_module_permissions
|
||||||
|
|
||||||
if Site.count == 0
|
if Site.count == 0
|
||||||
site = Site.new
|
site = Site.new
|
||||||
|
|
|
@ -603,6 +603,7 @@ en:
|
||||||
check_update: Check Update
|
check_update: Check Update
|
||||||
checking_update: Checking for Updates
|
checking_update: Checking for Updates
|
||||||
system_update: Install Updates
|
system_update: Install Updates
|
||||||
|
module_update: Module Updates
|
||||||
update_done: System is update to date
|
update_done: System is update to date
|
||||||
update_faild: Update failed. Merge is require in the update. Please login to server and update manually.
|
update_faild: Update failed. Merge is require in the update. Please login to server and update manually.
|
||||||
update_history: Update Histroy
|
update_history: Update Histroy
|
||||||
|
|
|
@ -613,6 +613,7 @@ zh_tw:
|
||||||
check_update: 檢查更新
|
check_update: 檢查更新
|
||||||
checking_update: 檢查更新中
|
checking_update: 檢查更新中
|
||||||
system_update: 安裝更新
|
system_update: 安裝更新
|
||||||
|
module_update: 模組更新
|
||||||
update_done: 系統已是最新版本
|
update_done: 系統已是最新版本
|
||||||
update_faild: 更新失敗. 更新需要合併程式碼. 請登入伺服器手動進行更新.
|
update_faild: 更新失敗. 更新需要合併程式碼. 請登入伺服器手動進行更新.
|
||||||
update_history: 更新紀錄
|
update_history: 更新紀錄
|
||||||
|
|
|
@ -16,6 +16,7 @@ Orbit::Application.routes.draw do
|
||||||
get "/page_parts/getwidgets" => "page_parts#getwidgets"
|
get "/page_parts/getwidgets" => "page_parts#getwidgets"
|
||||||
get "/page_parts/info" => "page_parts#info"
|
get "/page_parts/info" => "page_parts#info"
|
||||||
get "/page_parts/edit_sub_part" => "page_parts#edit_sub_part"
|
get "/page_parts/edit_sub_part" => "page_parts#edit_sub_part"
|
||||||
|
get "/admin/license_denied" => "store_api#render_license_denied"
|
||||||
|
|
||||||
resources :pages
|
resources :pages
|
||||||
resources :page_parts do
|
resources :page_parts do
|
||||||
|
@ -27,6 +28,9 @@ Orbit::Application.routes.draw do
|
||||||
get "/module/:name" => "home#index"
|
get "/module/:name" => "home#index"
|
||||||
get "/module/:name/show" => "home#show"
|
get "/module/:name/show" => "home#show"
|
||||||
post "/store/confirmation" => "store_api#confirmation"
|
post "/store/confirmation" => "store_api#confirmation"
|
||||||
|
post "/store/install_module" => "store_api#install_module"
|
||||||
|
post "/store/uninstall_module" => "store_api#uninstall_module"
|
||||||
|
post "/store/restart_srever_after_install" => "store_api#restart_server_after_install"
|
||||||
|
|
||||||
# The priority is based upon order of creation: first created -> highest priority.
|
# The priority is based upon order of creation: first created -> highest priority.
|
||||||
# See how all your routes lay out with "rake routes".
|
# See how all your routes lay out with "rake routes".
|
||||||
|
@ -93,7 +97,7 @@ Orbit::Application.routes.draw do
|
||||||
|
|
||||||
get "members/get_role_fields/:id" => "members#get_role_fields", :as => :get_role_fields
|
get "members/get_role_fields/:id" => "members#get_role_fields", :as => :get_role_fields
|
||||||
get "members/import_members" => "members#import_members"
|
get "members/import_members" => "members#import_members"
|
||||||
get "members/unapproved_members" => "members#unapproved_members"
|
get "members/unapproved_members" => "members#unapproved_members"
|
||||||
|
|
||||||
resources :members do
|
resources :members do
|
||||||
collection do
|
collection do
|
||||||
|
@ -194,8 +198,9 @@ Orbit::Application.routes.draw do
|
||||||
get 'get_update_history'
|
get 'get_update_history'
|
||||||
get 'check_updates'
|
get 'check_updates'
|
||||||
get 'update_orbit'
|
get 'update_orbit'
|
||||||
|
get 'bundle_install'
|
||||||
get 'restart_server'
|
get 'restart_server'
|
||||||
get 'delete_mail_log'
|
get 'delete_mail_log'
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :designs do
|
resources :designs do
|
||||||
|
|
|
@ -13,12 +13,14 @@ module SideBarRenderer
|
||||||
@app_available_for = af
|
@app_available_for = af
|
||||||
if display?
|
if display?
|
||||||
content_tag :div, class: "sub-nav-block #{@icon_class}" do
|
content_tag :div, class: "sub-nav-block #{@icon_class}" do
|
||||||
concat content_tag :h4, I18n.t(@head_label)
|
if @belong_module_app.store_permission_granted
|
||||||
concat (content_tag :ul, class: "nav nav-list" do
|
concat content_tag :h4, I18n.t(@head_label)
|
||||||
@context_links.sort_by {| obj | obj.priority}.map{ |link|
|
concat (content_tag :ul, class: "nav nav-list" do
|
||||||
link.render(request, params, @current_module_app, @current_user, @belong_module_app, link.get_active_action, link.available_for)
|
@context_links.sort_by {| obj | obj.priority}.map{ |link|
|
||||||
}.join.html_safe
|
link.render(request, params, @current_module_app, @current_user, @belong_module_app, link.get_active_action, link.available_for)
|
||||||
end)
|
}.join.html_safe
|
||||||
|
end)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -33,9 +35,17 @@ module SideBarRenderer
|
||||||
@app_available_for = available_for
|
@app_available_for = available_for
|
||||||
if display?
|
if display?
|
||||||
content_tag :li, class: (module_sidebar_active? ? 'active' : nil) do
|
content_tag :li, class: (module_sidebar_active? ? 'active' : nil) do
|
||||||
link_to Rails.application.routes.url_helpers.send(@head_link) do
|
if @belong_module_app.store_permission_granted
|
||||||
content_tag :span do
|
link_to Rails.application.routes.url_helpers.send(@head_link) do
|
||||||
content_tag(:i, nil, class: @icon_class)
|
content_tag :span do
|
||||||
|
content_tag(:i, nil, class: @icon_class)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
link_to "/admin/license_denied", class: "license-denied" do
|
||||||
|
content_tag :span, class: "icons-blocked" do
|
||||||
|
content_tag(:i, nil, class: @icon_class)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -20,5 +20,53 @@ module OrbitApp
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def check_module_permissions
|
||||||
|
store_token = Site.first.store_token
|
||||||
|
module_apps = ModuleApp.all
|
||||||
|
exceptions = OrbitStore::MODULE_EXCEPTIONS
|
||||||
|
if !store_token.nil?
|
||||||
|
ids = []
|
||||||
|
module_index = {}
|
||||||
|
module_apps.each do |ma|
|
||||||
|
ids << ma.key
|
||||||
|
module_index[ma.key] = ma
|
||||||
|
end
|
||||||
|
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/check_module_permissions")
|
||||||
|
request.body = params_to_send.to_query
|
||||||
|
response = http.request(request) rescue nil
|
||||||
|
if !response.nil?
|
||||||
|
data = JSON.parse(response.body)
|
||||||
|
if response.code == "200"
|
||||||
|
if data["success"]
|
||||||
|
permissions = data["permissions"]
|
||||||
|
permissions.each do |permission|
|
||||||
|
ma = module_index[permission["app"]]
|
||||||
|
ma.store_permission_granted = (exceptions.include?(ma.key) ? true : permission["granted"])
|
||||||
|
ma.save
|
||||||
|
end
|
||||||
|
else
|
||||||
|
module_apps.each do |ma|
|
||||||
|
ma.store_permission_granted = (exceptions.include?(ma.key) ? true : false)
|
||||||
|
ma.save
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
module_apps.each do |ma|
|
||||||
|
ma.store_permission_granted = (exceptions.include?(ma.key) ? true : false)
|
||||||
|
ma.save
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
module_apps.each do |ma|
|
||||||
|
ma.store_permission_granted = (exceptions.include?(ma.key) ? true : false)
|
||||||
|
ma.save
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -62,7 +62,11 @@ module OrbitCoreLib
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
if !@module_app.nil?
|
if !@module_app.nil?
|
||||||
check_user_can_use
|
if @module_app.store_permission_granted || params["controller"] == "admin/authorizations"
|
||||||
|
check_user_can_use
|
||||||
|
else
|
||||||
|
redirect_to admin_license_denied_path
|
||||||
|
end
|
||||||
else
|
else
|
||||||
if current_user.nil? || !current_user.is_admin?
|
if current_user.nil? || !current_user.is_admin?
|
||||||
if params["controller"] != "admin/assets"
|
if params["controller"] != "admin/assets"
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
namespace :register_with_store do
|
||||||
|
task :register,[:arg] => :environment do |task,args|
|
||||||
|
modules = ModuleApp.all
|
||||||
|
ids = modules.collect{|ma| ma.key}
|
||||||
|
store_token = Site.first.store_token
|
||||||
|
module_apps = ModuleApp.all
|
||||||
|
exceptions = OrbitStore::MODULE_EXCEPTIONS
|
||||||
|
if !store_token.nil?
|
||||||
|
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?
|
||||||
|
puts "Cannot connect to store."
|
||||||
|
else
|
||||||
|
puts "All modules registered."
|
||||||
|
end
|
||||||
|
else
|
||||||
|
puts "Cannot register modules, site is not registered with store."
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue