exceptionHandle
t430 11 years ago
commit 0ee38dcd9a

@ -1,3 +1,12 @@
patch:
用户姓名的部分根据issues#655。
为了修改方便
alias
方法 之前显示 调整之后
name firstname+lastname login
nickname xxx login
realname xxx firstname+lastname
================================================================================
app/models/setting.rb :165
# fixed domain url in development. tantantan's bug
if Rails.env.development?

@ -0,0 +1,34 @@
class AppliedProjectController < ApplicationController
#申请加入项目
def applied_join_project
@user_id = params[:user_id]
@project = Project.find(params[:project_id])
@applieds = AppliedProject.where("user_id = ? and project_id = ?", params[:user_id],params[:project_id])
if @applieds.count == 0
AppliedProject.create(:user_id => params[:user_id], :project_id => params[:project_id])
end
#redirect_to project_path(params[:project_id])
#redirect_to_referer_or {render :text => ( 'applied success.'), :layout => true}
respond_to do |format|
format.html { redirect_to_referer_or {render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true}}
format.js { render :partial => 'set_applied'}
end
end
#取消申请
def unapplied_join_project
@project = Project.find(params[:project_id])
#@applied = AppliedProject.find(params[:id])
#@applied.destroy
AppliedProject.deleteappiled(params[:user_id], params[:project_id])
respond_to do |format|
format.html { redirect_to_referer_or {render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true}}
format.js { render :partial => 'set_applied' }
end
end
end

@ -209,7 +209,12 @@ private
end
def read_authorize
@attachment.visible? ? true : deny_access
if @attachment.container_type == "HomeworkAttach" || @attachment.container_type == 'Bid'
true
#User.current.allowed_to?(:view_homework_attaches, @attachment.project) ? true : deny_access
else
@attachment.visible? ? true : deny_access
end
end
def delete_authorize

@ -14,6 +14,8 @@ class BidsController < ApplicationController
# end
before_filter :require_login,:only => [:set_reward, :destroy, :add, :new, ]
before_filter :memberAccess, only: :show_project
helper :watchers
helper :attachments
include AttachmentsHelper
@ -875,7 +877,14 @@ class BidsController < ApplicationController
end
rescue
render_404
end
end
def memberAccess
# 是课程,则判断当前用户是否参加了课程
return 0 if @bid.courses.first.project_type == Project::ProjectType_project
currentUser = User.current
render_403 unless currentUser.member_of?(@bid.courses.first)
end
end

@ -1,4 +1,90 @@
class HomeworkAttachController < ApplicationController
###############################
def index
@homeworks = HomeworkAttach.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @homeworks }
end
end
def add_users users
if users != nil && users.count > 0
users.each do |user|
@homework.homework_users.build(:user_id => user.id)
@homework.save
end
end
end
def create
if User.current.logged? && (!Member.where('user_id = ? and project_id = ?', User.current.id, @bid.courses.first.id).first.nil? && (Member.where('user_id = ? and project_id = ?', User.current.id, @bid.courses.first.id).first.roles&Role.where('id = ? or id = ? or id =?',5, 10, 7)).size >0)
user_id = params[:user_id]
bid_id = params[:bid_id]
sta = 0
name = params[:new_form][:name]
description = params[:new_form][:description]
options = {
:user_id => user_id,
:state => sta,
:name => name,
:description => description,
:bid_id => bid_id
}
@homework = HomeworkAttach.new(options)
@homework.save_attachments(params[:attachments])
render_attachment_warning_if_needed(@homework)
@homework.save
respond_to do |format|
if @homework.save
format.html { redirect_to @homework, notice: 'Post was successfully created.' }
format.json { render json: @homework, status: :created, location: @homework }
else
format.html { render action: "new" }
format.json { render json: @homework.errors, status: :unprocessable_entity }
end
end
end
end
def new
@homework = HomeworkAttach.new
@bid = Bid.find(params[:id])
respond_to do |format|
format.html # new.html.erb
format.json { render json: @homework }
end
end
def edit
@homework = HomeworkAttach.find(params[:id])
end
def update
@homework = HomeworkAttach.find(params[:id])
respond_to do |format|
if @post.update_attributes(params[:homework])
format.html { redirect_to @homework, notice: 'Homework was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @homework.errors, status: :unprocessable_entity }
end
end
end
def destroy
@homework = HomeworkAttach.find(params([:id]))
@homework.destroy
respond_to do |format|
format.html {render @homework}
format.json {render json: @homework}
end
end
#显示作业信息
def show
@homework = HomeworkAttach.find(params[:id])
@ -15,8 +101,8 @@ class HomeworkAttachController < ApplicationController
@stars_status_map["star#{star_status.stars.to_i}".to_sym] =
percent_m.to_s + "%"
end
@jours = @homework.journals_for_messages.order("created_on DESC")
@limit = 10
@jours = @homework.journals_for_messages.order("created_on DESC")
@feedback_count = @jours.count
@feedback_pages = Paginator.new @feedback_count, @limit, params['page']
@offset ||= @feedback_pages.offset
@ -24,7 +110,7 @@ class HomeworkAttachController < ApplicationController
end
#删除留言
def destroy
def destroy_jour
@journal_destroyed = JournalsForMessage.delete_message(params[:object_id])
#@homework = HomeworkAttach.find(params[:id])
#@jours = @homework.journals_for_messages.order("created_on DESC")
@ -43,11 +129,11 @@ class HomeworkAttachController < ApplicationController
@homework = HomeworkAttach.find(params[:jour_id])
@homework.addjours User.current.id, params[:new_form][:user_message],0
@jours = @homework.journals_for_messages.order("created_on DESC")
#@limit = 10
#@feedback_count = @jours.count
#@feedback_pages = Paginator.new @feedback_count, @limit, params['page']
#@offset ||= @feedback_pages.offset
#@jour = @jours[@offset, @limit]
@limit = 10
@feedback_count = @jours.count
@feedback_pages = Paginator.new @feedback_count, @limit, params['page']
@offset ||= @feedback_pages.offset
@jour = @jours[@offset, @limit]
respond_to do |format|
format.js
end

@ -46,42 +46,58 @@ class MembersController < ApplicationController
end
def create
members = []
project_info = []
user_grades = []
if params[:membership]
if params[:membership][:user_ids]
attrs = params[:membership].dup
user_ids = attrs.delete(:user_ids)
user_ids.each do |user_id|
members << Member.new(:role_ids => params[:membership][:role_ids], :user_id => user_id)
user_grades << UserGrade.new(:user_id => user_id, :project_id => @project.id)
## added by nie
if(params[:membership][:role_ids] && params[:membership][:role_ids][0] == "3")
project_info << ProjectInfo.new(:user_id => user_id, :project_id => @project.id)
# ProjectInfo.create(:name => "test", :user_id => 123)
if params[:refusal_button]
members = []
applied_members = true
if params[:membership]
if params[:membership][:user_ids]
attrs = params[:membership].dup
user_ids = attrs.delete(:user_ids)
user_ids.each do |user_id|
AppliedProject.deleteappiled(user_id, @project.id)
end
## end
end
else
members << Member.new(:role_ids => params[:membership][:role_ids], :user_id => params[:membership][:user_id])
user_grades << UserGrade.new(:user_id => params[:membership][:user_id], :project_id => @project.id)
## added by nie
if(params[:membership][:role_ids] && params[:membership][:role_ids][0] == "3")
project_info << ProjectInfo.new(:project_id => @project.id, :user_id => params[:membership][:user_id])
end
else
applied_members = false
members = []
project_info = []
user_grades = []
if params[:membership]
if params[:membership][:user_ids]
attrs = params[:membership].dup
user_ids = attrs.delete(:user_ids)
user_ids.each do |user_id|
members << Member.new(:role_ids => params[:membership][:role_ids], :user_id => user_id)
user_grades << UserGrade.new(:user_id => user_id, :project_id => @project.id)
## added by nie
if (params[:membership][:role_ids] && params[:membership][:role_ids][0] == "3")
project_info << ProjectInfo.new(:user_id => user_id, :project_id => @project.id)
# ProjectInfo.create(:name => "test", :user_id => 123)
end
## end
AppliedProject.deleteappiled(user_id, @project.id)
end
else
members << Member.new(:role_ids => params[:membership][:role_ids], :user_id => params[:membership][:user_id])
user_grades << UserGrade.new(:user_id => params[:membership][:user_id], :project_id => @project.id)
## added by nie
if (params[:membership][:role_ids] && params[:membership][:role_ids][0] == "3")
project_info << ProjectInfo.new(:project_id => @project.id, :user_id => params[:membership][:user_id])
end
## end
end
## end
@project.members << members
# added by nie
@project.project_infos << project_info
@project.user_grades << user_grades
# end
end
@project.members << members
# added by nie
@project.project_infos << project_info
@project.user_grades << user_grades
# end
end
respond_to do |format|
format.html { redirect_to_settings_in_projects }
format.js { @members = members }
format.js { @members = members;@applied_members = applied_members; }
format.api {
@member = members.first
if @member.valid?

@ -50,95 +50,34 @@ class MyController < ApplicationController
def account
@user = User.current
@pref = @user.pref
# if @user.user_extensions.nil?
# se = UserExtebsions.new
# se.user_id = @user.id
# se.occupation = params[:occupation]
# se.save
# else
# # = @user.user_extensions
# end
# @occupation = UserExtensions.occupation
# @occupation.save
if request.post?
@user.safe_attributes = params[:user]
@user.pref.attributes = params[:pref]
@user.pref[:no_self_notified] = (params[:no_self_notified] == '1')
unless @user.user_extensions.nil?
if @user.user_extensions.identity == 2
@user.firstname = params[:enterprise_name]
@user.firstname = params[:enterprise_name]
end
end
@se = @user.user_extensions ||= UserExtensions.new
@se.school_id = params[:occupation] if params[:occupation]
@se.gender = params[:gender]
@se.location = params[:province] if params[:province]
@se.location_city = params[:city] if params[:city]
@se.identity = params[:identity].to_i if params[:identity]
@se.technical_title = params[:technical_title] if params[:technical_title]
@se.student_id = params[:no] if params[:no]
# # UserExtensions.create(:user_id => @user.id, :occupation => params[:occupation])
# else
# ue = @user.user_extensions
# ue.occupation = params[:occupation]
# ue.save
# end
# added by bai
if @user.user_extensions.nil?
se = UserExtensions.new
se.user_id = @user.id
if params[:occupation]
se.school_id = params[:occupation]
end
se.gender = params[:gender]
if params[:province] && params[:city]
se.location = params[:province]
se.location_city = params[:city]
end
if params[:identity]
se.identity = params[:identity].to_i
end
if params[:technical_title]
se.technical_title = params[:technical_title]
end
if params[:no]
se.student_id = params[:no]
end
se.save
else
se = @user.user_extensions
if params[:occupation]
se.school_id = params[:occupation]
end
se.gender = params[:gender]
if params[:province] && params[:city]
se.location = params[:province]
se.location_city = params[:city]
end
if params[:identity]
se.identity= params[:identity].to_i
end
if params[:technical_title]
se.technical_title = params[:technical_title]
end
if params[:no]
se.student_id = params[:no]
end
se.save
end
# end
if @user.save
if @user.save && @se.save
@user.pref.save
@user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : [])
set_language_if_valid @user.language
flash[:notice] = l(:notice_account_updated)
redirect_to user_path(@user)
return
else
@user
end
end
end

@ -33,12 +33,12 @@ class ProjectsController < ApplicationController
menu_item l(:label_course_news), :only => :index
before_filter :find_project, :except => [ :index, :search,:list, :new, :create, :copy, :statistics, :new_join, :course, :enterprise_course, :course_enterprise]
before_filter :find_project, :except => [ :index, :search,:list, :new, :create, :copy, :statistics, :new_join, :course, :enterprise_course, :course_enterprise,:view_homework_attaches]
# before_filter :authorize, :except => [:new_join, :new_homework, :homework, :statistics, :search, :watcherlist, :index, :list, :new, :create, :copy, :archive, :unarchive, :destroy, :member, :focus, :file,
# :statistics, :feedback, :course, :enterprise_course, :course_enterprise, :project_respond, :share,
# :show_projects_score, :issue_score_index, :news_score_index, :file_score_index, :code_submit_score_index, :projects_topic_score_index]
before_filter :authorize, :only => [:show, :settings, :edit, :sort_project_members, :update, :modules, :close, :reopen]
before_filter :authorize_global, :only => [:new, :create]
before_filter :authorize, :only => [:show, :settings, :edit, :sort_project_members, :update, :modules, :close, :reopen,:view_homework_attaches]
before_filter :authorize_global, :only => [:new, :create,:view_homework_attaches]
before_filter :require_admin, :only => [ :copy, :archive, :unarchive, :destroy, :calendar]
before_filter :file, :statistics, :watcherlist
@ -767,6 +767,7 @@ class ProjectsController < ApplicationController
@subPage_title = l :label_member_list
@members = @project.member_principals.includes(:roles, :principal).all
@members = sort_project_members(@project, @members)
@applied_members = appied_project_members(@project, @members)
end
@members = paginateHelper @members
render :layout => 'base_courses' if @project.project_type == 1
@ -798,6 +799,19 @@ class ProjectsController < ApplicationController
memberlist
end
def appied_project_members (project, members)
users = AppliedProject.where(:project_id => project.id)
memberlist = []
users.each do |user|
members.each do |member|
if member[:user_id] == user[:user_id]
memberlist << member
end
end
end
memberlist
end
def file
end

@ -209,8 +209,6 @@ class UsersController < ApplicationController
## 判断课程是否过期 [需封装]
@memberships_doing = []
@memberships_done = []
@OwningCouses =[]
@JoinCouses=[]
now_time = Time.now.year
@memberships.map { |e|
end_time = e.project.course_extra.get_time.year
@ -220,12 +218,6 @@ class UsersController < ApplicationController
else
@memberships_doing.push e
end
if e.project.course_extra.tea_id == User.current.id
@OwningCouses.push e
else
@JoinCouses.push e
end
}
# respond_to do |format|
# format.html

@ -158,6 +158,6 @@ class WatchersController < ApplicationController
respond_to do |format|
format.html { redirect_to_referer_or {render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true}}
format.js { render :partial => 'set_watcher', :locals => {:user => user, :watched => watchables} }
end
end
end
end

@ -28,7 +28,6 @@ module ApplicationHelper
include AvatarHelper
## added by william
include PraiseTreadHelper
# add by nyan
include CoursesHelper
extend Forwardable
@ -1328,6 +1327,15 @@ module ApplicationHelper
tags
end
def hubspot_head
tags = javascript_include_tag('hubspot/messenger.min', 'hubspot/messenger-theme-future')
tags << stylesheet_link_tag('hubspot/messenger', 'hubspot/messenger-theme-future', 'hubspot/messenger-theme-flat')
unless User.current.pref.warn_on_leaving_unsaved == '0'
tags << "\n".html_safe + javascript_tag("$(window).load(function(){ warnLeavingUnsaved('#{escape_javascript l(:text_warn_on_leaving_unsaved)}'); });")
end
tags
end
def favicon
"<link rel='shortcut icon' href='#{image_path('/favicon.ico')}' />".html_safe
end

@ -0,0 +1,28 @@
module AppliedProjectHelper
def applied_css(project)
id = project.id
"#{project.class.to_s.underscore}-#{id}-applied"
end
def applied_link(project, user, options=[])
return '' unless user && user.logged?
applied = project.applied_projects.find_by_user_id(user.id)
text = applied ? l(:label_unapply_project) : l(:label_apply_project)
@applied_flag = project.instance_of?(Project)
css = @applied_flag ? ([applied_css(project), applied ? 'icon ' : 'icon '].join(' ') << options[0].to_s) :
([applied_css(project), applied ? 'icon icon-applied ' : 'icon icon-applied-off '].join(' ') << options[0].to_s)
if applied
appliedid = applied.id
end
url = appliedproject_path(
:id=>appliedid,
:user_id => user.id,
:project_id => project.id
)
method = applied ? 'delete' : 'post'
link_to text, url, :remote => true, :method => method ,:class=>css
end
end

@ -126,17 +126,19 @@ module BidsHelper
@users.count
end
# 查看学号
def im_watching_student_id? bid
people = []
people << bid.author
case bid.reward_type # 天煞的bid分了三用途里面各种hasmany还不定能用
when 1
when 2
when Bid::Enterprise
when Bid::Contest
bid.join_in_contests.each do |jic|
people << jic.user
end
when 3
people += bid.courses.first.users.to_a
when Bid::Homework
# people += bid.courses.first.users.to_a
people += searchTeacherAndAssistant(bid.courses.first).to_a
else
raise 'bids_helper: unknow bid type' # 出了错看这里!不知道的抛异常,省的找不到出错的地方!
end

@ -136,4 +136,15 @@ module CoursesHelper
def find_by_extra_from_project extra
Course.find_by_extra(try(extra))
end
#判断制定用户是不是当前课程的老师
def is_course_teacher user,project
is_teacher = false
searchTeacherAndAssistant(project).each do |teacher|
if user == teacher
is_teacher = true
break
end
end
is_teacher
end
end

@ -32,4 +32,21 @@ module MembersHelper
s + content_tag('div', content_tag('ul', links), :class => 'pagination_new')
end
# 当前申请加入的成员名单
def render_principals_for_applied_members(project)
scope = Principal.active.sorted.applied_members(project).like(params[:q])
principal_count = scope.count
principal_pages = Redmine::Pagination::Paginator.new principal_count, 10, params['page']
principals = scope.offset(principal_pages.offset).limit(principal_pages.per_page).all
s = content_tag('div', principals_check_box_tags_ex('membership[user_ids][]', principals), :id => 'principals')
links = pagination_links_full(principal_pages, principal_count, :per_page_links => false) {|text, parameters, options|
link_to text, appliedproject_project_memberships_path(project, parameters.merge(:q => params[:q], :format => 'js')), :remote => true
}
s + content_tag('div', content_tag('ul', links), :class => 'applied_new')
end
end

@ -187,4 +187,31 @@ module WatchersHelper
:class => "floating"
end.join.html_safe
end
end
def applied_css(project)
id = project.id
"#{project.class.to_s.underscore}-#{id}-applied"
end
def applied_link(project, user, options=[])
return '' unless user && user.logged?
applied = project.applied_projects.find_by_user_id(user.id)
text = applied ? l(:label_unapply_project) : l(:label_apply_project)
@applied_flag = project.instance_of?(Project)
css = @applied_flag ? ([applied_css(project), applied ? 'icon ' : 'icon '].join(' ') << options[0].to_s) :
([applied_css(project), applied ? 'icon icon-applied ' : 'icon icon-applied-off '].join(' ') << options[0].to_s)
if applied
appliedid = applied.id
end
url = appliedproject_path(
:id=>appliedid,
:user_id => user.id,
:project_id => project.id
)
method = applied ? 'delete' : 'post'
link_to text, url, :remote => true, :method => method ,:class=>css
end
end

@ -0,0 +1,15 @@
class AppliedProject < ActiveRecord::Base
attr_accessible :project_id, :user_id
belongs_to :user
belongs_to :project
#删除用户申请
def self.deleteappiled(userid, projectid)
@applieds = AppliedProject.where("user_id = ? and project_id = ?", userid, projectid)
@applieds.each do |applied|
applied.destroy
end
end
end

@ -2,7 +2,7 @@ class Course < ActiveRecord::Base
include Redmine::SafeAttributes
attr_accessible :code, :extra, :name, :state, :tea_id, :time , :location, :state, :term, :password
belongs_to :project, :class_name => 'Project', :foreign_key => :extra # 定义一个project方法 该方法通过extra来调用project表
belongs_to :project, :class_name => 'Project', :foreign_key => :extra, primary_key: :identifier
belongs_to :teacher, :class_name => 'User', :foreign_key => :tea_id # 定义一个方法teacher该方法通过tea_id来调用User表
belongs_to :school, :class_name => 'School', :foreign_key => :school_id #定义一个方法school该方法通过school_id来调用School表
has_many :bid

@ -29,6 +29,13 @@ class HomeworkAttach < ActiveRecord::Base
result
end
def project
work = HomeworkForCourse.find_by_bid_id(self.bid_id)
if work
work.project
end
end
def add_jours options
jfm = self.journals_for_messages.build(options)
jfm.save

@ -2,5 +2,5 @@ class HomeworkUser < ActiveRecord::Base
attr_accessible :homework_attach_id, :user_id
belongs_to :homework_attach
has_one :user
belongs_to :user
end

@ -72,6 +72,12 @@ class Principal < ActiveRecord::Base
}
scope :sorted, lambda { order(*Principal.fields_for_order_statement)}
scope :applied_members, lambda {|project|
id = project.id
ids1 = project.applied_projects.map(&:user_id)
where("#{Principal.table_name}.id IN (SELECT DISTINCT user_id FROM #{Member.table_name} WHERE user_id in (?))", ids1)
}
before_create :set_default_empty_values
def name(formatter = nil)

