Merge branch 'develop' into yuanke

This commit is contained in:
yuanke 2016-06-13 09:46:17 +08:00
commit 3a46a409a9
50 changed files with 3252 additions and 3607 deletions

1
.gitignore vendored
View File

@ -33,3 +33,4 @@ vendor/cache
/tags /tags
/config/initializers/gitlab_config.rb /config/initializers/gitlab_config.rb
1234567 1234567
public/javascripts/wechat/node_modules/

View File

@ -1,3 +1,5 @@
#coding=utf-8
module Mobile module Mobile
require_relative 'middleware/error_handler' require_relative 'middleware/error_handler'
require_relative 'apis/auth' require_relative 'apis/auth'
@ -29,16 +31,22 @@ module Mobile
end end
def authenticate! def authenticate!
raise('Unauthorized. Invalid or expired token.') unless current_user raise('Unauthorized. 用户认证失败.') unless current_user
end end
def current_user def current_user
openid = params[:openid]
if openid
uw = UserWechat.find_by_openid(params[:openid])
return uw.user if uw
end
token = ApiKey.where(access_token: params[:token]).first token = ApiKey.where(access_token: params[:token]).first
if token && !token.expired? if token && !token.expired?
@current_user = User.find(token.user_id) return User.find(token.user_id)
else
nil
end end
nil
end end
end end

View File

@ -12,7 +12,9 @@ module Mobile
requires :openid, type: String requires :openid, type: String
end end
post do post do
user = UserWechat.find_by_openid(params[:openid]).user authenticate!
user = current_user
shield_project_ids = ShieldActivity.select("shield_id").where("container_type='User' and container_id=#{user.id} and shield_type='Project'").map(&:shield_id) shield_project_ids = ShieldActivity.select("shield_id").where("container_type='User' and container_id=#{user.id} and shield_type='Project'").map(&:shield_id)
shield_course_ids = ShieldActivity.select("shield_id").where("container_type='User' and container_id=#{user.id} and shield_type='Course'").map(&:shield_id) shield_course_ids = ShieldActivity.select("shield_id").where("container_type='User' and container_id=#{user.id} and shield_type='Course'").map(&:shield_id)

View File

@ -97,7 +97,6 @@ module Mobile
desc "加入课程" desc "加入课程"
params do params do
requires :token, type: String
requires :course_password, type: String requires :course_password, type: String
end end
post ":id" do post ":id" do

View File

@ -106,7 +106,7 @@ class WordsController < ApplicationController
elsif @journal_destroyed.jour_type == 'HomeworkCommon' elsif @journal_destroyed.jour_type == 'HomeworkCommon'
@homework = HomeworkCommon.find @journal_destroyed.jour_id @homework = HomeworkCommon.find @journal_destroyed.jour_id
if params[:user_activity_id] if params[:user_activity_id]
@user_activity_id = params[:user_activity_id] @user_activity_id = params[:user_activity_id].to_i
else else
@user_activity_id = -1 @user_activity_id = -1
end end

View File

