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 'carrierwave'
|
||||
gem 'carrierwave-mongoid', :require => 'carrierwave/mongoid'
|
||||
|
||||
gem 'zip-zip'
|
||||
gem 'kaminari'
|
||||
gem "impressionist"
|
||||
gem "chartkick"
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
|
@ -1,8 +1,16 @@
|
|||
(function($) {
|
||||
$("document").ready(function(){
|
||||
$("document").ready(function(){
|
||||
// Get link data-attribute and make the banner clickable
|
||||
$('.w-ad-banner__slide').not('[data-link=""]').not(".youtube").addClass('cursor').on("click",function(){
|
||||
window.open($(this).data("link"),"_blank");
|
||||
$('.w-ad-banner__slide')
|
||||
.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));
|
|
@ -25,6 +25,9 @@ var FormValidator = function(form){
|
|||
nospace : function(value){
|
||||
return (/\s/.test(value) ? false : true);
|
||||
},
|
||||
lowercase : function(value){
|
||||
return (value == value.toLowerCase() ? true : false);
|
||||
},
|
||||
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,}))$/;
|
||||
return re.test(value);
|
||||
|
@ -40,35 +43,39 @@ var FormValidator = function(form){
|
|||
|
||||
var _attachSubmitHandler = function(){
|
||||
fv.form.on("submit",function(){
|
||||
failed_elements = [];
|
||||
$.each(elements_data,function(key,element){
|
||||
var validators = element.validators,
|
||||
messages = element.messages,
|
||||
el = fv.form.find("#" + key);
|
||||
for(i = 0; i < validators.length; i++){
|
||||
var error_span = (fv.form.find("div[for=" + key + "]").length ? $("div[for=" + key + "]") : $("<div class='validator_error_class text-error' for='" + key + "'></div>"));
|
||||
if(typeof fv.validate_functions[validators[i]] == "function"){
|
||||
if(!fv.validate_functions[validators[i]](el.val(),el)){
|
||||
error_span.text(messages[i]);
|
||||
el.after(error_span);
|
||||
failed_elements.push(el);
|
||||
break;
|
||||
}else{
|
||||
error_span.remove();
|
||||
}
|
||||
return fv.isFormValidated();
|
||||
})
|
||||
}
|
||||
|
||||
this.isFormValidated = function(){
|
||||
failed_elements = [];
|
||||
$.each(elements_data,function(key,element){
|
||||
var validators = element.validators,
|
||||
messages = element.messages,
|
||||
el = fv.form.find("#" + key);
|
||||
for(i = 0; i < validators.length; i++){
|
||||
var error_span = (fv.form.find("div[for=" + key + "]").length ? $("div[for=" + key + "]") : $("<div class='validator_error_class text-error' for='" + key + "'></div>"));
|
||||
if(typeof fv.validate_functions[validators[i]] == "function"){
|
||||
if(!fv.validate_functions[validators[i]](el.val(),el)){
|
||||
error_span.text(messages[i]);
|
||||
el.after(error_span);
|
||||
failed_elements.push(el);
|
||||
break;
|
||||
}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(){
|
||||
|
|
|
@ -122,6 +122,20 @@ legend {
|
|||
text-align: center;
|
||||
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 {
|
||||
margin: 0;
|
||||
width: 61px;
|
||||
|
@ -188,6 +202,7 @@ legend {
|
|||
}
|
||||
#sidebar .sidebar-nav > li a {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
}
|
||||
#sidebar .sidebar-nav > li i {
|
||||
font-size: 1.6em;
|
||||
|
|
|
@ -318,7 +318,7 @@ $orbit-bar-bgc-lighter: lighten($orbit-bar-bgc, 20%) !default;
|
|||
display: none;
|
||||
top: 0;
|
||||
margin: 0 2em;
|
||||
padding: 0.3em 0;
|
||||
padding: 0;
|
||||
color: #FFF;
|
||||
font-size: 1.4em;
|
||||
text-align: center;
|
||||
|
@ -328,6 +328,9 @@ $orbit-bar-bgc-lighter: lighten($orbit-bar-bgc, 20%) !default;
|
|||
a {
|
||||
color: #FFF;
|
||||
}
|
||||
.page-main & {
|
||||
padding: 0.3em 0;
|
||||
}
|
||||
}
|
||||
.orbit-bar-search-sign-language {
|
||||
float: right;
|
||||
|
@ -339,6 +342,7 @@ $orbit-bar-bgc-lighter: lighten($orbit-bar-bgc, 20%) !default;
|
|||
input[type="search"] {
|
||||
color: $orbit-bar-bgc-lighter;
|
||||
border: none;
|
||||
margin-bottom: 0;
|
||||
border-radius: 1.7em;
|
||||
line-height: 1.3em;
|
||||
padding: 0.2em 0.8em;
|
||||
|
|
|
@ -3,7 +3,7 @@ class Admin::ModuleStoreController < OrbitAdminController
|
|||
|
||||
def index
|
||||
@extensions = []
|
||||
@downloaded_extensions = get_downloaded_extension
|
||||
@downloaded_extensions = []
|
||||
# if current_site.site_token?
|
||||
# if current_site.store_confirmation
|
||||
# @extensions = get_extensions
|
||||
|
|
|
@ -106,7 +106,9 @@ class Admin::SitesController < OrbitAdminController
|
|||
else
|
||||
result = "success"
|
||||
# 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
|
||||
|
||||
render :text => result
|
||||
|
@ -117,6 +119,7 @@ class Admin::SitesController < OrbitAdminController
|
|||
|
||||
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=downloaded_extensions.rb bundle update && bundle` }
|
||||
%x(kill -s USR2 `cat tmp/pids/unicorn.pid`)
|
||||
sleep 5
|
||||
render :nothing => true
|
||||
|
|
|
@ -139,29 +139,44 @@ class MembersController < ApplicationController
|
|||
plugins = OrbitApp::Plugin::Registration.all rescue nil
|
||||
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
|
||||
if intro.nil? or intro.complete_list
|
||||
plugin_data = plugin.app_name.constantize.where(member_profile_id: member) rescue nil
|
||||
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)
|
||||
}
|
||||
if !intro.blank?
|
||||
if !intro.complete_list.blank?
|
||||
plugin_data = plugin.app_name.constantize.where(member_profile_id: member) rescue nil
|
||||
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)
|
||||
}
|
||||
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_intro" => pdi,
|
||||
"complete_display" => complete_display,
|
||||
"brief_display" => brief_display,
|
||||
"plugin_name" => plugin.module_app_name.underscore,
|
||||
"plugin_title" => t('module_name.'+plugin.module_app_name.underscore),
|
||||
"plugin_class" => idx==0 ? "active" : ""
|
||||
}
|
||||
}
|
||||
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,
|
||||
"profile_data" => profile_data,
|
||||
|
@ -175,7 +190,6 @@ class MembersController < ApplicationController
|
|||
def member_data(member, fields_to_show)
|
||||
profile_data = []
|
||||
fields_to_show.each do |field|
|
||||
# debugger
|
||||
case field['type']
|
||||
when 'profile'
|
||||
field_data = member.get_attribute_data(field) rescue {}
|
||||
|
|
|
@ -11,7 +11,7 @@ class PagesController < ApplicationController
|
|||
before_filter :set_edit_mode
|
||||
|
||||
def index
|
||||
@pages = Page.all
|
||||
@pages = Page.all
|
||||
# render json: @pages
|
||||
end
|
||||
|
||||
|
@ -76,10 +76,14 @@ class PagesController < ApplicationController
|
|||
params[:url] = page.url
|
||||
categories = []
|
||||
if page.module == "member"
|
||||
page.categories.each do |c|
|
||||
category = Role.find(c) rescue nil
|
||||
if !category.nil? && !category.disabled
|
||||
categories << c
|
||||
if page.categories.first == "all"
|
||||
categories = ["all"]
|
||||
else
|
||||
page.categories.each do |c|
|
||||
category = Role.find(c) rescue nil
|
||||
if !category.nil? && !category.disabled
|
||||
categories << c
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
|
@ -89,8 +93,8 @@ class PagesController < ApplicationController
|
|||
categories << c
|
||||
end
|
||||
end
|
||||
categories = ["all"] if categories.blank?
|
||||
end
|
||||
categories = ["all"] if categories.blank?
|
||||
@manifest = @key
|
||||
OrbitHelper.set_params params,current_user
|
||||
OrbitHelper.set_site_locale locale
|
||||
|
@ -186,30 +190,38 @@ class PagesController < ApplicationController
|
|||
"id" => cat.id.to_s
|
||||
}
|
||||
end
|
||||
tags = module_app.tags.collect do |t|
|
||||
{
|
||||
"name" => t.name,
|
||||
"id" => t.id.to_s
|
||||
}
|
||||
end
|
||||
else
|
||||
categories = []
|
||||
tags = []
|
||||
end
|
||||
end
|
||||
|
||||
roles = roles.nil? ? [] : roles
|
||||
categories = categories.nil? ? [] : categories
|
||||
tags = tags.nil? ? [] : tags
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
def new
|
||||
@page = Page.new(
|
||||
@page = Page.new(
|
||||
:enabled_for_mobile=>true,
|
||||
:menu_enabled_for=>["en", "zh_tw"],
|
||||
:enabled_for=>["en", "zh_tw"],
|
||||
:enabled_for_sitemap=>["en", "zh_tw"]
|
||||
)
|
||||
@pages = Page.where(:page_id.ne => "" , :page_id.exists => true)
|
||||
@modules = ModuleApp.all.frontend_enabled.order_by(:key=>'asc')
|
||||
@pages = Page.where(:page_id.ne => "" , :page_id.exists => true)
|
||||
@modules = ModuleApp.all.frontend_enabled.order_by(:key=>'asc')
|
||||
|
||||
end
|
||||
|
||||
|
@ -260,7 +272,7 @@ class PagesController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
private
|
||||
private
|
||||
|
||||
def get_layouts(module_app)
|
||||
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["role_status"] = p["role_status"] || []
|
||||
p["categories"] = p["categories"] || []
|
||||
p["tags"] = p["tags"] || []
|
||||
p["enabled_for"] = p["enabled_for"] || []
|
||||
p["menu_enabled_for"] = p["menu_enabled_for"] || []
|
||||
p["enabled_for_sitemap"] = p["enabled_for_sitemap"] || []
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
require "net/http"
|
||||
require 'open-uri'
|
||||
require 'zip/zip'
|
||||
class StoreApiController < ApplicationController
|
||||
def confirmation
|
||||
site_token = params[:site_token]
|
||||
|
@ -11,4 +14,80 @@ class StoreApiController < ApplicationController
|
|||
render :json => {"success" => false}.to_json
|
||||
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
|
|
@ -64,6 +64,8 @@ module ApplicationHelper
|
|||
end
|
||||
site_footer = site_footer.nil? ? "" : 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
|
||||
end
|
||||
|
||||
|
|
|
@ -172,8 +172,15 @@ module OrbitBackendHelper
|
|||
http = Net::HTTP.new(uri.host,uri.port)
|
||||
request = Net::HTTP::Get.new("/site/permissions")
|
||||
request.body = params_to_send.to_query
|
||||
response = http.request(request)
|
||||
data = JSON.parse(response.body)
|
||||
response = http.request(request) rescue nil
|
||||
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"]
|
||||
case data["error"]
|
||||
when "INVALID_SITE_TOKEN"
|
||||
|
|
|
@ -14,6 +14,7 @@ class ModuleApp
|
|||
field :widget_methods
|
||||
field :desktop_enabled, type: Boolean, default: false
|
||||
field :widget_settings
|
||||
field :store_permission_granted, type: Boolean, default: false
|
||||
|
||||
has_many :categories, dependent: :destroy, :autosave => true
|
||||
has_and_belongs_to_many :tags, dependent: :destroy, :autosave => true
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
class OrbitStore
|
||||
URL = "http://store.tp.rulingcom.com"
|
||||
MODULE_EXCEPTIONS = ["category","tag","authorization"]
|
||||
end
|
|
@ -1,110 +1,106 @@
|
|||
(function($) {
|
||||
|
||||
"use strict"
|
||||
|
||||
// Init functions
|
||||
|
||||
function init () {
|
||||
// Announcement modules
|
||||
var annc = {
|
||||
truncation : function (el, maxLength) {
|
||||
var doc = document;
|
||||
|
||||
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 ++ ) {
|
||||
if ( el[i].firstChild !== null ) {
|
||||
if( el[i].firstChild.length > maxLength ) {
|
||||
var newTitle = el[i].firstChild.nodeValue;
|
||||
var newTitle = newTitle.substring(0, maxLength) + '...'
|
||||
if( el[i].firstChild.length > len ) {
|
||||
var newStr = el[i].firstChild.nodeValue,
|
||||
newStr = newStr.substring(0, len) + '...'
|
||||
el
|
||||
.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() {
|
||||
var w$ = $('.w-announcement-4');
|
||||
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')
|
||||
el[i].parentNode.insertBefore(caret, el[i]);
|
||||
orbit.addClass(el[i], 'dropdown-menu');
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Targeting internal page
|
||||
if( $('body').attr('class') !== 'page-main' ) {
|
||||
submenuFix();
|
||||
}
|
||||
dropdown();
|
||||
bullEye();
|
||||
var plugin = {
|
||||
// RWD image resize script
|
||||
bullEye : function() {
|
||||
$(".bullseye").bullseye({
|
||||
fadeEffect: false
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 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($) {
|
||||
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";
|
||||
|
||||
// Google fonts
|
||||
@import url(http://fonts.googleapis.com/css?family=Roboto);
|
||||
|
||||
// Base Color
|
||||
$theme-gray: #495054;
|
||||
$theme-gray-light: #cecece;
|
||||
|
@ -16,8 +19,8 @@ $theme-color-third: #ed4c43;
|
|||
|
||||
|
||||
// Font stacks
|
||||
$main-font: Arial, "微軟正黑體", "Helvetica Neue", Helvetica, sans-serif;
|
||||
$sub-font: Arial, "新細明體", "Helvetica Neue", Helvetica, sans-serif;
|
||||
$main-font: 'Roboto', "微軟正黑體", "Helvetica Neue", Helvetica, sans-serif;
|
||||
$sub-font: 'Roboto', "新細明體", "Helvetica Neue", Helvetica, sans-serif;
|
||||
|
||||
|
||||
//
|
||||
|
|
|
@ -61,7 +61,7 @@
|
|||
}
|
||||
|
||||
// Widget-1
|
||||
.w-announcement-1 {
|
||||
.widget-announcement-1 {
|
||||
.w-annc__img-wrap {
|
||||
height: 200px;
|
||||
margin: 0 0 1em 0;
|
||||
|
@ -74,7 +74,7 @@
|
|||
}
|
||||
|
||||
// Widget-2
|
||||
.w-announcement-2 {
|
||||
.widget-announcement-2 {
|
||||
.w-annc__img-wrap {
|
||||
height: 200px;
|
||||
margin: 0 0 1em 0;
|
||||
|
@ -87,7 +87,7 @@
|
|||
}
|
||||
|
||||
// Widget-3
|
||||
.w-announcement-3 {
|
||||
.widget-announcement-3 {
|
||||
.w-annc__img-wrap {
|
||||
height: 200px;
|
||||
margin: 0 0 1em 0;
|
||||
|
@ -100,7 +100,7 @@
|
|||
}
|
||||
|
||||
// Widget-4
|
||||
.w-announcement-4 {
|
||||
.widget-announcement-4 {
|
||||
.w-annc__title {
|
||||
font-family: $main-font;
|
||||
line-height: 1.3;
|
||||
|
@ -116,7 +116,7 @@
|
|||
}
|
||||
|
||||
// Widget-5
|
||||
.w-announcement-5 {
|
||||
.widget-announcement-5 {
|
||||
.w-annc__title {
|
||||
font-family: $main-font;
|
||||
line-height: 1.3;
|
||||
|
@ -130,7 +130,7 @@
|
|||
}
|
||||
|
||||
// Widget-6
|
||||
.w-announcement-6 {
|
||||
.widget-announcement-6 {
|
||||
.w-annc__item {
|
||||
margin-bottom: 0.8em;
|
||||
padding-bottom: 0.8em;
|
||||
|
@ -151,7 +151,7 @@
|
|||
}
|
||||
|
||||
// Widget-7
|
||||
.w-announcement-7 {
|
||||
.widget-announcement-7 {
|
||||
.w-annc__item {
|
||||
margin-bottom: 0.8em;
|
||||
padding-bottom: 0.8em;
|
||||
|
@ -173,7 +173,7 @@
|
|||
|
||||
// Widget-8
|
||||
// ## Table
|
||||
.w-announcement-8 {
|
||||
.widget-announcement-8 {
|
||||
.w-annc__th {
|
||||
color: #fff;
|
||||
background: $theme-color-main;
|
||||
|
@ -194,7 +194,7 @@
|
|||
|
||||
// Widget-9
|
||||
// ## Table
|
||||
.w-announcement-9 {
|
||||
.widget-announcement-9 {
|
||||
.w-annc__th {
|
||||
color: #fff;
|
||||
background: $theme-color-main;
|
||||
|
@ -214,7 +214,7 @@
|
|||
}
|
||||
|
||||
// Widget-10
|
||||
.w-announcement-10 {
|
||||
.widget-announcement-10 {
|
||||
.w-annc__item {
|
||||
margin-bottom: 0.8em;
|
||||
padding-bottom: 0.8em;
|
||||
|
@ -234,7 +234,7 @@
|
|||
|
||||
// Widget-11
|
||||
// ## Table
|
||||
.w-announcement-11 {
|
||||
.widget-announcement-11 {
|
||||
.w-annc__th {
|
||||
color: #fff;
|
||||
background: $theme-color-main;
|
||||
|
@ -254,7 +254,7 @@
|
|||
}
|
||||
|
||||
// Widget-12
|
||||
.w-announcement-12 {
|
||||
.widget-announcement-12 {
|
||||
.w-annc__list {
|
||||
padding: 0 15px;
|
||||
}
|
||||
|
@ -348,7 +348,7 @@
|
|||
}
|
||||
|
||||
// Index-1
|
||||
.i-announcement-1 {
|
||||
.index-announcement-1 {
|
||||
.i-annc__th {
|
||||
color: #fff;
|
||||
background: $theme-color-main;
|
||||
|
@ -407,18 +407,7 @@
|
|||
}
|
||||
.s-annc__tag-wrap {
|
||||
.s-annc__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;
|
||||
}
|
||||
font-weight: normal;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -430,6 +419,9 @@
|
|||
padding-top: 1em;
|
||||
border-top: 1px dotted $theme-gray-light;
|
||||
}
|
||||
.s-annc__related-file {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.s-annc__related-file,
|
||||
.s-annc__related-link {
|
||||
padding-bottom: 6px;
|
||||
|
@ -440,22 +432,17 @@
|
|||
color: darken($theme-gray-light, 10%);
|
||||
}
|
||||
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-file-list {
|
||||
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-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-title {
|
||||
@extend .unity-title;
|
||||
font-family: $main-font;
|
||||
th,
|
||||
td {
|
||||
font-size: 0.8125rem;
|
||||
}
|
||||
.post-metadata {
|
||||
border-bottom: 1px solid $theme-gray-light;
|
||||
@include clearfix();
|
||||
li {
|
||||
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;
|
||||
}
|
||||
}
|
||||
.member-plugins {
|
||||
margin-bottom: 20px;
|
||||
a {
|
||||
font-size: 0.8125rem;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,5 +1,4 @@
|
|||
// Base
|
||||
@import url("http://fonts.googleapis.com/css?family=Droid+Sans:400,700");
|
||||
@import "bootstrap/mixins";
|
||||
@import "bootstrap/variables";
|
||||
@import "base/mixins";
|
||||
|
@ -7,7 +6,7 @@
|
|||
@import "base/unity";
|
||||
@import "base/pagination";
|
||||
@import "base/orbitbar-override";
|
||||
@import "base/genernal";
|
||||
@import "base/global";
|
||||
|
||||
// Layout
|
||||
@import "layout/header";
|
||||
|
@ -29,11 +28,3 @@
|
|||
// Widget
|
||||
@import "widget/breadcrumb";
|
||||
@import "widget/sitemenu";
|
||||
|
||||
html {
|
||||
font-size: 100%;
|
||||
}
|
||||
body {
|
||||
margin-top: 40px; // needed for Orbit bar
|
||||
font-size: inherit;
|
||||
}
|
|
@ -1,86 +1,52 @@
|
|||
.submenu-wrap {
|
||||
@include clearfix();
|
||||
.sitemenu-wrap {
|
||||
padding: 10px 0;
|
||||
|
||||
.submenu__title {
|
||||
@include clearfix;
|
||||
.sitemenu__title {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.submenu__list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
.sitemenu__list {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.submenu__item.level-1 {
|
||||
.sitemenu__item.level-1 {
|
||||
font-size: 0.8125rem;
|
||||
position: relative;
|
||||
float: left;
|
||||
margin-right: 1%;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.submenu__link.level-1 {
|
||||
float: left;
|
||||
padding: 8px .8em;
|
||||
padding-bottom: 8px;
|
||||
font-size: 13px;
|
||||
font-size: 0.8125rem;
|
||||
background: $theme-color-second;
|
||||
color: #fff;
|
||||
padding: 8px 0.8em;
|
||||
border-radius: 0.2em;
|
||||
|
||||
border-radius: .2em;
|
||||
background: $theme-color-second;
|
||||
&:hover {
|
||||
background: darken($theme-color-second, 10%);
|
||||
}
|
||||
}
|
||||
|
||||
.submenu__item:hover .dropdown {
|
||||
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 {
|
||||
.sitemenu__link.level-1 {
|
||||
margin-right: .25rem;
|
||||
color: #fff;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.submenu__list.hidden--item {
|
||||
display: none;
|
||||
|
||||
&:before {
|
||||
display: none;
|
||||
.sitemenu___dropdown-toggle {
|
||||
font-size: 0.75rem;
|
||||
padding: 2px .3125rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
// 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">
|
||||
<div class="container layout-footer-inner">
|
||||
<div class="layout-footer-content">{{footer-data}}</div>
|
||||
<div>{{site-counter}}</div>
|
||||
</div>
|
||||
</footer>
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<%= render_partial("head") %>
|
||||
</head>
|
||||
<body class="page-main">
|
||||
<body class="page-home">
|
||||
<%= render_orbit_bar %>
|
||||
<%= render_header %>
|
||||
<section class="layout-slide" data-pp="4"></section>
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
<ul class="pagination" data-pagination="true">
|
||||
<li class="{{pagination_active}}"><a href="{{pagination_link}}">{{page_number}}</a></li>
|
||||
</ul>
|
||||
<ul class="pagination pagination-sm" data-pagination="true">
|
||||
<li class="{{pagination_active}}">
|
||||
<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"
|
||||
data-list="images"
|
||||
data-level="0"
|
||||
|
@ -21,3 +21,5 @@
|
|||
<div class="w-ad-banner__caption"></div>
|
||||
<ul class="w-ad-banner__pager"></ul>
|
||||
</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"
|
||||
data-list="images"
|
||||
data-level="0"
|
||||
|
@ -19,7 +19,6 @@
|
|||
</div>
|
||||
<script type="text/javascript">
|
||||
$("document").ready(function(){
|
||||
// total_players = $("*[data-youtube-id]").length
|
||||
$("*[data-youtube-id]").each(function(){
|
||||
var obj = $(this).find("embed");
|
||||
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"
|
||||
data-list="images"
|
||||
data-level="0"
|
||||
data-cycle-slides=".w-ad-banner__slide"
|
||||
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}}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="w-ad-banner__pager"></ul>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -11,8 +11,8 @@
|
|||
{
|
||||
"filename" : "ad_banner_widget2_video",
|
||||
"name" : {
|
||||
"zh_tw" : "2. 橫幅輪播 ( 圖片, 導航圖示 )",
|
||||
"en" : "2. Carousel ( image, navigation, video )"
|
||||
"zh_tw" : "2. 橫幅輪播 + Youtube影片 ( 圖片, Youtube影片, 導航圖示 )",
|
||||
"en" : "2. Carousel ( image, Youtube video, navigation )"
|
||||
},
|
||||
"thumbnail" : "thumbnail-block.png"
|
||||
},
|
||||
|
@ -20,9 +20,18 @@
|
|||
"filename" : "ad_banner_widget3",
|
||||
"name" : {
|
||||
"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"
|
||||
}
|
||||
|
||||
]
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
<div class="w-annc w-announcement-1">
|
||||
<div class="w-annc widget-announcement-1">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</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">
|
||||
<span>{{widget-title}}</span>
|
||||
</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">
|
||||
<span>{{widget-title}}</span>
|
||||
</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">
|
||||
<span>{{widget-title}}</span>
|
||||
</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">
|
||||
<span>{{widget-title}}</span>
|
||||
</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">
|
||||
<span>{{widget-title}}</span>
|
||||
</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">
|
||||
<span>{{widget-title}}</span>
|
||||
</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">
|
||||
<span>{{widget-title}}</span>
|
||||
</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">
|
||||
<span>{{widget-title}}</span>
|
||||
</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">
|
||||
<span>{{widget-title}}</span>
|
||||
</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">
|
||||
<span>{{widget-title}}</span>
|
||||
</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">
|
||||
<span>{{widget-title}}</span>
|
||||
</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>
|
||||
<table class="i-annc__table table table-striped">
|
||||
<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>
|
||||
<ul class="i-annc__list" data-level="0" data-list="announcements">
|
||||
<li class="i-annc__item">
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<article class="s-annc s-announcement">
|
||||
<h1 class="s-annc__show-title">{{title}}</h1>
|
||||
<article class="s-annc show-announcement">
|
||||
<h3 class="s-annc__show-title">{{title}}</h3>
|
||||
|
||||
<ul class="s-annc__meta-wrap list-unstyled">
|
||||
<li class="s-annc__date-wrap s-annc__meta--item">
|
||||
|
@ -13,7 +13,7 @@
|
|||
<li class="s-annc__tag-wrap s-annc__meta--item ">
|
||||
<i class="fa fa-tags"></i>
|
||||
<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>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -26,14 +26,14 @@
|
|||
<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" href="{{file_url}}">{{file_title}}</a>
|
||||
<a class="s-annc__flie-title btn btn-default btn-sm" href="{{file_url}}">{{file_title}}</a>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="s-annc__related-link">
|
||||
<i class="fa fa-fw fa-link"></i>
|
||||
<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>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -47,26 +47,23 @@
|
|||
{{link_to_edit}}
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
(function($) {
|
||||
|
||||
// 當metadata-tags沒內容時將會隱藏
|
||||
if(!$('.metadata-tags .tag').length) {
|
||||
$('.metadata-tags').remove();
|
||||
function hideEmptyEl(el, elParent) {
|
||||
if( el.length === 0) {
|
||||
elParent.addClass('hide');
|
||||
}
|
||||
}
|
||||
|
||||
// 當post-related沒內容時會隱藏
|
||||
if($('.post-related').length) {
|
||||
var element = ['.post-related-flises-list', '.post-related-links-list'],
|
||||
n = 0;
|
||||
$.each(element, function(index, val) {
|
||||
if(!$(val).text()) {
|
||||
$(val).closest('li').remove();
|
||||
n += 1;
|
||||
}
|
||||
if(n == element.length) {
|
||||
$('.post-related').remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
// Hiding parent element when children elements are not present
|
||||
// Tags
|
||||
hideEmptyEl($('.s-annc__tag'), $('.s-annc__tag-wrap'));
|
||||
|
||||
// Attachments
|
||||
hideEmptyEl($('.s-annc__flie-title'), $('.s-annc__related-file'));
|
||||
|
||||
// Links
|
||||
hideEmptyEl($('.s-annc__link-title'), $('.s-annc__related-link'));
|
||||
|
||||
}(jQuery));
|
||||
</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>
|
||||
<ul class="w-archive__list level-1" data-list="categories" data-level="0">
|
||||
<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>
|
||||
<ul class="i-archive__list" data-list="categories" data-level="0">
|
||||
<li class="i-archive__item">
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<i class="fa fa-th-list"></i>
|
||||
<a data-toggle="collapse" data-parent="#index-archive-group" href="#collapse" class="collapsed">
|
||||
{{category-title}}
|
||||
</a>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<div class="show-archive">
|
||||
<h1 class="show-title">
|
||||
<h3 class="show-title">
|
||||
<span>{{title}}</span>
|
||||
</h1>
|
||||
</h3>
|
||||
<div class="show-archive-body">
|
||||
<dl class="dl-horizontal show-archive-item-group" data-list="archives" data-level="1">
|
||||
<dt class="show-archive-item-list">
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
<div id="orbit_calendar">
|
||||
<div id='sec1' class="cal-fn">
|
||||
<div id="sec1">
|
||||
<div class="btn-toolbar" id="navigation">
|
||||
<div id="calendar-nav">
|
||||
<button class="btn" id="today_btn">Today</button>
|
||||
<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>
|
||||
</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>
|
||||
</button>
|
||||
<button class="btn btn-default btn-sm" id="today_btn">Today</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -17,12 +17,12 @@
|
|||
</div>
|
||||
<div id='sec3' class="btn-toolbar">
|
||||
<div class="btn-group calendar_mode">
|
||||
<button class="btn mode_switch" data-mode="agendaDay" >day</button>
|
||||
<button class="btn mode_switch" data-mode="agendaWeek" >week</button>
|
||||
<button class="btn active mode_switch" 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="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">
|
||||
<button id="refresh_btn" class="btn btn-default btn-sm">
|
||||
<i class="icons-cycle"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
@ -33,7 +33,7 @@
|
|||
</div>
|
||||
</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">
|
||||
var calendar = new Calendar("#calendar","{{page_id}}");
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<article>
|
||||
<div class="post-title">
|
||||
<h1>{{question}}</h1>
|
||||
<h3>{{question}}</h3>
|
||||
</div>
|
||||
|
||||
<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">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
|
@ -1,4 +1,4 @@
|
|||
<div class="widget-gallery widget2">
|
||||
<div class="widget-gallery widget3">
|
||||
<h3 class="widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</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-group" data-list="roles" data-level="0">
|
||||
<div class="index-member-group-item">
|
||||
|
||||
<div class="index-member-status" data-level="1" data-list="status-list">
|
||||
|
||||
<h3 class="index-title">
|
||||
<span>{{status-title}}</span>
|
||||
</h3>
|
||||
|
||||
<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="col-sm-4">
|
||||
<a href="{{link_to_show}}"><img class="member-pic" src="{{image}}" alt="{{name}}" title="{{name}}" width="100%"></a>
|
||||
<div class="index-member-item clearfix col-lg-6 row">
|
||||
<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>
|
||||
</div>
|
||||
<div class="col-sm-8">
|
||||
<table class="table table-condensed">
|
||||
<div class="member-profile-data-wrap col-xs-8">
|
||||
<table class="table">
|
||||
<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>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,30 +1,30 @@
|
|||
<div class="index-member index1">
|
||||
<div class="index-member-group" data-list="roles" data-level="0">
|
||||
<div class="index-member-group-item">
|
||||
|
||||
<div class="index-member-status" data-level="1" data-list="status-list">
|
||||
|
||||
<h3 class="index-title">
|
||||
<span>{{status-title}}</span>
|
||||
</h3>
|
||||
|
||||
<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="col-sm-4">
|
||||
<a href="{{link_to_show}}"><img class="member-pic" src="{{image}}" alt="{{name}}" title="{{name}}" width="100%"></a>
|
||||
<div class="index-member-item clearfix col-lg-6 row">
|
||||
<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>
|
||||
</div>
|
||||
<div class="col-sm-8">
|
||||
<table class="table table-condensed">
|
||||
<div class="member-profile-data-wrap col-xs-8">
|
||||
<table class="table">
|
||||
<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>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -6,22 +6,25 @@
|
|||
<span>{{status-title}}</span>
|
||||
</h3>
|
||||
<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="col-sm-4">
|
||||
<a href="{{link_to_show}}"><img class="member-pic" src="{{image}}" alt="{{name}}" title="{{name}}" width="100%"></a>
|
||||
<div class="index-member-item clearfix col-lg-6 row">
|
||||
<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>
|
||||
</div>
|
||||
<div class="col-sm-8">
|
||||
<table class="table table-condensed">
|
||||
<div class="member-profile-data-wrap col-xs-8">
|
||||
<table class="table">
|
||||
<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>
|
||||
</table>
|
||||
</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="member-pic col-md-3">
|
||||
<div class="member-pic col-xs-3">
|
||||
<img src="{{image}}" alt="{{name}}" title="{{name}}" width="100%">
|
||||
</div>
|
||||
<div class="member-data col-md-9">
|
||||
<div class="member-data col-xs-9">
|
||||
<table class="table table-striped">
|
||||
<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>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<br/>
|
||||
<ul class="nav nav-pills" role="tablist" data-list="plugins" data-level="0">
|
||||
<ul class="member-plugins 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>
|
||||
</ul>
|
||||
<br/>
|
||||
<div class="tab-content" data-list="plugins" data-level="0">
|
||||
<div class="tab-pane {{plugin_class}}" id="{{plugin_name}}">
|
||||
<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">
|
||||
<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>
|
||||
</table>
|
||||
</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">
|
||||
<h3 class="submenu__title">{{widget_title}}</h3>
|
||||
<ul data-list="pages" class="submenu__list level-1" data-level="0">
|
||||
<li class="submenu__item level-1">
|
||||
<a class="submenu__link level-1" href="{{url}}" target="{{target}}">{{page_name}}</a>
|
||||
<ul class="submenu__list level-2" data-list="children" data-level="1">
|
||||
<li class="submenu__item level-2">
|
||||
<a class="submenu__link level-2" href="{{url}}" target="{{target}}">{{page_name}}</a>
|
||||
<div class="sitemenu-wrap">
|
||||
<h3 class="sitemenu__title">{{widget_title}}</h3>
|
||||
<ul data-list="pages" class="sitemenu__list level-1" data-level="0">
|
||||
<li class="sitemenu__item level-1">
|
||||
<a class="sitemenu__link level-1" href="{{url}}" target="{{target}}">{{page_name}}</a>
|
||||
<ul class="sitemenu__list level-2" data-list="children" data-level="1">
|
||||
<li class="sitemenu__item level-2">
|
||||
<a class="sitemenu__link level-2" href="{{url}}" target="{{target}}">{{page_name}}</a>
|
||||
<ul data-list="children" data-level="2">
|
||||
<li>
|
||||
<a href="{{url}}" target="{{target}}">{{page_name}}</a>
|
||||
|
|
|
@ -126,6 +126,8 @@
|
|||
<div style="height: 55px;">
|
||||
<% 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="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 %>
|
||||
<a href="/<%= I18n.locale.to_s %>/admin/designs" class="pull-right">Please register here.</a>
|
||||
<% end %>
|
||||
|
@ -171,6 +173,9 @@
|
|||
</div>
|
||||
<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>
|
||||
<% 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>
|
||||
|
@ -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(){
|
||||
check_updates();
|
||||
get_update_history();
|
||||
|
||||
$("#module_update_btn").click(check_module_updates);
|
||||
|
||||
$("#chech_update_btn").click(check_updates);
|
||||
|
||||
$("#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 "archive", git: 'http://gitlab.tp.rulingcom.com/saurabh/archive.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 'faq', git: 'http://gitlab.tp.rulingcom.com/saurabh/faq.git'
|
||||
#Personal Plugins
|
||||
|
|
|
@ -5,6 +5,7 @@ require File.expand_path('../application', __FILE__)
|
|||
Orbit::Application.initialize!
|
||||
Orbit::Application.config.secret_key_base = 'acc6ffc5a7d360c9cf2a7bdb4ddf9a897942ec6767413a5c0324a0fa8b86197a96298288a66bd46d8770d8b6edf509aad65716961c2c364ce006b475e6cfd418'
|
||||
OrbitApp.cleanup_modules
|
||||
OrbitApp.check_module_permissions
|
||||
|
||||
if Site.count == 0
|
||||
site = Site.new
|
||||
|
|
|
@ -603,6 +603,7 @@ en:
|
|||
check_update: Check Update
|
||||
checking_update: Checking for Updates
|
||||
system_update: Install Updates
|
||||
module_update: Module Updates
|
||||
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_history: Update Histroy
|
||||
|
|
|
@ -613,6 +613,7 @@ zh_tw:
|
|||
check_update: 檢查更新
|
||||
checking_update: 檢查更新中
|
||||
system_update: 安裝更新
|
||||
module_update: 模組更新
|
||||
update_done: 系統已是最新版本
|
||||
update_faild: 更新失敗. 更新需要合併程式碼. 請登入伺服器手動進行更新.
|
||||
update_history: 更新紀錄
|
||||
|
|
|
@ -16,6 +16,7 @@ Orbit::Application.routes.draw do
|
|||
get "/page_parts/getwidgets" => "page_parts#getwidgets"
|
||||
get "/page_parts/info" => "page_parts#info"
|
||||
get "/page_parts/edit_sub_part" => "page_parts#edit_sub_part"
|
||||
get "/admin/license_denied" => "store_api#render_license_denied"
|
||||
|
||||
resources :pages
|
||||
resources :page_parts do
|
||||
|
@ -27,6 +28,9 @@ Orbit::Application.routes.draw do
|
|||
get "/module/:name" => "home#index"
|
||||
get "/module/:name/show" => "home#show"
|
||||
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.
|
||||
# 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/import_members" => "members#import_members"
|
||||
get "members/unapproved_members" => "members#unapproved_members"
|
||||
get "members/unapproved_members" => "members#unapproved_members"
|
||||
|
||||
resources :members do
|
||||
collection do
|
||||
|
@ -194,8 +198,9 @@ Orbit::Application.routes.draw do
|
|||
get 'get_update_history'
|
||||
get 'check_updates'
|
||||
get 'update_orbit'
|
||||
get 'bundle_install'
|
||||
get 'restart_server'
|
||||
get 'delete_mail_log'
|
||||
get 'delete_mail_log'
|
||||
end
|
||||
|
||||
resources :designs do
|
||||
|
|
|
@ -13,12 +13,14 @@ module SideBarRenderer
|
|||
@app_available_for = af
|
||||
if display?
|
||||
content_tag :div, class: "sub-nav-block #{@icon_class}" do
|
||||
concat content_tag :h4, I18n.t(@head_label)
|
||||
concat (content_tag :ul, class: "nav nav-list" do
|
||||
@context_links.sort_by {| obj | obj.priority}.map{ |link|
|
||||
link.render(request, params, @current_module_app, @current_user, @belong_module_app, link.get_active_action, link.available_for)
|
||||
}.join.html_safe
|
||||
end)
|
||||
if @belong_module_app.store_permission_granted
|
||||
concat content_tag :h4, I18n.t(@head_label)
|
||||
concat (content_tag :ul, class: "nav nav-list" do
|
||||
@context_links.sort_by {| obj | obj.priority}.map{ |link|
|
||||
link.render(request, params, @current_module_app, @current_user, @belong_module_app, link.get_active_action, link.available_for)
|
||||
}.join.html_safe
|
||||
end)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -33,9 +35,17 @@ module SideBarRenderer
|
|||
@app_available_for = available_for
|
||||
if display?
|
||||
content_tag :li, class: (module_sidebar_active? ? 'active' : nil) do
|
||||
link_to Rails.application.routes.url_helpers.send(@head_link) do
|
||||
content_tag :span do
|
||||
content_tag(:i, nil, class: @icon_class)
|
||||
if @belong_module_app.store_permission_granted
|
||||
link_to Rails.application.routes.url_helpers.send(@head_link) do
|
||||
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
|
||||
|
|
|
@ -20,5 +20,53 @@ module OrbitApp
|
|||
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
|
|
@ -62,7 +62,11 @@ module OrbitCoreLib
|
|||
return
|
||||
end
|
||||
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
|
||||
if current_user.nil? || !current_user.is_admin?
|
||||
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