@ -64,6 +64,8 @@ class Project < ActiveRecord::Base
# has_many :students_for_courses, :dependent => :destroy
has_many :student, :through => :students_for_courses, :source => :user
has_one :course_extra, :class_name => 'Course', :foreign_key => :extra,:primary_key => :identifier, :dependent => :destroy
has_many :applied_projects
# end
#ADDED BY NIE
@ -120,7 +122,8 @@ class Project < ActiveRecord::Base
after_save :update_position_under_parent, :if => Proc.new {|project| project.name_changed?}
after_save :update_inherited_members, :if => Proc.new {|project| project.inherit_members_changed?}
after_save :create_board_sync #nyan
# 创建project之后默认创建一个board之后的board去掉了board的概念
after_save :create_board_sync
before_destroy :delete_all_members
def remove_references_before_destroy
return if self.id.nil?

@ -18,6 +18,11 @@
require "digest/sha1"
class User < Principal
TEACHER = 0
STUDENT = 1
ENTERPRISE = 2
DEVELOPER = 3
include Redmine::SafeAttributes
# Different ways of displaying/sorting users
@ -68,7 +73,7 @@ class User < Principal
['none', :label_user_mail_option_none]
]
has_one :homework_user
belongs_to :homework_user
has_and_belongs_to_many :groups, :after_add => Proc.new {|user, group| group.user_added(user)},
:after_remove => Proc.new {|user, group| group.user_removed(user)}
@ -354,7 +359,7 @@ class User < Principal
end
# Return user's full name for display
def name(formatter = nil)
def realname(formatter = nil)
f = self.class.name_formatter(formatter)
if formatter
eval('"' + f[:string] + '"')
@ -363,6 +368,10 @@ class User < Principal
end
end
def name(formatter = nil)
login
end
def active?
self.status == STATUS_ACTIVE
end

@ -7,6 +7,8 @@
3
=end
class UserExtensions < ActiveRecord::Base
validate :school, presence: true
belongs_to :user
belongs_to :school, :class_name => 'School', :foreign_key => :school_id
attr_accessible :user_id,:birthday,:brief_introduction,:gender,:location,:occupation,:work_experience,:zip_code,:identity, :technical_title,:student_id

@ -0,0 +1,13 @@
<% selector = ".#{applied_css(@project)}" %>
$("<%= selector %>").each(function(){$(this).replaceWith("<%= escape_javascript applied_link(@project, User.current) %>")});
if (window.Messenger) {
Messenger.options = {
extraClasses: 'messenger-fixed messenger-on-bottom messenger-on-right',
theme: 'flat'
}
Messenger().post({
id: "label_apply_project_waiting",
message: "<%= l(:label_apply_project_waiting) %>",
showCloseButton: true,
});
};

@ -1,23 +1,27 @@
<!-- fq -->
<% is_teacher = is_course_teacher User.current,@bid.courses.first.project %>
<%= form_tag(:controller => 'bids', :action => "show_project", :method => :get) do %>
<div class="project-search-block">
<table width="100%" valign="center">
<tr>
<td ><span style="margin-left:0px"><%= l(:label_task_plural)%>(<%= @homework_list.count%>)</span></td>
<td ><span style="margin-left:0px"><%= l(:label_task_plural)%>(<%= @homework_list.count%>)</span>
<%= link_to "作业打包下载", zipdown_assort_path(obj_class: @bid.class, obj_id: @bid), remote: false, class: "button_submit button_submit_font_white", style: "margin: 5px 10px;line-height: 20px;height: 20px;display: inline-block;" if(
User.current.admin? ||
!(User.current.roles_for_project(@bid.courses.first).map(&:id) & ([7,9])).empty? ) ||
(Rails.env.development?) %>
</td>
<td align="right">
<div class="project-search">
<%= text_field_tag 'student_id', params[:student_id], :size => 30 %>
<%= submit_tag l(:label_search_by_student_id), :class => "small", :name => nil %>
<% if is_teacher %>
<%= text_field_tag 'student_id', params[:student_id], :size => 30 %>
<%= submit_tag l(:label_search_by_student_id), :class => "small", :name => nil %>
<% end %>
</div></td>
</tr>
</table>
</div>
<% end %>
<% display_id = im_watching_student_id? @bid%>
<%= link_to "作业打包下载", zipdown_assort_path(obj_class: @bid.class, obj_id: @bid), remote: false, class: "button_submit button_submit_font_white", style: "margin: 5px 10px;display: inline-block;" if(
User.current.admin? ||
!(User.current.roles_for_project(@bid.courses.first).map(&:id) & ([7,9])).empty? ) ||
(Rails.env.development?) %>
<% @homework_list.each do |homework|%>
<% if homework.attachments.any?%>
<table width="660px" border="0" align="center">
@ -25,20 +29,29 @@
<td colspan="2" valign="top" width="50" ><%= image_tag(url_to_avatar(homework.user), :class => "avatar")%></td>
<td>
<table width="580px" border="0">
<tr>&nbsp;&nbsp;&nbsp;<strong>作业&nbsp;&nbsp; :</strong>&nbsp;
<% filename = "" %>
<% homework.attachments.map do |attachment| %>
<% filename = attachment.filename %>
<% if homework.attachments.count > 1%>
<% filename += "等#{homework.attachments.count}个文件" %>
<tr>
<td style="width: 300px">
&nbsp;&nbsp;<strong>作业&nbsp;&nbsp; :</strong>&nbsp;
<% attachments = homework.attachments.map %>
<% for attachment in attachments %>
<% if attachments.count > 1 && attachment != attachments.first %>
<br/>
<% for item in 1..7 %>
&nbsp;
<% end %>
<% end %>
<%= link_to_attachment attachment , :download => true -%>
<% end %>
<% break %>
<% end %>
<%= link_to filename , homework_attach_path(homework)%>
</td>
<td style="vertical-align: top">
<% if display_id %>
<%= link_to "互评>>" , homework_attach_path(homework)%>
<% end %>
</td>
</tr>
<tr>
<td colspan="1" valign="top" style="width: 300px">&nbsp;
<strong>发布人:&nbsp; <%= link_to homework.user, user_path(homework.user)%></strong>
<strong>发布人:&nbsp; <%= link_to (display_id ? homework.user.realname : homework.user ), user_path(homework.user)%></strong>
</td>
<td>
<strong>作业评分:</strong>
@ -48,7 +61,7 @@
<% sum = sum + star_reates.stars %>
<% end %>
<% stars_reates_count = stars_reates.count == 0 ? 1 : stars_reates.count %>
<%= sum * 1.0 / stars_reates_count %>
<%= format("%.2f", sum * 1.0 / stars_reates_count) %>
</td>
<td valign="top" align="right">
<% if Time.parse(@bid.deadline.to_s) < Time.parse(homework.attachments[0].created_on.to_s) %>
@ -58,20 +71,20 @@
</tr>
<tr>
<td colspan="2" valign="top">&nbsp;
<% if display_id %>
<strong><%= l(:label_bidding_user_studentcode) %>&nbsp; &nbsp;<%= homework.user.user_extensions.student_id%></strong>
<% end %>
<% if display_id %>
<strong><%= l(:label_bidding_user_studentcode) %>&nbsp; &nbsp;<%= homework.user.user_extensions.student_id%></strong>
<% end %>
</td>
</tr>
<tr>
<td colspan="2" width="580px" >
<% if (User.current == homework.user) || (!Member.where('user_id = ? and project_id = ?', User.current.id, @bid.courses.first.id).first.nil? && (Member.where('user_id = ? and project_id = ?', User.current.id, @bid.courses.first.id).first.roles&Role.where('id = ? or id = ? or id =?',3,7, 9)).size >0) %>
<p class="font_description">
<% options = {:author => true, :deletable => attach_delete(homework)} %>
<%= render :partial => 'attachments/links',
:locals => {:attachments => homework.attachments, :options => options} %>
</p>
<% end %>
<% if (User.current == homework.user) || (!Member.where('user_id = ? and project_id = ?', User.current.id, @bid.courses.first.id).first.nil? && (Member.where('user_id = ? and project_id = ?', User.current.id, @bid.courses.first.id).first.roles&Role.where('id = ? or id = ? or id =?',3,7, 9)).size >0) %>
<p class="font_description">
<% options = {:author => true, :deletable => attach_delete(homework)} %>
<%= render :partial => 'attachments/links',
:locals => {:attachments => homework.attachments, :options => options} %>
</p>
<% end %>
</td>
</tr>
</table>