@ -24,8 +24,10 @@
<ul class="st_box_top"> <ul class="st_box_top">
<li class="ml50" style="padding-right: 5px;"><span class="fontGrey6 fb">姓名</span></li> <li class="ml50" style="padding-right: 5px;"><span class="fontGrey6 fb">姓名</span></li>
<li class="ml10" style="padding-right: 15px;"><span class="fontGrey6 fb">学号</span></li> <li class="ml10" style="padding-right: 15px;"><span class="fontGrey6 fb">学号</span></li>
<li style="padding-right: 55px; margin-left: 160px;"><span class="fontGrey6 fb">分班</span></li> <% unless @course.course_groups.empty? %>
<li class="st_list_score ml10"> <li style="padding-right: 55px; margin-left: 160px;"><span class="fontGrey6 fb">分班</span></li>
<% end %>
<li class="st_list_score <%= @course.course_groups.empty? ? 'ml250' : 'ml10' %>">
<%= link_to '英雄榜', member_score_sort_course_path(:sort_type => 'score', :sort_by => (@score_sort_by == "desc" ? "asc" : "desc"), :group_id => (@group ? @group.id : 0),:search_name => (@search_name ? @search_name : nil)) ,:result => members,method: 'get', remote: true, :class => 'ml35'%> <%= link_to '英雄榜', member_score_sort_course_path(:sort_type => 'score', :sort_by => (@score_sort_by == "desc" ? "asc" : "desc"), :group_id => (@group ? @group.id : 0),:search_name => (@search_name ? @search_name : nil)) ,:result => members,method: 'get', remote: true, :class => 'ml35'%>
<% if @sort_type == "score" && @score_sort_by == 'desc' %> <% if @sort_type == "score" && @score_sort_by == 'desc' %>
<a id="pic" href="javascript:" class= "st_down"></a> <a id="pic" href="javascript:" class= "st_down"></a>
@ -59,31 +61,33 @@
<li><%= link_to("#{l(:label_bidding_user_studentcode)}<span >#{member.user.user_extensions.student_id}</span>".html_safe,user_path(member.user)) %></li> <li><%= link_to("#{l(:label_bidding_user_studentcode)}<span >#{member.user.user_extensions.student_id}</span>".html_safe,user_path(member.user)) %></li>
<% end%> <% end%>
</ul> </ul>
<% if User.current.allowed_to?(:as_teacher, @course) || User.current.admin? %> <% unless @course.course_groups.empty? %>
<% if @course.course_groups.nil? || @group %> <% if User.current.allowed_to?(:as_teacher, @course) || User.current.admin? %>
<% if @course.course_groups.nil? || @group %>
<div class="select-class-option fl" style="margin-left: 5px;">
<span style="width: 100px; text-align: center; float: left;" class="hidden"><%=member.course_group_id == 0 ? "暂无" : member.course_group.name %></span>
</div>
<% else %>
<%= form_tag({:controller => 'courses', :action => 'teacher_assign_group', :id => @course.id,:user_id => member.user_id},:remote=>'true', :method => 'post', :id=>"join_group_form_#{member.id}", :class => 'query_form') do %>
<div class="select-class-option fl" style="margin-left: 5px;"><span style="width: 100px; text-align: center; float: left;" class="hidden"><%=member.course_group_id == 0 ? "暂无" : member.course_group.name %></span>
<a style="display: inline-block;" href="javascript:void(0)" class="pic_edit2 ml5"></a>
</div>
<%= select( :name,:group_id, course_group_option(@course),
{ :include_blank => false,:selected => member.course_group_id},
{:onchange=>"join_group_function('#join_group_form_#{member.id}');", :id =>"course_group_id", :name => "course_group_id",:class=>"w125 undis class-edit fl", :style => "margin-left: 5px;"}) %>
<% end %>
<% end %>
<% else %>
<div class="select-class-option fl" style="margin-left: 5px;"> <div class="select-class-option fl" style="margin-left: 5px;">
<span style="width: 100px; text-align: center; float: left;" class="hidden"><%=member.course_group_id == 0 ? "暂无" : member.course_group.name %></span> <span style="width: 100px; text-align: center; float: left;" class="hidden"><%=member.course_group_id == 0 ? "暂无" : member.course_group.name %></span>
</div> </div>
<% else %>
<%= form_tag({:controller => 'courses', :action => 'teacher_assign_group', :id => @course.id,:user_id => member.user_id},:remote=>'true', :method => 'post', :id=>"join_group_form_#{member.id}", :class => 'query_form') do %>
<div class="select-class-option fl" style="margin-left: 5px;"><span style="width: 100px; text-align: center; float: left;" class="hidden"><%=member.course_group_id == 0 ? "暂无" : member.course_group.name %></span>
<a style="display: inline-block;" href="javascript:void(0)" class="pic_edit2 ml5"></a>
</div>
<%= select( :name,:group_id, course_group_option(@course),
{ :include_blank => false,:selected => member.course_group_id},
{:onchange=>"join_group_function('#join_group_form_#{member.id}');", :id =>"course_group_id", :name => "course_group_id",:class=>"w125 undis class-edit fl", :style => "margin-left: 5px;"}) %>
<% end %>
<% end %> <% end %>
<% else %>
<div class="select-class-option fl" style="margin-left: 5px;">
<span style="width: 100px; text-align: center; float: left;" class="hidden"><%=member.course_group_id == 0 ? "暂无" : member.course_group.name %></span>
</div>
<% end %> <% end %>
<%= link_to format("%0.2f",member.score.nil? ? 0 : member.score.to_s), { <%= link_to format("%0.2f",member.score.nil? ? 0 : member.score.to_s), {
:action => 'show_member_score', :action => 'show_member_score',
:member_id => member.id, :member_id => member.id,
:remote => true}, :remote => true},
:class => 'st_list_score c_red' %> :class => "st_list_score c_red #{@course.course_groups.empty? ? 'ml130' : ''}" %>
<%= link_to member.act_score.nil? ? 0 : member.act_score.to_s, { <%= link_to member.act_score.nil? ? 0 : member.act_score.to_s, {
:action => 'show_member_act_score', :action => 'show_member_act_score',
:member_id => member.id, :member_id => member.id,

View File

@ -57,7 +57,7 @@
<% when 'Message' %> <% when 'Message' %>
<%= render :partial => 'users/project_message', :locals => {:activity => Message.find(act.org_act_id),:user_activity_id =>act.id, :is_course=>0, :is_board=>0} %> <%= render :partial => 'users/project_message', :locals => {:activity => Message.find(act.org_act_id),:user_activity_id =>act.id, :is_course=>0, :is_board=>0} %>
<% when 'Project'%> <% when 'Project'%>
<%= render :partial => 'users/project_create', :locals => {:activity => act,:user_activity_id =>act.id} %> <%= render :partial => 'organizations/project_create', :locals => {:activity => act,:user_activity_id =>act.id} %>
<% end %> <% end %>
<% end %> <% end %>
<% if act.container_type == 'Course' %> <% if act.container_type == 'Course' %>

View File

@ -1,14 +1,15 @@
<% if @subfield_acts.blank? %> <div class="sn-inner-body">
<p class="fontGrey2 f14 mt10 mb5">该模块暂时没有相关内容</p> <div class="sn-innner-content">
<% else %> <div class="sn-row sn-bg-white">
<div class="sn-inner-body"> <div class="sn-font-grey3 f14">
<div class="sn-innner-content"> 您的位置:<%= link_to "首页", organization_path(@organization), :class => "sn-link-grey2" %> &gt;
<div class="sn-row sn-bg-white"> <a class = "sn-link-grey2"><%= @org_subfield.name %></a>
<div class="sn-font-grey3 f14"> </div>
您的位置:<%= link_to "首页", organization_path(@organization), :class => "sn-link-grey2" %> &gt; </div>
<a class = "sn-link-grey2"><%= @org_subfield.name %></a> <% if @subfield_acts.blank? %>
</div> <p class="fontGrey2 f14 mt10 mb5">该模块暂时没有相关内容</p>
</div> <% else %>
<div class="sn-inner-newslist mt15"> <div class="sn-inner-newslist mt15">
<h2 class="sn-inner-newsh2"><%= @org_subfield.name %></h2> <h2 class="sn-inner-newsh2"><%= @org_subfield.name %></h2>
<ul> <ul>
@ -34,12 +35,13 @@
</ul> </ul>
<!--<div>--> <!--<div>-->
<!--<ul class="sn-inner-pages" id="pages" style="margin-top: 5px;">--> <!--<ul class="sn-inner-pages" id="pages" style="margin-top: 5px;">-->
<!--<%#= pagination_links_full @atta_pages, @atta_count, :per_page_links => true, :remote => @is_remote, :flag => true %>--> <!--<%#= pagination_links_full @atta_pages, @atta_count, :per_page_links => true, :remote => @is_remote, :flag => true %>-->
<!--<div class="cl"></div>--> <!--<div class="cl"></div>-->
<!--</ul>--> <!--</ul>-->
<!--</div>--> <!--</div>-->
</div> </div>
</div> <% end %>
</div> </div>
<% end %> </div>

View File

@ -73,7 +73,7 @@
<li class="orgListType"><%= org_subfield_type field %></li> <li class="orgListType"><%= org_subfield_type field %></li>
<li class="orgListCatalog hidden"> <li class="orgListCatalog hidden">
<% if Secdomain.where("sub_type=2 and pid=?", @organization.id).count > 0 %> <% if Secdomain.where("sub_type=2 and pid=?", @organization.id).count > 0 %>
<div id="sub_dir_show_<%= field.id %>" ondblclick="edit_dir('#sub_dir_show_<%= field.id %>','#sub_dir_edit_<%= field.id %>');" style="cursor:pointer;background-color:#fffce6;color: #0d90c3; width:30px; margin-left:20px;" title="双击可编辑"> <div id="sub_dir_show_<%= field.id %>" ondblclick="edit_dir('#sub_dir_show_<%= field.id %>','#sub_dir_edit_<%= field.id %>');" style="cursor:pointer;background-color:#fffce6;color: #0d90c3; width:75px;overflow: hidden; white-space: nowrap;text-overflow: ellipsis;" title="双击可编辑">
<%= field.subfield_subdomain_dir.nil? ? '未设置': field.subfield_subdomain_dir.name %> <%= field.subfield_subdomain_dir.nil? ? '未设置': field.subfield_subdomain_dir.name %>
</div> </div>
<% else %> <% else %>

View File

@ -75,9 +75,9 @@
<div class="orgRow mb10 mt5"> <div class="orgRow mb10 mt5">
<span style="margin-left:10px;" >显示模式&nbsp;: </span> <span style="margin-left:10px;" >显示模式&nbsp;: </span>
<input type="radio" id="show_mode_ordinary" value="0" name="show_mode" style="margin-left:5px;" <%= @organization.show_mode == 0 ? "checked" : "" %> /> <input type="radio" id="show_mode_ordinary" value="0" name="show_mode" style="margin-left:5px;" <%= @organization.show_mode == 0 ? "checked" : "" %> />
<label for="show_mode_ordinary">社区模式一</label> <label for="show_mode_ordinary">简洁模式</label>
<input type="radio" id="show_mode_special" value="1" name="show_mode" style="margin-left:10px;" <%= @organization.show_mode == 1 ? "checked" : "" %> /> <input type="radio" id="show_mode_special" value="1" name="show_mode" style="margin-left:10px;" <%= @organization.show_mode == 1 ? "checked" : "" %> />
<label for="show_mode_special">社区模式二</label> <label for="show_mode_special">门户模式</label>
</div> </div>
<div class="orgRow mb10 mt5"><span style="margin-left:38px;" >公开&nbsp;: </span> <div class="orgRow mb10 mt5"><span style="margin-left:38px;" >公开&nbsp;: </span>
<input type="checkbox" id="is_public" onclick="disable_down($(this), $('#allow_download'),$('#allow_down_hint'));" name="organization[is_public]" <%= @organization.is_public ? 'checked': ''%> class="ml3" /> <input type="checkbox" id="is_public" onclick="disable_down($(this), $('#allow_download'),$('#allow_down_hint'));" name="organization[is_public]" <%= @organization.is_public ? 'checked': ''%> class="ml3" />

View File

@ -63,7 +63,7 @@
</span> </span>
<!--<a action-type="reply" href="javascript:;" poped="false" class="fr mr20 linkGrey3" title="回复">回复</a>--> <!--<a action-type="reply" href="javascript:;" poped="false" class="fr mr20 linkGrey3" title="回复">回复</a>-->
<% if User.current.admin? ||is_teacher || comment.user == User.current%> <% if User.current.admin? ||is_teacher || comment.user == User.current%>
<%= link_to('删除', {:controller => 'words', :action => 'destroy', :object_id => comment, :user_id => comment.user,:is_in_course => is_in_course, :course_activity => course_activity}, <%= link_to('删除', {:controller => 'words', :action => 'destroy', :object_id => comment, :user_id => comment.user,:is_in_course => is_in_course, :user_activity_id => user_activity_id, :course_activity => course_activity},
:remote => true, :confirm => l(:text_are_you_sure), :method => 'delete', :class => "fr mr20", :title => l(:button_delete)) %> :remote => true, :confirm => l(:text_are_you_sure), :method => 'delete', :class => "fr mr20", :title => l(:button_delete)) %>
<% end %> <% end %>
</span> </span>

View File

@ -6,25 +6,21 @@
<meta charset='utf-8' /> <meta charset='utf-8' />
<meta name="keywords" content="" /> <meta name="keywords" content="" />
<meta name="description" content="" /> <meta name="description" content="" />
<meta name="apple-mobile-web-app-capable" content="no"> <meta name="apple-mobile-web-app-capable" content="no" />
<meta content='True' name='HandheldFriendly' /> <meta content='True' name='HandheldFriendly' />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" /> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
<link type="text/css" rel="stylesheet" href="/stylesheets/weui/weixin.css" /> <link type="text/css" rel="stylesheet" href="/stylesheets/weui/weixin.css" />
<script type="text/javascript"> <script type="text/javascript">
window.g_openid = '<%= @wechat_user.openid %>'; window.g_openid = '<%= @wechat_user.openid %>';
</script> </script>
</head> </head>
<body> <body>
<div ng-view> <div ng-view>
</div> </div>
<script src="/javascripts/wechat/build/angular.all.min.js"></script>
<script src="/javascripts/wechat/angular.js"></script>
<script src="/javascripts/wechat/angular-route.js"></script>
<script src="/javascripts/wechat/angular-sanitize.min.js"></script>
<script src="/javascripts/wechat/angular-cookies.js"></script>
<script src="/javascripts/jquery-1.3.2.js"></script>
<script src="/javascripts/wechat/app.js"></script> <script src="/javascripts/wechat/app.js"></script>
</body> </body>

View File

@ -2,19 +2,35 @@ button:
- -
type: "view" type: "view"
name: "我的动态" name: "我的动态"
url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8e1ab05163a28e37&redirect_uri=https://www.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=123#wechat_redirect" url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf694495398c7d470&redirect_uri=http://wechat.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=123#wechat_redirect"
- -
type: "click" name: "我的课程"
name: "意见反馈" sub_button:
key: "FEEDBACK" -
type: "view"
name: "课程"
url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf694495398c7d470&redirect_uri=http://wechat.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=123#wechat_redirect"
-
type: "view"
name: "资源"
url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf694495398c7d470&redirect_uri=http://wechat.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=123#wechat_redirect"
- -
name: "更多" name: "更多"
sub_button: sub_button:
- -
type: "view" type: "view"
name: "进入网站" name: "加入班级"
url: "https://www.trustie.net/" url: "https://www.trustie.net/"
- -
type: "view" type: "view"
name: "使用手册" name: "点名"
url: "https://www.trustie.net/organizations/1/downloads" url: "https://www.trustie.net/organizations/1/downloads"
-
type: "click"
name: "反馈"
key: "FEEDBACK"
-
type: "view"
name: "历史推文"
url: "http://mp.weixin.qq.com/mp/getmasssendmsg?__biz=MzIwOTM2NDkxMA==#wechat_webview_type=1&wechat_redirect"

View File

@ -0,0 +1,10 @@
class UpdateOrgSubfiledDefault < ActiveRecord::Migration
def up
OrgSubfield.where(:name => "activity").update_all(:status => false)
OrgSubfield.where(:name => "course").update_all(:status => 2)
OrgSubfield.where(:name => "project").update_all(:status => 2)
end
def down
end
end

View File

@ -0,0 +1,8 @@
class UpdateOrgSubfiledResource < ActiveRecord::Migration
def up
OrgSubfield.where(:field_type => "Resource").update_all(:status => 6)
end
def down
end
end

View File

@ -11,7 +11,7 @@
# #
# It's strongly recommended to check this file into your version control system. # It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20160606064856) do ActiveRecord::Schema.define(:version => 20160612043259) do
create_table "activities", :force => true do |t| create_table "activities", :force => true do |t|
t.integer "act_id", :null => false t.integer "act_id", :null => false
@ -52,28 +52,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
add_index "api_keys", ["access_token"], :name => "index_api_keys_on_access_token" add_index "api_keys", ["access_token"], :name => "index_api_keys_on_access_token"
add_index "api_keys", ["user_id"], :name => "index_api_keys_on_user_id" add_index "api_keys", ["user_id"], :name => "index_api_keys_on_user_id"
create_table "application_settings", :force => true do |t|
t.integer "default_projects_limit"
t.boolean "signup_enabled"
t.boolean "signin_enabled"
t.boolean "gravatar_enabled"
t.text "sign_in_text"
t.datetime "created_at"
t.datetime "updated_at"
t.string "home_page_url"
t.integer "default_branch_protection", :default => 2
t.boolean "twitter_sharing_enabled", :default => true
t.text "restricted_visibility_levels"
t.boolean "version_check_enabled", :default => true
t.integer "max_attachment_size", :default => 10, :null => false
t.integer "default_project_visibility"
t.integer "default_snippet_visibility"
t.text "restricted_signup_domains"
t.boolean "user_oauth_applications", :default => true
t.string "after_sign_out_path"
t.integer "session_expire_delay", :default => 10080, :null => false
end
create_table "applied_projects", :force => true do |t| create_table "applied_projects", :force => true do |t|
t.integer "project_id", :null => false t.integer "project_id", :null => false
t.integer "user_id", :null => false t.integer "user_id", :null => false
@ -178,20 +156,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
t.string "typeName", :limit => 50 t.string "typeName", :limit => 50
end end
create_table "audit_events", :force => true do |t|
t.integer "author_id", :null => false
t.string "type", :null => false
t.integer "entity_id", :null => false
t.string "entity_type", :null => false
t.text "details"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "audit_events", ["author_id"], :name => "index_audit_events_on_author_id"
add_index "audit_events", ["entity_id", "entity_type"], :name => "index_audit_events_on_entity_id_and_entity_type"
add_index "audit_events", ["type"], :name => "index_audit_events_on_type"
create_table "auth_sources", :force => true do |t| create_table "auth_sources", :force => true do |t|
t.string "type", :limit => 30, :default => "", :null => false t.string "type", :limit => 30, :default => "", :null => false
t.string "name", :limit => 60, :default => "", :null => false t.string "name", :limit => 60, :default => "", :null => false
@ -289,17 +253,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
add_index "boards", ["last_message_id"], :name => "index_boards_on_last_message_id" add_index "boards", ["last_message_id"], :name => "index_boards_on_last_message_id"
add_index "boards", ["project_id"], :name => "boards_project_id" add_index "boards", ["project_id"], :name => "boards_project_id"
create_table "broadcast_messages", :force => true do |t|
t.text "message", :null => false
t.datetime "starts_at"
t.datetime "ends_at"
t.integer "alert_type"
t.datetime "created_at"
t.datetime "updated_at"
t.string "color"
t.string "font"
end
create_table "bug_to_osps", :force => true do |t| create_table "bug_to_osps", :force => true do |t|
t.integer "osp_id" t.integer "osp_id"
t.integer "relative_memo_id" t.integer "relative_memo_id"
@ -599,10 +552,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
t.integer "visits", :default => 0 t.integer "visits", :default => 0
end end
add_index "courses", ["id"], :name => "id", :unique => true
add_index "courses", ["tea_id"], :name => "tea_id"
add_index "courses", ["visits"], :name => "visits"
create_table "custom_fields", :force => true do |t| create_table "custom_fields", :force => true do |t|
t.string "type", :limit => 30, :default => "", :null => false t.string "type", :limit => 30, :default => "", :null => false
t.string "name", :limit => 30, :default => "", :null => false t.string "name", :limit => 30, :default => "", :null => false
@ -664,15 +613,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority" add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
create_table "deploy_keys_projects", :force => true do |t|
t.integer "deploy_key_id", :null => false
t.integer "project_id", :null => false
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "deploy_keys_projects", ["project_id"], :name => "index_deploy_keys_projects_on_project_id"
create_table "discuss_demos", :force => true do |t| create_table "discuss_demos", :force => true do |t|
t.string "title" t.string "title"
t.text "body" t.text "body"
@ -722,16 +662,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
t.datetime "created_at" t.datetime "created_at"
end end
create_table "emails", :force => true do |t|
t.integer "user_id", :null => false
t.string "email", :null => false
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "emails", ["email"], :name => "index_emails_on_email", :unique => true
add_index "emails", ["user_id"], :name => "index_emails_on_user_id"
create_table "enabled_modules", :force => true do |t| create_table "enabled_modules", :force => true do |t|
t.integer "project_id" t.integer "project_id"
t.string "name", :null => false t.string "name", :null => false
@ -754,25 +684,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
add_index "enumerations", ["id", "type"], :name => "index_enumerations_on_id_and_type" add_index "enumerations", ["id", "type"], :name => "index_enumerations_on_id_and_type"
add_index "enumerations", ["project_id"], :name => "index_enumerations_on_project_id" add_index "enumerations", ["project_id"], :name => "index_enumerations_on_project_id"
create_table "events", :force => true do |t|
t.string "target_type"
t.integer "target_id"
t.string "title"
t.text "data"
t.integer "project_id"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "action"
t.integer "author_id"
end
add_index "events", ["action"], :name => "index_events_on_action"
add_index "events", ["author_id"], :name => "index_events_on_author_id"
add_index "events", ["created_at"], :name => "index_events_on_created_at"
add_index "events", ["project_id"], :name => "index_events_on_project_id"
add_index "events", ["target_id"], :name => "index_events_on_target_id"
add_index "events", ["target_type"], :name => "index_events_on_target_type"
create_table "exercise_answers", :force => true do |t| create_table "exercise_answers", :force => true do |t|
t.integer "user_id" t.integer "user_id"
t.integer "exercise_question_id" t.integer "exercise_question_id"
@ -875,15 +786,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
add_index "forge_messages", ["forge_message_id", "forge_message_type"], :name => "index_forge_messages_on_forge_message_id_and_forge_message_type" add_index "forge_messages", ["forge_message_id", "forge_message_type"], :name => "index_forge_messages_on_forge_message_id_and_forge_message_type"
add_index "forge_messages", ["user_id", "project_id", "created_at"], :name => "index_forge_messages_on_user_id_and_project_id_and_created_at" add_index "forge_messages", ["user_id", "project_id", "created_at"], :name => "index_forge_messages_on_user_id_and_project_id_and_created_at"
create_table "forked_project_links", :force => true do |t|
t.integer "forked_to_project_id", :null => false
t.integer "forked_from_project_id", :null => false
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "forked_project_links", ["forked_to_project_id"], :name => "index_forked_project_links_on_forked_to_project_id", :unique => true
create_table "forums", :force => true do |t| create_table "forums", :force => true do |t|
t.string "name", :null => false t.string "name", :null => false
t.text "description" t.text "description"
@ -1013,17 +915,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
t.datetime "updated_at", :null => false t.datetime "updated_at", :null => false
end end
create_table "identities", :force => true do |t|
t.string "extern_uid"
t.string "provider"
t.integer "user_id"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "identities", ["created_at", "id"], :name => "index_identities_on_created_at_and_id"
add_index "identities", ["user_id"], :name => "index_identities_on_user_id"
create_table "invite_lists", :force => true do |t| create_table "invite_lists", :force => true do |t|
t.integer "project_id" t.integer "project_id"
t.integer "user_id" t.integer "user_id"
@ -1167,20 +1058,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
t.integer "private", :default => 0 t.integer "private", :default => 0
end end
create_table "keys", :force => true do |t|
t.integer "user_id"
t.datetime "created_at"
t.datetime "updated_at"
t.text "key"
t.string "title"
t.string "type"
t.string "fingerprint"
t.boolean "public", :default => false, :null => false
end
add_index "keys", ["created_at", "id"], :name => "index_keys_on_created_at_and_id"
add_index "keys", ["user_id"], :name => "index_keys_on_user_id"
create_table "kindeditor_assets", :force => true do |t| create_table "kindeditor_assets", :force => true do |t|
t.string "asset" t.string "asset"
t.integer "file_size" t.integer "file_size"
@ -1192,27 +1069,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
t.integer "owner_type", :default => 0 t.integer "owner_type", :default => 0
end end
create_table "label_links", :force => true do |t|
t.integer "label_id"
t.integer "target_id"
t.string "target_type"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "label_links", ["label_id"], :name => "index_label_links_on_label_id"
add_index "label_links", ["target_id", "target_type"], :name => "index_label_links_on_target_id_and_target_type"
create_table "labels", :force => true do |t|
t.string "title"
t.string "color"
t.integer "project_id"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "labels", ["project_id"], :name => "index_labels_on_project_id"
create_table "member_roles", :force => true do |t| create_table "member_roles", :force => true do |t|
t.integer "member_id", :null => false t.integer "member_id", :null => false
t.integer "role_id", :null => false t.integer "role_id", :null => false
@ -1263,47 +1119,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
t.integer "viewed_count", :default => 0 t.integer "viewed_count", :default => 0
end end
create_table "merge_request_diffs", :force => true do |t|
t.string "state"
t.text "st_commits", :limit => 2147483647
t.text "st_diffs", :limit => 2147483647
t.integer "merge_request_id", :null => false
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "merge_request_diffs", ["merge_request_id"], :name => "index_merge_request_diffs_on_merge_request_id", :unique => true
create_table "merge_requests", :force => true do |t|
t.string "target_branch", :null => false
t.string "source_branch", :null => false
t.integer "source_project_id", :null => false
t.integer "author_id"
t.integer "assignee_id"
t.string "title"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "milestone_id"
t.string "state"
t.string "merge_status"
t.integer "target_project_id", :null => false
t.integer "iid"
t.text "description"
t.integer "position", :default => 0
t.datetime "locked_at"
end
add_index "merge_requests", ["assignee_id"], :name => "index_merge_requests_on_assignee_id"
add_index "merge_requests", ["author_id"], :name => "index_merge_requests_on_author_id"
add_index "merge_requests", ["created_at", "id"], :name => "index_merge_requests_on_created_at_and_id"
add_index "merge_requests", ["created_at"], :name => "index_merge_requests_on_created_at"
add_index "merge_requests", ["milestone_id"], :name => "index_merge_requests_on_milestone_id"
add_index "merge_requests", ["source_branch"], :name => "index_merge_requests_on_source_branch"
add_index "merge_requests", ["source_project_id"], :name => "index_merge_requests_on_source_project_id"
add_index "merge_requests", ["target_branch"], :name => "index_merge_requests_on_target_branch"
add_index "merge_requests", ["target_project_id", "iid"], :name => "index_merge_requests_on_target_project_id_and_iid", :unique => true
add_index "merge_requests", ["title"], :name => "index_merge_requests_on_title"
create_table "message_alls", :force => true do |t| create_table "message_alls", :force => true do |t|
t.integer "user_id" t.integer "user_id"
t.integer "message_id" t.integer "message_id"
@ -1338,39 +1153,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
add_index "messages", ["last_reply_id"], :name => "index_messages_on_last_reply_id" add_index "messages", ["last_reply_id"], :name => "index_messages_on_last_reply_id"
add_index "messages", ["parent_id"], :name => "messages_parent_id" add_index "messages", ["parent_id"], :name => "messages_parent_id"
create_table "milestones", :force => true do |t|
t.string "title", :null => false
t.integer "project_id", :null => false
t.text "description"
t.date "due_date"
t.datetime "created_at"
t.datetime "updated_at"
t.string "state"
t.integer "iid"
end
add_index "milestones", ["created_at", "id"], :name => "index_milestones_on_created_at_and_id"
add_index "milestones", ["due_date"], :name => "index_milestones_on_due_date"
add_index "milestones", ["project_id", "iid"], :name => "index_milestones_on_project_id_and_iid", :unique => true
add_index "milestones", ["project_id"], :name => "index_milestones_on_project_id"
create_table "namespaces", :force => true do |t|
t.string "name", :null => false
t.string "path", :null => false
t.integer "owner_id"
t.datetime "created_at"
t.datetime "updated_at"
t.string "type"
t.string "description", :default => "", :null => false
t.string "avatar"
end
add_index "namespaces", ["created_at", "id"], :name => "index_namespaces_on_created_at_and_id"
add_index "namespaces", ["name"], :name => "index_namespaces_on_name", :unique => true
add_index "namespaces", ["owner_id"], :name => "index_namespaces_on_owner_id"
add_index "namespaces", ["path"], :name => "index_namespaces_on_path", :unique => true
add_index "namespaces", ["type"], :name => "index_namespaces_on_type"
create_table "news", :force => true do |t| create_table "news", :force => true do |t|
t.integer "project_id" t.integer "project_id"
t.string "title", :limit => 60, :default => "", :null => false t.string "title", :limit => 60, :default => "", :null => false
@ -1396,31 +1178,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
t.datetime "updated_at", :null => false t.datetime "updated_at", :null => false
end end
create_table "notes", :force => true do |t|
t.text "note"
t.string "noteable_type"
t.integer "author_id"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "project_id"
t.string "attachment"
t.string "line_code"
t.string "commit_id"
t.integer "noteable_id"
t.boolean "system", :default => false, :null => false
t.text "st_diff", :limit => 2147483647
end
add_index "notes", ["author_id"], :name => "index_notes_on_author_id"
add_index "notes", ["commit_id"], :name => "index_notes_on_commit_id"
add_index "notes", ["created_at", "id"], :name => "index_notes_on_created_at_and_id"
add_index "notes", ["created_at"], :name => "index_notes_on_created_at"
add_index "notes", ["noteable_id", "noteable_type"], :name => "index_notes_on_noteable_id_and_noteable_type"
add_index "notes", ["noteable_type"], :name => "index_notes_on_noteable_type"
add_index "notes", ["project_id", "noteable_type"], :name => "index_notes_on_project_id_and_noteable_type"
add_index "notes", ["project_id"], :name => "index_notes_on_project_id"
add_index "notes", ["updated_at"], :name => "index_notes_on_updated_at"
create_table "notificationcomments", :force => true do |t| create_table "notificationcomments", :force => true do |t|
t.string "notificationcommented_type" t.string "notificationcommented_type"
t.integer "notificationcommented_id" t.integer "notificationcommented_id"
@ -1430,49 +1187,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
t.datetime "updated_at", :null => false t.datetime "updated_at", :null => false
end end
create_table "oauth_access_grants", :force => true do |t|
t.integer "resource_owner_id", :null => false
t.integer "application_id", :null => false
t.string "token", :null => false
t.integer "expires_in", :null => false
t.text "redirect_uri", :null => false
t.datetime "created_at", :null => false
t.datetime "revoked_at"
t.string "scopes"
end
add_index "oauth_access_grants", ["token"], :name => "index_oauth_access_grants_on_token", :unique => true
create_table "oauth_access_tokens", :force => true do |t|
t.integer "resource_owner_id"
t.integer "application_id"
t.string "token", :null => false
t.string "refresh_token"
t.integer "expires_in"
t.datetime "revoked_at"
t.datetime "created_at", :null => false
t.string "scopes"
end
add_index "oauth_access_tokens", ["refresh_token"], :name => "index_oauth_access_tokens_on_refresh_token", :unique => true
add_index "oauth_access_tokens", ["resource_owner_id"], :name => "index_oauth_access_tokens_on_resource_owner_id"
add_index "oauth_access_tokens", ["token"], :name => "index_oauth_access_tokens_on_token", :unique => true
create_table "oauth_applications", :force => true do |t|
t.string "name", :null => false
t.string "uid", :null => false
t.string "secret", :null => false
t.text "redirect_uri", :null => false
t.string "scopes", :default => "", :null => false
t.datetime "created_at"
t.datetime "updated_at"
t.integer "owner_id"
t.string "owner_type"
end
add_index "oauth_applications", ["owner_id", "owner_type"], :name => "index_oauth_applications_on_owner_id_and_owner_type"
add_index "oauth_applications", ["uid"], :name => "index_oauth_applications_on_uid", :unique => true
create_table "onclick_times", :force => true do |t| create_table "onclick_times", :force => true do |t|
t.integer "user_id" t.integer "user_id"
t.datetime "onclick_time" t.datetime "onclick_time"
@ -1630,23 +1344,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
t.integer "allow_teacher", :default => 0 t.integer "allow_teacher", :default => 0
end end
create_table "permissions", :force => true do |t|
t.string "controller", :limit => 30, :default => "", :null => false
t.string "action", :limit => 30, :default => "", :null => false
t.string "description", :limit => 60, :default => "", :null => false
t.boolean "is_public", :default => false, :null => false
t.integer "sort", :default => 0, :null => false
t.boolean "mail_option", :default => false, :null => false
t.boolean "mail_enabled", :default => false, :null => false
end
create_table "permissions_roles", :id => false, :force => true do |t|
t.integer "permission_id", :default => 0, :null => false
t.integer "role_id", :default => 0, :null => false
end
add_index "permissions_roles", ["role_id"], :name => "permissions_roles_role_id"
create_table "phone_app_versions", :force => true do |t| create_table "phone_app_versions", :force => true do |t|
t.string "version" t.string "version"
t.text "description" t.text "description"
@ -1729,11 +1426,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
t.datetime "updated_at", :null => false t.datetime "updated_at", :null => false
end end
create_table "project_import_data", :force => true do |t|
t.integer "project_id"
t.text "data"
end
create_table "project_infos", :force => true do |t| create_table "project_infos", :force => true do |t|
t.integer "project_id" t.integer "project_id"
t.integer "user_id" t.integer "user_id"
@ -1824,16 +1516,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
add_index "projects_trackers", ["project_id", "tracker_id"], :name => "projects_trackers_unique", :unique => true add_index "projects_trackers", ["project_id", "tracker_id"], :name => "projects_trackers_unique", :unique => true
add_index "projects_trackers", ["project_id"], :name => "projects_trackers_project_id" add_index "projects_trackers", ["project_id"], :name => "projects_trackers_project_id"
create_table "protected_branches", :force => true do |t|
t.integer "project_id", :null => false
t.string "name", :null => false
t.datetime "created_at"
t.datetime "updated_at"
t.boolean "developers_can_push", :default => false, :null => false
end
add_index "protected_branches", ["project_id"], :name => "index_protected_branches_on_project_id"
create_table "queries", :force => true do |t| create_table "queries", :force => true do |t|
t.integer "project_id" t.integer "project_id"
t.string "name", :default => "", :null => false t.string "name", :default => "", :null => false
@ -1968,25 +1650,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
t.integer "is_teacher_score", :default => 0 t.integer "is_teacher_score", :default => 0
end end
create_table "services", :force => true do |t|
t.string "type"
t.string "title"
t.integer "project_id"
t.datetime "created_at"
t.datetime "updated_at"
t.boolean "active", :default => false, :null => false
t.text "properties"
t.boolean "template", :default => false
t.boolean "push_events", :default => true
t.boolean "issues_events", :default => true
t.boolean "merge_requests_events", :default => true
t.boolean "tag_push_events", :default => true
t.boolean "note_events", :default => true, :null => false
end
add_index "services", ["created_at", "id"], :name => "index_services_on_created_at_and_id"
add_index "services", ["project_id"], :name => "index_services_on_project_id"
create_table "settings", :force => true do |t| create_table "settings", :force => true do |t|
t.string "name", :default => "", :null => false t.string "name", :default => "", :null => false
t.text "value" t.text "value"
@ -2025,26 +1688,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
t.datetime "updated_at", :null => false t.datetime "updated_at", :null => false
end end
create_table "snippets", :force => true do |t|
t.string "title"
t.text "content", :limit => 2147483647
t.integer "author_id", :null => false
t.integer "project_id"
t.datetime "created_at"
t.datetime "updated_at"
t.string "file_name"
t.datetime "expires_at"
t.string "type"
t.integer "visibility_level", :default => 0, :null => false
end
add_index "snippets", ["author_id"], :name => "index_snippets_on_author_id"
add_index "snippets", ["created_at", "id"], :name => "index_snippets_on_created_at_and_id"
add_index "snippets", ["created_at"], :name => "index_snippets_on_created_at"
add_index "snippets", ["expires_at"], :name => "index_snippets_on_expires_at"
add_index "snippets", ["project_id"], :name => "index_snippets_on_project_id"
add_index "snippets", ["visibility_level"], :name => "index_snippets_on_visibility_level"
create_table "softapplications", :force => true do |t| create_table "softapplications", :force => true do |t|
t.string "name" t.string "name"
t.text "description" t.text "description"
@ -2117,9 +1760,9 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
t.integer "absence_penalty", :default => 0 t.integer "absence_penalty", :default => 0
t.float "system_score", :default => 0.0 t.float "system_score", :default => 0.0
t.boolean "is_test", :default => false t.boolean "is_test", :default => false
t.float "work_score"
t.integer "simi_id" t.integer "simi_id"
t.integer "simi_value" t.integer "simi_value"
t.float "work_score"
end end
add_index "student_works", ["homework_common_id", "user_id"], :name => "index_student_works_on_homework_common_id_and_user_id" add_index "student_works", ["homework_common_id", "user_id"], :name => "index_student_works_on_homework_common_id_and_user_id"
@ -2167,13 +1810,13 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
create_table "sub_domains", :force => true do |t| create_table "sub_domains", :force => true do |t|
t.integer "org_subfield_id" t.integer "org_subfield_id"
t.integer "priority" t.integer "priority", :default => 0
t.string "name" t.string "name"
t.string "field_type" t.string "field_type"
t.integer "hide" t.integer "hide", :default => 0
t.integer "status" t.integer "status", :default => 0
t.datetime "created_at", :null => false t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false t.datetime "updated_at", :null => false
end end
create_table "subfield_subdomain_dirs", :force => true do |t| create_table "subfield_subdomain_dirs", :force => true do |t|
@ -2183,17 +1826,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
t.datetime "updated_at", :null => false t.datetime "updated_at", :null => false
end end
create_table "subscriptions", :force => true do |t|
t.integer "user_id"
t.integer "subscribable_id"
t.string "subscribable_type"
t.boolean "subscribed"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "subscriptions", ["subscribable_id", "subscribable_type", "user_id"], :name => "subscriptions_user_id_and_ref_fields", :unique => true
create_table "system_messages", :force => true do |t| create_table "system_messages", :force => true do |t|
t.integer "user_id" t.integer "user_id"
t.string "content" t.string "content"
@ -2434,17 +2066,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
add_index "users", ["id", "type"], :name => "index_users_on_id_and_type" add_index "users", ["id", "type"], :name => "index_users_on_id_and_type"
add_index "users", ["type"], :name => "index_users_on_type" add_index "users", ["type"], :name => "index_users_on_type"
create_table "users_star_projects", :force => true do |t|
t.integer "project_id", :null => false
t.integer "user_id", :null => false
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "users_star_projects", ["project_id"], :name => "index_users_star_projects_on_project_id"
add_index "users_star_projects", ["user_id", "project_id"], :name => "index_users_star_projects_on_user_id_and_project_id", :unique => true
add_index "users_star_projects", ["user_id"], :name => "index_users_star_projects_on_user_id"
create_table "versions", :force => true do |t| create_table "versions", :force => true do |t|
t.integer "project_id", :default => 0, :null => false t.integer "project_id", :default => 0, :null => false
t.string "name", :default => "", :null => false t.string "name", :default => "", :null => false
@ -2496,23 +2117,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
t.datetime "updated_at", :null => false t.datetime "updated_at", :null => false
end end
create_table "web_hooks", :force => true do |t|
t.string "url"
t.integer "project_id"
t.datetime "created_at"
t.datetime "updated_at"
t.string "type", :default => "ProjectHook"
t.integer "service_id"
t.boolean "push_events", :default => true, :null => false
t.boolean "issues_events", :default => false, :null => false
t.boolean "merge_requests_events", :default => false, :null => false
t.boolean "tag_push_events", :default => false
t.boolean "note_events", :default => false, :null => false
end
add_index "web_hooks", ["created_at", "id"], :name => "index_web_hooks_on_created_at_and_id"
add_index "web_hooks", ["project_id"], :name => "index_web_hooks_on_project_id"
create_table "wechat_logs", :force => true do |t| create_table "wechat_logs", :force => true do |t|
t.string "openid", :null => false t.string "openid", :null => false
t.text "request_raw" t.text "request_raw"

View File

@ -27,13 +27,15 @@
<!--<a herf="javascript:void(0);" class="c-grey2 f13 fr mt5 mb10 post-more mr20 undis" text-auto-height>点击展开</a>--> <!--<a herf="javascript:void(0);" class="c-grey2 f13 fr mt5 mb10 post-more mr20 undis" text-auto-height>点击展开</a>-->
<div class="cl"></div> <div class="cl"></div>
</div> </div>
<span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span> <span ng-if="act.homework_common_detail.homework_type == 1" class="c-grey f12 fl mr15 mt2">普通作业</span>
<span class="c-grey f12 fl mt2">{{act.latest_update}}</span> <span ng-if="act.homework_common_detail.homework_type == 2" class="c-grey f12 fl mr15 mt2">编程作业</span>
<a ng-if="!act.reply_count" ng-click="goDetail('homework',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a> <span ng-if="act.homework_common_detail.homework_type == 3" class="c-grey f12 fl mr15 mt2">分组作业</span>
<a ng-if="act.reply_count" ng-click="goDetail('homework',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a> <span class="c-grey f12 fl mt2">{{act.latest_update}}</span>
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;"></span></div> <a ng-if="!act.reply_count" ng-click="goDetail('homework',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">回复</span></a>
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div> <a ng-if="act.reply_count" ng-click="goDetail('homework',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div> <div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;"></span></div>
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
<div class="cl"></div> <div class="cl"></div>
</div> </div>
</div> </div>
@ -58,11 +60,11 @@
</div> </div>
<span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span> <span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span>
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span> <span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
<a ng-if="!act.reply_count" ng-click="goDetail('course_notice',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a> <a ng-if="!act.reply_count" ng-click="goDetail('course_notice',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">回复</span></a>
<a ng-if="act.reply_count" ng-click="goDetail('course_notice',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a> <a ng-if="act.reply_count" ng-click="goDetail('course_notice',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;"></span></div> <div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;"></span></div>
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div> <div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div> <div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
<div class="cl"></div> <div class="cl"></div>
</div> </div>
</div> </div>
@ -87,11 +89,11 @@
</div> </div>
<span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span> <span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span>
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span> <span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
<a ng-if="!act.reply_count" ng-click="goDetail('course_discussion',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a> <a ng-if="!act.reply_count" ng-click="goDetail('course_discussion',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">回复</span></a>
<a ng-if="act.reply_count" ng-click="goDetail('course_discussion',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a> <a ng-if="act.reply_count" ng-click="goDetail('course_discussion',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;"></span></div> <div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;"></span></div>
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div> <div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div> <div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
<div class="cl"></div> <div class="cl"></div>
</div> </div>
</div> </div>
@ -134,11 +136,11 @@
</div> </div>
<span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span> <span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span>
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span> <span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
<a ng-if="!act.reply_count" ng-click="goDetail('issues',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a> <a ng-if="!act.reply_count" ng-click="goDetail('issues',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">回复</span></a>
<a ng-if="act.reply_count" ng-click="goDetail('issues',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a> <a ng-if="act.reply_count" ng-click="goDetail('issues',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;"></span></div> <div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;"></span></div>
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div> <div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div> <div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
<div class="cl"></div> <div class="cl"></div>
</div> </div>
</div> </div>
@ -164,11 +166,11 @@
</div> </div>
<span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span> <span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span>
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span> <span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
<a ng-if="!act.reply_count" ng-click="goDetail('project_discussion',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a> <a ng-if="!act.reply_count" ng-click="goDetail('project_discussion',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">回复</span></a>
<a ng-if="act.reply_count" ng-click="goDetail('project_discussion',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a> <a ng-if="act.reply_count" ng-click="goDetail('project_discussion',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;"></span></div> <div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;"></span></div>
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div> <div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div> <div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
<div class="cl"></div> <div class="cl"></div>
</div> </div>
</div> </div>
@ -207,11 +209,11 @@
<div class="cl"></div> <div class="cl"></div>
</div> </div>
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span> <span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
<a ng-if="!act.reply_count" ng-click="goDetail('journal_for_message',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a> <a ng-if="!act.reply_count" ng-click="goDetail('journal_for_message',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">回复</span></a>
<a ng-if="act.reply_count" ng-click="goDetail('journal_for_message',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a> <a ng-if="act.reply_count" ng-click="goDetail('journal_for_message',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;"></span></div> <div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;"></span></div>
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div> <div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div> <div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
<div class="cl"></div> <div class="cl"></div>
</div> </div>
</div> </div>
@ -236,11 +238,11 @@
<div class="cl"></div> <div class="cl"></div>
</div> </div>
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span> <span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
<a ng-if="!act.reply_count" ng-click="goDetail('blog_comment',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a> <a ng-if="!act.reply_count" ng-click="goDetail('blog_comment',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">回复</span></a>
<a ng-if="act.reply_count" ng-click="goDetail('blog_comment',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a> <a ng-if="act.reply_count" ng-click="goDetail('blog_comment',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;"></span></div> <div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;"></span></div>
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div> <div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div> <div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
<div class="cl"></div> <div class="cl"></div>
</div> </div>
</div> </div>

View File

@ -17,12 +17,7 @@
<div ng-view> <div ng-view>
</div> </div>
<script src="/javascripts/wechat/build/angular.all.min.js"></script>
<script src="/javascripts/wechat/angular.js"></script>
<script src="/javascripts/wechat/angular-route.js"></script>
<script src="/javascripts/wechat/angular-sanitize.min.js"></script>
<script src="/javascripts/wechat/angular-cookies.js"></script>
<script src="/javascripts/jquery-1.3.2.js"></script>
<script src="/javascripts/wechat/app.js"></script> <script src="/javascripts/wechat/app.js"></script>
</body> </body>

View File

@ -5,10 +5,10 @@
<div class="post-container"> <div class="post-container">
<div class="post-wrapper"> <div class="post-wrapper">
<div class="post-main"> <div class="post-main">
<div class="post-title mb5"><span class="c-grey3 f15 fb">{{blog.title}}</span></div> <div class="post-title mb5"><span class="c-grey3 f15 fb">{{blog.title}}</span><img ng-if="blog.locked" src="/images/locked.png" style="display:inline-block;" /></div>
<div class="post-title"><a herf="javascript:void(0);" class="mr10">{{blog.user.realname}}</a>发表博客</div> <div class="post-title"><a herf="javascript:void(0);" class="mr10">{{blog.user.realname}}</a>发表博客</div>
<div class="cl"></div> <div class="cl"></div>
<div class="f13 c-grey3 mt10" ng-bind-html="blog.content|safeHtml"></div> <div class="f13 c-grey3 mt10 text-control" ng-bind-html="blog.content|safeHtml"></div>
<div class="cl"></div> <div class="cl"></div>
<span class="c-grey f13 mt10 fl">{{blog.created_at}}</span> <span class="c-grey f13 mt10 fl">{{blog.created_at}}</span>
<div class="cl"></div> <div class="cl"></div>
@ -24,7 +24,7 @@
<div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div> <div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div>
<div class="ml55"> <div class="ml55">
<div class="post-reply-user hidden">{{journal.user.realname}}</div> <div class="post-reply-user hidden">{{journal.user.realname}}</div>
<pre class="post-reply-content c-grey2 mb10" ng-bind-html="journal.content|safeHtml"></pre> <div class="post-reply-content c-grey2 mb10" ng-bind-html="journal.content|safeHtml"></div>
<div class="post-reply-date fl">{{journal.lasted_comment}}</div> <div class="post-reply-date fl">{{journal.lasted_comment}}</div>
<div class="post-reply-trigger fr undis">回复</div> <div class="post-reply-trigger fr undis">回复</div>
</div> </div>
@ -32,7 +32,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="post-input-wrap"> <div ng-if="!blog.locked" class="post-input-wrap">
<div class="post-reply-row"> <div class="post-reply-row">
<!--<div class="post-reply-avatar fl"><img src="images/post-avatar.jpg" width="30" height="30" /></div>--> <!--<div class="post-reply-avatar fl"><img src="images/post-avatar.jpg" width="30" height="30" /></div>-->
<div class="post-input-container"> <div class="post-input-container">

View File

@ -6,7 +6,7 @@
<div loading-spinner></div> <div loading-spinner></div>
<div class="post-wrapper"> <div class="post-wrapper">
<div class="post-main"> <div class="post-main">
<div class="post-title mb5"><span class="c-grey3 f15 fb">{{discussion.subject}}</span></div> <div class="post-title mb5"><span class="c-grey3 f15 fb">{{discussion.subject}}</span><img ng-if="discussion.locked" src="/images/locked.png" style="display:inline-block;" /></div>
<table class="post-detail-info"><tr> <table class="post-detail-info"><tr>
<td class="text-nowrap v-top">发布者:</td> <td class="text-nowrap v-top">发布者:</td>
<td>{{discussion.user.realname}}</td> <td>{{discussion.user.realname}}</td>
@ -15,7 +15,7 @@
<td class="text-nowrap v-top">&nbsp;&nbsp;&nbsp;源:</td> <td class="text-nowrap v-top">&nbsp;&nbsp;&nbsp;源:</td>
<td>{{discussion.course_project_name}}&nbsp;&nbsp;|&nbsp;&nbsp;课程问答区</td> <td>{{discussion.course_project_name}}&nbsp;&nbsp;|&nbsp;&nbsp;课程问答区</td>
</tr></table> </tr></table>
<div class="f13 c-grey3 mt10" ng-bind-html="discussion.content|safeHtml"></div> <div class="f13 c-grey3 mt10 text-control" ng-bind-html="discussion.content|safeHtml"></div>
<div class="cl"></div> <div class="cl"></div>
<span class="c-grey f13 mt10 fl">{{discussion.created_on}}</span> <span class="c-grey f13 mt10 fl">{{discussion.created_on}}</span>
<div class="cl"></div> <div class="cl"></div>
@ -31,7 +31,7 @@
<div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div> <div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div>
<div class="ml55"> <div class="ml55">
<div class="post-reply-user hidden">{{journal.user.realname}}</div> <div class="post-reply-user hidden">{{journal.user.realname}}</div>
<pre class="post-reply-content c-grey2 mb10" ng-bind-html="journal.content|safeHtml"></pre> <div class="post-reply-content c-grey2 mb10" ng-bind-html="journal.content|safeHtml"></div>
<div class="post-reply-date fl">{{journal.lasted_comment}}</div> <div class="post-reply-date fl">{{journal.lasted_comment}}</div>
<div class="post-reply-trigger fr undis">回复</div> <div class="post-reply-trigger fr undis">回复</div>
</div> </div>
@ -39,7 +39,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="post-input-wrap"> <div ng-if="!discussion.locked" class="post-input-wrap">
<div class="post-reply-row"> <div class="post-reply-row">
<!--<div class="post-reply-avatar fl"><img src="images/post-avatar.jpg" width="30" height="30" /></div>--> <!--<div class="post-reply-avatar fl"><img src="images/post-avatar.jpg" width="30" height="30" /></div>-->
<div class="post-input-container"> <div class="post-input-container">

View File

@ -14,7 +14,7 @@
<td class="text-nowrap v-top">&nbsp;&nbsp;&nbsp;源:</td> <td class="text-nowrap v-top">&nbsp;&nbsp;&nbsp;源:</td>
<td>{{news.course_name}}&nbsp;&nbsp;|&nbsp;&nbsp;课程通知</td> <td>{{news.course_name}}&nbsp;&nbsp;|&nbsp;&nbsp;课程通知</td>
</tr></table> </tr></table>
<div class="f13 c-grey3 mt10" ng-bind-html="news.description|safeHtml"></div> <div class="f13 c-grey3 mt10 text-control" ng-bind-html="news.description|safeHtml"></div>
<div class="cl"></div> <div class="cl"></div>
<span class="c-grey f13 mt10 fl">{{news.created_on}}</span> <span class="c-grey f13 mt10 fl">{{news.created_on}}</span>
<div class="cl"></div> <div class="cl"></div>
@ -30,7 +30,7 @@
<div class="post-reply-avatar fl"><img ng-src="{{comments.author.img_url}}" width="45" height="45" class="border-radius" /></div> <div class="post-reply-avatar fl"><img ng-src="{{comments.author.img_url}}" width="45" height="45" class="border-radius" /></div>
<div class="ml55"> <div class="ml55">
<div class="post-reply-user hidden">{{comments.author.realname}}</div> <div class="post-reply-user hidden">{{comments.author.realname}}</div>
<pre class="post-reply-content c-grey2 mb10" ng-bind-html="comments.comments|safeHtml"></pre> <div class="post-reply-content c-grey2 mb10" ng-bind-html="comments.comments|safeHtml"></div>
<div class="post-reply-date fl">{{comments.created_on}}</div> <div class="post-reply-date fl">{{comments.created_on}}</div>
<div class="post-reply-trigger fr undis">回复</div> <div class="post-reply-trigger fr undis">回复</div>
</div> </div>

View File

@ -15,8 +15,16 @@
<tr> <tr>
<td class="text-nowrap v-top">&nbsp;&nbsp;&nbsp;源:</td> <td class="text-nowrap v-top">&nbsp;&nbsp;&nbsp;源:</td>
<td>{{homework.course_name}}&nbsp;&nbsp;|&nbsp;&nbsp;课程作业</td> <td>{{homework.course_name}}&nbsp;&nbsp;|&nbsp;&nbsp;课程作业</td>
</tr></table> </tr>
<div class="f13 c-grey3 mt10 mb10" ng-bind-html="homework.description|safeHtml"></div> <tr>
<td class="text-nowrap v-top">&nbsp;&nbsp;&nbsp;别:</td>
<td><span ng-if="homework.homework_type == 1" class="c-grey f12 fl mr15 mt2">普通作业</span>
<span ng-if="homework.homework_type == 2" class="c-grey f12 fl mr15 mt2">编程作业</span>
<span ng-if="homework.homework_type == 3" class="c-grey f12 fl mr15 mt2">分组作业</span>
</td>
</tr>
</table>
<div class="f13 c-grey3 mt10 mb10 text-control" ng-bind-html="homework.description|safeHtml"></div>
<span class="c-grey f13">迟交扣分:{{homework.late_penalty}}分</span><br/> <span class="c-grey f13">迟交扣分:{{homework.late_penalty}}分</span><br/>
<span ng-if="!homework.anonymous_comment" class="c-grey f13">缺评扣分:{{homework.absence_penalty}}分/作品<br /></span> <span ng-if="!homework.anonymous_comment" class="c-grey f13">缺评扣分:{{homework.absence_penalty}}分/作品<br /></span>
<span ng-if="!homework.anonymous_comment" class="c-grey f13">匿评开启时间:{{homework.evaluation_start}}<br /></span> <span ng-if="!homework.anonymous_comment" class="c-grey f13">匿评开启时间:{{homework.evaluation_start}}<br /></span>
@ -36,7 +44,7 @@
<div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div> <div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div>
<div class="ml55"> <div class="ml55">
<div class="post-reply-user hidden">{{journal.user.realname}}</div> <div class="post-reply-user hidden">{{journal.user.realname}}</div>
<pre class="post-reply-content c-grey2 mb10" ng-bind-html="journal.notes|safeHtml"></pre> <div class="post-reply-content c-grey2 mb10" ng-bind-html="journal.notes|safeHtml"></div>
<div class="post-reply-date fl">{{journal.lasted_comment}}</div> <div class="post-reply-date fl">{{journal.lasted_comment}}</div>
<div class="post-reply-trigger fr undis">回复</div> <div class="post-reply-trigger fr undis">回复</div>
</div> </div>

View File

@ -14,7 +14,7 @@
<td class="text-nowrap v-top">&nbsp;&nbsp;&nbsp;源:</td> <td class="text-nowrap v-top">&nbsp;&nbsp;&nbsp;源:</td>
<td>{{issue.project_name}}&nbsp;&nbsp;|&nbsp;&nbsp;项目问题</td> <td>{{issue.project_name}}&nbsp;&nbsp;|&nbsp;&nbsp;项目问题</td>
</tr></table> </tr></table>
<div class="f13 c-grey3 mt10 mb10" ng-bind-html="issue.description|safeHtml"></div> <div class="f13 c-grey3 mt10 mb10 text-control" ng-bind-html="issue.description|safeHtml"></div>
<span class="c-grey f13">&nbsp;&nbsp;&nbsp;态:{{issue.issue_status}}<br> <span class="c-grey f13">&nbsp;&nbsp;&nbsp;态:{{issue.issue_status}}<br>
优先级:{{issue.issue_priority}}<br /> 优先级:{{issue.issue_priority}}<br />
指派给:{{issue.issue_assigned_to}}<br /> 指派给:{{issue.issue_assigned_to}}<br />
@ -34,7 +34,7 @@
<div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div> <div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div>
<div class="ml55"> <div class="ml55">
<div class="post-reply-user hidden">{{journal.user.realname}}</div> <div class="post-reply-user hidden">{{journal.user.realname}}</div>
<pre class="post-reply-content c-grey2 mb10" ng-bind-html="journal.notes|safeHtml"></pre> <div class="post-reply-content c-grey2 mb10" ng-bind-html="journal.notes|safeHtml"></div>
<div class="post-reply-date fl">{{journal.created_on}}</div> <div class="post-reply-date fl">{{journal.created_on}}</div>
<div class="post-reply-trigger fr undis">回复</div> <div class="post-reply-trigger fr undis">回复</div>
</div> </div>

View File

@ -7,7 +7,7 @@
<div class="post-title mb5"><a herf="javascript:void(0);" class="mr10">{{message.user.realname}}</a><span style="vertical-align:top;">给您留言了</span><br /></div> <div class="post-title mb5"><a herf="javascript:void(0);" class="mr10">{{message.user.realname}}</a><span style="vertical-align:top;">给您留言了</span><br /></div>
<div class="post-title">{{message.created_on}}</div> <div class="post-title">{{message.created_on}}</div>
<div class="cl"></div> <div class="cl"></div>
<div class="f13 c-grey3 mt10" ng-bind-html="message.notes|safeHtml"></div> <div class="f13 c-grey3 mt10 text-control" ng-bind-html="message.notes|safeHtml"></div>
<div class="cl"></div> <div class="cl"></div>
</div> </div>
<div class="post-interactive border-bottom"> <div class="post-interactive border-bottom">
@ -22,7 +22,7 @@
<div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div> <div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div>
<div class="ml55"> <div class="ml55">
<div class="post-reply-user hidden">{{journal.user.realname}}</div> <div class="post-reply-user hidden">{{journal.user.realname}}</div>
<pre class="post-reply-content c-grey2 mb10" ng-bind-html="journal.notes|safeHtml"></pre> <div class="post-reply-content c-grey2 mb10" ng-bind-html="journal.notes|safeHtml"></div>
<div class="post-reply-date fl">{{journal.lasted_comment}}</div> <div class="post-reply-date fl">{{journal.lasted_comment}}</div>
<div class="post-reply-trigger fr undis">回复</div> <div class="post-reply-trigger fr undis">回复</div>
</div> </div>

View File

@ -5,7 +5,7 @@
<div class="post-container"> <div class="post-container">
<div class="post-wrapper"> <div class="post-wrapper">
<div class="post-main"> <div class="post-main">
<div class="post-title mb5"><span class="c-grey3 f15 fb">{{discussion.subject}}</span></div> <div class="post-title mb5"><span class="c-grey3 f15 fb">{{discussion.subject}}</span><img ng-if="discussion.locked" src="/images/locked.png" style="display:inline-block;" /></div>
<table class="post-detail-info"><tr> <table class="post-detail-info"><tr>
<td class="text-nowrap v-top">发布者:</td> <td class="text-nowrap v-top">发布者:</td>
<td>{{discussion.user.realname}}</td> <td>{{discussion.user.realname}}</td>
@ -14,7 +14,7 @@
<td class="text-nowrap v-top">&nbsp;&nbsp;&nbsp;源:</td> <td class="text-nowrap v-top">&nbsp;&nbsp;&nbsp;源:</td>
<td>{{discussion.course_project_name}}&nbsp;&nbsp;|&nbsp;&nbsp;项目讨论区</td> <td>{{discussion.course_project_name}}&nbsp;&nbsp;|&nbsp;&nbsp;项目讨论区</td>
</tr></table> </tr></table>
<div class="f13 c-grey3 mt10" ng-bind-html="discussion.content|safeHtml"></div> <div class="f13 c-grey3 mt10 text-control" ng-bind-html="discussion.content|safeHtml"></div>
<div class="cl"></div> <div class="cl"></div>
<span class="c-grey f13 mt10 fl">{{discussion.created_on}}</span> <span class="c-grey f13 mt10 fl">{{discussion.created_on}}</span>
<div class="cl"></div> <div class="cl"></div>
@ -30,7 +30,7 @@
<div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div> <div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div>
<div class="ml55"> <div class="ml55">
<div class="post-reply-user hidden">{{journal.user.realname}}</div> <div class="post-reply-user hidden">{{journal.user.realname}}</div>
<pre class="post-reply-content c-grey2 mb10" ng-bind-html="journal.content|safeHtml"></pre> <div class="post-reply-content c-grey2 mb10" ng-bind-html="journal.content|safeHtml"></div>
<div class="post-reply-date fl">{{journal.lasted_comment}}</div> <div class="post-reply-date fl">{{journal.lasted_comment}}</div>
<div class="post-reply-trigger fr undis">回复</div> <div class="post-reply-trigger fr undis">回复</div>
</div> </div>
@ -38,7 +38,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="post-input-wrap"> <div ng-if="!discussion.locked" class="post-input-wrap">
<div class="post-reply-row"> <div class="post-reply-row">
<!--<div class="post-reply-avatar fl"><img src="images/post-avatar.jpg" width="30" height="30" /></div>--> <!--<div class="post-reply-avatar fl"><img src="images/post-avatar.jpg" width="30" height="30" /></div>-->
<div class="post-input-container"> <div class="post-input-container">

View File

@ -1,14 +1,14 @@
var app = angular.module('wechat', ['ngRoute','ngCookies']); var app = angular.module('wechat', ['ngRoute']);
var apiUrl = '/api/v1/'; var apiUrl = '/api/v1/';
var debug = false; //调试标志,如果在本地请置为true var debug = false; //调试标志,如果在本地请置为true
if(debug===true){ if(debug===true){
//apiUrl = 'http://localhost:3000/api/v1/'; //apiUrl = 'http://localhost:3000/api/v1/';
apiUrl = 'https://www.trustie.net/api/v1/'; apiUrl = 'http://www.trustie.net/api/v1/';
} }
app.factory('auth', function($http,$routeParams, $cookies, $q){ app.factory('auth', function($http,$routeParams, $q){
var _openid = ''; var _openid = '';
if(typeof g_openid !== 'undefined'){ if(typeof g_openid !== 'undefined'){
@ -16,7 +16,7 @@ app.factory('auth', function($http,$routeParams, $cookies, $q){
} }
if(debug===true){ if(debug===true){
_openid = "1"; _openid = "orgVLv8TlS6e7FDiI6xdTGHRaaRo"; //guange的帐号
} }
var getOpenId = function() { var getOpenId = function() {
@ -31,15 +31,6 @@ app.factory('auth', function($http,$routeParams, $cookies, $q){
method: 'POST' method: 'POST'
}).then(function successCallback(response) { }).then(function successCallback(response) {
_openid = response.data.openid; _openid = response.data.openid;
if(typeof _openid !== 'undefined' && _openid.length>0){
if(debug !== true){ //如果是生产环境,就存到cookies中
$cookies.put("openid", _openid);
}
} else {
if(debug!==true){//考虑从cookies中取出
_openid = $cookies.get('openid');
}
}
deferred.resolve(_openid); deferred.resolve(_openid);
}, function errorCallback(response) { }, function errorCallback(response) {
deferred.reject(response); deferred.reject(response);
@ -140,12 +131,13 @@ app.factory('common', function($http, auth, $routeParams){
return; return;
} }
var temp = data.comment.replace(/\n/g,'<br/>');
var userInfo = { var userInfo = {
type: type, type: type,
content: data.comment, content: temp,
openid: auth.openid() openid: auth.openid()
}; };
//回复按钮禁用 //回复按钮禁用
data.disabled = true; data.disabled = true;
@ -478,24 +470,13 @@ app.directive('inputAuto',function(){
} }
}); });
app.directive('loadingSpinner', function ($http) { app.directive('loadingSpinner', ['$http', function ($http) {
return { return {
restrict: 'A', restrict: 'A',
replace: true, replace: true,
template: '<div class="loading-bg"><div class="loading-box"><img src="/images/loading.gif" alt=""/><span>加载中...</span></div></div>', template: '<div ng-show="activeCalls>0" class="loading-bg"><div class="loading-box"><img src="/images/loading.gif" alt=""/><span>加载中...</span></div></div>',
link: function (scope, element, attrs) {
scope.$watch('activeCalls', function (newVal, oldVal) {
if (newVal == 0) {
$(element).hide();
}
else {
$(element).show();
}
});
}
}; };
}); }]);
app.config(['$routeProvider',"$httpProvider", "$locationProvider",function ($routeProvider, $httpProvider, $locationProvider) { app.config(['$routeProvider',"$httpProvider", "$locationProvider",function ($routeProvider, $httpProvider, $locationProvider) {
var rootPath = '/assets/wechat/' var rootPath = '/assets/wechat/'

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
var gulp = require('gulp'),
uglify = require('gulp-uglify');
var concat = require('gulp-concat');
gulp.task('minify', function () {
gulp.src(['../jquery-1.3.2.js','angular.js', 'angular-route.js', 'angular-sanitize.min.js'])
.pipe(uglify())
.pipe(concat('angular.all.min.js'))
.pipe(gulp.dest('build'))
});

File diff suppressed because one or more lines are too long

View File

@ -1,354 +1,354 @@
/* /*
# Code Review plugin for Redmine # Code Review plugin for Redmine
# Copyright (C) 2009-2013 Haruyuki Iida # Copyright (C) 2009-2013 Haruyuki Iida
# #
# This program is free software; you can redistribute it and/or # This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License # modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2 # as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version. # of the License, or (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
var topZindex = 1000; var topZindex = 1000;
var action_type = ''; var action_type = '';
var rev = ''; var rev = '';
var rev_to = ''; var rev_to = '';
var path = ''; var path = '';
var urlprefix = ''; var urlprefix = '';
var review_form_dialog = null; var review_form_dialog = null;
var add_form_title = null; var add_form_title = null;
var review_dialog_title = null; var review_dialog_title = null;
var repository_id = null; var repository_id = null;
var filenames = []; var filenames = [];
var ReviewCount = function(total, open, progress){ var ReviewCount = function(total, open, progress){
this.total = total; this.total = total;
this.open = open; this.open = open;
this.closed = total - open; this.closed = total - open;
this.progress = progress this.progress = progress
}; };
var CodeReview = function(id) { var CodeReview = function(id) {
this.id = id; this.id = id;
this.path = ''; this.path = '';
this.line = 0; this.line = 0;
this.url = ''; this.url = '';
this.is_closed = false; this.is_closed = false;
}; };
var review_counts = new Array(); var review_counts = new Array();
var code_reviews_map = new Array(); var code_reviews_map = new Array();
var code_reviews_dialog_map = new Array(); var code_reviews_dialog_map = new Array();
function UpdateRepositoryView(title) { function UpdateRepositoryView(title) {
var header = $("table.changesets thead tr:first"); var header = $("table.changesets thead tr:first");
var th = $('<th></th>'); var th = $('<th></th>');
th.html(title); th.html(title);
header.append(th); header.append(th);
$('tr.changeset td.id a').each(function(i){ $('tr.changeset td.id a').each(function(i){
var revision = this.getAttribute("href"); var revision = this.getAttribute("href");
revision = revision.substr(revision.lastIndexOf("/") + 1); revision = revision.substr(revision.lastIndexOf("/") + 1);
var review = review_counts['revision_' + revision]; var review = review_counts['revision_' + revision];
var td = $('<td/>',{ var td = $('<td/>',{
'class':'progress' 'class':'progress'
}); });
td.html(review.progress); td.html(review.progress);
$(this.parentNode.parentNode).append(td); $(this.parentNode.parentNode).append(td);
}); });
} }
//add function $.down //add function $.down
if(! $.fn.down) if(! $.fn.down)
(function($) { (function($) {
$.fn.down = function() { $.fn.down = function() {
var el = this[0] && this[0].firstChild; var el = this[0] && this[0].firstChild;
while (el && el.nodeType != 1) while (el && el.nodeType != 1)
el = el.nextSibling; el = el.nextSibling;
return $(el); return $(el);
}; };
})(jQuery); })(jQuery);
function UpdateRevisionView() { function UpdateRevisionView() {
$('li.change').each(function(){ $('li.change').each(function(){
var li = $(this); var li = $(this);
if (li.hasClass('folder')) return; if (li.hasClass('folder')) return;
var a = li.down('a'); var a = li.down('a');
if (a.size() == 0) return; if (a.size() == 0) return;
var path = a.attr('href').replace(urlprefix, '').replace(/\?.*$/, ''); var path = a.attr('href').replace(urlprefix, '').replace(/\?.*$/, '');
var reviewlist = code_reviews_map[path]; var reviewlist = code_reviews_map[path];
if (reviewlist == null) return; if (reviewlist == null) return;
var ul = $('<ul></ul>'); var ul = $('<ul></ul>');
for (var j = 0; j < reviewlist.length; j++) { for (var j = 0; j < reviewlist.length; j++) {
var review = reviewlist[j]; var review = reviewlist[j];
var icon = review.is_closed? 'icon-closed-review': 'icon-review'; var icon = review.is_closed? 'icon-closed-review': 'icon-review';
var item = $('<li></li>', { var item = $('<li></li>', {
'class': 'icon ' + icon + ' code_review_summary' 'class': 'icon ' + icon + ' code_review_summary'
}); });
item.html(review.url); item.html(review.url);
ul.append(item); ul.append(item);
} }
li.append(ul); li.append(ul);
}); });
} }
function setAddReviewButton(url, change_id, image_tag, is_readonly, is_diff, attachment_id){ function setAddReviewButton(url, change_id, image_tag, is_readonly, is_diff, attachment_id){
var filetables = []; var filetables = [];
var j = 0; var j = 0;
$('table').each(function(){ $('table').each(function(){
if($(this).hasClass('filecontent')){ if($(this).hasClass('filecontent')){
filetables[j++] = this; filetables[j++] = this;
} }
}); });
j = 0; j = 0;
$('table.filecontent th.filename').each(function(){ $('table.filecontent th.filename').each(function(){
filenames[j] = $.trim($(this).text()); filenames[j] = $.trim($(this).text());
j++; j++;
}); });
addReviewUrl = url + '?change_id=' + change_id + '&action_type=' + action_type + addReviewUrl = url + '?change_id=' + change_id + '&action_type=' + action_type +
'&rev=' + rev + '&rev_to=' + rev_to + '&rev=' + rev + '&rev_to=' + rev_to +
'&attachment_id=' + attachment_id + '&repository_id=' + encodeURIComponent(repository_id); '&attachment_id=' + attachment_id + '&repository_id=' + encodeURIComponent(repository_id);
if (path != null && path.length > 0) { if (path != null && path.length > 0) {
addReviewUrl = addReviewUrl + '&path=' + encodeURIComponent(path); addReviewUrl = addReviewUrl + '&path=' + encodeURIComponent(path);
} }
var num = 0; var num = 0;
if (is_diff) { if (is_diff) {
num = 1; num = 1;
} }
var i, l, tl; var i, l, tl;
for (i = 0, tl = filetables.length; i < tl; i++) { for (i = 0, tl = filetables.length; i < tl; i++) {
var table = filetables[i]; var table = filetables[i];
var trs = table.getElementsByTagName('tr'); var trs = table.getElementsByTagName('tr');
for (j = 0,l = trs.length; j < l; j++) { for (j = 0,l = trs.length; j < l; j++) {
var tr = trs[j]; var tr = trs[j];
var ths = tr.getElementsByTagName('th'); var ths = tr.getElementsByTagName('th');
var th = ths[num]; var th = ths[num];
if (th == null) { if (th == null) {
continue; continue;
} }
var th_html = th.innerHTML; var th_html = th.innerHTML;
var line = th_html.match(/[0-9]+/); var line = th_html.match(/[0-9]+/);
if (line == null) { if (line == null) {
continue; continue;
} }
var span_html = '<span white-space="nowrap" id="review_span_' + line + '_' + i + '">'; var span_html = '<span white-space="nowrap" id="review_span_' + line + '_' + i + '">';
if (!is_readonly) { if (!is_readonly) {
span_html += image_tag; span_html += image_tag;
} }
span_html += '</span>'; span_html += '</span>';
th.innerHTML = th_html + span_html; th.innerHTML = th_html + span_html;
var img = th.getElementsByTagName('img')[0]; var img = th.getElementsByTagName('img')[0];
if (img != null ) { if (img != null ) {
img.id = 'add_revew_img_' + line + '_' + i; img.id = 'add_revew_img_' + line + '_' + i;
$(img).click(clickPencil); $(img).click(clickPencil);
} }
} }
} }
} }
function clickPencil(e) function clickPencil(e)
{ {
// alert('$(e.target).attr("id") = ' + $(e.target).attr("id")); // alert('$(e.target).attr("id") = ' + $(e.target).attr("id"));
var result = $(e.target).attr("id").match(/([0-9]+)_([0-9]+)/); var result = $(e.target).attr("id").match(/([0-9]+)_([0-9]+)/);
var line = result[1]; var line = result[1];
var file_count = eval(result[2]); var file_count = eval(result[2]);
var url = addReviewUrl + '&line=' + line + '&file_count=' + file_count; var url = addReviewUrl + '&line=' + line + '&file_count=' + file_count;
if (path == null || path.length == 0) { if (path == null || path.length == 0) {
url = url + '&path=' + encodeURIComponent(filenames[file_count]) + '&diff_all=true'; url = url + '&path=' + encodeURIComponent(filenames[file_count]) + '&diff_all=true';
} }
addReview(url); addReview(url);
formPopup(e.pageX, e.pageY); formPopup(e.pageX, e.pageY);
e.preventDefault(); e.preventDefault();
} }
var addReviewUrl = null; var addReviewUrl = null;
var showReviewUrl = null; var showReviewUrl = null;
var showReviewImageTag = null; var showReviewImageTag = null;
var showClosedReviewImageTag = null; var showClosedReviewImageTag = null;
function setShowReviewButton(line, review_id, is_closed, file_count) { function setShowReviewButton(line, review_id, is_closed, file_count) {
//alert('file_count = ' + file_count); //alert('file_count = ' + file_count);
var span = $('#review_span_' + line + '_' + file_count); var span = $('#review_span_' + line + '_' + file_count);
if (span.size() == 0) { if (span.size() == 0) {
return; return;
} }
var innerSpan = $('<span></span>',{id: 'review_' + review_id}); var innerSpan = $('<span></span>',{id: 'review_' + review_id});
span.append(innerSpan); span.append(innerSpan);
innerSpan.html(is_closed? showClosedReviewImageTag : showReviewImageTag); innerSpan.html(is_closed? showClosedReviewImageTag : showReviewImageTag);
var div = $('<div></div>', { var div = $('<div></div>', {
'class':'draggable', 'class':'draggable',
id: 'show_review_' + review_id id: 'show_review_' + review_id
}); });
$('#code_review').append(div); $('#code_review').append(div);
innerSpan.down('img').click(function(e) { innerSpan.down('img').click(function(e) {
var review_id = $(e.target).parent().attr('id').match(/[0-9]+/)[0]; var review_id = $(e.target).parent().attr('id').match(/[0-9]+/)[0];
var span = $('#review_' + review_id); // span element of view review button var span = $('#review_' + review_id); // span element of view review button
var pos = span.offset(); var pos = span.offset();
showReview(showReviewUrl, review_id, pos.left + 10 + 5, pos.top + 25); showReview(showReviewUrl, review_id, pos.left + 10 + 5, pos.top + 25);
}); });
} }
function popupReview(review_id) { function popupReview(review_id) {
var span = $('#review_' + review_id); // span element of view review button var span = $('#review_' + review_id); // span element of view review button
var pos = span.offset(); var pos = span.offset();
$('html,body').animate({ scrollTop: pos.top }, $('html,body').animate({ scrollTop: pos.top },
{duration: 'fast', {duration: 'fast',
complete: function(){showReview(showReviewUrl, review_id, pos.left + 10 + 5, pos.top)}}); complete: function(){showReview(showReviewUrl, review_id, pos.left + 10 + 5, pos.top)}});
// position and show popup dialog // position and show popup dialog
// create popup dialog // create popup dialog
//var win = showReview(showReviewUrl, review_id, pos.left + 10 + 5, pos.top); //var win = showReview(showReviewUrl, review_id, pos.left + 10 + 5, pos.top);
// win.toFront(); // win.toFront();
} }
function showReview(url, review_id, x, y) { function showReview(url, review_id, x, y) {
if (code_reviews_dialog_map[review_id] != null) { if (code_reviews_dialog_map[review_id] != null) {
var cur_win = code_reviews_dialog_map[review_id]; var cur_win = code_reviews_dialog_map[review_id];
cur_win.hide(); cur_win.hide();
code_reviews_dialog_map[review_id] = null; code_reviews_dialog_map[review_id] = null;
} }
$('#show_review_' + review_id).load(url, {review_id: review_id}); $('#show_review_' + review_id).load(url, {review_id: review_id});
var review = getReviewObjById(review_id); var review = getReviewObjById(review_id);
var win = $('#show_review_' + review_id).dialog({ var win = $('#show_review_' + review_id).dialog({
show: {effect:'scale'},// ? 'top-left' show: {effect:'scale'},// ? 'top-left'
//position: [x, y + 5], //position: [x, y + 5],
width:640, width:640,
zIndex: topZindex, zIndex: topZindex,
title: review_dialog_title title: review_dialog_title
}); });
// win.getContent().style.color = "#484848"; // win.getContent().style.color = "#484848";
// win.getContent().style.background = "#ffffff"; // win.getContent().style.background = "#ffffff";
topZindex++; topZindex++;
code_reviews_dialog_map[review_id] = win; code_reviews_dialog_map[review_id] = win;
return win return win
} }
function getReviewObjById(review_id) { function getReviewObjById(review_id) {
for (var reviewlist in code_reviews_map) { for (var reviewlist in code_reviews_map) {
for (var i = 0; i < reviewlist.length; i++) { for (var i = 0; i < reviewlist.length; i++) {
var review = reviewlist[i]; var review = reviewlist[i];
if (review.id == review_id) { if (review.id == review_id) {
return review; return review;
} }
} }
} }
return null; return null;
} }
function formPopup(x, y){ function formPopup(x, y){
//@see http://docs.jquery.com/UI/Effects/Scale //@see http://docs.jquery.com/UI/Effects/Scale
var win = $('#review-form-frame').dialog({ var win = $('#review-form-frame').dialog({
show: {effect:'scale', direction: 'both'},// ? 'top-left' show: {effect:'scale', direction: 'both'},// ? 'top-left'
// position: [x, y + 5], // position: [x, y + 5],
width:640, width:640,
zIndex: topZindex, zIndex: topZindex,
title: add_form_title title: add_form_title
}); });
// win.getContent().style.background = "#ffffff"; // win.getContent().style.background = "#ffffff";
if (review_form_dialog != null) { if (review_form_dialog != null) {
review_form_dialog.destroy(); review_form_dialog.destroy();
review_form_dialog = null; review_form_dialog = null;
} }
review_form_dialog = win; review_form_dialog = win;
topZindex += 10; topZindex += 10;
return false; return false;
} }
function hideForm() { function hideForm() {
if (review_form_dialog == null) { if (review_form_dialog == null) {
return; return;
} }
review_form_dialog.dialog('close'); review_form_dialog.dialog('close');
review_form_dialog = null; review_form_dialog = null;
$('#review-form').html(''); $('#review-form').html('');
} }
function addReview(url) { function addReview(url) {
$('#review-form').load(url); $('#review-form').load(url);
} }
function deleteReview(review_id) { function deleteReview(review_id) {
$('show_review_' + review_id).remove(); $('show_review_' + review_id).remove();
$('review_' + review_id).remove(); $('review_' + review_id).remove();
} }
function changeImage(review_id, is_closed) { function changeImage(review_id, is_closed) {
var span = $('review_' + review_id); var span = $('review_' + review_id);
var new_image = null; var new_image = null;
var dummy = new Element('span'); var dummy = new Element('span');
if (is_closed) { if (is_closed) {
dummy.insert(showClosedReviewImageTag); dummy.insert(showClosedReviewImageTag);
} }
else { else {
dummy.insert(showReviewImageTag); dummy.insert(showReviewImageTag);
} }
new_image = dummy.down().getAttribute('src'); new_image = dummy.down().getAttribute('src');
//alert(new_image); //alert(new_image);
span.down('img').setAttribute('src', new_image); span.down('img').setAttribute('src', new_image);
} }
function make_addreview_link(project, link) { function make_addreview_link(project, link) {
var alist = $('#content p a'); var alist = $('#content p a');
if (alist == null) { if (alist == null) {
return; return;
} }
var a = alist[0]; var a = alist[0];
var p = a.parentNode; var p = a.parentNode;
p.innerHTML = p.innerHTML + " | " + link; p.innerHTML = p.innerHTML + " | " + link;
} }
function call_update_revisions(url) { function call_update_revisions(url) {
var changeset_ids = ''; var changeset_ids = '';
var links = $$('table.changesets tbody tr.changeset td.id a'); var links = $$('table.changesets tbody tr.changeset td.id a');
for (var i = 0; i < links.length; i++) { for (var i = 0; i < links.length; i++) {
var link = links[i]; var link = links[i];
var href = link.getAttribute('href'); var href = link.getAttribute('href');
var id = href.replace(/^.*\/revisions\//, ''); var id = href.replace(/^.*\/revisions\//, '');
if (i > 0) { if (i > 0) {
changeset_ids += ','; changeset_ids += ',';
} }
changeset_ids += id; changeset_ids += id;
} }
new Ajax.Updater('code_review_revisions', url, new Ajax.Updater('code_review_revisions', url,
{ {
evalScripts:true, evalScripts:true,
method:'get', method:'get',
parameters: 'changeset_ids=' + encodeURI(changeset_ids) parameters: 'changeset_ids=' + encodeURI(changeset_ids)
}); });
} }
$.fn.serialize2json = function() $.fn.serialize2json = function()
{ {
var o = {}; var o = {};
var a = this.serializeArray(); var a = this.serializeArray();
$.each(a, function() { $.each(a, function() {
if (o[this.name]) { if (o[this.name]) {
if (!o[this.name].push) { if (!o[this.name].push) {
o[this.name] = [o[this.name]]; o[this.name] = [o[this.name]];
} }
o[this.name].push(this.value || ''); o[this.name].push(this.value || '');
} else { } else {
o[this.name] = this.value || ''; o[this.name] = this.value || '';
} }
}); });
return o; return o;
}; };

View File

@ -1,4 +1,4 @@
dt.code_review { dt.code_review {
background-image: url(../images/review.png); background-image: url(../images/review.png);
} }

View File

@ -1,97 +1,97 @@
/* /*
# Code Review plugin for Redmine # Code Review plugin for Redmine
# Copyright (C) 2009 Haruyuki Iida # Copyright (C) 2009 Haruyuki Iida
# #
# This program is free software; you can redistribute it and/or # This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License # modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2 # as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version. # of the License, or (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
#review-form-frame { #review-form-frame {
height: 100%; height: 100%;
} }
.autoscroll table.filecontent th.line-num { .autoscroll table.filecontent th.line-num {
white-space: nowrap; white-space: nowrap;
vertical-align: bottom; vertical-align: bottom;
padding-top: 0; padding-top: 0;
padding-bottom: 0; padding-bottom: 0;
text-align:left; text-align:left;
} }
table.filecontent th.line-num img{ table.filecontent th.line-num img{
padding: 0; padding: 0;
margin: 0; margin: 0;
cursor: pointer; cursor: pointer;
} }
.code-review-form-title { .code-review-form-title {
background-color: #002059; background-color: #002059;
color: white; color: white;
padding-left: 2px; padding-left: 2px;
padding-right: 2px; padding-right: 2px;
cursor: default; cursor: default;
} }
.code_review_viewer { .code_review_viewer {
min-width: 300px; min-width: 300px;
/* /*
max-width: 60%; max-width: 60%;
*/ */
/* max-height: 400px; */ /* max-height: 400px; */
} }
.code_review_viewer .issue{ .code_review_viewer .issue{
} }
.code_review_body { .code_review_body {
background-color: white; background-color: white;
padding:2px; padding:2px;
} }
#code_review_list table.list td { #code_review_list table.list td {
text-align: center; text-align: center;
} }
#code_review_list table.list td.path { #code_review_list table.list td.path {
text-align: left; text-align: left;
} }
#code_review_list table.list td.subject { #code_review_list table.list td.subject {
text-align: left; text-align: left;
} }
.icon-review { .icon-review {
background-image: url(../images/review.png); background-image: url(../images/review.png);
background-repeat: no-repeat; background-repeat: no-repeat;
} }
.icon-closed-review { .icon-closed-review {
background-image: url(../images/closed_review.png); background-image: url(../images/closed_review.png);
background-repeat: no-repeat; background-repeat: no-repeat;
} }
.icon-settings { .icon-settings {
background-image: url(../../../images/changeset.png); background-image: url(../../../images/changeset.png);
background-repeat: no-repeat; background-repeat: no-repeat;
} }
li.code_review_summary { li.code_review_summary {
list-style-type: none; list-style-type: none;
} }

View File

@ -1,19 +1,19 @@
Copyright (c) 2006 Sébastien Gruhier (http://xilinus.com, http://itseb.com) Copyright (c) 2006 Sébastien Gruhier (http://xilinus.com, http://itseb.com)
Permission is hereby granted, free of charge, to any person obtaining Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including "Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish, without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to permit persons to whom the Software is furnished to do so, subject to
the following conditions: the following conditions:
The above copyright notice and this permission notice shall be The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software. included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -1,119 +1,119 @@
.overlay_alert { .overlay_alert {
background-color: #85BBEF; background-color: #85BBEF;
filter:alpha(opacity=60); filter:alpha(opacity=60);
-moz-opacity: 0.6; -moz-opacity: 0.6;
opacity: 0.6; opacity: 0.6;
} }
.alert_nw { .alert_nw {
width: 5px; width: 5px;
height: 5px; height: 5px;
background: transparent url(alert/top_left.gif) no-repeat bottom left; background: transparent url(alert/top_left.gif) no-repeat bottom left;
} }
.alert_n { .alert_n {
height: 5px; height: 5px;
background: transparent url(alert/top.gif) repeat-x bottom left; background: transparent url(alert/top.gif) repeat-x bottom left;
} }
.alert_ne { .alert_ne {
width: 5px; width: 5px;
height: 5px; height: 5px;
background: transparent url(alert/top_right.gif) no-repeat bottom left background: transparent url(alert/top_right.gif) no-repeat bottom left
} }
.alert_e { .alert_e {
width: 5px; width: 5px;
background: transparent url(alert/right.gif) repeat-y 0 0; background: transparent url(alert/right.gif) repeat-y 0 0;
} }
.alert_w { .alert_w {
width: 5px; width: 5px;
background: transparent url(alert/left.gif) repeat-y 0 0; background: transparent url(alert/left.gif) repeat-y 0 0;
} }
.alert_sw { .alert_sw {
width: 5px; width: 5px;
height: 5px; height: 5px;
background: transparent url(alert/bottom_left.gif) no-repeat 0 0; background: transparent url(alert/bottom_left.gif) no-repeat 0 0;
} }
.alert_s { .alert_s {
height: 5px; height: 5px;
background: transparent url(alert/bottom.gif) repeat-x 0 0; background: transparent url(alert/bottom.gif) repeat-x 0 0;
} }
.alert_se, .alert_sizer { .alert_se, .alert_sizer {
width: 5px; width: 5px;
height: 5px; height: 5px;
background: transparent url(alert/bottom_right.gif) no-repeat 0 0; background: transparent url(alert/bottom_right.gif) no-repeat 0 0;
} }
.alert_close { .alert_close {
width:0px; width:0px;
height:0px; height:0px;
display:none; display:none;
} }
.alert_minimize { .alert_minimize {
width:0px; width:0px;
height:0px; height:0px;
display:none; display:none;
} }
.alert_maximize { .alert_maximize {
width:0px; width:0px;
height:0px; height:0px;
display:none; display:none;
} }
.alert_title { .alert_title {
float:left; float:left;
height:1px; height:1px;
width:100%; width:100%;
} }
.alert_content { .alert_content {
overflow:visible; overflow:visible;
color: #000; color: #000;
font-family: Tahoma, Arial, sans-serif; font-family: Tahoma, Arial, sans-serif;
font: 12px arial; font: 12px arial;
background: #FFF; background: #FFF;
} }
/* For alert/confirm dialog */ /* For alert/confirm dialog */
.alert_window { .alert_window {
background: #FFF; background: #FFF;
padding:20px; padding:20px;
margin-left:auto; margin-left:auto;
margin-right:auto; margin-right:auto;
width:400px; width:400px;
} }
.alert_message { .alert_message {
font: 12px arial; font: 12px arial;
width:100%; width:100%;
color:#F00; color:#F00;
padding-bottom:10px; padding-bottom:10px;
} }
.alert_buttons { .alert_buttons {
text-align:center; text-align:center;
width:100%; width:100%;
} }
.alert_buttons input { .alert_buttons input {
width:20%; width:20%;
margin:10px; margin:10px;
} }
.alert_progress { .alert_progress {
float:left; float:left;
margin:auto; margin:auto;
text-align:center; text-align:center;
width:100%; width:100%;
height:16px; height:16px;
background: #FFF url('alert/progress.gif') no-repeat center center background: #FFF url('alert/progress.gif') no-repeat center center
} }

View File

@ -1,88 +1,88 @@
.overlay_alert_lite { .overlay_alert_lite {
background-color: #85BBEF; background-color: #85BBEF;
filter:alpha(opacity=60); filter:alpha(opacity=60);
-moz-opacity: 0.6; -moz-opacity: 0.6;
opacity: 0.6; opacity: 0.6;
} }
.alert_lite_sizer { .alert_lite_sizer {
width:0px; width:0px;
height:0px; height:0px;
display:none; display:none;
} }
.alert_lite_close { .alert_lite_close {
width:0px; width:0px;
height:0px; height:0px;
display:none; display:none;
} }
.alert_lite_minimize { .alert_lite_minimize {
width:0px; width:0px;
height:0px; height:0px;
display:none; display:none;
} }
.alert_lite_maximize { .alert_lite_maximize {
width:0px; width:0px;
height:0px; height:0px;
display:none; display:none;
} }
.alert_lite_title { .alert_lite_title {
width:0px; width:0px;
height:0px; height:0px;
display:none; display:none;
} }
.alert_lite_content { .alert_lite_content {
overflow:auto; overflow:auto;
color: #000; color: #000;
font-family: Tahoma, Arial, sans-serif; font-family: Tahoma, Arial, sans-serif;
font-size: 10px; font-size: 10px;
background: #FFF; background: #FFF;
} }
/* For alert/confirm dialog */ /* For alert/confirm dialog */
.alert_lite_window { .alert_lite_window {
border:1px solid #F00; border:1px solid #F00;
background: #FFF; background: #FFF;
padding:20px; padding:20px;
margin-left:auto; margin-left:auto;
margin-right:auto; margin-right:auto;
width:400px; width:400px;
} }
.alert_lite_message { .alert_lite_message {
font-size:16px; font-size:16px;
text-align:center; text-align:center;
width:100%; width:100%;
color:#F00; color:#F00;
padding-bottom:10px; padding-bottom:10px;
} }
.alert_lite_buttons { .alert_lite_buttons {
text-align:center; text-align:center;
width:100%; width:100%;
} }
.alert_lite_buttons input { .alert_lite_buttons input {
width:20%; width:20%;
margin:10px; margin:10px;
} }
.alert_lite_progress { .alert_lite_progress {
float:left; float:left;
margin:auto; margin:auto;
text-align:center; text-align:center;
width:100%; width:100%;
height:16px; height:16px;
background: #FFF url('alert/progress.gif') no-repeat center center background: #FFF url('alert/progress.gif') no-repeat center center
} }
table.alert_lite_header { table.alert_lite_header {
border:1px solid #F00; border:1px solid #F00;
background:#FFF background:#FFF
} }

View File

@ -1,150 +1,150 @@
.overlay_alphacube { .overlay_alphacube {
background-color: #85BBEF; background-color: #85BBEF;
filter:alpha(opacity=60); filter:alpha(opacity=60);
-moz-opacity: 0.6; -moz-opacity: 0.6;
opacity: 0.6; opacity: 0.6;
} }
.alphacube_nw { .alphacube_nw {
background: transparent url(alphacube/left-top.gif) no-repeat 0 0; background: transparent url(alphacube/left-top.gif) no-repeat 0 0;
width:10px; width:10px;
height:25px; height:25px;
} }
.alphacube_n { .alphacube_n {
background: transparent url(alphacube/top-middle.gif) repeat-x 0 0; background: transparent url(alphacube/top-middle.gif) repeat-x 0 0;
height:25px; height:25px;
} }
.alphacube_ne { .alphacube_ne {
background: transparent url(alphacube/right-top.gif) no-repeat 0 0; background: transparent url(alphacube/right-top.gif) no-repeat 0 0;
width:10px; width:10px;
height:25px; height:25px;
} }
.alphacube_w { .alphacube_w {
background: transparent url(alphacube/frame-left.gif) repeat-y top left; background: transparent url(alphacube/frame-left.gif) repeat-y top left;
width:7px; width:7px;
} }
.alphacube_e { .alphacube_e {
background: transparent url(alphacube/frame-right.gif) repeat-y top right; background: transparent url(alphacube/frame-right.gif) repeat-y top right;
width:7px; width:7px;
} }
.alphacube_sw { .alphacube_sw {
background: transparent url(alphacube/bottom-left-c.gif) no-repeat 0 0; background: transparent url(alphacube/bottom-left-c.gif) no-repeat 0 0;
width:7px; width:7px;
height:7px; height:7px;
} }
.alphacube_s { .alphacube_s {
background: transparent url(alphacube/bottom-middle.gif) repeat-x 0 0; background: transparent url(alphacube/bottom-middle.gif) repeat-x 0 0;
height:7px; height:7px;
} }
.alphacube_se, .alphacube_sizer { .alphacube_se, .alphacube_sizer {
background: transparent url(alphacube/bottom-right-c.gif) no-repeat 0 0; background: transparent url(alphacube/bottom-right-c.gif) no-repeat 0 0;
width:7px; width:7px;
height:7px; height:7px;
} }
.alphacube_sizer { .alphacube_sizer {
cursor:se-resize; cursor:se-resize;
} }
.alphacube_close { .alphacube_close {
width: 23px; width: 23px;
height: 23px; height: 23px;
background: transparent url(alphacube/button-close-focus.gif) no-repeat 0 0; background: transparent url(alphacube/button-close-focus.gif) no-repeat 0 0;
position:absolute; position:absolute;
top:0px; top:0px;
right:11px; right:11px;
cursor:pointer; cursor:pointer;
z-index:1000; z-index:1000;
} }
.alphacube_minimize { .alphacube_minimize {
width: 23px; width: 23px;
height: 23px; height: 23px;
background: transparent url(alphacube/button-min-focus.gif) no-repeat 0 0; background: transparent url(alphacube/button-min-focus.gif) no-repeat 0 0;
position:absolute; position:absolute;
top:0px; top:0px;
right:55px; right:55px;
cursor:pointer; cursor:pointer;
z-index:1000; z-index:1000;
} }
.alphacube_maximize { .alphacube_maximize {
width: 23px; width: 23px;
height: 23px; height: 23px;
background: transparent url(alphacube/button-max-focus.gif) no-repeat 0 0; background: transparent url(alphacube/button-max-focus.gif) no-repeat 0 0;
position:absolute; position:absolute;
top:0px; top:0px;
right:33px; right:33px;
cursor:pointer; cursor:pointer;
z-index:1000; z-index:1000;
} }
.alphacube_title { .alphacube_title {
float:left; float:left;
height:14px; height:14px;
font-size:14px; font-size:14px;
text-align:center; text-align:center;
margin-top:2px; margin-top:2px;
width:100%; width:100%;
color:#123456; color:#123456;
} }
.alphacube_content { .alphacube_content {
overflow:auto; overflow:auto;
color: #000; color: #000;
font-family: Tahoma, Arial, sans-serif; font-family: Tahoma, Arial, sans-serif;
font: 12px arial; font: 12px arial;
background:#FDFDFD; background:#FDFDFD;
} }
/* For alert/confirm dialog */ /* For alert/confirm dialog */
.alphacube_window { .alphacube_window {
border:1px solid #F00; border:1px solid #F00;
background: #FFF; background: #FFF;
padding:20px; padding:20px;
margin-left:auto; margin-left:auto;
margin-right:auto; margin-right:auto;
width:400px; width:400px;
} }
.alphacube_message { .alphacube_message {
font: 12px arial; font: 12px arial;
text-align:center; text-align:center;
width:100%; width:100%;
padding-bottom:10px; padding-bottom:10px;
} }
.alphacube_buttons { .alphacube_buttons {
text-align:center; text-align:center;
width:100%; width:100%;
} }
.alphacube_buttons input { .alphacube_buttons input {
width:20%; width:20%;
margin:10px; margin:10px;
} }
.alphacube_progress { .alphacube_progress {
float:left; float:left;
margin:auto; margin:auto;
text-align:center; text-align:center;
width:100%; width:100%;
height:16px; height:16px;
background: #FFF url('alert/progress.gif') no-repeat center center background: #FFF url('alert/progress.gif') no-repeat center center
} }
.alphacube_wired_frame { .alphacube_wired_frame {
background: #FFF; background: #FFF;
filter:alpha(opacity=60); filter:alpha(opacity=60);
-moz-opacity: 0.6; -moz-opacity: 0.6;
opacity: 0.6; opacity: 0.6;
} }

View File

@ -1,51 +1,51 @@
<public:component> <public:component>
<public:attach event="onpropertychange" onevent="propertyChanged()" /> <public:attach event="onpropertychange" onevent="propertyChanged()" />
<script> <script>
var supported = /MSIE (5\.5)|[6789]/.test(navigator.userAgent) && navigator.platform == "Win32"; var supported = /MSIE (5\.5)|[6789]/.test(navigator.userAgent) && navigator.platform == "Win32";
var realSrc; var realSrc;
var blankSrc = "blank.gif"; var blankSrc = "blank.gif";
if (supported) fixImage(); if (supported) fixImage();
function propertyChanged() { function propertyChanged() {
if (!supported) return; if (!supported) return;
var pName = event.propertyName; var pName = event.propertyName;
if (pName != "src") return; if (pName != "src") return;
// if not set to blank // if not set to blank
if ( ! new RegExp(blankSrc).test(src)) if ( ! new RegExp(blankSrc).test(src))
fixImage(); fixImage();
}; };
function fixImage() { function fixImage() {
// get src // get src
var src = element.src; var src = element.src;
// check for real change // check for real change
if (src == realSrc) { if (src == realSrc) {
element.src = blankSrc; element.src = blankSrc;
return; return;
} }
if ( ! new RegExp(blankSrc).test(src)) { if ( ! new RegExp(blankSrc).test(src)) {
// backup old src // backup old src
realSrc = src; realSrc = src;
} }
// test for png // test for png
if ( /\.png$/.test( realSrc.toLowerCase() ) ) { if ( /\.png$/.test( realSrc.toLowerCase() ) ) {
// set blank image // set blank image
element.src = blankSrc; element.src = blankSrc;
// set filter // set filter
element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" +
src + "',sizingMethod='scale')"; src + "',sizingMethod='scale')";
} }
else { else {
// remove filter // remove filter
element.runtimeStyle.filter = ""; element.runtimeStyle.filter = "";
} }
} }
</script> </script>
</public:component> </public:component>

View File

@ -1,121 +1,121 @@
.overlay_darkX { .overlay_darkX {
background-color: #85BBEF; background-color: #85BBEF;
filter:alpha(opacity=60); filter:alpha(opacity=60);
-moz-opacity: 0.6; -moz-opacity: 0.6;
opacity: 0.6; opacity: 0.6;
} }
.darkX_nw { .darkX_nw {
background: transparent url(darkX/titlebar-left-focused.png) no-repeat 0 0; background: transparent url(darkX/titlebar-left-focused.png) no-repeat 0 0;
width:6px; width:6px;
height:21px; height:21px;
} }
.darkX_n { .darkX_n {
background: transparent url(darkX/titlebar-mid-focused.png) repeat-x 0 0; background: transparent url(darkX/titlebar-mid-focused.png) repeat-x 0 0;
height:21px; height:21px;
} }
.darkX_ne { .darkX_ne {
background: transparent url(darkX/titlebar-right-focused.png) no-repeat 0 0; background: transparent url(darkX/titlebar-right-focused.png) no-repeat 0 0;
width:6px; width:6px;
height:21px; height:21px;
} }
.darkX_w { .darkX_w {
background: transparent url(darkX/frame-left-focused.png) repeat-y top left; background: transparent url(darkX/frame-left-focused.png) repeat-y top left;
width:3px; width:3px;
} }
.darkX_e { .darkX_e {
background: transparent url(darkX/frame-right-focused.png) repeat-y top right; background: transparent url(darkX/frame-right-focused.png) repeat-y top right;
width:3px; width:3px;
} }
.darkX_sw { .darkX_sw {
background: transparent url(darkX/frame-bottom-left-focused.png) no-repeat 0 0; background: transparent url(darkX/frame-bottom-left-focused.png) no-repeat 0 0;
width:5px; width:5px;
height:3px; height:3px;
} }
.darkX_s { .darkX_s {
background: transparent url(darkX/frame-bottom-mid-focused.png) repeat-x 0 0; background: transparent url(darkX/frame-bottom-mid-focused.png) repeat-x 0 0;
height:3px; height:3px;
} }
.darkX_se, .darkX_sizer { .darkX_se, .darkX_sizer {
background: transparent url(darkX/frame-bottom-right-focused.png) no-repeat 0 0; background: transparent url(darkX/frame-bottom-right-focused.png) no-repeat 0 0;
width:5px; width:5px;
height:3px; height:3px;
} }
.darkX_sizer { .darkX_sizer {
cursor:se-resize; cursor:se-resize;
} }
.darkX_close { .darkX_close {
width: 21px; width: 21px;
height: 21px; height: 21px;
background: transparent url(darkX/button-close-focused.png) no-repeat 0 0; background: transparent url(darkX/button-close-focused.png) no-repeat 0 0;
position:absolute; position:absolute;
top:0px; top:0px;
right:5px; right:5px;
cursor:pointer; cursor:pointer;
z-index:1000; z-index:1000;
} }
.darkX_minimize { .darkX_minimize {
width: 21px; width: 21px;
height: 21px; height: 21px;
background: transparent url(darkX/button-minimize-focused.png) no-repeat 0 0; background: transparent url(darkX/button-minimize-focused.png) no-repeat 0 0;
position:absolute; position:absolute;
top:0px; top:0px;
right:26px; right:26px;
cursor:pointer; cursor:pointer;
z-index:1000; z-index:1000;
} }
.darkX_maximize { .darkX_maximize {
width: 21px; width: 21px;
height: 21px; height: 21px;
background: transparent url(darkX/button-maximize-focused.png) no-repeat 0 0; background: transparent url(darkX/button-maximize-focused.png) no-repeat 0 0;
position:absolute; position:absolute;
top:0px; top:0px;
right:47px; right:47px;
cursor:pointer; cursor:pointer;
z-index:1000; z-index:1000;
} }
.darkX_title { .darkX_title {
float:left; float:left;
height:14px; height:14px;
font-size:12px; font-size:12px;
text-align:center; text-align:center;
margin-top:2px; margin-top:2px;
width:100%; width:100%;
color:#FFF; color:#FFF;
} }
.darkX_content { .darkX_content {
overflow:auto; overflow:auto;
color: #E6DF2A; color: #E6DF2A;
font-family: Tahoma, Arial, sans-serif; font-family: Tahoma, Arial, sans-serif;
font-size: 14px; font-size: 14px;
background:#5E5148; background:#5E5148;
} }
/* FOR IE */ /* FOR IE */
* html .darkX_minimize { * html .darkX_minimize {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/darkX/button-minimize-focused.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/darkX/button-minimize-focused.png", sizingMethod="crop");
} }
* html .darkX_maximize { * html .darkX_maximize {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/darkX/button-maximize-focused.png", sizingMethod="scale"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/darkX/button-maximize-focused.png", sizingMethod="scale");
} }
* html .darkX_close { * html .darkX_close {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/darkX/button-close-focused.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/darkX/button-close-focused.png", sizingMethod="crop");
} }

View File

@ -1,25 +1,25 @@
div.inspector div.inspectable { div.inspector div.inspectable {
padding: 0.25em 0 0.25em 1em; padding: 0.25em 0 0.25em 1em;
background-color: Gray; background-color: Gray;
color: white; color: white;
border: outset 2px white; border: outset 2px white;
cursor: pointer; cursor: pointer;
} }
div.inspector div.child { div.inspector div.child {
margin: 0 0 0 1em; margin: 0 0 0 1em;
} }
#debug_window_content { /* DIV container for debug sizing*/ #debug_window_content { /* DIV container for debug sizing*/
width:250px; width:250px;
height:100px; height:100px;
background-color:#000; background-color:#000;
} }
#debug { /* DIV container for debug contents*/ #debug { /* DIV container for debug contents*/
padding:3px; padding:3px;
color:#0f0; color:#0f0;
font-family:monaco, Tahoma, Verdana, Arial, Helvetica, sans-serif; font-family:monaco, Tahoma, Verdana, Arial, Helvetica, sans-serif;
font-size:10px; font-size:10px;
} }

View File

@ -1,155 +1,155 @@
.overlay_dialog { .overlay_dialog {
background-color: #666666; background-color: #666666;
filter:alpha(opacity=60); filter:alpha(opacity=60);
-moz-opacity: 0.6; -moz-opacity: 0.6;
opacity: 0.6; opacity: 0.6;
} }
.overlay___invisible__ { .overlay___invisible__ {
background-color: #666666; background-color: #666666;
filter:alpha(opacity=0); filter:alpha(opacity=0);
-moz-opacity: 0; -moz-opacity: 0;
opacity: 0; opacity: 0;
} }
.dialog_nw { .dialog_nw {
width: 9px; width: 9px;
height: 23px; height: 23px;
background: transparent url(default/top_left.gif) no-repeat 0 0; background: transparent url(default/top_left.gif) no-repeat 0 0;
} }
.dialog_n { .dialog_n {
background: transparent url(default/top_mid.gif) repeat-x 0 0; background: transparent url(default/top_mid.gif) repeat-x 0 0;
height: 23px; height: 23px;
} }
.dialog_ne { .dialog_ne {
width: 9px; width: 9px;
height: 23px; height: 23px;
background: transparent url(default/top_right.gif) no-repeat 0 0; background: transparent url(default/top_right.gif) no-repeat 0 0;
} }
.dialog_e { .dialog_e {
width: 2px; width: 2px;
background: transparent url(default/center_right.gif) repeat-y 0 0; background: transparent url(default/center_right.gif) repeat-y 0 0;
} }
.dialog_w { .dialog_w {
width: 2px; width: 2px;
background: transparent url(default/center_left.gif) repeat-y 0 0; background: transparent url(default/center_left.gif) repeat-y 0 0;
} }
.dialog_sw { .dialog_sw {
width: 9px; width: 9px;
height: 19px; height: 19px;
background: transparent url(default/bottom_left.gif) no-repeat 0 0; background: transparent url(default/bottom_left.gif) no-repeat 0 0;
} }
.dialog_s { .dialog_s {
background: transparent url(default/bottom_mid.gif) repeat-x 0 0; background: transparent url(default/bottom_mid.gif) repeat-x 0 0;
height: 19px; height: 19px;
} }
.dialog_se { .dialog_se {
width: 9px; width: 9px;
height: 19px; height: 19px;
background: transparent url(default/bottom_right.gif) no-repeat 0 0; background: transparent url(default/bottom_right.gif) no-repeat 0 0;
} }
.dialog_sizer { .dialog_sizer {
width: 9px; width: 9px;
height: 19px; height: 19px;
background: transparent url(default/sizer.gif) no-repeat 0 0; background: transparent url(default/sizer.gif) no-repeat 0 0;
cursor:se-resize; cursor:se-resize;
} }
.dialog_close { .dialog_close {
width: 14px; width: 14px;
height: 14px; height: 14px;
background: transparent url(default/close.gif) no-repeat 0 0; background: transparent url(default/close.gif) no-repeat 0 0;
position:absolute; position:absolute;
top:5px; top:5px;
left:8px; left:8px;
cursor:pointer; cursor:pointer;
z-index:2000; z-index:2000;
} }
.dialog_minimize { .dialog_minimize {
width: 14px; width: 14px;
height: 15px; height: 15px;
background: transparent url(default/minimize.gif) no-repeat 0 0; background: transparent url(default/minimize.gif) no-repeat 0 0;
position:absolute; position:absolute;
top:5px; top:5px;
left:28px; left:28px;
cursor:pointer; cursor:pointer;
z-index:2000; z-index:2000;
} }
.dialog_maximize { .dialog_maximize {
width: 14px; width: 14px;
height: 15px; height: 15px;
background: transparent url(default/maximize.gif) no-repeat 0 0; background: transparent url(default/maximize.gif) no-repeat 0 0;
position:absolute; position:absolute;
top:5px; top:5px;
left:49px; left:49px;
cursor:pointer; cursor:pointer;
z-index:2000; z-index:2000;
} }
.dialog_title { .dialog_title {
float:left; float:left;
height:14px; height:14px;
font-family: Tahoma, Arial, sans-serif; font-family: Tahoma, Arial, sans-serif;
font-size:12px; font-size:12px;
text-align:center; text-align:center;
width:100%; width:100%;
color:#000; color:#000;
} }
.dialog_content { .dialog_content {
overflow:auto; overflow:auto;
color: #DDD; color: #DDD;
font-family: Tahoma, Arial, sans-serif; font-family: Tahoma, Arial, sans-serif;
font-size: 10px; font-size: 10px;
background-color:#123; background-color:#123;
} }
.top_draggable, .bottom_draggable { .top_draggable, .bottom_draggable {
cursor:move; cursor:move;
} }
.status_bar { .status_bar {
font-size:12px; font-size:12px;
} }
.status_bar input{ .status_bar input{
font-size:12px; font-size:12px;
} }
.wired_frame { .wired_frame {
display: block; display: block;
position: absolute; position: absolute;
border: 1px #000 dashed; border: 1px #000 dashed;
} }
/* DO NOT CHANGE THESE VALUES*/ /* DO NOT CHANGE THESE VALUES*/
.dialog { .dialog {
display: block; display: block;
position: absolute; position: absolute;
} }
.dialog table.table_window { .dialog table.table_window {
border-collapse: collapse; border-collapse: collapse;
border-spacing: 0; border-spacing: 0;
width: 100%; width: 100%;
margin: 0px; margin: 0px;
padding:0px; padding:0px;
} }
.dialog table.table_window td , .dialog table.table_window th { .dialog table.table_window td , .dialog table.table_window th {
padding: 0; padding: 0;
} }
.dialog .title_window { .dialog .title_window {
-moz-user-select:none; -moz-user-select:none;
} }

View File

@ -1,3 +1,3 @@
/* PNG fix for all themes that uses PNG images on IE */ /* PNG fix for all themes that uses PNG images on IE */
td, div { behavior: url(../themes/iefix/iepngfix.htc) } td, div { behavior: url(../themes/iefix/iepngfix.htc) }

View File

@ -1,54 +1,54 @@
<public:component> <public:component>
<public:attach event="onpropertychange" onevent="doFix()" /> <public:attach event="onpropertychange" onevent="doFix()" />
<script type="text/javascript"> <script type="text/javascript">
// IE5.5+ PNG Alpha Fix v1.0RC4 // IE5.5+ PNG Alpha Fix v1.0RC4
// (c) 2004-2005 Angus Turnbull http://www.twinhelix.com // (c) 2004-2005 Angus Turnbull http://www.twinhelix.com
// This is licensed under the CC-GNU LGPL, version 2.1 or later. // This is licensed under the CC-GNU LGPL, version 2.1 or later.
// For details, see: http://creativecommons.org/licenses/LGPL/2.1/ // For details, see: http://creativecommons.org/licenses/LGPL/2.1/
// Modified/Simplified on 04/23/2007 by Sebastien Gruhier (http://www.xilinus.com) // Modified/Simplified on 04/23/2007 by Sebastien Gruhier (http://www.xilinus.com)
// To work only on background and to handle repeat bg // To work only on background and to handle repeat bg
// This must be a path to a blank image. That's all the configuration you need. // This must be a path to a blank image. That's all the configuration you need.
if (typeof blankImg == 'undefined') var blankImg = 'blank.gif'; if (typeof blankImg == 'undefined') var blankImg = 'blank.gif';
var f = 'DXImageTransform.Microsoft.AlphaImageLoader'; var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
function filt(s, m) function filt(s, m)
{ {
if (filters[f]) if (filters[f])
{ {
filters[f].enabled = s ? true : false; filters[f].enabled = s ? true : false;
if (s) with (filters[f]) { src = s; sizingMethod = m } if (s) with (filters[f]) { src = s; sizingMethod = m }
} }
else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")'; else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
} }
function doFix() function doFix()
{ {
// Assume IE7 is OK. // Assume IE7 is OK.
if (!/MSIE (5\.5|6\.)/.test(navigator.userAgent) || if (!/MSIE (5\.5|6\.)/.test(navigator.userAgent) ||
(event && !/(background|src)/.test(event.propertyName))) return; (event && !/(background|src)/.test(event.propertyName))) return;
var bgImg = currentStyle.backgroundImage || style.backgroundImage; var bgImg = currentStyle.backgroundImage || style.backgroundImage;
var bgRepeat = currentStyle.backgroundRepeat || style.backgroundRepeat; var bgRepeat = currentStyle.backgroundRepeat || style.backgroundRepeat;
if (bgImg && bgImg != 'none') if (bgImg && bgImg != 'none')
{ {
if (bgImg.match(/^url[("']+(.*\.png)[)"']+$/i)) if (bgImg.match(/^url[("']+(.*\.png)[)"']+$/i))
{ {
var s = RegExp.$1; var s = RegExp.$1;
if (currentStyle.width == 'auto' && currentStyle.height == 'auto') if (currentStyle.width == 'auto' && currentStyle.height == 'auto')
style.width = offsetWidth + 'px'; style.width = offsetWidth + 'px';
style.backgroundImage = 'none'; style.backgroundImage = 'none';
filt(s, bgRepeat == "no-repeat" ? 'crop' : 'scale'); filt(s, bgRepeat == "no-repeat" ? 'crop' : 'scale');
} }
} }
} }
doFix(); doFix();
</script> </script>
</public:component> </public:component>

View File

@ -1,67 +1,67 @@
<public:component> <public:component>
<public:attach event="onpropertychange" onevent="doFix()" /> <public:attach event="onpropertychange" onevent="doFix()" />
<script type="text/javascript"> <script type="text/javascript">
// IE5.5+ PNG Alpha Fix v1.0RC4 // IE5.5+ PNG Alpha Fix v1.0RC4
// (c) 2004-2005 Angus Turnbull http://www.twinhelix.com // (c) 2004-2005 Angus Turnbull http://www.twinhelix.com
// This is licensed under the CC-GNU LGPL, version 2.1 or later. // This is licensed under the CC-GNU LGPL, version 2.1 or later.
// For details, see: http://creativecommons.org/licenses/LGPL/2.1/ // For details, see: http://creativecommons.org/licenses/LGPL/2.1/
// This must be a path to a blank image. That's all the configuration you need. // This must be a path to a blank image. That's all the configuration you need.
if (typeof blankImg == 'undefined') var blankImg = 'blank.gif'; if (typeof blankImg == 'undefined') var blankImg = 'blank.gif';
var f = 'DXImageTransform.Microsoft.AlphaImageLoader'; var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
function filt(s, m) function filt(s, m)
{ {
if (filters[f]) if (filters[f])
{ {
filters[f].enabled = s ? true : false; filters[f].enabled = s ? true : false;
if (s) with (filters[f]) { src = s; sizingMethod = m } if (s) with (filters[f]) { src = s; sizingMethod = m }
} }
else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")'; else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
} }
function doFix() function doFix()
{ {
alert('ok') alert('ok')
// Assume IE7 is OK. // Assume IE7 is OK.
if (!/MSIE (5\.5|6\.)/.test(navigator.userAgent) || if (!/MSIE (5\.5|6\.)/.test(navigator.userAgent) ||
(event && !/(background|src)/.test(event.propertyName))) return; (event && !/(background|src)/.test(event.propertyName))) return;
var bgImg = currentStyle.backgroundImage || style.backgroundImage; var bgImg = currentStyle.backgroundImage || style.backgroundImage;
if (tagName == 'IMG') if (tagName == 'IMG')
{ {
if ((/\.png$/i).test(src)) if ((/\.png$/i).test(src))
{ {
if (currentStyle.width == 'auto' && currentStyle.height == 'auto') if (currentStyle.width == 'auto' && currentStyle.height == 'auto')
style.width = offsetWidth + 'px'; style.width = offsetWidth + 'px';
filt(src, 'scale'); filt(src, 'scale');
src = blankImg; src = blankImg;
} }
else if (src.indexOf(blankImg) < 0) filt(); else if (src.indexOf(blankImg) < 0) filt();
} }
else if (bgImg && bgImg != 'none') else if (bgImg && bgImg != 'none')
{ {
if (bgImg.match(/^url[("']+(.*\.png)[)"']+$/i)) if (bgImg.match(/^url[("']+(.*\.png)[)"']+$/i))
{ {
var s = RegExp.$1; var s = RegExp.$1;
if (currentStyle.width == 'auto' && currentStyle.height == 'auto') if (currentStyle.width == 'auto' && currentStyle.height == 'auto')
style.width = offsetWidth + 'px'; style.width = offsetWidth + 'px';
style.backgroundImage = 'none'; style.backgroundImage = 'none';
filt(s, 'crop'); filt(s, 'crop');
// IE link fix. // IE link fix.
for (var n = 0; n < childNodes.length; n++) for (var n = 0; n < childNodes.length; n++)
if (childNodes[n].style) childNodes[n].style.position = 'relative'; if (childNodes[n].style) childNodes[n].style.position = 'relative';
} }
else filt(); else filt();
} }
} }
doFix(); doFix();

View File

@ -1,333 +1,333 @@
/* Focused windows */ /* Focused windows */
.overlay_mac_os_x { .overlay_mac_os_x {
background-color: #85BBEF; background-color: #85BBEF;
filter:alpha(opacity=60); filter:alpha(opacity=60);
-moz-opacity: 0.6; -moz-opacity: 0.6;
opacity: 0.6; opacity: 0.6;
} }
.mac_os_x_nw { .mac_os_x_nw {
background: transparent url(mac_os_x/TL_Main.png) no-repeat 0 0; background: transparent url(mac_os_x/TL_Main.png) no-repeat 0 0;
width:24px; width:24px;
height:30px; height:30px;
} }
.mac_os_x_n { .mac_os_x_n {
background: transparent url(mac_os_x/T_Main.png) repeat-x 0 0; background: transparent url(mac_os_x/T_Main.png) repeat-x 0 0;
height:30px; height:30px;
} }
.mac_os_x_ne { .mac_os_x_ne {
background: transparent url(mac_os_x/TR_Main.png) no-repeat 0 0; background: transparent url(mac_os_x/TR_Main.png) no-repeat 0 0;
width:31px; width:31px;
height:30px; height:30px;
} }
.mac_os_x_w { .mac_os_x_w {
background: transparent url(mac_os_x/L_Main.png) repeat-y top left; background: transparent url(mac_os_x/L_Main.png) repeat-y top left;
width:16px; width:16px;
} }
.mac_os_x_e { .mac_os_x_e {
background: transparent url(mac_os_x/R_Main.png) repeat-y top right; background: transparent url(mac_os_x/R_Main.png) repeat-y top right;
width:16px; width:16px;
} }
.mac_os_x_sw { .mac_os_x_sw {
background: transparent url(mac_os_x/BL_Main.png) no-repeat 0 0; background: transparent url(mac_os_x/BL_Main.png) no-repeat 0 0;
width:31px; width:31px;
height:40px; height:40px;
} }
.mac_os_x_s { .mac_os_x_s {
background: transparent url(mac_os_x/B_Main.png) repeat-x 0 0; background: transparent url(mac_os_x/B_Main.png) repeat-x 0 0;
height:40px; height:40px;
} }
.mac_os_x_se, .mac_os_x_sizer { .mac_os_x_se, .mac_os_x_sizer {
background: transparent url(mac_os_x/BR_Main.png) no-repeat 0 0; background: transparent url(mac_os_x/BR_Main.png) no-repeat 0 0;
width:31px; width:31px;
height:40px; height:40px;
} }
.mac_os_x_sizer { .mac_os_x_sizer {
cursor:se-resize; cursor:se-resize;
} }
.mac_os_x_close { .mac_os_x_close {
width: 19px; width: 19px;
height: 19px; height: 19px;
background: transparent url(mac_os_x/close.gif) no-repeat 0 0; background: transparent url(mac_os_x/close.gif) no-repeat 0 0;
position:absolute; position:absolute;
top:12px; top:12px;
left:25px; left:25px;
cursor:pointer; cursor:pointer;
z-index:1000; z-index:1000;
} }
.mac_os_x_minimize { .mac_os_x_minimize {
width: 19px; width: 19px;
height: 19px; height: 19px;
background: transparent url(mac_os_x/minimize.gif) no-repeat 0 0; background: transparent url(mac_os_x/minimize.gif) no-repeat 0 0;
position:absolute; position:absolute;
top:12px; top:12px;
left:45px; left:45px;
cursor:pointer; cursor:pointer;
z-index:1000; z-index:1000;
} }
.mac_os_x_maximize { .mac_os_x_maximize {
width: 19px; width: 19px;
height: 19px; height: 19px;
background: transparent url(mac_os_x/maximize.gif) no-repeat 0 0; background: transparent url(mac_os_x/maximize.gif) no-repeat 0 0;
position:absolute; position:absolute;
top:12px; top:12px;
left:65px; left:65px;
cursor:pointer; cursor:pointer;
z-index:1000; z-index:1000;
} }
.mac_os_x_title { .mac_os_x_title {
float:left; float:left;
height:14px; height:14px;
font-family: Tahoma, Arial, sans-serif; font-family: Tahoma, Arial, sans-serif;
font-size:12px; font-size:12px;
text-align:center; text-align:center;
margin-top:8px; margin-top:8px;
width:100%; width:100%;
color:#000; color:#000;
} }
.mac_os_x_content { .mac_os_x_content {
overflow:auto; overflow:auto;
color: #222; color: #222;
font-family: Tahoma, Arial, sans-serif; font-family: Tahoma, Arial, sans-serif;
font-size: 10px; font-size: 10px;
background:#FFF; background:#FFF;
} }
.mac_os_x_s .status_bar { .mac_os_x_s .status_bar {
padding-bottom:24px; padding-bottom:24px;
} }
/* FOR IE */ /* FOR IE */
* html .mac_os_x_nw { * html .mac_os_x_nw {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/TL_Main.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/TL_Main.png", sizingMethod="crop");
} }
* html .mac_os_x_n { * html .mac_os_x_n {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/T_Main.png", sizingMethod="scale"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/T_Main.png", sizingMethod="scale");
} }
* html .mac_os_x_ne { * html .mac_os_x_ne {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/TR_Main.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/TR_Main.png", sizingMethod="crop");
} }
* html .mac_os_x_w { * html .mac_os_x_w {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/L_Main.png", sizingMethod="scale"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/L_Main.png", sizingMethod="scale");
} }
* html .mac_os_x_e { * html .mac_os_x_e {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/R_Main.png", sizingMethod="scale"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/R_Main.png", sizingMethod="scale");
} }
* html .mac_os_x_sw { * html .mac_os_x_sw {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/BL_Main.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/BL_Main.png", sizingMethod="crop");
} }
* html .mac_os_x_s { * html .mac_os_x_s {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/B_Main.png", sizingMethod="scale"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/B_Main.png", sizingMethod="scale");
} }
* html .mac_os_x_se { * html .mac_os_x_se {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/BR_Main.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/BR_Main.png", sizingMethod="crop");
} }
* html .mac_os_x_sizer { * html .mac_os_x_sizer {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/BR_Main.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/BR_Main.png", sizingMethod="crop");
} }
/* Focused windows */ /* Focused windows */
.overlay_blur_os_x { .overlay_blur_os_x {
background-color: #85BBEF; background-color: #85BBEF;
filter:alpha(opacity=60); filter:alpha(opacity=60);
-moz-opacity: 0.6; -moz-opacity: 0.6;
opacity: 0.6; opacity: 0.6;
} }
.blur_os_x_nw { .blur_os_x_nw {
background: transparent url(mac_os_x/TL.png) no-repeat 0 0; background: transparent url(mac_os_x/TL.png) no-repeat 0 0;
width:24px; width:24px;
height:30px; height:30px;
} }
.blur_os_x_n { .blur_os_x_n {
background: transparent url(mac_os_x/T.png) repeat-x 0 0; background: transparent url(mac_os_x/T.png) repeat-x 0 0;
height:30px; height:30px;
} }
.blur_os_x_ne { .blur_os_x_ne {
background: transparent url(mac_os_x/TR.png) no-repeat 0 0; background: transparent url(mac_os_x/TR.png) no-repeat 0 0;
width:31px; width:31px;
height:30px; height:30px;
} }
.blur_os_x_w { .blur_os_x_w {
background: transparent url(mac_os_x/L.png) repeat-y top left; background: transparent url(mac_os_x/L.png) repeat-y top left;
width:16px; width:16px;
} }
.blur_os_x_e { .blur_os_x_e {
background: transparent url(mac_os_x/R.png) repeat-y top right; background: transparent url(mac_os_x/R.png) repeat-y top right;
width:16px; width:16px;
} }
.blur_os_x_sw { .blur_os_x_sw {
background: transparent url(mac_os_x/BL.png) no-repeat 0 0; background: transparent url(mac_os_x/BL.png) no-repeat 0 0;
width:31px; width:31px;
height:40px; height:40px;
} }
.blur_os_x_s { .blur_os_x_s {
background: transparent url(mac_os_x/B.png) repeat-x 0 0; background: transparent url(mac_os_x/B.png) repeat-x 0 0;
height:40px; height:40px;
} }
.blur_os_x_se, .blur_os_x_sizer { .blur_os_x_se, .blur_os_x_sizer {
background: transparent url(mac_os_x/BR.png) no-repeat 0 0; background: transparent url(mac_os_x/BR.png) no-repeat 0 0;
width:31px; width:31px;
height:40px; height:40px;
} }
.blur_os_x_sizer { .blur_os_x_sizer {
cursor:se-resize; cursor:se-resize;
} }
.blur_os_x_close { .blur_os_x_close {
width: 19px; width: 19px;
height: 19px; height: 19px;
background: transparent url(mac_os_x/close.gif) no-repeat 0 0; background: transparent url(mac_os_x/close.gif) no-repeat 0 0;
position:absolute; position:absolute;
top:12px; top:12px;
left:25px; left:25px;
cursor:pointer; cursor:pointer;
z-index:1000; z-index:1000;
} }
.blur_os_x_minimize { .blur_os_x_minimize {
width: 19px; width: 19px;
height: 19px; height: 19px;
background: transparent url(mac_os_x/minimize.gif) no-repeat 0 0; background: transparent url(mac_os_x/minimize.gif) no-repeat 0 0;
position:absolute; position:absolute;
top:12px; top:12px;
left:45px; left:45px;
cursor:pointer; cursor:pointer;
z-index:1000; z-index:1000;
} }
.blur_os_x_maximize { .blur_os_x_maximize {
width: 19px; width: 19px;
height: 19px; height: 19px;
background: transparent url(mac_os_x/maximize.gif) no-repeat 0 0; background: transparent url(mac_os_x/maximize.gif) no-repeat 0 0;
position:absolute; position:absolute;
top:12px; top:12px;
left:65px; left:65px;
cursor:pointer; cursor:pointer;
z-index:1000; z-index:1000;
} }
.blur_os_x_title { .blur_os_x_title {
float:left; float:left;
height:14px; height:14px;
font-family: Tahoma, Arial, sans-serif; font-family: Tahoma, Arial, sans-serif;
font-size:12px; font-size:12px;
text-align:center; text-align:center;
margin-top:8px; margin-top:8px;
width:100%; width:100%;
color:#000; color:#000;
} }
.blur_os_x_content { .blur_os_x_content {
overflow:auto; overflow:auto;
color: #222; color: #222;
font-family: Tahoma, Arial, sans-serif; font-family: Tahoma, Arial, sans-serif;
font-size: 10px; font-size: 10px;
background:#FFF; background:#FFF;
} }
.blur_os_x_s .status_bar { .blur_os_x_s .status_bar {
padding-bottom:24px; padding-bottom:24px;
} }
/* FOR IE */ /* FOR IE */
* html .blur_os_x_nw { * html .blur_os_x_nw {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/TL.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/TL.png", sizingMethod="crop");
} }
* html .blur_os_x_n { * html .blur_os_x_n {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/T.png", sizingMethod="scale"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/T.png", sizingMethod="scale");
} }
* html .blur_os_x_ne { * html .blur_os_x_ne {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/TR.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/TR.png", sizingMethod="crop");
} }
* html .blur_os_x_w { * html .blur_os_x_w {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/L.png", sizingMethod="scale"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/L.png", sizingMethod="scale");
} }
* html .blur_os_x_e { * html .blur_os_x_e {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/R.png", sizingMethod="scale"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/R.png", sizingMethod="scale");
} }
* html .blur_os_x_sw { * html .blur_os_x_sw {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/BL.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/BL.png", sizingMethod="crop");
} }
* html .blur_os_x_s { * html .blur_os_x_s {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/B.png", sizingMethod="scale"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/B.png", sizingMethod="scale");
} }
* html .blur_os_x_se { * html .blur_os_x_se {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/BR.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/BR.png", sizingMethod="crop");
} }
* html .blur_os_x_sizer { * html .blur_os_x_sizer {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/BR.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x/BR.png", sizingMethod="crop");
} }

View File

@ -1,160 +1,160 @@
.overlay_mac_os_x_dialog { .overlay_mac_os_x_dialog {
background-color: #FF7224; background-color: #FF7224;
filter:alpha(opacity=60); filter:alpha(opacity=60);
-moz-opacity: 0.6; -moz-opacity: 0.6;
opacity: 0.6; opacity: 0.6;
} }
.mac_os_x_dialog_nw { .mac_os_x_dialog_nw {
background: transparent url(mac_os_x_dialog/L.png) repeat-y top left; background: transparent url(mac_os_x_dialog/L.png) repeat-y top left;
width:16px; width:16px;
height:16px; height:16px;
} }
.mac_os_x_dialog_n { .mac_os_x_dialog_n {
background: transparent url(mac_os_x_dialog/bg.gif) repeat 0 0; background: transparent url(mac_os_x_dialog/bg.gif) repeat 0 0;
height:18px; height:18px;
} }
.mac_os_x_dialog_ne { .mac_os_x_dialog_ne {
background: transparent url(mac_os_x_dialog/R.png) repeat-y top left; background: transparent url(mac_os_x_dialog/R.png) repeat-y top left;
width:16px; width:16px;
height:16px; height:16px;
} }
.mac_os_x_dialog_w { .mac_os_x_dialog_w {
background: transparent url(mac_os_x_dialog/L.png) repeat-y top left; background: transparent url(mac_os_x_dialog/L.png) repeat-y top left;
width:16px; width:16px;
} }
.mac_os_x_dialog_e { .mac_os_x_dialog_e {
background: transparent url(mac_os_x_dialog/R.png) repeat-y top right; background: transparent url(mac_os_x_dialog/R.png) repeat-y top right;
width:16px; width:16px;
} }
.mac_os_x_dialog_sw { .mac_os_x_dialog_sw {
background: transparent url(mac_os_x_dialog/BL.png) no-repeat 0 0; background: transparent url(mac_os_x_dialog/BL.png) no-repeat 0 0;
width:31px; width:31px;
height:40px; height:40px;
} }
.mac_os_x_dialog_s { .mac_os_x_dialog_s {
background: transparent url(mac_os_x_dialog/B.png) repeat-x 0 0; background: transparent url(mac_os_x_dialog/B.png) repeat-x 0 0;
height:40px; height:40px;
} }
.mac_os_x_dialog_se, .mac_os_x_dialog_sizer { .mac_os_x_dialog_se, .mac_os_x_dialog_sizer {
background: transparent url(mac_os_x_dialog/BR.png) no-repeat 0 0; background: transparent url(mac_os_x_dialog/BR.png) no-repeat 0 0;
width:31px; width:31px;
height:40px; height:40px;
} }
.mac_os_x_dialog_sizer { .mac_os_x_dialog_sizer {
cursor:se-resize; cursor:se-resize;
} }
.mac_os_x_dialog_close { .mac_os_x_dialog_close {
width: 19px; width: 19px;
height: 19px; height: 19px;
background: transparent url(mac_os_x_dialog/close.gif) no-repeat 0 0; background: transparent url(mac_os_x_dialog/close.gif) no-repeat 0 0;
position:absolute; position:absolute;
top:12px; top:12px;
left:25px; left:25px;
cursor:pointer; cursor:pointer;
z-index:1000; z-index:1000;
} }
.mac_os_x_dialog_minimize { .mac_os_x_dialog_minimize {
width: 19px; width: 19px;
height: 19px; height: 19px;
background: transparent url(mac_os_x_dialog/minimize.gif) no-repeat 0 0; background: transparent url(mac_os_x_dialog/minimize.gif) no-repeat 0 0;
position:absolute; position:absolute;
top:12px; top:12px;
left:45px; left:45px;
cursor:pointer; cursor:pointer;
z-index:1000; z-index:1000;
} }
.mac_os_x_dialog_maximize { .mac_os_x_dialog_maximize {
width: 19px; width: 19px;
height: 19px; height: 19px;
background: transparent url(mac_os_x_dialog/maximize.gif) no-repeat 0 0; background: transparent url(mac_os_x_dialog/maximize.gif) no-repeat 0 0;
position:absolute; position:absolute;
top:12px; top:12px;
left:65px; left:65px;
cursor:pointer; cursor:pointer;
z-index:1000; z-index:1000;
} }
.mac_os_x_dialog_title { .mac_os_x_dialog_title {
float:left; float:left;
height:14px; height:14px;
font-family: Tahoma, Arial, sans-serif; font-family: Tahoma, Arial, sans-serif;
font-size:12px; font-size:12px;
text-align:center; text-align:center;
margin-top:6px; margin-top:6px;
width:100%; width:100%;
color:#000; color:#000;
} }
.mac_os_x_dialog_content { .mac_os_x_dialog_content {
overflow:auto; overflow:auto;
color: #222; color: #222;
font-family: Tahoma, Arial, sans-serif; font-family: Tahoma, Arial, sans-serif;
font-size: 10px; font-size: 10px;
background: transparent url(mac_os_x_dialog/bg.gif) repeat 0 0; background: transparent url(mac_os_x_dialog/bg.gif) repeat 0 0;
} }
.mac_os_x_dialog_buttons { .mac_os_x_dialog_buttons {
text-align: center; text-align: center;
} }
/* FOR IE */ /* FOR IE */
* html .mac_os_x_dialog_nw { * html .mac_os_x_dialog_nw {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x_dialog/L.png", sizingMethod="scale"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x_dialog/L.png", sizingMethod="scale");
} }
* html .mac_os_x_dialog_ne { * html .mac_os_x_dialog_ne {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x_dialog/R.png", sizingMethod="scale"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x_dialog/R.png", sizingMethod="scale");
} }
* html .mac_os_x_dialog_w { * html .mac_os_x_dialog_w {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x_dialog/L.png", sizingMethod="scale"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x_dialog/L.png", sizingMethod="scale");
} }
* html .mac_os_x_dialog_e { * html .mac_os_x_dialog_e {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x_dialog/R.png", sizingMethod="scale"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x_dialog/R.png", sizingMethod="scale");
} }
* html .mac_os_x_dialog_sw { * html .mac_os_x_dialog_sw {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x_dialog/BL.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x_dialog/BL.png", sizingMethod="crop");
} }
* html .mac_os_x_dialog_s { * html .mac_os_x_dialog_s {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x_dialog/B.png", sizingMethod="scale"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x_dialog/B.png", sizingMethod="scale");
} }
* html .mac_os_x_dialog_se { * html .mac_os_x_dialog_se {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x_dialog/BR.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x_dialog/BR.png", sizingMethod="crop");
} }
* html .mac_os_x_dialog_sizer { * html .mac_os_x_dialog_sizer {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x_dialog/BR.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/mac_os_x_dialog/BR.png", sizingMethod="crop");
} }

View File

@ -1,164 +1,164 @@
.overlay_nuncio img { border: none; } .overlay_nuncio img { border: none; }
.overlay_nuncio { .overlay_nuncio {
background-color: #666666; background-color: #666666;
} }
.nuncio_nw { .nuncio_nw {
width: 12px; width: 12px;
height: 28px; height: 28px;
background: url(nuncio/top_left.png) no-repeat; background: url(nuncio/top_left.png) no-repeat;
} }
.nuncio_n { .nuncio_n {
background: url(nuncio/top_mid.png) repeat-x; background: url(nuncio/top_mid.png) repeat-x;
height: 28px; height: 28px;
} }
.nuncio_ne { .nuncio_ne {
width: 21px; width: 21px;
height: 28px; height: 28px;
background: url(nuncio/top_right.png) no-repeat; background: url(nuncio/top_right.png) no-repeat;
} }
.nuncio_e { .nuncio_e {
width: 21px; width: 21px;
background: url(nuncio/center_right.png) repeat-y top right; background: url(nuncio/center_right.png) repeat-y top right;
} }
.nuncio_w { .nuncio_w {
width: 12px; width: 12px;
background: url(nuncio/center_left.png) repeat-y top left; background: url(nuncio/center_left.png) repeat-y top left;
} }
.nuncio_sw { .nuncio_sw {
width: 12px; width: 12px;
height: 18px; height: 18px;
background: url(nuncio/bottom_left.png) no-repeat; background: url(nuncio/bottom_left.png) no-repeat;
} }
.nuncio_s { .nuncio_s {
background: url(nuncio/bottom_mid.png) repeat-x 0 0; background: url(nuncio/bottom_mid.png) repeat-x 0 0;
height: 18px; height: 18px;
} }
.nuncio_se, .nuncio_sizer { .nuncio_se, .nuncio_sizer {
width: 21px; width: 21px;
height: 18px; height: 18px;
background: url(nuncio/bottom_right.png) no-repeat; background: url(nuncio/bottom_right.png) no-repeat;
} }
.nuncio_close { .nuncio_close {
width: 14px; width: 14px;
height: 14px; height: 14px;
background: url(nuncio/close.png) no-repeat; background: url(nuncio/close.png) no-repeat;
position:absolute; position:absolute;
top:10px; top:10px;
right:22px; right:22px;
cursor:pointer; cursor:pointer;
z-index:2000; z-index:2000;
} }
.nuncio_minimize { .nuncio_minimize {
width: 14px; width: 14px;
height: 15px; height: 15px;
background: url(nuncio/minimize.png) no-repeat; background: url(nuncio/minimize.png) no-repeat;
position:absolute; position:absolute;
top:10px; top:10px;
right:40px; right:40px;
cursor:pointer; cursor:pointer;
z-index:2000; z-index:2000;
} }
.nuncio_title { .nuncio_title {
float:left; float:left;
font-size:11px; font-size:11px;
font-weight: bold; font-weight: bold;
font-style: italic; font-style: italic;
color: #fff; color: #fff;
width: 100% width: 100%
} }
.nuncio_content { .nuncio_content {
background: url(nuncio/overlay.png) repeat; background: url(nuncio/overlay.png) repeat;
overflow:auto; overflow:auto;
color: #ddd; color: #ddd;
font-family: Tahoma, Arial, "sans-serif"; font-family: Tahoma, Arial, "sans-serif";
font-size: 10px; font-size: 10px;
} }
.nuncio_sizer { .nuncio_sizer {
cursor:se-resize; cursor:se-resize;
} }
.top_draggable, .bottom_draggable { .top_draggable, .bottom_draggable {
cursor:move cursor:move
} }
/* FOR IE */ /* FOR IE */
* html .nuncio_nw { * html .nuncio_nw {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/top_left.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/top_left.png", sizingMethod="crop");
} }
* html .nuncio_n { * html .nuncio_n {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/top_mid.png", sizingMethod="scale"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/top_mid.png", sizingMethod="scale");
} }
* html .nuncio_ne { * html .nuncio_ne {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/top_right.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/top_right.png", sizingMethod="crop");
} }
* html .nuncio_w { * html .nuncio_w {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/center_left.png", sizingMethod="scale"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/center_left.png", sizingMethod="scale");
} }
* html .nuncio_e { * html .nuncio_e {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/center_right.png", sizingMethod="scale"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/center_right.png", sizingMethod="scale");
} }
* html .nuncio_sw { * html .nuncio_sw {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/bottom_left.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/bottom_left.png", sizingMethod="crop");
} }
* html .nuncio_s { * html .nuncio_s {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/bottom_mid.png", sizingMethod="scale"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/bottom_mid.png", sizingMethod="scale");
} }
* html .nuncio_se { * html .nuncio_se {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/bottom_right.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/bottom_right.png", sizingMethod="crop");
} }
* html .nuncio_sizer { * html .nuncio_sizer {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/bottom_right.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/bottom_right.png", sizingMethod="crop");
} }
* html .nuncio_close { * html .nuncio_close {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/close.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/close.png", sizingMethod="crop");
} }
* html .nuncio_minimize { * html .nuncio_minimize {
background-color: transparent; background-color: transparent;
background-image: none; background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/minimize.png", sizingMethod="crop"); filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/nuncio/minimize.png", sizingMethod="crop");
} }

View File

@ -1,108 +1,108 @@
.overlay_spread { .overlay_spread {
background-color: #85BBEF; background-color: #85BBEF;
filter:alpha(opacity=60); filter:alpha(opacity=60);
-moz-opacity: 0.6; -moz-opacity: 0.6;
opacity: 0.6; opacity: 0.6;
} }
.spread_nw { .spread_nw {
background: transparent url(spread/left-top.gif) no-repeat 0 0; background: transparent url(spread/left-top.gif) no-repeat 0 0;
width:10px; width:10px;
height:25px; height:25px;
} }
.spread_n { .spread_n {
background: transparent url(spread/top-middle.gif) repeat-x 0 0; background: transparent url(spread/top-middle.gif) repeat-x 0 0;
height:25px; height:25px;
} }
.spread_ne { .spread_ne {
background: transparent url(spread/right-top.gif) no-repeat 0 0; background: transparent url(spread/right-top.gif) no-repeat 0 0;
width:10px; width:10px;
height:25px; height:25px;
} }
.spread_w { .spread_w {
background: transparent url(spread/frame-left.gif) repeat-y top left; background: transparent url(spread/frame-left.gif) repeat-y top left;
width:7px; width:7px;
} }
.spread_e { .spread_e {
background: transparent url(spread/frame-right.gif) repeat-y top right; background: transparent url(spread/frame-right.gif) repeat-y top right;
width:7px; width:7px;
} }
.spread_sw { .spread_sw {
background: transparent url(spread/bottom-left-c.gif) no-repeat 0 0; background: transparent url(spread/bottom-left-c.gif) no-repeat 0 0;
width:7px; width:7px;
height:7px; height:7px;
} }
.spread_s { .spread_s {
background: transparent url(spread/bottom-middle.gif) repeat-x 0 0; background: transparent url(spread/bottom-middle.gif) repeat-x 0 0;
height:7px; height:7px;
} }
.spread_se, .spread_sizer { .spread_se, .spread_sizer {
background: transparent url(spread/bottom-right-c.gif) no-repeat 0 0; background: transparent url(spread/bottom-right-c.gif) no-repeat 0 0;
width:7px; width:7px;
height:7px; height:7px;
} }
.spread_sizer { .spread_sizer {
cursor:se-resize; cursor:se-resize;
} }
.spread_close { .spread_close {
width: 23px; width: 23px;
height: 23px; height: 23px;
background: transparent url(spread/button-close-focus.gif) no-repeat 0 0; background: transparent url(spread/button-close-focus.gif) no-repeat 0 0;
position:absolute; position:absolute;
top:0px; top:0px;
right:11px; right:11px;
cursor:pointer; cursor:pointer;
z-index:1000; z-index:1000;
} }
.spread_minimize { .spread_minimize {
width: 23px; width: 23px;
height: 23px; height: 23px;
background: transparent url(spread/button-min-focus.gif) no-repeat 0 0; background: transparent url(spread/button-min-focus.gif) no-repeat 0 0;
position:absolute; position:absolute;
top:0px; top:0px;
right:55px; right:55px;
cursor:pointer; cursor:pointer;
z-index:1000; z-index:1000;
} }
.spread_maximize { .spread_maximize {
width: 23px; width: 23px;
height: 23px; height: 23px;
background: transparent url(spread/button-max-focus.gif) no-repeat 0 0; background: transparent url(spread/button-max-focus.gif) no-repeat 0 0;
position:absolute; position:absolute;
top:0px; top:0px;
right:33px; right:33px;
cursor:pointer; cursor:pointer;
z-index:1000; z-index:1000;
} }
.spread_title { .spread_title {
float:left; float:left;
height:14px; height:14px;
font-family: Tahoma, Arial, sans-serif; font-family: Tahoma, Arial, sans-serif;
font-size:14px; font-size:14px;
font-weight:bold; font-weight:bold;
text-align:left; text-align:left;
margin-top:2px; margin-top:2px;
width:100%; width:100%;
color:#E47211; color:#E47211;
} }
.spread_content { .spread_content {
overflow:auto; overflow:auto;
color: #222; color: #222;
font-family: Tahoma, Arial, sans-serif; font-family: Tahoma, Arial, sans-serif;
font-size: 10px; font-size: 10px;
background:#A9EA00; background:#A9EA00;
} }

View File

@ -89,7 +89,9 @@ h4{ font-size:14px; }
.ml100{ margin-left:100px;} .ml100{ margin-left:100px;}
.ml110{ margin-left:110px;} .ml110{ margin-left:110px;}
.ml125 { margin-left:125px;} .ml125 { margin-left:125px;}
.ml130 { margin-left:130px;}
.ml200 {margin-left:200px;} .ml200 {margin-left:200px;}
.ml250 {margin-left:250px;}
.ml320{ margin-left:320px;} .ml320{ margin-left:320px;}
.ml150 { margin-left:150px;} .ml150 { margin-left:150px;}
.mr-5 {margin-right:-5px;} .mr-5 {margin-right:-5px;}

View File

@ -4,16 +4,9 @@
/*基本样式*/ /*基本样式*/
body,table,input,textarea,select,button { font-family: "微软雅黑","宋体";} body,table,input,textarea,select,button { font-family: "微软雅黑","宋体";}
h1,h2,h3,h4,h5,p,pre {padding:0px; margin:0px;} h1,h2,h3,h4,h5,p,pre {padding:0px; margin:0px;}
blockquote { img {max-width:100%;}
border:1px solid #d4d4d4; blockquote {border:1px solid #d4d4d4; padding: 0.6em; margin-left: 1.4em; margin-right: 0.4em; border-radius: 4px; font-family: "Microsoft YaHei"; background-size: 100% 100%; margin-top:5px;}
padding: 0.6em; .text-control {word-break:normal; word-wrap:break-word;}
margin-left: 1.4em;
margin-right: 0.4em;
border-radius: 4px;
font-family: "Microsoft YaHei";
background-size: 100% 100%;
margin-top:5px;
}
.f12 {font-size:12px;} .f12 {font-size:12px;}
.f13 {font-size:13px;} .f13 {font-size:13px;}
.f15 {font-size:15px;} .f15 {font-size:15px;}
@ -24,6 +17,7 @@ blockquote {
.mb5 {margin-bottom:5px;} .mb5 {margin-bottom:5px;}
.mb10 {margin-bottom:10px;} .mb10 {margin-bottom:10px;}
.ml10 {margin-left:10px;} .ml10 {margin-left:10px;}
.mr5 {margin-right:5px;}
.mr10 {margin-right:10px;} .mr10 {margin-right:10px;}
.ml15 {margin-left:15px;} .ml15 {margin-left:15px;}
.mr15 {margin-right:15px;} .mr15 {margin-right:15px;}
@ -62,8 +56,7 @@ a.underline {text-decoration:underline;}
.fl {float:left;} .fl {float:left;}
.fr {float:right;} .fr {float:right;}
.cl {clear:both; overflow:hidden;} .cl {clear:both; overflow:hidden;}
.post-content {width:100%; font-size:13px; line-height:18px; height:90px; overflow:hidden; word-break:break-all; word-wrap:break-word;} .post-content {width:100%; font-size:13px; line-height:18px; height:95px; overflow:hidden; word-break:break-all; word-wrap:break-word;}
.post-content img {max-width:100%;}
.post-interactive {width:100%; height:35px; line-height:35px; vertical-align:middle; border-top:1px solid #e6e6e6; background-color:#f8f9fb;} .post-interactive {width:100%; height:35px; line-height:35px; vertical-align:middle; border-top:1px solid #e6e6e6; background-color:#f8f9fb;}
.post-interactive-column, .post-interactive-column,
.post-interactive-reply, .post-interactive-reply,
@ -71,16 +64,16 @@ a.underline {text-decoration:underline;}
.more-wrap {width:100%;} .more-wrap {width:100%;}
.more-events {width:98%; font-size:13px; text-align:center; margin:0 auto; padding: 5px 0; border:1px solid #e6e6e6; border-radius:3px; background-color:#f8f9fb; } .more-events {width:98%; font-size:13px; text-align:center; margin:0 auto; padding: 5px 0; border:1px solid #e6e6e6; border-radius:3px; background-color:#f8f9fb; }
.border-bottom {border-bottom:1px solid #e6e6e6;} .border-bottom {border-bottom:1px solid #e6e6e6;}
.post-reply-wrap, .post-input-wrap {width:100%; line-height:18px; background-color:#f8f9fb;} .post-reply-wrap, .post-input-wrap {width:100%; background-color:#f8f9fb;}
.post-reply-row {padding:10px; color:#9a9a9a;} .post-reply-row {padding:10px; color:#9a9a9a;}
.post-reply-avatar {width:45px; height:30px; text-align:center; margin-right:10px;} .post-reply-avatar {width:45px; height:30px; text-align:center; margin-right:10px;}
.post-reply-user {font-size:13px; text-align:left; margin-bottom:10px;} .post-reply-user {font-size:13px; text-align:left; margin-bottom:10px;}
.post-reply-content {font-size:13px; text-align:left; word-break:break-all; word-wrap:break-word; overflow:hidden;} .post-reply-content {font-size:13px; text-align:left; word-break:break-all; word-wrap:break-word; overflow:hidden;}
.post-reply-content img {max-width:100%;} .post-reply-content img {max-width:100%;}
.post-reply-date, .post-reply-trigger {font-size:13px;} .post-reply-date, .post-reply-trigger {font-size:13px;}
.post-input-container {padding-right:2px;} .post-input-container {padding-right:12px;}
.copy-input {width:100%; height:28px; line-height:28px; border-radius:3px; position:absolute; left:-9999em;} .copy-input {width:100%; height:28px; line-height:28px; padding:0 5px; vertical-align: middle; font-size:12px; border-radius:3px; position:absolute; left:-9999em;}
.post-reply-input {width:100%; height:28px; max-height:84px; line-height:28px; border:1px solid #e6e6e6; outline:none; padding:0; margin:0; border-radius:3px; overflow-y:auto; resize:none;} .post-reply-input {width:100%; height:28px; max-height:84px; line-height:28px; vertical-align: middle; font-size:12px; border:1px solid #e6e6e6; outline:none; padding:0 5px; margin:0; border-radius:3px; overflow-y:auto; resize:none;}
.post-reply-submit {font-size:13px; padding:3px 8px; color:#fff; background-color:#269ac9; outline:none; border:none; display:inline-block;} .post-reply-submit {font-size:13px; padding:3px 8px; color:#fff; background-color:#269ac9; outline:none; border:none; display:inline-block;}
.reply-icon {background:url(/images/wechat/icon_list.gif) -150px -155px no-repeat; width:20px; height:20px; display:inline-block; vertical-align:middle;} .reply-icon {background:url(/images/wechat/icon_list.gif) -150px -155px no-repeat; width:20px; height:20px; display:inline-block; vertical-align:middle;}
.praise-icon {background:url(/images/wechat/icon_list.gif) -36px -88px no-repeat; width:20px; height:20px; display:inline-block; vertical-align:middle;} .praise-icon {background:url(/images/wechat/icon_list.gif) -36px -88px no-repeat; width:20px; height:20px; display:inline-block; vertical-align:middle;}