Upgrade rails, devise, delayed_jobs and other gems. Fix dependencies. Apply assets pipeline, add to deploy. Refactor and cleanup Gemfile. Fix after upgrade bugs. Redo commentable_id from string to decimal. Refactor and code cleanup. Apply basic new design. Refactor main template. Automate menus. Improve translations. Refs #96

This commit is contained in:
Pavel Chipiga 2012-02-08 16:01:00 +02:00
parent e9f3b79bd2
commit 7223b7deb9
248 changed files with 9586 additions and 19797 deletions

2
.gitignore vendored
View File

@ -7,10 +7,10 @@ tmp/
config/database.yml
.idea
config/application.yml
public/stylesheets/compiled/*
public/assets/*
config/initializers/local.rb
public/system/*
public/downloads/*
*.swp
*.tmproj
.sass-cache/

View File

@ -1,4 +1,8 @@
load 'deploy' if respond_to?(:namespace) # cap2 differentiator
# Uncomment if you are using Rails' asset pipeline
load 'deploy/assets'
Dir['vendor/gems/*/recipes/*.rb', 'vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
load 'config/deploy' # remove this line to skip loading any of the default tasks
load 'config/deploy' # remove this line to skip loading any of the default tasks

86
Gemfile
View File

@ -1,88 +1,74 @@
source 'http://rubygems.org'
gem 'rails', '3.0.11' #, :git => 'git://github.com/rails/rails.git'
gem 'shotgun'
gem 'rails', '3.2.1' #, :git => 'git://github.com/rails/rails.git'
gem 'pg', '~> 0.11.0'
gem 'silent-postgres', '~> 0.1.1'
gem 'redhillonrails_core', '~> 1.2.0' # deprecated
gem 'pg', '~> 0.12.2'
# gem 'silent-postgres', :git => 'git://github.com/dolzenko/silent-postgres.git' #'~> 0.1.1'
gem 'redhillonrails_core', :git => 'git://github.com/chipiga/redhillonrails_core.git', :branch => 'rails31' # '~> 2.0.0.pre' # deprecated
# gem 'schema_plus', '~> 0.2.1' # buggy shit!
gem 'devise', '~> 1.5.2'
gem 'omniauth', '~> 1.0.1'
gem 'devise', '~> 2.0.0'
gem 'omniauth', '~> 1.0.2'
gem 'omniauth-openid', '~> 1.0.1'
gem 'cancan', '~> 1.6.7'
gem "haml-rails", '~> 0.3.4'
# gem "compass", '~> 0.11.5' # update when it will be needed
gem 'jammit'
gem "yui-compressor", "0.9.5" # Higher versions depends on Platform gem which conflicts with Platform model
gem 'rails3-jquery-autocomplete'
gem 'ancestry', '~> 1.2.4'
gem 'paperclip', "~> 2.5"
gem "will_paginate", "~> 3.0.2"
gem 'meta-tags', '~> 1.2.4', :require => 'meta_tags'
gem "russian"
gem 'paperclip', '~> 2.5.2'
gem 'delayed_job_active_record', '~> 0.3.2'
gem 'russian', '~> 0.6.0'
gem 'highline', '~> 1.6.11'
gem 'rails-xmlrpc', '~> 0.3.6' # :git => 'git://github.com/chipiga/rails-xmlrpc.git'
gem 'grack', :git => 'git://github.com/rdblue/grack.git', :require => 'git_http'
gem "grit", :git => 'git://github.com/mojombo/grit.git', :branch => 'master'
gem 'whenever', :require => false
gem 'delayed_job', '2.1.4'
gem 'highline', '~> 1.6.8'
# Wiki
gem "gollum", "1.3.1"
gem "redcarpet", "1.17.2"
gem 'creole'
gem 'rdiscount'
#gem 'org-ruby'
# gem 'org-ruby'
gem 'RedCloth'
gem 'wikicloth'
# XML-RPC support
gem "rails-xmlrpc", '~> 0.3.6' # :git => 'git://github.com/chipiga/rails-xmlrpc.git'
gem 'unicorn', '~> 4.2.0'
gem 'newrelic_rpm', '~> 3.3.1'
gem 'unicorn', '~> 4.1.1'
gem 'rails3-jquery-autocomplete', '~> 1.0.6'
gem 'will_paginate', '~> 3.0.3'
gem 'meta-tags', '~> 1.2.4', :require => 'meta_tags'
gem "haml-rails", '~> 0.3.4'
gem 'jquery-rails', '~> 2.0.0'
group :production do
gem "airbrake", '~> 3.0.5'
gem 'bluepill', :require => false
group :assets do
gem 'sass-rails', '~> 3.2.4'
gem 'coffee-rails', '~> 3.2.2'
gem 'uglifier', '~> 1.2.1'
gem 'compass', '~> 0.12.rc.1' # :git => 'git://github.com/chriseppstein/compass.git', :branch => 'rails31'
gem 'therubyracer', '~> 0.9.9'
end
gem 'newrelic_rpm'
group :production do
gem "airbrake", '~> 3.0.9'
gem 'bluepill', '~> 0.0.55', :require => false
gem 'daemons', '~> 1.1.8' # for DJ
end
group :development do
gem 'shotgun'
# gem 'letter_opener'
gem 'rails3-generators'
gem 'web-app-theme'
gem 'hpricot'
gem 'ruby_parser'
gem 'hirb'
# deploy
gem 'whenever', :require => false
gem 'capistrano', :require => false
gem 'capistrano-ext', :require => false
gem 'cape', :require => false
gem 'capistrano_colors', :require => false
end
group :development, :test do
gem 'rspec-rails', '~> 2.7.0'
gem 'factory_girl_rails', '~> 1.4.0'
gem 'rr'
group :test do
gem 'rspec-rails', '~> 2.8.1'
gem 'factory_girl_rails', '~> 1.6.0'
gem 'rr', '~> 1.0.4'
end
# group :test do
# gem 'spork', '>= 0.9.0.rc9'
# gem 'guard-spork', '~> 0.3.1'
# gem 'guard-rspec', '~> 0.5.0'
# gem 'guard-bundler', '~> 0.1.3'
#
# gem 'rb-fsevent', '>= 0.4.3', :require => false
# gem 'growl', '~> 1.0.3', :require => false
# gem 'rb-inotify', '>= 0.8.6', :require => false
# gem 'libnotify', '~> 0.5.7', :require => false
# end

View File

@ -1,3 +1,11 @@
GIT
remote: git://github.com/chipiga/redhillonrails_core.git
revision: 5f58167c41882890c223168b0a5521d99e8d92aa
branch: rails31
specs:
redhillonrails_core (2.0.0.pre)
activerecord (>= 3.1.0.rc)
GIT
remote: git://github.com/mojombo/grit.git
revision: 3fc864f3c637e06e2fa7a81f6b48a5df58a9bc5b
@ -18,33 +26,33 @@ GEM
remote: http://rubygems.org/
specs:
RedCloth (4.2.9)
abstract (1.0.0)
actionmailer (3.0.11)
actionpack (= 3.0.11)
mail (~> 2.2.19)
actionpack (3.0.11)
activemodel (= 3.0.11)
activesupport (= 3.0.11)
builder (~> 2.1.2)
erubis (~> 2.6.6)
i18n (~> 0.5.0)
rack (~> 1.2.1)
rack-mount (~> 0.6.14)
rack-test (~> 0.5.7)
tzinfo (~> 0.3.23)
activemodel (3.0.11)
activesupport (= 3.0.11)
builder (~> 2.1.2)
i18n (~> 0.5.0)
activerecord (3.0.11)
activemodel (= 3.0.11)
activesupport (= 3.0.11)
arel (~> 2.0.10)
tzinfo (~> 0.3.23)
activeresource (3.0.11)
activemodel (= 3.0.11)
activesupport (= 3.0.11)
activesupport (3.0.11)
actionmailer (3.2.1)
actionpack (= 3.2.1)
mail (~> 2.4.0)
actionpack (3.2.1)
activemodel (= 3.2.1)
activesupport (= 3.2.1)
builder (~> 3.0.0)
erubis (~> 2.7.0)
journey (~> 1.0.1)
rack (~> 1.4.0)
rack-cache (~> 1.1)
rack-test (~> 0.6.1)
sprockets (~> 2.1.2)
activemodel (3.2.1)
activesupport (= 3.2.1)
builder (~> 3.0.0)
activerecord (3.2.1)
activemodel (= 3.2.1)
activesupport (= 3.2.1)
arel (~> 3.0.0)
tzinfo (~> 0.3.29)
activeresource (3.2.1)
activemodel (= 3.2.1)
activesupport (= 3.2.1)
activesupport (3.2.1)
i18n (~> 0.6)
multi_json (~> 1.0)
airbrake (3.0.9)
activesupport
builder
@ -52,16 +60,16 @@ GEM
posix-spawn (>= 0.3.6)
ancestry (1.2.4)
activerecord (>= 2.2.2)
arel (2.0.10)
arel (3.0.0)
bcrypt-ruby (3.0.1)
bluepill (0.0.52)
bluepill (0.0.55)
activesupport (>= 3.0.0)
daemons (~> 1.1.0)
daemons (~> 1.1.4)
i18n (>= 0.5.0)
state_machine (~> 1.1.0)
builder (2.1.2)
builder (3.0.0)
cancan (1.6.7)
cape (1.2.0)
cape (1.4.0)
capistrano (2.9.0)
highline
net-scp (>= 1.0.0)
@ -72,25 +80,42 @@ GEM
capistrano (>= 1.0.0)
capistrano_colors (0.5.5)
chronic (0.6.7)
chunky_png (1.2.5)
cocaine (0.2.1)
coffee-rails (3.2.2)
coffee-script (>= 2.2.0)
railties (~> 3.2.0)
coffee-script (2.2.0)
coffee-script-source
execjs
coffee-script-source (1.2.0)
compass (0.12.rc.1)
chunky_png (~> 1.2)
fssm (>= 0.2.7)
sass (~> 3.1)
creole (0.4.2)
daemons (1.1.6)
delayed_job (2.1.4)
daemons (1.1.8)
delayed_job (3.0.1)
activesupport (~> 3.0)
daemons
devise (1.5.3)
delayed_job_active_record (0.3.2)
activerecord (> 2.1.0)
delayed_job (~> 3.0.0)
devise (2.0.0)
bcrypt-ruby (~> 3.0)
orm_adapter (~> 0.0.3)
railties (~> 3.1)
warden (~> 1.1)
diff-lcs (1.1.3)
erubis (2.6.6)
abstract (>= 1.0.0)
erubis (2.7.0)
execjs (1.3.0)
multi_json (~> 1.0)
expression_parser (0.9.0)
factory_girl (2.3.2)
factory_girl (2.5.1)
activesupport
factory_girl_rails (1.4.0)
factory_girl (~> 2.3.0)
factory_girl_rails (1.6.0)
factory_girl (~> 2.5.0)
railties (>= 3.0.0)
fssm (0.2.8.1)
github-markup (0.7.0)
gollum (1.3.1)
albino (~> 1.3.2)
@ -109,21 +134,24 @@ GEM
railties (~> 3.0)
hashie (1.2.0)
highline (1.6.11)
hike (1.2.1)
hirb (0.6.0)
hpricot (0.8.6)
i18n (0.5.0)
jammit (0.6.5)
yui-compressor (>= 0.9.3)
i18n (0.6.0)
journey (1.0.1)
jquery-rails (2.0.0)
railties (>= 3.2.0.beta, < 5.0)
thor (~> 0.14)
json (1.6.5)
kgio (2.7.2)
mail (2.2.19)
activesupport (>= 2.3.6)
libv8 (3.3.10.4)
mail (2.4.1)
i18n (>= 0.4.0)
mime-types (~> 1.16)
treetop (~> 1.4.8)
meta-tags (1.2.4)
actionpack
mime-types (1.17.2)
multi_json (1.0.4)
mustache (0.99.4)
net-scp (1.0.4)
net-ssh (>= 1.99.1)
@ -146,86 +174,99 @@ GEM
activesupport (>= 2.3.2)
cocaine (>= 0.0.2)
mime-types
pg (0.11.0)
pg (0.12.2)
polyglot (0.3.3)
posix-spawn (0.3.6)
rack (1.2.5)
rack-mount (0.6.14)
rack (>= 1.0.0)
rack (1.4.1)
rack-cache (1.1)
rack (>= 0.4)
rack-openid (1.3.1)
rack (>= 1.1.0)
ruby-openid (>= 2.1.8)
rack-test (0.5.7)
rack-protection (1.2.0)
rack
rack-ssl (1.3.2)
rack
rack-test (0.6.1)
rack (>= 1.0)
rails (3.0.11)
actionmailer (= 3.0.11)
actionpack (= 3.0.11)
activerecord (= 3.0.11)
activeresource (= 3.0.11)
activesupport (= 3.0.11)
rails (3.2.1)
actionmailer (= 3.2.1)
actionpack (= 3.2.1)
activerecord (= 3.2.1)
activeresource (= 3.2.1)
activesupport (= 3.2.1)
bundler (~> 1.0)
railties (= 3.0.11)
railties (= 3.2.1)
rails-xmlrpc (0.3.6)
rails3-generators (0.17.4)
railties (>= 3.0.0)
rails3-jquery-autocomplete (1.0.5)
rails3-jquery-autocomplete (1.0.6)
rails (~> 3.0)
railties (3.0.11)
actionpack (= 3.0.11)
activesupport (= 3.0.11)
railties (3.2.1)
actionpack (= 3.2.1)
activesupport (= 3.2.1)
rack-ssl (~> 1.3.2)
rake (>= 0.8.7)
rdoc (~> 3.4)
thor (~> 0.14.4)
thor (~> 0.14.6)
raindrops (0.8.0)
rake (0.9.2.2)
rdiscount (1.6.8)
rdoc (3.12)
json (~> 1.4)
redcarpet (1.17.2)
redhillonrails_core (1.2.0)
activerecord (>= 2)
rr (1.0.4)
rspec (2.7.0)
rspec-core (~> 2.7.0)
rspec-expectations (~> 2.7.0)
rspec-mocks (~> 2.7.0)
rspec-core (2.7.1)
rspec-expectations (2.7.0)
rspec (2.8.0)
rspec-core (~> 2.8.0)
rspec-expectations (~> 2.8.0)
rspec-mocks (~> 2.8.0)
rspec-core (2.8.0)
rspec-expectations (2.8.0)
diff-lcs (~> 1.1.2)
rspec-mocks (2.7.0)
rspec-rails (2.7.0)
actionpack (~> 3.0)
activesupport (~> 3.0)
railties (~> 3.0)
rspec (~> 2.7.0)
rspec-mocks (2.8.0)
rspec-rails (2.8.1)
actionpack (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
rspec (~> 2.8.0)
ruby-openid (2.1.8)
ruby_parser (2.3.1)
sexp_processor (~> 3.0)
russian (0.6.0)
i18n (>= 0.5.0)
sanitize (2.0.3)
nokogiri (>= 1.4.4, < 1.6)
sexp_processor (3.0.10)
sass (3.1.14)
sass-rails (3.2.4)
railties (~> 3.2.0)
sass (>= 3.1.10)
tilt (~> 1.3)
shotgun (0.9)
rack (>= 1.0)
silent-postgres (0.1.1)
sinatra (1.2.8)
rack (~> 1.1)
tilt (>= 1.2.2, < 2.0)
sinatra (1.3.2)
rack (~> 1.3, >= 1.3.6)
rack-protection (~> 1.2)
tilt (~> 1.3, >= 1.3.3)
sprockets (2.1.2)
hike (~> 1.2)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
state_machine (1.1.2)
therubyracer (0.9.9)
libv8 (~> 3.3.10)
thor (0.14.6)
tilt (1.3.3)
treetop (1.4.10)
polyglot
polyglot (>= 0.3.1)
tzinfo (0.3.31)
unicorn (4.1.1)
kgio (~> 2.4)
uglifier (1.2.3)
execjs (>= 0.3.0)
multi_json (>= 1.0.2)
unicorn (4.2.0)
kgio (~> 2.6)
rack
raindrops (~> 0.6)
raindrops (~> 0.7)
warden (1.1.0)
rack (>= 1.0)
web-app-theme (0.7.0)
whenever (0.7.2)
activesupport (>= 2.3.4)
chronic (~> 0.6.3)
@ -233,55 +274,55 @@ GEM
builder
expression_parser
will_paginate (3.0.3)
yui-compressor (0.9.5)
PLATFORMS
ruby
DEPENDENCIES
RedCloth
airbrake (~> 3.0.5)
airbrake (~> 3.0.9)
ancestry (~> 1.2.4)
bluepill
bluepill (~> 0.0.55)
cancan (~> 1.6.7)
cape
capistrano
capistrano-ext
capistrano_colors
coffee-rails (~> 3.2.2)
compass (~> 0.12.rc.1)
creole
delayed_job (= 2.1.4)
devise (~> 1.5.2)
factory_girl_rails (~> 1.4.0)
daemons (~> 1.1.8)
delayed_job_active_record (~> 0.3.2)
devise (~> 2.0.0)
factory_girl_rails (~> 1.6.0)
gollum (= 1.3.1)
grack!
grit!
haml-rails (~> 0.3.4)
highline (~> 1.6.8)
highline (~> 1.6.11)
hirb
hpricot
jammit
jquery-rails (~> 2.0.0)
meta-tags (~> 1.2.4)
newrelic_rpm
omniauth (~> 1.0.1)
newrelic_rpm (~> 3.3.1)
omniauth (~> 1.0.2)
omniauth-openid (~> 1.0.1)
paperclip (~> 2.5)
pg (~> 0.11.0)
rails (= 3.0.11)
paperclip (~> 2.5.2)
pg (~> 0.12.2)
rails (= 3.2.1)
rails-xmlrpc (~> 0.3.6)
rails3-generators
rails3-jquery-autocomplete
rails3-jquery-autocomplete (~> 1.0.6)
rdiscount
redcarpet (= 1.17.2)
redhillonrails_core (~> 1.2.0)
rr
rspec-rails (~> 2.7.0)
ruby_parser
russian
redhillonrails_core!
rr (~> 1.0.4)
rspec-rails (~> 2.8.1)
russian (~> 0.6.0)
sass-rails (~> 3.2.4)
shotgun
silent-postgres (~> 0.1.1)
unicorn (~> 4.1.1)
web-app-theme
therubyracer (~> 0.9.9)
uglifier (~> 1.2.1)
unicorn (~> 4.2.0)
whenever
wikicloth
will_paginate (~> 3.0.2)
yui-compressor (= 0.9.5)
will_paginate (~> 3.0.3)

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
app/assets/images/ava.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
app/assets/images/bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
app/assets/images/code.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
app/assets/images/flag.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
app/assets/images/lock.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
app/assets/images/radio.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
app/assets/images/x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -0,0 +1,14 @@
function deleteAdminMember() {
if (document.getElementById("niceCheckbox1-1").checked == true) {
$("#admin-table-members-row1").fadeOut("slow");
}
if (document.getElementById("niceCheckbox2-1").checked == true) {
$("#admin-table-members-row2").fadeOut("slow");
}
if (document.getElementById("niceCheckbox3-1").checked == true) {
$("#admin-table-members-row3").fadeOut("slow");
}
if (document.getElementById("niceCheckbox4-1").checked == true) {
$("#admin-table-members-row4").fadeOut("slow");
}
}

View File

@ -0,0 +1,42 @@
var state = 0;
function droplist() {
if (state == 0) {
$("#droplist").slideToggle("slow");
//borderDown();
state = 1;
}
}
function loadMessages() {
$("#messages-new").fadeOut("slow");
$("#new-messages").delay(700).fadeIn("slow");
//setTimeout(border1, 700)
}
function loadOldMessages() {
$("#old-messages").fadeIn("slow");
//setTimeout(border1, 700)
}
$(document).click(function() {
var dl = $("#droplist").css("height");
var dl2 = $("#droplist").css("display");
if ((dl2 == "block")&&(dl == "91px")) {
state = 0;
droplist();
state = 0;
}
});
function showActivity(elem) {
//borderDown();
$("#activity-bottom"+elem).slideToggle("slow");
var img = $("#expand" + elem).attr("src");
if (img == "design/expand-gray.png") {
$("#expand" + elem).attr("src","design/expand-gray2.png");
} else {
$("#expand" + elem).attr("src","design/expand-gray.png");
}
//setTimeout(border1, 700)
}

View File

@ -0,0 +1,54 @@
//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require autocomplete-rails
//= require vendor
//= require_tree .
//= require_self
// function disableNotifierCbx(global_cbx) {
// if ($(global_cbx).attr('checked')) {
// $('.notify_cbx').removeAttr('disabled');
// $('.notify_cbx').each(function(i,el) { $(el).prev().removeAttr('disabled'); })
// } else {
// $('.notify_cbx').attr('disabled', 'disabled');
// $('.notify_cbx').each(function(i,el) { $(el).prev().attr('disabled', 'disabled'); })
// }
// }
//
// $(document).ready(function() {
// $('select#build_list_pl_id').change(function() {
// var platform_id = $(this).val();
// var base_platforms = $('.base_platforms input[type=checkbox]');
//
// $('#include_repos').html($('.preloaded_include_repos .include_repos_' + platform_id).html());
//
// base_platforms.each(function(){
// if ($.inArray(platform_id, base_platforms.map(function(){ return $(this).val() }).get()) >= 0) {
// if ($(this).val() == platform_id) {
// $(this).attr('checked', 'checked');
// $(this).removeAttr('disabled');
// } else {
// $(this).removeAttr('checked');
// $(this).attr('disabled', 'disabled');
// }
// } else {
// $(this).removeAttr('disabled');
// }
// });
// });
// $('select#build_list_pl_id').trigger('change');
//
// $('input.user_role_chbx').click(function() {
// var current = $(this);
// current.parent().find('input.user_role_chbx').each(function(i,el) {
// if ($(el).attr('id') != current.attr('id')) {
// $(el).removeAttr('checked');
// }
// });
// });
//
// $('#settings_notifier_can_notify').click(function() {
// disableNotifierCbx($(this));
// });
// });

View File

@ -0,0 +1,47 @@
function changeCheck(el)
/*
Russsian comments deleted
el - span
input
*/
{
var el = el,
input = el.getElementsByTagName("input")[0];
if(input.checked)
{
el.style.backgroundPosition="0 0";
input.checked=false;
}
else
{
el.style.backgroundPosition="0 -18px";
input.checked=true;
}
return true;
}
function startChangeCheck(el)
/*
Russsian comments deleted
*/
{
var el = el,
input = el.getElementsByTagName("input")[0];
if(input.checked)
{
el.style.backgroundPosition="0 -18px";
}
return true;
}
function startCheck()
{
/*
Russsian comments deleted
Russsian comments deleted
*/
startChangeCheck(document.getElementById("niceCheckbox1"));
startChangeCheck(document.getElementById("niceCheckbox2"));
startChangeCheck(document.getElementById("niceCheckbox3"));
startChangeCheck(document.getElementById("niceCheckbox4"));
}