@ -1,110 +1,71 @@
<!-- fq -->
<% if @bid.homework_type == Bid::HomeworkFile %>
<%= render :partial => 'homework' %>
<%= render :partial => 'homework' %>
<% else %>
<style>
input[type="submit"].bid_btn {
vertical-align: middle;
width: 60px;
height: 30px;
line-height: 18px;
font-size: 14px;
color: rgb(0, 0, 0);
background: url("/images/button/bg103.jpg") no-repeat scroll left top transparent;
padding: 0px 0px 4px 0px;
border-radius: 2px;
border: 1px solid rgb(148, 148, 148);
box-shadow: none;
text-shadow: none;
margin-top: -10px;
/*margin-right: -4px;*/
}
input[type="button"].bid_btn {
width: 60px;
height: 30px;
line-height: 18px;
font-size: 14px;
color: rgb(0, 0, 0);
background: url("/images/button/bg103.jpg") no-repeat scroll left top transparent;
padding: 0px 0px 4px 0px;
border-radius: 2px;
border: 1px solid rgb(148, 148, 148);
box-shadow: none;
text-shadow: none;
margin-top: -10px;
margin-right: -2px;
}
textarea:focus {
border: #d5dee9 1px solid;
}
</style>
<script type="text/javascript" language="javascript">
function clearInfo(id,content) {
var text = $('#' + id);
if (text.val() == content) {
$('#' + id).val('');
}
}
<script type="text/javascript" language="javascript">
function clearInfo(id, content) {
var text = $('#' + id);
if (text.val() == content) {
$('#' + id).val('');
}
}
function showInfo(id, content) {
var text = $('#' + id);
if (text.val() == '') {
$('#' + id).val(content);
}
}
function showInfo(id,content) {
var text = $('#' + id);
if (text.val() == '') {
$('#' + id).val(content);
}
}
function cancel() {
$("#put-bid-form").hide();
}
</script>
<% if User.current.logged? %>
<!--我要竞标弹出框-->
<div id='flash' style="float:left; width: 100%; display: none"></div>
<div id="put-bid-form" style="display: none">
<%= form_for "bid_for_save", :remote => true, :url => {:controller => 'bids', :action => 'add'},
:update => "bidding_project_list",
:complete => '$("#put-bid-form").hide();' do |f| %>
<table id="bidding_table" border="0" width="100%" style="margin-left: 40px;">
<tr>
<td><%= select_tag 'bid', options_for_select(select_option_helper(@option)), :name => 'bid', :class => 'grayline' %></td>
<div id="prompt_create_pro">
<td>
function cancel() {
$("#put-bid-form").hide();
}
</script>
<% if User.current.logged? %>
<!--我要竞标弹出框-->
<div id = 'flash' style="float:left; width: 100%; display: none" ></div>
<div id="put-bid-form" style="display: none">
<%= form_for "bid_for_save", :remote=>true, :url => {:controller => 'bids', :action => 'add'},
:update => "bidding_project_list",
:complete => '$("#put-bid-form").hide();' do |f| %>
<table id="bidding_table" border="0" width="100%" style="margin-left: 40px;">
<tr>
<td><%= select_tag 'bid', options_for_select(select_option_helper(@option)), :name => 'bid', :class => 'grayline' %></td>
<div id="prompt_create_pro"><!-- nyan -->
<td>
<p>
<div class="font_lighter" style="font-size: 13px;">
<%= link_to '创建项目', new_project_path(course: 0, project_type: 0), :target=>'_blank'%>
</div>
</p>
</td>
</div>
</tr>
<% if @bid.reward_type == 3 %>
<tr>
<td><%= f.text_area :bid_message, :id => "bid_message", :required => true, :rows => 4, :cols => 40, :placeholder => l(:label_bid_reason_homework), :style => "resize: none;", :class => 'noline'%></td>
</tr>
<% else %>
<tr>
<td><%= f.text_area :bid_message, :id => "bid_message", :required => true, :rows => 4, :cols => 40, :placeholder => l(:label_bid_reason), :style => "resize: none;", :class => 'noline'%></td>
</tr>
<% end %>
<tr>
<td align="right">
<%= submit_tag l(:button_add), :name => nil , :class => "enterprise",
:onmouseout => "this.style.backgroundPosition = 'left top'",
:onmouseover => "this.style.backgroundPosition = 'left -30px'"%>
<%= submit_tag l(:button_cancel), :name => nil, :onclick => "cancel();",
:type => 'button', :class => "enterprise", :onmouseout => "this.style.backgroundPosition = 'left top'",
:onmouseover => "this.style.backgroundPosition = 'left -30px'" %>
</td>
</tr>
</table>
<% end %>
</div>
<% end %>
<div id='bidding_project_list'>
<%= render :partial => 'project_list', :locals => {:bidding_project => @bidding_project,:bid => @bid} %>
</div>
<div class="font_lighter" style="font-size: 13px;">
<%= link_to '创建项目', new_project_path(course: 0, project_type: 0), :target => '_blank' %>
</div>
</td>
</div>
</tr>
<% if @bid.reward_type == Bid::Homework %>
<tr>
<td><%= f.text_area :bid_message, :id => "bid_message", :required => true, :rows => 4, :cols => 40, :placeholder => l(:label_bid_reason_homework), :style => "resize: none;", :class => 'noline' %></td>
</tr>
<% else %>
<tr>
<td><%= f.text_area :bid_message, :id => "bid_message", :required => true, :rows => 4, :cols => 40, :placeholder => l(:label_bid_reason), :style => "resize: none;", :class => 'noline' %></td>
</tr>
<% end %>
<tr>
<td align="right">
<%= submit_tag l(:button_add), :name => nil, :class => "enterprise",
:onmouseout => "this.style.backgroundPosition = 'left top'",
:onmouseover => "this.style.backgroundPosition = 'left -30px'" %>
<%= submit_tag l(:button_cancel), :name => nil, :onclick => "cancel();",
:type => 'button', :class => "enterprise", :onmouseout => "this.style.backgroundPosition = 'left top'",
:onmouseover => "this.style.backgroundPosition = 'left -30px'" %>
</td>
</tr>
</table>
<% end %>
</div>
<% end %>
<div id='bidding_project_list'>
<%= render :partial => 'project_list', :locals => {:bidding_project => @bidding_project, :bid => @bid} %>
</div>
<% end %>

@ -20,7 +20,6 @@
<%= sort_header_tag('content_type', :caption => l(:attachment_sufix_browse), :default_order => 'desc', :scope => "col", :id => "vzebra-contenttype") %>
<%= sort_header_tag('downloads', :caption => l(:field_downloads), :default_order => 'desc', :scope => "col", :id => "vzebra-action") %>
<%= sort_header_tag('operation', :caption => "", :scope => "col", :id => "vzebra-children") %>
<%= sort_header_tag('tags', :caption => l(:label_tag), :id => "vzebra-tag") %>
<!-- <%= sort_header_tag('description', :caption => l(:field_description)) %> -->
</tr>
</thead>
@ -52,14 +51,15 @@
<%= link_to(image_tag('delete.png'), attachment_path(file),
:data => {:confirm => l(:text_are_you_sure)}, :method => :delete) if delete_allowed %>
</td>
<td class='filename' style="font-size: 13px; ">
</tr>
<tr>
<td class='description' colspan="6">
<div class="tags_area">
<%# @preTags = %w|预设A 预设B 预设C 预设D 预设E 预设Z | %>
<%= render :partial => 'tags/tag', :locals => {:obj => file, :object_flag => "6"} %>
<div class="tags_gradint"></div>
</div>
<div class="read-more hidden"><a href="javascript:void(0);" onclick="readmore(this);"> 更多 </a>
</div>
<div class="read-more hidden"><a href="javascript:void(0);" onclick="readmore(this);"> 更多 </a></div>
</td>
</tr>
<% end -%>

@ -20,7 +20,6 @@
<%= sort_header_tag('content_type', :caption => l(:attachment_sufix_browse), :default_order => 'desc', :scope =>"col", :id=> "vzebra-contenttype")%>
<%= sort_header_tag('downloads', :caption => l(:field_downloads), :default_order => 'desc', :scope => "col", :id => "vzebra-action") %>
<%= sort_header_tag('operation', :caption => "", :scope => "col", :id => "vzebra-children") %>
<%= sort_header_tag('tags', :caption => l(:label_tag), :id => "vzebra-tag") %>
<!-- <%= sort_header_tag('description', :caption => l(:field_description)) %> -->
</tr>
</thead>
@ -48,15 +47,17 @@
<%= link_to(image_tag('delete.png'), attachment_path(file),
:data => {:confirm => l(:text_are_you_sure)}, :method => :delete) if delete_allowed %>
</td>
<td class='filename' style="font-size: 13px; ">
<div class="tags_area">
<%# @preTags = %w|预设A 预设B 预设C 预设D 预设E 预设Z | %>
<%= render :partial => 'tags/tag', :locals => {:obj => file, :object_flag => "6"} %>
<div class="tags_gradint"></div>
</div>
<div class="read-more hidden"><a href="javascript:void(0);" onclick="readmore(this);"> 更多 </a>
</div>
</td>
</tr>
<tr>
<td class='description' colspan="6">
<div class="tags_area">
<%# @preTags = %w|预设A 预设B 预设C 预设D 预设E 预设Z | %>
<%= render :partial => 'tags/tag', :locals => {:obj => file, :object_flag => "6"} %>
<div class="tags_gradint"></div>
</div>
<div class="read-more hidden"><a href="javascript:void(0);" onclick="readmore(this);"> 更多 </a>
</div>
</td>
</tr>
<% end -%>
<% end -%>

@ -25,6 +25,9 @@
</tr>
<tr>
<td align="left" colspan="2" ><span class="font_lighter"><%= authoring topic.created_at, topic.author %>
<span class="font_description2">
最后回复:<%=link_to_user topic.last_reply.try(:author) %>
</span>
<br />
</span></td>
</tr>

@ -0,0 +1,12 @@
<!-- #wang -->
<% for attachment in attachments %>
<% if attachments.count > 1 && attachment != attachments.first%>
<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<% end %>
<%= link_to_attachment attachment, :class => 'icon icon-attachment', :download => true -%>
<% if attachment.is_text? %>
<%= link_to image_tag('magnifier.png'),
:controller => 'attachments', :action => 'show',
:id => attachment, :filename => attachment.filename %>
<% end %>
<% end -%>

