diff --git a/app/assets/images/social-share-button.png b/app/assets/images/social-share-button.png
new file mode 100644
index 0000000..3507161
Binary files /dev/null and b/app/assets/images/social-share-button.png differ
diff --git a/app/assets/javascripts/lib/social-share-button.coffee b/app/assets/javascripts/lib/social-share-button.coffee
new file mode 100644
index 0000000..cec9fcb
--- /dev/null
+++ b/app/assets/javascripts/lib/social-share-button.coffee
@@ -0,0 +1,33 @@
+window.SocialShareButton =
+ openUrl : (url) ->
+ window.open(url)
+ false
+
+ share : (el) ->
+ site = $(el).data('site')
+ title = encodeURIComponent($(el).parent().data('title'))
+ img = encodeURIComponent($(el).parent().data("img"))
+ fb_url = encodeURIComponent($(el).parent().data("fb_url"))
+ url = encodeURIComponent(location.href)
+ switch site
+ when "weibo"
+ SocialShareButton.openUrl("http://v.t.sina.com.cn/share/share.php?url=#{url}&pic=#{img}&title=#{title}&content=utf-8")
+ when "twitter"
+ SocialShareButton.openUrl("https://twitter.com/home?status=#{title}: #{url}")
+ when "douban"
+ SocialShareButton.openUrl("http://www.douban.com/recommend/?url=#{url}&title=#{title}&image=#{img}")
+ when "facebook"
+ SocialShareButton.openUrl("http://www.facebook.com/sharer.php?t=#{title}&u=#{fb_url}")
+ when "qq"
+ SocialShareButton.openUrl("http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=#{url}&title=#{title}&pics=#{img}")
+ when "tqq"
+ SocialShareButton.openUrl("http://share.v.t.qq.com/index.php?c=share&a=index&url=#{url}&title=#{title}&pic=#{img}")
+ when "baidu"
+ SocialShareButton.openUrl("http://apps.hi.baidu.com/share/?url=#{url}&title=#{title}&content=")
+ when "kaixin001"
+ SocialShareButton.openUrl("http://www.kaixin001.com/rest/records.php?url=#{url}&content=#{title}&style=11&pic=#{img}")
+ when "renren"
+ SocialShareButton.openUrl("http://widget.renren.com/dialog/share?resourceUrl=#{url}&title=#{title}&description=")
+ when "google_plus"
+ SocialShareButton.openUrl("https://plus.google.com/share?url=#{url}&t=#{title}")
+ false
\ No newline at end of file
diff --git a/app/assets/javascripts/member-selection.js b/app/assets/javascripts/member-selection.js
index 276b48b..cf783d0 100644
--- a/app/assets/javascripts/member-selection.js
+++ b/app/assets/javascripts/member-selection.js
@@ -10,7 +10,7 @@ $(document).ready(function() {
type: 'GET',
url: $(this).attr("rel"),
dataType: 'script',
- data: {ids: ids},
+ data: {field: $(this).attr("field"), ids: ids},
success: function (msg) {
$("#member-filter").modal('show'); },
error: function(){
@@ -20,6 +20,11 @@ $(document).ready(function() {
});
return false;
});
+
+ $(document).on('click', ".remove_user", function(){
+ $(this).parent().remove();
+ });
+
$("#remove_users").on('click', function(){
var ids = [];
var users = $('.selected_user input[type="checkbox"]:checked');
diff --git a/app/assets/javascripts/orbit-bar-search.js b/app/assets/javascripts/orbit-bar-search.js
new file mode 100644
index 0000000..e0d9bf9
--- /dev/null
+++ b/app/assets/javascripts/orbit-bar-search.js
@@ -0,0 +1,10 @@
+$(document).ajaxStop(function() {
+ $('.nav').find('.dropdown').on({
+ mouseleave: function() {
+ $(this).removeClass("open");
+ },
+ mouseenter: function() {
+ $(this).addClass("open")
+ }
+ });
+});
\ No newline at end of file
diff --git a/app/assets/stylesheets/member_select.css b/app/assets/stylesheets/member_select.css
new file mode 100644
index 0000000..891a4f3
--- /dev/null
+++ b/app/assets/stylesheets/member_select.css
@@ -0,0 +1,230 @@
+/* Member Filter */
+#select_user #select_user_modal.modal {
+ width: 80%;
+ margin-left: -40%;
+}
+#select_user #select_user_modal .modal-body {
+ max-height: 425px;
+}
+#select_user #select_user_modal .modal-body form {
+ margin-bottom: 0px;
+}
+#select_user #select_user_modal .modal-body form fieldset {
+ min-height: 360px;
+}
+#select_user #select_user_modal .modal-body .radio.inline,
+#select_user #select_user_modal .modal-body .checkbox.inline {
+ display: inline-block;
+ padding-top: 5px;
+ margin-bottom: 0;
+ vertical-align: middle;
+ min-width: 100px;
+ margin-left: 0;
+}
+#select_user #select_user_modal .modal-body .form-actions {
+ margin: 20px 0 0;
+ padding: 10px 0 0;
+ background-color: transparent;
+ text-align: right;
+}
+#select_user #select_user_modal .modal-body .tabs-left > .nano {
+ width: 160px;
+ min-height: 425px;
+ float: left;
+}
+#select_user #select_user_modal .modal-body .tabs-left > .nano .pane {
+ right: 6px;
+}
+#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs {
+ width: 140px;
+ float: left;
+ margin-bottom: 0;
+ margin-right: 0;
+ border-right: 1px solid #ddd;
+ border-bottom: none;
+}
+#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li {
+ float: none;
+}
+#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a {
+ min-width: 74px;
+ margin-right: 0;
+ margin-bottom: 3px;
+}
+#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a {
+ margin-right: -1px;
+ -webkit-border-radius: 4px 0 0 4px;
+ -moz-border-radius: 4px 0 0 4px;
+ border-radius: 4px 0 0 4px;
+}
+#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs > li > a:hover {
+ border-color: #eeeeee #dddddd #eeeeee #eeeeee;
+}
+#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs .active > a,
+#select_user #select_user_modal .modal-body .tabs-left > .nano > .content > .nav-tabs .active > a:hover {
+ border-color: #ddd transparent #ddd #ddd;
+ *border-right-color: #ffffff;
+}
+#select_user #select_user_modal .member-filter-options {
+ float: left;
+ display: inline-block;
+ width: 175px;
+ min-height: 425px;
+ margin-right: 10px;
+ padding: 0 10px 0 0;
+}
+#select_user #select_user_modal .member-filter-options select {
+ width: 165px;
+}
+#select_user #select_user_modal .member-filter-options .btn {
+ display: block;
+}
+#select_user #select_user_modal .member-filter-result {
+ padding-left: 15px;
+ min-height: 360px;
+ width: auto;
+}
+
+
+/* Check Box Card */
+.checkbox-card {
+ margin: 0;
+}
+.checkbox-card li {
+ position: relative;
+ list-style: none;
+ color: #FFFFFF;
+ width: 180px;
+ height: 40px;
+ margin: 0 10px 10px 0;
+ float: left;
+ display: inline-block;
+ background-color: #cccccc;
+ overflow: hidden;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-transition: all .2s linear;
+ -moz-transition: all .2s linear;
+ -o-transition: all .2s linear;
+ transition: all .2s linear;
+}
+.checkbox-card li.mark {
+ width: 0;
+ height: 0;
+ padding: 0;
+ margin: 0;
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: alpha(opacity=0);
+ opacity: 0;
+ visibility: hidden;
+}
+.checkbox-card li:hover {
+ background-color: #0088cc;
+}
+.checkbox-card li:after {
+ content: "";
+ display: block;
+ clear: both;
+ height: 0;
+ visibility: hidden;
+}
+.checkbox-card li.active:before {
+ -webkit-text-size-adjust : none;
+ font-family: FontAwesome;
+ font-weight: normal;
+ font-style: normal;
+ color: #FFF;
+ text-decoration: inherit;
+ content: "\f00c";
+ position: absolute;
+ right: 0px;
+ top: 0px;
+ line-height: 14px;
+ text-indent: 10px;
+ font-size: 10px;
+ width: 0px;
+ height: 0px;
+ border-style: solid;
+ border-width: 0 22px 22px 0;
+ border-color: transparent #51a351 transparent transparent;
+}
+.checkbox-card li.active label {
+}
+.checkbox-card li label {
+ margin-bottom: 0px;
+ overflow: hidden;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+.checkbox-card li input {
+ opacity: 0;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ margin: 0;
+ z-index: 10;
+}
+.checkbox-card li label span {
+ -webkit-text-size-adjust : none;
+ font-size: 10px;
+ display: block;
+ width: 130px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ color: #666666;
+ margin-top: -3px;
+}
+.checkbox-card li:hover label span,
+.checkbox-card li:hover label span.user-name {
+ color: #FFFFFF;
+}
+.checkbox-card li label span.user-name {
+ font-size: 12px;
+ color: #363636;
+ padding: 2px 0 0;
+ margin-top: 0;
+}
+.checkbox-card li .user-pic {
+ float: left;
+ margin-right: 5px;
+ width: 40px;
+ height: 40px;
+}
+#selected_users .selected_user {
+ display: block;
+ margin-bottom: 5px;
+}
+#selected_users .selected_user .remove_user {
+ font-size: 15px;
+}
+/*
+.promoter {
+ border-color: #CCCCCC;
+ border-style: solid;
+ border-width: 0 1px;
+ padding: 0 10px 5px 10px;
+}
+.promoter > div {
+ border-bottom: 1px solid #CCCCCC;
+}
+.promoter > div:after {
+ content: "";
+ clear: both;
+ display: block;
+ visibility: hidden;
+}
+.promoter > div > span {
+ display: block;
+ margin-left: 70px;
+ padding-bottom: 5px;
+}
+.promoter p {
+ width: 70px;
+ float: left;
+ text-align:right;
+}*/
\ No newline at end of file
diff --git a/app/assets/stylesheets/social-share-button.css b/app/assets/stylesheets/social-share-button.css
new file mode 100644
index 0000000..1acc138
--- /dev/null
+++ b/app/assets/stylesheets/social-share-button.css
@@ -0,0 +1,90 @@
+.social-share-button-baidu {
+ display:inline-block;
+ width:16px;
+ height:16px;
+ background:url("/assets/social-share-button.png") 0px 0px no-repeat;
+}
+.social-share-button-delicious {
+ display:inline-block;
+ width:16px;
+ height:16px;
+ background:url("/assets/social-share-button.png") -16px 0px no-repeat;
+}
+.social-share-button-douban {
+ display:inline-block;
+ width:16px;
+ height:16px;
+ background:url("/assets/social-share-button.png") 0px -16px no-repeat;
+}
+.social-share-button-email {
+ display:inline-block;
+ width:16px;
+ height:16px;
+ background:url("/assets/social-share-button.png") -16px -16px no-repeat;
+}
+.social-share-button-facebook {
+ display:inline-block;
+ width:16px;
+ height:16px;
+ background:url("/assets/social-share-button.png") -32px 0px no-repeat;
+}
+.social-share-button-flickr {
+ display:inline-block;
+ width:16px;
+ height:16px;
+ background:url("/assets/social-share-button.png") -32px -16px no-repeat;
+}
+.social-share-button-google {
+ display:inline-block;
+ width:16px;
+ height:16px;
+ background:url("/assets/social-share-button.png") 0px -32px no-repeat;
+}
+.social-share-button-google_plus {
+ display:inline-block;
+ width:16px;
+ height:16px;
+ background:url("/assets/social-share-button.png") -16px -32px no-repeat;
+}
+.social-share-button-kaixin001 {
+ display:inline-block;
+ width:16px;
+ height:16px;
+ background:url("/assets/social-share-button.png") -32px -32px no-repeat;
+}
+.social-share-button-qq {
+ display:inline-block;
+ width:16px;
+ height:16px;
+ background:url("/assets/social-share-button.png") -48px 0px no-repeat;
+}
+.social-share-button-renren {
+ display:inline-block;
+ width:16px;
+ height:16px;
+ background:url("/assets/social-share-button.png") -48px -16px no-repeat;
+}
+.social-share-button-tqq {
+ display:inline-block;
+ width:16px;
+ height:16px;
+ background:url("/assets/social-share-button.png") -48px -32px no-repeat;
+}
+.social-share-button-twitter {
+ display:inline-block;
+ width:16px;
+ height:16px;
+ background:url("/assets/social-share-button.png") 0px -48px no-repeat;
+}
+.social-share-button-weibo {
+ display:inline-block;
+ width:16px;
+ height:16px;
+ background:url("/assets/social-share-button.png") -16px -48px no-repeat;
+}
+.social-share-button-rss {
+ display:inline-block;
+ width:16px;
+ height:16px;
+ background:url("/assets/social-share-button.png") -32px -48px no-repeat;
+}
\ No newline at end of file
diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb
new file mode 100644
index 0000000..927719b
--- /dev/null
+++ b/app/controllers/sessions_controller.rb
@@ -0,0 +1,40 @@
+# encoding: utf-8
+
+class SessionsController < Devise::SessionsController
+ prepend_before_filter :require_no_authentication, :only => [ :new, :create ]
+
+
+ def create
+ @site = Site.first
+
+ private_key = OpenSSL::PKey::RSA.new(@site.private_key)
+ wresult = private_key.private_decrypt(request.params['wresult'])
+
+ @ids = wresult.split("@")
+
+ login_uid = @ids[0]
+
+ resource = User.first(conditions:{user_id: login_uid})
+
+ if !resource.blank?
+ resource_name = resource.class.to_s.downcase
+ sign_in(resource_name, resource)
+ session[:user_id_type] = "myntu"
+ redirect_to after_sign_in_path_for(resource)
+ else
+ flash[:error] = "很抱歉,您無此權限或帳號登入本站,請洽本站管理員
Sorry, you don't have the account or authority to login. Please contact the website administrator."
+ redirect_to :root
+ end
+ end
+
+ def destroy
+ @user_id_type = session[:user_id_type]
+ sign_out
+ if @user_id_type == "myntu"
+ redirect_to "https://adfs.ntu.edu.tw/adfs/ls/?wa=wsignout1.0&wreply=https://galogin.ntu.edu.tw"
+ else
+ redirect_to root_path
+ end
+ end
+
+end
\ No newline at end of file
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index a1a81c4..d31cd5f 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -194,7 +194,8 @@ module ApplicationHelper
stylesheets << "\n"
stylesheets << "\n" if page.design.css_reset
# stylesheets << "\n"
- # stylesheets << "\n"
+ # stylesheets << "\n"
+ stylesheets << "\n"
stylesheets << "\n" if page.design.css_default
theme = page.design.themes.detect{ |d| d.id == page.theme_id }
stylesheets << "\n" if theme
@@ -203,8 +204,12 @@ module ApplicationHelper
def page_javascripts(page, edit=nil)
javascripts = ''
+ unless edit
+ javascripts << "\n"
+ end
# javascripts << "\n"
# javascripts << "\n"
+ javascripts << "\n"
page.design.javascripts.each do |js|
javascripts << ""
end
@@ -301,7 +306,7 @@ module ApplicationHelper
# NTU link
def get_link(site_number)
- "http://#{request.host}:2#{site_number}00"
+ "http://#{site_number}.#{request.domain(3)}"
end
def sortable(column, title = nil, options = {})
diff --git a/app/views/admin/member_selects/_modal_select.html.erb b/app/views/admin/member_selects/_modal_select.html.erb
index becc199..99f4f02 100644
--- a/app/views/admin/member_selects/_modal_select.html.erb
+++ b/app/views/admin/member_selects/_modal_select.html.erb
@@ -28,6 +28,7 @@
<%= t(:promoter) %>:
++ <%= link_to user.name, "mailto:#{user.email}", class: "promoter-name" %> / <%= user.office_tel %> +
+or
+