View File

@ -0,0 +1,44 @@
function changeCheck(el)
/*
Russsian comments deleted
el - span
input
*/
{
var el = el,
input = el.getElementsByTagName("input")[0];
if(input.checked)
{
el.style.backgroundPosition="0 0";
input.checked=false;
}
else
{
el.style.backgroundPosition="0 -17px";
input.checked=true;
}
return true;
}
function startChangeCheck(el)
/*
Russsian comments deleted
*/
{
var el = el,
input = el.getElementsByTagName("input")[0];
if(input.checked)
{
el.style.backgroundPosition="0 -17px";
}
return true;
}
function startCheck()
{
/*
Russsian comments deleted
Russsian comments deleted
*/
startChangeCheck(document.getElementById("niceCheckbox1"));
}

View File

@ -0,0 +1,11 @@
jQuery(document).ready(function(){
var params = {
changedEl: ".lineForm select",
visRows: 999999,
scrollArrows: false
}
cuSel(params);
});

View File

@ -0,0 +1,16 @@
$(document).ready(function() {
$("#myTable").tablesorter({
headers: {
1: {
sorter: false
},
3: {
sorter: false
}
}
});
});
function deleteRow(num) {
$("#Row"+num).fadeOut("slow");
}

View File

@ -0,0 +1,124 @@
jQuery(document).ready(function(){
jQuery(".niceRadio").each(
/* Russsian comments deleted */
function() {
changeRadioStart(jQuery(this));
});
});
function changeRadio(el)
/*
Russsian comments deleted
*/
{
var el = el,
input = el.find("input").eq(0);
var nm=input.attr("name");
jQuery(".niceRadio input").each(
function() {
if(jQuery(this).attr("name")==nm)
{
jQuery(this).parent().removeClass("radioChecked");
}
});
if(el.attr("class").indexOf("niceRadioDisabled")==-1)
{
el.addClass("radioChecked");
input.attr("checked", true);
}
return true;
}
function changeVisualRadio(input)
{
/*
Russsian comments deleted
*/
var wrapInput = input.parent();
var nm=input.attr("name");
jQuery(".niceRadio input").each(
function() {
if(jQuery(this).attr("name")==nm)
{
jQuery(this).parent().removeClass("radioChecked");
}
});
if(input.attr("checked"))
{
wrapInput.addClass("radioChecked");
}
}
function changeRadioStart(el)
/*
Russsian comments deleted <span class="niceRadio"><input type="radio" name="[name radio]" id="[id radio]" [checked="checked"] /></span>
Russsian comments deleted
*/
{
try
{
var el = el,
radioName = el.attr("name"),
radioId = el.attr("id"),
radioChecked = el.attr("checked"),
radioDisabled = el.attr("disabled"),
radioTab = el.attr("tabindex"),
radioValue = el.attr("value");
if(radioChecked)
el.after("<span class='niceRadio radioChecked'>"+
"<input type='radio'"+
"name='"+radioName+"'"+
"id='"+radioId+"'"+
"checked='"+radioChecked+"'"+
"tabindex='"+radioTab+"'"+
"value='"+radioValue+"' /></span>");
else
el.after("<span class='niceRadio'>"+
"<input type='radio'"+
"name='"+radioName+"'"+
"id='"+radioId+"'"+
"tabindex='"+radioTab+"'"+
"value='"+radioValue+"' /></span>");
/* Russsian comments deleted */
if(radioDisabled)
{
el.next().addClass("niceRadioDisabled");
el.next().find("input").eq(0).attr("disabled","disabled");
}
/* Russsian comments deleted */
el.next().bind("mousedown", function(e) { changeRadio(jQuery(this)) });
if(jQuery.browser.msie) el.next().find("input").eq(0).bind("click", function(e) { changeVisualRadio(jQuery(this)) });
else el.next().find("input").eq(0).bind("change", function(e) { changeVisualRadio(jQuery(this)) });
el.remove();
}
catch(e)
{
// Russsian comments deleted
}
return true;
}

View File

@ -0,0 +1,3 @@
@import "main";
@import "tablesorter";
@import "cusel";

View File