@ -19,8 +19,8 @@
%>
<% end %>
<% if @user == User.current || User.current.admin? || reply.user.id == User.current.id %>
<%= link_to(l(:label_newfeedback_delete), {:controller => 'homework_attach', :action => 'destroy', :object_id => reply, :user_id => reply.user},
:remote => true, :confirm => l(:text_are_you_sure), :method => 'delete', :class => "delete", :title => l(:button_delete)) %>
<%= link_to(l(:label_newfeedback_delete), {:controller => 'homework_attach', :action => 'destroy_jour', :object_id => reply, :user_id => reply.user},
:remote => true, :confirm => l(:text_are_you_sure), :title => l(:button_delete)) %>
<% end %>
</span>
</p>

@ -54,8 +54,8 @@
{:focus => 'project_respond', :onclick => "toggleAndSettingWordsVal($('##{ids}'), $('##{ids} textarea'), '#{l(:label_reply_plural)} #{journal.user.name}: '); $('##{ids} textarea') ;return false;"}
%>
<% if journal.user==User.current|| User.current.admin? %>
<%= link_to(l(:label_bid_respond_delete), {:controller => 'homework_attach', :action => 'destroy', :object_id => journal, :user_id => journal.user},
:remote => true, :confirm => l(:text_are_you_sure), :method => 'delete', :class => "delete", :title => l(:button_delete)) %>
<%= link_to(l(:label_bid_respond_delete), {:controller => 'homework_attach', :action => 'destroy_jour', :object_id => journal, :user_id => journal.user},
:remote => true, :confirm => l(:text_are_you_sure), :title => l(:button_delete)) %>
<% end %>
</span>
</span>

@ -1,4 +1,4 @@
$('#message').html('<%= escape_javascript(render(:partial => 'showjour', :locals => {:jour =>@jours, :state => false} )) %>');
$('#message').html('<%= escape_javascript(render(:partial => 'showjour', :locals => {:jour =>@jour, :state => false} )) %>');
$('#pre_show').html('<%= escape_javascript(render(:partial => 'pre_show', :locals => {:content => nil})) %>');
$('#new_form_user_message').val("");
$('#new_form_reference_user_id').val("");

@ -0,0 +1,33 @@
<p style="font-weight: bold; color: rgb(237,137,36)" xmlns="http://www.w3.org/1999/html"> <%=raw l(:label_new_homework)%> </p>
<div class="box tabular">
<%= form_for('new_form', :remote => true, :method => :post,
:url => {:controller => 'homework_attach',
:action => 'create',
:user_id => User.current.id,
:bid_id => @bid
}) do |f|%>
<p>
<strong>标题:</strong>
<%= f.text_field "name", :required => true, :size => 60, :style => "width:490px;" %>
</p>
<p>
<strong style="vertical-align: top">描述:</strong>
<span style="margin-left:-10px;padding-right: 20px;">
<%= f.text_area "description", :rows => 8, :class => 'wiki-edit', :style => "font-size:small;width:490px;margin-left:10px;" %>
</span>
</p>
<fieldset>
<legend>
<%= l(:label_attachment_plural) %>
</legend>
<p id="put-bid-form-partial">
<%= render :partial => 'attachments/form' %>
</p>
</fieldset>
<span style="padding-left: 60px">
<%= submit_tag t(:label_new), :sta => 0, :class => "enterprise"%>
<%= submit_tag t(:label_memo_create), :sta => 1, :class => "enterprise"%>
</span>
</p>
<% end %>
</div>

@ -18,7 +18,9 @@
<td colspan="2" valign="top"><strong>作业基础信息<%=@count %></strong></td>
</tr>
<tr>
<td style="width: 570px; padding-left:40px; word-wrap: break-word; word-break: break-all">发布人员:<%= link_to @homework.user, user_path(@homework.user)%></td>
<td style="width: 570px; padding-left:40px; word-wrap: break-word; word-break: break-all">
发布人员:<%= link_to @homework.user, user_path(@homework.user)%>
</td>
<td>发布时间:<%=format_time @homework.created_at %></td>
</tr>
@ -26,9 +28,11 @@
<td style="padding-left: 40px">
<span>作业下载:</span>
<% options = {:author => true } %>
<%= render :partial => 'attachments/app_link', :locals => {:attachments => @homework.attachments, :options => options} %>
<%= render :partial => 'app_link', :locals => {:attachments => @homework.attachments, :options => options} %>
</td>
<td style="width: 240px; word-wrap: break-word; word-break: break-all">
所属任务:<%= link_to(@homework.bid.name, project_for_bid_path(@homework.bid))%>
</td>
<td style="width: 240px; word-wrap: break-word; word-break: break-all">所属任务:<%= link_to(@homework.bid.name, project_for_bid_path(@homework.bid))%></td>
</tr>
<tr>
@ -49,7 +53,7 @@
<td>
<table width="100%" border="0">
<tr>
<td colspan="2" valign="top"><strong><div style="font-size: 15px;">作业描述:</div></strong></td>
<td colspan="2" valign="top"><div style="font-size: 15px;"><strong>作业描述:</strong></div></td>
</tr>
<% @homework.attachments.map do |attachment| %>
<% if attachment.description != nil && attachment.description != "" %>
@ -67,16 +71,20 @@
<div class="underline-contests_one"></div>
<div style="height: auto; padding-bottom: 10px">
<div style="font-size: 15px;"><strong>作业得分:</strong></div>
<div style="font-size: 15px;">
<strong>作业得分:</strong>
</div>
<div style="overflow: hidden">
<div style="margin-left: 15%; float: left">
<div style="padding-left: 45px; padding-bottom: 5px">得分比例</div>
<div>
<% 100.step(20,-20) do |star| %>
<div data-kls="Softapplication" data-id="2" data-dimension="quality" data-average="3.25" class="rateable div_inline jDisabled" style="height: 20px; width: 115px; overflow: hidden; z-index: 1; position: relative;">
<div data-kls="HomeworkAttach" data-id="2" data-dimension="quality" data-average="3.25" class="rateable div_inline jDisabled"
style="height: 20px; width: 115px; overflow: hidden; z-index: 1; position: relative;">
<div class="jRatingColor" style="width: <%=star%>%;"></div>
<div class="jRatingAverage" style="width: 0px; top: -20px;"></div>
<div class="jStar" style="width: 115px; height: 20px; top: -40px; background: url('/images/seems_rateable/stars.png') repeat-x scroll 0% 0% transparent;">
<div class="jStar" style="width: 115px; height: 20px; top: -40px;
background: url('/images/seems_rateable/stars.png') repeat-x scroll 0% 0% transparent;">
</div>
</div>
<%= @stars_status_map["star#{(star/20).to_s}".to_sym] %>
@ -85,7 +93,11 @@
</div>
</div>
<div style="float: left; padding-left: 100px; padding-top:35px ">
<div style="padding-left: 25px;">最终得分</div>
<div style="text-align: center">最终得分</div>
<div style="padding-top: 1px; font-size: 15px; color: blue;text-align: center">
<%= @homework.average(:quality).try(:avg).try(:round, 2).to_s %>
</div>
<div style="padding-top: 3px">
<%= rating_for @homework, :static => true, dimension: :quality, class: 'rateable div_inline' %>
</div>
@ -102,6 +114,18 @@
</div>
<div class="underline-contests_one"></div>
<!--
<div style="height: auto; padding-bottom: 10px">
<div style="font-size: 15px">
<strong>作业综评:</strong>
</div>
<div style="text-align: center;">评分:
<%= rating_for @homework, :static => true, dimension: :quality, class: 'rateable div_inline' %>
</div>
</div>
<div class="underline-contests_one"></div>
-->
<div style="height: 50px">
<div style="font-size: 15px"><strong>作业评论:</strong></div>
<div style="text-align: center;">评分:
@ -118,8 +142,15 @@
<!-- 留言列表区 -->
<div id="message" style="font-size: 14px;">
<%= render :partial => 'showjour', :locals => {:jour => @jours} %>
<%= render :partial => 'showjour', :locals => {:jour => @jour} %>
</div>
<!--分页-->
<div class="pagination" style="float:left;">
<ul>
<%= pagination_links_full @feedback_pages %>
</ul>
</div>
<div>
<%#= link_to '返回竞赛页面', show_softapplication_contest_path(@softapplication.contest) %>
</div>

@ -2,7 +2,7 @@
<fieldset class="collapsible collapsed" style="padding-left: 50px;">
<legend onclick="toggleFieldset(this);" style="font-size:12px;"><strong><%= l(:label_change_properties) %></strong></legend>
<div class="splitcontent" style="display: block;"> <!-- nyan -->
<div class="splitcontent" style="display: block;">
<div class="splitcontentleft">
<% if @issue.safe_attribute?('status_id') && @allowed_statuses.present? %>
<p><%= f.select :status_id, (@allowed_statuses.collect {|p| [p.name, p.id]}), {:required => true},

@ -114,10 +114,18 @@
<td class="font_index">
<!-- 1 教师; 2 学生0 全部-->
<%= link_to "#{teacherCount(@project)}", project_member_path(@project, :role => 1), :course => '1' %>
<% if User.current.member_of?(@project) %>
<%= link_to "#{teacherCount(@project)}", project_member_path(@project, :role => 1), :course => '1' %>
<% else %>
<span><%= teacherCount(@project)%></span> <!--<%= link_to "#{teacherCount(@project)}", "javascript:void(0)", :course => '1' %>-->
<% end%>
</td>
<td class="font_index">
<%= link_to "#{studentCount(@project)}", project_member_path(@project, :role => 2), :course => '1' %>
<% if User.current.member_of?(@project) %>
<%= link_to "#{studentCount(@project)}", project_member_path(@project, :role => 2), :course => '1' %>
<% else %>
<span><%= studentCount(@project)%></span>
<% end %>
</td>
<td class="font_index"><%= link_to files_count, project_files_path(@project) %></td>
<tr class="font_aram">

@ -151,6 +151,7 @@
<li>
<%= link_to l(:label_question_student), {:controller => 'bids', :action => 'show' },:class => link_class(:respond)%>
</li>
<% if User.current.member_of? @bid.courses.first%>
<li>
<% if User.current.logged? && @bid.courses.first && (!Member.where('user_id = ? and project_id = ?', User.current.id, @bid.courses.first.id).first.nil? && (Member.where('user_id = ? and project_id = ?', User.current.id, @bid.courses.first.id).first.roles&Role.where('id = ? or id = ? or id =?',5, 10, 7)).size >0) %>
<%= link_to l(:label_homework_commit), {:controller => 'bids', :action => 'show_project' },:class => link_class(:project)%>
@ -159,9 +160,10 @@
<% end %>
</li>
<% end %>
<!-- <li><%= link_to l(:label_homework_statistics), { :controller => 'bids', :action => 'homework_statistics' },:class => link_class(:homework_statistics)%></li> -->
<!-- <li><%= link_to l(:label_homework_respond), { :controller => 'bids', :action => 'homework_respond' },:class => link_class(:homework_respond)%></li>
--><ul>
--></ul>
</div>
<%= yield %>

@ -12,6 +12,7 @@
<%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %>
<%= javascript_heads %>
<%= heads_for_theme %>
<%= hubspot_head %>
<%= call_hook :view_layouts_base_html_head %>
<!-- page specific tags -->
<%= yield :header_tags -%>
@ -103,6 +104,14 @@
<span class="icon-fav icon"></span><%= watcher_link(@project, User.current) %>
<% end %>
</div>
<!--添加项目申请-->
<div style="margin-left: 20px;">
<% if ( !(User.current.member_of? @project) && User.current.login?) %>
<span class="icon-fav icon"></span>
<%= applied_link(@project, User.current) %>
<% end %>
</div>
</td>
</tr>
</table>

@ -0,0 +1 @@
$('#principals_for_applied_member').html('<%= escape_javascript(render_principals_for_applied_members(@project)) %>');

@ -1,11 +1,13 @@
$('#tab-content-members').html('<%= escape_javascript(render :partial => 'projects/settings/members') %>');
hideOnLoad();
<% if @members.present? && @members.all? {|m| m.valid? } %>
<% @members.each do |member| %>
$("#member-<%= member.id %>").effect("highlight");
<%if !@applied_members%>
<% if @members.present? && @members.all? {|m| m.valid? } %>
<% @members.each do |member| %>
$("#member-<%= member.id %>").effect("highlight");
<% end %>
<% else %>
<% errors = @members.collect {|m| m.errors.full_messages}.flatten.uniq.join(', ') %>
alert('<%= raw(escape_javascript(l(:notice_failed_to_save_members, :errors => errors))) %>');
<% end %>
<% else %>
<% errors = @members.collect {|m| m.errors.full_messages}.flatten.uniq.join(', ') %>
alert('<%= raw(escape_javascript(l(:notice_failed_to_save_members, :errors => errors))) %>');
<% end %>

@ -33,6 +33,8 @@
</div>
<h3 style="padding-left: 10px;"><%= l(:label_my_account) %></h3>
<%= error_messages_for 'user' %>
<%= error_messages_for 'se' %>
<fieldset class="box" style="margin:10px;">
<fieldset class="collapsible collapsed" style="width:800px;margin-left: 10px;">

@ -45,7 +45,7 @@
<%= content_tag('span', l(:label_x_data,:count => files_count)) %>
</p>
<p class="stats">
<%= content_tag('span', "#{@project.members.count}", :class => "info") %>
<%= content_tag('span', "#{garble @project.members.count}", :class => "info") %>
<%= content_tag('span', l(:label_x_member, :count => @project.members.count)) %>
</p>

@ -41,9 +41,10 @@
</p>
</div>
<div class="information"><!-- nyan -->
<div class="information">
<!-- p class="stats">
<%= content_tag('span', @project.watcher_users.count, :class => "info") %><%= content_tag('span', l(:label_x_follow_people,:count =>@project.watcher_users.count)) %>
<%#= content_tag('span', @project.watcher_users.count, :class => "info") %>
<%#= content_tag('span', l(:label_x_follow_people,:count =>@project.watcher_users.count)) %>
</p -->
<p class="stats">
<%= content_tag('span', link_to("#{@project.homeworks.count}", homework_project_path(@project)), :class => "info") %><%= content_tag('span', l(:label_x_task, :count => @project.homeworks.count)) %>

@ -120,6 +120,30 @@
<div class="splitcontentright">
<% if r.any? %>
<% if @project.applied_projects.any? %>
<div id="applied_project_block">
<%= form_for(@applied_members, {:as => :membership, :url => project_memberships_path(@project), :remote => true, :method => :post}) do |f| %>
<fieldset>
<legend><%= l(:label_apply_project) %></legend>
<div id="principals_for_applied_member">
<%= render_principals_for_applied_members(@project) %>
</div>
<!--show the roles which will select-->
<p style="padding-top: 5px"><%= l(:label_role_plural) %>:
<% r.each do |role| %>
<label><%= check_box_tag 'membership[role_ids][]', role.id %> <%= h role %></label>
<% end %></p>
<p><%= submit_tag l(:label_approve), :id => 'member-add-submit' %>
<%= submit_tag l(:label_refusal), :name => "refusal_button", :id => 'member-refusal-submit' %>
</p>
</fieldset>
<% end %>
</div>
<% end %>
<%= form_for(@member, {:as => :membership, :url => project_memberships_path(@project), :remote => true, :method => :post}) do |f| %>
<fieldset><legend><%=l(:label_member_new)%></legend>

@ -41,7 +41,7 @@
<% @course = Course.find_by_extra(membership.project.identifier) %>
<% unless (@course.nil? || @course.teacher.nil? || @course.teacher.name.nil?) %>
<span class="font-lighter" style="float: left"><%= l(:label_main_teacher) %>
: <%= link_to(@course.teacher.name, user_path(@course.teacher)) %></span>
: <%= link_to(@course.teacher.realname, user_path(@course.teacher)) %></span>
<span style="float: right; padding-left: 8px"><%= l(:label_course_term) %>
: <%= @course.time %><%= @course.term %></span>
<% end %>

@ -0,0 +1,22 @@
<div class="user_course_list">
<div class="menu">
<%= link_to "#{l(:label_course_new)}", new_project_path(course: 1, project_type: 1), class: 'icon icon-add' if @user == User.current %>
<ul>
<li mode='doing' class="on">进行中</li>
<li mode='end'>已完结</li>
</ul>
</div>
<div class="dyn_list_wrapper" mode='doing'>
<div class='created_course'>
<%= render :partial => 'course_form', :locals => {:memberships => @memberships_doing} %>
</div>
</div>
<div class="dyn_list_wrapper hidden" mode='end'>
<div class="created_course ">
<%= render :partial => 'course_form', :locals => {:memberships => @memberships_done} %>
</div>
</div>
</div>

@ -1,38 +1,16 @@
<div class="content-title-top">
<% if @memberships.empty? %>
<% if @user != User.current %>
<p class="font_description">
<%= l(:label_project_course_un) %>
</p>
<% else %>
<p class="font_description">
<!--teacher could create the course directly-->
<%= l(:label_project_course_unadd) %><%= link_to"#{l(:label_course_new)}",{:controller=>'projects',:action=>'new', :course => 1, :project_type => 1}, :class => 'icon icon-add' %>
</p>
<% end %>
<% else %>
<p>
<span><%=l(:label_course_doing)%>(<%=@memberships_doing.count%>)</span>
<%= link_to"#{l(:label_course_new)}",{:controller=>'projects',:action=>'new', :course => 1, :project_type => 1}, :class => 'icon icon-add' if @user == User.current %>
</p>
<p>
<%= l(:label_created_course) %>
<div> <%= render :partial => 'course_form', :locals => {:memberships => @OwningCouses}%>
</div> </p>
<div style="clear:both;"></div>
<p> <%= l(:label_joined_course) %>
<div> <%= render :partial => 'course_form', :locals => {:memberships => @JoinCouses}%>
</div> </p>
<div style="clear:both;"></div>
<p>
<%= link_to l(:label_course_done)+"("+@memberships_done.count.to_s+")", 'javascript:void(0);', :onclick => '$("#courses_history_block").slideToggle(400);' , style:"color:#666666" if User.current.logged? %>
</p>
<div id="courses_history_block" class="courses_history hidden" >
<%= render :partial => 'course_form', :locals => {:memberships => @memberships_done}%>
</div>
<% end %>
<% if @memberships.empty? %>
<% if @user != User.current %>
<p class="font_description">
<%= l(:label_project_course_un) %>
</p>
<% else %>
<p class="font_description">
<!--teacher could create the course directly-->
<%= l(:label_project_course_unadd) %><%= link_to "#{l(:label_course_new)}", {:controller => 'projects', :action => 'new', :course => 1, :project_type => 1}, :class => 'icon icon-add' %>
</p>
<% end %>
<% else %>
<%= render partial: 'course_list_have_entity' %>
<% end %>
</div>

@ -11,23 +11,27 @@
</p>
<% end %>
<% else %>
<p>
<span><%=l(:label_course_doing)%>(<%=@memberships_doing.count%>)</span>
<%= link_to"#{l(:label_course_view_student)}",{:controller=>'projects',:action=>'course', :course => 1}, :class => 'icon icon-add' %>
</p>
<div>
<%= render :partial => 'course_form', :locals => {:memberships => @memberships_doing}%>
</div>
<div class="user_course_list">
<div class="menu">
<%= link_to"#{l(:label_course_view_student)}",course_path(course: 1), :class => 'icon icon-add' %>
<ul>
<li mode='doing' class="on">进行中</li>
<li mode='end'>已完结</li>
</ul>
</div>
<div style="clear:both;"></div>
<div class="dyn_list_wrapper" mode='doing'>
<div class='created_course'>
<%= render :partial => 'course_form', :locals => {:memberships => @memberships_doing} %>
</div>
</div>
<p>
<%= link_to l(:label_course_done)+"("+@memberships_done.count.to_s+")", 'javascript:void(0);', :onclick => '$("#courses_history_block").slideToggle(400); ', style:"color:#666666" if User.current.logged? %>
</p>
<div id="courses_history_block" class="courses_history hidden" >
<%= render :partial => 'course_form', :locals => {:memberships => @memberships_done}%>
</div>
<div class="dyn_list_wrapper hidden" mode='end'>
<div class="created_course ">
<%= render :partial => 'course_form', :locals => {:memberships => @memberships_done} %>
</div>
</div>
</div>
<% end %>

@ -12,3 +12,22 @@
});
</script>
<script type="text/javascript">
$(document).ready(function() {
var $menu = $('.user_course_list .menu');
var $li_tags = $menu.find('[mode]');
var $dyn_list = $('.dyn_list_wrapper');
$menu.find('[mode]').each(function(index, el) {
$(el).click(function() {
mode = $(el).attr('mode');
$menu.find('[mode]').removeClass( "on" );
$( this ).addClass( "on" );
var wrapper = $('[mode='+mode+']')
$dyn_list.addClass( "hidden" );
wrapper.removeClass('hidden')
})
});
});
</script>

@ -192,13 +192,21 @@
<span class="memo_activity" style="color:gray; display: inline-block; margin-bottom:6px; background: url('/images/list-icon.png') no-repeat scroll ;background-position: left center;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<%= link_to '['+topic.forum.name + ']',forum_path(topic.forum),:class => 'memo_Bar_title' %><%= link_to topic.subject.truncate(30, omission: '...'), topic.event_url, :class => "gray" , :style => "font-size: 10pt !important;" %>
</span>
<br>
<span style="margin-left: 24px; color: rgb(172, 174, 177); white-space: nowrap; font-size: 9pt !important;;"><%= l(:field_updated_on) %><%=time_tag_welcome(topic_last_time topic)%>前</span>
<span style="margin-left: 8px; margin-bottom: 0px; color: rgb(172, 174, 177) !important; white-space: nowrap;">
由&nbsp;<%= link_to topic.author ? topic.author : 'Anonymous', user_path(topic.author_id), :style => "font-size: 9pt !important; color: rgb(17, 102, 173);" %>&nbsp;发表
</span>
<span style="float: right; color: rgb(172, 174, 177); white-space: nowrap; font-size: 9pt !important;;">回复(<%= link_to (topic.parent ? topic.parent.replies_count : topic.replies_count), topic.event_url %>)</span>
</div>
<div class='memo_activity memo_attr'>
<span class='memo_timestamp'>
<%= "#{l(:label_updated_time, value: time_tag_welcome(topic_last_time topic))}".html_safe %>
</span>
<span class="memo_author">
楼主: <%= link_to_user(topic.author) %>
</span>
<span class="memo_last_person">
最后回复:<%=link_to_user topic.last_reply.try(:author) %>
</span>
<span class="memo_reply">
回复(<%= link_to topic.try(:replies_count), topic.event_url %>)
</span>
</div>
</div>
</li>
<% end %>
</ul>

@ -239,12 +239,20 @@
<span class="memo_activity" style="color:gray; display: inline-block; margin-bottom:6px; background: url('/images/list-icon.png') no-repeat scroll ;background-position: left center;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<%= link_to '['+topic.forum.name + ']',forum_path(topic.forum),:class => 'memo_Bar_title' %><%= link_to topic.subject.truncate(30, omission: '...'), topic.event_url, :class => "gray" , :style => "font-size: 10pt !important;" %>
</span>
<br>
<span style="margin-left: 24px; color: rgb(172, 174, 177); white-space: nowrap; font-size:9pt !important;;"><%= l(:field_updated_on) %><%=time_tag_welcome(topic_last_time topic)%>前</span>
<span style="margin-left: 8px; margin-bottom: 0px; color: rgb(172, 174, 177) !important; white-space: nowrap;">
由&nbsp;<%= link_to topic.author ? topic.author : 'Anonymous', user_path(topic.author_id), :style => "font-size: 9pt !important; color: rgb(17, 102, 173);" %>&nbsp;发表
</span>
<span style="float: right; color: rgb(172, 174, 177); white-space: nowrap; font-size:9pt !important;;">回复(<%= link_to (topic.parent ? topic.parent.replies_count : topic.replies_count), topic.event_url %>)</span>
<div class='memo_activity memo_attr'>
<span class='memo_timestamp'>
<%= "#{l(:label_updated_time, value: time_tag_welcome(topic_last_time topic))}".html_safe %>
</span>
<span class="memo_author">
楼主: <%= link_to_user(topic.author) %>
</span>
<span class="memo_last_person">
最后回复:<%=link_to_user topic.last_reply.try(:author) %>
</span>
<span class="memo_reply">
回复(<%= link_to topic.try(:replies_count), topic.event_url %>)
</span>
</div>
</div>
</li>
<% end %>

@ -147,6 +147,8 @@ en:
general_pdf_encoding: UTF-8
general_first_day_of_week: '7'
label_approve: Approve
label_refusal: Refusal
notice_account_updated: Account was successfully updated.
notice_account_invalid_creditentials: Invalid user or password
notice_account_password_updated: Password was successfully updated.
@ -1165,6 +1167,9 @@ en:
label_tags_bid_description: call description
label_tags_issue_description: issue description
label_tags_all_objects: all objects
label_apply_project: Apply Project
label_apply_project_waiting: "Application has been submitted, please wait for administrator review."
label_unapply_project: Unsubscribe
#fq
button_leave_meassge: Submit

@ -155,6 +155,9 @@ zh:
general_pdf_encoding: gb18030
general_first_day_of_week: '7'
label_approve: 批准
label_refusal: 拒绝
notice_account_updated: 帐号更新成功
notice_account_invalid_creditentials: 无效的用户名或密码
notice_account_invalid_creditentials_new: 您还未到邮箱激活
@ -480,7 +483,7 @@ zh:
label_project_latest: 最近的项目
label_issue: 问题
label_issue_new: 新建问题
label_issue_plural: 缺陷 #问题 #nyan
label_issue_plural: 缺陷
label_issue_view_all: 查看所有问题
label_issues_by: "按 %{value} 分组显示问题"
label_issue_added: 问题已添加
@ -580,6 +583,10 @@ zh:
label_course_done: 已结束的课程
label_homework_response: 作业咨询
label_bidding_homework: 提交作业
label_add_homework: 添加作业
label_edit_homework: 修改作业
label_delete_homework: 删除作业
label_new_homework: 创建作业
#end
label_my_page: 我的工作台
@ -754,7 +761,7 @@ zh:
label_sort_higher: 上移
label_sort_lower: 下移
label_sort_lowest: 置底
label_roadmap: 里程碑 #版本路线图 #nyan
label_roadmap: 里程碑 #版本路线图
label_roadmap_due_in: "截止日期到 %{value}"
label_roadmap_overdue: "%{value} 延期"
label_roadmap_no_issues: 该版本没有问题
@ -962,6 +969,7 @@ zh:
button_edit_associated_wikipage: "编辑相关wiki页面: %{page_title}"
button_add: 新增
button_change: 修改
button_ok_and_submit: 确定并提交
button_apply: 查询
button_clear: 清除留言
@ -1257,9 +1265,9 @@ zh:
setting_default_projects_tracker_ids: Default trackers for new projects
label_total_time: 合计
label_create_time: 创建时间 #Customer addedAdded by nie
label_comment_time: 留言时间 #nyan
label_activity_time: 发布时间 #nyan
label_update_time: 更新时间 #nyan
label_comment_time: 留言时间
label_activity_time: 发布时间
label_update_time: 更新时间
label_current_contributors: 位当前贡献者
label_commit_limit: 作业提交时间已过!
label_commit_ar: 作业提交截止时间快到了!
@ -1326,7 +1334,9 @@ zh:
label_tags_bid_description: 需求描述
label_tags_issue_description: 问题描述
label_tags_all_objects: 所有
label_apply_project: 申请加入
label_apply_project_waiting: 已处理申请,请等待管理员审核
label_unapply_project: 取消申请
#fq
button_leave_meassge: 留言