@ -0,0 +1,944 @@
html, body {
margin: 0;
padding: 0;
font-family: Tahoma, Arial;
color: #565667;
background: #1f60a1 image-url("bg.png") repeat-x;
min-width: 940px;
min-height: 600px;
text-align: center;
height: 100%;
}
header, section, footer, aside, nav, article, menu {
display: block;
}
input[type="text"]:focus { outline: none; }
input[type="password"]:focus { outline: none; }
input:focus { outline: none; }
select:focus { outline: none; }
a img { border: none; }
.wrap {
width: 940px;
margin: 0 auto;
text-align: center;
border: 1px solid #3f668c;
-webkit-box-shadow: 0px 0px 7px 0px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 0px 0px 7px 0px rgba(0, 0, 0, 0.5);
box-shadow: 0px 0px 7px 0px rgba(0, 0, 0, 0.5);
background: #FFF;
min-height: 92%;
}
.wrap.columns {
background: #FFF image-url("page-bg.png") repeat-y;
}
.both {
clear: both;
}
/* Top menu */
header {
-webkit-box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.4);
-moz-box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.4);
box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.4);
position: relative;
z-index: 1000;
}
header div.left {
background: image-url("top-left.png");
height: 46px;
width: 14px;
float: left;
}
header div.middle {
background: image-url("top-middle.png");
float: left;
height: 46px;
width: 912px;
}
header div.right {
background: image-url("top-right.png");
height: 46px;
width: 14px;
float: right;
}
/* Left part of top menu*/
header menu {
float: left;
margin: 0;
padding: 0;
}
header menu ul {
list-style: none;
margin: 0;
padding: 10px 0px 0px 0px;
}
header menu ul li {
display: inline;
}
header menu ul li a {
font-size: 12px;
color: #FFF;
text-decoration: none;
height: 43px;
padding: 15px 15px 15px 15px;
}
header menu ul li a:hover {
color: #cee7ff;
}
header menu ul li a.first {
padding-left: 45px;
}
header menu ul li a.active {
background: image-url("menu-hover.png") repeat-x;
}
header div.logo {
float: left;
margin-top: -25px;
padding-left: 10px;
position: absolute;
}
/* Right part of top menu */
header div.information {
float: right;
}
header div.search {
float: left;
margin: 10px 0px 0px 0px;
-moz-border-radius-topleft: 3px;
-moz-border-radius-topright: 3px;
-moz-border-radius-bottomright: 3px;
-moz-border-radius-bottomleft: 3px;
-webkit-border-radius: 3px 3px 3px 3px;
border-radius: 3px 3px 3px 3px;
background: #FFF;
border: 1px solid #7691aa;
}
header div.search div.pic {
background: image-url("search-button.png");
height: 22px;
width: 24px;
float: left;
}
header div.search div.field {
float: left;
margin: -1px 0px 0px 0px;
}
header div.search div.field input {
border: none;
height: 18px;
background: none;
width: 132px;
font-size: 12px;
font-family: Arial;
padding: 2px 0px 0px 0px;
}
header div.search div.field input.gray {
color: #cfcfcf;
}
header div.search div.field input.black {
color: #333333;
}
header div.avatar {
float:left;
padding-top: 6px;
padding-right: 10px;
padding-bottom: 10px;
padding: 6px 10px 10px 24px;
}
header div.profile {
float: left;
text-align: right;
color: #FFF;
font-size: 12px;
padding-top: 12px;
}
header div.profile a {
color: #FFF;
text-decoration: none;
}
header div.profile a:hover {
text-decoration: underline;
}
header div.droplist-wrap {
margin: -4px 0px 0px 0px;
}
header div.droplist {
background: image-url("bg-droplist.png") repeat-x;
height: 91px;
width: 151px;
-webkit-box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.5);
box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.5);
position: absolute;
margin-top: 0px;
margin-left: 138px;
border-radius: 0px 0px 4px 4px;
display: none;
text-align: right;
z-index: 9999;
}
header div.droplist-wrap div.a {
margin-top: 5px;
}
header div.droplist a{
position: relative;
padding-left: 15px;
font-size: 12px;
color: #7eb7ed;
text-decoration: none;
padding-right: 15px;
margin-top: 10px;
}
header div.droplist a:hover{
text-decoration: underline;
}
/* Submenu */
.sub-menu {
height: 38px;
margin: -7px 0px 0px 0px;
padding: 0px 0px 0px 15px;
background: #ededed;
position: relative;
z-index: 100;
border-bottom: 1px solid #FFF;
-webkit-box-shadow: 0px 5px 3px -3px rgba(18, 86, 135, 0.2);
-moz-box-shadow: 0px 5px 3px -3px rgba(18, 86, 135, 0.2);
box-shadow: 0px 5px 3px -3px rgba(18, 86, 135, 0.2);
}
.sub-menu div.left {
float: left;
width: 200px;
border-right: 1px solid #dcdcdc;
font-size: 12px;
text-align: left;
font-weight: 700;
padding: 10px 0px 0px 0px;
height: 21px;
}
.sub-menu div.right {
float: left;
}
.sub-menu nav {
float: left;
margin: 0px 0px 0px 0px;
}
.sub-menu nav ul {
list-style: none;
text-align: left;
padding: 0;
margin: 0;
padding-top: 5px;
}
.sub-menu nav ul li {
display: inline;
}
.sub-menu nav ul li a {
font-size: 12px;
color: #575756;
text-decoration: none;
height: 34px;
padding: 0px 20px 6px 20px;
}
.sub-menu nav ul li a.active {
background: image-url("submenu-hover.png") repeat-x;
}
.sub-menu nav ul li a:hover {
color: #2b6daf;
}
/* Page markup */
article {
font-size: 12px;
}
aside {
float: left;
width: 215px;
}
article div.right {
float: right;
width: 645px;
padding: 20px 40px 40px 40px;
text-align: left;
}
article div.right.bigpadding {
width: 445px;
padding: 20px 140px 40px 140px;
}
article div.all {
width: 855px;
padding: 20px 40px 20px 40px;
text-align: left;
}
/* Left part of page markup */
aside div.bordered {
border-bottom: 1px solid #dee5eb;
text-align: left;
padding: 20px 0px 0px 15px;
}
aside div.block {
text-align: left;
padding-top: 10px;
padding-left: 15px;
}
/* Common page parts markups */
article a.button {
display: inline-block;
white-space: nowrap;
background-color: #125687;
background-image: -webkit-gradient(linear, left top, left bottom, from(#68a3d8), to(#125687));
background-image: -webkit-linear-gradient(top, #68a3d8, #125687);
background-image: -moz-linear-gradient(top, #68a3d8, #125687);
background-image: -ms-linear-gradient(top, #68a3d8, #125687);
background-image: -o-linear-gradient(top, #68a3d8, #125687);
background-image: linear-gradient(top, #68a3d8, #125687);
filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#68a3d8', EndColorStr='#125687');
border: 1px solid #5084b4;
padding: 4px 20px;
margin: 0;
font-size: 12px;
text-decoration: none;
color: #FFF;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
}
article a.button:hover{
background-color: #34719d;
background-image: -webkit-gradient(linear, left top, left bottom, from(#7fb3e1), to(#34719d));
background-image: -webkit-linear-gradient(top, #7fb3e1, #34719d);
background-image: -moz-linear-gradient(top, #7fb3e1, #34719d);
background-image: -ms-linear-gradient(top, #7fb3e1, #34719d);
background-image: -o-linear-gradient(top, #7fb3e1, #34719d);
background-image: linear-gradient(top, #7fb3e1, #34719d);
filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#7fb3e1', EndColorStr='#34719d');
text-decoration: none;
}
article a.button:active{
background-color: #125687;
background-image: -webkit-gradient(linear, left top, left bottom, from(#68a3d8), to(#125687));
background-image: -webkit-linear-gradient(top, #68a3d8, #125687);
background-image: -moz-linear-gradient(top, #68a3d8, #125687);
background-image: -ms-linear-gradient(top, #68a3d8, #125687);
background-image: -o-linear-gradient(top, #68a3d8, #125687);
background-image: linear-gradient(top, #68a3d8, #125687);
filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#68a3d8', EndColorStr='#125687');
}
article a.disabled {
background-color: #888888;
background-image: -webkit-gradient(linear, left top, left bottom, from(#aaaaaa), to(#888888));
background-image: -webkit-linear-gradient(top, #aaaaaa, #888888);
background-image: -moz-linear-gradient(top, #aaaaaa, #888888);
background-image: -ms-linear-gradient(top, #aaaaaa, #888888);
background-image: -o-linear-gradient(top, #aaaaaa, #888888);
background-image: linear-gradient(top, #aaaaaa, #888888);
filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#aaaaaa', EndColorStr='#888888');
cursor: default;
color: #d8d8d8;
border: 1px solid #aaaaaa;
cursor: default;
}
article h3{
font-size: 14px;
color: #575756;
margin-bottom: 0;
padding-bottom: 2px;
}
article h3.fix {
margin-top: 0px;
padding-top: 0px;
}
article a{
color: #7eb7ed;
font-size: 12px;
text-decoration: none;
padding: 0px 0px;
}
article a:hover{
text-decoration: underline;
}
/* Right part of page markup */
article div.right div.hr {
border-bottom: 1px solid #dedede;
width: 100%;
padding-top: 30px;
margin-bottom: 40px;
}
article div.right div.hr.bottom {
margin-bottom: 10px;
padding-top: 20px;
}
article div.right div.hr.top {
padding-top: 7px;
margin-bottom: 20px;
}
article div.right div.leftside {
float: left;
}
article div.right div.rightside {
float: right;
}
.w25 {
width: 25px;
}
.w420 {
width: 420px;
padding-bottom: 20px;
}
.padd25 {
padding-left: 25px;
}
/* Footer */
footer {
height: 32px;
/*background: image-url("footer-bg.png");*/
padding-left: 15px;
width: 900px;
margin: 0 auto;
text-align: center;
}
footer ul {
margin: 0;
padding: 0;
list-style: none;
font-size: 12px;
color: #FFF;
padding-top: 10px;
text-align: left;
}
footer ul li {
display: inline;
}
footer ul li a {
font-size: 12px;
color: #FFF;
text-decoration: none;
}
footer ul li a:hover {
text-decoration: underline;
}
/* Main page */
aside div.bordered table{
padding: 0;
margin: 0;
padding-bottom: 30px;
margin-left: -10px;
}
aside div.bordered table td{
font-size: 12px;
padding: 1px 0px 0px 0px;
}
aside div.block table td {
text-align: right;
padding: 2px 0px 1px 0px;
}
aside div.block table td.first{
width: 150px;
text-align: left;
}
article div.right div.messages {
background: #e9f4fb;
border: 1px solid #dfeefa;
border-radius: 5px;
width: 100%;
color: #477cae;
text-align: center;
font-size: 12px;
padding: 4px 0px 4px 0px;
cursor: pointer;
margin: 15px 0px 15px 0px;
}
article div.right div.messages:hover {
background: #dceffa;
}
article div.right div.messages p{
margin: 0;
padding: 0;
}
article div.right div.activity {
border: 1px solid #d6d6d6;
width: 614px;
border-radius: 5px;
padding: 6px;
margin-top: 15px;
color: #333;
}
article div.right div.activity div.top div.image {
float: left;
}
article div.right div.activity div.top div.text {
float: left;
padding-left: 10px;
font-size: 12px;
}
article div.right div.activity div.top div.text span.name {
font-weight: 700;
}
article div.right div.activity div.top div.text span.date {
font-size: 11px;
}
article div.right div.activity div.top div.text span.subject img {
cursor: pointer;
}
article div.right div.activity div.fulltext {
font-size: 12px;
padding-top: 10px;
display: none;
}
/* Admin page */
.admin-preferences ul {
list-style: none;
margin: 0;
padding: 0;
margin-top: 20px;
width: 215px;
text-align: left;
}
.admin-preferences ul li{
padding-top: 5px;
padding-bottom: 5px;
width: 215px;
}
.admin-preferences ul li.active, .admin-preferences ul li:hover {
background: #dcecfa;
}
.admin-preferences ul li a{
color: #575756;
text-decoration: none;
padding-top: 5px;
padding-bottom: 5px;
padding-left: 15px;
}
.right div.leftlist {
float: left;
width: 200px;
margin: 0px 0px 10px 0px;
}
.right div.rightlist {
float: left;
width: 400px;
font-size: 12px;
color: #575756;
margin: 0px 0px 10px 0px;
}
.right div.rightlist div.check {
float: left;
}
.right div.rightlist div.forcheck {
float: left;
margin: 1px 0px 0px 5px;
}
.right div.rightlist textarea {
height: 110px;
width: 340px;
border: 1px solid #dedede;
border-radius: 4px;
padding: 5px;
font-family: Tahoma, Arial;
font-size: 12px;
}
/* Admin-members page */
.right table div.img {
float: left;
}
.right table div.radio {
float: left;
margin: 5px 0px 0px 0px;
}
.right table div.forimg {
float: left;
margin: 5px 0px 0px 5px;
}
.right table div.forradio {
float: left;
margin: 5px 0px 0px 5px;
}
.right table span.niceCheck-main {
margin-top: 3px;
}
.right div.admin-search {
float: left;
}
.right div.admin-role {
float: left;
}
.right div.admin-search input {
width: 300px;
margin-right: 5px;
height: 23px;
border: 1px solid #dedede;
border-radius: 3px;
margin-top: 1px;
font-size: 12px;
font-family: Tahoma, Arial;
padding-left: 5px;
}
.right div.admin-search input.gray {
color: #cfcfcf;
}
.right div.admin-search input.black {
color: #333333;
}
.right div.admin-add {
float: left;
padding-top: 1px;
margin-left: 5px;
}
.right div.admin-add a {
width: 86px;
text-align: center;
padding-bottom: 5px;
}
/* Input elements */
.niceRadio {
width: 17px;
height: 17px;
display: inline-block;
cursor: pointer;
background: image-url("radio.png");
overflow: hidden;
}
.radioChecked {
background-position: 0 -17px;
}
.niceRadio input {
margin-left: -18px;
}
.sel80 {
width: 200px;
padding-bottom: 4px;
text-align: left;
}
.lineForm,
.lineForm3 {
margin-bottom: 0px;
}
.niceCheck {
width: 17px;
height: 17px;
display: inline-block;
cursor: pointer;
background: image-url("checkbox.png");
}
.niceCheck input {
display: none;
}
.niceCheck-main {
width: 18px;
height: 18px;
display: inline-block;
cursor: pointer;
background: image-url("checkbox-main.png");
}
.niceCheck-main input {
display: none;
}
/* Admin build project */
section.left {
float: left;
text-align: left;
width: 230px;
margin-left: 250px;
}
section.right {
float: right;
text-align: left;
width: 200px;
margin-right: 250px;
}
section .left {
float: left;
margin-right: 4px;
}
/* Commits history */
article .fright {
float: right;
}
article .fright p{
margin: 0;
padding: 5px 5px 0px 0px;
}
article .date-block {
width: 100%;
margin-top: 17px;
}
article .date-block div.date {
float: left;
background: #bedbf6;
color: #477cae;
border: 1px solid #98bede;
-moz-border-radius-topleft: 4px;
-moz-border-radius-topright: 0px;
-moz-border-radius-bottomright: 0px;
-moz-border-radius-bottomleft: 4px;
-webkit-border-radius: 4px 0px 0px 4px;
border-radius: 4px 0px 0px 4px;
width: 65px;
height: 55px;
padding: 10px;
padding-top: 20px;
-webkit-box-shadow: -1px 0px 0px 1px rgba(0, 0, 0, 0.1);
-moz-box-shadow: -1px 0px 0px 1px rgba(0, 0, 0, 0.1);
box-shadow: -1px 0px 0px 1px rgba(0, 0, 0, 0.1);
font-size: 14px;
text-align: center;
}
article .date-block div.messages {
float: left;
border: 1px solid #cfdde7;
-moz-border-radius-topleft: 0px;
-moz-border-radius-topright: 4px;
-moz-border-radius-bottomright: 4px;
-moz-border-radius-bottomleft: 4px;
-webkit-border-radius: 0px 4px 4px 4px;
border-radius: 0px 4px 4px 4px;
padding: 10px;
padding-bottom: 0px;
width: 746px;
}
article .date-block div.message {
border: 1px solid #d6d6d6;
-moz-border-radius-topleft: 4px;
-moz-border-radius-topright: 4px;
-moz-border-radius-bottomright: 4px;
-moz-border-radius-bottomleft: 4px;
-webkit-border-radius: 4px 4px 4px 4px;
border-radius: 4px 4px 4px 4px;
padding: 6px;
margin-bottom: 10px;
}
article .date-block div.message div.body {
float: left;
text-align: left;
}
article .date-block div.message div.code {
float: right;
margin: -7px 0px 0px 640px;
position: absolute;
}
article .date-block div.code div.top {
width: 90px;
height: 22px;
border: 1px solid #9dbcd5;
background: #cbdeef;
}
article .date-block div.code div.bottom {
width: 90px;
text-align: right;
}
article .date-block div.code div.left {
float: left;
width: 13px;
height: 13px;
padding-left: 2px;
padding-top: 4px;
}
article .date-block div.code div.right {
float: right;
border: 1px solid #bcd5ea;
background: #FFF;
font-size: 12px;
width: 65px;
height: 14px;
margin: 2px;
padding: 0px 2px 2px 0px;
text-align: center;
}
article .date-block div.image {
float: left;
}
article .date-block div.text {
float: left;
padding-left: 10px;
font-size: 12px;
}
article .date-block div.text span.name {
font-weight: 700;
}
article .date-block div.text span.date {
font-size: 11px;
}
article .date-block div.text span.subject img {
cursor: pointer;
}
article .date-block div.fulltext {
font-size: 12px;
padding-top: 10px;
display: none;
/*width: 640px;*/
}
article div.year {
background: #e9f4fb;
border: 1px solid #dfeefa;
border-radius: 5px;
width: 760px;
color: 477cae;
text-align: center;
font-size: 12px;
padding: 4px;
margin-left: 87px;
margin-top: 30px;
margin-bottom: 30px;
}
article div.year p{
margin: 0;
padding: 0;
color: #477CAE;
}

View File

@ -109,10 +109,9 @@ class CollaboratorsController < ApplicationController
if flash[k].size > 0
flash[k] = flash[k].map{|i| (i.is_a? Array) ? sprintf(i.first, i.last) : i}.join('; ')
else
flash[k] = nil
flash.delete k
end
end
flash.delete_if{|k, v| v.nil?}
redirect_to(edit_project_collaborators_path(@project))
end

View File

@ -14,7 +14,7 @@ class CommentsController < ApplicationController
def create
@comment = @commentable.comments.build(params[:comment]) if @commentable.class == Issue
@comment = Comment.new(params[:comment].merge(:commentable_id => @commentable.id, :commentable_type => @commentable.class.name, :project => @project)) if @commentable.class == Grit::Commit
@comment = Comment.new(params[:comment].merge(:commentable_id => @commentable.id.hex, :commentable_type => @commentable.class.name, :project => @project)) if @commentable.class == Grit::Commit
@comment.user = current_user
if @comment.save
flash[:notice] = I18n.t("flash.comment.saved")

View File

@ -19,10 +19,9 @@ class Group < ActiveRecord::Base
attr_readonly :uname, :own_projects_count
delegate :ssh_key, :to => :owner
delegate :ssh_key, :email, :to => :owner
after_create :add_owner_to_members
after_initialize lambda {|r| r.name ||= r.uname } # default
include Modules::Models::PersonalRepository
# include Modules::Models::Owner

View File

@ -1,7 +1,6 @@
# -*- encoding : utf-8 -*-
class PrivateUser < ActiveRecord::Base
require 'digest/sha2'
require 'active_support/secure_random'
belongs_to :platform
belongs_to :user

View File

@ -153,7 +153,7 @@ class Project < ActiveRecord::Base
class << self
def commit_comments(commit, project)
comments = Comment.where(:commentable_id => commit.id, :commentable_type => 'Grit::Commit').order(:created_at)
comments = Comment.where(:commentable_id => commit.id.hex, :commentable_type => 'Grit::Commit').order(:created_at)
comments.each {|x| x.project = project; x.helper}
end
end

View File

@ -1,5 +0,0 @@
/* Welcome to Compass. Use this file to write IE specific override styles.
* Import this file using the following HTML or equivalent:
* <!--[if IE]>
* <link href="/stylesheets/ie.css" media="screen, projection" rel="stylesheet" type="text/css" />
* <![endif]--> */

View File

@ -1,3 +0,0 @@
/* Welcome to Compass. Use this file to define print styles.
* Import this file using the following HTML or equivalent:
* <link href="/stylesheets/print.css" media="print" rel="stylesheet" type="text/css" /> */

View File

@ -1,6 +0,0 @@
/* Welcome to Compass.
* In this file you should write your main styles. (or centralize your imports)
* Import this file using the following HTML or equivalent:
* <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css" /> */
@import "compass/reset";

View File

@ -16,7 +16,8 @@
= f.text_field :email, :class => "text_field"
.group.navform.wat-cf
%button.button{ :tyle => "submit" }
#{image_tag("web-app-theme/icons/tick.png", :alt => t("devise.confirmations.send"))} #{t("devise.confirmations.send")}
%button.button{:tyle => "submit"}
= image_tag("web-app-theme/icons/tick.png", :alt => t("devise.confirmations.send"))
= t("devise.confirmations.send")
%span.text_button_padding
= render :partial => "devise/shared/links"
= render :partial => "devise/shared/links"

View File

@ -21,7 +21,8 @@
= f.text_field :password_confirmation, :class => "text_field"
.group.navform.wat-cf
%button.button{ :tyle => "submit" }
#{image_tag("web-app-theme/icons/application_edit.png", :alt => t("devise.passwords.edit_button"))} #{t("devise.passwords.edit_button")}
%button.button{:tyle => "submit"}
= image_tag("web-app-theme/icons/application_edit.png", :alt => t("devise.passwords.edit_button"))
= t("devise.passwords.edit_button")
%span.text_button_padding
= render :partial => "devise/shared/links"

View File

@ -15,7 +15,8 @@
= f.text_field :email, :class => "text_field"
.group.navform.wat-cf
%button.button{ :tyle => "submit" }
#{image_tag("web-app-theme/icons/tick.png", :alt => t("devise.passwords.button"))} #{t("devise.passwords.button")}
%button.button{:tyle => "submit"}
= image_tag "web-app-theme/icons/tick.png", :alt => t("devise.passwords.button")
= t("devise.passwords.button")
%span.text_button_padding
= render :partial => "devise/shared/links"

View File

@ -66,8 +66,9 @@
= f.password_field :password_confirmation, :class => "text_field"
.group.navform.wat-cf
%button.button{ :type => "submit" }
#{image_tag("web-app-theme/icons/tick.png", :alt => t("devise.registrations.signed_up"))} #{t("layout.save")}
%button.button{:type => "submit"}
= image_tag("web-app-theme/icons/tick.png", :alt => t("devise.registrations.signed_up"))
= t("layout.save")
= link_to image_tag("web-app-theme/icons/cross.png", :alt => t("devise.registrations.cancel")) + " " + t("devise.registrations.cancel"), registration_path(resource_name), :method => :delete, :class => "button", :confirm => t("devise.registrations.cancel_confirmation")

View File

@ -44,7 +44,8 @@
= f.select :language, User::LANGUAGES_FOR_SELECT
.group.navform.wat-cf
%button.button{ :type => "submit" }
#{image_tag("web-app-theme/icons/tick.png", :alt => t("devise.registrations.sign_up_header"))} #{t("devise.registrations.sign_up_header")}
%button.button{:type => "submit"}
= image_tag("web-app-theme/icons/tick.png", :alt => t("devise.registrations.sign_up_header"))
= t("devise.registrations.sign_up_header")
%span.text_button_padding
= render :partial => "devise/shared/links"

View File

@ -6,20 +6,17 @@
- flash.each do |key, value|
.message{ :title => key.to_s.humanize, :class => (key == :alert ? "error" : key) }
%p= value
- form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => { :class => "form login" }) do |f|
= form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => { :class => "form login" }) do |f|
.group.wat-cf
.left
= f.label :login, :class => "label right"
.right
= f.text_field :login, :class => "text_field"
.left= f.label :login, :class => "label right"
.right= f.text_field :login, :class => "text_field"
.group.wat-cf
.left
= f.label :password, :class => "label right"
.right
= f.password_field :password, :class => "text_field"
.left= f.label :password, :class => "label right"
.right= f.password_field :password, :class => "text_field"
.group.navform.wat-cf
.right
%button.button{ :type => "submit" }
%img{ :src => "/images/web-app-theme/icons/key.png", :alt => "Save" }= t("layout.login")
%button.button{:type => "submit"}
= image_tag 'web-app-theme/icons/key.png', :alt => "Save"
= t("layout.login")
%span.text_button_padding
= render :partial => "devise/shared/links"

View File

@ -1,13 +0,0 @@
= javascript_include_tag(Rails.env.production? ? 'https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js' : 'jquery.min.js')
= javascript_include_tag 'jquery-ui-1.8.16.custom.min.js'
-# fall back to local jQuery if necessary
:javascript
!window.jQuery && document.write(unescape('%3Cscript src="/javascripts/jquery.min.js"%3E%3C/script%3E'))
-#= include_javascripts :application
= javascript_include_tag "rails", "application", "drop_down_menu"
-# Append your own using content_for :javascripts
= yield :javascripts

View File

@ -1,6 +0,0 @@
-#= include_stylesheets :application
= stylesheet_link_tag "web-app-theme/base.css", "web-app-theme/themes/default/style.css", "web-app-theme/override.css", "git/style.css"
= stylesheet_link_tag "jquery-ui-1.8.16.custom.css", "datatable.css", "patches.css"
= yield :stylesheets

View File

@ -1,59 +1,49 @@
!!!
%html
%head
%meta{:content => "text/html; charset=utf-8", "http-equiv" => "Content-Type"}
%title= choose_title
= render :partial => "layouts/stylesheets"
= render :partial => "layouts/javascripts"
= stylesheet_link_tag 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.17/themes/base/jquery-ui.css', :media => 'screen, projection'
= stylesheet_link_tag "application"
= javascript_include_tag "application"
= csrf_meta_tag
%body
#container
#header
%h1
%a{:href => "/"}= choose_title
#user-navigation
%ul.wat-cf
%li= link_to current_user.uname, edit_user_registration_path
%li= link_to t('layout.logout'), destroy_user_session_path, :method => :delete, :class => "logout"
#main-navigation
%ul.wat-cf
-if can? :index, User
%li{:class => controller.controller_path == 'users' ? 'active' : '' }
%a{:href => users_path}= t("layout.menu.users")
-if can? :index, Platform
%li{:class => controller.controller_path == 'platforms' ? 'active' : '' }
%a{:href => platforms_path}= t("layout.menu.platforms")
-if can? :index, Project
%li{:class => controller.controller_path == 'projects' ? 'active' : '' }
%a{:href => projects_path}= t("layout.menu.projects")
-if can? :index, Group
%li{:class => controller.controller_path == 'groups' ? 'active' : '' }
%a{:href => groups_path}= t("layout.menu.groups")
-if can? :index, Download
%li{:class => controller.controller_path == 'downloads' ? 'active' : '' }
%a{:href => downloads_path}= t("layout.menu.downloads")
-if can? :index, EventLog
%li{:class => controller.controller_path == 'event_logs' ? 'active' : '' }
%a{:href => event_logs_path}= t("layout.menu.event_logs")
-if can? :index, BuildList
%li{:class => controller.controller_path == 'build_lists' ? 'active' : '' }
%a{:href => build_lists_path}= t("layout.menu.build_lists")
-if can? :platforms, Category
%li{:class => controller.controller_path == 'categories' ? 'active' : '' }
%a{:href => catalogs_path}= t("layout.menu.categories")
-if can? :read, current_user.personal_repository
%li{:class => controller.controller_path == 'personal_repositories' ? 'active' : '' }
%a{:href => personal_repository_path( current_user.personal_repository.id )}= t("layout.menu.personal_repository")
- if can? :index, AutoBuildList
%li{:class => controller.controller_path == 'auto_build_lists' ? 'active' : '' }
%a{:href => auto_build_lists_path}= t("layout.menu.auto_build_lists")
#wrapper.wat-cf
= render :partial => "layouts/flashes"
#main
= yield
#footer
.block
= yield :footer
#sidebar
= yield :sidebar
.wrap
%header
.left
.middle
%menu
= render 'layouts/menu/top'
.logo= image_tag 'logo-mini.png', :alt => 'logo'
.information
.search
.pic
.field
%input.gray{:onclick => "if(this.value=='#{t "layout.search"}'){this.value='';this.className='black';}", :onblur => "if(this.value==''){this.value='#{t "layout.search"}';this.className='gray';}", :type => "text", :value => "#{t "layout.search"}"}
.avatar{:onclick => "droplist();"}= image_tag 'ava.png', :alt => 'avatar', :height => "30"
.profile{:onclick => "droplist();"}
%a{:href => "#", :onclick => "droplist();"}
= current_user.uname
= image_tag 'expand-white.png', :alt => 'ex'
.both
.droplist-wrap
#droplist.droplist
.a= link_to current_user.uname, current_user
.a= link_to t('layout.settings.label'), edit_user_registration_path
.a= link_to t('layout.logout'), destroy_user_session_path, :method => :delete
.right
.both
- if content_for?(:sub_menu)
.sub-menu= yield :sub_menu
.both
= render "layouts/flashes"
%article
- if content_for?(:sidebar)
%aside= yield :sidebar
.right= yield
- else
.all= yield
.both
%footer= render "layouts/menu/bottom"

View File

@ -0,0 +1,19 @@
%ul
%li
= image_tag 'square.png'
= t('bottom_menu.copyright')
%li
= image_tag 'square.png'
= image_tag 'flag.png', :alt => 'flag'
%li
= image_tag 'square.png'
= link_to t('bottom_menu.about'), '#'
%li
= image_tag 'square.png'
= link_to t('bottom_menu.contacts'), '#'
%li
= image_tag 'square.png'
= link_to t('bottom_menu.tos'), '#'
%li
= image_tag 'square.png'
= link_to t('bottom_menu.security'), '#'

View File

@ -0,0 +1,4 @@
%ul
- (collection = t 'top_menu').each do |base, title|
- if can? :index, base.to_s.classify.constantize
%li= link_to title, send(:"#{base}_path"), :class => [].tap{|c| c << 'first' if collection.first.first == base; c << 'active' if params[:controller] == base.to_s}.join(' ')

View File

@ -1,11 +1,10 @@
!!!
%html
%head
%meta{:content => "text/html; charset=utf-8", "http-equiv" => "content-type"}
= display_meta_tags :site => APP_CONFIG['project_name']
= render :partial => "layouts/javascripts"
-#= include_stylesheets :sessions
= stylesheet_link_tag "web-app-theme/base.css", "web-app-theme/themes/default/style.css", "web-app-theme/override.css"
= stylesheet_link_tag "application"
= javascript_include_tag "application"
= csrf_meta_tag
%body
#container

View File

@ -1,68 +1,67 @@
- content_for :javascripts do
:javascript
$(function(){
$(".chooser").click(function() {
var for_element = this.name.replace(/_chooser/,"");
$("#" + for_element).attr("disabled", (this.value !== "1"));
});
$(".cron").change(function() {
var minute, hour, day, month, weekday;
minute = getSelected('minute');
hour = getSelected('hour');
day = getSelected('day');
month = getSelected('month');
weekday = getSelected('weekday');
$("#cron").attr("value", minute + " " + hour + " " + day + " " + month + " " + weekday);
return false;
});
$("#product_use_cron").change(function(){
if ($("#product_use_cron:checked").length > 0) {
$("#cron").attr("disabled", false);
} else {
$("#cron").attr("disabled", true);
}
});
$("#genereator_btn a").click(function(){
$("#crontab_generator").slideToggle(function(){
if ($("#crontab_generator").css("display") == "none") {
$("#genereator_btn a").text("#{t("layout.products.cron_tab_generator.show")}");
} else {
$("#genereator_btn a").text("#{t("layout.products.cron_tab_generator.hide")}");
}
});
return false;
});
:javascript
$(function(){
$(".chooser").click(function() {
var for_element = this.name.replace(/_chooser/,"");
$("#" + for_element).attr("disabled", (this.value !== "1"));
});
function getSelected(name) {
var chosen;
$(".cron").change(function() {
var minute, hour, day, month, weekday;
if ($("#" + name + "_chooser_every").attr("checked")) {
chosen = '*';
minute = getSelected('minute');
hour = getSelected('hour');
day = getSelected('day');
month = getSelected('month');
weekday = getSelected('weekday');
$("#cron").attr("value", minute + " " + hour + " " + day + " " + month + " " + weekday);
return false;
});
$("#product_use_cron").change(function(){
if ($("#product_use_cron:checked").length > 0) {
$("#cron").attr("disabled", false);
} else {
var all_selected = [];
$("#" + name + " option:selected").each(function(i, ele) { all_selected.push($(ele).attr("value")); });
if (all_selected.length) {
chosen = all_selected.join(",");
} else {
chosen = '*';
}
$("#cron").attr("disabled", true);
}
});
return chosen;
$("#genereator_btn a").click(function(){
$("#crontab_generator").slideToggle(function(){
if ($("#crontab_generator").css("display") == "none") {
$("#genereator_btn a").text("#{t("layout.products.cron_tab_generator.show")}");
} else {
$("#genereator_btn a").text("#{t("layout.products.cron_tab_generator.hide")}");
}
});
return false;
});
});
function getSelected(name) {
var chosen;
if ($("#" + name + "_chooser_every").attr("checked")) {
chosen = '*';
} else {
var all_selected = [];
$("#" + name + " option:selected").each(function(i, ele) { all_selected.push($(ele).attr("value")); });
if (all_selected.length) {
chosen = all_selected.join(",");
} else {
chosen = '*';
}
}
return chosen;
}
.group
= form.check_box :use_cron

View File

@ -16,6 +16,3 @@
%th.last &nbsp;
%tbody
%br
= content_for :javascripts do
= javascript_include_tag 'jquery.dataTables.min.js'

View File

@ -39,8 +39,8 @@
= link_to t("layout.wiki.preview"), "javascript:void(0)", :id => "gollum-editor-preview",
:class => "minibutton", :title => t("layout.wiki.preview_title"), :'data-url' => preview_project_wiki_index_path(@project)
- content_for :javascripts do
= javascript_include_tag 'gollum/editor/gollum.editor.js'
- content_for :stylesheets do
= stylesheet_link_tag 'gollum/editor.css'
/ - content_for :javascripts do
/ = javascript_include_tag 'gollum/editor/gollum.editor.js'
/
/ - content_for :stylesheets do
/ = stylesheet_link_tag 'gollum/editor.css'

View File

@ -1,5 +1,5 @@
- content_for :javascripts do
= javascript_include_tag 'gollum/gollum.js', 'gollum/gollum.dialog.js', 'gollum/gollum.placeholder.js'
- content_for :stylesheets do
= stylesheet_link_tag 'gollum/gollum.css', 'gollum/dialog.css', 'gollum/ie7.css', 'gollum/template.css'
/ - content_for :javascripts do
/ = javascript_include_tag 'gollum/gollum.js', 'gollum/gollum.dialog.js', 'gollum/gollum.placeholder.js'
/
/ - content_for :stylesheets do
/ = stylesheet_link_tag 'gollum/gollum.css', 'gollum/dialog.css', 'gollum/ie7.css', 'gollum/template.css'

View File

@ -5,7 +5,12 @@ require 'rails/all'
# If you have a Gemfile, require the gems listed there, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(:default, Rails.env) if defined?(Bundler)
if defined?(Bundler)
# If you precompile assets before deploying to production, use this line
Bundler.require *Rails.groups(:assets => %w(development test))
# If you want your assets lazily compiled in production, use this line
# Bundler.require(:default, :assets, Rails.env)
end
module Rosa
class Application < Rails::Application
@ -42,5 +47,11 @@ module Rosa
# Configure sensitive parameters which will be filtered from the log file.
config.filter_parameters += [:password]
# Enable the asset pipeline
config.assets.enabled = true
# Version of your assets, change this if you want to expire all your assets
config.assets.version = '1.0'
end
end

View File

@ -1,16 +0,0 @@
javascripts:
application:
- public/javascripts/application.js
- public/javascripts/drop_down_menu.js
stylesheets:
application:
- public/stylesheets/web-app-theme/base.css
- public/stylesheets/web-app-theme/themes/default/style.css
- public/stylesheets/web-app-theme/override.css
- public/stylesheets/git/style.css
sessions:
- public/stylesheets/web-app-theme/base.css
- public/stylesheets/web-app-theme/themes/default/style.css
- public/stylesheets/web-app-theme/override.css

View File

@ -1,16 +0,0 @@
# -*- encoding : utf-8 -*-
# This configuration file works with both the Compass command line tool and within Rails.
# Require any additional compass plugins here.
project_type = :rails
project_path = Compass::AppIntegration::Rails.root
environment = Compass::AppIntegration::Rails.env
# Set this to the root of your project when deployed:
http_path = "/"
css_dir = "public/stylesheets/compiled"
sass_dir = "app/stylesheets"
javascripts_dir = "public/javascripts"
http_stylesheets_path = "/stylesheets"
http_javascripts_path = "/javascripts"

View File

@ -1,4 +1,5 @@
# -*- encoding : utf-8 -*-
$:.unshift File.expand_path('.')
$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
set :rvm_type, :user
@ -28,9 +29,9 @@ set :scm, :git
set :repository, "git@github.com:warpc/rosa-build.git"
set :deploy_via, :remote_cache
require './lib/recipes/nginx'
require './lib/recipes/unicorn'
require './lib/recipes/bluepill'
require 'lib/recipes/nginx'
require 'lib/recipes/unicorn'
require 'lib/recipes/bluepill'
namespace :deploy do
task :stub_xml_rpc do

View File

@ -23,6 +23,18 @@ Rosa::Application.configure do
# Only use best-standards-support built into browsers
config.action_dispatch.best_standards_support = :builtin
# Do not compress assets
config.assets.compress = false
# Expands the lines which load the assets
config.assets.debug = true
# Raise exception on mass assignment protection for Active Record models
config.active_record.mass_assignment_sanitizer = :strict
# Log the query plan for queries taking more than this (works with SQLite, MySQL, and PostgreSQL)
config.active_record.auto_explain_threshold_in_seconds = 0.5
end
require 'stub_xml_rpc'

View File

@ -48,6 +48,15 @@ Rosa::Application.configure do
# Send deprecation notices to registered listeners
config.active_support.deprecation = :notify
# Compress JavaScripts and CSS
config.assets.compress = true
# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false
# Generate digests for assets URLs
config.assets.digest = true
end
# require 'stub_xml_rpc'

View File

@ -34,6 +34,13 @@ Rosa::Application.configure do
# Print deprecation notices to the stderr
config.active_support.deprecation = :stderr
# Configure static asset server for tests with Cache-Control for performance
config.serve_static_assets = true
config.static_cache_control = "public, max-age=3600"
# Allow pass debug_assets=true as a query parameter to load pages with unpackaged assets
config.assets.allow_debugging = true
end
require 'stub_xml_rpc' # TODO stub XML calls through stubbers

View File

@ -1,12 +1,17 @@
en:
errors:
messages:
expired: "has expired, please request a new one"
not_found: "not found"
already_confirmed: "was already confirmed"
already_confirmed: "was already confirmed, please try signing in"
not_locked: "was not locked"
not_saved:
one: "1 error prohibited this %{resource} from being saved:"
other: "%{count} errors prohibited this %{resource} from being saved:"
devise:
failure:
already_authenticated: 'You are already signed in.'
unauthenticated: 'You need to sign in or sign up before continuing.'
unconfirmed: 'You have to confirm your account before continuing.'
locked: 'Your account is locked.'
@ -20,23 +25,27 @@ en:
passwords:
send_instructions: 'You will receive an email with instructions about how to reset your password in a few minutes.'
updated: 'Your password was changed successfully. You are now signed in.'
button: 'Submit'
edit_button: 'Change my password'
updated_not_active: 'Your password was changed successfully.'
send_paranoid_instructions: "If your e-mail exists on our database, you will receive a password recovery link on your e-mail"
confirmations:
send_instructions: 'You will receive an email with instructions about how to confirm your account in a few minutes.'
send_paranoid_instructions: 'If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.'
confirmed: 'Your account was successfully confirmed. You are now signed in.'
registrations:
signed_up: 'You have signed up successfully. If enabled, a confirmation was sent to your e-mail.'
signed_up: 'Welcome! You have signed up successfully.'
signed_up_but_unconfirmed: 'A message with a confirmation link has been sent to your email address. Please open the link to activate your account.'
signed_up_but_inactive: 'You have signed up successfully. However, we could not sign you in because your account is not yet activated.'
signed_up_but_locked: 'You have signed up successfully. However, we could not sign you in because your account is locked.'
updated: 'You updated your account successfully.'
update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address."
destroyed: 'Bye! Your account was successfully cancelled. We hope to see you again soon.'
sign_up_header: 'Signup'
edit_password_description: Leave blank if you don't want to change it
current_password_description: 'We need your current password to confirm your changes'
cancel: 'Cancel my account'
cancel_confirmation: 'Are you sure?'
unlocks:
send_instructions: 'You will receive an email with instructions about how to unlock your account in a few minutes.'
unlocked: 'Your account was successfully unlocked. You are now signed in.'
unlocked: 'Your account has been unlocked successfully. Please sign in to continue.'
send_paranoid_instructions: 'If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.'
omniauth_callbacks:
success: 'Successfully authorized from %{kind} account.'
failure: 'Could not authorize you from %{kind} because "%{reason}".'
mailer:
confirmation_instructions:
subject: 'Confirmation instructions'

View File

@ -1,7 +1,7 @@
ru:
errors:
messages:
expired: "устарела. Пожалуйста, запросите новую"
expired: "истекла, пожалуйста запросите новую"
not_found: "не найдена"
already_confirmed: "уже подтверждена. Пожалуйста, попробуйте войти в систему"
not_locked: "не заблокирована"
@ -13,54 +13,42 @@ ru:
devise:
failure:
already_authenticated: "Вы уже вошли в систему."
unauthenticated: 'Вы должны войти или зарегистрироваться, прежде чем сможете продолжить.'
unconfirmed: 'Вы должны подтвердить вашу учетную запись, прежде чем сможете продолжить.'
locked: 'Ваша учетная запись заблокирована.'
invalid: 'Неверный пароль или адрес электронной почты.'
invalid_token: 'Неверный ключ аутентификации.'
timeout: 'Ваша сессия закончена. Пожалуйста, войдите еще раз, чтобы продолжить.'
inactive: 'Ваша учетная запись еще не активирована.'
already_authenticated: 'Вы уже вошли в систему.'
unauthenticated: "Вам необходимо войти в систему или зарегистрироваться."
unconfirmed: "Вы должны подтвердить вашу учётную запись."
locked: "Ваша учётная запись заблокирована."
invalid: "Неверный адрес e-mail или пароль."
invalid_token: "Неверный ключ аутентификации."
timeout: "Ваш сеанс закончился. Пожалуйста, войдите в систему снова."
inactive: "Ваша учётная запись ещё не активирована."
sessions:
link: 'Войти'
signed_in: 'Вы вошли.'
signed_out: 'Вы вышли.'
signed_in: "Вход в систему выполнен."
signed_out: "Выход из системы выполнен."
passwords:
link: 'Забыли пароль?'
button: 'Восстановить'
send_instructions: 'Вы получите письмо с инструкциями о том, как сбросить ваш пароль, через несколько минут.'
send_paranoid_instructions: "Если ваш адрес e-mail есть в нашей базе данных, то в течение нескольких минут вы получите письмо с инструкциями по восстановлению вашего пароля."
updated: 'Ваш пароль изменен. Теперь вы можете войти.'
edit: 'Изменение пароля'
edit_button: 'Изменить пароль'
send_instructions: "В течение нескольких минут вы получите e-mail с инструкциями по восстановлению вашего пароля."
updated: "Ваш пароль изменён. Теперь вы вошли в систему."
updated_not_active: 'Ваш пароль успешно изменён.'
send_paranoid_instructions: "Если Ваш e-mail существует, в течение нескольких минут вы получите e-mail с инструкциями по восстановлению вашего пароля."
confirmations:
link: "Не получили инструкции для подтверждения учетной записи?"
send_instructions: 'Вы получите письмо с инструкциями о том, как подтвердить вашу учетную запись.'
send_paranoid_instructions: "Если ваш адрес e-mail есть в нашей базе данных, то в течение нескольких минут вы получите письмо с инструкциями по подтверждению вашей учётной записи."
confirmed: 'Ваша учетная запись успешно подтверждена. Добро пожаловать.'
resend_header: 'Повторная отправка инструкций для подтверждения учетной записи'
send: "Отправить"
send_instructions: "В течение нескольких минут вы получите e-mail с инструкциями по подтверждению вашей учётной записи."
send_paranoid_instructions: 'Если Ваш e-mail существует, то в течение нескольких минут вы получите e-mail с инструкциями по подтверждению вашей учётной записи.'
confirmed: "Ваша учётная запись подтверждена. Теперь вы вошли в систему."
error: "Неверный код подтверждения."
registrations:
link: 'Регистрация'
signed_up: 'Вы успешно зарегистрировались.'
inactive_signed_up: "Добро пожаловать! Вы успешно зарегистрировались. Но пока вы не можете войти в систему, т.к. ваша учётная запись %{reason}."
updated: 'Ваша учетная запись изменена.'
destroyed: 'До свидания! Ваша учетная запись удалена. Надеемся вскоре снова вас увидеть.'
sign_up_header: 'Регистрация'
edit: 'Редактировать'
edit_password_description: 'Оставьте пароль пустым, если не хотите его менять'
current_password_description: 'Нам нужен ваш текущий пароль для подтверждения изменения'
cancel: 'Удалить'
cancel_confirmation: 'Вы уверены, что хотите удалить учетную запись?'
signed_up: "Добро пожаловать! Вы успешно зарегистрировались."
signed_up_but_unconfirmed: 'Сообщение для подтверждения учетной записи было отправлено на Ваш email. Пожалуйста откройте ссылку из письма для активации.'
signed_up_but_inactive: "Добро пожаловать! Вы успешно зарегистрировались. Но пока вы не можете войти в систему, т.к. ваша учётная запись не активированна."
signed_up_but_locked: 'Добро пожаловать! Вы успешно зарегистрировались. Но пока вы не можете войти в систему, т.к. ваша учётная запись заблокированна.'
updated: "Ваша учётная запись изменена."
update_needs_confirmation: "Вы успешно обновили свой аккаунт, но нам необходимо проверить Ваш новый email адрес. Пожалуйста проверьте Ваш email и кликните по ссылке чтобы подтвердить Ваш новый email адрес."
destroyed: "До свидания! Ваша учётная запись удалена. Надеемся снова увидеть вас."
unlocks:
link: "Не получили инструкции для разблокировки учетной записи?"
send_instructions: 'Вы получите письмо с инструкциями о том, как разблокировать вашу учетную запись, через несколько минут.'
send_paranoid_instructions: "Если ваша учётная запись существует, то в течение нескольких минут вы получите письмо с инструкциями по её разблокировке."
unlocked: 'Ваша учетная запись разблокирована. Вы вошли.'
send_instructions: "В течение нескольких минут вы получите письмо с инструкциями по разблокировке вашей учётной записи."
unlocked: "Ваша учётная запись разблокирована. Теперь вы вошли в систему."
send_paranoid_instructions: 'Если ваша учетная запись существует, в течение нескольких минут вы получите письмо с инструкциями по разблокировке вашей учётной записи.'
omniauth_callbacks:
register: "Аутентификация прошла успешно, но необходимо уточнить дополнительные данные"
success: "Вход в систему выполнен с учётной записью из %{kind}."
failure: "Вы не можете войти в систему с учётной записью из %{kind}, т.к. \"%{reason}\"."
success: 'Успешная авторизация через %{kind}.'
failure: 'Не возможно авторизоваться через %{kind}, т.к. "%{reason}".'
mailer:
confirmation_instructions:
subject: "Инструкции по подтверждению учётной записи"

View File

@ -15,6 +15,7 @@ en:
filtered_label: (filtered from _MAX_)
layout:
search: Search
logged_in_as: You logged as
logout: Logout
user_list: User list
@ -42,6 +43,7 @@ en:
confirm: Sure?
back: Back
settings:
label: Settings
notifier: Notifier setting
notifiers:
edit_header: Notifier setting
@ -84,23 +86,6 @@ en:
time:
ago: ago
menu:
categories: Catalogue
containers: Containers
downloads: Statistics
event_logs: Event log
build_lists: Task monitoring
groups: Groups
platforms: Platforms
products: Products
projects: Projects
repositories: Repositories
rights: Rights
roles: Roles
users: Users
personal_repository: My repository
auto_build_lists: Automated build
sessions:
sign_in_header: Sign in
@ -366,6 +351,7 @@ en:
confirm: Sure?
back: Back
settings:
label: Settings
notifier: Notifier setting
notifiers:
edit_header: Notifier setting
@ -405,23 +391,6 @@ en:
Saturday: Saturday
Sunday: Sunday
menu:
categories: Catalogue
containers: Containers
downloads: Statistics
event_logs: Event log
build_lists: Task monitoring
groups: Groups
platforms: Platforms
products: Products
projects: Projects
repositories: Repositories
rights: Rights
roles: Roles
users: Users
personal_repository: My repository
auto_build_lists: Automated build
sessions:
sign_in_header: Sign in
@ -506,7 +475,7 @@ en:
clone: To clone
event_logs:
list:List
list: List
list_header: Event log
repositories:

View File

@ -0,0 +1,21 @@
en:
menu:
repositories: Repositories
personal_repository: My repository
products: Products
categories: Catalogue
auto_build_lists: Automated build
downloads: Statistics
top_menu:
platforms: Platforms
projects: Projects
build_lists: Task monitoring
users: Users
groups: Groups
event_logs: Event log
bottom_menu:
copyright: ROSA Lab © 2012
about: About company
contacts: Contacts
tos: Terms Of Service
security: Security

View File

@ -0,0 +1,21 @@
ru:
menu:
categories: Каталог
products: Продукты
repositories: Репозитории
personal_repository: Мой репозиторий
auto_build_lists: Авто. сборки
downloads: Статистика
top_menu:
platforms: Платформы
projects: Проекты
build_lists: Мониторинг задач
users: Пользователи
groups: Группы
event_logs: Лог событий
bottom_menu:
copyright: ROSA Лаб. © 2012
about: О компании
contacts: Контакты
tos: Условия использования
security: Безопасность

View File

@ -1,5 +1,4 @@
ru:
will_paginate:
previous_label: Предыдущая
next_label: Следующая
@ -16,6 +15,7 @@ ru:
filtered_label: (отфильтровано из _MAX_)
layout:
search: Поиск
logged_in_as: Вы вошли как
logout: Выйти
user_list: Список пользователей
@ -43,12 +43,13 @@ ru:
confirm: Уверены?
back: Назад
settings:
label: 'Настройки'
notifier: Настройки оповещений
notifiers:
edit_header: Настройки оповещений
processing: Обрабатывается...
invalid_content_type: имеет неверный тип
devise:
shared_links:
sign_in: Войти
@ -85,23 +86,6 @@ ru:
time:
ago: назад
menu:
categories: Каталог
containers: Контейнеры
downloads: Статистика
event_logs: Лог событий
build_lists: Мониторинг задач
groups: Группы
platforms: Платформы
products: Продукты
projects: Проекты
repositories: Репозитории
rights: Права
roles: Роли
users: Пользователи
personal_repository: Мой репозиторий
auto_build_lists: Авто. сборки
sessions:
sign_in_header: Вход в систему

View File

@ -3,9 +3,10 @@ Rosa::Application.routes.draw do
# XML RPC
match 'api/xmlrpc' => 'rpc#xe_index'
devise_for :users, :controllers => {:omniauth_callbacks => 'users/omniauth_callbacks'} do
devise_scope :user do
get '/users/auth/:provider' => 'users/omniauth_callbacks#passthru'
end
devise_for :users, :controllers => {:omniauth_callbacks => 'users/omniauth_callbacks'}
resources :users do
resources :groups, :only => [:new, :create, :index]

View File

@ -3,12 +3,18 @@ class DeviseCreateUsers < ActiveRecord::Migration
def self.up
create_table(:users) do |t|
t.string :name
t.database_authenticatable :null => false
t.recoverable
t.rememberable
## Database authenticatable
t.string :email, :null => false, :default => ""
t.string :encrypted_password, :null => false, :default => ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
t.timestamps
end
add_index :users, :email, :unique => true
add_index :users, :reset_password_token, :unique => true
end

View File

@ -0,0 +1,9 @@
class AddQueueToDelayedJobs < ActiveRecord::Migration
def self.up
add_column :delayed_jobs, :queue, :string
end
def self.down
remove_column :delayed_jobs, :queue
end
end

View File

@ -0,0 +1,12 @@
# -*- encoding : utf-8 -*-
class UpgradeDevise < ActiveRecord::Migration
def up
remove_column :users, :remember_token if User.column_names.include?('remember_token')
add_column :users, :reset_password_sent_at, :datetime unless User.column_names.include?('reset_password_sent_at')
end
def down
remove_column :users, :reset_password_sent_at if User.column_names.include?('reset_password_sent_at')
add_column :users, :remember_token, :string unless User.column_names.include?('remember_token')
end
end

View File

@ -0,0 +1,17 @@
class ChangeCommentableIdToDecimal < ActiveRecord::Migration
def up
add_column :comments, :commentable_id_tmp, :decimal, :precision => 50, :scale => 0
Comment.reset_column_information
Comment.all.each {|c| c.update_column :commentable_id_tmp, (c.commentable_type == 'Grit::Commit' ? c.commentable_id.hex : c.commentable_id.to_i)}
remove_column :comments, :commentable_id
rename_column :comments, :commentable_id_tmp, :commentable_id
end
def down
add_column :comments, :commentable_id_tmp, :string
Comment.reset_column_information
Comment.all.each {|c| c.update_column :commentable_id_tmp, (c.commentable_type == 'Grit::Commit' ? c.commentable_id.to_s(16) : c.commentable_id.to_s)}
remove_column :comments, :commentable_id
rename_column :comments, :commentable_id_tmp, :commentable_id
end
end

View File

@ -11,12 +11,12 @@
#
# It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20120131124517) do
ActiveRecord::Schema.define(:version => 20120206225130) do
create_table "arches", :force => true do |t|
t.string "name", :null => false
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
add_index "arches", ["name"], :name => "index_arches_on_name", :unique => true
@ -25,8 +25,8 @@ ActiveRecord::Schema.define(:version => 20120131124517) do
t.integer "user_id"
t.string "provider"
t.string "uid"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
add_index "authentications", ["provider", "uid"], :name => "index_authentications_on_provider_and_uid", :unique => true
@ -37,8 +37,8 @@ ActiveRecord::Schema.define(:version => 20120131124517) do
t.integer "arch_id"
t.integer "pl_id"
t.integer "bpl_id"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "build_list_items", :force => true do |t|
@ -46,8 +46,8 @@ ActiveRecord::Schema.define(:version => 20120131124517) do
t.integer "level"
t.integer "status"
t.integer "build_list_id"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "version"
end
@ -61,8 +61,8 @@ ActiveRecord::Schema.define(:version => 20120131124517) do
t.integer "project_id"
t.integer "arch_id"
t.datetime "notified_at"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.boolean "is_circle", :default => false
t.text "additional_repos"
t.string "name"
@ -85,25 +85,25 @@ ActiveRecord::Schema.define(:version => 20120131124517) do
t.string "name"
t.string "ancestry"
t.integer "projects_count", :default => 0, :null => false
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "comments", :force => true do |t|
t.string "commentable_id"
t.string "commentable_type"
t.integer "user_id"
t.text "body"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.decimal "commentable_id", :precision => 50, :scale => 0
end
create_table "containers", :force => true do |t|
t.string "name", :null => false
t.integer "project_id", :null => false
t.integer "owner_id", :null => false
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "delayed_jobs", :force => true do |t|
@ -115,8 +115,9 @@ ActiveRecord::Schema.define(:version => 20120131124517) do
t.datetime "locked_at"
t.datetime "failed_at"
t.string "locked_by"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "queue"
end
add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
@ -127,8 +128,8 @@ ActiveRecord::Schema.define(:version => 20120131124517) do
t.string "distro"
t.string "platform"
t.integer "counter", :default => 0
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "event_logs", :force => true do |t|
@ -143,15 +144,15 @@ ActiveRecord::Schema.define(:version => 20120131124517) do
t.string "controller"
t.string "action"
t.text "message"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "groups", :force => true do |t|
t.string "name"
t.integer "owner_id"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "uname"
t.integer "own_projects_count", :default => 0, :null => false
end
@ -163,8 +164,8 @@ ActiveRecord::Schema.define(:version => 20120131124517) do
t.string "title"
t.text "body"
t.string "status", :default => "open"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
add_index "issues", ["project_id", "serial_id"], :name => "index_issues_on_project_id_and_serial_id", :unique => true
@ -173,8 +174,8 @@ ActiveRecord::Schema.define(:version => 20120131124517) do
t.string "description"
t.string "name"
t.integer "parent_platform_id"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.boolean "released", :default => false
t.integer "owner_id"
t.string "owner_type"
@ -187,8 +188,8 @@ ActiveRecord::Schema.define(:version => 20120131124517) do
t.integer "platform_id"
t.string "login"
t.string "password"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "user_id"
end
@ -196,8 +197,8 @@ ActiveRecord::Schema.define(:version => 20120131124517) do
t.integer "product_id"
t.integer "status", :default => 2, :null => false
t.datetime "notified_at"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
add_index "product_build_lists", ["product_id"], :name => "index_product_build_lists_on_product_id"
@ -207,8 +208,8 @@ ActiveRecord::Schema.define(:version => 20120131124517) do
t.integer "platform_id", :null => false
t.integer "build_status", :default => 2, :null => false
t.string "build_path"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.text "build_script"
t.text "counter"
t.text "ks"
@ -228,8 +229,8 @@ ActiveRecord::Schema.define(:version => 20120131124517) do
t.string "name"
t.string "version"
t.datetime "file_mtime"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "platform_id"
end
@ -238,14 +239,14 @@ ActiveRecord::Schema.define(:version => 20120131124517) do
create_table "project_to_repositories", :force => true do |t|
t.integer "project_id"
t.integer "repository_id"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "projects", :force => true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "owner_id"
t.string "owner_type"
t.string "visibility", :default => "open"
@ -268,16 +269,16 @@ ActiveRecord::Schema.define(:version => 20120131124517) do
t.string "object_type"
t.integer "target_id"
t.string "target_type"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "role"
end
create_table "repositories", :force => true do |t|
t.string "description", :null => false
t.integer "platform_id", :null => false
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "name", :null => false
t.integer "owner_id"
t.string "owner_type"
@ -287,8 +288,8 @@ ActiveRecord::Schema.define(:version => 20120131124517) do
t.string "name", :null => false
t.integer "arch_id", :null => false
t.integer "project_id", :null => false
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
add_index "rpms", ["project_id", "arch_id"], :name => "index_rpms_on_project_id_and_arch_id"
@ -301,8 +302,8 @@ ActiveRecord::Schema.define(:version => 20120131124517) do
t.boolean "new_comment_reply", :default => true
t.boolean "new_issue", :default => true
t.boolean "issue_assign", :default => true
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.boolean "new_comment_commit_owner", :default => true
t.boolean "new_comment_commit_repo_owner", :default => true
t.boolean "new_comment_commit_commentor", :default => true
@ -312,27 +313,26 @@ ActiveRecord::Schema.define(:version => 20120131124517) do
t.string "subscribeable_id"
t.string "subscribeable_type"
t.integer "user_id"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.boolean "status", :default => true
t.integer "project_id"
end
create_table "users", :force => true do |t|
t.string "name"
t.string "email", :default => "", :null => false
t.string "encrypted_password", :limit => 128, :default => "", :null => false
t.string "password_salt", :default => "", :null => false
t.string "email", :default => "", :null => false
t.string "encrypted_password", :default => "", :null => false
t.string "reset_password_token"
t.string "remember_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.text "ssh_key"
t.string "uname"
t.string "role"
t.string "language", :default => "en"
t.integer "own_projects_count", :default => 0, :null => false
t.string "language", :default => "en"
t.integer "own_projects_count", :default => 0, :null => false
end
add_index "users", ["email"], :name => "index_users_on_email", :unique => true

View File

@ -0,0 +1,261 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Сборочная среда</title>
<script type="text/javascript" src="js/html5shiv.js"></script>
<link rel="stylesheet" type="text/css" href="styles/main.css" />
<script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
<script type='text/javascript' src='js/radio.js'></script>
<link href="styles/cusel.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" href="styles/blue/style.css" type="text/css" id="" media="print, projection, screen" />
<script type="text/javascript" src="js/cusel-2.5.js"></script>
<script type="text/javascript" src="js/cusel-init.js"></script>
<script type="text/javascript" src="js/all.js"></script>
<script type='text/javascript' src='js/checkbox-main.js'></script>
</head>
<body>
<div class="wrap">
<!--Top block-->
<header>
<div class="left">
</div>
<div class="middle">
<!--Main menu-->
<menu>
<ul>
<li>
<a href="#" class="first">Главная</a>
</li>
<li>
<a href="#" class="active">Проекты</a>
</li>
<li>
<a href="#">Группы</a>
</li>
<li>
<a href="#">Мониторинг</a>
</li>
<li>
<a href="#">Платформа</a>
</li>
<li>
<a href="#">Документация</a>
</li>
</ul>
<div class="logo">
<img src="pics/logo-mini.png" alt="logo" />
</div>
</menu>
<div class="information">
<!--Search-->
<div class="search">
<div class="pic">
</div>
<div class="field">
<input type="text" value="Поиск" class="gray" onClick="if(this.value=='Поиск'){this.value='';this.className='black';}" onblur="if(this.value==''){this.value='Поиск';this.className='gray';}" />
</div>
</div>
<div class="avatar" onclick="droplist();">
<img src="pics/ava.png" alt="avatar" height="30" />
</div>
<div class="profile" onclick="droplist();">
<a href="#" onclick="droplist();">mikimaus <img src="pics/expand-white.png" alt="ex" /></a>
</div>
<div class="both">
</div>
<div class="droplist-wrap">
<div class="droplist" id="droplist">
<div class="a"><a href="#">Публичный профиль</a></div>
<div class="a"><a href="#">Настройки</a></div>
<div class="a"><a href="#">Выйти</a></div>
</div>
</div>
</div>
</div>
<div class="right">
</div>
<div class="both">
</div>
</header>
<!--Submenu-->
<div class="sub-menu">
<div class="left">
WacomDrivers
</div>
<nav>
<ul>
<li>
<a href="#">Проект</a>
</li>
<li>
<a href="#">Коммиты</a>
</li>
<li>
<a href="#" class="active">Сборки</a>
</li>
<li>
<a href="#">Трекер</a>
</li>
<li>
<a href="#">Wiki</a>
</li>
<li>
<a href="#">Readme</a>
</li>
<li>
<a href="#">Настройки</a>
</li>
</ul>
</nav>
</div>
<div class="both">
</div>
<!--Page-->
<article>
<section class="left">
<h3>Version</h3>
<div class="lineForm">
<select class="sel80" id="country" name="country" tabindex="2">
<option selected="selected" value="1000">latest_master</option>
<option value="1">latest_beta</option>
<option value="2">v.1.1.0 beta</option>
<option value="2">v.1.0.2</option>
<option value="2">v.1.0.1</option>
<option value="2">v.1.0.0</option>
</select>
</div>
<h3>Platform</h3>
<div class="left">
<span class="niceCheck-main" onclick="changeCheck(this)" id="niceCheckbox1"><input type="checkbox" name="ch1" /></span>
</div>
<div class="left">
mandriva2011
</div>
<div class="both"></div>
<div class="left">
<span class="niceCheck-main" onclick="changeCheck(this)" id="niceCheckbox1"><input type="checkbox" name="ch1" /></span>
</div>
<div class="left">
naulinux
</div>
<div class="both"></div>
<div class="left">
<span class="niceCheck-main" onclick="changeCheck(this)" id="niceCheckbox1"><input type="checkbox" name="ch1" /></span>
</div>
<div class="left">
NauLinux_Nau57
</div>
<div class="both"></div>
<div class="left">
<span class="niceCheck-main" onclick="changeCheck(this)" id="niceCheckbox1"><input type="checkbox" name="ch1" /></span>
</div>
<div class="left">
mandriva_official_repos1
</div>
<div class="both"></div>
<h3>Update type</h3>
<div class="lineForm">
<select class="sel80" id="country2" name="country" tabindex="2">
<option selected="selected" value="1000">security</option>
<option value="1">plane</option>
<option value="2">version</option>
</select>
</div>
<h3>Preferences</h3>
<div class="left">
<span class="niceCheck-main" onclick="changeCheck(this)" id="niceCheckbox1"><input type="checkbox" name="ch1" /></span>
</div>
<div class="left">
Automated publishing
</div>
<div class="both"></div>
<div class="left">
<span class="niceCheck-main" onclick="changeCheck(this)" id="niceCheckbox1"><input type="checkbox" name="ch1" /></span>
</div>
<div class="left">
Dependable build requires
</div>
<div class="both"></div>
<br />
<a class="button" href="#">Начать сборку</a>
</section>
<section class="right">
<h3>Architecture</h3>
<div class="left">
<span class="niceCheck-main" onclick="changeCheck(this)" id="niceCheckbox1"><input type="checkbox" name="ch1" /></span>
</div>
<div class="left">
i386
</div>
<div class="both"></div>
<div class="left">
<span class="niceCheck-main" onclick="changeCheck(this)" id="niceCheckbox1"><input type="checkbox" name="ch1" /></span>
</div>
<div class="left">
i586
</div>
<div class="both"></div>
<div class="left">
<span class="niceCheck-main" onclick="changeCheck(this)" id="niceCheckbox1"><input type="checkbox" name="ch1" /></span>
</div>
<div class="left">
x86-64
</div>
<div class="both"></div>
<h3>Packet list repository</h3>
<div class="lineForm">
<select class="sel80" id="country3" name="country" tabindex="2">
<option selected="selected" value="1000">warpc_personal/main</option>
<option value="1">warpc_personal/private</option>
<option value="2">warpc_personal/public</option>
</select>
</div>
<h3>Includes repository</h3>
<div class="left">
<span class="niceCheck-main" onclick="changeCheck(this)" id="niceCheckbox1"><input type="checkbox" name="ch1" /></span>
</div>
<div class="left">
main
</div>
</div>
<div class="both"></div>
</section>
<div class="both"></div>
</article>
</div>
<!--Footer-->
<footer>
<ul>
<li>
ROSA Лаб. © 2012 <img src="pics/square.png" alt="_" />
</li>
<li>
<img src="pics/flag.png" alt="rosa" /> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">О компании</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Контакты</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Условия использования</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Конфиденциальность</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Безопасность</a>
</li>
</ul>
</footer>
</body>
</html>

View File

@ -0,0 +1,246 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Сборочная среда</title>
<script type="text/javascript" src="js/html5shiv.js"></script>
<link rel="stylesheet" type="text/css" href="styles/main.css" />
<script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
<script type='text/javascript' src='js/radio.js'></script>
<link href="styles/cusel.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/cusel-2.5.js"></script>
<script type="text/javascript" src="js/cusel-init.js"></script>
<script type="text/javascript" src="js/all.js"></script>
<script type='text/javascript' src='js/checkbox-main.js'></script>
</head>
<body>
<div class="wrap columns">
<!--Top block-->
<header>
<div class="left">
</div>
<div class="middle">
<!--Main menu-->
<menu>
<ul>
<li>
<a href="#" class="first">Главная</a>
</li>
<li>
<a href="#" class="active">Проекты</a>
</li>
<li>
<a href="#">Группы</a>
</li>
<li>
<a href="#">Мониторинг</a>
</li>
<li>
<a href="#">Платформа</a>
</li>
<li>
<a href="#">Документация</a>
</li>
</ul>
<div class="logo">
<img src="pics/logo-mini.png" alt="logo" />
</div>
</menu>
<div class="information">
<!--Search-->
<div class="search">
<div class="pic">
</div>
<div class="field">
<input type="text" value="Поиск" class="gray" onClick="if(this.value=='Поиск'){this.value='';this.className='black';}" onblur="if(this.value==''){this.value='Поиск';this.className='gray';}" />
</div>
</div>
<div class="avatar" onclick="droplist();">
<img src="pics/ava.png" alt="avatar" height="30" />
</div>
<div class="profile" onclick="droplist();">
<a href="#" onclick="droplist();">mikimaus <img src="pics/expand-white.png" alt="ex" /></a>
</div>
<div class="both">
</div>
<div class="droplist-wrap">
<div class="droplist" id="droplist">
<div class="a"><a href="#">Публичный профиль</a></div>
<div class="a"><a href="#">Настройки</a></div>
<div class="a"><a href="#">Выйти</a></div>
</div>
</div>
</div>
</div>
<div class="right">
</div>
<div class="both">
</div>
</header>
<!--Submenu-->
<div class="sub-menu">
<div class="left">
WacomDrivers
</div>
<nav>
<ul>
<li>
<a href="#">Проект</a>
</li>
<li>
<a href="#">Коммиты</a>
</li>
<li>
<a href="#">Сборки</a>
</li>
<li>
<a href="#">Трекер</a>
</li>
<li>
<a href="#">Wiki</a>
</li>
<li>
<a href="#">Readme</a>
</li>
<li>
<a href="#" class="active">Настройки</a>
</li>
</ul>
</nav>
</div>
<div class="both">
</div>
<!--Page-->
<article>
<!--Left part of page-->
<aside>
<div class="admin-preferences">
<ul>
<li class="active">
<a href="#">Основное</a>
</li>
<li>
<a href="#">Разделы</a>
</li>
<li>
<a href="#">Участники</a>
</li>
</ul>
</div>
</aside>
<!--Right part of page-->
<div class="right">
<div class="leftlist">
Описание проекта:
</div>
<div class="rightlist">
<textarea class="admin-textarea"></textarea>
</div>
<div class="both"></div>
<div class="leftlist">
Видимость проекта:
</div>
<div class="rightlist">
<input type="radio" class="niceRadio" name="myradio" id="myradio1" tabindex="1" checked="checked"></input><img src="pics/unlock.png" alt="public" /> Публичный <input type="radio" class="niceRadio" name="myradio" id="myradio2" tabindex="2"></input><img src="pics/lock.png" alt="private" /> Приватный
</div>
<div class="both"></div>
<div class="leftlist">
Ветка по умолчанию:
</div>
<div class="rightlist">
<div class="lineForm">
<select class="sel80" id="ext" name="ext" tabindex="2">
<option selected="selected" value="1000">Master</option>
<option value="1">Extend</option>
<option value="2">Fork4Driver</option>
</select>
</div>
</div>
<div class="both"></div>
<div class="leftlist">
&nbsp;
</div>
<div class="rightlist">
<div class="check">
<span class="niceCheck-main" onclick="changeCheck(this)" id="niceCheckbox1"><input type="checkbox" name="ch1" /></span>
</div>
<div class="forcheck">
Проект является пакетом
</div>
<div class="both"></div>
</div>
<div class="both"></div>
<div class="leftlist">
&nbsp;
</div>
<div class="rightlist">
<a href="#" class="button">Сохранить</a>
</div>
<div class="both"></div>
<div class="hr"></div>
<div class="leftside">
Внимание! Удаленный проект восстановлению не подлежит.
</div>
<div class="rightside">
<a href="#" class="button">Удалить</a>
</div>
<div class="both"></div>
</div>
<div class="both">
</div>
</article>
</div>
<!--Footer-->
<footer>
<ul>
<li>
ROSA Лаб. © 2012 <img src="pics/square.png" alt="_" />
</li>
<li>
<img src="pics/flag.png" alt="rosa" /> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">О компании</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Контакты</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Условия использования</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Конфиденциальность</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Безопасность</a>
</li>
</ul>
</footer>
</body>
</html>

View File

@ -0,0 +1,296 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Сборочная среда</title>
<script type="text/javascript" src="js/html5shiv.js"></script>
<link rel="stylesheet" type="text/css" href="styles/main.css" />
<script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
<script type='text/javascript' src='js/radio.js'></script>
<link href="styles/cusel.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" href="styles/blue/style.css" type="text/css" id="" media="print, projection, screen" />
<script type="text/javascript" src="js/cusel-2.5.js"></script>
<script type="text/javascript" src="js/cusel-init.js"></script>
<script type="text/javascript" src="js/all.js"></script>
<script type='text/javascript' src='js/checkbox-main.js'></script>
<script type='text/javascript' src='js/admin-members.js'></script>
</head>
<body>
<div class="wrap columns">
<!--Top block-->
<header>
<div class="left">
</div>
<div class="middle">
<!--Main menu-->
<menu>
<ul>
<li>
<a href="#" class="first">Главная</a>
</li>
<li>
<a href="#" class="active">Проекты</a>
</li>
<li>
<a href="#">Группы</a>
</li>
<li>
<a href="#">Мониторинг</a>
</li>
<li>
<a href="#">Платформа</a>
</li>
<li>
<a href="#">Документация</a>
</li>
</ul>
<div class="logo">
<img src="pics/logo-mini.png" alt="logo" />
</div>
</menu>
<div class="information">
<!--Search-->
<div class="search">
<div class="pic">
</div>
<div class="field">
<input type="text" value="Поиск" class="gray" onClick="if(this.value=='Поиск'){this.value='';this.className='black';}" onblur="if(this.value==''){this.value='Поиск';this.className='gray';}" />
</div>
</div>
<div class="avatar" onclick="droplist();">
<img src="pics/ava.png" alt="avatar" height="30" />
</div>
<div class="profile" onclick="droplist();">
<a href="#" onclick="droplist();">mikimaus <img src="pics/expand-white.png" alt="ex" /></a>
</div>
<div class="both">
</div>
<div class="droplist-wrap">
<div class="droplist" id="droplist">
<div class="a"><a href="#">Публичный профиль</a></div>
<div class="a"><a href="#">Настройки</a></div>
<div class="a"><a href="#">Выйти</a></div>
</div>
</div>
</div>
</div>
<div class="right">
</div>
<div class="both">
</div>
</header>
<!--Submenu-->
<div class="sub-menu">
<div class="left">
WacomDrivers
</div>
<nav>
<ul>
<li>
<a href="#">Проект</a>
</li>
<li>
<a href="#">Коммиты</a>
</li>
<li>
<a href="#">Сборки</a>
</li>
<li>
<a href="#">Трекер</a>
</li>
<li>
<a href="#">Wiki</a>
</li>
<li>
<a href="#">Readme</a>
</li>
<li>
<a href="#" class="active">Настройки</a>
</li>
</ul>
</nav>
</div>
<div class="both">
</div>
<!--Page-->
<article>
<!--Left part of page-->
<aside>
<div class="admin-preferences">
<ul>
<li>
<a href="#">Основное</a>
</li>
<li>
<a href="#">Разделы</a>
</li>
<li class="active">
<a href="#">Участники</a>
</li>
</ul>
</div>
</aside>
<!--Right part of page-->
<div class="right">
<table class="tablesorter" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th>
&nbsp;
</th>
<th>
Участники
</th>
<th colspan="3">
Роли
</th>
</tr>
</thead>
<tbody>
<tr id="admin-table-members-row1">
<td>
<span class="niceCheck-main" onclick="changeCheck(this)" id="niceCheckbox1"><input type="checkbox" id="niceCheckbox1-1" name="ch2" /></span>
</td>
<td>
<div class="img"><img src="pics/ava-admin.png" /></div><div class="forimg">miki (Mike Shane)</div>
</td>
<td>
<div class="radio"><input type="radio" class="niceRadio" name="myradio" id="myradio1" tabindex="1" checked="checked"></input></div><div class="forradio">читатель</div>
</td>
<td>
<div class="radio"><input type="radio" class="niceRadio" name="myradio" id="myradio2" tabindex="2" ></input></div><div class="forradio">писатель</div>
</td>
<td>
<div class="radio"><input type="radio" class="niceRadio" name="myradio" id="myradio3" tabindex="3" ></input></div><div class="forradio">администратор</div>
</td>
</tr>
<tr id="admin-table-members-row2">
<td>
<span class="niceCheck-main" onclick="changeCheck(this)" id="niceCheckbox2"><input type="checkbox" id="niceCheckbox2-1" name="ch2" /></span>
</td>
<td>
<div class="img"><img src="pics/ava-admin.png" /></div><div class="forimg">vitko (Виталий Усупов)</div>
</td>
<td>
<div class="radio"><input type="radio" class="niceRadio" name="myradio2" id="myradio2-1" tabindex="1" ></input></div><div class="forradio">читатель</div>
</td>
<td>
<div class="radio"><input type="radio" class="niceRadio" name="myradio2" id="myradio2-2" tabindex="2" checked="checked"></input></div><div class="forradio">писатель</div>
</td>
<td>
<div class="radio"><input type="radio" class="niceRadio" name="myradio2" id="myradio2-3" tabindex="3" ></input></div><div class="forradio">администратор</div>
</td>
</tr>
<tr id="admin-table-members-row3">
<td>
<span class="niceCheck-main" onclick="changeCheck(this)" id="niceCheckbox3"><input type="checkbox" id="niceCheckbox3-1" name="ch2" /></span>
</td>
<td>
<div class="img"><img src="pics/ava-admin.png" /></div><div class="forimg">miha (Михаил Буданов)</div>
</td>
<td>
<div class="radio"><input type="radio" class="niceRadio" name="myradio3" id="myradio3-1" tabindex="1" ></input></div><div class="forradio">читатель</div>
</td>
<td>
<div class="radio"><input type="radio" class="niceRadio" name="myradio3" id="myradio3-2" tabindex="2" ></input></div><div class="forradio">писатель</div>
</td>
<td>
<div class="radio"><input type="radio" class="niceRadio" name="myradio3" id="myradio3-3" tabindex="3" checked="checked"></input></div><div class="forradio">администратор</div>
</td>
</tr>
<tr id="admin-table-members-row4">
<td>
<span class="niceCheck-main" onclick="changeCheck(this)" id="niceCheckbox4"><input type="checkbox" id="niceCheckbox4-1" name="ch2" /></span>
</td>
<td>
<div class="img"><img src="pics/ava-admin.png" /></div><div class="forimg">jeni (Jane Conzi)</div>
</td>
<td>
<div class="radio"><input type="radio" class="niceRadio" name="myradio4" id="myradio4-1" tabindex="1" checked="checked"></input></div><div class="forradio">читатель</div>
</td>
<td>
<div class="radio"><input type="radio" class="niceRadio" name="myradio4" id="myradio4-2" tabindex="2" ></input></div><div class="forradio">писатель</div>
</td>
<td>
<div class="radio"><input type="radio" class="niceRadio" name="myradio4" id="myradio4-3" tabindex="3" ></input></div><div class="forradio">администратор</div>
</td>
</tr>
</tbody>
</table>
<a class="button" href="#" onclick="deleteAdminMember();">Удалить</a>
<div class="hr bottom"></div>
<div class="admin-search">
<input type="text" value="Найти участника..." class="gray" onClick="if(this.value=='Найти участника...'){this.value='';this.className='black';}" onblur="if(this.value==''){this.value='Найти участника...';this.className='gray';}" />
</div>
<div class="admin-role">
<div class="lineForm">
<select class="sel80" id="country" name="country" tabindex="2">
<option selected="selected" value="1000">Администратор</option>
<option value="1">Писатель</option>
<option value="2">Читатель</option>
</select>
</div>
</div>
<div class="admin-add">
<a class="button" href="#">Добавить</a>
</div>
<div class="both"></div>
<div class="hr top"></div>
<div class="both"></div>
<a class="button" href="#">Сохранить</a>
<div class="both"></div>
</div>
<div class="both">
</div>
</article>
</div>
<!--Footer-->
<footer>
<ul>
<li>
ROSA Лаб. © 2012 <img src="pics/square.png" alt="_" />
</li>
<li>
<img src="pics/flag.png" alt="rosa" /> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">О компании</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Контакты</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Условия использования</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Конфиденциальность</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Безопасность</a>
</li>
</ul>
</footer>
</body>
</html>

View File

@ -0,0 +1,203 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Сборочная среда</title>
<script type="text/javascript" src="js/html5shiv.js"></script>
<link rel="stylesheet" type="text/css" href="styles/main.css" />
<script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="js/all.js"></script>
<script type='text/javascript' src='js/checkbox-main.js'></script>
</head>
<body>
<div class="wrap columns">
<!--Top block-->
<header>
<div class="left">
</div>
<div class="middle">
<!--Main menu-->
<menu>
<ul>
<li>
<a href="#" class="first">Главная</a>
</li>
<li>
<a href="#" class="active">Проекты</a>
</li>
<li>
<a href="#">Группы</a>
</li>
<li>
<a href="#">Мониторинг</a>
</li>
<li>
<a href="#">Платформа</a>
</li>
<li>
<a href="#">Документация</a>
</li>
</ul>
<div class="logo">
<img src="pics/logo-mini.png" alt="logo" />
</div>
</menu>
<div class="information">
<!--Search-->
<div class="search">
<div class="pic">
</div>
<div class="field">
<input type="text" value="Поиск" class="gray" onClick="if(this.value=='Поиск'){this.value='';this.className='black';}" onblur="if(this.value==''){this.value='Поиск';this.className='gray';}" />
</div>
</div>
<div class="avatar" onclick="droplist();">
<img src="pics/ava.png" alt="avatar" height="30" />
</div>
<div class="profile" onclick="droplist();">
<a href="#" onclick="droplist();">mikimaus <img src="pics/expand-white.png" alt="ex" /></a>
</div>
<div class="both">
</div>
<div class="droplist-wrap">
<div class="droplist" id="droplist">
<div class="a"><a href="#">Публичный профиль</a></div>
<div class="a"><a href="#">Настройки</a></div>
<div class="a"><a href="#">Выйти</a></div>
</div>
</div>
</div>
</div>
<div class="right">
</div>
<div class="both">
</div>
</header>
<!--Submenu-->
<div class="sub-menu">
<div class="left">
WacomDrivers
</div>
<nav>
<ul>
<li>
<a href="#">Проект</a>
</li>
<li>
<a href="#">Коммиты</a>
</li>
<li>
<a href="#">Сборки</a>
</li>
<li>
<a href="#">Трекер</a>
</li>
<li>
<a href="#">Wiki</a>
</li>
<li>
<a href="#">Readme</a>
</li>
<li>
<a href="#" class="active">Настройки</a>
</li>
</ul>
</nav>
</div>
<div class="both">
</div>
<!--Page-->
<article>
<!--Left part of page-->
<aside>
<div class="admin-preferences">
<ul>
<li>
<a href="#">Основное</a>
</li>
<li class="active">
<a href="#">Разделы</a>
</li>
<li>
<a href="#">Участники</a>
</li>
</ul>
</div>
</aside>
<!--Right part of page-->
<div class="right bigpadding">
<div class="leftside w25">
<span class="niceCheck-main" onclick="changeCheck(this)" id="niceCheckbox1" ><input type="checkbox" name="ch1" /></span>
</div>
<div class="leftside w420">
Трекер<br />
<span style="font-size: 11px;">
GitHub Issues adds lightweight issue tracking tightly integrated with your repository.
Add issues to milestones, label issues, and close & reference issues from commit messages.
</span>
</div>
<div class="both"></div>
<div class="leftside w25">
<span class="niceCheck-main" onclick="changeCheck(this)" id="niceCheckbox2"><input type="checkbox" name="ch2" /></span>
</div>
<div class="leftside w420">
Wiki<br />
<span style="font-size: 11px;">
GitHub Wikis are the simplest way to let others contribute content. Any GitHub user
can create and edit pages to use for documentation, examples, support or anything
you wish.
</span>
</div>
<div class="both"></div>
<div class="padd25">
<a class="button" href="#">Сохранить</a>
</div>
<div class="both"></div>
</div>
<div class="both"></div>
</article>
</div>
<!--Footer-->
<footer>
<ul>
<li>
ROSA Лаб. © 2012 <img src="pics/square.png" alt="_" />
</li>
<li>
<img src="pics/flag.png" alt="rosa" /> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">О компании</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Контакты</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Условия использования</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Конфиденциальность</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Безопасность</a>
</li>
</ul>
</footer>
</body>
</html>

View File

@ -0,0 +1,441 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Сборочная среда</title>
<script type="text/javascript" src="js/html5shiv.js"></script>
<link rel="stylesheet" type="text/css" href="styles/main.css" />
<script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
<link href="styles/cusel.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/cusel-2.5.js"></script>
<script type="text/javascript" src="js/cusel-init.js"></script>
<script type="text/javascript" src="js/all.js"></script>
</head>
<body>
<div class="wrap">
<!--Top block-->
<header>
<div class="left">
</div>
<div class="middle">
<!--Main menu-->
<menu>
<ul>
<li>
<a href="#" class="first">Главная</a>
</li>
<li>
<a href="#" class="active">Проекты</a>
</li>
<li>
<a href="#">Группы</a>
</li>
<li>
<a href="#">Мониторинг</a>
</li>
<li>
<a href="#">Платформа</a>
</li>
<li>
<a href="#">Документация</a>
</li>
</ul>
<div class="logo">
<img src="pics/logo-mini.png" alt="logo" />
</div>
</menu>
<div class="information">
<!--Search-->
<div class="search">
<div class="pic">
</div>
<div class="field">
<input type="text" value="Поиск" class="gray" onClick="if(this.value=='Поиск'){this.value='';this.className='black';}" onblur="if(this.value==''){this.value='Поиск';this.className='gray';}" />
</div>
</div>
<div class="avatar" onclick="droplist();">
<img src="pics/ava.png" alt="avatar" height="30" />
</div>
<div class="profile" onclick="droplist();">
<a href="#" onclick="droplist();">mikimaus <img src="pics/expand-white.png" alt="ex" /></a>
</div>
<div class="both">
</div>
<div class="droplist-wrap">
<div class="droplist" id="droplist">
<div class="a"><a href="#">Публичный профиль</a></div>
<div class="a"><a href="#">Настройки</a></div>
<div class="a"><a href="#">Выйти</a></div>
</div>
</div>
</div>
</div>
<div class="right">
</div>
<div class="both">
</div>
</header>
<!--Submenu-->
<div class="sub-menu">
<div class="left">
WacomDrivers
</div>
<nav>
<ul>
<li>
<a href="#">Проект</a>
</li>
<li>
<a href="#" class="active">Коммиты</a>
</li>
<li>
<a href="#">Сборки</a>
</li>
<li>
<a href="#">Трекер</a>
</li>
<li>
<a href="#">Wiki</a>
</li>
<li>
<a href="#">Readme</a>
</li>
<li>
<a href="#">Настройки</a>
</li>
</ul>
</nav>
</div>
<div class="both">
</div>
<!--Page-->
<article>
<div class="all">
<div class="lineForm fright">
<select class="sel80" id="country" name="country" tabindex="2">
<option selected="selected" value="1000">Master</option>
<option value="1">Extend</option>
<option value="2">Beta</option>
</select>
</div>
<div class="fright">
<p>Текущая ветка:</p>
</div>
<div class="both"></div>
<div class="date-block">
<div class="date">
05<br />января
</div>
<div class="messages">
<div class="message">
<div class="body">
<div class="image">
<img src="pics/ava.png" alt="avatar" />
</div>
<div class="text">
<span class="name">Mike Shane</span><br />
<span class="date">сегодня в 11:45</span><br />
<span class="subject">Merge pull request #112 from snigipigi/issues <img src="pics/expand-gray.png" alt="expand" class="activity-full" onclick="showActivity(1)" id="expand1" /></span>
</div>
<div style="clear: both">
</div>
<div class="fulltext" id="activity-bottom1">
Наша команда благодарит вас за то, что решили уделить нашему продукту немного внимания. Наша сборочная среда предоставляет широкий спектр возможностей как для личного использования, так и для бизнеса. Нам бы хотелось немного подробнее узнать о вас, поэтому, в удобное для вас время, <a href="#">заполните ваш профиль.</a>
<br /><br />
Также вы можете познакомиться с <a href="#">подробной документацией</a>, включающей в себя не только описание с картинками, но и видеоуроки.
<br /><br />
Если вы разработчик, то советуем заглянуть в <a href="#">раздел для разработчиков</a>.<br />
Если вы мейнтейнер, то советуем заглянуть в <a href="#">раздел для мейнтейнеров</a>.<br />
</div>
</div>
<div class="code">
<div class="top">
<div class="left">
<img src="pics/code.png" alt="code" />
</div>
<div class="right">
1245ef48
</div>
</div>
<div class="bottom">
<a href="#">просмотр кода</a>
</div>
</div>
<div style="clear: both">
</div>
</div>
<div class="message">
<div class="body">
<div class="image">
<img src="pics/ava.png" alt="avatar" />
</div>
<div class="text">
<span class="name">Mike Shane</span><br />
<span class="date">сегодня в 11:45</span><br />
<span class="subject">Merge pull request #112 from snigipigi/issues <img src="pics/expand-gray.png" alt="expand" class="activity-full" onclick="showActivity(2)" id="expand2" /></span>
</div>
<div style="clear: both">
</div>
<div class="fulltext" id="activity-bottom2">
Наша команда благодарит вас за то, что решили уделить нашему продукту немного внимания. Наша сборочная среда предоставляет широкий спектр возможностей как для личного использования, так и для бизнеса. Нам бы хотелось немного подробнее узнать о вас, поэтому, в удобное для вас время, <a href="#">заполните ваш профиль.</a>
<br /><br />
Также вы можете познакомиться с <a href="#">подробной документацией</a>, включающей в себя не только описание с картинками, но и видеоуроки.
<br /><br />
Если вы разработчик, то советуем заглянуть в <a href="#">раздел для разработчиков</a>.<br />
Если вы мейнтейнер, то советуем заглянуть в <a href="#">раздел для мейнтейнеров</a>.<br />
</div>
</div>
<div class="code">
<div class="top">
<div class="left">
<img src="pics/code.png" alt="code" />
</div>
<div class="right">
1245ef48
</div>
</div>
<div class="bottom">
<a href="#">просмотр кода</a>
</div>
</div>
<div style="clear: both">
</div>
</div>
<div class="message">
<div class="body">
<div class="image">
<img src="pics/ava.png" alt="avatar" />
</div>
<div class="text">
<span class="name">Mike Shane</span><br />
<span class="date">сегодня в 11:45</span><br />
<span class="subject">Merge pull request #112 from snigipigi/issues <img src="pics/expand-gray.png" alt="expand" class="activity-full" onclick="showActivity(3)" id="expand3" /></span>
</div>
<div style="clear: both">
</div>
<div class="fulltext" id="activity-bottom3">
Наша команда благодарит вас за то, что решили уделить нашему продукту немного внимания. Наша сборочная среда предоставляет широкий спектр возможностей как для личного использования, так и для бизнеса. Нам бы хотелось немного подробнее узнать о вас, поэтому, в удобное для вас время, <a href="#">заполните ваш профиль.</a>
<br /><br />
Также вы можете познакомиться с <a href="#">подробной документацией</a>, включающей в себя не только описание с картинками, но и видеоуроки.
<br /><br />
Если вы разработчик, то советуем заглянуть в <a href="#">раздел для разработчиков</a>.<br />
Если вы мейнтейнер, то советуем заглянуть в <a href="#">раздел для мейнтейнеров</a>.<br />
</div>
</div>
<div class="code">
<div class="top">
<div class="left">
<img src="pics/code.png" alt="code" />
</div>
<div class="right">
1245ef48
</div>
</div>
<div class="bottom">
<a href="#">просмотр кода</a>
</div>
</div>
<div style="clear: both">
</div>
</div>
</div>
<div style="clear: both">
</div>
</div>
<div class="year">
<p>2011 год</p>
</div>
<div class="date-block">
<div class="date">
26<br />декабря
</div>
<div class="messages">
<div class="message">
<div class="body">
<div class="image">
<img src="pics/ava.png" alt="avatar" />
</div>
<div class="text">
<span class="name">Mike Shane</span><br />
<span class="date">сегодня в 11:45</span><br />
<span class="subject">Merge pull request #112 from snigipigi/issues <img src="pics/expand-gray.png" alt="expand" class="activity-full" onclick="showActivity(4)" id="expand4" /></span>
</div>
<div style="clear: both">
</div>
<div class="fulltext" id="activity-bottom4">
Наша команда благодарит вас за то, что решили уделить нашему продукту немного внимания. Наша сборочная среда предоставляет широкий спектр возможностей как для личного использования, так и для бизнеса. Нам бы хотелось немного подробнее узнать о вас, поэтому, в удобное для вас время, <a href="#">заполните ваш профиль.</a>
<br /><br />
Также вы можете познакомиться с <a href="#">подробной документацией</a>, включающей в себя не только описание с картинками, но и видеоуроки.
<br /><br />
Если вы разработчик, то советуем заглянуть в <a href="#">раздел для разработчиков</a>.<br />
Если вы мейнтейнер, то советуем заглянуть в <a href="#">раздел для мейнтейнеров</a>.<br />
</div>
</div>
<div class="code">
<div class="top">
<div class="left">
<img src="pics/code.png" alt="code" />
</div>
<div class="right">
1245ef48
</div>
</div>
<div class="bottom">
<a href="#">просмотр кода</a>
</div>
</div>
<div style="clear: both">
</div>
</div>
<div class="message">
<div class="body">
<div class="image">
<img src="pics/ava.png" alt="avatar" />
</div>
<div class="text">
<span class="name">Mike Shane</span><br />
<span class="date">сегодня в 11:45</span><br />
<span class="subject">Merge pull request #112 from snigipigi/issues <img src="pics/expand-gray.png" alt="expand" class="activity-full" onclick="showActivity(5)" id="expand5" /></span>
</div>
<div style="clear: both">
</div>
<div class="fulltext" id="activity-bottom5">
Наша команда благодарит вас за то, что решили уделить нашему продукту немного внимания. Наша сборочная среда предоставляет широкий спектр возможностей как для личного использования, так и для бизнеса. Нам бы хотелось немного подробнее узнать о вас, поэтому, в удобное для вас время, <a href="#">заполните ваш профиль.</a>
<br /><br />
Также вы можете познакомиться с <a href="#">подробной документацией</a>, включающей в себя не только описание с картинками, но и видеоуроки.
<br /><br />
Если вы разработчик, то советуем заглянуть в <a href="#">раздел для разработчиков</a>.<br />
Если вы мейнтейнер, то советуем заглянуть в <a href="#">раздел для мейнтейнеров</a>.<br />
</div>
</div>
<div class="code">
<div class="top">
<div class="left">
<img src="pics/code.png" alt="code" />
</div>
<div class="right">
1245ef48
</div>
</div>
<div class="bottom">
<a href="#">просмотр кода</a>
</div>
</div>
<div style="clear: both">
</div>
</div>
<div class="message">
<div class="body">
<div class="image">
<img src="pics/ava.png" alt="avatar" />
</div>
<div class="text">
<span class="name">Mike Shane</span><br />
<span class="date">сегодня в 11:45</span><br />
<span class="subject">Merge pull request #112 from snigipigi/issues <img src="pics/expand-gray.png" alt="expand" class="activity-full" onclick="showActivity(6)" id="expand6" /></span>
</div>
<div style="clear: both">
</div>
<div class="fulltext" id="activity-bottom6">
Наша команда благодарит вас за то, что решили уделить нашему продукту немного внимания. Наша сборочная среда предоставляет широкий спектр возможностей как для личного использования, так и для бизнеса. Нам бы хотелось немного подробнее узнать о вас, поэтому, в удобное для вас время, <a href="#">заполните ваш профиль.</a>
<br /><br />
Также вы можете познакомиться с <a href="#">подробной документацией</a>, включающей в себя не только описание с картинками, но и видеоуроки.
<br /><br />
Если вы разработчик, то советуем заглянуть в <a href="#">раздел для разработчиков</a>.<br />
Если вы мейнтейнер, то советуем заглянуть в <a href="#">раздел для мейнтейнеров</a>.<br />
</div>
</div>
<div class="code">
<div class="top">
<div class="left">
<img src="pics/code.png" alt="code" />
</div>
<div class="right">
1245ef48
</div>
</div>
<div class="bottom">
<a href="#">просмотр кода</a>
</div>
</div>
<div style="clear: both">
</div>
</div>
</div>
<div style="clear: both">
</div>
</div>
</div>
</article>
</div>
<!--Footer-->
<footer>
<ul>
<li>
ROSA Лаб. © 2012 <img src="pics/square.png" alt="_" />
</li>
<li>
<img src="pics/flag.png" alt="rosa" /> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">О компании</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Контакты</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Условия использования</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Конфиденциальность</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Безопасность</a>
</li>
</ul>
</footer>
</body>
</html>

402
doc/design/abf-index.html Normal file
View File

@ -0,0 +1,402 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Сборочная среда</title>
<script type="text/javascript" src="js/html5shiv.js"></script>
<link rel="stylesheet" type="text/css" href="styles/main.css" />
<script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="js/all.js"></script>
</head>
<body>
<div class="wrap columns">
<!--Top block-->
<header>
<div class="left">
</div>
<div class="middle">
<!--Main menu-->
<menu>
<ul>
<li>
<a href="#" class="first active">Главная</a>
</li>
<li>
<a href="#">Проекты</a>
</li>
<li>
<a href="#">Группы</a>
</li>
<li>
<a href="#">Мониторинг</a>
</li>
<li>
<a href="#">Платформа</a>
</li>
<li>
<a href="#">Документация</a>
</li>
</ul>
<div class="logo">
<img src="pics/logo-mini.png" alt="logo" />
</div>
</menu>
<div class="information">
<!--Search-->
<div class="search">
<div class="pic">
</div>
<div class="field">
<input type="text" value="Поиск" class="gray" onClick="if(this.value=='Поиск'){this.value='';this.className='black';}" onblur="if(this.value==''){this.value='Поиск';this.className='gray';}" />
</div>
</div>
<div class="avatar" onclick="droplist();">
<img src="pics/ava.png" alt="avatar" height="30" />
</div>
<div class="profile" onclick="droplist();">
<a href="#" onclick="droplist();">mikimaus <img src="pics/expand-white.png" alt="ex" /></a>
</div>
<div class="both">
</div>
<div class="droplist-wrap">
<div class="droplist" id="droplist">
<div class="a"><a href="#">Публичный профиль</a></div>
<div class="a"><a href="#">Настройки</a></div>
<div class="a"><a href="#">Выйти</a></div>
</div>
</div>
</div>
</div>
<div class="right">
</div>
<div class="both">
</div>
</header>
<!--Submenu-->
<div class="sub-menu">
<nav>
<ul>
<li>
<a href="#" class="active">Все</a>
</li>
<li>
<a href="#">Коммиты</a>
</li>
<li>
<a href="#">Комментарии</a>
</li>
<li>
<a href="#">Сборка</a>
</li>
</ul>
</nav>
</div>
<div class="both">
</div>
<!--Page-->
<article>
<!--Left part of page-->
<aside>
<div class="bordered">
<a href="#" class="button">Создать проект</a>
<h3>Мои последние проекты</h3>
<table>
<tr>
<td>
<img src="pics/unlock.png" alt="unlock" />
</td>
<td>
<a href="#">gsapronov/ROSA-Jabber</a>
</td>
</tr>
<tr>
<td>
<img src="pics/lock.png" alt="lock" />
</td>
<td>
<a href="#">santaux/WacomDrivers</a>
</td>
</tr>
<tr>
<td>
<img src="pics/unlock.png" alt="unlock" />
</td>
<td>
<a href="#">snigipini/Gimp-Extensions</a>
</td>
</tr>
<tr>
<td>
<img src="pics/lock.png" alt="lock" />
</td>
<td>
<a href="#">pinovd/Rosa_Media_Player</a>
</td>
</tr>
<tr>
<td>
<img src="pics/lock.png" alt="lock" />
</td>
<td>
<a href="#">gsapronov/Inkscape-Plugins</a>
</td>
</tr>
<tr>
<td>
&nbsp;
</td>
<td>
<a href="#">Все мои проекты</a>
</td>
</tr>
</table>
</div>
<div class="block">
<h3>Мои сборки за 24 часа</h3>
<table cellpadding="0" cellspacing="0">
<tr>
<td class="first"><a href="#">Опубликовано</a></td>
<td>25</td>
</tr>
<tr>
<td class="first"><a href="#">Собрано</a></td>
<td>15</td>
</tr>
<tr>
<td class="first"><a href="#">Собирается</a></td>
<td>3</td>
</tr>
<tr>
<td class="first"><a href="#">Ожидает</a></td>
<td>1</td>
</tr>
<tr>
<td class="first"><a href="#">Ошибок</a></td>
<td>0</td>
</tr>
<tr>
<td class="first"><a href="#">Все мои сборки</a></td>
<td>&nbsp;</td>
</tr>
</table>
</div>
</aside>
<!--Right part of page-->
<div class="right">
<h3 class="fix">Лента активности</h3>
<div class="messages" onclick="loadMessages();" id="messages-new">
<p><img src="pics/expand.png" alt="expand" /> 2 новых сообщения</p>
</div>
<div id="new-messages" style="display: none;">
<div class="activity" id="messages1" >
<div class="top">
<div class="image">
<img src="pics/ava.png" alt="avatar" />
</div>
<div class="text">
<span class="name">Mike Shane внес изменения в проект <a href="#">gsapronov/ROSA-Jabber</a></span><br />
<span class="date">сегодня в 11:45</span><br />
<span class="subject">Merge pull request #112 from snigipigi/issues <img src="pics/expand-gray.png" alt="expand" class="activity-full" onclick="showActivity(1)" id="expand1" /></span>
</div>
<div class="both">
</div>
</div>
<div class="fulltext" id="activity-bottom1">
Наша команда благодарит вас за то, что решили уделить нашему продукту немного внимания. Наша сборочная среда предоставляет широкий спектр возможностей как для личного использования, так и для бизнеса. Нам бы хотелось немного подробнее узнать о вас, поэтому, в удобное для вас время, <a href="#">заполните ваш профиль.</a>
<br /><br />
Также вы можете познакомиться с <a href="#">подробной документацией</a>, включающей в себя не только описание с картинками, но и видеоуроки.
<br /><br />
Если вы разработчик, то советуем заглянуть в <a href="#">раздел для разработчиков</a>.<br />
Если вы мейнтейнер, то советуем заглянуть в <a href="#">раздел для мейнтейнеров</a>.<br />
</div>
</div>
<div class="activity" id="messages2">
<div class="top">
<div class="image">
<img src="pics/ava.png" alt="avatar" />
</div>
<div class="text">
<span class="name">Mike Shane внес изменения в проект <a href="#">gsapronov/ROSA-Jabber</a></span><br />
<span class="date">сегодня в 11:45</span><br />
<span class="subject">Merge pull request #112 from snigipigi/issues <img src="pics/expand-gray.png" alt="expand" class="activity-full" onclick="showActivity(2)" id="expand2" /></span>
</div>
<div class="both">
</div>
</div>
<div class="fulltext" id="activity-bottom2">
Наша команда благодарит вас за то, что решили уделить нашему продукту немного внимания. Наша сборочная среда предоставляет широкий спектр возможностей как для личного использования, так и для бизнеса. Нам бы хотелось немного подробнее узнать о вас, поэтому, в удобное для вас время, <a href="#">заполните ваш профиль.</a>
<br /><br />
Также вы можете познакомиться с <a href="#">подробной документацией</a>, включающей в себя не только описание с картинками, но и видеоуроки.
<br /><br />
Если вы разработчик, то советуем заглянуть в <a href="#">раздел для разработчиков</a>.<br />
Если вы мейнтейнер, то советуем заглянуть в <a href="#">раздел для мейнтейнеров</a>.<br />
</div>
</div>
</div>
<div class="activity">
<div class="top">
<div class="image">
<img src="pics/ava.png" alt="avatar" />
</div>
<div class="text">
<span class="name">Mike Shane внес изменения в проект <a href="#">gsapronov/ROSA-Jabber</a></span><br />
<span class="date">сегодня в 11:45</span><br />
<span class="subject">Merge pull request #112 from snigipigi/issues <img src="pics/expand-gray.png" alt="expand" class="activity-full" onclick="showActivity(3)" id="expand3" /></span>
</div>
<div class="both">
</div>
</div>
<div class="fulltext" id="activity-bottom3">
Наша команда благодарит вас за то, что решили уделить нашему продукту немного внимания. Наша сборочная среда предоставляет широкий спектр возможностей как для личного использования, так и для бизнеса. Нам бы хотелось немного подробнее узнать о вас, поэтому, в удобное для вас время, <a href="#">заполните ваш профиль.</a>
<br /><br />
Также вы можете познакомиться с <a href="#">подробной документацией</a>, включающей в себя не только описание с картинками, но и видеоуроки.
<br /><br />
Если вы разработчик, то советуем заглянуть в <a href="#">раздел для разработчиков</a>.<br />
Если вы мейнтейнер, то советуем заглянуть в <a href="#">раздел для мейнтейнеров</a>.<br />
</div>
</div>
<div class="activity">
<div class="top">
<div class="image">
<img src="pics/ava.png" alt="avatar" />
</div>
<div class="text">
<span class="name">ROSA ABF Team</span><br />
<span class="date">сегодня в 10:45</span><br />
<span class="subject">Добро пожаловать!</span>
</div>
<div class="both">
</div>
</div>
<div class="fulltext" style="display: block;">
Наша команда благодарит вас за то, что решили уделить нашему продукту немного внимания. Наша сборочная среда предоставляет широкий спектр возможностей как для личного использования, так и для бизнеса. Нам бы хотелось немного подробнее узнать о вас, поэтому, в удобное для вас время, <a href="#">заполните ваш профиль.</a>
<br /><br />
Также вы можете познакомиться с <a href="#">подробной документацией</a>, включающей в себя не только описание с картинками, но и видеоуроки.
<br /><br />
Если вы разработчик, то советуем заглянуть в <a href="#">раздел для разработчиков</a>.<br />
Если вы мейнтейнер, то советуем заглянуть в <a href="#">раздел для мейнтейнеров</a>.<br />
</div>
</div>
<div id="old-messages" style="display: none;">
<div class="activity" id="messages4" >
<div class="top">
<div class="image">
<img src="pics/ava.png" alt="avatar" />
</div>
<div class="text">
<span class="name">Mike Shane внес изменения в проект <a href="#">gsapronov/ROSA-Jabber</a></span><br />
<span class="date">сегодня в 11:45</span><br />
<span class="subject">Merge pull request #112 from snigipigi/issues <img src="pics/expand-gray.png" alt="expand" class="activity-full" onclick="showActivity(4)" id="expand4" /></span>
</div>
<div class="both">
</div>
</div>
<div class="fulltext" id="activity-bottom4">
Наша команда благодарит вас за то, что решили уделить нашему продукту немного внимания. Наша сборочная среда предоставляет широкий спектр возможностей как для личного использования, так и для бизнеса. Нам бы хотелось немного подробнее узнать о вас, поэтому, в удобное для вас время, <a href="#">заполните ваш профиль.</a>
<br /><br />
Также вы можете познакомиться с <a href="#">подробной документацией</a>, включающей в себя не только описание с картинками, но и видеоуроки.
<br /><br />
Если вы разработчик, то советуем заглянуть в <a href="#">раздел для разработчиков</a>.<br />
Если вы мейнтейнер, то советуем заглянуть в <a href="#">раздел для мейнтейнеров</a>.<br />
</div>
</div>
<div class="activity" id="messages5">
<div class="top">
<div class="image">
<img src="pics/ava.png" alt="avatar" />
</div>
<div class="text">
<span class="name">Mike Shane внес изменения в проект <a href="#">gsapronov/ROSA-Jabber</a></span><br />
<span class="date">сегодня в 11:45</span><br />
<span class="subject">Merge pull request #112 from snigipigi/issues <img src="pics/expand-gray.png" alt="expand" class="activity-full" onclick="showActivity(5)" id="expand5" /></span>
</div>
<div class="both">
</div>
</div>
<div class="fulltext" id="activity-bottom5">
Наша команда благодарит вас за то, что решили уделить нашему продукту немного внимания. Наша сборочная среда предоставляет широкий спектр возможностей как для личного использования, так и для бизнеса. Нам бы хотелось немного подробнее узнать о вас, поэтому, в удобное для вас время, <a href="#">заполните ваш профиль.</a>
<br /><br />
Также вы можете познакомиться с <a href="#">подробной документацией</a>, включающей в себя не только описание с картинками, но и видеоуроки.
<br /><br />
Если вы разработчик, то советуем заглянуть в <a href="#">раздел для разработчиков</a>.<br />
Если вы мейнтейнер, то советуем заглянуть в <a href="#">раздел для мейнтейнеров</a>.<br />
</div>
</div>
</div>
<div class="messages messages-last" onclick="loadOldMessages();">
<p>Загрузить сообщения</p>
</div>
</div>
<div class="both">
</div>
</article>
</div>
<!--Footer-->
<footer>
<ul>
<li>
ROSA Лаб. © 2012 <img src="pics/square.png" alt="_" />
</li>
<li>
<img src="pics/flag.png" alt="rosa" /> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">О компании</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Контакты</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Условия использования</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Конфиденциальность</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Безопасность</a>
</li>
</ul>
</footer>
</body>
</html>

View File

@ -0,0 +1,179 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Сборочная среда</title>
<script type="text/javascript" src="js/html5shiv.js"></script>
<link rel="stylesheet" type="text/css" href="styles/main.css" />
<link rel="stylesheet" type="text/css" href="styles/main.css" />
<script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="js/all.js"></script>
<script type="text/javascript" src="js/myprojects.js"></script>
<link rel="stylesheet" href="styles/blue/style.css" type="text/css" id="" media="print, projection, screen" />
<script type="text/javascript" src="js/jquery.tablesorter.js"></script>
</head>
<body>
<div class="wrap">
<!--Top block-->
<header>
<div class="left">
</div>
<div class="middle">
<!--Main menu-->
<menu>
<ul>
<li>
<a href="#" class="first">Главная</a>
</li>
<li>
<a href="#" class="active">Проекты</a>
</li>
<li>
<a href="#">Группы</a>
</li>
<li>
<a href="#">Мониторинг</a>
</li>
<li>
<a href="#">Платформа</a>
</li>
<li>
<a href="#">Документация</a>
</li>
</ul>
<div class="logo">
<img src="pics/logo-mini.png" alt="logo" />
</div>
</menu>
<div class="information">
<!--Search-->
<div class="search">
<div class="pic">
</div>
<div class="field">
<input type="text" value="Поиск" class="gray" onClick="if(this.value=='Поиск'){this.value='';this.className='black';}" onblur="if(this.value==''){this.value='Поиск';this.className='gray';}" />
</div>
</div>
<div class="avatar" onclick="droplist();">
<img src="pics/ava.png" alt="avatar" height="30" />
</div>
<div class="profile" onclick="droplist();">
<a href="#" onclick="droplist();">mikimaus <img src="pics/expand-white.png" alt="ex" /></a>
</div>
<div class="both">
</div>
<div class="droplist-wrap">
<div class="droplist" id="droplist">
<div class="a"><a href="#">Публичный профиль</a></div>
<div class="a"><a href="#">Настройки</a></div>
<div class="a"><a href="#">Выйти</a></div>
</div>
</div>
</div>
</div>
<div class="right">
</div>
<div class="both">
</div>
</header>
<div class="both">
</div>
<!--Page-->
<article>
<!--Single page content-->
<div class="all">
<a href="#" class="button">Создать проект</a>
<table id="myTable" class="tablesorter" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th class="th1">Проект</th>
<th class="th2">Описание проекта</th>
<th class="th3">Роль в проекте</th>
<th class="th4">Покинуть проект</th>
</tr>
</thead>
<tbody>
<tr id="Row1">
<td><a href="#"><div class="table-sort-left"><img src="pics/unlock.png" alt="unlock"></div><div class="table-sort-right">gsapronov/ROSA-Jabber</div></a></td>
<td class="td2">Проект создан для разработки интернет-пейджера, с простым
пользовательским интерфейсом и поддержкой социальных сетей.</td>
<td>Чтение</td>
<td class="td5"><img src="pics/x.png" alt="delete" onclick="deleteRow(1);" /></td>
</tr>
<tr id="Row2">
<td><a href="#"><div class="table-sort-left"><img src="pics/lock.png" alt="lock"></div><div class="table-sort-right">santaux/WacomDrivers</div></a></td>
<td class="td2">Мы пытаемся доработать драйвера для полноценной работы
дигитайзеров Wacom.</td>
<td>Запись</td>
<td class="td5"><img src="pics/x.png" alt="delete" onclick="deleteRow(2);" /></td>
</tr>
<tr id="Row3">
<td><a href="#"><div class="table-sort-left"><img src="pics/unlock.png" alt="unlock"></div><div class="table-sort-right">snigipini/Gimp-Extensions</div></a></td>
<td class="td2">Растровому редактору не хватает большого количества
функционала и расширений, которые позволили бы ему решать...</td>
<td>Запись</td>
<td class="td5"><img src="pics/x.png" alt="delete" onclick="deleteRow(3);" /></td>
</tr>
<tr id="Row4">
<td><a href="#"><div class="table-sort-left"><img src="pics/lock.png" alt="lock"></div><div class="table-sort-right">pinovd/Rosa_Media_Player</div></a></td>
<td class="td2">Под OS ROSA отсутствует нормальный простой интуитивно
понятный видеопроигрыватель.</td>
<td>Администратор</td>
<td class="td5"><img src="pics/x.png" alt="delete" onclick="deleteRow(4);" /></td>
</tr>
<tr id="Row5">
<td><a href="#"><div class="table-sort-left"><img src="pics/lock.png" alt="lock"></div><div class="table-sort-right">gsapronov/Inkscape-Plugins</div></a></td>
<td class="td2">У векторного редактора ощущается острая нехватка плагинов для
работы.</td>
<td>Администратор</td>
<td class="td5"><img src="pics/x.png" alt="delete" onclick="deleteRow(5);" /></td>
</tr>
</tbody>
</table>
</div>
<div class="both">
</div>
</article>
</div>
<!--Footer-->
<footer>
<ul>
<li>
ROSA Лаб. © 2012 <img src="pics/square.png" alt="_" />
</li>
<li>
<img src="pics/flag.png" alt="rosa" /> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">О компании</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Контакты</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Условия использования</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Конфиденциальность</a> <img src="pics/square.png" alt="_" />
</li>
<li>
<a href="#">Безопасность</a>
</li>
</ul>
</footer>
</body>
</html>

View File

@ -0,0 +1,14 @@
function deleteAdminMember() {
if (document.getElementById("niceCheckbox1-1").checked == true) {
$("#admin-table-members-row1").fadeOut("slow");
}
if (document.getElementById("niceCheckbox2-1").checked == true) {
$("#admin-table-members-row2").fadeOut("slow");
}
if (document.getElementById("niceCheckbox3-1").checked == true) {
$("#admin-table-members-row3").fadeOut("slow");
}
if (document.getElementById("niceCheckbox4-1").checked == true) {
$("#admin-table-members-row4").fadeOut("slow");
}
}

42
doc/design/js/all.js Normal file
View File

@ -0,0 +1,42 @@
var state = 0;
function droplist() {
if (state == 0) {
$("#droplist").slideToggle("slow");
//borderDown();
state = 1;
}
}
function loadMessages() {
$("#messages-new").fadeOut("slow");
$("#new-messages").delay(700).fadeIn("slow");
//setTimeout(border1, 700)
}
function loadOldMessages() {
$("#old-messages").fadeIn("slow");
//setTimeout(border1, 700)
}
$(document).click(function() {
var dl = $("#droplist").css("height");
var dl2 = $("#droplist").css("display");
if ((dl2 == "block")&&(dl == "91px")) {
state = 0;
droplist();
state = 0;
}
});
function showActivity(elem) {
//borderDown();
$("#activity-bottom"+elem).slideToggle("slow");
var img = $("#expand" + elem).attr("src");
if (img == "pics/expand-gray.png") {
$("#expand" + elem).attr("src","pics/expand-gray2.png");
} else {
$("#expand" + elem).attr("src","pics/expand-gray.png");
}
//setTimeout(border1, 700)
}

Some files were not shown because too many files have changed in this diff Show More