@ -29,6 +29,7 @@ RedmineApp::Application.routes.draw do
collection do
match 'addjours', via: [:get, :post]
match 'add_jour_reply', via: [:get,:post]
match 'destroy_jour', via: [:get,:post]
end
end
resources :open_source_projects do
@ -247,6 +248,9 @@ RedmineApp::Application.routes.draw do
post 'issues/:object_id/watchers', :to => 'watchers#create', :object_type => 'issue'
delete 'issues/:object_id/watchers/:user_id' => 'watchers#destroy', :object_type => 'issue'
post 'appliedproject/applied', :to => 'applied_project#applied_join_project', :as => 'appliedproject'
delete 'appliedproject/applied', :to => 'applied_project#unapplied_join_project'
resources :bids, :only=>[:edit,:update,:show] do
member do
match 'homework_ajax_modal'
@ -297,6 +301,7 @@ RedmineApp::Application.routes.draw do
resources :memberships, :shallow => true, :controller => 'members', :only => [:index, :show, :new, :create, :update, :destroy] do
collection do
get 'autocomplete'
get 'appliedproject'
end
end
@ -564,7 +569,7 @@ RedmineApp::Application.routes.draw do
match 'calls/new_bid', :controller => 'bids', :action => 'new_bid'
match 'contest/new_contest', :controller => 'bids', :action => 'new_contest' #huang
match 'calls/:id/show_project', :controller => 'bids', :action => 'show_project', :as => 'project_for_bid'
match 'calls/:id/show_project_homework', :controller => 'bids', :action => 'show_project_homework', :as => 'project_for_bid_homework' # by huang
match 'calls/:id/new_homework', :controller => 'homework_attach', :action => 'new', :as => 'new_homework_attach'
match 'calls/:id/add', :controller => 'bids', :action => 'add'
match 'calls/:id/delete', :controller => 'bids', :action => 'delete'
match 'calls/:id/add_homework', :controller => 'bids', :action => 'add_homework', via: :post

@ -0,0 +1,12 @@
class CreateAppliedProjects < ActiveRecord::Migration
def self.up
create_table :applied_projects do |t|
t.column :project_id, :integer, :null => false
t.column :user_id, :integer, :null => false
end
end
def self.down
drop_table :applied_projects
end
end

@ -178,6 +178,11 @@ Redmine::AccessControl.map do |map|
map.permission :manage_related_issues, {:repositories => [:add_related_issue, :remove_related_issue]}
end
#作业模块权限
map.project_module :bids do |map|
map.permission :view_homework_attaches, {:bids => [:show, :show_project, :revision]}, :read => true
end
map.project_module :boards do |map|
map.permission :manage_boards, {:boards => [:new, :create, :edit, :update, :destroy]}, :require => :member
map.permission :view_messages, {:boards => [:index, :show], :messages => [:show]}, :public => true, :read => true

@ -0,0 +1,33 @@
(function() {
var $, FutureMessage, spinner_template,
__hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
$ = jQuery;
spinner_template = '<div class="messenger-spinner">\n <span class="messenger-spinner-side messenger-spinner-side-left">\n <span class="messenger-spinner-fill"></span>\n </span>\n <span class="messenger-spinner-side messenger-spinner-side-right">\n <span class="messenger-spinner-fill"></span>\n </span>\n</div>';
FutureMessage = (function(_super) {
__extends(FutureMessage, _super);
function FutureMessage() {
return FutureMessage.__super__.constructor.apply(this, arguments);
}
FutureMessage.prototype.template = function(opts) {
var $message;
$message = FutureMessage.__super__.template.apply(this, arguments);
$message.append($(spinner_template));
return $message;
};
return FutureMessage;
})(window.Messenger.Message);
window.Messenger.themes.future = {
Message: FutureMessage
};
}).call(this);

File diff suppressed because one or more lines are too long

@ -493,7 +493,6 @@ a.bids_user {
}
.line{
width: 905px;
height: 1px;
margin: 0px;
background-color: #cacaca;

@ -0,0 +1,462 @@
@-webkit-keyframes ui-spinner-rotate-right {
/* line 64, ../../src/sass/messenger-spinner.scss */
0% {
-webkit-transform: rotate(0deg);
}
/* line 65, ../../src/sass/messenger-spinner.scss */
25% {
-webkit-transform: rotate(180deg);
}
/* line 66, ../../src/sass/messenger-spinner.scss */
50% {
-webkit-transform: rotate(180deg);
}
/* line 67, ../../src/sass/messenger-spinner.scss */
75% {
-webkit-transform: rotate(360deg);
}
/* line 68, ../../src/sass/messenger-spinner.scss */
100% {
-webkit-transform: rotate(360deg);
}
}
@-webkit-keyframes ui-spinner-rotate-left {
/* line 72, ../../src/sass/messenger-spinner.scss */
0% {
-webkit-transform: rotate(0deg);
}
/* line 73, ../../src/sass/messenger-spinner.scss */
25% {
-webkit-transform: rotate(0deg);
}
/* line 74, ../../src/sass/messenger-spinner.scss */
50% {
-webkit-transform: rotate(180deg);
}
/* line 75, ../../src/sass/messenger-spinner.scss */
75% {
-webkit-transform: rotate(180deg);
}
/* line 76, ../../src/sass/messenger-spinner.scss */
100% {
-webkit-transform: rotate(360deg);
}
}
@-moz-keyframes ui-spinner-rotate-right {
/* line 80, ../../src/sass/messenger-spinner.scss */
0% {
-moz-transform: rotate(0deg);
}
/* line 81, ../../src/sass/messenger-spinner.scss */
25% {
-moz-transform: rotate(180deg);
}
/* line 82, ../../src/sass/messenger-spinner.scss */
50% {
-moz-transform: rotate(180deg);
}
/* line 83, ../../src/sass/messenger-spinner.scss */
75% {
-moz-transform: rotate(360deg);
}
/* line 84, ../../src/sass/messenger-spinner.scss */
100% {
-moz-transform: rotate(360deg);
}
}
@-moz-keyframes ui-spinner-rotate-left {
/* line 88, ../../src/sass/messenger-spinner.scss */
0% {
-moz-transform: rotate(0deg);
}
/* line 89, ../../src/sass/messenger-spinner.scss */
25% {
-moz-transform: rotate(0deg);
}
/* line 90, ../../src/sass/messenger-spinner.scss */
50% {
-moz-transform: rotate(180deg);
}
/* line 91, ../../src/sass/messenger-spinner.scss */
75% {
-moz-transform: rotate(180deg);
}
/* line 92, ../../src/sass/messenger-spinner.scss */
100% {
-moz-transform: rotate(360deg);
}
}
@keyframes ui-spinner-rotate-right {
/* line 96, ../../src/sass/messenger-spinner.scss */
0% {
transform: rotate(0deg);
}
/* line 97, ../../src/sass/messenger-spinner.scss */
25% {
transform: rotate(180deg);
}
/* line 98, ../../src/sass/messenger-spinner.scss */
50% {
transform: rotate(180deg);
}
/* line 99, ../../src/sass/messenger-spinner.scss */
75% {
transform: rotate(360deg);
}
/* line 100, ../../src/sass/messenger-spinner.scss */
100% {
transform: rotate(360deg);
}
}
@keyframes ui-spinner-rotate-left {
/* line 104, ../../src/sass/messenger-spinner.scss */
0% {
transform: rotate(0deg);
}
/* line 105, ../../src/sass/messenger-spinner.scss */
25% {
transform: rotate(0deg);
}
/* line 106, ../../src/sass/messenger-spinner.scss */
50% {
transform: rotate(180deg);
}
/* line 107, ../../src/sass/messenger-spinner.scss */
75% {
transform: rotate(180deg);
}
/* line 108, ../../src/sass/messenger-spinner.scss */
100% {
transform: rotate(360deg);
}
}
/* line 116, ../../src/sass/messenger-spinner.scss */
.messenger-spinner {
position: relative;
border-radius: 100%;
}
/* line 120, ../../src/sass/messenger-spinner.scss */
ul.messenger.messenger-spinner-active .messenger-spinner .messenger-spinner {
display: block;
}
/* line 124, ../../src/sass/messenger-spinner.scss */
.messenger-spinner .messenger-spinner-side {
width: 50%;
height: 100%;
overflow: hidden;
position: absolute;
}
/* line 130, ../../src/sass/messenger-spinner.scss */
.messenger-spinner .messenger-spinner-side .messenger-spinner-fill {
border-radius: 999px;
position: absolute;
width: 100%;
height: 100%;
-webkit-animation-iteration-count: infinite;
-moz-animation-iteration-count: infinite;
-ms-animation-iteration-count: infinite;
-o-animation-iteration-count: infinite;
animation-iteration-count: infinite;
-webkit-animation-timing-function: linear;
-moz-animation-timing-function: linear;
-ms-animation-timing-function: linear;
-o-animation-timing-function: linear;
animation-timing-function: linear;
}
/* line 140, ../../src/sass/messenger-spinner.scss */
.messenger-spinner .messenger-spinner-side-left {
left: 0;
}
/* line 143, ../../src/sass/messenger-spinner.scss */
.messenger-spinner .messenger-spinner-side-left .messenger-spinner-fill {
left: 100%;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
-webkit-animation-name: ui-spinner-rotate-left;
-moz-animation-name: ui-spinner-rotate-left;
-ms-animation-name: ui-spinner-rotate-left;
-o-animation-name: ui-spinner-rotate-left;
animation-name: ui-spinner-rotate-left;
-webkit-transform-origin: 0 50%;
-moz-transform-origin: 0 50%;
-ms-transform-origin: 0 50%;
-o-transform-origin: 0 50%;
transform-origin: 0 50%;
}
/* line 152, ../../src/sass/messenger-spinner.scss */
.messenger-spinner .messenger-spinner-side-right {
left: 50%;
}
/* line 155, ../../src/sass/messenger-spinner.scss */
.messenger-spinner .messenger-spinner-side-right .messenger-spinner-fill {
left: -100%;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
-webkit-animation-name: ui-spinner-rotate-right;
-moz-animation-name: ui-spinner-rotate-right;
-ms-animation-name: ui-spinner-rotate-right;
-o-animation-name: ui-spinner-rotate-right;
animation-name: ui-spinner-rotate-right;
-webkit-transform-origin: 100% 50%;
-moz-transform-origin: 100% 50%;
-ms-transform-origin: 100% 50%;
-o-transform-origin: 100% 50%;
transform-origin: 100% 50%;
}
/* line 15, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat {
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
-moz-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
user-select: none;
background: #404040;
}
/* line 20, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat.messenger-empty {
display: none;
}
/* line 23, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message {
-webkit-box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 48px 0px 0px #292929;
-moz-box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 48px 0px 0px #292929;
box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 48px 0px 0px #292929;
-webkit-border-radius: 0px;
-moz-border-radius: 0px;
-ms-border-radius: 0px;
-o-border-radius: 0px;
border-radius: 0px;
position: relative;
border: 0px;
margin-bottom: 0px;
font-size: 13px;
background: transparent;
color: #f0f0f0;
font-weight: 500;
padding: 10px 30px 13px 65px;
}
/* line 35, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message .messenger-close {
position: absolute;
top: 0px;
right: 0px;
color: #888888;
opacity: 1;
font-weight: bold;
display: block;
font-size: 20px;
line-height: 20px;
padding: 8px 10px 7px 7px;
cursor: pointer;
background: transparent;
border: 0;
-webkit-appearance: none;
}
/* line 51, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message .messenger-close:hover {
color: #bbbbbb;
}
/* line 54, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message .messenger-close:active {
color: #777777;
}
/* line 57, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message .messenger-actions {
float: none;
margin-top: 10px;
}
/* line 61, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message .messenger-actions a {
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
text-decoration: none;
color: #aaaaaa;
background: #2e2e2e;
display: inline-block;
padding: 10px;
margin-right: 10px;
padding: 4px 11px 6px;
text-transform: capitalize;
}
/* line 72, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message .messenger-actions a:hover {
color: #f0f0f0;
background: #2e2e2e;
}
/* line 76, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message .messenger-actions a:active {
background: #292929;
color: #aaaaaa;
}
/* line 80, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message .messenger-actions .messenger-phrase {
display: none;
}
/* line 83, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message .messenger-message-inner:before {
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
-ms-border-radius: 50%;
-o-border-radius: 50%;
border-radius: 50%;
position: absolute;
left: 17px;
display: block;
content: " ";
top: 50%;
margin-top: -8px;
height: 13px;
width: 13px;
z-index: 20;
}
/* line 95, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message.alert-success .messenger-message-inner:before {
background: #5fca4a;
}
/* line 98, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message.alert-info .messenger-message-inner:before {
background: #61c4b8;
}
/* line 103, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message.alert-error .messenger-message-inner:before {
background: #dd6a45;
}
/* line 32, ../../src/sass/messenger-spinner.scss */
ul.messenger-theme-flat .messenger-message.alert-error.messenger-retry-soon .messenger-spinner {
width: 32px;
height: 32px;
background: transparent;
}
/* line 37, ../../src/sass/messenger-spinner.scss */
ul.messenger-theme-flat .messenger-message.alert-error.messenger-retry-soon .messenger-spinner .messenger-spinner-side .messenger-spinner-fill {
background: #dd6a45;
-webkit-animation-duration: 20s;
-moz-animation-duration: 20s;
-ms-animation-duration: 20s;
-o-animation-duration: 20s;
animation-duration: 20s;
opacity: 1;
}
/* line 45, ../../src/sass/messenger-spinner.scss */
ul.messenger-theme-flat .messenger-message.alert-error.messenger-retry-soon .messenger-spinner:after {
content: "";
background: #292929;
position: absolute;
width: 26px;
height: 26px;
border-radius: 50%;
top: 3px;
left: 3px;
display: block;
}
/* line 32, ../../src/sass/messenger-spinner.scss */
ul.messenger-theme-flat .messenger-message.alert-error.messenger-retry-later .messenger-spinner {
width: 32px;
height: 32px;
background: transparent;
}
/* line 37, ../../src/sass/messenger-spinner.scss */
ul.messenger-theme-flat .messenger-message.alert-error.messenger-retry-later .messenger-spinner .messenger-spinner-side .messenger-spinner-fill {
background: #dd6a45;
-webkit-animation-duration: 600s;
-moz-animation-duration: 600s;
-ms-animation-duration: 600s;
-o-animation-duration: 600s;
animation-duration: 600s;
opacity: 1;
}
/* line 45, ../../src/sass/messenger-spinner.scss */
ul.messenger-theme-flat .messenger-message.alert-error.messenger-retry-later .messenger-spinner:after {
content: "";
background: #292929;
position: absolute;
width: 26px;
height: 26px;
border-radius: 50%;
top: 3px;
left: 3px;
display: block;
}
/* line 114, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message-slot.messenger-last .messenger-message {
-webkit-border-radius: 4px 4px 0px 0px;
-moz-border-radius: 4px 4px 0px 0px;
-ms-border-radius: 4px 4px 0px 0px;
-o-border-radius: 4px 4px 0px 0px;
border-radius: 4px 4px 0px 0px;
-webkit-box-shadow: inset 48px 0px 0px #292929;
-moz-box-shadow: inset 48px 0px 0px #292929;
box-shadow: inset 48px 0px 0px #292929;
}
/* line 118, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message-slot.messenger-first .messenger-message {
-webkit-border-radius: 0px 0px 4px 4px;
-moz-border-radius: 0px 0px 4px 4px;
-ms-border-radius: 0px 0px 4px 4px;
-o-border-radius: 0px 0px 4px 4px;
border-radius: 0px 0px 4px 4px;
-webkit-box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 48px 0px 0px #292929;
-moz-box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 48px 0px 0px #292929;
box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 48px 0px 0px #292929;
}
/* line 122, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message-slot.messenger-first.messenger-last .messenger-message {
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
-webkit-box-shadow: inset 48px 0px 0px #292929;
-moz-box-shadow: inset 48px 0px 0px #292929;
box-shadow: inset 48px 0px 0px #292929;
}
/* line 126, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-spinner {
display: block;
position: absolute;
left: 7px;
top: 50%;
margin-top: -18px;
z-index: 999;
height: 32px;
width: 32px;
z-index: 10;
}

@ -0,0 +1,496 @@
@-webkit-keyframes ui-spinner-rotate-right {
/* line 64, ../../src/sass/messenger-spinner.scss */
0% {
-webkit-transform: rotate(0deg);
}
/* line 65, ../../src/sass/messenger-spinner.scss */
25% {
-webkit-transform: rotate(180deg);
}
/* line 66, ../../src/sass/messenger-spinner.scss */
50% {
-webkit-transform: rotate(180deg);
}
/* line 67, ../../src/sass/messenger-spinner.scss */
75% {
-webkit-transform: rotate(360deg);
}
/* line 68, ../../src/sass/messenger-spinner.scss */
100% {
-webkit-transform: rotate(360deg);
}
}
@-webkit-keyframes ui-spinner-rotate-left {
/* line 72, ../../src/sass/messenger-spinner.scss */
0% {
-webkit-transform: rotate(0deg);
}
/* line 73, ../../src/sass/messenger-spinner.scss */
25% {
-webkit-transform: rotate(0deg);
}
/* line 74, ../../src/sass/messenger-spinner.scss */
50% {
-webkit-transform: rotate(180deg);
}
/* line 75, ../../src/sass/messenger-spinner.scss */
75% {
-webkit-transform: rotate(180deg);
}
/* line 76, ../../src/sass/messenger-spinner.scss */
100% {
-webkit-transform: rotate(360deg);
}
}
@-moz-keyframes ui-spinner-rotate-right {
/* line 80, ../../src/sass/messenger-spinner.scss */
0% {
-moz-transform: rotate(0deg);
}
/* line 81, ../../src/sass/messenger-spinner.scss */
25% {
-moz-transform: rotate(180deg);
}
/* line 82, ../../src/sass/messenger-spinner.scss */
50% {
-moz-transform: rotate(180deg);
}
/* line 83, ../../src/sass/messenger-spinner.scss */
75% {
-moz-transform: rotate(360deg);
}
/* line 84, ../../src/sass/messenger-spinner.scss */
100% {
-moz-transform: rotate(360deg);
}
}
@-moz-keyframes ui-spinner-rotate-left {
/* line 88, ../../src/sass/messenger-spinner.scss */
0% {
-moz-transform: rotate(0deg);
}
/* line 89, ../../src/sass/messenger-spinner.scss */
25% {
-moz-transform: rotate(0deg);
}
/* line 90, ../../src/sass/messenger-spinner.scss */
50% {
-moz-transform: rotate(180deg);
}
/* line 91, ../../src/sass/messenger-spinner.scss */
75% {
-moz-transform: rotate(180deg);
}
/* line 92, ../../src/sass/messenger-spinner.scss */
100% {
-moz-transform: rotate(360deg);
}
}
@keyframes ui-spinner-rotate-right {
/* line 96, ../../src/sass/messenger-spinner.scss */
0% {
transform: rotate(0deg);
}
/* line 97, ../../src/sass/messenger-spinner.scss */
25% {
transform: rotate(180deg);
}
/* line 98, ../../src/sass/messenger-spinner.scss */
50% {
transform: rotate(180deg);
}
/* line 99, ../../src/sass/messenger-spinner.scss */
75% {
transform: rotate(360deg);
}
/* line 100, ../../src/sass/messenger-spinner.scss */
100% {
transform: rotate(360deg);
}
}
@keyframes ui-spinner-rotate-left {
/* line 104, ../../src/sass/messenger-spinner.scss */
0% {
transform: rotate(0deg);
}
/* line 105, ../../src/sass/messenger-spinner.scss */
25% {
transform: rotate(0deg);
}
/* line 106, ../../src/sass/messenger-spinner.scss */
50% {
transform: rotate(180deg);
}
/* line 107, ../../src/sass/messenger-spinner.scss */
75% {
transform: rotate(180deg);
}
/* line 108, ../../src/sass/messenger-spinner.scss */
100% {
transform: rotate(360deg);
}
}
/* line 116, ../../src/sass/messenger-spinner.scss */
.messenger-spinner {
position: relative;
border-radius: 100%;
}
/* line 120, ../../src/sass/messenger-spinner.scss */
ul.messenger.messenger-spinner-active .messenger-spinner .messenger-spinner {
display: block;
}
/* line 124, ../../src/sass/messenger-spinner.scss */
.messenger-spinner .messenger-spinner-side {
width: 50%;
height: 100%;
overflow: hidden;
position: absolute;
}
/* line 130, ../../src/sass/messenger-spinner.scss */
.messenger-spinner .messenger-spinner-side .messenger-spinner-fill {
border-radius: 999px;
position: absolute;
width: 100%;
height: 100%;
-webkit-animation-iteration-count: infinite;
-moz-animation-iteration-count: infinite;
-ms-animation-iteration-count: infinite;
-o-animation-iteration-count: infinite;
animation-iteration-count: infinite;
-webkit-animation-timing-function: linear;
-moz-animation-timing-function: linear;
-ms-animation-timing-function: linear;
-o-animation-timing-function: linear;
animation-timing-function: linear;
}
/* line 140, ../../src/sass/messenger-spinner.scss */
.messenger-spinner .messenger-spinner-side-left {
left: 0;
}
/* line 143, ../../src/sass/messenger-spinner.scss */
.messenger-spinner .messenger-spinner-side-left .messenger-spinner-fill {
left: 100%;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
-webkit-animation-name: ui-spinner-rotate-left;
-moz-animation-name: ui-spinner-rotate-left;
-ms-animation-name: ui-spinner-rotate-left;
-o-animation-name: ui-spinner-rotate-left;
animation-name: ui-spinner-rotate-left;
-webkit-transform-origin: 0 50%;
-moz-transform-origin: 0 50%;
-ms-transform-origin: 0 50%;
-o-transform-origin: 0 50%;
transform-origin: 0 50%;
}
/* line 152, ../../src/sass/messenger-spinner.scss */
.messenger-spinner .messenger-spinner-side-right {
left: 50%;
}
/* line 155, ../../src/sass/messenger-spinner.scss */
.messenger-spinner .messenger-spinner-side-right .messenger-spinner-fill {
left: -100%;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
-webkit-animation-name: ui-spinner-rotate-right;
-moz-animation-name: ui-spinner-rotate-right;
-ms-animation-name: ui-spinner-rotate-right;
-o-animation-name: ui-spinner-rotate-right;
animation-name: ui-spinner-rotate-right;
-webkit-transform-origin: 100% 50%;
-moz-transform-origin: 100% 50%;
-ms-transform-origin: 100% 50%;
-o-transform-origin: 100% 50%;
transform-origin: 100% 50%;
}
/* line 15, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future {
-webkit-box-shadow: inset 0px 1px rgba(255, 255, 255, 0.24), 0px 1px 5px rgba(0, 0, 0, 0.6);
-moz-box-shadow: inset 0px 1px rgba(255, 255, 255, 0.24), 0px 1px 5px rgba(0, 0, 0, 0.6);
box-shadow: inset 0px 1px rgba(255, 255, 255, 0.24), 0px 1px 5px rgba(0, 0, 0, 0.6);
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
-moz-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
user-select: none;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #5c5b5b), color-stop(100%, #353535));
background-image: -webkit-linear-gradient(#5c5b5b, #353535);
background-image: -moz-linear-gradient(#5c5b5b, #353535);
background-image: -o-linear-gradient(#5c5b5b, #353535);
background-image: linear-gradient(#5c5b5b, #353535);
background-color: #5c5b5b;
border: 1px solid rgba(0, 0, 0, 0.5);
}
/* line 23, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message {
-webkit-box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 0px -1px rgba(0, 0, 0, 0.23), inset 48px 0px 0px rgba(0, 0, 0, 0.3), inset 46px 0px 0px rgba(255, 255, 255, 0.07);
-moz-box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 0px -1px rgba(0, 0, 0, 0.23), inset 48px 0px 0px rgba(0, 0, 0, 0.3), inset 46px 0px 0px rgba(255, 255, 255, 0.07);
box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 0px -1px rgba(0, 0, 0, 0.23), inset 48px 0px 0px rgba(0, 0, 0, 0.3), inset 46px 0px 0px rgba(255, 255, 255, 0.07);
-webkit-border-radius: 0px;
-moz-border-radius: 0px;
-ms-border-radius: 0px;
-o-border-radius: 0px;
border-radius: 0px;
position: relative;
border: 0px;
margin-bottom: 0px;
font-size: 13px;
background: transparent;
color: #f0f0f0;
text-shadow: 0px 1px #111111;
font-weight: 500;
padding: 10px 30px 13px 65px;
}
/* line 36, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message a {
color: #5599ff;
}
/* line 39, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message .messenger-close {
position: absolute;
top: 0px;
right: 0px;
color: #888888;
text-shadow: 0px 1px black;
opacity: 1;
font-weight: bold;
display: block;
font-size: 20px;
line-height: 20px;
padding: 8px 10px 7px 7px;
cursor: pointer;
background: transparent;
border: 0;
-webkit-appearance: none;
}
/* line 56, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message .messenger-close:hover {
color: #bbbbbb;
}
/* line 59, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message .messenger-close:active {
color: #777777;
}
/* line 62, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message .messenger-actions {
float: none;
margin-top: 10px;
}
/* line 66, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message .messenger-actions a {
-webkit-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.2), inset 0px 1px rgba(255, 255, 255, 0.1);
-moz-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.2), inset 0px 1px rgba(255, 255, 255, 0.1);
box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.2), inset 0px 1px rgba(255, 255, 255, 0.1);
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
text-decoration: none;
display: inline-block;
padding: 10px;
color: #aaaaaa;
text-shadow: 0px 1px #222222;
margin-right: 10px;
padding: 3px 10px 5px;
text-transform: capitalize;
}
/* line 78, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message .messenger-actions a:hover {
-webkit-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.2), inset 0px 1px rgba(255, 255, 255, 0.2);
-moz-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.2), inset 0px 1px rgba(255, 255, 255, 0.2);
box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.2), inset 0px 1px rgba(255, 255, 255, 0.2);
color: #f0f0f0;
}
/* line 82, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message .messenger-actions a:active {
-webkit-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.28), inset 0px 1px rgba(0, 0, 0, 0.1);
-moz-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.28), inset 0px 1px rgba(0, 0, 0, 0.1);
box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.28), inset 0px 1px rgba(0, 0, 0, 0.1);
background: rgba(0, 0, 0, 0.04);
color: #aaaaaa;
}
/* line 87, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message .messenger-actions .messenger-phrase {
display: none;
}
/* line 90, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message .messenger-message-inner:before {
-webkit-box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.6), 0px 0px 0px 1px rgba(0, 0, 0, 0.2);
-moz-box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.6), 0px 0px 0px 1px rgba(0, 0, 0, 0.2);
box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.6), 0px 0px 0px 1px rgba(0, 0, 0, 0.2);
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
-ms-border-radius: 50%;
-o-border-radius: 50%;
border-radius: 50%;
position: absolute;
left: 17px;
display: block;
content: " ";
top: 50%;
margin-top: -8px;
height: 13px;
width: 13px;
z-index: 20;
}
/* line 103, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message.alert-success .messenger-message-inner:before {
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #5fca4a), color-stop(100%, #098d38));
background-image: -webkit-linear-gradient(top, #5fca4a, #098d38);
background-image: -moz-linear-gradient(top, #5fca4a, #098d38);
background-image: -o-linear-gradient(top, #5fca4a, #098d38);
background-image: linear-gradient(top, #5fca4a, #098d38);
background-color: #5fca4a;
}
/* line 107, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message.alert-info .messenger-message-inner:before {
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #61c4b8), color-stop(100%, #1992a3));
background-image: -webkit-linear-gradient(top, #61c4b8, #1992a3);
background-image: -moz-linear-gradient(top, #61c4b8, #1992a3);
background-image: -o-linear-gradient(top, #61c4b8, #1992a3);
background-image: linear-gradient(top, #61c4b8, #1992a3);
background-color: #61c4b8;
}
/* line 113, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message.alert-error .messenger-message-inner:before {
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dd6a45), color-stop(100%, #91361a));
background-image: -webkit-linear-gradient(top, #dd6a45, #91361a);
background-image: -moz-linear-gradient(top, #dd6a45, #91361a);
background-image: -o-linear-gradient(top, #dd6a45, #91361a);
background-image: linear-gradient(top, #dd6a45, #91361a);
background-color: #dd6a45;
}
/* line 32, ../../src/sass/messenger-spinner.scss */
ul.messenger-theme-future .messenger-message.alert-error.messenger-retry-soon .messenger-spinner {
width: 32px;
height: 32px;
background: transparent;
}
/* line 37, ../../src/sass/messenger-spinner.scss */
ul.messenger-theme-future .messenger-message.alert-error.messenger-retry-soon .messenger-spinner .messenger-spinner-side .messenger-spinner-fill {
background: #dd6a45;
-webkit-animation-duration: 20s;
-moz-animation-duration: 20s;
-ms-animation-duration: 20s;
-o-animation-duration: 20s;
animation-duration: 20s;
opacity: 1;
}
/* line 45, ../../src/sass/messenger-spinner.scss */
ul.messenger-theme-future .messenger-message.alert-error.messenger-retry-soon .messenger-spinner:after {
content: "";
background: #333333;
position: absolute;
width: 26px;
height: 26px;
border-radius: 50%;
top: 3px;
left: 3px;
display: block;
}
/* line 32, ../../src/sass/messenger-spinner.scss */
ul.messenger-theme-future .messenger-message.alert-error.messenger-retry-later .messenger-spinner {
width: 32px;
height: 32px;
background: transparent;
}
/* line 37, ../../src/sass/messenger-spinner.scss */
ul.messenger-theme-future .messenger-message.alert-error.messenger-retry-later .messenger-spinner .messenger-spinner-side .messenger-spinner-fill {
background: #dd6a45;
-webkit-animation-duration: 600s;
-moz-animation-duration: 600s;
-ms-animation-duration: 600s;
-o-animation-duration: 600s;
animation-duration: 600s;
opacity: 1;
}
/* line 45, ../../src/sass/messenger-spinner.scss */
ul.messenger-theme-future .messenger-message.alert-error.messenger-retry-later .messenger-spinner:after {
content: "";
background: #333333;
position: absolute;
width: 26px;
height: 26px;
border-radius: 50%;
top: 3px;
left: 3px;
display: block;
}
/* line 125, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message-slot.messenger-last .messenger-message {
-webkit-border-radius: 4px 4px 0px 0px;
-moz-border-radius: 4px 4px 0px 0px;
-ms-border-radius: 4px 4px 0px 0px;
-o-border-radius: 4px 4px 0px 0px;
border-radius: 4px 4px 0px 0px;
}
/* line 128, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message-slot.messenger-first .messenger-message {
-webkit-border-radius: 0px 0px 4px 4px;
-moz-border-radius: 0px 0px 4px 4px;
-ms-border-radius: 0px 0px 4px 4px;
-o-border-radius: 0px 0px 4px 4px;
border-radius: 0px 0px 4px 4px;
-webkit-box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 48px 0px 0px rgba(0, 0, 0, 0.3), inset 46px 0px 0px rgba(255, 255, 255, 0.07);
-moz-box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 48px 0px 0px rgba(0, 0, 0, 0.3), inset 46px 0px 0px rgba(255, 255, 255, 0.07);
box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 48px 0px 0px rgba(0, 0, 0, 0.3), inset 46px 0px 0px rgba(255, 255, 255, 0.07);
}
/* line 132, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message-slot.messenger-first.messenger-last .messenger-message {
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
-webkit-box-shadow: inset 48px 0px 0px rgba(0, 0, 0, 0.3), inset 46px 0px 0px rgba(255, 255, 255, 0.07);
-moz-box-shadow: inset 48px 0px 0px rgba(0, 0, 0, 0.3), inset 46px 0px 0px rgba(255, 255, 255, 0.07);
box-shadow: inset 48px 0px 0px rgba(0, 0, 0, 0.3), inset 46px 0px 0px rgba(255, 255, 255, 0.07);
}
/* line 136, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-spinner {
display: block;
position: absolute;
left: 7px;
top: 50%;
margin-top: -18px;
z-index: 999;
height: 32px;
width: 32px;
z-index: 10;
}

@ -0,0 +1,101 @@
/* line 4, ../../src/sass/messenger.sass */
ul.messenger {
margin: 0;
padding: 0;
}
/* line 8, ../../src/sass/messenger.sass */
ul.messenger > li {
list-style: none;
margin: 0;
padding: 0;
}
/* line 14, ../../src/sass/messenger.sass */
ul.messenger.messenger-empty {
display: none;
}
/* line 17, ../../src/sass/messenger.sass */
ul.messenger .messenger-message {
overflow: hidden;
*zoom: 1;
}
/* line 20, ../../src/sass/messenger.sass */
ul.messenger .messenger-message.messenger-hidden {
display: none;
}
/* line 23, ../../src/sass/messenger.sass */
ul.messenger .messenger-message .messenger-phrase, ul.messenger .messenger-message .messenger-actions a {
padding-right: 5px;
}
/* line 26, ../../src/sass/messenger.sass */
ul.messenger .messenger-message .messenger-actions {
float: right;
}
/* line 29, ../../src/sass/messenger.sass */
ul.messenger .messenger-message .messenger-actions a {
cursor: pointer;
text-decoration: underline;
}
/* line 33, ../../src/sass/messenger.sass */
ul.messenger .messenger-message ul, ul.messenger .messenger-message ol {
margin: 10px 18px 0;
}
/* line 36, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed {
position: fixed;
z-index: 10000;
}
/* line 40, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed .messenger-message {
min-width: 0;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
/* line 45, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed .message .messenger-actions {
float: left;
}
/* line 48, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed.messenger-on-top {
top: 20px;
}
/* line 51, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed.messenger-on-bottom {
bottom: 20px;
}
/* line 54, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed.messenger-on-top, ul.messenger.messenger-fixed.messenger-on-bottom {
left: 50%;
width: 800px;
margin-left: -400px;
}
@media (max-width: 960px) {
/* line 54, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed.messenger-on-top, ul.messenger.messenger-fixed.messenger-on-bottom {
left: 10%;
width: 80%;
margin-left: 0px;
}
}
/* line 64, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed.messenger-on-top.messenger-on-right, ul.messenger.messenger-fixed.messenger-on-bottom.messenger-on-right {
right: 20px;
left: auto;
}
/* line 68, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed.messenger-on-top.messenger-on-left, ul.messenger.messenger-fixed.messenger-on-bottom.messenger-on-left {
left: 20px;
margin-left: 0px;
}
/* line 72, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed.messenger-on-right, ul.messenger.messenger-fixed.messenger-on-left {
width: 350px;
}
/* line 75, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed.messenger-on-right .messenger-actions, ul.messenger.messenger-fixed.messenger-on-left .messenger-actions {
float: left;
}
/* line 78, ../../src/sass/messenger.sass */
ul.messenger .messenger-spinner {
display: none;
}

@ -1,14 +1,17 @@
/* TODO: base/common/page YUI
*******************************************************************************/
span[id^=valid_user]{
padding-left: 10px;
span[id^=valid_user] {
padding-left: 10px;
}
.red{
color: red;
.red {
color: red;
}
.green{
color: green;
.green {
color: green;
}
.border_box {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
@ -1007,7 +1010,7 @@ div.issue {
}
#ver-zebra1 td {
padding: 8px ;
padding: 8px;
border-right: 1px solid #fff;
border-left: 1px solid #fff;
color: #669;
@ -1133,11 +1136,13 @@ div.pagination {
-o-transition: 1s width;
transition: 1s width;
}
.all_browse_div table .description{
border-bottom: 1px solid #efffff;
.all_browse_div table .description {
border-bottom: 1px solid #efffff;
}
.all_browse_div table td{
vertical-align: middle;
.all_browse_div table td {
vertical-align: middle;
}
/* softapplication show
@ -1146,6 +1151,7 @@ div.pagination {
margin: 0;
padding: 0;
}
.softapplication-img {
margin: 5px auto;
width: 860px;
@ -1154,25 +1160,29 @@ div.pagination {
box-shadow: 5px 5px 20px 5px #ccc;
border-radius: 5px;
}
.soft-application {
width: 326px;
height: 580px;
}
.softapplication-img .title{
.softapplication-img .title {
width: 326px;
position: absolute;
left: 0;
bottom: 0;
}
.softapplication-img .title a{
.softapplication-img .title a {
display: block;
text-decoration: none;
color: #fff;
font-size: 20px;
padding: 20px;
background: rgba(0,0,0,0.5);
background: rgba(0, 0, 0, 0.5);
}
.softapplication-img li{
.softapplication-img li {
list-style-type: none;
position: relative;
float: left;
@ -1182,11 +1192,97 @@ div.pagination {
-ms-transition: all 0.5s;
-o-transition: all 0.5s;
transition: all 0.5s;
box-shadow: -1px 0 3px 1px rgba(0,0,0,0.3);
box-shadow: -1px 0 3px 1px rgba(0, 0, 0, 0.3);
}
.softapplication-img ul:hover li{
.softapplication-img ul:hover li {
width: 160px;
}
.softapplication-img ul li:hover{
.softapplication-img ul li:hover {
width: 326px;
}
/* user_courses
*******************************************************************************/
.user_course_list {
margin: 0;
padding: 0;
position: relative;
margin-top: -15px;
}
.user_course_list .menu{
display: block;
background-color: #f9f9f9;
border-radius: 2px 2px 0 0;
position: relative;
height: 40px;
line-height: 40px;
border-bottom: 1px solid #ddd;
text-align: left;
margin-left: -10px;
padding-left: 15px;
}
.user_course_list .menu:after {
content: ".";
visibility: hidden;
display: block;
height: 0;
clear: both;
}
.user_course_list .menu ul {
margin: 0;
padding: 0;
float: right;
margin-right: 30px;
}
.user_course_list .menu ul {
}
.user_course_list .menu li {
display: inline-block;
position: relative;
height: 40px;
line-height: 40px;
cursor: pointer;
}
.user_course_list .menu li:hover {
color: #00a1d6;
}
.user_course_list .menu li.on {
color: #00a1d6;
font-weight: bold;
}
.user_course_list .list_top {
margin: 20px auto 0px;
}
.user_course_list .created_course {
position: relative;
display: block;
padding-top: 20px;
}
.user_course_list .created_course:after {
content: ".";
visibility: hidden;
display: block;
height: 0;
clear: both;
}
.user_course_list .created_course .field {
position: absolute;
display: inline-block;
color: rgb(213, 213, 213);
top: 0;
right: 5%;
}

Loading…
Cancel
Save