From 55379ed9c8dd5bb642ac03be00654622ff52714d Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Thu, 16 Feb 2012 00:53:58 +0600 Subject: [PATCH 01/18] [refs #194] first steps --- app/views/issues/_sidebar.html.haml | 118 ++++++++++++++++++++++++++++ app/views/issues/index.html.haml | 25 +----- config/application.rb | 2 +- config/locales/en.yml | 47 ----------- config/locales/issues/issues.en.yml | 38 +++++++++ config/locales/issues/issues.ru.yml | 37 +++++++++ config/locales/ru.yml | 30 ------- 7 files changed, 197 insertions(+), 100 deletions(-) create mode 100644 app/views/issues/_sidebar.html.haml create mode 100644 config/locales/issues/issues.en.yml create mode 100644 config/locales/issues/issues.ru.yml diff --git a/app/views/issues/_sidebar.html.haml b/app/views/issues/_sidebar.html.haml new file mode 100644 index 000000000..22070beed --- /dev/null +++ b/app/views/issues/_sidebar.html.haml @@ -0,0 +1,118 @@ +-content_for :sidebar do + .bordered.nopadding + %h3=t("layout.issues.accessory") + %table + %tr + %td.width18 + %input#myradio1.niceRadio{:checked => "checked", :name => "myradio", :tabindex => "1", :type => "radio"} + %td.width135 + =t("layout.issues.all") + %td.width30.right + = @project.issues.count + %tr + %td + %input#myradio2.niceRadio{:name => "myradio", :tabindex => "2", :type => "radio"} + %td + =t("layout.issues.mine") + %td.width30.right + = @project.issues.where(:user_id => current_user).count + .bordered.bpadding20 + %input.gray{:onClick => "if(this.value=='Найти задачу...'){this.value='';this.className='black';}", :onblur => "if(this.value==''){this.value='Найти задачу...';this.className='gray';}", :type => "text", :value => "Найти задачу..."}/ + .bordered.nopadding + %h3.bmargin10 Добавить задачу + %a.button{:href => "#"} Добавить + .block + %h3 Метки + #labels-edit{:style => "display: none;"} + #label-delete1.label.edit + .labeltext.edit{:style => "background: #39b54a;"} + .text 2-3 stable + #delete1.delete + %img{:alt => "x", :src => "pics/x-label.png"}/ + .both + #label-delete2.label.edit + .labeltext.edit{:style => "background: #ed1c24;"} + .text 3-0 stable + #delete2.delete + %img{:alt => "x", :src => "pics/x-label.png"}/ + .both + #label-delete3.label.edit + .labeltext.edit{:style => "background: #ed145b;"} + .text actionpack + #delete3.delete + %img{:alt => "x", :src => "pics/x-label.png"}/ + .both + #label-delete4.label.edit + .labeltext.edit{:style => "background: #92278f;"} + .text activemodel + #delete4.delete + %img{:alt => "x", :src => "pics/x-label.png"}/ + .both + %input.gray{:onClick => "if(this.value=='Название новой метки'){this.value='';this.className='black';}", :onblur => "if(this.value==''){this.value='Название новой метки';this.className='gray';}", :type => "text", :value => "Название новой метки"}/ + .colors + .color{:style => "background: #0054a6;"} + #choose1.choose.selected + .color{:style => "background: #00a651;"} + #choose2.choose + .color{:style => "background: #ed1c24;"} + #choose3.choose + .color{:style => "background: #e65c00;"} + #choose4.choose + .color{:style => "background: #9e005d;"} + #choose5.choose + .color{:style => "background: #464646;"} + #choose6.choose + .color{:style => "background: #8c6239;"} + #choose7.choose + .both + .lefter + %a{:href => "#"} Custom color + .righter + %a.button{:href => "#"} Добавить + .both + #labels-stock + #label-2-3-stable.div-tracker-lables{:name => "label"} + .div-label-left + .label + #flag-2-3-stable.flag{:style => "background-color: #39b54a;"} + .labeltext + 2-3 stable + .both + .div-label-right + 15 + .both + .both + #label-3-0-stable.div-tracker-lables{:name => "label"} + .div-label-left + .label + #flag-3-0-stable.flag{:style => "background-color: #ed1c24;"} + .labeltext + 3-0 stable + .both + .div-label-right + 100 + .both + .both + #label-actionpack.div-tracker-lables{:name => "label"} + .div-label-left + .label + #flag-actionpack.flag{:style => "background-color: #ed145b;"} + .labeltext + actionpack + .both + .div-label-right + 22 + .both + .both + #label-activemodel.div-tracker-lables{:name => "label"} + .div-label-left + .label + #flag-activemodel.flag{:style => "background-color: #92278f;"} + .labeltext + activemodel + .both + .div-label-right + 3 + .both + .both + %a#manage-labels.button.tmargin10{:href => "#"} Manage \ No newline at end of file diff --git a/app/views/issues/index.html.haml b/app/views/issues/index.html.haml index 9f1c6306d..2b49a31ef 100644 --- a/app/views/issues/index.html.haml +++ b/app/views/issues/index.html.haml @@ -1,22 +1,3 @@ -.block - .secondary-navigation - %ul.wat-cf - %li.first.active= link_to t("layout.issues.list"), project_issues_path(@project) - %li= link_to t("layout.issues.new"), new_project_issue_path(@project) if can? :new, Issue.new(:project_id => @project.id) - .secondary-navigation - %ul.wat-cf - %li{:class => "first " + (params[:status].blank? ? "active" : "")} - = link_to t("layout.issues.statuses.any"), project_issues_path(@project) - %li{:class => "first " + (params[:status] == 'open' ? "active" : "")} - = link_to t("layout.issues.statuses.open"), project_issues_path(@project, :status => 'open') - %li{:class => "first " + (params[:status] == 'closed' ? "active" : "")} - = link_to t("layout.issues.statuses.closed"), project_issues_path(@project, :status => 'closed') - .content - %h2.title - = t("layout.issues.list_header") - .inner - = render :partial => 'shared/search_form' - = render :partial => 'issues/list' - .actions-bar.wat-cf - .actions - = will_paginate @issues#, :param_name => :issue_page +-render :partial => 'projects/submenu' +-render :partial => 'issues/sidebar' + diff --git a/config/application.rb b/config/application.rb index 7729c9f09..99fbb1300 100644 --- a/config/application.rb +++ b/config/application.rb @@ -37,7 +37,7 @@ module Rosa # config.time_zone = 'Central Time (US & Canada)' # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. - # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**/*.yml').to_s] config.i18n.default_locale = :en config.action_view.javascript_expansions[:defaults] = %w() diff --git a/config/locales/en.yml b/config/locales/en.yml index 8806dd1db..7545e255c 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -108,23 +108,6 @@ en: edit_header: Edit category confirm_delete: Are you sure to delete this category? - issues: - list: List - edit: Edit - comments_header: Comments - new: New task - list_header: List - confirm_delete: Are you sure to delete this task? - edit_header: Task edit - new_header: New task - statuses: - open: Opened - closed: Closed - any: Any - subscribe: Subscribe - subscribe_btn: Subscribe - unsubscribe_btn: Unsubscribe - comments: confirm_delete: Are you sure to delete the comment? new_header: New comment @@ -413,23 +396,6 @@ en: edit_header: Edit category confirm_delete: Are you sure to delete this category? - issues: - list: List - edit: Edit - comments_header: Comments - new: New task - list_header: List - confirm_delete: Are you sure to delete this task? - edit_header: Task edit - new_header: New task - statuses: - open: Opened - closed: Closed - any: Any - subscribe: Subscribe - subscribe_btn: Subscribe - unsubscribe_btn: Unsubscribe - commits: subscribe_btn: Subscribe to commit unsubscribe_btn: Unsubscribe from commit @@ -593,11 +559,6 @@ en: save_error: Comment saves error destroyed: Comment deleted - issue: - saved: Task saved - save_error: Task saves error - destroyed: Task deleted - project: saved: Project saved save_error: Project saves error @@ -739,14 +700,6 @@ en: body: Content user: Author - issue: - title: Title - body: Content - user: Assigned - user_id: Assigned - project: Project - status: Status - private_user: login: Login password: Password diff --git a/config/locales/issues/issues.en.yml b/config/locales/issues/issues.en.yml new file mode 100644 index 000000000..5dae44b66 --- /dev/null +++ b/config/locales/issues/issues.en.yml @@ -0,0 +1,38 @@ +en: + activerecord: + attributes: + issue: + title: Title + body: Content + user: Assigned + user_id: Assigned + project: Project + status: Status + + layout: + issues: + accessory: Accessory issues + list: List + all: All + mine: Assigned to me + edit: Edit + comments_header: Comments + new: New task + list_header: List + confirm_delete: Are you sure to delete this task? + edit_header: Task edit + new_header: New task + statuses: + open: Opened + closed: Closed + any: Any + subscribe: Subscribe + subscribe_btn: Subscribe + unsubscribe_btn: Unsubscribe + + flash: + issue: + saved: Task saved + save_error: Task saves error + destroyed: Task deleted + diff --git a/config/locales/issues/issues.ru.yml b/config/locales/issues/issues.ru.yml new file mode 100644 index 000000000..8cc772e75 --- /dev/null +++ b/config/locales/issues/issues.ru.yml @@ -0,0 +1,37 @@ +ru: + activerecord: + attributes: + issue: + title: Заголовок + body: Содержание + user: Назначена + user_id: Назначена + project: Проект + status: Статус + + layout: + issues: + accessory: Принадлежность заданий + list: Список + all: Все + mine: Назначенные мне + edit: Редактировать + comments_header: Комментарии + new: Новая задача + list_header: Список + confirm_delete: Вы уверены, что хотите удалить эту задачу? + edit_header: Редактирование задачи + new_header: Новая задача + statuses: + open: Открытые + closed: Закрытые + any: Все + subscribe: Подписка на уведомления + subscribe_btn: Подписаться + unsubscribe_btn: Отписаться + + flash: + issue: + saved: Задача успешно сохранена + save_error: Не удалось сохранить задачу + destroyed: Задача успешно удалена \ No newline at end of file diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 8c8fac327..0a923a31b 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -108,23 +108,6 @@ ru: edit_header: Редактировать категорию confirm_delete: Вы уверены, что хотите удалить эту категорию? - issues: - list: Список - edit: Редактировать - comments_header: Комментарии - new: Новая задача - list_header: Список - confirm_delete: Вы уверены, что хотите удалить эту задачу? - edit_header: Редактирование задачи - new_header: Новая задача - statuses: - open: Открытые - closed: Закрытые - any: Все - subscribe: Подписка на уведомления - subscribe_btn: Подписаться - unsubscribe_btn: Отписаться - comments: confirm_delete: Вы уверены, что хотите удалить комментарий? new_header: Новый комментарий @@ -465,11 +448,6 @@ ru: save_error: Ошибка сохранения комментария destroyed: Комментарий удален - issue: - saved: Задача успешно сохранена - save_error: Не удалось сохранить задачу - destroyed: Задача успешно удалена - project: saved: Проект успешно сохранен save_error: Не удалось сохранить проект @@ -601,14 +579,6 @@ ru: body: Содержание user: Автор - issue: - title: Заголовок - body: Содержание - user: Назначена - user_id: Назначена - project: Проект - status: Статус - private_user: login: Логин password: Пароль From 76beb6a2776eb7b67d235b5d72afe552fc657e58 Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Sun, 19 Feb 2012 23:27:47 +0600 Subject: [PATCH 02/18] [refs #194] add creator to issue --- app/models/issue.rb | 1 + app/models/user.rb | 4 ++++ db/migrate/20120219161749_add_creator_to_issue.rb | 5 +++++ 3 files changed, 10 insertions(+) create mode 100644 db/migrate/20120219161749_add_creator_to_issue.rb diff --git a/app/models/issue.rb b/app/models/issue.rb index be6598f2d..134a617ce 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -4,6 +4,7 @@ class Issue < ActiveRecord::Base belongs_to :project belongs_to :user + belongs_to :creator, :class_name => 'User', :foreign_key => 'creator_id' has_many :comments, :as => :commentable, :dependent => :destroy #, :finder_sql => proc { "comments.commentable_id = '#{self.id}' AND comments.commentable_type = '#{self.class.name}'"} has_many :subscribes, :as => :subscribeable, :dependent => :destroy #, :finder_sql => proc { "subscribes.subscribeable_id = '#{self.id}' AND subscribes.subscribeable_type = '#{self.class.name}'"} diff --git a/app/models/user.rb b/app/models/user.rb index 96c63dfb9..a80cbcc38 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -96,6 +96,10 @@ class User < ActiveRecord::Base email.downcase == commit.committer.email.downcase end + def avatar(size) + "https://secure.gravatar.com/avatar/#{Digest::MD5.hexdigest(email.downcase)}?s=#{size}&r=pg" + end + private def create_settings_notifier diff --git a/db/migrate/20120219161749_add_creator_to_issue.rb b/db/migrate/20120219161749_add_creator_to_issue.rb new file mode 100644 index 000000000..54a3ba492 --- /dev/null +++ b/db/migrate/20120219161749_add_creator_to_issue.rb @@ -0,0 +1,5 @@ +class AddCreatorToIssue < ActiveRecord::Migration + def change + add_column :issues, :creator_id, :integer + end +end From 5dcc4eabf823ce1cb648dd00f59c48ab2120f4a3 Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Mon, 20 Feb 2012 22:54:45 +0600 Subject: [PATCH 03/18] [refs #194] tracker without tags manage --- app/assets/javascripts/radio.js | 6 +- app/assets/javascripts/tracker.js | 237 ++++++++++++++++----------- app/controllers/issues_controller.rb | 17 +- app/views/issues/_list.html.haml | 42 +++-- app/views/issues/_sidebar.html.haml | 54 +++--- app/views/issues/index.html.haml | 19 +++ app/views/layouts/issues.html.haml | 4 + app/views/platforms/show.html.haml | 112 +++---------- config/locales/issues/issues.en.yml | 8 +- config/locales/issues/issues.ru.yml | 8 +- 10 files changed, 263 insertions(+), 244 deletions(-) create mode 100644 app/views/layouts/issues.html.haml diff --git a/app/assets/javascripts/radio.js b/app/assets/javascripts/radio.js index 2090fedf3..c79a8613a 100644 --- a/app/assets/javascripts/radio.js +++ b/app/assets/javascripts/radio.js @@ -102,7 +102,11 @@ var el = el, el.next().find("input").eq(0).attr("disabled","disabled"); } - el.next().bind("mousedown", function(e) { changeRadio(jQuery(this)) }); + el.next().bind("mousedown", function(e) { + changeRadio(jQuery(this)); + $(this).find("input:radio").change(); + }); + 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(); diff --git a/app/assets/javascripts/tracker.js b/app/assets/javascripts/tracker.js index 74b75bb65..88c885f65 100644 --- a/app/assets/javascripts/tracker.js +++ b/app/assets/javascripts/tracker.js @@ -1,37 +1,49 @@ $(document).ready(function() { - $("#closed-switcher").click(function() { - if ($("#blue-switch-select").css("margin-left") != "130px") { - $("#blue-switch-select").animate({"margin-left": "+=130px"}, "fast"); - $("#table1").fadeOut(0); - $("#table2").fadeIn("slow"); - } - else { - $("#blue-switch-select").animate({"margin-left": "-=130px"}, "fast"); - $("#table2").fadeOut(0); - $("#table1").fadeIn("slow"); - } + $("#closed-switcher").live('click', function() { + if ($("#blue-switch-select").css("margin-left") != "130px") { + $("#blue-switch-select").animate({"margin-left": "+=130px"}, "fast"); + $("#table1").fadeOut(0); + $("#table2").fadeIn("slow"); + var status = 'closed' + } + else { + $("#blue-switch-select").animate({"margin-left": "-=130px"}, "fast"); + $("#table2").fadeOut(0); + $("#table1").fadeIn("slow"); + var status = 'open' + } + var form = $('#filter_issues'); + $.ajax({ + type: "GET", + url: form.attr("action"), + data: form.serialize() + '&status=' + status, + success: function(data){ + $('article').html(data); + $(".niceRadio").each(function() { changeRadioStart(jQuery(this)) }); + } + }); }); }); -$(document).ready(function() { -$("#myTable").tablesorter({ - headers: { - 1: { - sorter: false - } - } -}); +$(document).ready(function() { +$("#myTable").tablesorter({ + headers: { + 1: { + sorter: false + } + } +}); }); -$(document).ready(function() { -$("#myTable2").tablesorter({ - headers: { - 1: { - sorter: false +$(document).ready(function() { +$("#myTable2").tablesorter({ + headers: { + 1: { + sorter: false } } -}); +}); }); $(document).ready(function() { @@ -50,73 +62,73 @@ $(document).ready(function() { $(document).ready(function() { $("div.div-tracker-lables").click(function() { - var flag = this.id; - flag = flag.replace("label-","flag-"); - var bg = $("#"+flag).css("background-color"); - if ($(this).css("background-color") != bg) { - $(this).css("background-color",bg); - $(this).css("color","#FFFFFF"); - var labels = document.getElementsByName("label"); - var rows = document.getElementsByName("row"); - var arrayLabels; - var rowState = 0; - for (var r in rows) { - for (var l in labels) { - var ro = document.getElementById(rows[r].id); - var cls = ro.className; - var clsLabel = labels[l].id.split("label-")[1]; - if (($("#"+labels[l].id).css("background-color") != "rgb(247, 247, 247)")&&($("#"+labels[l].id).css("background-color") != "transparent")) { - if (cls.indexOf(clsLabel) != -1) { - rowState = 1; - } - } - } - if (rowState == 1) { - showRow(rows[r].id); - rowState = 0; - } - else { - hideRow(rows[r].id); - } - } - } else { - $(this).css("background-color","rgb(247, 247, 247)"); - $(this).css("color","#565657"); - var labels = document.getElementsByName("label"); - var rows = document.getElementsByName("row"); - var rowState = 0; - var labelState = 0; - for (var l in labels) { - if (($("#"+labels[l].id).css("background-color") != "rgb(247, 247, 247)")&&($("#"+labels[l].id).css("background-color") != "transparent")) { - labelState = 1; - } - } - if (labelState == 1) { - for (var r in rows) { - for (var l in labels) { - var ro = document.getElementById(rows[r].id); - var cls = ro.className; - var clsLabel = labels[l].id.split("label-")[1]; - if (($("#"+labels[l].id).css("background-color") != "rgb(247, 247, 247)")&&($("#"+labels[l].id).css("background-color") != "transparent")) { - if (cls.indexOf(clsLabel) != -1) { - rowState = 1; - } - } - } - if (rowState == 1) { - showRow(rows[r].id); - rowState = 0; - } - else { - hideRow(rows[r].id); - } - } - } else { - for (var r in rows) { - showRow(rows[r].id); - } - } - } + var flag = this.id; + flag = flag.replace("label-","flag-"); + var bg = $("#"+flag).css("background-color"); + if ($(this).css("background-color") != bg) { + $(this).css("background-color",bg); + $(this).css("color","#FFFFFF"); + var labels = document.getElementsByName("label"); + var rows = document.getElementsByName("row"); + var arrayLabels; + var rowState = 0; + for (var r in rows) { + for (var l in labels) { + var ro = document.getElementById(rows[r].id); + var cls = ro.className; + var clsLabel = labels[l].id.split("label-")[1]; + if (($("#"+labels[l].id).css("background-color") != "rgb(247, 247, 247)")&&($("#"+labels[l].id).css("background-color") != "transparent")) { + if (cls.indexOf(clsLabel) != -1) { + rowState = 1; + } + } + } + if (rowState == 1) { + showRow(rows[r].id); + rowState = 0; + } + else { + hideRow(rows[r].id); + } + } + } else { + $(this).css("background-color","rgb(247, 247, 247)"); + $(this).css("color","#565657"); + var labels = document.getElementsByName("label"); + var rows = document.getElementsByName("row"); + var rowState = 0; + var labelState = 0; + for (var l in labels) { + if (($("#"+labels[l].id).css("background-color") != "rgb(247, 247, 247)")&&($("#"+labels[l].id).css("background-color") != "transparent")) { + labelState = 1; + } + } + if (labelState == 1) { + for (var r in rows) { + for (var l in labels) { + var ro = document.getElementById(rows[r].id); + var cls = ro.className; + var clsLabel = labels[l].id.split("label-")[1]; + if (($("#"+labels[l].id).css("background-color") != "rgb(247, 247, 247)")&&($("#"+labels[l].id).css("background-color") != "transparent")) { + if (cls.indexOf(clsLabel) != -1) { + rowState = 1; + } + } + } + if (rowState == 1) { + showRow(rows[r].id); + rowState = 0; + } + else { + hideRow(rows[r].id); + } + } + } else { + for (var r in rows) { + showRow(rows[r].id); + } + } + } }); }); @@ -130,9 +142,38 @@ function showRow(elem) { } function hideRow(elem) { - if ($("#"+elem).css("display") != "none") { - $("#"+elem).fadeOut("fast"); - } else { - //$("#"+elem).fadeOut(0); - } -} \ No newline at end of file + if ($("#"+elem).css("display") != "none") { + $("#"+elem).fadeOut("fast"); + } else { + //$("#"+elem).fadeOut(0); + } +} + +$(document).ready(function() { + $("#myradio1").live('change', function(event) { + var form = $('#filter_issues'); + $.ajax({ + type: "GET", + url: form.attr("action"), + data: form.serialize(), + success: function(data){ + $('article').html(data); + $(".niceRadio").each(function() { changeRadioStart(jQuery(this)) }); + } + }); + return false; + }); + + $('#search_issue').live('submit', function() { + $.ajax({ + type: "GET", + url: $(this).attr("action"), + data: $(this).serialize(), + success: function(data){ + $('article').html(data); + $(".niceRadio").each(function() { changeRadioStart(jQuery(this)) }); + } + }); + return false; + }); +}); diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 466e574db..eb9cc9d46 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -8,16 +8,21 @@ class IssuesController < ApplicationController load_and_authorize_resource :issue, :through => :project, :find_by => :serial_id autocomplete :user, :uname + layout 'application' def index @issues = @project.issues - case params[:status] - when 'open' - @issues = @issues.where(:status => 'open') - when 'closed' - @issues = @issues.where(:status => 'closed') + @is_assigned_to_me = params[:filter] == 'to_me' + @is_all = params[:filter] == 'all' + @issues = @issues.where(:user_id => current_user.id) if @is_assigned_to_me + @status = (params[:status] if ['open', 'closed'].include? params[:status]) || 'open' + + if params[:search] + @is_assigned_to_me = false + @issues = @project.issues.where('issues.title ILIKE ?', "%#{params[:search]}%") end - @issues = @issues.paginate :per_page => 10, :page => params[:page] + @issues = @issues.includes(:creator, :user).paginate :per_page => 10, :page => params[:page] + render :layout => request.format == '*/*' ? 'issues' : 'application' # maybe FIXME '*/*'? end def new diff --git a/app/views/issues/_list.html.haml b/app/views/issues/_list.html.haml index 096558d58..64251d499 100644 --- a/app/views/issues/_list.html.haml +++ b/app/views/issues/_list.html.haml @@ -1,18 +1,24 @@ -%table.table - %tr - %th.first= t("activerecord.attributes.issue.title") - %th.first= t("activerecord.attributes.issue.user") - %th.first= t("activerecord.attributes.issue.status") - %th.last   - - @issues.each do |issue| - %tr{:class => cycle("odd", "even")} - %td - = link_to issue.title, [@project, issue] - %td - = link_to issue.user.uname, user_path(issue.user) if issue.user - %td - = issue.status - %td.last - = link_to t("layout.show"), [@project, issue] - | - = link_to t("layout.delete"), project_issue_path(@project, issue), :method => :delete, :confirm => t("layout.issues.confirm_delete") if can? :destroy, issue +%tr#row1.2-3-stable{:name => "row"} + %td.td0 + %span{:style => "display: none;"}=issue.serial_id + %td.td1=issue.serial_id + %td + %div=issue.title + .smalltext + =issue.created_at.to_s(:long) + =t("layout.issues.by") if issue.creator + =link_to(issue.creator.uname, user_path(issue.creator)) if issue.creator + .label.selected.tracker + .labeltext.selected{:style => "background: #39b54a;"} + 2-3 stable + .both + %td.td3 + .code=link_to '#', [@project, issue] + .avatar + =link_to image_tag(issue.user.avatar(22), :alt => 'avatar'), user_path(issue.user) if issue.user + %a{:href => "#{project_issue_path @project, issue}#block-list"} + .answers + .pic + %img{:alt => '', :src => "/assets/answers.png"} + .count=issue.comments.count + .both \ No newline at end of file diff --git a/app/views/issues/_sidebar.html.haml b/app/views/issues/_sidebar.html.haml index 22070beed..a8bb181cc 100644 --- a/app/views/issues/_sidebar.html.haml +++ b/app/views/issues/_sidebar.html.haml @@ -1,26 +1,28 @@ -content_for :sidebar do + =form_tag project_issues_path(@project), :id => 'filter_issues', :method => :get do + .bordered.nopadding + %h3=t("layout.issues.accessory") + %table + %tr + %td.width18 + =radio_button_tag :myradio, 'all', !@is_assigned_to_me, {:id => 'myradio1', :class => 'niceRadio', :name => 'filter'} + %td.width135 + =t("layout.issues.all") + %td.width30.right + = @project.issues.count + %tr + %td + =radio_button_tag :myradio, 'to_me', @is_assigned_to_me, {:id => 'myradio1', :class => 'niceRadio', :name => 'filter'} + %td + =t("layout.issues.to_me") + %td.width30.right + = @project.issues.where(:user_id => current_user).count + =form_tag project_issues_path(@project), :id => 'search_issue', :method => :get do + .bordered.bpadding20 + =text_field_tag :search, t('layout.issues.search'), :class => 'gray', :onClick => "if(this.value=='#{t('layout.issues.search')}'){this.value='';this.className='black';}", :onblur => "if(this.value==''){this.value='#{t('layout.issues.search')}';this.className='gray';}" .bordered.nopadding - %h3=t("layout.issues.accessory") - %table - %tr - %td.width18 - %input#myradio1.niceRadio{:checked => "checked", :name => "myradio", :tabindex => "1", :type => "radio"} - %td.width135 - =t("layout.issues.all") - %td.width30.right - = @project.issues.count - %tr - %td - %input#myradio2.niceRadio{:name => "myradio", :tabindex => "2", :type => "radio"} - %td - =t("layout.issues.mine") - %td.width30.right - = @project.issues.where(:user_id => current_user).count - .bordered.bpadding20 - %input.gray{:onClick => "if(this.value=='Найти задачу...'){this.value='';this.className='black';}", :onblur => "if(this.value==''){this.value='Найти задачу...';this.className='gray';}", :type => "text", :value => "Найти задачу..."}/ - .bordered.nopadding - %h3.bmargin10 Добавить задачу - %a.button{:href => "#"} Добавить + %h3.bmargin10=t('layout.issues.new') + = link_to t("layout.add"), new_project_issue_path(@project), :class => 'button' if can? :new, Issue.new(:project_id => @project.id) .block %h3 Метки #labels-edit{:style => "display: none;"} @@ -28,25 +30,25 @@ .labeltext.edit{:style => "background: #39b54a;"} .text 2-3 stable #delete1.delete - %img{:alt => "x", :src => "pics/x-label.png"}/ + %img{:alt => "x", :src => "/assets/x-label.png"}/ .both #label-delete2.label.edit .labeltext.edit{:style => "background: #ed1c24;"} .text 3-0 stable #delete2.delete - %img{:alt => "x", :src => "pics/x-label.png"}/ + %img{:alt => "x", :src => "/assets/x-label.png"}/ .both #label-delete3.label.edit .labeltext.edit{:style => "background: #ed145b;"} .text actionpack #delete3.delete - %img{:alt => "x", :src => "pics/x-label.png"}/ + %img{:alt => "x", :src => "/assets/x-label.png"}/ .both #label-delete4.label.edit .labeltext.edit{:style => "background: #92278f;"} .text activemodel #delete4.delete - %img{:alt => "x", :src => "pics/x-label.png"}/ + %img{:alt => "x", :src => "/assets/x-label.png"}/ .both %input.gray{:onClick => "if(this.value=='Название новой метки'){this.value='';this.className='black';}", :onblur => "if(this.value==''){this.value='Название новой метки';this.className='gray';}", :type => "text", :value => "Название новой метки"}/ .colors @@ -115,4 +117,4 @@ 3 .both .both - %a#manage-labels.button.tmargin10{:href => "#"} Manage \ No newline at end of file + %a#manage-labels.button.tmargin10{:href => "#"} Manage diff --git a/app/views/issues/index.html.haml b/app/views/issues/index.html.haml index 2b49a31ef..0d7efd0e0 100644 --- a/app/views/issues/index.html.haml +++ b/app/views/issues/index.html.haml @@ -1,3 +1,22 @@ -render :partial => 'projects/submenu' -render :partial => 'issues/sidebar' +#closed-switcher.blue-switcher + .open + ="#{t('layout.issues.statuses.open')} (#{@issues.where(:status => 'open').count})" + #closed-tasks.closed + ="#{t('layout.issues.statuses.closed')} (#{@issues.where(:status => 'closed').count})" + #blue-switch-select.selected{:style => "margin-left: #{@status == 'open' ? '0' : '130'}px;"} + .both +.both +#table1 + %table#myTable.tablesorter.tracker{:cellpadding => "0", :cellspacing => "0"} + %thead + %tr + %th.th1{:colspan => "2"} + =t('layout.issues.number') + %th{:colspan => "2"} + =t('layout.issues.description') + %tbody + - @issues.where(:status => @status).each do |issue| + = render :partial => 'issues/list', :locals => {:issue => issue} \ No newline at end of file diff --git a/app/views/layouts/issues.html.haml b/app/views/layouts/issues.html.haml new file mode 100644 index 000000000..75987198b --- /dev/null +++ b/app/views/layouts/issues.html.haml @@ -0,0 +1,4 @@ +- if content_for?(:sidebar) + %aside= yield :sidebar + .right= yield +.both \ No newline at end of file diff --git a/app/views/platforms/show.html.haml b/app/views/platforms/show.html.haml index baf917e62..72ab6577a 100644 --- a/app/views/platforms/show.html.haml +++ b/app/views/platforms/show.html.haml @@ -1,119 +1,49 @@ .block .secondary-navigation %ul.wat-cf - %li.first= link_to t("layout.platforms.list"), platforms_path - %li= link_to t("layout.platforms.new"), new_platform_path if can? :create, Platform - %li.active= link_to t("layout.platforms.show"), platform_path - %li= link_to t("layout.platforms.private_users"), platform_private_users_path(@platform) + %li.first= link_to t("layout.repositories.list"), @repositories_path + "#repositories" + %li= link_to t("layout.repositories.new"), @new_repository_path + %li.active= link_to t("layout.repositories.show"), repository_path(@repository) .content .inner %p %b - = t("activerecord.attributes.platform.name") + = t("activerecord.attributes.repository.name") \: - = @platform.name + = @repository.name %p %b - = t("activerecord.attributes.platform.description") + = t("activerecord.attributes.repository.description") \: - = @platform.description - - if @platform.parent - %p - %b - = t("activerecord.attributes.platform.parent") - \: - - if @platform.parent - = link_to @platform.parent.description, platform_path(@platform.parent) + = @repository.description %p %b - = t('layout.platforms.location') + = t("activerecord.attributes.repository.platform") \: - = @platform.path - + = link_to @repository.platform.description, url_for(@repository.platform) %p %b - = t('layout.platforms.owner') + = t("activerecord.attributes.repository.owner") \: - = link_to @platform.owner.try(:name), url_for(@platform.owner) - - %p - %b - = t('layout.platforms.visibility') - \: - = @platform.visibility - - %p - %b - = t('layout.platforms.platform_type') - \: - = @platform.platform_type - - %p - %b - = t('layout.platforms.distrib_type') - \: - = @platform.distrib_type - - + = link_to @repository.owner.try(:name), url_for(@repository.owner) .wat-cf - -#= link_to image_tag("web-app-theme/icons/application_edit.png", :alt => t("layout.edit")) + " " + t("layout.edit"), edit_platform_path(@platform), :class => "button" - = link_to image_tag("web-app-theme/icons/cross.png", :alt => t("layout.delete")) + " " + t("layout.delete"), platform_path(@platform), :method => "delete", :class => "button", :confirm => t("layout.platforms.confirm_delete") if can? :delete, @platform - - if @platform.released? - = link_to t("layout.platforms.unfreeze"), unfreeze_platform_path(@platform), :confirm => I18n.t("layout.platforms.confirm_unfreeze"), :method => :post, :class => "button" if can? :unfreeze, @platform - - else - = link_to t("layout.platforms.freeze"), freeze_platform_path(@platform), :confirm => I18n.t("layout.platforms.confirm_freeze"), :method => :post, :class => "button" if can? :freeze, @platform - = link_to "Клонировать", clone_platform_path(@platform), :class => "button" if can? :clone, @platform - = link_to t("layout.platforms.build_all"), build_all_platform_path(@platform), :confirm => I18n.t("layout.confirm"), :method => :post, :class => "button" if can? :build_all, @platform - = link_to t("layout.platforms.edit"), edit_platform_path(@platform), :class => "button" if can? :edit, @platform + = link_to image_tag("web-app-theme/icons/cross.png", :alt => t("layout.delete")) + " " + t("layout.delete"), @repository_path, :method => "delete", :class => "button", :confirm => t("layout.repositories.confirm_delete") if can? :destroy, @repository -%a{ :name => "repositories" } +%a{ :name => "projects" } .block .secondary-navigation %ul.wat-cf - %li.first.active= link_to t("layout.repositories.list"), platform_path(@platform) + "#repositories" - %li= link_to t("layout.repositories.new"), new_platform_repository_path(@platform) if can? :create, Repository.build_stub(@platform) + %li.first.active= link_to t("layout.projects.list"), repository_path(@repository) + "#projects" + %li= link_to t("layout.projects.add"), url_for(:controller => :repositories, :action => :add_project) .content %h2.title - = t("layout.repositories.list_header") + = t("layout.projects.list_header") .inner - %table.table - %tr - %th.first= t("activerecord.attributes.repository.description") - %th.last   - - @platform.repositories.recent.each do |repository| - %tr{:class => cycle("odd", "even")} - %td - = link_to repository.description, platform_repository_path(@platform, repository) - %td.last - = link_to t("layout.show"), platform_repository_path(@platform, repository) - | - = link_to t("layout.delete"), platform_repository_path(@platform, repository), :method => :delete, :confirm => t("layout.repositories.confirm_delete") if can? :destroy, @platform + = render :partial => 'shared/search_form' + = render :partial => 'proj_list1', :object => @projects .actions-bar.wat-cf .actions + = will_paginate @projects, :param_name => :project_page -%a{ :name => "producs" } -.block - .secondary-navigation - %ul.wat-cf - %li.first.active= link_to t("layout.products.list"), platform_path(@platform) + "#products" - %li= link_to t("layout.products.new"), new_platform_product_path(@platform) if can? :create, Product.new(:platform_id => @platform.id) - .content - %h2.title - = t("layout.products.list_header") - .inner - %table.table - %tr - %th.first= t("activerecord.attributes.product.name") - %th.last   - - @platform.products.recent.each do |product| - %tr{:class => cycle("odd", "even")} - %td - = link_to product.name, [@platform, product] - %td.last - = link_to t("layout.edit"), edit_platform_product_path(@platform, product) if can? :update, product - | - = link_to t("layout.delete"), platform_product_path(@platform, product), :method => :delete, :confirm => t("layout.products.confirm_delete") if can? :destroy, product - = (product.can_clone? ? "| #{link_to t("layout.products.clone"), clone_platform_product_path(@platform, product)}" : "").html_safe - .actions-bar.wat-cf - .actions -- content_for :sidebar, render(:partial => 'sidebar') + +-# content_for :sidebar, render(:partial => 'sidebar') diff --git a/config/locales/issues/issues.en.yml b/config/locales/issues/issues.en.yml index 5dae44b66..413be359d 100644 --- a/config/locales/issues/issues.en.yml +++ b/config/locales/issues/issues.en.yml @@ -14,10 +14,11 @@ en: accessory: Accessory issues list: List all: All - mine: Assigned to me + to_me: Assigned to me edit: Edit + search: Search issue... comments_header: Comments - new: New task + new: New issue list_header: List confirm_delete: Are you sure to delete this task? edit_header: Task edit @@ -29,6 +30,9 @@ en: subscribe: Subscribe subscribe_btn: Subscribe unsubscribe_btn: Unsubscribe + number: Number + description: Description + by: by flash: issue: diff --git a/config/locales/issues/issues.ru.yml b/config/locales/issues/issues.ru.yml index 8cc772e75..d7477a4c0 100644 --- a/config/locales/issues/issues.ru.yml +++ b/config/locales/issues/issues.ru.yml @@ -14,10 +14,11 @@ ru: accessory: Принадлежность заданий list: Список all: Все - mine: Назначенные мне + to_me: Назначенные мне edit: Редактировать + search: Найти задачу... comments_header: Комментарии - new: Новая задача + new: Добавить задачу list_header: Список confirm_delete: Вы уверены, что хотите удалить эту задачу? edit_header: Редактирование задачи @@ -29,6 +30,9 @@ ru: subscribe: Подписка на уведомления subscribe_btn: Подписаться unsubscribe_btn: Отписаться + number: Номер + description: Описание + by: flash: issue: From 0ce76207afd42e0a1f93000fa8586f6288aa3c79 Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Tue, 21 Feb 2012 00:41:40 +0600 Subject: [PATCH 04/18] [refs #194] Add issue tags --- app/models/issue.rb | 1 + app/models/tag.rb | 8 ++++++++ config/locales/issues/issues.en.yml | 3 ++- config/locales/issues/issues.ru.yml | 4 +++- db/migrate/20120220175615_create_tags.rb | 15 +++++++++++++++ spec/models/tag_spec.rb | 5 +++++ 6 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 app/models/tag.rb create mode 100644 db/migrate/20120220175615_create_tags.rb create mode 100644 spec/models/tag_spec.rb diff --git a/app/models/issue.rb b/app/models/issue.rb index 134a617ce..d01063c8d 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -8,6 +8,7 @@ class Issue < ActiveRecord::Base has_many :comments, :as => :commentable, :dependent => :destroy #, :finder_sql => proc { "comments.commentable_id = '#{self.id}' AND comments.commentable_type = '#{self.class.name}'"} has_many :subscribes, :as => :subscribeable, :dependent => :destroy #, :finder_sql => proc { "subscribes.subscribeable_id = '#{self.id}' AND subscribes.subscribeable_type = '#{self.class.name}'"} + has_many :tags, :dependent => :destroy validates :title, :body, :project_id, :presence => true diff --git a/app/models/tag.rb b/app/models/tag.rb new file mode 100644 index 000000000..4f8268ba8 --- /dev/null +++ b/app/models/tag.rb @@ -0,0 +1,8 @@ +class Tag < ActiveRecord::Base + belongs_to :issue + + validates :name, :color, :presence => true + validates :color, :format => { :with => /\A([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})\z/, :message => I18n.t('layout.issues.invalid_labels')} + + before_create {|t| t.project_id = t.issue.project_id} +end diff --git a/config/locales/issues/issues.en.yml b/config/locales/issues/issues.en.yml index 413be359d..8b56638d8 100644 --- a/config/locales/issues/issues.en.yml +++ b/config/locales/issues/issues.en.yml @@ -33,10 +33,11 @@ en: number: Number description: Description by: by + labels: Labels + invalid_labels: Invalid hex color code flash: issue: saved: Task saved save_error: Task saves error destroyed: Task deleted - diff --git a/config/locales/issues/issues.ru.yml b/config/locales/issues/issues.ru.yml index d7477a4c0..ae35430c6 100644 --- a/config/locales/issues/issues.ru.yml +++ b/config/locales/issues/issues.ru.yml @@ -33,9 +33,11 @@ ru: number: Номер description: Описание by: + labels: Метки + invalid_labels: Неверный hex код flash: issue: saved: Задача успешно сохранена save_error: Не удалось сохранить задачу - destroyed: Задача успешно удалена \ No newline at end of file + destroyed: Задача успешно удалена diff --git a/db/migrate/20120220175615_create_tags.rb b/db/migrate/20120220175615_create_tags.rb new file mode 100644 index 000000000..e693bbb32 --- /dev/null +++ b/db/migrate/20120220175615_create_tags.rb @@ -0,0 +1,15 @@ +class CreateTags < ActiveRecord::Migration + def change + create_table :tags do |t| + t.string :name, :null => false + t.string :color, :null => false + t.integer :issue_id, :null => false + t.integer :project_id, :null => false + + t.timestamps + end + + add_index :tags, :issue_id + add_index :tags, :project_id + end +end diff --git a/spec/models/tag_spec.rb b/spec/models/tag_spec.rb new file mode 100644 index 000000000..af7e7325e --- /dev/null +++ b/spec/models/tag_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe Tag do + pending "add some examples to (or delete) #{__FILE__}" +end From ecb29d17628efc1377f681276c41294e2ca2af11 Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Wed, 22 Feb 2012 02:28:04 +0600 Subject: [PATCH 05/18] [refs #194] tags -> labels --- app/models/issue.rb | 3 ++- app/models/{tag.rb => label.rb} | 7 +++---- app/models/labeling.rb | 7 +++++++ app/models/project.rb | 4 +++- config/locales/issues/issues.en.yml | 3 +++ config/locales/issues/issues.ru.yml | 3 +++ config/routes.rb | 4 ++++ db/migrate/20120220175615_create_labels.rb | 21 +++++++++++++++++++++ db/migrate/20120220175615_create_tags.rb | 15 --------------- spec/models/labels_spec.rb | 5 +++++ 10 files changed, 51 insertions(+), 21 deletions(-) rename app/models/{tag.rb => label.rb} (62%) create mode 100644 app/models/labeling.rb create mode 100644 db/migrate/20120220175615_create_labels.rb delete mode 100644 db/migrate/20120220175615_create_tags.rb create mode 100644 spec/models/labels_spec.rb diff --git a/app/models/issue.rb b/app/models/issue.rb index d01063c8d..90f01e1b1 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -8,7 +8,8 @@ class Issue < ActiveRecord::Base has_many :comments, :as => :commentable, :dependent => :destroy #, :finder_sql => proc { "comments.commentable_id = '#{self.id}' AND comments.commentable_type = '#{self.class.name}'"} has_many :subscribes, :as => :subscribeable, :dependent => :destroy #, :finder_sql => proc { "subscribes.subscribeable_id = '#{self.id}' AND subscribes.subscribeable_type = '#{self.class.name}'"} - has_many :tags, :dependent => :destroy + has_many :labels, :through => :labelings + has_many :labelings validates :title, :body, :project_id, :presence => true diff --git a/app/models/tag.rb b/app/models/label.rb similarity index 62% rename from app/models/tag.rb rename to app/models/label.rb index 4f8268ba8..16a01c91a 100644 --- a/app/models/tag.rb +++ b/app/models/label.rb @@ -1,8 +1,7 @@ -class Tag < ActiveRecord::Base - belongs_to :issue +class Label < ActiveRecord::Base + has_many :labelings + has_many :issues, :through => :labelings validates :name, :color, :presence => true validates :color, :format => { :with => /\A([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})\z/, :message => I18n.t('layout.issues.invalid_labels')} - - before_create {|t| t.project_id = t.issue.project_id} end diff --git a/app/models/labeling.rb b/app/models/labeling.rb new file mode 100644 index 000000000..899853d7d --- /dev/null +++ b/app/models/labeling.rb @@ -0,0 +1,7 @@ +class Labeling < ActiveRecord::Base + belongs_to :issue + belongs_to :project + belongs_to :label + + #before_create {|t| t.project_id = t.issue.project_id} +end diff --git a/app/models/project.rb b/app/models/project.rb index 68bdc9f62..0cc719c2e 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -17,6 +17,8 @@ class Project < ActiveRecord::Base has_many :relations, :as => :target, :dependent => :destroy has_many :collaborators, :through => :relations, :source => :object, :source_type => 'User' has_many :groups, :through => :relations, :source => :object, :source_type => 'Group' + has_many :labelings + has_many :labels, :through => :labelings validates :name, :uniqueness => {:scope => [:owner_id, :owner_type], :case_sensitive => false}, :presence => true, :format => { :with => /^[a-zA-Z0-9_\-\+\.]+$/ } validates :owner, :presence => true @@ -61,7 +63,7 @@ class Project < ActiveRecord::Base end end - def build_for(platform, user) + def build_for(platform, user) build_lists.create do |bl| bl.pl = platform bl.bpl = platform diff --git a/config/locales/issues/issues.en.yml b/config/locales/issues/issues.en.yml index 8b56638d8..def827d15 100644 --- a/config/locales/issues/issues.en.yml +++ b/config/locales/issues/issues.en.yml @@ -35,6 +35,9 @@ en: by: by labels: Labels invalid_labels: Invalid hex color code + new_label: New label name + label_custom_color: Custom color + label_manage: Manage flash: issue: diff --git a/config/locales/issues/issues.ru.yml b/config/locales/issues/issues.ru.yml index ae35430c6..b4bdc595e 100644 --- a/config/locales/issues/issues.ru.yml +++ b/config/locales/issues/issues.ru.yml @@ -35,6 +35,9 @@ ru: by: labels: Метки invalid_labels: Неверный hex код + new_label: Название новой метки + label_custom_color: Свой цвет + label_manage: Управление flash: issue: diff --git a/config/routes.rb b/config/routes.rb index cf410d285..0ece275be 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -119,6 +119,10 @@ Rosa::Application.routes.draw do resources :issues do resources :comments, :only => [:edit, :create, :update, :destroy] resources :subscribes, :only => [:create, :destroy] + collection do + post :create_label + post :delete_label + end end resource :repo, :controller => "git/repositories", :only => [:show] resources :build_lists, :only => [:index, :new, :create] diff --git a/db/migrate/20120220175615_create_labels.rb b/db/migrate/20120220175615_create_labels.rb new file mode 100644 index 000000000..18275962f --- /dev/null +++ b/db/migrate/20120220175615_create_labels.rb @@ -0,0 +1,21 @@ +class CreateLabels < ActiveRecord::Migration + def change + create_table :labels do |t| + t.string :name, :null => false + t.string :color, :null => false + + t.timestamps + end + + create_table :labelings do |t| + t.references :label, :null => false + t.references :issue + t.references :project + + t.timestamps + end + + add_index :labelings, :issue_id + add_index :labelings, :project_id + end +end diff --git a/db/migrate/20120220175615_create_tags.rb b/db/migrate/20120220175615_create_tags.rb deleted file mode 100644 index e693bbb32..000000000 --- a/db/migrate/20120220175615_create_tags.rb +++ /dev/null @@ -1,15 +0,0 @@ -class CreateTags < ActiveRecord::Migration - def change - create_table :tags do |t| - t.string :name, :null => false - t.string :color, :null => false - t.integer :issue_id, :null => false - t.integer :project_id, :null => false - - t.timestamps - end - - add_index :tags, :issue_id - add_index :tags, :project_id - end -end diff --git a/spec/models/labels_spec.rb b/spec/models/labels_spec.rb new file mode 100644 index 000000000..af7e7325e --- /dev/null +++ b/spec/models/labels_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe Tag do + pending "add some examples to (or delete) #{__FILE__}" +end From 9e5e7cd5e48ffe9d901ca8d87e5acbcc8d3b0be2 Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Thu, 23 Feb 2012 20:48:31 +0600 Subject: [PATCH 06/18] [refs #194] labels manage --- app/assets/images/radio.png | Bin 3317 -> 3501 bytes app/assets/javascripts/radio.js | 6 +- app/assets/javascripts/tracker.js | 255 +++++++++------------ app/assets/stylesheets/custom.scss | 7 + app/assets/stylesheets/main.scss | 2 +- app/controllers/issues_controller.rb | 50 ++-- app/models/label.rb | 4 +- app/models/labeling.rb | 2 - app/models/project.rb | 3 +- app/views/issues/_colors_chooser.html.haml | 6 + app/views/issues/_labels.html.haml | 47 ++++ app/views/issues/_list.html.haml | 6 +- app/views/issues/_sidebar.html.haml | 96 +------- app/views/issues/index.html.haml | 3 +- config/locales/en.yml | 1 + config/locales/issues/issues.en.yml | 1 + config/locales/issues/issues.ru.yml | 1 + config/locales/ru.yml | 1 + config/routes.rb | 8 +- db/migrate/20120220175615_create_labels.rb | 4 +- spec/models/tag_spec.rb | 5 - 21 files changed, 227 insertions(+), 281 deletions(-) create mode 100644 app/views/issues/_colors_chooser.html.haml create mode 100644 app/views/issues/_labels.html.haml delete mode 100644 spec/models/tag_spec.rb diff --git a/app/assets/images/radio.png b/app/assets/images/radio.png index 28f16dfae4866d11328db3493e5dce1fadc97bad..fb43860485724c4ca68f2f7c69e6c38f79ca7fd7 100644 GIT binary patch delta 774 zcmV+h1Nr>*8Lbo_+xK*tEe_m0&xh|gjij7 z9IenMs61P})h15g66CCjqm73+UH zE}|$39}b7_Se6wMMKQ+ne4D0e-!?WjN`Ak;QZAQY%d)JUD3Z-)2STAxcTZ2xNFWeM z9M8D7xA!BL%e|~rDodG6X5r95DFvkz*=+W%s;ZOKYSpe*tF(sMs;W-T&(Gg>?lJ%{ zGc$8d5QM9eBn?waeU9@4^GT94914GhE-H$`12_=jIPOX+m3m;?Hco5lbb2%p2;2t% zR#6mz=lKZBvb=5EIPGCsHXaU#BZ{I3EC3-Ei?v#og?bOq^GQw9;w*q*LqkJdRk*5Y z0>H5V3_^(ZFCv7Hp8yC8pjaxE@}el#Ewa76{T;v-Bg=BJQmO2krm5G{9YTM|mSGq> zvMd)F05DDS%li8IR6QaqD=W_lA=8I*GBh;wPS^F1g+gJ9Qc7!Grj*h`p)j?-zyHi9mIen07iw-X$8q<9!C*8RjkY#6 zHu9!vYPzoH4a3k0A+Ks~@iBif0e}D?2*3bPlx4Z-IWILj_!~d~z&QZF{(j>OO8*I^ z#pN|*#;1{Z_zaoxX)G?Uod_j=M@NUy+}wPgwgP5Ye7$@jboLY6aXil_0eC|xU)*x_6v-EN;f`~l z#JHj4m=tgF6p`Xh$8qoz0AU;`xyu~8mG%@F?Z15FIW?hl<3a)xBYo&f#sC0a$rvU^ z`f&5oc~2;@ZYW8TH0EUO?M$Gz^XSmJ|Hm1WYD4MI0J`5@_0$TDZvX%Q07*qoM6N<$ Ef?HW=`~Uy| delta 589 zcmV-T0ljA6vyB5*}AhVMUm{< zQ7lALi4Bzsfy7#=Vkko58!&b1g7^|_bm+uqU;%c-gajkqD>^x`Wu-%6-JR{T84evz zaMR5FZ}z+Y-8;Yk&)BvttV$^*gpg8FN*QB>khKNa^++kxG_9(NF-9qsQVJm)$BBQU zh*H|)$+C=d9)@AJtT)QC%yr!`3|BnU=@b!zAb=Z`=Q$!qQ3L>%epX8PzTe&~-}gD^ zQp&%c#bPlW4x8H)1VNG{0ALFt5RnklG!1MNAp{YH5Vrm@N-5Yvj^juvZN2)|L%P$m zbyr(@nx-Ly*o?9He7VCOV@QbdpPHD z90Pz206`FxWhsQ9l>Q%C06;`3rRRA%R{!#rrfE?Wx>fTM5dlC5;d!18PEW3rBx&2$ zOpXS11^*VkXaU!Q&HcJ<-(_{Gx)X6~cW$TG}n zz5Dom?IvfRf0}APbC [:show, :edit, :update, :destroy] - load_and_authorize_resource :project - load_and_authorize_resource :issue, :through => :project, :find_by => :serial_id + load_and_authorize_resource :project, :except => [:create_lable, :delete_label] + load_and_authorize_resource :issue, :through => :project, :find_by => :serial_id, :only => [:show, :edit, :update, :destroy] + before_filter :load_and_authorize_label, :only => [:create_label, :update_label, :destroy_label] autocomplete :user, :uname layout 'application' - def index - @issues = @project.issues + def index(status = 200) @is_assigned_to_me = params[:filter] == 'to_me' @is_all = params[:filter] == 'all' - @issues = @issues.where(:user_id => current_user.id) if @is_assigned_to_me @status = (params[:status] if ['open', 'closed'].include? params[:status]) || 'open' + @labels = params[:labels] || [] + + @issues = @project.issues + @issues = @issues.where(:user_id => current_user.id) if @is_assigned_to_me + @issues = @issues.joins(:labels).where(:labels => {:name => @labels}) unless @labels == [] if params[:search] @is_assigned_to_me = false + @is_all = 'all' + @status = 'open' + @labels = [] @issues = @project.issues.where('issues.title ILIKE ?', "%#{params[:search]}%") end - @issues = @issues.includes(:creator, :user).paginate :per_page => 10, :page => params[:page] - render :layout => request.format == '*/*' ? 'issues' : 'application' # maybe FIXME '*/*'? + @issues = @issues.includes(:creator, :user).order('serial_id desc').uniq.paginate :per_page => 10, :page => params[:page] + if status == 200 + render 'index', :layout => request.format == '*/*' ? 'issues' : 'application' # maybe FIXME '*/*'? + else + render :status => status, :nothing => true + end end def new @@ -73,13 +82,26 @@ class IssuesController < ApplicationController redirect_to root_path end + def create_label + status = @project.labels.create(:name => params[:name], :color => params[:color]) ? 200 : 500 + index(status) + end + + def update_label + status = @label.update_attributes( :name => params[:name], :color => params[:color]) ? 200 : 500 + index(status) + end + + def destroy_label + status = (@label && @label_destroy) ? 200 : 500 + index(status) + end + private - def find_project + def load_and_authorize_label @project = Project.find(params[:project_id]) - end - - def find_issue_by_serial_id - @issue = @project.issues.find_by_serial_id!(params[:id]) + @label = Label.find(params[:label_id]) if params[:label_id] + authorize! :write, @project end end diff --git a/app/models/label.rb b/app/models/label.rb index 16a01c91a..3bfbab17d 100644 --- a/app/models/label.rb +++ b/app/models/label.rb @@ -1,7 +1,9 @@ class Label < ActiveRecord::Base - has_many :labelings + has_many :labelings, :dependent => :destroy has_many :issues, :through => :labelings + belongs_to :project + validates :name, :uniqueness => { :scope => :project_id} validates :name, :color, :presence => true validates :color, :format => { :with => /\A([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})\z/, :message => I18n.t('layout.issues.invalid_labels')} end diff --git a/app/models/labeling.rb b/app/models/labeling.rb index 899853d7d..d03b0c6b3 100644 --- a/app/models/labeling.rb +++ b/app/models/labeling.rb @@ -1,7 +1,5 @@ class Labeling < ActiveRecord::Base belongs_to :issue - belongs_to :project belongs_to :label - #before_create {|t| t.project_id = t.issue.project_id} end diff --git a/app/models/project.rb b/app/models/project.rb index 0cc719c2e..53c48bebc 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -17,8 +17,7 @@ class Project < ActiveRecord::Base has_many :relations, :as => :target, :dependent => :destroy has_many :collaborators, :through => :relations, :source => :object, :source_type => 'User' has_many :groups, :through => :relations, :source => :object, :source_type => 'Group' - has_many :labelings - has_many :labels, :through => :labelings + has_many :labels validates :name, :uniqueness => {:scope => [:owner_id, :owner_type], :case_sensitive => false}, :presence => true, :format => { :with => /^[a-zA-Z0-9_\-\+\.]+$/ } validates :owner, :presence => true diff --git a/app/views/issues/_colors_chooser.html.haml b/app/views/issues/_colors_chooser.html.haml new file mode 100644 index 000000000..97eee6499 --- /dev/null +++ b/app/views/issues/_colors_chooser.html.haml @@ -0,0 +1,6 @@ +-current_color ||= '0054a6' +.colors + - ['0054a6', '00a651', 'ed1c24', 'e65c00', '9e005d', '464646', '8c6239'].each do |color| + .color{:style => "background: ##{color};"} + #choose1.choose{:value => color, :class => current_color == color ? 'selected' : ''} + .both diff --git a/app/views/issues/_labels.html.haml b/app/views/issues/_labels.html.haml new file mode 100644 index 000000000..8b06617cf --- /dev/null +++ b/app/views/issues/_labels.html.haml @@ -0,0 +1,47 @@ +.block + %h3=t('layout.issues.labels') + #labels-stock + =form_tag project_issues_path(@project), :id => 'filter_labels', :method => :get do + - @project.labels.each_with_index do |label, index| + .div-tracker-labels{:id => "label-#{label.name}", :style => @labels.include?(label.name) ? "background-color:##{label.color};color:'#FFF'" : ''} + .div-label-left + .label + .flag{:id => "flag-#{label.name}", :style => "background-color: ##{label.color};"} + .labeltext + =label.name + =check_box_tag 'labels[]', label.name, @labels.include?(label.name), :style => 'display:none' + .both + .div-label-right=Labeling.joins(:label).where(:labels => {:name => label.name, :project_id => @project.id}).count + .both + .both + - if can? :write, @project + %a#manage-labels.button.tmargin10{:href => "#labels-stock"}=t('layout.issues.label_manage') + #labels-edit{:style => "display: none;"} + - @project.labels.each_with_index do |label, index| + .label.edit{:id => "label-#{index}"} + .labeltext.edit{:style => "background: ##{label.color};"} + .text=link_to(label.name, project_issues_update_label_path(@project, label.id), :class => 'edit_label') + .delete{:id => "delete#{index}"} + %a{:href => project_issues_delete_label_path(@project, label.id), :class => 'delete_label'} + %img{:alt => "x", :src => "/assets/x-label.png"} + .both + .edit_label_form{:style => 'display:none'} + =form_tag project_issues_update_label_path(@project, label.id), :id => 'update_label', :method => :post do + %input.gray{:name => 'name', :type => "text", :value => label.name} + =render :partial => 'issues/colors_chooser', :locals => {:current_color => label.color} + .lefter + %a{:href => "#custom_color-#{label.name}", :id => "custom_color-#{label.name}", :class => 'custom_color'}=t('layout.issues.label_custom_color') + =text_field_tag :color, label.color, :id => 'label_color', :class => 'gray', :style => 'display:none', :maxlength => 6 + .righter + =link_to t('layout.update'), project_issues_update_label_path(@project, label.id), :id => 'update_label', :class => 'button' + .both + + =form_tag create_label_project_issues_path(@project), :id => 'new_label', :method => :post do + %input.gray{:name => 'name', :onClick => "if(this.value=='#{t('layout.issues.new_label')}'){this.value='';this.className='black';}", :onblur => "if(this.value==''){this.value='#{t('layout.issues.new_label')}';this.className='gray';}", :type => "text", :value => "#{t('layout.issues.new_label')}"} + =render :partial => 'issues/colors_chooser' + .lefter + %a{:href => "#custom_color", :id => 'custom_color', :class => 'custom_color'}=t('layout.issues.label_custom_color') + =text_field_tag :color, '0054a6', :id => 'label_color', :class => 'gray', :style => 'display:none', :maxlength => 6 + .righter + =link_to t('layout.add'), create_label_project_issues_path(@project), :id => 'add_label', :class => 'button' + .both diff --git a/app/views/issues/_list.html.haml b/app/views/issues/_list.html.haml index 64251d499..9b23d23f7 100644 --- a/app/views/issues/_list.html.haml +++ b/app/views/issues/_list.html.haml @@ -1,4 +1,4 @@ -%tr#row1.2-3-stable{:name => "row"} +%tr#row1{:name => "row", :class => issue.labels.map(&:name).compact} %td.td0 %span{:style => "display: none;"}=issue.serial_id %td.td1=issue.serial_id @@ -9,8 +9,8 @@ =t("layout.issues.by") if issue.creator =link_to(issue.creator.uname, user_path(issue.creator)) if issue.creator .label.selected.tracker - .labeltext.selected{:style => "background: #39b54a;"} - 2-3 stable + -issue.labels.each do |label| + .labeltext.selected{:style => "background: ##{label.color};"}=label.name .both %td.td3 .code=link_to '#', [@project, issue] diff --git a/app/views/issues/_sidebar.html.haml b/app/views/issues/_sidebar.html.haml index a8bb181cc..6999abc9d 100644 --- a/app/views/issues/_sidebar.html.haml +++ b/app/views/issues/_sidebar.html.haml @@ -23,98 +23,4 @@ .bordered.nopadding %h3.bmargin10=t('layout.issues.new') = link_to t("layout.add"), new_project_issue_path(@project), :class => 'button' if can? :new, Issue.new(:project_id => @project.id) - .block - %h3 Метки - #labels-edit{:style => "display: none;"} - #label-delete1.label.edit - .labeltext.edit{:style => "background: #39b54a;"} - .text 2-3 stable - #delete1.delete - %img{:alt => "x", :src => "/assets/x-label.png"}/ - .both - #label-delete2.label.edit - .labeltext.edit{:style => "background: #ed1c24;"} - .text 3-0 stable - #delete2.delete - %img{:alt => "x", :src => "/assets/x-label.png"}/ - .both - #label-delete3.label.edit - .labeltext.edit{:style => "background: #ed145b;"} - .text actionpack - #delete3.delete - %img{:alt => "x", :src => "/assets/x-label.png"}/ - .both - #label-delete4.label.edit - .labeltext.edit{:style => "background: #92278f;"} - .text activemodel - #delete4.delete - %img{:alt => "x", :src => "/assets/x-label.png"}/ - .both - %input.gray{:onClick => "if(this.value=='Название новой метки'){this.value='';this.className='black';}", :onblur => "if(this.value==''){this.value='Название новой метки';this.className='gray';}", :type => "text", :value => "Название новой метки"}/ - .colors - .color{:style => "background: #0054a6;"} - #choose1.choose.selected - .color{:style => "background: #00a651;"} - #choose2.choose - .color{:style => "background: #ed1c24;"} - #choose3.choose - .color{:style => "background: #e65c00;"} - #choose4.choose - .color{:style => "background: #9e005d;"} - #choose5.choose - .color{:style => "background: #464646;"} - #choose6.choose - .color{:style => "background: #8c6239;"} - #choose7.choose - .both - .lefter - %a{:href => "#"} Custom color - .righter - %a.button{:href => "#"} Добавить - .both - #labels-stock - #label-2-3-stable.div-tracker-lables{:name => "label"} - .div-label-left - .label - #flag-2-3-stable.flag{:style => "background-color: #39b54a;"} - .labeltext - 2-3 stable - .both - .div-label-right - 15 - .both - .both - #label-3-0-stable.div-tracker-lables{:name => "label"} - .div-label-left - .label - #flag-3-0-stable.flag{:style => "background-color: #ed1c24;"} - .labeltext - 3-0 stable - .both - .div-label-right - 100 - .both - .both - #label-actionpack.div-tracker-lables{:name => "label"} - .div-label-left - .label - #flag-actionpack.flag{:style => "background-color: #ed145b;"} - .labeltext - actionpack - .both - .div-label-right - 22 - .both - .both - #label-activemodel.div-tracker-lables{:name => "label"} - .div-label-left - .label - #flag-activemodel.flag{:style => "background-color: #92278f;"} - .labeltext - activemodel - .both - .div-label-right - 3 - .both - .both - %a#manage-labels.button.tmargin10{:href => "#"} Manage + =render :partial => 'labels' diff --git a/app/views/issues/index.html.haml b/app/views/issues/index.html.haml index 0d7efd0e0..d1192d717 100644 --- a/app/views/issues/index.html.haml +++ b/app/views/issues/index.html.haml @@ -2,6 +2,7 @@ -render :partial => 'issues/sidebar' #closed-switcher.blue-switcher + =hidden_field_tag :issues_status, @status, :id => 'issues_status' .open ="#{t('layout.issues.statuses.open')} (#{@issues.where(:status => 'open').count})" #closed-tasks.closed @@ -18,5 +19,5 @@ %th{:colspan => "2"} =t('layout.issues.description') %tbody - - @issues.where(:status => @status).each do |issue| + - @issues.each do |issue| = render :partial => 'issues/list', :locals => {:issue => issue} \ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml index 7545e255c..236574253 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -23,6 +23,7 @@ en: show: View cancel: Cancel create: Create + update: Update delete: Erase save: Save search: Search diff --git a/config/locales/issues/issues.en.yml b/config/locales/issues/issues.en.yml index def827d15..73003cd2f 100644 --- a/config/locales/issues/issues.en.yml +++ b/config/locales/issues/issues.en.yml @@ -36,6 +36,7 @@ en: labels: Labels invalid_labels: Invalid hex color code new_label: New label name + update_label: Update label label_custom_color: Custom color label_manage: Manage diff --git a/config/locales/issues/issues.ru.yml b/config/locales/issues/issues.ru.yml index b4bdc595e..912509ddb 100644 --- a/config/locales/issues/issues.ru.yml +++ b/config/locales/issues/issues.ru.yml @@ -36,6 +36,7 @@ ru: labels: Метки invalid_labels: Неверный hex код new_label: Название новой метки + update_label: Обновить метку label_custom_color: Свой цвет label_manage: Управление diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 0a923a31b..c8b8df50d 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -37,6 +37,7 @@ ru: false_: Нет publish: Опубликовать add: Добавить + update: Обновить upload: Загрузить not_access: Нет доступа! owner: Владелец diff --git a/config/routes.rb b/config/routes.rb index 0ece275be..6461ddb6c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -119,11 +119,11 @@ Rosa::Application.routes.draw do resources :issues do resources :comments, :only => [:edit, :create, :update, :destroy] resources :subscribes, :only => [:create, :destroy] - collection do - post :create_label - post :delete_label - end + post :create_label, :on => :collection end + post "labels/:label_id" => "issues#destroy_label", :as => :issues_delete_label + post "labels/:label_id/update" => "issues#update_label", :as => :issues_update_label + resource :repo, :controller => "git/repositories", :only => [:show] resources :build_lists, :only => [:index, :new, :create] diff --git a/db/migrate/20120220175615_create_labels.rb b/db/migrate/20120220175615_create_labels.rb index 18275962f..b10b80ea7 100644 --- a/db/migrate/20120220175615_create_labels.rb +++ b/db/migrate/20120220175615_create_labels.rb @@ -3,6 +3,7 @@ class CreateLabels < ActiveRecord::Migration create_table :labels do |t| t.string :name, :null => false t.string :color, :null => false + t.references :project t.timestamps end @@ -10,12 +11,11 @@ class CreateLabels < ActiveRecord::Migration create_table :labelings do |t| t.references :label, :null => false t.references :issue - t.references :project t.timestamps end add_index :labelings, :issue_id - add_index :labelings, :project_id + add_index :labels, :project_id end end diff --git a/spec/models/tag_spec.rb b/spec/models/tag_spec.rb deleted file mode 100644 index af7e7325e..000000000 --- a/spec/models/tag_spec.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'spec_helper' - -describe Tag do - pending "add some examples to (or delete) #{__FILE__}" -end From 027012d3e5fd26aec8712bcc74586c1495fed49b Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Thu, 23 Feb 2012 21:57:51 +0600 Subject: [PATCH 07/18] [refs #194] some refactotring --- app/controllers/issues_controller.rb | 6 ++---- .../{_list.html.haml => _issue.html.haml} | 0 app/views/issues/_labels.html.haml | 3 +-- app/views/issues/_sidebar.html.haml | 18 ++++++------------ app/views/issues/index.html.haml | 9 +++------ spec/models/labels_spec.rb | 2 +- 6 files changed, 13 insertions(+), 25 deletions(-) rename app/views/issues/{_list.html.haml => _issue.html.haml} (100%) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 5d50c50fa..0c05340e9 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -11,8 +11,7 @@ class IssuesController < ApplicationController def index(status = 200) @is_assigned_to_me = params[:filter] == 'to_me' - @is_all = params[:filter] == 'all' - @status = (params[:status] if ['open', 'closed'].include? params[:status]) || 'open' + @status = params[:status] == 'closed' ? 'closed' : 'open' @labels = params[:labels] || [] @issues = @project.issues @@ -21,10 +20,9 @@ class IssuesController < ApplicationController if params[:search] @is_assigned_to_me = false - @is_all = 'all' @status = 'open' @labels = [] - @issues = @project.issues.where('issues.title ILIKE ?', "%#{params[:search]}%") + @issues = @project.issues.where('issues.title ILIKE ?', "%#{params[:search].mb_chars.downcase}%") end @issues = @issues.includes(:creator, :user).order('serial_id desc').uniq.paginate :per_page => 10, :page => params[:page] if status == 200 diff --git a/app/views/issues/_list.html.haml b/app/views/issues/_issue.html.haml similarity index 100% rename from app/views/issues/_list.html.haml rename to app/views/issues/_issue.html.haml diff --git a/app/views/issues/_labels.html.haml b/app/views/issues/_labels.html.haml index 8b06617cf..2d29211c8 100644 --- a/app/views/issues/_labels.html.haml +++ b/app/views/issues/_labels.html.haml @@ -7,8 +7,7 @@ .div-label-left .label .flag{:id => "flag-#{label.name}", :style => "background-color: ##{label.color};"} - .labeltext - =label.name + .labeltext=label.name =check_box_tag 'labels[]', label.name, @labels.include?(label.name), :style => 'display:none' .both .div-label-right=Labeling.joins(:label).where(:labels => {:name => label.name, :project_id => @project.id}).count diff --git a/app/views/issues/_sidebar.html.haml b/app/views/issues/_sidebar.html.haml index 6999abc9d..1d8f7ade5 100644 --- a/app/views/issues/_sidebar.html.haml +++ b/app/views/issues/_sidebar.html.haml @@ -4,19 +4,13 @@ %h3=t("layout.issues.accessory") %table %tr - %td.width18 - =radio_button_tag :myradio, 'all', !@is_assigned_to_me, {:id => 'myradio1', :class => 'niceRadio', :name => 'filter'} - %td.width135 - =t("layout.issues.all") - %td.width30.right - = @project.issues.count + %td.width18=radio_button_tag :myradio, 'all', !@is_assigned_to_me, {:id => 'myradio1', :class => 'niceRadio', :name => 'filter'} + %td.width135=t("layout.issues.all") + %td.width30.right=@project.issues.count %tr - %td - =radio_button_tag :myradio, 'to_me', @is_assigned_to_me, {:id => 'myradio1', :class => 'niceRadio', :name => 'filter'} - %td - =t("layout.issues.to_me") - %td.width30.right - = @project.issues.where(:user_id => current_user).count + %td=radio_button_tag :myradio, 'to_me', @is_assigned_to_me, {:id => 'myradio1', :class => 'niceRadio', :name => 'filter'} + %td=t("layout.issues.to_me") + %td.width30.right=@project.issues.where(:user_id => current_user).count =form_tag project_issues_path(@project), :id => 'search_issue', :method => :get do .bordered.bpadding20 =text_field_tag :search, t('layout.issues.search'), :class => 'gray', :onClick => "if(this.value=='#{t('layout.issues.search')}'){this.value='';this.className='black';}", :onblur => "if(this.value==''){this.value='#{t('layout.issues.search')}';this.className='gray';}" diff --git a/app/views/issues/index.html.haml b/app/views/issues/index.html.haml index d1192d717..f59a83b42 100644 --- a/app/views/issues/index.html.haml +++ b/app/views/issues/index.html.haml @@ -14,10 +14,7 @@ %table#myTable.tablesorter.tracker{:cellpadding => "0", :cellspacing => "0"} %thead %tr - %th.th1{:colspan => "2"} - =t('layout.issues.number') - %th{:colspan => "2"} - =t('layout.issues.description') + %th.th1{:colspan => "2"}=t('layout.issues.number') + %th{:colspan => "2"}=t('layout.issues.description') %tbody - - @issues.each do |issue| - = render :partial => 'issues/list', :locals => {:issue => issue} \ No newline at end of file + = render :partial => 'issues/issue', :collection => @issues \ No newline at end of file diff --git a/spec/models/labels_spec.rb b/spec/models/labels_spec.rb index af7e7325e..dd72c1f9f 100644 --- a/spec/models/labels_spec.rb +++ b/spec/models/labels_spec.rb @@ -1,5 +1,5 @@ require 'spec_helper' -describe Tag do +describe Label do pending "add some examples to (or delete) #{__FILE__}" end From a6a51225b874e1b054b9eb3dbbe97294bd026218 Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Thu, 23 Feb 2012 22:16:04 +0600 Subject: [PATCH 08/18] [refs #194] some js refactoring --- app/assets/javascripts/tracker.js | 47 ++++++---------------------- app/controllers/issues_controller.rb | 2 +- 2 files changed, 10 insertions(+), 39 deletions(-) diff --git a/app/assets/javascripts/tracker.js b/app/assets/javascripts/tracker.js index 2ac35e0e6..b865aec64 100644 --- a/app/assets/javascripts/tracker.js +++ b/app/assets/javascripts/tracker.js @@ -1,5 +1,4 @@ $(document).ready(function() { - var locale = {}; $("#closed-switcher").live('click', function() { if ($("#blue-switch-select").css("margin-left") != "130px") { @@ -14,35 +13,22 @@ $(document).ready(function() { $("#table1").fadeIn("slow"); $('#issues_status').val('open'); } - var form = $('#filter_issues'); - return send_request('GET', form.attr("action")); + return send_request('GET'); }); - function showEditLabels() { - $("#labels-stock").fadeOut(0); - $("#labels-edit").fadeIn("slow"); - }; - function hideEditLabels() { - $("#labels-edit").fadeOut(0); - $("#labels-stock").fadeIn("slow"); - }; - $("#manage-labels").live('click', function () { var toggled = $(this).data('toggled'); $(this).data('toggled', !toggled); if (!toggled) { - showEditLabels(); + $("#labels-stock").fadeOut(0); + $("#labels-edit").fadeIn("slow"); } else { - hideEditLabels(); + $("#labels-edit").fadeOut(0); + $("#labels-stock").fadeIn("slow"); } }); - $("div.delete").click(function() { - var div = "#label-"+this.id; - $(div).fadeOut("slow"); - }); - $("div.div-tracker-labels").live('click', function() { var flag = this.id; flag = flag.replace("label-","flag-"); @@ -57,27 +43,11 @@ $(document).ready(function() { $(this).css("color","#565657"); checkbox.removeAttr('checked'); } - send_request('GET'); + return send_request('GET'); }); - function showRow(elem) { - if ($("#"+elem).css("display") == "none") { - $("#"+elem).fadeIn("slow"); - } else { - //$("#"+elem).fadeOut(0); - } - } - - function hideRow(elem) { - if ($("#"+elem).css("display") != "none") { - $("#"+elem).fadeOut("fast"); - } else { - //$("#"+elem).fadeOut(0); - } - } - $("#myradio1").live('change', function(event) { - return send_request('GET', $('#filter_issues').attr("action")); + return send_request('GET'); }); $('#search_issue').live('submit', function() { @@ -97,6 +67,7 @@ $(document).ready(function() { parent.find('.choose.selected').removeClass('selected'); $(this).addClass('selected'); parent.siblings('.lefter').find('#label_color').val($(this).attr('value')); + return false; }); $('.custom_color').live('click', function() { @@ -129,7 +100,7 @@ $(document).ready(function() { $(".niceRadio").each(function() { changeRadioStart(jQuery(this)) }); }, error: function(data){ - alert('error') + alert('error') // TODO remove } }); return false; diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 0c05340e9..9c264d863 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -14,7 +14,7 @@ class IssuesController < ApplicationController @status = params[:status] == 'closed' ? 'closed' : 'open' @labels = params[:labels] || [] - @issues = @project.issues + @issues = @project.issues.where(:status => @status) @issues = @issues.where(:user_id => current_user.id) if @is_assigned_to_me @issues = @issues.joins(:labels).where(:labels => {:name => @labels}) unless @labels == [] From 27c85d32dffd070fd6d09a504a053b43a4b18db7 Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Mon, 27 Feb 2012 22:10:12 +0600 Subject: [PATCH 09/18] [refs #194] create page; index pagination; some bugs --- app/assets/images/404.png | Bin 0 -> 59676 bytes app/assets/images/ava-big.png | Bin 0 -> 6193 bytes app/assets/images/bg-signup.png | Bin 0 -> 2923 bytes app/assets/images/button-green-disabled.png | Bin 0 -> 2852 bytes app/assets/images/button-green-hover.png | Bin 0 -> 2865 bytes app/assets/images/button-green-normal.png | Bin 0 -> 2853 bytes app/assets/images/button-green-press.png | Bin 0 -> 2830 bytes app/assets/images/checkbox.png | Bin 0 -> 3258 bytes app/assets/images/error-groups.png | Bin 0 -> 4589 bytes app/assets/images/error-message.png | Bin 0 -> 3999 bytes app/assets/images/git.png | Bin 0 -> 3284 bytes app/assets/images/gplus.png | Bin 0 -> 3077 bytes app/assets/images/logo.png | Bin 0 -> 5695 bytes app/assets/images/open.png | Bin 0 -> 3200 bytes app/assets/images/registration.png | Bin 0 -> 4020 bytes app/assets/javascripts/create-issue.js | 35 - app/assets/javascripts/tracker.js | 81 +- app/assets/stylesheets/main.scss | 3044 ++++++++--------- app/controllers/issues_controller.rb | 27 +- app/helpers/issues_helper.rb | 6 + app/models/issue.rb | 3 + app/views/issues/_create_sidebar.html.haml | 14 + app/views/issues/_form.html.haml | 45 +- ...bar.html.haml => _index_sidebar.html.haml} | 2 +- app/views/issues/_issue.html.haml | 3 +- app/views/issues/_labels.html.haml | 2 +- .../issues/_search_collaborators.html.haml | 6 + app/views/issues/_search_labels.html.haml | 5 + app/views/issues/index.html.haml | 5 +- app/views/issues/new.html.haml | 19 +- app/views/layouts/application.html.haml | 2 +- config/application.rb | 2 +- config/locales/{issues => }/issues.en.yml | 11 +- config/locales/{issues => }/issues.ru.yml | 13 +- config/routes.rb | 6 +- 35 files changed, 1693 insertions(+), 1638 deletions(-) create mode 100644 app/assets/images/404.png create mode 100644 app/assets/images/ava-big.png create mode 100644 app/assets/images/bg-signup.png create mode 100644 app/assets/images/button-green-disabled.png create mode 100644 app/assets/images/button-green-hover.png create mode 100644 app/assets/images/button-green-normal.png create mode 100644 app/assets/images/button-green-press.png create mode 100644 app/assets/images/checkbox.png create mode 100644 app/assets/images/error-groups.png create mode 100644 app/assets/images/error-message.png create mode 100644 app/assets/images/git.png create mode 100644 app/assets/images/gplus.png create mode 100644 app/assets/images/logo.png create mode 100644 app/assets/images/open.png create mode 100644 app/assets/images/registration.png delete mode 100644 app/assets/javascripts/create-issue.js create mode 100644 app/views/issues/_create_sidebar.html.haml rename app/views/issues/{_sidebar.html.haml => _index_sidebar.html.haml} (79%) create mode 100644 app/views/issues/_search_collaborators.html.haml create mode 100644 app/views/issues/_search_labels.html.haml rename config/locales/{issues => }/issues.en.yml (78%) rename config/locales/{issues => }/issues.ru.yml (78%) diff --git a/app/assets/images/404.png b/app/assets/images/404.png new file mode 100644 index 0000000000000000000000000000000000000000..0c6ce2f7be26bd9e8e98a1ebc543507a44cfca13 GIT binary patch literal 59676 zcmX6^by!pX+a4i|9#SG50^(?-yBi4w1O%j{yIVpKDanx{E!~V3kQ^YRyP0%%z32OT z|KJ+euCwiYp1hy?xlhy^4MhUn=eQsch(K9MP8$S5j|73x{(;efcjN`5*nt-uXC(tS z5D1Utzdtlkdge0_2v^faR`$)CPfqSmZl9c->6K+=>78AjtZeKpK_KtBEFEiIoo#aQ z%cV0J)yUu^RVQsSFuk@+bTDZG3p)c2L?x0Tca}`+H?h1tCRP8BNQ~In;BRDFQ2ejB zGuRspKVw7lBEJsauKMNKO|@Qb4L{UROQ6b5vua1NJHhxVN_<+cgYipbXo*)s`+9m; zH#nt2aG9M!5OA#pgWEk58t5ueOzah7Cw4ms&3haV4C++R=;WsU@<_BJ12aMk4nym7 zPY_ZC2a|%Nd}Cz_K~f56!C7f6I-nnzAk!i9kL#c}93WHHpsjIGaMl&f4-I6P#6X7j zBLPHDVi_q1`XmY}8-4dx9;D9=BDGTO5eCh0fVh?Qtdu}ijiAmE2wn{cj1S`0iVS}V z!t?`~_A@bggTi1SQiT&evEx@25ENirZ&-~OoLN{t#1PEkf~}{=Ny|2(O!10Tzzp3i zU5c~I2S&*o!cVkviU5IrB#;58J-zoHA*>h~5r}OdG~w9kz6ZUaoD^BsQ5%2Mi zW}LA{`6FDPopfF6sY|R}`nOZw0>&tr?=SznKt5WmEkkcHB$i);s%$0D{1P~djm| zM+keBG}YPfXV6Y8>fcWme&gMl3WUip_jJiXWNW=uF7j^|pyn+?nXc44nO&tu+J(Q@S5aV#Y8RiT3fUK2t210v3M7@LLJ#^tN?CqAR7J}j=nh#Yo zmf@H7KCgOLhS3srZa!M=h50l@z7t0P(@Tclj8@qm)bjmChQQ_Moi_$vwa<+%;om0DklN%%d|g@;4Ql~oJMem@i7 zDWz|JWxd(eq0+G~5iS1m%evS}S291);64h=pj)k5Q#N1gN43d%YcD;XIc2Rkl);Xm zG{Pg~bq`DR@T|WldrR6qO-r=+uaaD0Sw0m$y;|+lBr8em^)#2OOm__&6kAd1Y2eo- z(!-Z)FR2Ro)!;mqMs~kaQd9Ixl}fcr6?fYND)x)A3ftsc3~oaRrTbJ^jaU_}<3^rj zp>$?-7K?C;$koL~&MP>7*%eUbw#a#PI2IkGWw(C_&Q^0OTJmW_-B1T`-Rs^v+!UQF z;_GA8;xl8-nV#K=jR~*Jz!2 z-J#c^H;)C2g@Hv?eMkKuU0WSq__9z`O;oLK7%}{FcnbD9L!4)t7nOm^n9f*kG=1;= z9@A1SOG|5S7zB(^06GzY}oi(?afnI$Zxc~2AQR_978@=jza zeI)ZhGT_fy$~Kp^{wQR0hHt%rWawp&O_ol^xS}!zj(g#K;XdU;LAb|fH-3W*B|*PL~Ubuqyu-X#MQgkWc5f8&s5w^O!B z__Aye)1$?s@8cM#DEI}MHAYm3bciAP?Uk=TLr1Kn$h_r6&FsGPw;yn6GU>R_<)1fy zmot3o--|D2xJ0FmB#hV)hQA5?H}x0WY|AXVI}o2W{7blAgk-F9r2g|Up48V~V+*ow z%W^kzDRN60);yZRl^iOs*(H8)+KSByHuE=2_HtSoASU&*^p)*Zsf9V&D+CLZvQKWJ88$0{tj&z-c7m=56K81>;NU23?2qhg!L)eSSzr8pi@p=)9>(fQk zWzEPnCNLH`BWuJ?t8t>luI~GNFQN6d5Az?s0_Y|@jI|`bRgFMxF+(JqJl&Jtfmd9l zjVJVbLcEL2F9!9*2J0Q`Ei2EVGRyFqhd++dja;1`FA~<-7el++|BTS-G%9WV@-W7 zgXMa&n}{qb39_iK6{PbNsboPjYzy9-R9~D1J75b*btR=eaEnnZq}BG;5=XWnVal)6 ztyDrsg4ww`g5`I0`{x((^IWOJZ1XLl4YKgO4zZ?I%c6miVNprleBCqM8(o0|XTNJmbc2cwU?3=QNOmYQf?iL%QYNa_WLl9 z828vrgbma1iAfryxUP2G)T>=Z!aln8hpa;{4gvv!w=tQ$YfR2^J{#MYILnu`1R`^u z-~7r}vB&8=X{>3uY-Q3<(iJjv(r*nv8a8VpB*vz8mVECN=jn(t`Na%;R8DmVZ05E< zk0)B6jDE{X&I$6IcT4m<8UVh@Sqntd&qE$J0-BRlwkZ(F^e)#Wx-w&2L(S)0!>`Qy}Nwy^kO+o`Y9 z<)6#*W%9*9SJwNHp_W-M)`Rj^%~q2$seS2L*~KrDl7^#4UQO;!kBp^_ z<))sbCU!XZ7u@f3?ow9H_jdKtwhwso@q9RYcf0@FYr%`=FmIVibHkrLi0$#yb@jQ< z-=f<@%EZJ+OpLVCJ99pcc>r(Hn=5IngFwD7K%n4I5a{|5c-;npJh(xi9a9iUBn)32d<(eLR@24mj+}r+!9t@#>N%=HX zR_E*uzvA}-Gd3}%IsQ1M^yH!SP_|ETe|L5aalGdHup4GBzm=(tLb z15dY7XieD3RZ1%>fS+_-b}>=lvZ9IHYC(*KhK8y7i2yyAVK|Kp_znWZ7c~o5 zoy$VaiQl!#S=#bz)Nb(ewqVcW&4uG}QEr-cITIu+@TLcqJ=16p#7r|?V zz*oSMEyghY|0`sB6yajFTtxF)B#am!`jH0=5Smn{qm_zv=I=nW*PO3_%buqZv1(yO zLg(KKbu50{=>)yp`UwI(lfkSCE8ts1xbwX~XzsG5F$7LO*6A;#1t;+LnaEytEacz| z27^H#2fv3r0izM~MZ;yS!EdeP{!6;(etwM2h#h&=6HqV&E%-@VfvwM+ z>%M`B)_<1b+mbb#>rEBdi7C0%k~1CkutP%wky{YU6=RgvMgHfSkn3RO8wS0;z!qEy zm6cujH;@p>hg)_T#{o(N$2NNHf3`GnBUPPc7`$l${E^X#@Us{M2M2@V*{9_o1^_+~ zNvZ2D1HS5$sYJiKfvNtNQgg|3YW+0=dHYaP0$lKDjrBL^TT{ELRH^`Z!1zhG=}dZq zv5cW2-!h)9?K1LyR7tvwpO=%8*|SvekSCSbI$%QXsFPNOrARf}#(p%-ZaCf?_6=B@ zr(ZpnwLYQWGiV8FF2C^qhOv!p$iZ=n}I(G{2f~;1;^+wT;0l0&AzOX+9AR? zQTFPxro@n*X|ihK5J*-o+f#k*2^NrC9hRGFv@L4^aK4U>L3FK+lj1fJTMSu?*|NJy z7e9Ya(b-Yn+c!ifw8^Huj2YucCsvD?Rv}k6;T!xBS%$orT81X4seG z>D;P`0X8}Kaq^Bu-Gaya-gkg&C6SgOxo5h$CkV#v?3^Sj9J7G6B8lv@A&rY#r1-bw zeLw0n`5!o9wrfpM3Dz1~g0@lmp`~qQ85zSRM9@70Dg9uOt704%8BNjY3=n>o>J}Pa zfpjl;^QV}3>2WZ=_UFe`+E1#PNpi1AXs+C zVq!@B>o9Pug8@%d8MfI_DgH^u3?+7r1!=h#{;#iMqLwSV&7-I(MX5+T7Z#} zfjkx{KYwB!@{Fhj?92}hFoSitp6AD8GS>YsJ6;S6IlysRGh~bSMFw>9i5Y`uq0XjD zX*VuZbcTqy^BU~-O@AVG4E2@MP!@H+5Gm4xEImt>XXu|G;NO&c6upqIN*mK_Tnvzq z7ZV~4|5<@DjTl!I#vr$1v63M&jL&EaL6er#KGeqaPqLvh(XV{C8gy^L^}8XkHEoxj zV@p-szuvb(Dl91{={#*MJtLE641Mk1no5=;)mh6Ql80CmL~ICGS8eFNPyjMTB0n{w z>nVCfN)4s?Y0Wo+l)9l zMGO$r<8ntc>`_?3cO(DS;_nLC zS%ASVb2Zi}G}kX7#pouq^%8>v*L%Om!7ZvG!Zk*;^{HPR_JynVtPm{)+tav6Fg%y! z-X6XVp|4U)|Ho7d9#Tsi@0;C4ee+EK>e)i-vz|Xlf?c8F(6~x6?eRM&Q?u1B?ZzJq zf8TA2kAR2$y+j8Py(9akf{b?>=njt&% z+_hGJL_;bJV&G4T&Ww(xRKkZx8e8}MztGJ247O2iXa)LP;s3m_#{9U`5_SS$@GwfcSdSNe_Z{O@BJUN?~!{6sGA*#*RZKyiUVZ z`2P6`WB=}Hv%ugMKV;4D-JrR+o{%|POlUz#H9zrIN1#oOfFs?vOB~vrTXCEyv5t2! zJMk?4kOd3koG+FYWa#B&XNLcc{rLzN-KB2SYA6g0SWCpfK|gaf$01nN?yHc%oVN!G zt%3m>nsn#JvWU%keoVIrR*IuSWSX2eg{mF6PrVMy4`#z8D6OIx;jI5<*v6EYt{|1l zI-YV%H4)dUfXVtVjM@LkLZ7|bT{P8XacrR8qg@}0g4k77-2#&>%U~bASq6NiN$?oyg_V+TkHfgCN2Tu-)DY_hm*XprDlTrr1-Gt9(p;SEf z%xLUJ2V(LsGFkRGawm(+*e*r-vI6QX8}xspC&*)p4PEcE$PLgu{TNwe{G}YYI~jhk z3o3^+WsWT@o^ofCWgFC>Rp?-!hoE3-ba(k%r{zy7^UtdA#2&nb2lNxeo#qA8X5nx1 zGcJYha$zMSFj$>y9<}inZVS>w9dZF>6pJRT)hoxLmWNcGxHzDXtiZxsQ!{D}U-#RQ zs9IY2Z?K&7_F!}-4s8aMmj~#F2v-4dW;4SdvYFoH@wKl6GfN_b@hKYgquF-P!tP%6 z@$+q6D``0*UWdFF(5xFV_CayNfdorrukujBiz;_soqCsmH4N2#I4-pTn5R)FbzY<@ zuJ&gg19uqXUj;0Xs=mm&`P^4hx))y~nJsao<%rEf&d#++bQE4Yu1!`SQWQGtilp=J zG3BI>W=Ydo?yT2suDi|po2gir;nGqst_`Y5euX^y+xl)?VGG8@49XYmya5hy3@=NB zQB0S*P%)|Q06k^mwn^lK(fL=-xvF1I`@f5LiMnKz@k{$A7U5pl_Lkbbr582ZqCMS%^^5*xVLxg!2PwIXMAAPwec ze1H8+UmH4#@5#q!lgCF|;N#9iHwCm|jxkTNhQjvLjO(t#j9v@R8rH_zuX$VtZI%l? z<%8JdQt=iKuT1gZ_weQoy4i*@%9v6LYGJBar-)p@CQl~It@OY2*G4(2rmdYNYl%9n z*T;-~5$9G+aiOY=y>quVm6Za8fY5@$_>2cht)Hyzex<_x#4d_Y9;hw2Y|QQhysnm9 z=I_LNwPYc(&5GZQ>hY@G4KWL&!;{sO-B8u+2C=eG5Hn?a>3Y0wF#bm_L4Yhtv7yo_ zr$Y1klde70a_T|f)upvROKH&y=1qldR*(?O&R|js{)RM!$TI^WV4bSyV8IiXU^df( z)Uv9|7&CH&m`?Nz+dLBtdBPhSp4W*SMl?l%ObI;s-26FJquzH^EvmWg_{nxu-7myu zu=K*n&>59TK?hp`jh-`MkQX&_#BsrqdJ5&Qg;FzEQ=?r-1dGfjdIl9S_cpC|%p=zf zIPss`Ij>3}GKeI&^|DQtiW^HI^535e?BydOO(A@t>PZ{dmN*0-Nnu07^{HGnKmjPo zYC{>H+uIeds}uf-K9Q2u zKOF{pZ?f}&Qce~^`J{)waCMl?6ar3hHVcKXtEUK&15P$~F-+A@<~8dW*lr zoSu92Oj8aky{v-KTW?$EA8u%8&2|fx6GJItal1TlN#hwm^ zCJ78%DW-g|ioNWq{kC&8_169~;Dw34t}&I-Y9%UWGBFh1_%Nb4s%Y!9AU31Ur3H68 zmf!wkDL{bK{q3y6X1 z7h@KX&AL4@-ax;H-d?@?<2KUpc*1{b0CBzVYyMoD6fpbV-V#|X#Po9i()r1j4ONaw zDV7IrvFPNlSs0sxEG3;V!uMPXj2Q_!EigW4UVOy@n)>T+_Qm7-)n|S^ScCutuHCs( zDI2!B2xg-+mPZq>tze;X#vcVl4c|mmCBl+^k8bupW$em} z_OXEZj^Jy5kNgPpB@gMW5k7Z=m;1|wZC2Rj8PN(jWG4SZA40rF1EI~)Z31t> z5Sr{Kg2F#FEGiq*`x;DL{>L{7%0O6F;Yi@ta)WT`(WB4sGBlciLEa(-pZmXY!_GX& z>~Ed4YqWYizgHr|NGeO?1Q)_~lyWe_L#-uWnX=KjZl)TR>*(ljf!WXD!8bmvHW!B; zhS<9wsGsgXUMd@o2BkP(%4L^SZt)#X`iv%%)LElH zr$uA8>^mzihyHmYWSX_zWaiHZ)NohG_hU&vzJuCbQ;dz0-$GbFx6OJnj$PsfLdK=l zYvMkRkcC@w{%Xy)P2xNxeB8&n&-pWWT#=Nx;a9xM+wF;N^axY<`a4w3?$U+CNmG== z#+i~dT4&mK`};7q!H|fJe%`X~Q@zsjlA10a zcH|XUeI>b~h2OsN+g(!>`pLhK$7d?SChzkavt`SsI_oy)Smo2Fc?Czsin|5^FD6td z^#xd#Ozh6t-uMK%%=#O2(kpu z_3GT;MQt*UbIz@<;B$KI7vm(nP?!w}V*E&DIRV7I-$%HTuTIIA)>rJ)SRZn(!jTuz zvsYCNP`=YE?GR7~FwT|z(NM6Nw0-kuP%k{Mk34!aRy4h+90QDyaGm>BV`FdLNDypF z!0ENPli4D2q8x6j$3cbW8mh@j5uG(XTobLdGef1qfeiwM&J3st@|B8Dl4&JjC?znd zZeH&+i8n6RN!yMV@P*DrOKle?!eXKt!{7z{CT;q2@CA3b!HR14JiA|iFQ3?eo`G;v zrPI;POE8?&yEn~RjK8orXI+$gIVz5)WOUllA6Q75?0wqtXHzV8wA#X($F%WG&$97g z$JNc2|B*AVND-YXSZXt5v#5yq*_m`hBzxXATSB4bh8+9`h;#TqiY;WZhiGn?Jm|Ng z)Jo~PXKtP1IQIz%-K`JChj(4T@PUSvl8zoC!~FRVQXFnn5qDojNMBiEQB*Gj5HQmn z15DjN2(@~i`exF2KVfdH6G7=x8){w9C0EAYCj<8zKG-+t_TIW#L}lyjFJ=_An<~6u z{B(98@PiOL6epO;pIhafP1-Qydl~C0_pKhIhPUC;WFroOp(6CGp_oyOuZ* z;l`w;wovv8b+OI^Y98{~SUNK*W2imhu-u`c9FX)Y3!?e$o0i{69EKGX9x_p(Zk}GC&Ni zlhSA#PU1GJ-M5v(D;rE?PZ9;;!!SJx8-C~KSZ&S~HwPduTj7H;JKyZrL(?pQYwLM< ze^jQo7yp5H!b1MkGQZeb1ZOp;+JMI(oGF~#YEw*+d$x+WopmvKiVhvz(@`>vT_3l< zvn<~9G@2C-2L8-3)+-D6i|*!Yof@k#idsbIO4I~18SOPWItmoE6Q0cZdaFdsqYtS} zFV55`pZGDT(4KFB>^4(4R)YQ+sA~-51xxd>4qY+qd=%Clweq6 zQ4BJ1=y;g!YDZM1!WOi@BS}NxUHsAt9%_sx!BRCOz62u_RtFJ(SjkH;h<3Tp5n_Jz zR=eMdUp;0AZSf z14u(>hF_LkidE~L;g!V)d97oEqmT)I>`jD=KIpvpwG;*6Iaib<#A82lw zz1}KDz>bLI$mN8l+yIhLS*RorXN5rU*wHatpB>0kxA1L?UPwx8;BE3M*=VT92ip2W z@x@)MU%u|#%#=b+R=8@+B_$@0y>dPLrbIS+*}(>L^wy2(`|Pcj1$z`14{d~B{`IxK zCK!Od1$oY4)zUuLa=p65tz!Ua#DU3IjkQ!>+hfcI2r}h z^c{GYZ&83i8!20=ejWf-X8PVK6jE>k*at7XE$Ei_%hR-ZHh_N*Sj*_tvNHA`wa0Ob zX1$q>G1M+`a4y>=SIPMH>HDAN7lZhl&r{>L)mON3=z6N$Clt@hn|9YyHpT#a^!U1imF z@3R}xHsrAsqTJ;UgYqwp<3=R|%KYPzmUM{*uJ(yrVlu8SN;~43P%`DA_XTH5(EBb= zUcO?PUyoE>^)CG!T%NiQpE^imzh`|SRes92eGlu}_jhR{-1RqGs?i4c=S^R? zNT8j=&6T#xV%SB1PLWSmZVy^D&oRKXcC*}c;!ANS#x#bNx*e34W>JZr@)f1BCCBZW zFDu|c^F$!4GB!CzoE|)@;2MeJpvz0nN1)QEuNaC!8_xnXx$X)Mg{qMrjg;F#=c;-S zW7AVk7j>_UFZJ3_H*$Qfjs=27DnC#^W-Yhh#k@*1l(a9{4cxmgl|0%zxo=NP)ouH* zR2=n#z}2yZ9As6DVc2zz%rxlF5uW0)&2(1;cW(7`RDGa1w2Y?7u;=lE8SIE~*c?74 zJ?^}7^H_*YZ=y>7zImb2*LHqIOJxhK;lZ(P+_9m0^25ECp1JP;U_)TxcY*#|gc96% zot|VLj4FXb_>-}P=|@2xYswJGJ-(A`FWqYw^EK?Z2%28-ya#<4&~*}r3fhayGIw8JG9XinfTZxW8=A4A-CRYpL%YGj2 zw;gjO*LRiv|2F!v(>p3LP656Q&+aYB%+r(+{jR9E7}N*H?DsF}jG_EtdqvNWkqQBx zwJcr8r^FTR`<`SP7pLapMXq?a4DeuJ_++O;3x>$cX=CS_FSpNaFK}D4f?`lZc^8Al z>eQ>*)y@0xX=tpXxnRa2R&$-+#sUo1w8{C?|ZNEh7$h^a@6{1L7w>OVaEf^ zt>dI6wNJe@ixtTH$7?}BgOyp5Me$ej9hW=*B=1?dvKMWaCY%Iq*W9=qZ`lqd`MgZF z+|Yx$%ho5WiJ;0tqqTA=j#k-5oSIx4aD}-0O+JZ1PqIRXGBJu277n6aFbMuSeB7=j z?iHSpW0xnH_A95lsyPdDpF z|A4ii)9`X438cy1jGaz=&|Q7Z<3&)==AZMM;cWEBqqQqIMI)UdyT+NxwA#&iW#yyh z<4$Irmp@wZn7`?eN$W^6%uPAKSs;66xU;=g3rSg3leO;xVJqy0t}yp?4!5% zv|s@2Oi8<{wk@d5rCo@L!nVaMTy3xe9a`WvKQU7@6cT<@BA~pof`WMAi*8F`V*C&g zW=b9QMg@-J z9d}bx1!lJuiHm2MIYB;0k9WgvxAsV*XZ*lwQ!%I2$#xC_l=15e-`9>z=m3YmE&xm& ze-M9R;UDW!d$Q!o7(-k9?u5RhX=n=SW#V{JG(COOg`eG`3nnFgXURso!MC?qN}8gj zs0tFtY)8-W?3}cd6nYTx47gg1MH4WLXb@*g0|FsSlcwm=TD7PlUWES)6d4R5Sd+2Q z-1jzEj<-0i+cYDI@W}KP02a2eTzJ=+YjVGY%w^N#ykx-j-n+KPqIBPfn}Th{oXkhj z4!3P5|E;^NiNi->leuEa^O#|Hm(b70I~^{?6bzq{t}#&!_rqv+pO&v&W$M^(F@pom zSRKmz(?Ol#NQv6_5@GWMLC$7(nh&4yOwvNLM%0hJ--PS_t!QI*=%+`z6q*$CZM0W~ z(OB~WE*1LOHRiwlJ!h~ynpn$Jzt4qgo_TU09?Go4cP24sExO|I(k>p1yg3>16ncgc z-mOS}Dqe}l=+2kuNSTqCF5e%|uxI67hT_fJKG9m8esJC=z|L^WaWaD4iFVu!D^n32 zv1ZmCqa^$!8r^T1Y@GU+ulI-O0zN)WF2APxie&T#a>WM-JFSW)y||Z zqXTPX#dW$~t0HzTKQW84CciB`ud6sJ=<%|0VGZrHAYe-$KH~xy+GMGzyzIs_@1(wQ zecop#D)0hP{S=gKQtHTqIl>rp8=V?>F)9|AWRg`92ec-=UI!8(Ih;Km3^u-*;bA`w z4~oGrT4g_qw#;Uiep2(^UF_@$#` zP(j{xmq3Ui=_n(kdQwc36BBmCW^5amLKG1%ceK>=xvz|1Hnzz4r4j&%Eq+_7@^`7p zImfFt4&QiQviT#gd-)c*nbrJ{_O9PA_CDvaCu-5_PLC`0ajrwcOZ1iIWf*eo@w`Rj zzO#0y#pHTIP~ahz%cymh>*_icd%20%=i+LN;}ca63wLx_8p1R94Wq2p@j$`JD)C6E zxL=C#yoll_u2*x)&Fg;ah$rfSx$X~BM{F9IDR-|(x-_{$t0C~d=Z2cg{uT8n&a){VOQ+}p8RljuRW|4xCj%nU3*7{t6GV}i7R%AyjZ?lcmndaEx-&eL7mPIdy3^C5X zg+dv+@?)qH<0Eit+O}^$URlXqAjBKnr{G` zRhOAk;Ue-hX1r(ld9n1M5?7j}{y0RH}y7X z^}Y|Kdb&WeW2^yvUOGAmuphw}3H^@GNKg}O zoy~uYE*R;&#qvsqNY^wLh~1gY8)>rd88r;f5h{w|FKFJhF8lb@HqV-PIDH@$Nw2)+ zFxpr3Dy6&Hn@Ye#D06YukP@QsL~UhAYJ z%~e?WfC3owIHV`Y@^A|vXN*IAi6ys)H<-ApIes=rewBoPu;Dg*--=}*7qRJCy}smA zbJ^p1+%H3G(C#02hg6V{1PYquMf)T$Eg@3LL9`~E?fzzGvrbMymx*{S+R<&cMI+u@>N=I`}; z=vVyRCi5zmuo;Ef^oVfe2%TBCm7i3O_H5=&j4~uXyWoSPa7-|RyIY>)r%O>iMZrZr zfU9T@?P&gz*#ftk9inQy35nZ+&gaLV8ZyjiL|_KnR(c8!-?P%W_OwyXhoVy}UAv+s zL&lA*>pB4VpqyF_jYAlh#>Rpr?+(m??75~`UdZIy>$o0CE@g6pEV=x=H9s``kCHfO zV_a0gQytCz_h2I7e=_G$f0?~=Kjh@lR`o7x(SN`A>^c<-fHo?l0n6ifEpgNWT5=;$ z(w9H!oK3O%p=7Z#Ny=0Poe+i}ubo|H=(`NxskC`4%;yU?GNVhlYQI(*oJRl@>=4yC z$&h@9&`&;JY;K_?1-OVKD~BREUBQVx1W6W!e=idkb1B}K*7x7Z4X!VzJK6&=gHkmE z%*{t%mzSNof zI!-MvMQO8YvF5X~XZ1M0Jx<~oMjQnc`4v_A9Ko*d?ya`~xgKGO^It65DTdl47Q+mB zDxD62ix}%a6rp(b--92}o|$MxMPo2KA&_Fu>Q=$E~y6^h3L#$tW|LFY2Zt z0Kb}vwRQWr=QGqe@VF~DYTVd_VC=a2qY6|a;m;jI#ZixokAWA>GXO>Yc(kqO)TS3O zaZrc;SHXtq((~Q3UUmMk5X%D8JHLZBtfK$9GDLBUlOW^qCa2>r=OK~eF(c^s1Zc#` zz#usUjYH`P>`Ie4)=|^<5J@hX>{}+IT&PqP3-|=t6~ovVR1Q8}W0n5>;JD=1tQZ;O z90&!WA89^*G7nhe3(fJ~Mb^hbsRQgBd~IfEwFP;u&xAr_|I&N%zCRGLuFA;3aI$&j z)%($g&JgMg%jMq*3yy@nAg2`Mp`GMu!zez=pRM5E=>@SN6{I7Ol&_`zxSKp0?E}^x z+f4i(mVGa)y|VX!tstJ=WKnyy3;*s+)Uu@H%}~%|T+mrtAJA3Nf>G0jk1Mb201ee| zd7lsVf3w&Dq1ofVb?d;>@O?maBHZ%!@pt&~G^hH*HeLDS zQA^xC{F2&mZ>A_^NVVHjld5{39e?KtsX+GA0t@Z3y)-G7QMD!22yv@%8Hn0D%FruZ z{!rRX2^?A_k}k-0m4>xtn%1bj?VT~rb#km|zN(hU&gRyg=eU9bCb5zv2fEzU@4Y-U znGSAMnt9BN1bKS7*^1BLB#lCcJ-Pvn)4-s@er-SUkXSyQNCt;f2GS|0$6j}d;Mt1H zN6r?H9|Ta~e0q<+^$s$YKfMVzc~~nDJlE7Xk4s}O$_HVMr@W%eVxWU(z<}}GC{R$s z>$Kp0)vNOEs6`LUV5p3UI4lf9E%wIuZj^KvMl*DRJiutV<2<`&`4o4t8=}K%!Zf z8u{`CuG$3$}=!5*} zORK4KA)z>|XdCl4L*d;5wYj`>9Q9%0p?7njMZ+^yq#<#vG^4)r{H2SELH382Iv1@I z)q*44C_qFDeOS5sr1=EUU;$Tlc-q`mewa~t7(Wyn3vh)uaiSi^F3Z~=6X1#zM7wgy z6Gmmy$HBo{>90#-V=d@PX6(87J`wPC8v!bi2#>V7F-6#rI;*HFRom@8&+UIwwYmIq zan=qFE7Oqt{7SRy-=>=Kv0uLGoL>K)BiVnYWp0pjrPsJKTtYYTTalrQIeAiHfMbk- zF7nlX+Pv}U#tpmC`L}F*iLvW+f&NQRHRik*{nht<-h7GWI~1A?aOVlywM8LhBy784 zUZ;sTZ+|*e5$yESyac>6Hv`DYLfOUqx|0lcXxn!!E{_^M`jgTzBTS@ufUkCoWcGxe~3XaT3SI&>)Tp1>FVR-w!?Jphh02ROj!zrn0#R z=7BPj%OA9g!TPTG04Ns#GI;oFem^cqeT#HDUQ_Tea~?lGuCIRV#v_rv!WiXT7J9OX zMJsqbZ#U_uaY?AWn|C5+D--#hids?Qh79@!yFwi0iy@}6kpgt1kj;}~0%8az8i=6= zf7jV(LZU&RI_vpi7Pb{5(8S-7V|hRzGuzAtUEy7{vws{mN3QssOm0j%{5J^{Q|Xl2 zFSo<<-t>_N_XA2rE{BN>9TOjc$nd;Cv+u%pMvjDJW5Uf2v^U?v@xj2q3^co352Mc0)bn@bWU;fm&wG&y`Tm4TBTvcPM2)}_bmB5P& znVF+?vG?= zh2&t_5{*L4F@&%-qI8O(vdOP9Iow+7QRci=x zC-B+S>SVdd5%f|)jtf1W`DOC4T19%hVr z=co~2AuS~%Eu%Wag)pjM%p@YrxxTpI3Vi6w_TwVLsYi93U*kRAHVOo7`O(6MTxSys zqPn0!K`Jn7k+@J-3Pg3H6aRrc??RY%R2894TY~66u&a$#kD6} z^8*-r>tcY=%VKR2R0&?ipk^6 z4bXe;dK5K+_DZg0+Yb4L^8fppae>%*pHwL4p7!7Zifvg6lTDZD>53W<XK;rY)h-n(D2hO*xwDL4aft~uIB8)Y50xdM-_ z;#yHN52MpIYt1ohOoAa?gmclMEM5~>#|Z(MCHf!`gGeY1kjiA%G*ruFUvH*}U~t~R+oG}m_{L*9to^pl*%K{tRE9#=cBkd){j z)|6FSH`G54o{oV%ftPJqz4DzH2XPu?Jd6GY*C|k$M z9<1XR3HAkg6o7`19yHecEXx7l@t0o{ZR$Y!JqT^b?H;44VfUUb33@*7kDR6AaT)&% z7^7cwnojWu+)&oy2`#1_bS^h`;Ca7 z{NW$RTdpTinku-1)Jl)}LK9c%s4!$)1fX2J#RakEG?Qm_-6H(bp0`yFNu}!zCTV_6 zQ+I``v*>@l+qpjp6f(#u^mH;ZW+8xUE8Vj+0v8pl`u`gxGy|_~n_eZNr5rgu&N~69 z+k;n=0(&^_@v*&r6nqoH=k~ZxB;m725p*4$`tVz?VyQk_I5i{ZdPz~@r00$*@Uv%$ zc%|lD6(O`r;=(TR9VRlK0$4HvYd{r6ES}oBh3bOB{!2o%PZ$8=0am|LAqMn(Lg#yV z^fHdyQ3Y#2QnFup1kuzYy*>BgCq~#cCj@LSsqx?FviHi+>g@4hocA z=HiVLW5xbC$CCaxlP34bWaq}M^Ch=mUdBM*0Fc}KJJDPJEjoYHNsLMB5c+f;%fnuW z_a-@w@2nP{SqkI@jWhP!s|(+A0EL#WZ~VmqNkzg7V)Nh&*?TB}DPX-dSXCO*x`eXh z>1LZO6u0|Wia6%Qt>x8e>4!l8AuFJ`Da!bHNfGN@4Q%%s-^@8G3`|ph7atI(F>g=Q z_Vi^+898&U6(@jdzt7{j4&0dH9Kz1gA@|FXq7c0`=9)dVZ*k=kFanh9Cq>x?tvt+M zgc9$E@Fzox9PH7Fe#P(QYELCUF!k`e++S%|FL;Fg$SMCnnyx#L>hJwuBd)A_ku5V+ z6t0!MM^=bPHW$gwmh6n|?b;f$%a%~NB*eA%2obXPUcYmFzCV9o?|aXApYxpOyq?$V z_4wr6_CeE)6jzyeP>Yw-E7(0CsSd{#$pC2jrf>dz!EqgP~C;it#zqzk!Xs~!y zz5(PnF)6vkGY@1Ad-26pkJgU^wFp0f>8G#_7JAYgvC zJpZIMU8#3H$LU|tm4&~ejK(Tj_PG$byNKZ#K(?tI9$S|LY4XMCbLq2RvR__$jblMQ zGvK_dYb7h=yzkLSS?q+L%+B=1+3o3r-Psy%H;bbQ^RF*PO8@G$o#Re}o|T_B2d@0) zkMI!E_nyiM0Z{8Yp9DL-f>=^j4S3Tf(vSX84Sv%GjCwp{n+LCVCbU?@)$ct9chBr< zEJxc*3JA-erK7J&4iCS_nXj8BA(57FLRft9d`-m$@<8r+%js&*`RbbN%Vogf3oG0P z+#ON1dGGN`kuRez_1}GEtw^SQ>JPSR`Lcc&1Dei{b5C;_S)xEYLrHY`_GzQv{Bqgp z`urIy$*msq7v7tL_v<85^QbWwbLQWVyKWCOxRD3^%f2mpVs|}Y!N{)1W~JHFktE^) zVKL^e({Pe|ai}pm%Vc@cv%(z!MB{GXnyEOtSN*+mcsjmB=(Aqwg+Vw9O2Wb+S~KHS z5EyrE?cd_Jt2`QjM86LUg-FJ#@{eN4iFDpLA&EYoq#irzFou zTeO4^Dfj{sqs>z1p_=pk})Rn5$E6mD1rRXkJ3fVDg<59zmi4ZE+pq%`4z z{9e5iy0n_r%i}aziqEktL~Ud?_K}C*3*lDz=7wsnw#r#EV{=!LIqM0pfO(qrH!K^Z z`3XvR?R(Oxy2bL`+pFNnHyP+vQNc{key~+iGtA`Blh{F9&;RnzUkf9iQ=Tq9EinOL zyPnt08~mN7C;zMj14gb?Pb*pERBv^(iv@u-5bEx))S|8OTz0CidtIweC%t+rweiIg zIHY;b<;$EV4x?zTo(j!4`V6!xckjr%VIxM(OsGxEWF}i`up!ltrToh+V8+p`h6NV)D z;<{pjkh9ss;p*U8)}gBO(U)u_{DQ~jheKzHG{83N9xV4Q;uR+-)d@elLq6faWGqKW zCVy9qG*5b}bG>q9FcXTMOKhpj2UaEF&E)76HJ z!%_Vm*{y^DvCLy_TAJk3L}^@vF4OW#+1|`(!+fM6zv&akk}B%h+eY(M8PdO9dBY~5 zt~rDk5H*yXzE?ZcaMm%A$cZ5&YYe?tp7PWttDw>MSICyb7h*!m;p$hSAJt|6#awZ7 zb&R?_H3TMb6ZIGfg0kLWXXm1RDmd)rAF%0qe;2nO=KfB?{2ua39t&8Nzbni>8%+&; zIMT|(7t+YF9Tx%$Ra!VWxErfKJntorvWxQySn849aSZsfUt(VG8km?)2?0bE9sk{3 zP#u}xHM3%2KOr!D=T;k{MU4id@x0g-q>9fWC4Fd~we*Mz zU=>0VLtKAaFxfgTBitTk^G_*R(87_hz-s*sGKR!{UDZ^=>q^iq)#-*~>F36Wq0{x7 zKOcp?l;`_{OVrFyXSPfdM-z6H;-wp_ZS^WZnif))=ba;(Fd@BL!KMx%TmzG)*y z51H);T%7ZKKkV3~^IvJU#6JCf_bWhZ3uOHlDt^w2%Kk~u`>>tDAT{h3){C$U6AH$a zWasbAe}VS?ie`u55yAqoda|`j79<23)IZsPg0!u^8>T(}<=&pmeN<5rg90Bv;OP~= z0_az3OPSVJdCi}rW+>>NRnKp3IVyGn<=A=A%2lF;cjwPy0*Xc=EIze z^$pYW*XE{;q@Q7`k#&=&LmLu%5w-klJda8URMAJxNLsHU<^j4kEn&hu1bc^Gn`nY! zvS=hCjbRx{V+7=04~#na4bQQvyQn)u;}Toez?Ap*8D2A+EKCc94fqvg_E{}`Y(lAk zGU+_GpL9g>ZG59bvnw{t?YdH8FC@ZRoY*-{q&{uA4qB>XH)?J=I0sVjlXPms#$ z>Vj}EuhggH`1ls7jTbr)o6c=1zJh|00qt_l;%<(5fq}v*GWnrv+ye_UrV~1`;&Hcn zIyNh$%N?<{#mYIi^r1UDKiuD+?v**6c5IlvEPvg6-MBqq+1d_3^IojeRuDP1a^WCV zEkG$E@^B9U*R9*8bjD#?&j_Ato`%W~5WY({5>ug7G%~uytW1kEUakidW`aok`TOxq6rXGbeHV<;DjXB-gAd$0l zsBQat^4DSJ4&on~3Z4QlKLa3`rxeh+?rptPBS2h=rTx4|^C^`Z%kilggn~;h>0@`k z3Qmb%g8^lRC*xkrSXfZt2b6}T`ZR{p->D$B!I+c%93a=mw z80hSZsN*YtK?{fh8IS?dNKEVCBS~Tuhf=)oXLOdRo_$tzmN6d-zsDqL@Y8p@;DS2Y zUkwWAFy$=y;51`0J}7`+d@a3da*Y$Oi|5~$E3Qo+xe!#cggb`AxV573LvtrBz!}b{ zkZgv^z+^`YS(79{d9(ng;=puI>no?iIEyNTodyY4%R9`AZ4i2j=Uic3fFo+f>e0&# zd#HcND;G}9bYb$L+#0NZ1u2TMfszblQoA~)SQAha_->Q0h9j2-!S4V1DQk6Y#%-8>IT-!wRTf0=$)Ui;Dg`_9&R zgU&&YkIRX0Ici}7F6j@{zs_`u*d*S z%gJ~5*E#=iYTPl49qk9flvmkJll>{Wna5)suq&`$s;g?_{`-7Yx!!+yM~Qxs1i3UP?+dz(f{upJ_^0Rm+p9BiofVIXTZ}H)TIP zH|n4b(xvW3i8AT;a4b1rg(!WQtavUt)%7r9NB*x0NjWYxIG(f1G4lW2P)TwMvV(1q zC46S3j0WZ3(-_$kbn-hQ^mDVE^Zl_uBX?p3psgO1Ih|dA8)?epGks)qvBo3OaIq|V z+%`QGC%*6NaIx%_UEf!+RYynMcz8s*LjC6ag=16MNr?^EpdR$YKwk!~I|Z##cEI9e zc}#U*cQ*Fw{o+Sj^q>ocat)m1Ep~n-#$RPB2{KsYdVb*6njUG?(+w)_ae$3Ul(Ejb|DXeqZ`)mMB6pG z0JSy~^_!56)9x-hJPp-2zR7PlMdnf4>Cc~E04nDsZ-$om#617+mDaOv)R64K*bb;% z*3E4ke$%;oN<8hiAmLNESJ4PGK(P}vIg74U<2WaXl$?go-5|TaI5kDA=sj~*qBRuCFh1s81IdvZIONv-R za6&Ccv5J_)Xmc;~@MN)qJ^>ASWj&1cpRbvH9$KCeM-%*c*?hvzS ziv<IqRU}wXtMv`&7`ZAv)D2^A1@C(14VgG6u{y+dK-|?$VPuj$)NM=iIpGX*#~U zr;+sLWc8@Zq&AQG`(VYzxoVFuKzoTd&f=doI(+r^s-LJLD=wGW0;q4ssEQyIT~4BI zLVs12{XX>-WW?brQIc=^-;B*S=U3qiq$dDZxknBa*y^Ja4Pt=@la=tYp`BH=uJm(_ zROFNp=!_dlSVNh5l0-d)Zt>Zo(URH-%XvBcowrx<`w4-nSNjKfXs)%X*GrkZlk9g$ z8s#mt$ro^UoucWXJtBzRCV;gLpX7V25(obe7zVr7OZM|`YMEW53m(~*$4VC#+Shz! zCW5a<3CoXTJZ3to;`+M^v6_kaTH2`&{S$1*?M^hH6rK{R0v>7`(G1pKGS-rlE$jr3(-d1q)PV_m)<;%GGrY3qyd>1>I{c zJv`24f6MEpyoN8=H>Z%#VQKnz0z3w_rE7x*c!Hol>E6dibzpICt$V3xotnI9z#*6G zhYSG5J5Sp1+pP~Hbjo)=4qgy|D&qr%ctlg!22kCW#^!R8LvSEoEy97OL_T9Wy3x3GiGy>?&#msyiWfzuAHKpT3rW@Gl}T zy>U9QF-Z!|3{ZhXiHCyJ(yGvLIBUlxdn%`c75lZ!W0XFrmgfqxyPh;Itqwk;DQu4K+c$4Fu4fC_U1Jkmn zN3$>YMr7UAyWPb$qNPoFi3|?G)}GWc@zVj<epo;`tp*b85V?oJ*-fWv{JO&J>A;!e_QZE2RJNA*-fUOz0cFhmEfWpWRrid>N z7TVes`aOW#1T4KYlE*%@x{lniyYJU@oy-5?^xq=LuLAiOP5ypdp$-VVPA|5wg5!rV zneyUT@#|HKjV`vX<scR+E&OK9f0rf&FhXp?41G#7GwV(tjAO;fvFb3F zlB?=kV&0#*wB7(Mr~XblH!ytS=fsau*Xg}P(KU8yHt9>TEUV#TU0iBlnr0mE&6%qw0Kh#GG~m}t zb;n~e>9+0SIw2AdRB7|}UQV`-SB2Ab(@@~eMBGTB^$!1kxT}+in9ujDqF^Clmb2iI z*>kSFeA;wZjesS|eQ46_U4jjV@prr(xJ%vj8ppZMB>gJ;x`|JGmh9{1uA4}xB`stU zA!)}-XY(u(ph{z`#HV|=;HWuA*CF9`^bZZWfK#2U(|2C{=5)r-+jOmUro+{lF1kVG zo+rRPRnHf!qFb$6niTDPLWS?+$e?+EuI&wcdgS=0z7bSGHT|A2ozzs6NvXnB?Mdh) zJZn<<(T2CZDcN6h`JN5lKSE6Jw8vbh$JLN=RI2Qdnj5G8l6G*)p%~JR|1T{E{qx^Y z2$wyclFpcod@mJ3h;}pS8ggMW%I7b*W(E9T7I2kDJ(mZ17CyvC+B%`_#m_62EaV() zA5;!}E#rD@N%Q)yPbhX;w#a^oASQx5%;|Y9wn9DKRp`D@f0+Hhns8%)zk9iCKS*3a zpj(;8EnoWxJ|_JD%LW#acNruP2{>rLiMbvzKl}DHf1d&yEb+D4jB*)foM`x2KAcR$ z)ThwwQHNjChnU7~$<%3VxV z$eUJ%+zPqX@??LoqlwpG1D@v9_FYA5Q}?~vwyh#&=-$C@g*H;y)Ia=i_V$ldvEqw4 zpIFmJ-F}vzj#u8?JD5GjBQ+0b%XP!mWD6Fijnq~=ANP4-a`bG0r5X;5=b5ViKvMl) z>aY6FP=#!*>4+J=n+*g4^pL3y>-@LpgQ~xQ;nXYw6Dp_Gf*d~^LavbJzB!GbMMqD5 zY%4a`_+WtN#GB*MB~Y_$*vA8J&xr&_O7P!g>D2kOs`~|*05nm%ao_9xXKGe5e>q+p zkBkJ&d)?6)e^Dj<3@j6>#OAiTwfgPVTtZq}b^v7q1GAbZ*TehUwKT?X)>JzmVzgk2 zfq~i4fXACXAhE9qi8}pJR(kP!y2019bY9(u4bZpeR-4*V8lRJ_~5leC&w$mBe9k~`0JX^VrGHDH)lBkitWjk z52R0_`fes7P}UbH)7b!n0MONOPXX#_vHh_=R_&M6C_2(bfcdF~)TKWMLw^J&OpBpr(YKvu8%bfuXvG@&3 za%F_8(qWD4laq_{^?AQ_Jn-yu9luqqe@NK|g_zqrahUg7O6f^l<3_>?(FoX%Y(>&< zCQ!pbHDbr$hH|N!yVaw?;`9E^nrhg}F=jP4YZ`TjB9q(M0uPUaD?}R!5~e<)9fH;# zS+DcA$$1ByzJ6Y#1EI4PEY;90*^{I=-|2y<%Zx_GVJa&OFydT(@V$cOeJ7BL<(gPW#nAQr8Oj~7Vqtl(EcKE|DuOzeG#0OHrb zPp_l{RyBC*gKJxObMrCBpn`dq_1UwqOsF|);`=?O{Bj@90FZ8j``HmlzFAjmPhwRU z&r5WqO0$v5-fD?}t<&Q)vxZ-t-=Q%-XC`CzcbAuqNW0+kB~ zlAV>O_ss2Yp2*LU(|K-0XOe*LAa2cBy?58|#rAl;L>@0C6R5Z6?$4GNNf$7WGf2s# zX6N)ASl`;J$6z^_lAJAjHOGyJV|5ATAW*>Z2UtZP=Jai4LCetj5hlG341W(y%HJRt zNz3hc#;NHYbm*JI_9X&$YXh43?`-8CW6s9EunhO9!eNTQwJ4=jvae_3g~Rf(o~I2c z0Ntg?5G@L<{DAp7=+eV{Tk_V)o?O-KtA2q!>HnX!eKIQu!==jsbBM+Ldr-d<@I@*u z2g$HUAiOr=JVVQ3$2;7pjR~PmRC}a5VA-|3-djN|08K7)b+AOWJfw+@>J>W}nsjBn z-sh^u1 zmrQ#sORy$O!Y1m^1dg^<&fMNezhJ18zC3Y8VW8BEONt!)lDP#)#Q}&7_Ij$ses{8L zX-}G}maoINsgJ(V_|Oo0XafT7>fXN0gq0Ysl?!aC}x*)a?Uvh_SR|?(#S*61w{);u12c{51O%Au48c;1>J?$kBmf z85#(EL96k_2zL$6VU&^a1-0JG9MXR&5Ydgh8tk_9NPRY1MI=x0X;>OJ~VBd!iP*T9_6XpI+!OZYJT;83?r_TFjURJ zj~kEkZi^wzeD_}*OrLH3Vp9F(f9A-96TwnEP3B9ONdNlz`^7cou_R#HV(I46t36Jy zEZ3hQC=m>pJm5C*{By=xJ%-ts$RO?I9X?xHAe|MkPX{db>!y=saVgu7O>nty+)8)z za-ux+>ZWJ}6`}2N7EwG1fR?D;jt->1Ip?;`0vfsb1-6cEgz^RDiDKMd0LT<|b`gF{ z*OcoRE-7t5_b*W$gomNZ-&zH^_}LX?5JqUPV*iP_Ygn-;@D9l320|BMYeUcJSE~2# zt;GMm4>+DYGOowgI$bNbOL;q(Dpz^|{RE=Q#fI}^T%}-a8nMGBaRal0eqA0!_e^z6 z68e#kHcw-+<2|lFE7Hos&zmfvzQuKw?|Gl2MLY5=-MmMKEx8d^P@lSc!=32quc&>; zpgIy?kJUCU=D{FXeY)|gxGKHT0%>lBd539K)bz!E9;^RBhX-O}WGjVq4tHyimSq5@ zkB~rUbcQpk0c{Vz>heJy*z)=yc)Bnr6zDL^_8`YJiLgJ1l^SV==z{R7^}N}UW0 z@O>HB*BUIBsTSwy_rw(iD=YGrF zJ2b$<37Y=S3>b;X2tfnoZSbOue88!4)IW6&+2aFJM5a87XHXJ6k}DY4V+F?tZ51hE zA+UhM-?yjF22a5m<^KlcAjBGnxf>>DI~$L1W1)a38SyzWRaU)=h?aXmPY4O7H%@%G zxF%z8%Qgx#*ak?wIL}@_4*W2-D!_R4_q{V0VYI|f9QrpfiecjQ?QE8$JBg|Mp{j43H%KVP$MG#P+6&%b9GUxv-xMe9YI-5)A2L`e~WA*dSY{RREg0P-kMGX~s`@otCh! zZBs#m1@AHM>h4Sl`gAw~e`aQAg00`|U9t>rD97J02&M|w98tGwBio=w*FJ*3Qy!Zd z*7f#kPAH62BQzI<)ZVL7NTE&k+bnwi>~x#%E{GeH0byY66ihC6BI6ZqG9?teb_Hz)Oq#;37C96MxZR2DFFTic@5C{L9 zdtFZNI%78*2Ym}vk9c1f78t5zV?8TbRvQx#jA2$*(c0COV-tejXG*`)q8I*t&Bx z3u2>ie3s~SL!#X=9y&cj-W zA@Vqt*048;v7Dqw<|krrj(2xV8h1egz04*p0C*fYGOzb>8g75MJ|AVVlMi`_K)KdFf=pfv!2weiiqcj^Cja=OBVBa}yfAPgp*P2^t>=JCwL2Fu`xj83 z(|37`csssvUWJCsD?w;sczAFkrO^};?>P`neSu3EiX z?L%hk^G_UD3aEmT{yG2SaD97k2-er6qiZm*MqK9g-@gWj1;X;knUz`o?+x8=nQ782eG9JMg}?$ogl8yFszO{8*N%tDBq~ z$i6zC?`&fd&F64VisuV7V-pjwuFvJUcZ5*LV@jvLpE@KJdi00^?L7wD@#pe}Ius{e zw+YHzo04|VI|+VJo#QmcKPj(|e8N-KjU6VB5%`^pZw14H5N#&Z77G+Aw0&#B=ZOr5 zl4UxBGr1HWzgpK-11c8+ju@T=p{}%)hF@-XDg3u~=!SXDY2$QpYb}-!zx>`72yrn* zak_d8@sO;%lvtmArN!Y1EG-bgTF;6VymJSB&(z|T(M;Uv+y%L}Qe-$-dE{4AlB$F{8JM^twBH32LM0?PD3;_ZHvqB0eZ2{i< z4~a^(@#KDYfK)F9gzI5p;3WXr#8!0sIvD!gn#<$u&@Gs=udw!`fpn7{ z@oHH(3e-OT8uCp4;X1Mv*kGD0+_}f9NFx|H=krwREib6<$MH9VI^V7ySYeH9z|mL~ z3TJG^vaugRi=h08`Aw*+cycU<%i;`zifeWE>&+n{Z>>dun>DbvkqepBLlu>OdGOfI zdHJ5xJuSb6>Q+!5;2w0E>6sbvB1Pd?GZ^sU*4P2FU}@_bFMBlmKHaOV2DQ^MUAOX2mXlq@LF?b{CG2XfZeG?+1-<10d; z!Y7m@6`6gmBSj6#IB)n#<9@(&L-JP1TG;?e;VijkItgSPbBXYcvuP#Evj974pr(BI z;sJOx&3t|k0}MVu=ozj@oFmL^-0JjoZ!`5uAT|*(N(hi0CZYuB%$JBC+}M@VRNV8w z9z~C_4F&-&93+94L$~)wd8`J@SL4}d%5TY;jmWG5$IvwFwCF_n6x^r5Sx+N7!5e(* zkT+e~&Uvs!q8tHA%>b*j8!K)8U`flappka{CIpD`v-dAe{^zyrfpYN2@SsVsK4l%d zsu3|V$mCyuvBnIbfK$7sT#4BNAxgBg_KJ^R;@kDA+9Y6RQSZCe zLyRPDvCN~%-a*Qt9LTV%svqwE_jy$tqLa{@d<^(_4)}4P{=qQh;y2lv=^phqW8(ksE$-;Z%%#EdgI6xG5(iGr7p-vjy7JV_L#{p$F? zWy3N@Hjn=J4jYf)g$PZ2sCO9F2m@@{-&iGd2gox3?1w^Cx8aQXc~4rX_JxudqB*o+ zgluwPbLcmE@%xCz{RRR&jZu}H+t{spV&)ljlYyB0>#& zDF52G_-Fc(V{i!$I~OBjR@<7z1s`LZAhB{cU||o|g5h9J?Ft({d;ZW(3ON6}xUY8c zH5|Z=WkDF)KB!3jWj`AF`RZ?MA?ts0BgkO^jXS8Ej|FBh3xgv$SAf5L;SZ}eTd{wk zqoTm}_)!jL=eqXL@u+05G{5cTK9P|N(N+oNr2S_T1{>z_?{BRx#qv2@TZksRS1ZdY z$sw0>EC>fE{#!gJ;a&D{2!@U2O((vFjRhP&s&C!GA-BX^rKH>b3UbIRb04_fGJJcB zTMCtBn6En*Fv}(Tchxc-TLAcrEav;nis46zo8N!00;B|v67ngs8h12P{CH| z2wl~uKuu}Yuy(5VhrH^nlIaFZLk};%!V0!X+F%gcx|3(=NKT99dnf`4D;$Ulz+Cttp*c{AfXWHEg*88oy9{LeQ8%8f*H6aV75P4ss)9hv)xsMRGe-y) zY&d@6>vC1XtP*LrbTuw_YNa_45kHg=3Ps9@zLw#H78-u=HXr+DQ;9j0ZGfO#dJ zIcpWfwDz7?sYpsuuZze60=Lioi_m)AbS83pbB``yNMC9vwtKE8PH?!Y8R= zy=;$z4R74Ld}N@SyaC}ydAnXVj^+>ZZWCSQBxTYcf#@)FucGYnKGwmD0nY8jJSe|d zdHH#{P0)L8iPu}2@zviit7K*-?>>j5eNCGXH;J<%;%X=F@+`!~7UeN9oCgot%0DtH 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 P00000NkvXXu0mjf7fSf- literal 0 HcmV?d00001 diff --git a/app/assets/images/bg-signup.png b/app/assets/images/bg-signup.png new file mode 100644 index 0000000000000000000000000000000000000000..79676f1614ab0dc45d49e5d4c94789890057ff2a GIT binary patch literal 2923 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 V1R^3gA6@_e002ovPDHLkV1gr$Y>)r| literal 0 HcmV?d00001 diff --git a/app/assets/images/button-green-disabled.png b/app/assets/images/button-green-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..21159cb788e654d65ca07e6cc61f3502fe968818 GIT binary patch literal 2852 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/checkbox.png b/app/assets/images/checkbox.png new file mode 100644 index 0000000000000000000000000000000000000000..e17953086fbc9c951190011597274a36114c8a4c GIT binary patch literal 3258 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/error-groups.png b/app/assets/images/error-groups.png new file mode 100644 index 0000000000000000000000000000000000000000..377b18da8af4ba01dc4f18a0086783fa6f651653 GIT binary patch literal 4589 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/error-message.png b/app/assets/images/error-message.png new file mode 100644 index 0000000000000000000000000000000000000000..029d009fe696feae486a53dbc2ef1a181bdbefb7 GIT binary patch literal 3999 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 S+$J{w0000-4_o4 literal 0 HcmV?d00001 diff --git a/app/assets/images/gplus.png b/app/assets/images/gplus.png new file mode 100644 index 0000000000000000000000000000000000000000..80f6155e073f4e9f879516c8b615dd5b3223933c GIT binary patch literal 3077 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 literal 0 HcmV?d00001 diff --git a/app/assets/javascripts/create-issue.js b/app/assets/javascripts/create-issue.js deleted file mode 100644 index c26f4eda0..000000000 --- a/app/assets/javascripts/create-issue.js +++ /dev/null @@ -1,35 +0,0 @@ -function addPeople(num) { - $("#people"+num).fadeOut(0); - $("#people-sections"+num).fadeIn("slow"); - $("#people-sections-list"+num).fadeIn("slow"); - if ($("#people-span").css("display") != "none") { - $("#people-span").fadeOut(0); - } -} - -function remPeople(num) { - $("#people"+num).fadeIn("slow"); - $("#people-sections"+num).fadeOut(0); - $("#people-sections-list"+num).fadeOut(0); - if (($("#people-sections-list1").css("display") == "none") && ($("#people-sections-list2").css("display") == "none") && ($("#people-sections-list3").css("display") == "none") && ($("#people-sections-list4").css("display") == "none")) { - $("#people-span").fadeIn("slow"); - } -} - -function addFlag(num) { - $("#flag"+num).fadeOut(0); - $("#flag-list"+num).fadeIn("slow"); - $("#flag-list-sections"+num).fadeIn("slow"); - if ($("#flag-span").css("display") != "none") { - $("#flag-span").fadeOut(0); - } -} - -function remFlag(num) { - $("#flag"+num).fadeIn("slow"); - $("#flag-list"+num).fadeOut(0); - $("#flag-list-sections"+num).fadeOut(0); - if (($("#flag-list-sections1").css("display") == "none") && ($("#flag-list-sections2").css("display") == "none") && ($("#flag-list-sections3").css("display") == "none") && ($("#flag-list-sections4").css("display") == "none")) { - $("#flag-span").fadeIn("slow"); - } -} diff --git a/app/assets/javascripts/tracker.js b/app/assets/javascripts/tracker.js index b865aec64..8726fe5ac 100644 --- a/app/assets/javascripts/tracker.js +++ b/app/assets/javascripts/tracker.js @@ -13,7 +13,7 @@ $(document).ready(function() { $("#table1").fadeIn("slow"); $('#issues_status').val('open'); } - return send_request('GET'); + return send_index_tracker_request('GET'); }); $("#manage-labels").live('click', function () { @@ -43,23 +43,23 @@ $(document).ready(function() { $(this).css("color","#565657"); checkbox.removeAttr('checked'); } - return send_request('GET'); + return send_index_tracker_request('GET'); }); $("#myradio1").live('change', function(event) { - return send_request('GET'); + return send_index_tracker_request('GET'); }); $('#search_issue').live('submit', function() { - return send_request('GET', $(this).attr("action"), $(this).serialize()); + return send_index_tracker_request('GET', $(this).attr("action"), $(this).serialize()); }); $('#add_label').live('click', function() { - return send_request('POST', $(this).attr("href"), $('#new_label').serialize()); + return send_index_tracker_request('POST', $(this).attr("href"), $('#new_label').serialize()); }); $('.righter #update_label').live('click', function() { - return send_request('POST', $(this).attr("href"), $(this).parents('#update_label').serialize()); + return send_index_tracker_request('POST', $(this).attr("href"), $(this).parents('#update_label').serialize()); }); $('.colors .choose').live('click', function() { @@ -82,10 +82,10 @@ $(document).ready(function() { }); $('.delete_label').live('click', function() { - return send_request('POST', $(this).attr('href')); + return send_index_tracker_request('POST', $(this).attr('href')); }); - function send_request(type_request, url, data) { + function send_index_tracker_request(type_request, url, data) { data = data || ''; var filter_form = $('#filter_issues'); url = url || filter_form.attr("action"); @@ -106,4 +106,69 @@ $(document).ready(function() { return false; }; + $('#search_user, #search_labels').live('submit', function() { + var id = $(this).attr('id'); + if(id.indexOf('user') != -1) { // FIXME + var which = 'users'; + } + else if (id.indexOf('labels') != -1) { + var which = 'labels'; + } + $.ajax({ + type: 'GET', + url: $(this).attr("action"), + data: $(this).serialize(), + success: function(data){ + var tmp = $('#create_issue_'+ which +'_list'); + $('#create_issue_'+ which +'_list').html(data); + }, + error: function(data){ + alert('error') // TODO remove + } + }); + return false; + }); + + function remExecutor(form) { + var el = form.find('.people.selected.remove_executor'); + var id = el.attr('id'); + $('#'+id+'.add_executor.people.selected').fadeIn('slow'); + el.fadeOut('slow').remove(); + } + + $('.add_executor.people.selected').live('click', function() { + var form = $('.form.issue'); + form.find('#people-span').fadeOut(0); + remExecutor(form); + form.find('#issue_executor').html($(this).clone().removeClass('add_executor').addClass('remove_executor')); + $(this).fadeOut(0); + }); + + $('.remove_executor.people.selected').live('click', function() { + var form = $('.form.issue'); + form.find('#people-span').fadeIn(0); + remExecutor(form); + }); + + function remLabel(form, id) { + var el = form.find('.label.selected.remove_label'+'#'+id); + $('#'+id+'.add_label.label.selected').fadeIn('slow'); + el.fadeOut('slow').remove(); + } + + $('.add_label.label.selected').live('click', function() { + var form = $('.form.issue'); + form.find('#flag-span').fadeOut(0); + form.find('#issue_labels').append($(this).clone().removeClass('add_label').addClass('remove_label')); + $(this).fadeOut(0); + }); + + $('.remove_label.label.selected').live('click', function() { + var form = $('.form.issue'); + if(form.find('.remove_label.label.selected').length == 1) { + form.find('#flag-span').fadeIn(0); + } + remLabel(form, $(this).attr('id')); + }); + }); diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index 633787b64..9ace09ccb 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -1,1708 +1,1682 @@ html, body { - margin: 0; - padding: 0; - font-family: Tahoma, Arial; - color: #565657; - background: #1f60a1 image-url("bg.png") repeat-x; - min-width: 940px; - min-height: 600px; - text-align: center; - height: 100%; -} + margin: 0; + padding: 0; + font-family: Tahoma, Geneva, Helvetica, sans-serif; + color: #565657; + 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; -} + display: block; } -input[type="text"]:focus { outline: none; } - -input[type="password"]:focus { outline: none; } - -input:focus { outline: none; } - -select:focus { outline: none; } +input { + &[type="text"]:focus, &[type="password"]:focus, &:focus { + outline: none; } } + +select:focus { + outline: none; } + +a img { + border: 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; -} + 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%; + &.columns { + background: white image-url("page-bg.png") repeat-y; } } .both { - clear: 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; -} + -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; + div { + &.left { + background: image-url("top-left.png"); + height: 46px; + width: 14px; + float: left; } + &.middle { + background: image-url("top-middle.png"); + float: left; + height: 46px; + width: 912px; } + &.right { + background: image-url("top-right.png"); + height: 46px; + width: 14px; + float: right; } } + menu { + float: left; + margin: 0; + padding: 0; + ul { + list-style: none; + margin: 0; + padding: 10px 0px 0px 0px; + li { + display: inline; + a { + font-size: 12px; + color: #FFF; + text-decoration: none; + height: 43px; + padding: 15px 15px 15px 15px; + &:hover { + color: #cee7ff; } + &.first { + padding-left: 45px; } + &.active { + background: image-url("menu-hover.png") repeat-x; } } } } } + div { + &.logo { + float: left; + margin-top: -25px; + padding-left: 10px; + position: absolute; } + &.information { + float: right; } + &.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; + div { + &.pic { + background: image-url("search-button.png"); + height: 22px; + width: 24px; + float: left; } + &.field { + float: left; + margin: -1px 0px 0px 0px; + input { + border: none; + height: 18px; + background: none; + width: 132px; + font-size: 12px; + font-family: Arial; + padding: 2px 0px 0px 0px; + &.gray { + color: #cfcfcf; } + &.black { + color: #333333; } } } } } + &.avatar { + float: left; + padding: 6px 10px 10px 10px; } + &.information div { + &.active { + background: image-url("menu-hover.png") repeat-x; } + &.user { + float: left; + margin-left: 14px; } } + &.profile { + float: left; + text-align: right; + color: #FFF; + font-size: 12px; + padding-top: 12px; + a { + color: #FFF; + text-decoration: none; + padding-right: 10px; + &:hover { + text-decoration: underline; } } } + &.droplist-wrap { + margin: -4px 0px 0px 0px; } + &.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; } + &.droplist-wrap div.a { + margin-top: 5px; } + &.droplist a { + position: relative; + padding-left: 15px; + font-size: 12px; + color: #7eb7ed; + text-decoration: none; + padding-right: 15px; + margin-top: 10px; + &:hover { + text-decoration: underline; } } } } /* 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; -} + 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); + 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; } + &.right { + float: left; } } + nav { + /*Äëÿ ïîäìåíþ áåç íàçâàíèÿ*/ + float: left; + margin: 0px 0px 0px 0px; + ul { + list-style: none; + text-align: left; + padding: 0; + margin: 0; + padding-top: 5px; + li { + display: inline; + a { + font-size: 12px; + color: #575756; + text-decoration: none; + height: 34px; + padding: 0px 20px 6px 20px; + &.active { + background: image-url("submenu-hover.png") repeat-x; } + &:hover { + color: #2b6daf; } } } } } } /* Page markup */ article { - font-size: 12px; -} + font-size: 12px; } aside { - float: left; - width: 215px; -} + 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; -} - -article div.all.bigpadding { - width: 605px; - padding: 0px 40px 20px 200px; - text-align: left; -} +article div { + &.right { + float: right; + width: 645px; + padding: 20px 40px 40px 40px; + text-align: left; + &.bigpadding { + width: 445px; + padding: 20px 140px 40px 140px; } + &.middlepadding { + width: 510px; + padding: 20px 120px 40px 50px; + div.rightlist { + width: 300px; + input, textarea { + width: 300px; } } } } + &.all { + width: 855px; + padding: 20px 40px 20px 40px; + text-align: left; + &.bigpadding { + width: 605px; + padding: 0px 40px 20px 200px; + text-align: left; } + &.verybigpadding { + width: 545px; + padding: 0px 40px 20px 200px; + text-align: left; + div.left { + float: left; + img { + padding-right: 40px; + margin-top: 20px; } + h3, h4, p { + width: 420px; } + .tmargin5 { + padding-top: 5px; + position: relative; } } } } } /* Left part of page markup */ -aside div.bordered { - border-bottom: 1px solid #dee5eb; - text-align: left; - padding: 20px 0px 30px 15px; -} - -aside div.block { - text-align: left; - padding: 10px 0px 30px 15px; -} +aside div { + &.bordered { + border-bottom: 1px solid #dee5eb; + text-align: left; + padding: 20px 0px 30px 15px; } + &.block { + text-align: left; + padding: 10px 0px 30px 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; - text-align: center; -} +article { + h4 { + font-size: 12px; + margin-bottom: 0px; + padding-bottom: 2px; } + p { + margin: 0; + padding: 0; } } -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; -} +div { + &.expand-gray-down, &.expand-gray-up { + height: 10px; + width: 12px; + float: left; + margin: 3px 0px 0px 3px; + cursor: pointer; } + &.expand-gray-down { + background: image-url("expand-gray.png") no-repeat; } + &.expand-gray-up { + background: image-url("expand-gray2.png") no-repeat; } } - - -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; - text-align: center; -} - -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; -} +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; + text-align: center; + &: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; } + &: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'); } } + &.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; + text-align: center; } } + input { + &[type="file"] {} + &[type="submit"] { + 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; + text-align: center; + height: auto; + width: auto; + &: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; + cursor: pointer; } + &: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'); } + &: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; + text-align: center; } } } + h3 { + font-size: 14px; + color: #575756; + margin-bottom: 0; + padding-bottom: 2px; + &.fix { + margin-top: 0px; + padding-top: 0px; } } + a { + color: #7eb7ed; + font-size: 12px; + text-decoration: none; + padding: 0px 0px; + &:hover { + text-decoration: underline; } } + div { + &.right div.hr { + border-bottom: 1px solid #dedede; + width: 100%; + padding-top: 30px; + margin-bottom: 30px; + &.bottom { + margin-bottom: 10px; + padding-top: 20px; } + &.top { + padding-top: 7px; + margin-bottom: 20px; } } + &.leftside { + float: left; } + &.rightside { + float: right; } + &.all.bigpadding div.rightside { + margin-right: 40px; } } } /* Right part of page markup */ -article div.right div.hr { - border-bottom: 1px solid #dedede; - width: 100%; - padding-top: 30px; - margin-bottom: 30px; -} - -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; -} - .lefter { - float: left; - margin-right: 5px; -} - -.lefter span.gap { - padding-right: 59px; -} - -.lefter.top { - margin-top: -6px; -} + float: left; + margin-right: 5px; + span.gap { + padding-right: 59px; } + &.top { + margin-top: -6px; } } .w25 { - width: 25px; -} + width: 25px; } .w420 { - width: 420px; - padding-bottom: 20px; -} + width: 420px; + padding-bottom: 20px; } .padd25 { - padding-left: 25px; -} + padding-left: 25px; } .width70 { - width: 70px; -} - + width: 70px; } /* Footer */ footer { - height: 32px; - 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; -} + height: 32px; + padding-left: 15px; + width: 900px; + margin: 0 auto; + text-align: center; + ul { + margin: 0; + padding: 0; + list-style: none; + font-size: 12px; + color: #FFF; + padding-top: 10px; + text-align: left; + li { + display: inline; + a { + font-size: 12px; + color: #FFF; + text-decoration: none; + &:hover { + text-decoration: underline; } } } } } /* Main page */ -aside div.bordered table{ - padding: 0; - margin: 0; - padding-bottom: 0px; - margin-left: -10px; -} +aside div { + &.bordered table { + padding: 0; + margin: 0; + padding-bottom: 0px; + margin-left: -10px; + td { + font-size: 12px; + padding: 1px 0px 0px 0px; } } + &.block table td { + text-align: right; + padding: 2px 3px 1px 3px; + &.first { + width: 150px; + text-align: left; } } } -aside div.bordered table td{ - font-size: 12px; - padding: 1px 0px 0px 0px; -} - -aside div.block table td { - text-align: right; - padding: 2px 3px 1px 3px; -} - - -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; -} - -article div.right div.activity div.fulltext.view { - display: block; -} +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; + &:hover { + background: #dceffa; } + p { + margin: 0; + padding: 0; } } + &.activity { + border: 1px solid #d6d6d6; + /*width: 614px;*/ + border-radius: 5px; + padding: 6px; + margin-top: 15px; + color: #333; + div.top div { + &.image { + float: left; } + &.text { + float: left; + padding-left: 10px; + font-size: 12px; + span { + &.name { + font-weight: 700; } + &.date { + font-size: 11px; } } } } } + &.text span.subject { + float: left; } + &.activity div { + &.top div.text span.subject img { + cursor: pointer; } + &.fulltext { + font-size: 12px; + padding-top: 10px; + display: none; + &.view { + display: block; } } } } /* 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; -} + list-style: none; + margin: 0; + padding: 0; + margin-top: 20px; + width: 215px; + text-align: left; + li { + padding-top: 5px; + padding-bottom: 5px; + width: 215px; + &.active, &:hover { + background: #dcecfa; } + a { + color: #575756; + text-decoration: none; + padding-top: 5px; + padding-bottom: 5px; + padding-left: 15px; } } } .right div.leftlist, .all div.leftlist { - float: left; - width: 200px; - margin: 0px 0px 10px 0px; -} + float: left; + width: 200px; + margin: 0px 0px 10px 0px; } .right div.rightlist, .all div.rightlist { - float: left; - width: 400px; - font-size: 12px; - color: #575756; - margin: 0px 0px 10px 0px; -} + 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 { + &.check { + float: left; } + &.forcheck { + float: left; + margin: 1px 0px 0px 5px; } } -.right div.rightlist div.forcheck { - float: left; - margin: 1px 0px 0px 5px; -} -div.rightlist textarea { - height: 110px; - width: 340px; - border: 1px solid #dedede; - border-radius: 4px; - padding: 5px; - font-family: Tahoma, Arial; - font-size: 12px; -} - -div.rightlist input[type="text"] { - height: 15px; - width: 340px; - border: 1px solid #dedede; - border-radius: 4px; - padding: 5px; - font-family: Tahoma, Arial; - font-size: 12px; -} +div.rightlist { + textarea { + height: 110px; + width: 350px; + border: 1px solid #dedede; + border-radius: 4px; + padding: 5px; + font-family: Tahoma, Geneva, Helvetica, sans-serif; + font-size: 12px; } + input { + &[type="text"], &[type="password"] { + height: 15px; + width: 350px; + border: 1px solid #dedede; + border-radius: 4px; + padding: 5px; + font-family: Tahoma, Geneva, Helvetica, sans-serif; + font-size: 12px; } } } /* Admin-members page */ -.right table div.img { - float: left; -} +.right { + table { + div { + &.img { + float: left; } + &.radio { + float: left; + margin: 5px 0px 0px 0px; } + &.forimg, &.forradio { + float: left; + margin: 5px 0px 0px 5px; } } + span.niceCheck-main { + margin-top: 3px; } } + div { + &.admin-search, &.admin-role { + float: left; } + &.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, Geneva, Helvetica, sans-serif; + padding-left: 5px; } } } -.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; -} +article input { + &.gray { + color: #cfcfcf; } + &.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; -} + float: left; + padding-top: 1px; + margin-left: 5px; + 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; -} + width: 17px; + height: 17px; + display: inline-block; + cursor: pointer; + background: image-url("radio.png"); + overflow: hidden; } + .radioChecked { - background-position: 0 -17px; -} + background-position: 0 -17px; } + .niceRadio input { - margin-left: -18px; -} + margin-left: -18px; } .sel80 { - width: 200px; - padding-bottom: 4px; - text-align: left; -} -.lineForm, -.lineForm3 { - margin-bottom: 0px; -} + width: 200px; + padding-bottom: 4px; + text-align: left; + &.aside { + width: 185px; } } + +.lineForm, .lineForm3 { + margin-bottom: 0px; } .niceCheck { - width: 17px; - height: 17px; - display: inline-block; - cursor: pointer; - background: image-url("checkbox.png"); -} -.niceCheck input { - display: none; -} + width: 17px; + height: 17px; + display: inline-block; + cursor: pointer; + background: image-url("checkbox.png"); + 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; -} + width: 18px; + height: 18px; + display: inline-block; + cursor: pointer; + background: image-url("checkbox-main.png"); + 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; -} +section { + &.left { + float: left; + text-align: left; + width: 230px; + margin-left: 250px; } + &.right { + float: right; + text-align: left; + width: 200px; + margin-right: 250px; } + .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; -} + width: 100%; + margin-top: 17px; + 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; } + &.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; } + &.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; + div { + &.body { + float: left; + text-align: left; } + &.code { + float: right; + margin: -7px 0px 0px 640px; + position: absolute; } } } + &.code div { + &.top { + width: 90px; + height: 22px; + border: 1px solid #9dbcd5; + background: #cbdeef; } + &.bottom { + width: 90px; + text-align: right; } + &.left { + float: left; + width: 13px; + height: 13px; + padding-left: 2px; + padding-top: 4px; } + &.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; } } + &.image { + float: left; } } } -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, .last-commit div.image { - float: left; -} +.last-commit div.image { + float: left; } article .date-block div.text, .last-commit div.text { - float: left; - padding-left: 10px; - font-size: 12px; -} + float: left; + padding-left: 10px; + font-size: 12px; } article .date-block div.text span.name, .last-commit span.name { - font-weight: 700; -} + font-weight: 700; } article .date-block div.text span.date, .last-commit span.date { - font-size: 11px; -} + font-size: 11px; } article .date-block div.text span.subject img, .last-commit span.subject img { - cursor: pointer; -} + cursor: pointer; } article .date-block div.fulltext, .last-commit div.fulltext { - font-size: 12px; - padding-top: 10px; - display: none; - /*width: 640px;*/ -} - + 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; -} + 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; + p { + margin: 0; + padding: 0; + color: #477CAE; } } -article div.year p{ - margin: 0; - padding: 0; - color: #477CAE; -} +div.pagination.tmargin30 { + margin-top: 30px; } /* Create issue */ .bordered.nopadding, .right.nopadding { - padding-top: 0px; -} + padding-top: 0px; } p.tmargin5 { - margin-top: 5px; -} + margin-top: 5px; } aside input { - height: 25px; - width: 170px; - border: 1px solid #dedede; - border-radius: 4px; - padding: 0px 5px; - font-family: Tahoma, Arial; - font-size: 12px; - margin-bottom: 5px; - margin-top: 5px; -} + height: 25px; + width: 170px; + border: 1px solid #dedede; + border-radius: 4px; + padding: 0px 5px; + font-family: Tahoma, Geneva, Helvetica, sans-serif; + font-size: 12px; + margin-bottom: 5px; + margin-top: 5px; + &.gray { + color: #cfcfcf; } + &.black { + color: #333333; } } -aside input.gray { - color: #cfcfcf; -} +div { + &.people { + width: 202px; + clear: both; + cursor: pointer; + margin-left: -15px; + padding: 5px; + padding-left: 10px; + padding-right: 0px; + div.avatar { + float: left; + padding-left: 5px; } } + &.avatar { + float: left; + padding-left: 5px; } + &.people div.name, &.name { + padding-top: 4px; + padding-left: 3px; + float: left; } } -aside input.black { - color: #333333; -} +aside div.select { + background: #dcecfa; } -div.people { - width: 202px; - clear: both; - cursor: pointer; - margin-left: -15px; - padding: 5px; - padding-left: 10px; - padding-right: 0px; -} +div { + &.people:hover { + background: #dcecfa; } + &.label { + &.selected { + width: 196px; + clear: both; + cursor: pointer; + margin-left: -15px; + padding: 5px; + padding-left: 15px; + &:hover { + background: #dcecfa; } } + width: 196px; + clear: both; + cursor: pointer; + margin-left: -15px; + padding: 5px; + padding-left: 15px; + &:hover { + background: #dcecfa; } } + &.labeltext.selected { + float: left; + margin-left: 2px; + font-size: 12px; + margin-top: 0px; + padding-left: 3px; + padding-right: 3px; + color: #FFF; + padding-top: 1px; + padding-bottom: 1px; + border-radius: 2px; } + &.label div.flag { + height: 11px; + width: 3px; + background: #39b54a; + float: left; + margin-top: 3px; + margin-right: 3px; + border-radius: 2px; } } -div.people div.avatar, div.avatar { - float: left; - padding-left: 5px; -} - -div.people div.name, div.name { - padding-top: 4px; - padding-left: 3px; - float: left; -} - -aside div.select, div.people:hover { - background: #dcecfa; -} - -div.label.selected, div.label { - width: 196px; - clear: both; - cursor: pointer; - margin-left: -15px; - padding: 5px; - padding-left: 15px; -} - -div.label.selected:hover, div.label:hover { - background: #dcecfa; -} - -div.labeltext.selected { - float: left; - margin-left: 2px; - font-size: 12px; - margin-top: 0px; - padding-left: 3px; - padding-right: 3px; - color: #FFF; - padding-top: 1px; - padding-bottom: 1px; - border-radius: 2px; -} - -div.label div.flag { - height: 11px; - width: 3px; - background: #39b54a; - float: left; - margin-top: 3px; - margin-right: 3px; - border-radius: 2px; -} - -.right span.small-text { - font-size: 11px; -} - -.right .bpadding10, .all .bpadding10 { - padding-bottom: 10px; -} +.right { + span.small-text { + font-size: 11px; } + .bpadding10 { + padding-bottom: 10px; } } +.all .bpadding10 { + padding-bottom: 10px; } /* Issue page */ -aside div.switcher, aside div.switcher-off { - height: 23px; - width: 194px; - background: image-url("switch-on.png"); - color: #FFF; - font-size: 12px; - cursor: pointer; -} - -aside div.switcher-off { - background: image-url("switch-off.png"); -} - -aside div.switcher div.swleft, aside div.switcher-off div.swleft { - float: left; - width: 96px; - text-align: center; - padding-top: 3px; -} - -aside div.switcher div.swright, aside div.switcher-off div.swright { - float: right; - width: 96px; - text-align: center; - padding-top: 3px; -} +aside div { + &.switcher { + height: 23px; + width: 194px; + background: image-url("switch-on.png"); + color: #FFF; + font-size: 12px; + cursor: pointer; } + &.switcher-off { + height: 23px; + width: 194px; + background: image-url("switch-on.png"); + color: #FFF; + font-size: 12px; + cursor: pointer; + background: image-url("switch-off.png"); } + &.switcher div.swleft, &.switcher-off div.swleft { + float: left; + width: 96px; + text-align: center; + padding-top: 3px; } + &.switcher div.swright, &.switcher-off div.swright { + float: right; + width: 96px; + text-align: center; + padding-top: 3px; } } p.non-view { - display: none; -} + display: none; } -div.non-view { - display: none; -} +div { + &.non-view { + display: none; } + &.view { + display: block; } + &.nopointer { + cursor: default; + &:hover { + background: none; } } } -div.view { - display: block; -} +a.button.tmargin10, input[type="submit"].tmargin10 { + margin-top: 10px; } -div.nopointer { - cursor: default; -} +h3 { + &.tmargin0 { + margin-top: 0px; } + &.bmargin10 { + margin-bottom: 10px; } } -div.nopointer:hover { - background: none; -} +.right div { + &.comment { + text-align: left; + border: 1px solid #b3cce0; + -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; + width: 631px; + background: #dcecfa; + div { + &.issue-left { + float: left; + font-size: 12px; + margin-top: 4px; } + &.issue-right { + float: right; } } + textarea { + height: 110px; + width: 618px; + border: 1px solid #dedede; + border-radius: 4px; + padding: 5px; + font-family: Tahoma, Geneva, Helvetica, sans-serif; + font-size: 12px; + color: #575756; + margin: 10px 0px; } } + &.comment-closed { + display: none; + div { + &.state { + float: left; + padding: 2px 0px 2px 0px; + background: #bd4d40; + color: #FFF; + font-size: 12px; + border: 1px solid #924f52; + -moz-border-radius-topleft: 2px; + -moz-border-radius-topright: 0px; + -moz-border-radius-bottomright: 0px; + -moz-border-radius-bottomleft: 2px; + -webkit-border-radius: 2px 0px 0px 2px; + border-radius: 2px 0px 0px 2px; + width: 80px; + text-align: center; } + &.text { + border: 1px solid #dce6ed; + -moz-border-radius-topleft: 2px; + -moz-border-radius-topright: 2px; + -moz-border-radius-bottomright: 2px; + -moz-border-radius-bottomleft: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + float: left; + width: 561px; } + &.avatar { + float: left; + padding: 5px; } + &.name { + float: left; + font-size: 12px; + padding-top: 9px; } } } } -a.button.tmargin10 { - margin-top: 10px; -} - -h3.tmargin0 { - margin-top: 0px; -} - -h3.bmargin10 { - margin-bottom: 10px; -} - -.right div.comment { - text-align: left; - border: 1px solid #b3cce0; - -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; - width: 631px; - background: #dcecfa; -} - -.right div.comment div.issue-left { - float: left; - font-size: 12px; - margin-top: 4px; -} - -.right div.comment div.issue-right { - float: right; -} - -.right div.comment textarea { - height: 110px; - width: 618px; - border: 1px solid #dedede; - border-radius: 4px; - padding: 5px; - font-family: Tahoma, Arial; - font-size: 12px; - color: #575756; - margin: 10px 0px; -} - -.right div.comment-closed { - display: none; -} - -.right div.comment-closed div.state { - float: left; - padding: 2px 0px 2px 0px; - background: #bd4d40; - color: #FFF; - font-size: 12px; - border: 1px solid #924f52; - -moz-border-radius-topleft: 2px; - -moz-border-radius-topright: 0px; - -moz-border-radius-bottomright: 0px; - -moz-border-radius-bottomleft: 2px; - -webkit-border-radius: 2px 0px 0px 2px; - border-radius: 2px 0px 0px 2px; - width: 80px; - text-align: center; -} - -.right div.comment-closed div.text { - border: 1px solid #dce6ed; - -moz-border-radius-topleft: 2px; - -moz-border-radius-topright: 2px; - -moz-border-radius-bottomright: 2px; - -moz-border-radius-bottomleft: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; - float: left; - width: 561px; -} - -.right div.comment-closed div.avatar { - float: left; - padding: 5px; -} - -.right div.comment-closed div.name { - float: left; - font-size: 12px; - padding-top: 9px; -} - -div.desription-top { - background: #dcecfa; - font-size: 12px; - color: #575756; - border: 1px solid #a9c6dd; - height: 38px; - width: 100%; - margin-bottom: 20px; -} - -div.desription-top div.img { - float: left; - padding-left: 10px; - margin-top: 14px; -} - -div.desription-top div.name { - float: left; - margin-top: 5px; - margin-left: 10px; - background: #FFF; - border: 1px solid #d1deeb; - height: 21px; - width: auto; - color: #575756; - padding-right: 5px; - padding-left: 5px; - padding-top: 5px; -} - -div.desription-top div.role { - float: left; - margin-top: 11px; - margin-left: 10px; - font-size: 11px; -} - -div.desription-top div.fork { - float: right; - margin-top: 5px; - margin-right: 10px; -} -div.desription-top div.fork p { - float: right; - margin-top: 5px; - margin-right: 2px; -} - - - -.all div.description { - text-align: left; -} - -.all div.description h3{ - color: #575756; - font-weight: 700; - font-size: 14px; - margin-bottom: 5px; - margin-top: 5px; -} - -.all div.description p{ - font-size: 12px; - padding: 0; - margin: 0; - color: #575756; -} - -.all div.last-commit { - 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: 10px 0px; -} +div { + &.desription-top { + background: #dcecfa; + font-size: 12px; + color: #575756; + border: 1px solid #a9c6dd; + height: 38px; + width: 100%; + margin-bottom: 20px; + div.img { + float: left; + padding-left: 10px; + margin-top: 14px; } + input.name { + float: left; + margin-top: 5px; + margin-left: 10px; + background: #FFF; + border: 1px solid #d1deeb; + height: 21px; + width: auto; + color: #575756; + font-size: 12px; + width: 215px; + padding: 2px 5px 3px; } + div.role { + float: left; + margin-top: 11px; + margin-left: 10px; + font-size: 11px; } } + &.fork { + float: right; + margin-top: 5px; + margin-right: 10px; + p { + float: right; + margin-top: 5px; + margin-right: 2px; } + &.rmargin0 { + margin-right: 0px; } } } +.all div { + &.description { + text-align: left; + h3 { + color: #575756; + font-weight: 700; + font-size: 14px; + margin-bottom: 5px; + margin-top: 5px; } + p { + font-size: 12px; + padding: 0; + margin: 0; + color: #575756; } } + &.last-commit { + 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: 10px 0px; } } /* Project main page */ -table.tablesorter.project .th1 { - width: 130px; - padding-left: 17px; -} - -table.tablesorter.project .th2 { - width: 110px; - padding-left: 17px; -} - -table.tablesorter.project .th3 { - width: 450px; -} - -table.tablesorter.project .th4 { - padding-left: 17px; -} - -table.tablesorter.project div.name { - float: left; - margin-top: 0px; -} - -table.tablesorter.project div.pic { - float: left; - padding-right: 5px; -} +table.tablesorter.project { + .th1 { + width: 130px; + /*padding-left: 17px;*/ } + .th2 { + width: 110px; + /*padding-left: 17px;*/ } + .th3 { + width: 450px; } + .th4 { + /*padding-left: 17px;*/ } + div { + &.name { + float: left; + margin-top: 0px; } + &.pic { + float: left; + padding-right: 5px; } } } a.files-see { - color: #565657; - text-decoration: underline; -} + color: #565657; + text-decoration: underline; } -div.file { - border: 1px solid #dddddd; - margin-top: 10px; -} +div { + &.file { + border: 1px solid #dddddd; + margin-top: 10px; + div.top { + height: 28px; + background: #ededed; + -webkit-box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); + -moz-box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); + box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); + position: relative; + z-index: 99; + div { + &.l { + float: left; + margin: 6px 0px 0px 10px; } + &.r { + float: right; + margin: 6px 10px 0px 0px; } } } } + &.files div { + &.l { + float: left; + margin-bottom: 5px; } + &.r { + float: right; + display: none; } } + &.file { + margin-bottom: 10px; } } -div.file div.top { - height: 28px; - background: #ededed; - -webkit-box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); - -moz-box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); - box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); - position: relative; - z-index: 99; -} +textarea.commit-message { + height: 60px; + width: 450px; + border: 1px solid #dedede; + border-radius: 4px; + padding: 5px; + font-family: Tahoma, Geneva, Helvetica, sans-serif; + font-size: 12px; + margin-top: 5px; } -div.file div.top div.l { - float: left; - margin: 6px 0px 0px 10px; -} +div { + &.files div.l p { + padding: 0; + margin: 5px 0px 0px 0px; } + &.gutter-new { + float: left; + border: 0 !important; + padding: 10px 5px 10px 0px; + font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; + background: #EDEDED; + width: 40px; + text-align: right; } } -div.file div.top div.r { - float: right; - margin: 6px 10px 0px 0px; -} - -div.files div.l { - float: left; - margin-bottom: 5px; -} - -div.files div.r { - float: right; - display: none; -} - -div.files div.l p{ - padding: 0; - margin: 5px 0px 0px 0px; -} +/* Code */ /* Tracker */ -table td.width18 { - width: 18px; -} - -table td.width135 { - width: 135px; -} - -table td.width145 { - width: 145px; -} - -table td.width30 { - width: 30px; -} - -table td.width30.right { - text-align: right; -} +table td { + &.width18 { + width: 18px; } + &.width135 { + width: 135px; } + &.width145 { + width: 145px; } + &.width30 { + width: 30px; + &.right { + text-align: right; } } } div.bordered.bpadding20 { - padding-bottom: 20px; -} + padding-bottom: 20px; } -table.tracker-lables td { - padding: 1px; -} - -table.tracker-lables div.label { - width: auto; - clear: both; - cursor: default; - margin-left: -15px; - padding: 5px; - padding-left: 15px; - text-align: left; -} - -table.tracker-lables div.label:hover { - background: none; -} +table.tracker-lables { + td { + padding: 1px; } + div.label { + width: auto; + clear: both; + cursor: default; + margin-left: -15px; + padding: 5px; + padding-left: 15px; + text-align: left; + &:hover { + background: none; } } } div.blue-switcher { - height: 19px; - width: 258px; - border: 1px solid #a0a0a1; - border-radius: 3px; - background-color: #575756; - color: #FFF; - -webkit-box-shadow: inset 0px 2px 5px 0px rgba(0, 0, 0, 0.3); - -moz-box-shadow: inset 0px 2px 5px 0px rgba(0, 0, 0, 0.3); - box-shadow: inset 0px 2px 5px 0px rgba(0, 0, 0, 0.3); - float: right; -} + height: 19px; + width: 258px; + border: 1px solid #a0a0a1; + border-radius: 3px; + background-color: #575756; + color: #FFF; + -webkit-box-shadow: inset 0px 2px 5px 0px rgba(0, 0, 0, 0.3); + -moz-box-shadow: inset 0px 2px 5px 0px rgba(0, 0, 0, 0.3); + box-shadow: inset 0px 2px 5px 0px rgba(0, 0, 0, 0.3); + float: right; + div { + &.open { + float: left; + padding: 1px 0px 2px 0px; + width: 128px; + text-align: center; + cursor: pointer; + position: relative; + z-index: 3; } + &.selected { + background-image: -webkit-gradient(linear, left top, left bottom, from(#619dd2), to(#125687)); + background-image: -webkit-linear-gradient(top, #619dd2, #125687); + background-image: -moz-linear-gradient(top, #619dd2, #125687); + background-image: -ms-linear-gradient(top, #619dd2, #125687); + background-image: -o-linear-gradient(top, #619dd2, #125687); + background-image: linear-gradient(top, #619dd2, #125687); + filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#619dd2', EndColorStr='#125687'); + border-radius: 2px; + height: 18px; + width: 128px; + -webkit-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.5); + box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.5); + position: absolute; + margin: 0px; + z-index: 2; } + &.closed { + float: right; + padding: 1px 0px 0px 0px; + width: 128px; + text-align: center; + cursor: pointer; + position: relative; + z-index: 3; } } } -div.blue-switcher div.open { - float: left; - padding: 1px 0px 2px 0px; - width: 128px; - text-align: center; - cursor: pointer; - position: relative; - z-index: 3; -} +table.tablesorter.tracker { + th.th1 { + width: 50px; } + td { + &.td0 { + width: 10px; + padding-right: 0px; } + &.td3 { + width: 120px; + padding-top: 10px; + div { + &.code { + height: 19px; + width: 15px; + background: #FFF; + color: #009fe3; + border: 1px solid #83d1f2; + font-size: 16px; + padding: 1px 0px 0px 5px; + float: left; + margin-right: 5px; + cursor: pointer; } + &.avatar { + float: left; + margin-right: 5px; + cursor: pointer; } + &.answers { + height: 20px; + background: #FFF; + color: #009fe3; + border: 1px solid #83d1f2; + font-size: 16px; + float: left; + cursor: pointer; + div { + &.pic { + float: left; + margin: 2px; } + &.count { + float: left; + margin: 0px 5px 0px 2px; } } } } } } + div.smalltext { + font-size: 11px; + color: #b0b0b1; + float: left; + margin-top: 3px; } } -div.blue-switcher div.selected { - background-image: -webkit-gradient(linear, left top, left bottom, from(#619dd2), to(#125687)); - background-image: -webkit-linear-gradient(top, #619dd2, #125687); - background-image: -moz-linear-gradient(top, #619dd2, #125687); - background-image: -ms-linear-gradient(top, #619dd2, #125687); - background-image: -o-linear-gradient(top, #619dd2, #125687); - background-image: linear-gradient(top, #619dd2, #125687); - filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#619dd2', EndColorStr='#125687'); - border-radius: 2px; - height: 18px; - width: 128px; - -webkit-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.5); - -moz-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.5); - box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.5); - position: absolute; - margin: 0px; - z-index: 2; - -} +div { + &.label { + &.selected.tracker { + width: auto; + clear: both; + cursor: default; + margin-left: 0px; + padding: 5px; + float: right; + margin-top: -6px; + &:hover { + background: none; } } + &.edit { + width: 196px; + clear: both; + cursor: default; + margin-left: -15px; + padding: 5px; + padding-left: 15px; + &:hover { + background: none; } } } + &.labeltext { + &.edit { + float: left; + margin-left: 2px; + font-size: 12px; + margin-top: 0px; + margin-bottom: 5px; + padding-left: 3px; + padding-right: 3px; + color: #FFF; + padding-top: 1px; + padding-bottom: 1px; + border-radius: 2px; + width: 175px; + cursor: default; + div { + &.text { + float: left; } + &.delete { + float: right; + cursor: pointer; + margin-top: 1px; } } } + a { + text-decoration: none; + color: #565657; } + &.edit a { + text-decoration: none; + color: #FFF; } } } -div.blue-switcher div.closed { - float: right; - padding: 1px 0px 0px 0px; - width: 128px; - text-align: center; - cursor: pointer; - position: relative; - z-index: 3; -} - -table.tablesorter.tracker th.th1{ - width: 50px; -} - -table.tablesorter.tracker td.td0{ - width: 10px; - padding-right: 0px; -} - -table.tablesorter.tracker td.td3{ - width: 120px; - padding-top: 10px; -} - -table.tablesorter.tracker td.td3 div.code { - height: 19px; - width: 15px; - background: #FFF; - color: #009fe3; - border: 1px solid #83d1f2; - font-size: 16px; - padding: 1px 0px 0px 5px; - float: left; - margin-right: 5px; - cursor: pointer; -} - -table.tablesorter.tracker td.td3 div.avatar { - float: left; - margin-right: 5px; - cursor: pointer; -} - -table.tablesorter.tracker td.td3 div.answers { - height: 20px; - background: #FFF; - color: #009fe3; - border: 1px solid #83d1f2; - font-size: 16px; - float: left; - cursor: pointer; -} - -table.tablesorter.tracker td.td3 div.answers div.pic { - float: left; - margin: 2px; -} - -table.tablesorter.tracker td.td3 div.answers div.count { - float: left; - margin: 0px 5px 0px 2px; -} - -table.tablesorter.tracker div.smalltext { - font-size: 11px; - color: #b0b0b1; - float: left; - margin-top: 3px; -} - - -div.label.selected.tracker { - width: auto; - clear: both; - cursor: default; - margin-left: 0px; - padding: 5px; - float: right; - margin-top: -6px; -} - -div.label.selected.tracker:hover { - background: none; -} - - -div.label.edit { - width: 196px; - clear: both; - cursor: default; - margin-left: -15px; - padding: 5px; - padding-left: 15px; -} - -div.label.edit:hover{ - background: none; -} - -div.labeltext.edit { - float: left; - margin-left: 2px; - font-size: 12px; - margin-top: 0px; - margin-bottom: 5px; - padding-left: 3px; - padding-right: 3px; - color: #FFF; - padding-top: 1px; - padding-bottom: 1px; - border-radius: 2px; - width: 175px; - cursor: default; -} - -div.labeltext.edit div.text { - float: left; -} - -div.labeltext.edit div.delete { - float: right; - cursor: pointer; - margin-top: 1px; -} - -aside div.colors { - margin: 10px 0px; -} - -aside div.colors div.color { - float: left; - width: 22px; - height: 22px; - margin-right: 5px; - border-radius: 4px; - -webkit-box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.8); - -moz-box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.8); - box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.8); - cursor: pointer; -} - -aside div.colors div.choose { - height: 14px; - width: 14px; - padding: 4px; -} - -aside div.colors div.choose.selected, aside div.colors div.choose:hover { - background: image-url("choose.png") no-repeat 50% 50%; - height: 14px; - width: 14px; - padding: 4px; -} - -aside div.lefter { - float: left; -} - -aside div.righter { - float: right; - margin-right: 15px; -} +aside div { + &.colors { + margin: 10px 0px; + div { + &.color { + float: left; + width: 22px; + height: 22px; + margin-right: 5px; + border-radius: 4px; + -webkit-box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.8); + -moz-box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.8); + box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.8); + cursor: pointer; } + &.choose { + height: 14px; + width: 14px; + padding: 4px; + &.selected, &:hover { + background: image-url("choose.png") no-repeat 50% 50%; + height: 14px; + width: 14px; + padding: 4px; } } } } + &.lefter { + float: left; } + &.righter { + float: right; + margin-right: 15px; } } tr.label-active { - background: #DDD; - border-radius: 3px; -} + background: #DDD; + border-radius: 3px; } /* Wiki */ span.wiki-gray { - color: #b0b0b1; -} + color: #b0b0b1; } .right table.wiki { - border: 1px solid #e2e2e2; - border-bottom: none; - margin-top: 10px; -} - -.right table.wiki td { - border-bottom: 1px solid #e2e2e2; - padding: 8px; -} - -.right table.wiki tr.history td.td1{ - width: 5px; -} - -.right table.wiki tr.history td.td2{ - width: 180px; -} + border: 1px solid #e2e2e2; + border-bottom: none; + margin-top: 10px; + td { + border-bottom: 1px solid #e2e2e2; + padding: 8px; } + tr.history td { + &.td1 { + width: 5px; } + &.td2 { + width: 180px; } } } a.button.rigth { - float: right; -} + float: right; } div.r { - float: right; - margin-left: 10px; -} + float: right; + margin-left: 10px; } h3.wiki { - color: #477cae; - font-size: 16px; -} + color: #477cae; + font-size: 16px; } a.button.width100 { - width: 100px; -} + width: 100px; } .div-tracker-labels { - margin: 2px 13px 2px 0px; - cursor: pointer; - border-radius: 4px; -} + margin: 2px 13px 2px 0px; + cursor: pointer; + border-radius: 4px; } .div-label-left { - float: left; - width: 150px; -} + float: left; + width: 150px; } .div-label-right { - float: right; - width: 30px; - text-align: right; - padding-top: 4px; - padding-right: 3px; -} + float: right; + width: 30px; + text-align: right; + padding-top: 4px; + padding-right: 3px; } div.div-label-left div.label { - width: auto; - clear: both; - margin-left: -15px; - padding: 5px; - padding-left: 15px; - text-align: left; -} + width: auto; + clear: both; + margin-left: -15px; + padding: 5px; + padding-left: 15px; + text-align: left; + &:hover { + background: none; } } -div.div-label-left div.label:hover { - background: none; -} +/* Monitoring */ + +aside div.table { + margin-top: 5px; } + +h3.small { + font-size: 12px; + margin: 0px; + padding: 3px 0px; } + +table.tablesorter th.lpadding16 { + padding-left: 16px; } + +div.right.slim { + padding: 5px 14px 40px; + width: 695px; } + +img.delete-row { + cursor: pointer; } + +/* Create group */ + +div { + &.right-error { + float: left; + width: 369px; + height: 59px; + background: image-url("error-groups.png"); + margin: 0px 0px 5px -3px; + text-align: center; + p { + margin: 0; + padding: 27px 0px 0px 0px; } } + &.rightlist.nomargin { + margin: 0; } } + +article div { + &.rightlist input.error { + border: 1px solid #bd4d40; + -webkit-box-shadow: 0px 0px 2px 0px rgba(189, 77, 64, 1); + -moz-box-shadow: 0px 0px 2px 0px rgba(189, 77, 64, 1); + box-shadow: 0px 0px 2px 0px rgba(189, 77, 64, 1); } + &.groups-profile { + float: left; + a { + margin: 0px 0px 0px 5px; } + img { + margin: 2px 0px 0px 0px; } } } + +/* Group pages */ + +table.tablesorter { + &.group-list th.th2 { + width: 540px; } + &.create-platform th.th1 { + /*padding-left: 17px;*/ + width: 120px; } } + +/* Platform */ + +div.right div.left { + float: left; + margin-right: 5px; } + +table.tablesorter { + &.platform-products { + th.th1 { + /*padding-left: 17px;*/ + width: 560px; } + td.td2 { + text-align: center; } } + &.platform-repos { + th { + &.th1 { + /*padding-left: 17px;*/ + width: 480px; } + &.th2 { + /*padding-left: 17px;*/ + width: 80px; } } + td.td3 { + text-align: center; } } } + +div.new-owner div { + &.field { + float: left; + margin-right: 10px; + input { + width: 230px; } } + &.search { + float: left; } } + +.tpadding10 { + padding-top: 10px; } + +article div.all div.hr { + border-bottom: 1px solid #dedede; + width: 565px; + padding-top: 30px; + margin-bottom: 30px; } + +table.tablesorter.platform-product-main th { + &.th1 { + /*padding-left: 17px;*/ + width: 60px; } + &.th2 { + /*padding-left: 17px;*/ + width: 400px; } + &.th3 { + padding-left: 0px; } + &.th4 { + /*padding-left: 17px;*/ + width: 150px; } } + +div.right.rpadding0 { + padding-right: 0px; } + +article div.loadFile div { + &.btn { + float: left; } + &.name { + float: left; + margin-left: 20px; + padding-top: 4px; } } + +/* Profile */ + +.bpadding10 { + padding-bottom: 10px; } + +article div.rightlist div.load { + float: left; + margin-left: 40px; } + +.notify { + border: 1px solid #c86b60; + background: #f4e1df; + border-radius: 4px; + width: 100%; + margin-top: 20px; + p { + padding: 5px 10px; } } + +/* Pagination */ + +div.pagination { + em { + font-style: normal; + border: 1px solid #dddddd; + border-radius: 1px; + background: #ededed; + padding: 3px 7px; } + span, a { + border: 1px solid #dddddd; + border-radius: 1px; + background: #ededed; + padding: 3px 7px; } + em.current { + background: #d5e7f9; + border: 1px solid #c1daed; } + a { + color: #4c90d0; } } + +/*404*/ + +article div.all.error404 { + background: image-url("404.png") no-repeat 59% 0; + height: 500px; + text-align: center; + h1 { + margin: 0; + padding: 0; + margin-top: 165px; + font-size: 48px; + font-weight: normal; + span { + color: #4496d0; } } + h2 { + margin: 0; + padding: 0; + margin-top: 5px; + font-size: 18px; + font-weight: normal; } + p { + margin: 0 auto; + padding: 0; + text-align: center; + font-size: 14px; + &.pages { + margin-top: 72px; + width: 280px; } + &.search { + margin-top: 80px; + width: 230px; } } } \ No newline at end of file diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 9c264d863..ed058c203 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -1,12 +1,12 @@ # -*- encoding : utf-8 -*- class IssuesController < ApplicationController + NON_RESTFUL_ACTION = [:create_label, :update_label, :destroy_label, :search_collaborators] before_filter :authenticate_user! - load_and_authorize_resource :project, :except => [:create_lable, :delete_label] + load_and_authorize_resource :project, :except => NON_RESTFUL_ACTION load_and_authorize_resource :issue, :through => :project, :find_by => :serial_id, :only => [:show, :edit, :update, :destroy] - before_filter :load_and_authorize_label, :only => [:create_label, :update_label, :destroy_label] + before_filter :load_and_authorize_label, :only => NON_RESTFUL_ACTION - autocomplete :user, :uname layout 'application' def index(status = 200) @@ -18,11 +18,8 @@ class IssuesController < ApplicationController @issues = @issues.where(:user_id => current_user.id) if @is_assigned_to_me @issues = @issues.joins(:labels).where(:labels => {:name => @labels}) unless @labels == [] - if params[:search] - @is_assigned_to_me = false - @status = 'open' - @labels = [] - @issues = @project.issues.where('issues.title ILIKE ?', "%#{params[:search].mb_chars.downcase}%") + if params[:search_issue] + @issues = @issues.where('issues.title ILIKE ?', "%#{params[:search_issue].mb_chars.downcase}%") end @issues = @issues.includes(:creator, :user).order('serial_id desc').uniq.paginate :per_page => 10, :page => params[:page] if status == 200 @@ -41,6 +38,7 @@ class IssuesController < ApplicationController @user_uname = params[:user_uname] @issue = Issue.new(params[:issue]) + @issue.creator_id = current_user.id @issue.user_id = @user_id @issue.project_id = @project.id @@ -95,6 +93,19 @@ class IssuesController < ApplicationController index(status) end + def search_collaborators + search = "%#{params[:search_user]}%" + users = User.joins(:groups => :projects).where(:projects => {:id => @project.id}).where("users.uname ILIKE ?", search) + users2 = @project.collaborators.where("users.uname ILIKE ?", search) + @users = (users + users2).uniq.sort {|x,y| x.uname <=> y.uname}.first(10) + render 'issues/_search_collaborators', :layout => false + end + + def search_labels + @labels = @project.labels.where("labels.name ILIKE ?", "%#{params[:search_labels]}%").order('labels.name').limit(10) + render 'issues/_search_labels', :layout => false + end + private def load_and_authorize_label diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index 07236a9d0..de76623a6 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -1,3 +1,9 @@ # -*- encoding : utf-8 -*- module IssuesHelper + def tracker_search_field(name, txt) + str = "" + str.html_safe + end end diff --git a/app/models/issue.rb b/app/models/issue.rb index 90f01e1b1..3ce981df0 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -22,6 +22,9 @@ class Issue < ActiveRecord::Base after_update :deliver_issue_assign_notification after_update :subscribe_issue_assigned_user + attr_accessible :labelings_attributes, :title, :body, :project, :project_id + accepts_nested_attributes_for :labelings, :allow_destroy => true + def assign_uname user.uname if user end diff --git a/app/views/issues/_create_sidebar.html.haml b/app/views/issues/_create_sidebar.html.haml new file mode 100644 index 000000000..bf01f9294 --- /dev/null +++ b/app/views/issues/_create_sidebar.html.haml @@ -0,0 +1,14 @@ +-content_for :sidebar do + .bordered.nopadding + %h3=t('layout.issues.executor') + =form_tag search_collaborators_project_issues_path(@project), :id => 'search_user', :method => :get do + =tracker_search_field(:search_user, t('layout.issues.search_user')) + #create_issue_users_list + =render 'issues/search_collaborators' + + .block + %h3=t('layout.issues.labels') + =form_tag search_labels_project_issues_path(@project), :id => 'search_labels', :method => :get do + =tracker_search_field(:search_labels, t('layout.issues.search_labels')) + #create_issue_labels_list + =render 'issues/search_labels' \ No newline at end of file diff --git a/app/views/issues/_form.html.haml b/app/views/issues/_form.html.haml index 985ff7913..e861deab3 100644 --- a/app/views/issues/_form.html.haml +++ b/app/views/issues/_form.html.haml @@ -1,26 +1,19 @@ -= javascript_include_tag "autocomplete-rails.js" - -.group - = f.label :title, :class => :label - = f.text_field :title, :class => 'text_field' - -.group - = f.label :body, :class => :label - = f.text_area :body, :class => 'text_field', :cols => 80 - -- unless @issue.new_record? - .group - = f.label :status, :class => :label - = f.select :status, Issue::STATUSES, :class => 'text_field' - -.group - = label_tag "", t("activerecord.attributes.issue.user_id"), :class => :label - = autocomplete_field_tag 'user_id', @user_uname, autocomplete_user_uname_platforms_path, :id_element => '#user_id_field' - = hidden_field_tag 'user_id', @user_id, :id => 'user_id_field' - -.group.navform.wat-cf - %button.button{:type => "submit"} - = image_tag("web-app-theme/icons/tick.png", :alt => t("layout.save")) - = t("layout.save") - %span.text_button_padding= t("layout.or") - = link_to t("layout.cancel"), project_path(@project), :class => "text_button_padding link_button" +.leftlist= t('activerecord.attributes.issue.title') + ':' +.rightlist= f.text_field :title +.leftlist= t('activerecord.attributes.issue.body') + ':' +.rightlist= f.text_area :body +.both +.leftlist= t('activerecord.attributes.issue.user') + ':' +.rightlist + %span#people-span.small-text= t('layout.issues.choose_user_on_left') + #issue_executor +.both +.leftlist= t('layout.issues.labels') +.rightlist + %span#flag-span.small-text= t('layout.issues.choose_labels_on_left') + #issue_labels +.both +.leftlist +.rightlist + %input{:type => "submit", :value => t(@issue.new_record? ? 'layout.create' : 'layout.update')} +.both diff --git a/app/views/issues/_sidebar.html.haml b/app/views/issues/_index_sidebar.html.haml similarity index 79% rename from app/views/issues/_sidebar.html.haml rename to app/views/issues/_index_sidebar.html.haml index 1d8f7ade5..8f0401ccc 100644 --- a/app/views/issues/_sidebar.html.haml +++ b/app/views/issues/_index_sidebar.html.haml @@ -13,7 +13,7 @@ %td.width30.right=@project.issues.where(:user_id => current_user).count =form_tag project_issues_path(@project), :id => 'search_issue', :method => :get do .bordered.bpadding20 - =text_field_tag :search, t('layout.issues.search'), :class => 'gray', :onClick => "if(this.value=='#{t('layout.issues.search')}'){this.value='';this.className='black';}", :onblur => "if(this.value==''){this.value='#{t('layout.issues.search')}';this.className='gray';}" + =tracker_search_field(:search_issue, t('layout.issues.search')) .bordered.nopadding %h3.bmargin10=t('layout.issues.new') = link_to t("layout.add"), new_project_issue_path(@project), :class => 'button' if can? :new, Issue.new(:project_id => @project.id) diff --git a/app/views/issues/_issue.html.haml b/app/views/issues/_issue.html.haml index 9b23d23f7..fe9765050 100644 --- a/app/views/issues/_issue.html.haml +++ b/app/views/issues/_issue.html.haml @@ -13,7 +13,8 @@ .labeltext.selected{:style => "background: ##{label.color};"}=label.name .both %td.td3 - .code=link_to '#', [@project, issue] + %a{:href => project_issue_path(@project.id, issue.serial_id)} + .code='#' .avatar =link_to image_tag(issue.user.avatar(22), :alt => 'avatar'), user_path(issue.user) if issue.user %a{:href => "#{project_issue_path @project, issue}#block-list"} diff --git a/app/views/issues/_labels.html.haml b/app/views/issues/_labels.html.haml index 2d29211c8..93883a370 100644 --- a/app/views/issues/_labels.html.haml +++ b/app/views/issues/_labels.html.haml @@ -36,7 +36,7 @@ .both =form_tag create_label_project_issues_path(@project), :id => 'new_label', :method => :post do - %input.gray{:name => 'name', :onClick => "if(this.value=='#{t('layout.issues.new_label')}'){this.value='';this.className='black';}", :onblur => "if(this.value==''){this.value='#{t('layout.issues.new_label')}';this.className='gray';}", :type => "text", :value => "#{t('layout.issues.new_label')}"} + =tracker_search_field(:name, t('layout.issues.new_label')) =render :partial => 'issues/colors_chooser' .lefter %a{:href => "#custom_color", :id => 'custom_color', :class => 'custom_color'}=t('layout.issues.label_custom_color') diff --git a/app/views/issues/_search_collaborators.html.haml b/app/views/issues/_search_collaborators.html.haml new file mode 100644 index 000000000..e5b25dc30 --- /dev/null +++ b/app/views/issues/_search_collaborators.html.haml @@ -0,0 +1,6 @@ +- (@users || []).each_with_index do |user, index| + .people.select{:id => "user-#{index}", :class => 'add_executor'} + .avatar=image_tag(user.avatar(25), :alt => 'avatar') + .name="#{user.uname} (#{user.name})" + =hidden_field_tag "user-#{index}", user.id, :name => 'user_id' + .both diff --git a/app/views/issues/_search_labels.html.haml b/app/views/issues/_search_labels.html.haml new file mode 100644 index 000000000..c535499d6 --- /dev/null +++ b/app/views/issues/_search_labels.html.haml @@ -0,0 +1,5 @@ +- (@labels || []).each_with_index do |label, index| + .add_label.label.selected{:id => "flag#{index}"} + .labeltext.selected{:style => "background: ##{label.color};"}=label.name + =hidden_field_tag "label-#{index}", label.id, :name => "issue[labelings_attributes][#{index}][label_id]" + .both diff --git a/app/views/issues/index.html.haml b/app/views/issues/index.html.haml index f59a83b42..461fde28a 100644 --- a/app/views/issues/index.html.haml +++ b/app/views/issues/index.html.haml @@ -1,5 +1,5 @@ -render :partial => 'projects/submenu' --render :partial => 'issues/sidebar' +-render :partial => 'issues/index_sidebar' #closed-switcher.blue-switcher =hidden_field_tag :issues_status, @status, :id => 'issues_status' @@ -17,4 +17,5 @@ %th.th1{:colspan => "2"}=t('layout.issues.number') %th{:colspan => "2"}=t('layout.issues.description') %tbody - = render :partial => 'issues/issue', :collection => @issues \ No newline at end of file + = render :partial => 'issues/issue', :collection => @issues + = will_paginate @issues \ No newline at end of file diff --git a/app/views/issues/new.html.haml b/app/views/issues/new.html.haml index cb94f0ac4..befc4fb0f 100644 --- a/app/views/issues/new.html.haml +++ b/app/views/issues/new.html.haml @@ -1,11 +1,8 @@ -.block - .secondary-navigation - %ul.wat-cf - %li.first= link_to "#{t("layout.issues.list")}", project_issues_path(@project) - %li.active= link_to "#{t("layout.issues.new")}", new_project_issue_path(@project) - .content - %h2.title - = t("layout.issues.new_header") - .inner - = form_for :issue, :url => project_issues_path(@project), :html => { :class => :form } do |f| - = render :partial => "form", :locals => {:f => f} +-render :partial => 'projects/submenu' +-render :partial => 'issues/create_sidebar' +-content_for :right_nopadding do + dummy + +%h3.bpadding10= t("layout.issues.create_header") += form_for :issue, :url => project_issues_path(@project), :html => { :class => 'form issue' } do |f| + = render :partial => "form", :locals => {:f => f} diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 7018b8ac0..0a7b3d32e 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -41,7 +41,7 @@ %article - if content_for?(:sidebar) %aside= yield :sidebar - .right= yield + .right{:class => content_for?(:right_nopadding) ? ' nopadding' : ''}= yield - else .all= yield .both diff --git a/config/application.rb b/config/application.rb index 99fbb1300..7729c9f09 100644 --- a/config/application.rb +++ b/config/application.rb @@ -37,7 +37,7 @@ module Rosa # config.time_zone = 'Central Time (US & Canada)' # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. - config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**/*.yml').to_s] + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] config.i18n.default_locale = :en config.action_view.javascript_expansions[:defaults] = %w() diff --git a/config/locales/issues/issues.en.yml b/config/locales/issues.en.yml similarity index 78% rename from config/locales/issues/issues.en.yml rename to config/locales/issues.en.yml index 73003cd2f..37fb8e5fe 100644 --- a/config/locales/issues/issues.en.yml +++ b/config/locales/issues.en.yml @@ -2,8 +2,8 @@ en: activerecord: attributes: issue: - title: Title - body: Content + title: Name + body: Description user: Assigned user_id: Assigned project: Project @@ -22,7 +22,7 @@ en: list_header: List confirm_delete: Are you sure to delete this task? edit_header: Task edit - new_header: New task + create_header: Create task statuses: open: Opened closed: Closed @@ -39,6 +39,11 @@ en: update_label: Update label label_custom_color: Custom color label_manage: Manage + executor: Executor + search_user: Search user... + search_labels: Search labels... + choose_user_on_left: Choose executor on the left + choose_labels_on_left: Choose labels on the left flash: issue: diff --git a/config/locales/issues/issues.ru.yml b/config/locales/issues.ru.yml similarity index 78% rename from config/locales/issues/issues.ru.yml rename to config/locales/issues.ru.yml index 912509ddb..46c21d53c 100644 --- a/config/locales/issues/issues.ru.yml +++ b/config/locales/issues.ru.yml @@ -2,8 +2,8 @@ ru: activerecord: attributes: issue: - title: Заголовок - body: Содержание + title: Название + body: Описание user: Назначена user_id: Назначена project: Проект @@ -22,7 +22,7 @@ ru: list_header: Список confirm_delete: Вы уверены, что хотите удалить эту задачу? edit_header: Редактирование задачи - new_header: Новая задача + create_header: Создать задачу statuses: open: Открытые closed: Закрытые @@ -32,13 +32,18 @@ ru: unsubscribe_btn: Отписаться number: Номер description: Описание - by: + by: ' ' labels: Метки invalid_labels: Неверный hex код new_label: Название новой метки update_label: Обновить метку label_custom_color: Свой цвет label_manage: Управление + executor: Исполнитель + search_user: Найти пользователя... + search_labels: Найти метки... + choose_user_on_left: выберите исполнителя слева + choose_labels_on_left: выберите метки слева flash: issue: diff --git a/config/routes.rb b/config/routes.rb index 6461ddb6c..22af526cc 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -119,7 +119,11 @@ Rosa::Application.routes.draw do resources :issues do resources :comments, :only => [:edit, :create, :update, :destroy] resources :subscribes, :only => [:create, :destroy] - post :create_label, :on => :collection + collection do + post :create_label + get :search_collaborators + get :search_labels + end end post "labels/:label_id" => "issues#destroy_label", :as => :issues_delete_label post "labels/:label_id/update" => "issues#update_label", :as => :issues_update_label From 66a08662c2eae201a7efafa6c4a17c1b691a4a64 Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Tue, 28 Feb 2012 15:23:27 +0600 Subject: [PATCH 10/18] [refs #194] new styles; some changes --- app/assets/javascripts/tracker.js | 31 +++-- app/assets/stylesheets/application.scss | 2 + app/assets/stylesheets/blue/asc.png | Bin 0 -> 2870 bytes app/assets/stylesheets/blue/bg.png | Bin 0 -> 2920 bytes app/assets/stylesheets/blue/desc.png | Bin 0 -> 2874 bytes app/assets/stylesheets/blue/style.css | 118 ++++++++++++++++++ app/controllers/issues_controller.rb | 7 +- .../issues/_search_collaborators.html.haml | 2 +- app/views/issues/_search_labels.html.haml | 5 +- 9 files changed, 148 insertions(+), 17 deletions(-) create mode 100644 app/assets/stylesheets/blue/asc.png create mode 100644 app/assets/stylesheets/blue/bg.png create mode 100644 app/assets/stylesheets/blue/desc.png create mode 100644 app/assets/stylesheets/blue/style.css diff --git a/app/assets/javascripts/tracker.js b/app/assets/javascripts/tracker.js index 8726fe5ac..36c47f534 100644 --- a/app/assets/javascripts/tracker.js +++ b/app/assets/javascripts/tracker.js @@ -132,8 +132,8 @@ $(document).ready(function() { function remExecutor(form) { var el = form.find('.people.selected.remove_executor'); var id = el.attr('id'); - $('#'+id+'.add_executor.people.selected').fadeIn('slow'); - el.fadeOut('slow').remove(); + $('#'+id+'.add_executor.people.selected').removeClass('select'); + el.remove(); } $('.add_executor.people.selected').live('click', function() { @@ -141,7 +141,7 @@ $(document).ready(function() { form.find('#people-span').fadeOut(0); remExecutor(form); form.find('#issue_executor').html($(this).clone().removeClass('add_executor').addClass('remove_executor')); - $(this).fadeOut(0); + $(this).addClass('select'); }); $('.remove_executor.people.selected').live('click', function() { @@ -151,16 +151,23 @@ $(document).ready(function() { }); function remLabel(form, id) { - var el = form.find('.label.selected.remove_label'+'#'+id); - $('#'+id+'.add_label.label.selected').fadeIn('slow'); + var el = form.find('.label.remove_label'+'#'+id); + var label = $('#'+id+'.remove_label.label.selected'); + label.find('.flag').fadeIn(0); + label.find('.labeltext.selected').removeClass('selected').attr('style', ''); + label.fadeIn('slow'); el.fadeOut('slow').remove(); } - $('.add_label.label.selected').live('click', function() { + $('.add_label.label').live('click', function() { + $(this).addClass('selected').removeClass('add_label').addClass('remove_label'); + $(this).find('.labeltext').addClass('selected'); + var style = $(this).find('.flag').attr('style'); + $(this).find('.flag').fadeOut(0); + $(this).find('.labeltext.selected').attr('style', style); var form = $('.form.issue'); form.find('#flag-span').fadeOut(0); - form.find('#issue_labels').append($(this).clone().removeClass('add_label').addClass('remove_label')); - $(this).fadeOut(0); + form.find('#issue_labels').append($(this).clone()); }); $('.remove_label.label.selected').live('click', function() { @@ -168,7 +175,13 @@ $(document).ready(function() { if(form.find('.remove_label.label.selected').length == 1) { form.find('#flag-span').fadeIn(0); } - remLabel(form, $(this).attr('id')); + var str = '.label.remove_label'+'#'+$(this).attr('id'); + form.find(str).remove(); + var label = $(str); + label.removeClass('selected').addClass('add_label').removeClass('remove_label'); + label.find('.labeltext.selected').attr('style', '').removeClass('selected'); + label.find('.flag').fadeIn(0); + }); }); diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index cd763fe80..356e120a7 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -1,7 +1,9 @@ //@import "vendor"; @import "main"; @import "custom"; +@import "blue/style"; //= require main //= require vendor //= require custom + diff --git a/app/assets/stylesheets/blue/asc.png b/app/assets/stylesheets/blue/asc.png new file mode 100644 index 0000000000000000000000000000000000000000..7cea5a1c301cb55f1c97bab5d9575601798cd0d7 GIT binary patch literal 2870 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 literal 0 HcmV?d00001 diff --git a/app/assets/stylesheets/blue/style.css b/app/assets/stylesheets/blue/style.css new file mode 100644 index 000000000..aafbf9dd9 --- /dev/null +++ b/app/assets/stylesheets/blue/style.css @@ -0,0 +1,118 @@ +/* tables */ +table.tablesorter { + font-family:arial; + margin:10px 0pt 15px; + font-size: 12px; + width: 100%; + text-align: left; + border: 1px solid #DDD; + border-bottom: none; +} + +table.tablesorter thead th{ + padding-left: 5px; +} + +table.tablesorter thead tr th, table.tablesorter tfoot tr th { + font-size: 12px; + margin: 0px; +} +table.tablesorter thead tr .header { + background-image: url("bg.png"); + background-repeat: no-repeat; + background-position: center left; + cursor: pointer; +} +table.tablesorter tbody td { + color: #3D3D3D; + padding: 5px; + margin: 0px; + background-color: #FFF; + vertical-align: top; + +} +table.tablesorter tbody tr.odd td { + background-color:#F0F0F6; +} +table.tablesorter thead tr .headerSortUp { + background-image: url("asc.png"); +} +table.tablesorter thead tr .headerSortDown { + background-image: url("desc.png"); +} +table.tablesorter thead tr .headerSortDown, table.tablesorter thead tr .headerSortUp { + +} + +table.tablesorter thead tr { + height: 38px; + background: #ededed; + -webkit-box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); + -moz-box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); + box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); + position: relative; + z-index: 99; +} + +table.tablesorter thead tr th{ + border-bottom: 1px solid #FFF; +} + +table.tablesorter tr { + position: relative; + z-index: 70; +} + +table.tablesorter tbody tr td { + border-bottom: 1px solid #DDD; +} + +table.tablesorter thead th { + color: #575756; + font-weight: normal; +} + +table.tablesorter tbody td { + color: #58595b; + padding-top: 8px; + padding-bottom: 8px; +} + +table.tablesorter .th1 { + width: 180px; + /*padding-left: 17px;*/ +} + +table.tablesorter .th2 { + width: 390px; +} + +table.tablesorter .th3 { + width: 110px; + /*padding-left: 17px;*/ +} + +table.tablesorter .td2 { + padding-right: 20px; +} + +table.tablesorter .th4 { + width: 120px; +} + +table.tablesorter .td5 { + text-align: center; +} + +table.tablesorter .td5 img{ + cursor: pointer; +} + +.table-sort-left { + float: left; + width: 25px; +} + +.table-sort-right { + float: left; +} \ No newline at end of file diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index ed058c203..9c9a38687 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -10,6 +10,8 @@ class IssuesController < ApplicationController layout 'application' def index(status = 200) + logger.debug "!!!!!!!!!!!!!!!!!!" + logger.debug "request format is #{request.format}" @is_assigned_to_me = params[:filter] == 'to_me' @status = params[:status] == 'closed' ? 'closed' : 'open' @labels = params[:labels] || [] @@ -53,11 +55,6 @@ class IssuesController < ApplicationController end end - def edit - @user_id = @issue.user_id - @user_uname = @issue.assign_uname - end - def update @user_id = params[:user_id].blank? ? @issue.user_id : params[:user_id] @user_uname = params[:user_uname].blank? ? @issue.assign_uname : params[:user_uname] diff --git a/app/views/issues/_search_collaborators.html.haml b/app/views/issues/_search_collaborators.html.haml index e5b25dc30..46d20276a 100644 --- a/app/views/issues/_search_collaborators.html.haml +++ b/app/views/issues/_search_collaborators.html.haml @@ -1,5 +1,5 @@ - (@users || []).each_with_index do |user, index| - .people.select{:id => "user-#{index}", :class => 'add_executor'} + .people.selected{:id => "user-#{index}", :class => 'add_executor'} .avatar=image_tag(user.avatar(25), :alt => 'avatar') .name="#{user.uname} (#{user.name})" =hidden_field_tag "user-#{index}", user.id, :name => 'user_id' diff --git a/app/views/issues/_search_labels.html.haml b/app/views/issues/_search_labels.html.haml index c535499d6..779b3d817 100644 --- a/app/views/issues/_search_labels.html.haml +++ b/app/views/issues/_search_labels.html.haml @@ -1,5 +1,6 @@ - (@labels || []).each_with_index do |label, index| - .add_label.label.selected{:id => "flag#{index}"} - .labeltext.selected{:style => "background: ##{label.color};"}=label.name + .add_label.label{:id => "flag#{index}"} + .flag{:style => "background: ##{label.color};"} + .labeltext=label.name =hidden_field_tag "label-#{index}", label.id, :name => "issue[labelings_attributes][#{index}][label_id]" .both From 0d75a37451337d6e1aff0178e83e44099f7f3056 Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Tue, 28 Feb 2012 20:05:18 +0600 Subject: [PATCH 11/18] [refs #194] show page beta version --- app/assets/javascripts/switcher.js | 54 ------------------- app/assets/javascripts/tracker.js | 21 ++++++++ app/controllers/issues_controller.rb | 16 +++--- app/models/issue.rb | 19 ++++++- app/views/issues/_create_sidebar.html.haml | 41 +++++++++++--- app/views/issues/_status.html.haml | 9 ++++ app/views/issues/edit.html.haml | 11 ---- app/views/issues/index.html.haml | 4 +- app/views/issues/show.html.haml | 50 +++++++---------- config/locales/issues.en.yml | 4 ++ config/locales/issues.ru.yml | 4 ++ config/routes.rb | 2 +- .../20120228094721_add_closed_at_to_issue.rb | 5 ++ .../20120228100121_add_closed_by_to_issue.rb | 6 +++ 14 files changed, 129 insertions(+), 117 deletions(-) delete mode 100644 app/assets/javascripts/switcher.js create mode 100644 app/views/issues/_status.html.haml delete mode 100644 app/views/issues/edit.html.haml create mode 100644 db/migrate/20120228094721_add_closed_at_to_issue.rb create mode 100644 db/migrate/20120228100121_add_closed_by_to_issue.rb diff --git a/app/assets/javascripts/switcher.js b/app/assets/javascripts/switcher.js deleted file mode 100644 index 4522e7687..000000000 --- a/app/assets/javascripts/switcher.js +++ /dev/null @@ -1,54 +0,0 @@ -function switchThis() { - var doc = document.getElementById("switcher"); - if (doc.className == "switcher") { - doc.className = "switcher-off"; - $("#open-comment").fadeOut(0); - $("#closed-comment").fadeIn("slow"); - } else { - doc.className = "switcher"; - $("#closed-comment").fadeOut(0); - $("#open-comment").fadeIn("slow"); - } -} - -function preload() { - if (document.images) { - var imgsrc = preload.arguments; - arr=new Array(imgsrc.length); - - for (var j=0; j @user_id}) ) - flash[:notice] = I18n.t("flash.issue.saved") - redirect_to [@project, @issue] - else - flash[:error] = I18n.t("flash.issue.save_error") - render :action => :new + if status = params[:issue][:status] + action = 'issues/_status' + @issue.set_close(current_user) if status == 'closed' + @issue.set_open if status == 'open' + status = 200 if @issue.save end + + render action, :status => (status || 500), :layout => false end def destroy diff --git a/app/models/issue.rb b/app/models/issue.rb index 3ce981df0..ba24d7010 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -5,6 +5,7 @@ class Issue < ActiveRecord::Base belongs_to :project belongs_to :user belongs_to :creator, :class_name => 'User', :foreign_key => 'creator_id' + belongs_to :closer, :class_name => 'User', :foreign_key => 'closed_by' has_many :comments, :as => :commentable, :dependent => :destroy #, :finder_sql => proc { "comments.commentable_id = '#{self.id}' AND comments.commentable_type = '#{self.class.name}'"} has_many :subscribes, :as => :subscribeable, :dependent => :destroy #, :finder_sql => proc { "subscribes.subscribeable_id = '#{self.id}' AND subscribes.subscribeable_type = '#{self.class.name}'"} @@ -22,7 +23,7 @@ class Issue < ActiveRecord::Base after_update :deliver_issue_assign_notification after_update :subscribe_issue_assigned_user - attr_accessible :labelings_attributes, :title, :body, :project, :project_id + attr_accessible :labelings_attributes, :title, :body, :project, :project_id, :closed_at, :closed_by accepts_nested_attributes_for :labelings, :allow_destroy => true def assign_uname @@ -39,6 +40,21 @@ class Issue < ActiveRecord::Base end end + def closed? + closed_by && closed_at && status == 'closed' + end + + def set_close(closed_by) + self.closed_at = Time.now + self.closer = closed_by + self.status = 'closed' + end + + def set_open + self.closed_at = self.closed_by = nil + self.status = 'open' + end + protected def set_serial_id @@ -87,4 +103,5 @@ class Issue < ActiveRecord::Base end end end + end diff --git a/app/views/issues/_create_sidebar.html.haml b/app/views/issues/_create_sidebar.html.haml index bf01f9294..908d04f51 100644 --- a/app/views/issues/_create_sidebar.html.haml +++ b/app/views/issues/_create_sidebar.html.haml @@ -1,14 +1,39 @@ -content_for :sidebar do + - if @issue.persisted? + .bordered.nopadding + %h3=t('activerecord.attributes.issue.status') + #switcher.issue_status{:class => "#{@issue.closed? ? 'switcher-off' : 'switcher'} #{can?(:write, @issue.project) ? "switch_issue_status" : ''}"} + .swleft=t('layout.issues.status.open') + .swright=t('layout.issues.status.closed') + - if can? :write, @issue.project + =form_tag [@project, @issue], :id => 'update_issue_status', :method => :put do + =hidden_field_tag "issue_status", @issue.closed? ? 'closed' : 'open', :name => "issue[status]" + .bordered.nopadding %h3=t('layout.issues.executor') - =form_tag search_collaborators_project_issues_path(@project), :id => 'search_user', :method => :get do - =tracker_search_field(:search_user, t('layout.issues.search_user')) - #create_issue_users_list - =render 'issues/search_collaborators' + - if @issue.persisted? && @issue.user + .bordered.nopadding + .people.nopointer + .avatar=image_tag(@issue.user.avatar(25), :alt => 'avatar') + .name="#{@issue.user.uname} (#{@issue.user.name})" + =hidden_field_tag "user-0", @issue.user.id, :name => 'user_id' + .both + - else + =form_tag search_collaborators_project_issues_path(@project), :id => 'search_user', :method => :get do + =tracker_search_field(:search_user, t('layout.issues.search_user')) + #create_issue_users_list + =render 'issues/search_collaborators' .block %h3=t('layout.issues.labels') - =form_tag search_labels_project_issues_path(@project), :id => 'search_labels', :method => :get do - =tracker_search_field(:search_labels, t('layout.issues.search_labels')) - #create_issue_labels_list - =render 'issues/search_labels' \ No newline at end of file + - if @issue.new_record? + =form_tag search_labels_project_issues_path(@project), :id => 'search_labels', :method => :get do + =tracker_search_field(:search_labels, t('layout.issues.search_labels')) + #create_issue_labels_list + =render 'issues/search_labels' + - else + - (@issue.labels || []).each_with_index do |label| + .label.selected.nopointer + .labeltext.selected{:style => "background: ##{label.color};"} + =label.name + .both \ No newline at end of file diff --git a/app/views/issues/_status.html.haml b/app/views/issues/_status.html.haml new file mode 100644 index 000000000..970526d4d --- /dev/null +++ b/app/views/issues/_status.html.haml @@ -0,0 +1,9 @@ +#closed_issue_text + - if @issue.status == 'closed' && @issue.closed_at && @issue.closed_by + #closed-comment.comment-closed{:style => 'display: block;'} + .state=t('layout.issues.status.closed') + .text + .avatar=image_tag(@issue.closer.avatar(25), :alt => 'avatar') + .name="#{@issue.closer.uname} (#{@issue.closer.name}) #{t('layout.issues.at')} #{@issue.closed_at.to_s(:long)}" + .both + %br/ \ No newline at end of file diff --git a/app/views/issues/edit.html.haml b/app/views/issues/edit.html.haml deleted file mode 100644 index aa09ab66f..000000000 --- a/app/views/issues/edit.html.haml +++ /dev/null @@ -1,11 +0,0 @@ -.block - .secondary-navigation - %ul.wat-cf - %li.first= link_to t("layout.issues.list"), project_issues_path(@project) - %li= link_to t("layout.issues.new"), new_project_issue_path(@project) - .content - %h2.title - = t("layout.issues.edit_header") - .inner - = form_for @issue, :url => project_issue_path(@project, @issue), :html => { :class => :form } do |f| - = render :partial => "form", :locals => {:f => f} diff --git a/app/views/issues/index.html.haml b/app/views/issues/index.html.haml index 461fde28a..c14a33bb2 100644 --- a/app/views/issues/index.html.haml +++ b/app/views/issues/index.html.haml @@ -4,9 +4,9 @@ #closed-switcher.blue-switcher =hidden_field_tag :issues_status, @status, :id => 'issues_status' .open - ="#{t('layout.issues.statuses.open')} (#{@issues.where(:status => 'open').count})" + ="#{t('layout.issues.statuses.open')} (#{@project.issues.where(:status => 'open').count})" #closed-tasks.closed - ="#{t('layout.issues.statuses.closed')} (#{@issues.where(:status => 'closed').count})" + ="#{t('layout.issues.statuses.closed')} (#{@project.issues.where(:status => 'closed').count})" #blue-switch-select.selected{:style => "margin-left: #{@status == 'open' ? '0' : '130'}px;"} .both .both diff --git a/app/views/issues/show.html.haml b/app/views/issues/show.html.haml index a8d1c3e6e..fca926f2c 100644 --- a/app/views/issues/show.html.haml +++ b/app/views/issues/show.html.haml @@ -1,32 +1,20 @@ -.block - .secondary-navigation - %ul.wat-cf - %li.first= link_to t("layout.issues.list"), project_issues_path(@project) - %li= link_to t("layout.issues.edit"), edit_project_issue_path(@project, @issue) if can? :edit, @issue - .content - .inner - %p - %b - = t("activerecord.attributes.issue.title") - \: - = @issue.title - %p - %b - = t("activerecord.attributes.issue.body") - \: - = @issue.body - %p - %b - = t('activerecord.attributes.issue.status') - \: - = @issue.status - %p - %b - = t('layout.issues.subscribe') - \: - - if @issue.subscribes.exists? :user_id => current_user.id - = link_to t('layout.issues.unsubscribe_btn'), project_issue_subscribe_path(@project, @issue, current_user.id), :method => :delete - - else - = link_to t('layout.issues.subscribe_btn'), project_issue_subscribes_path(@project, @issue), :method => :post +-render :partial => 'projects/submenu' +-render :partial => 'issues/create_sidebar' +-content_for :right_nopadding do + dummy +%h3=@issue.title +.activity + .top + .image + =image_tag(@issue.creator.avatar(42), :alt => 'avatar') if @issue.creator + .text + %span.name=link_to(@issue.creator.uname, user_path(@issue.creator)) if @issue.creator + %br/ + %span.date=@issue.created_at.to_s(:long) + %br/ + .both + .fulltext.view=@issue.body +.both +.hr -= render :partial => "comments/list", :locals => {:list => @issue.comments.order(:created_at), :project => @project, :commentable => @issue} +=render :partial => 'issues/status' diff --git a/config/locales/issues.en.yml b/config/locales/issues.en.yml index 37fb8e5fe..39a8dd365 100644 --- a/config/locales/issues.en.yml +++ b/config/locales/issues.en.yml @@ -27,6 +27,9 @@ en: open: Opened closed: Closed any: Any + status: + open: Открыто + closed: Closed subscribe: Subscribe subscribe_btn: Subscribe unsubscribe_btn: Unsubscribe @@ -44,6 +47,7 @@ en: search_labels: Search labels... choose_user_on_left: Choose executor on the left choose_labels_on_left: Choose labels on the left + at: at flash: issue: diff --git a/config/locales/issues.ru.yml b/config/locales/issues.ru.yml index 46c21d53c..827af86bc 100644 --- a/config/locales/issues.ru.yml +++ b/config/locales/issues.ru.yml @@ -27,6 +27,9 @@ ru: open: Открытые closed: Закрытые any: Все + status: + open: Открыто + closed: Закрыто subscribe: Подписка на уведомления subscribe_btn: Подписаться unsubscribe_btn: Отписаться @@ -44,6 +47,7 @@ ru: search_labels: Найти метки... choose_user_on_left: выберите исполнителя слева choose_labels_on_left: выберите метки слева + at: в flash: issue: diff --git a/config/routes.rb b/config/routes.rb index 22af526cc..421283a37 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -116,7 +116,7 @@ Rosa::Application.routes.draw do match 'compare/*versions' => 'wiki#compare', :as => :compare_versions, :via => :get end end - resources :issues do + resources :issues, :except => :edit do resources :comments, :only => [:edit, :create, :update, :destroy] resources :subscribes, :only => [:create, :destroy] collection do diff --git a/db/migrate/20120228094721_add_closed_at_to_issue.rb b/db/migrate/20120228094721_add_closed_at_to_issue.rb new file mode 100644 index 000000000..91948e2af --- /dev/null +++ b/db/migrate/20120228094721_add_closed_at_to_issue.rb @@ -0,0 +1,5 @@ +class AddClosedAtToIssue < ActiveRecord::Migration + def change + add_column :issues, :closed_at, :datetime + end +end diff --git a/db/migrate/20120228100121_add_closed_by_to_issue.rb b/db/migrate/20120228100121_add_closed_by_to_issue.rb new file mode 100644 index 000000000..9da79b29b --- /dev/null +++ b/db/migrate/20120228100121_add_closed_by_to_issue.rb @@ -0,0 +1,6 @@ +class AddClosedByToIssue < ActiveRecord::Migration + def change + add_column :issues, :closed_by, :integer + + end +end From 0abea8ff55e69c5ff0eddf329a7ff80d8a184ac1 Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Tue, 28 Feb 2012 20:28:11 +0600 Subject: [PATCH 12/18] [refs #194] fix issues count --- app/controllers/issues_controller.rb | 8 ++++++-- app/models/issue.rb | 3 +++ app/views/issues/index.html.haml | 4 ++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index ecec9cba8..15af3a55d 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -15,14 +15,18 @@ class IssuesController < ApplicationController @is_assigned_to_me = params[:filter] == 'to_me' @status = params[:status] == 'closed' ? 'closed' : 'open' @labels = params[:labels] || [] - - @issues = @project.issues.where(:status => @status) + @issues = @project.issues @issues = @issues.where(:user_id => current_user.id) if @is_assigned_to_me @issues = @issues.joins(:labels).where(:labels => {:name => @labels}) unless @labels == [] if params[:search_issue] @issues = @issues.where('issues.title ILIKE ?', "%#{params[:search_issue].mb_chars.downcase}%") end + @opened_issues = @issues.opened.count + @closed_issues = @issues.closed.count + @issues = @issues.where(:status => @status) + + @issues = @issues.includes(:creator, :user).order('serial_id desc').uniq.paginate :per_page => 10, :page => params[:page] if status == 200 render 'index', :layout => request.format == '*/*' ? 'issues' : 'application' # maybe FIXME '*/*'? diff --git a/app/models/issue.rb b/app/models/issue.rb index ba24d7010..d38095d86 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -26,6 +26,9 @@ class Issue < ActiveRecord::Base attr_accessible :labelings_attributes, :title, :body, :project, :project_id, :closed_at, :closed_by accepts_nested_attributes_for :labelings, :allow_destroy => true + scope :opened, where(:status => 'open', :closed_by => nil, :closed_at => nil) + scope :closed, where(:status => 'closed').where("closed_by is not null and closed_at is not null") + def assign_uname user.uname if user end diff --git a/app/views/issues/index.html.haml b/app/views/issues/index.html.haml index c14a33bb2..b87c63c3a 100644 --- a/app/views/issues/index.html.haml +++ b/app/views/issues/index.html.haml @@ -4,9 +4,9 @@ #closed-switcher.blue-switcher =hidden_field_tag :issues_status, @status, :id => 'issues_status' .open - ="#{t('layout.issues.statuses.open')} (#{@project.issues.where(:status => 'open').count})" + ="#{t('layout.issues.statuses.open')} (#{@opened_issues})" #closed-tasks.closed - ="#{t('layout.issues.statuses.closed')} (#{@project.issues.where(:status => 'closed').count})" + ="#{t('layout.issues.statuses.closed')} (#{@closed_issues})" #blue-switch-select.selected{:style => "margin-left: #{@status == 'open' ? '0' : '130'}px;"} .both .both From 5abdbd4486c7a4291c58012390a6484fb2f924da Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Tue, 28 Feb 2012 20:37:30 +0600 Subject: [PATCH 13/18] [refs #194] return main.scss --- app/assets/stylesheets/main.scss | 3048 +++++++++++++++--------------- 1 file changed, 1537 insertions(+), 1511 deletions(-) diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index 9ace09ccb..546de2797 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -1,1682 +1,1708 @@ html, body { - margin: 0; - padding: 0; - font-family: Tahoma, Geneva, Helvetica, sans-serif; - color: #565657; - background: #1f60a1 image-url("bg.png") repeat-x; - min-width: 940px; - min-height: 600px; - text-align: center; - height: 100%; } + margin: 0; + padding: 0; + font-family: Tahoma, Arial; + color: #565657; + 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; } + display: block; +} -input { - &[type="text"]:focus, &[type="password"]:focus, &:focus { - outline: none; } } - -select:focus { - outline: none; } - -a img { - border: none; } +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%; - &.columns { - background: white image-url("page-bg.png") repeat-y; } } + 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; } + 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; - div { - &.left { - background: image-url("top-left.png"); - height: 46px; - width: 14px; - float: left; } - &.middle { - background: image-url("top-middle.png"); - float: left; - height: 46px; - width: 912px; } - &.right { - background: image-url("top-right.png"); - height: 46px; - width: 14px; - float: right; } } - menu { - float: left; - margin: 0; - padding: 0; - ul { - list-style: none; - margin: 0; - padding: 10px 0px 0px 0px; - li { - display: inline; - a { - font-size: 12px; - color: #FFF; - text-decoration: none; - height: 43px; - padding: 15px 15px 15px 15px; - &:hover { - color: #cee7ff; } - &.first { - padding-left: 45px; } - &.active { - background: image-url("menu-hover.png") repeat-x; } } } } } - div { - &.logo { - float: left; - margin-top: -25px; - padding-left: 10px; - position: absolute; } - &.information { - float: right; } - &.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; - div { - &.pic { - background: image-url("search-button.png"); - height: 22px; - width: 24px; - float: left; } - &.field { - float: left; - margin: -1px 0px 0px 0px; - input { - border: none; - height: 18px; - background: none; - width: 132px; - font-size: 12px; - font-family: Arial; - padding: 2px 0px 0px 0px; - &.gray { - color: #cfcfcf; } - &.black { - color: #333333; } } } } } - &.avatar { - float: left; - padding: 6px 10px 10px 10px; } - &.information div { - &.active { - background: image-url("menu-hover.png") repeat-x; } - &.user { - float: left; - margin-left: 14px; } } - &.profile { - float: left; - text-align: right; - color: #FFF; - font-size: 12px; - padding-top: 12px; - a { - color: #FFF; - text-decoration: none; - padding-right: 10px; - &:hover { - text-decoration: underline; } } } - &.droplist-wrap { - margin: -4px 0px 0px 0px; } - &.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; } - &.droplist-wrap div.a { - margin-top: 5px; } - &.droplist a { - position: relative; - padding-left: 15px; - font-size: 12px; - color: #7eb7ed; - text-decoration: none; - padding-right: 15px; - margin-top: 10px; - &:hover { - text-decoration: underline; } } } } + -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); - 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; } - &.right { - float: left; } } - nav { - /*Äëÿ ïîäìåíþ áåç íàçâàíèÿ*/ - float: left; - margin: 0px 0px 0px 0px; - ul { - list-style: none; - text-align: left; - padding: 0; - margin: 0; - padding-top: 5px; - li { - display: inline; - a { - font-size: 12px; - color: #575756; - text-decoration: none; - height: 34px; - padding: 0px 20px 6px 20px; - &.active { - background: image-url("submenu-hover.png") repeat-x; } - &:hover { - color: #2b6daf; } } } } } } + 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; } + font-size: 12px; +} aside { - float: left; - width: 215px; } + float: left; + width: 215px; +} -article div { - &.right { - float: right; - width: 645px; - padding: 20px 40px 40px 40px; - text-align: left; - &.bigpadding { - width: 445px; - padding: 20px 140px 40px 140px; } - &.middlepadding { - width: 510px; - padding: 20px 120px 40px 50px; - div.rightlist { - width: 300px; - input, textarea { - width: 300px; } } } } - &.all { - width: 855px; - padding: 20px 40px 20px 40px; - text-align: left; - &.bigpadding { - width: 605px; - padding: 0px 40px 20px 200px; - text-align: left; } - &.verybigpadding { - width: 545px; - padding: 0px 40px 20px 200px; - text-align: left; - div.left { - float: left; - img { - padding-right: 40px; - margin-top: 20px; } - h3, h4, p { - width: 420px; } - .tmargin5 { - padding-top: 5px; - position: relative; } } } } } +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; +} + +article div.all.bigpadding { + width: 605px; + padding: 0px 40px 20px 200px; + text-align: left; +} /* Left part of page markup */ -aside div { - &.bordered { - border-bottom: 1px solid #dee5eb; - text-align: left; - padding: 20px 0px 30px 15px; } - &.block { - text-align: left; - padding: 10px 0px 30px 15px; } } +aside div.bordered { + border-bottom: 1px solid #dee5eb; + text-align: left; + padding: 20px 0px 30px 15px; +} + +aside div.block { + text-align: left; + padding: 10px 0px 30px 15px; +} /* Common page parts markups */ -article { - h4 { - font-size: 12px; - margin-bottom: 0px; - padding-bottom: 2px; } - p { - margin: 0; - padding: 0; } } +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; + text-align: center; +} -div { - &.expand-gray-down, &.expand-gray-up { - height: 10px; - width: 12px; - float: left; - margin: 3px 0px 0px 3px; - cursor: pointer; } - &.expand-gray-down { - background: image-url("expand-gray.png") no-repeat; } - &.expand-gray-up { - background: image-url("expand-gray2.png") no-repeat; } } +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 { - 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; - text-align: center; - &: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; } - &: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'); } } - &.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; - text-align: center; } } - input { - &[type="file"] {} - &[type="submit"] { - 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; - text-align: center; - height: auto; - width: auto; - &: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; - cursor: pointer; } - &: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'); } - &: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; - text-align: center; } } } - h3 { - font-size: 14px; - color: #575756; - margin-bottom: 0; - padding-bottom: 2px; - &.fix { - margin-top: 0px; - padding-top: 0px; } } - a { - color: #7eb7ed; - font-size: 12px; - text-decoration: none; - padding: 0px 0px; - &:hover { - text-decoration: underline; } } - div { - &.right div.hr { - border-bottom: 1px solid #dedede; - width: 100%; - padding-top: 30px; - margin-bottom: 30px; - &.bottom { - margin-bottom: 10px; - padding-top: 20px; } - &.top { - padding-top: 7px; - margin-bottom: 20px; } } - &.leftside { - float: left; } - &.rightside { - float: right; } - &.all.bigpadding div.rightside { - margin-right: 40px; } } } + + +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; + text-align: center; +} + +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: 30px; +} + +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; +} + .lefter { - float: left; - margin-right: 5px; - span.gap { - padding-right: 59px; } - &.top { - margin-top: -6px; } } + float: left; + margin-right: 5px; +} + +.lefter span.gap { + padding-right: 59px; +} + +.lefter.top { + margin-top: -6px; +} .w25 { - width: 25px; } + width: 25px; +} .w420 { - width: 420px; - padding-bottom: 20px; } + width: 420px; + padding-bottom: 20px; +} .padd25 { - padding-left: 25px; } + padding-left: 25px; +} .width70 { - width: 70px; } + width: 70px; +} + /* Footer */ footer { - height: 32px; - padding-left: 15px; - width: 900px; - margin: 0 auto; - text-align: center; - ul { - margin: 0; - padding: 0; - list-style: none; - font-size: 12px; - color: #FFF; - padding-top: 10px; - text-align: left; - li { - display: inline; - a { - font-size: 12px; - color: #FFF; - text-decoration: none; - &:hover { - text-decoration: underline; } } } } } + height: 32px; + 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: 0px; - margin-left: -10px; - td { - font-size: 12px; - padding: 1px 0px 0px 0px; } } - &.block table td { - text-align: right; - padding: 2px 3px 1px 3px; - &.first { - width: 150px; - text-align: left; } } } +aside div.bordered table{ + padding: 0; + margin: 0; + padding-bottom: 0px; + margin-left: -10px; +} -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; - &:hover { - background: #dceffa; } - p { - margin: 0; - padding: 0; } } - &.activity { - border: 1px solid #d6d6d6; - /*width: 614px;*/ - border-radius: 5px; - padding: 6px; - margin-top: 15px; - color: #333; - div.top div { - &.image { - float: left; } - &.text { - float: left; - padding-left: 10px; - font-size: 12px; - span { - &.name { - font-weight: 700; } - &.date { - font-size: 11px; } } } } } - &.text span.subject { - float: left; } - &.activity div { - &.top div.text span.subject img { - cursor: pointer; } - &.fulltext { - font-size: 12px; - padding-top: 10px; - display: none; - &.view { - display: block; } } } } +aside div.bordered table td{ + font-size: 12px; + padding: 1px 0px 0px 0px; +} + +aside div.block table td { + text-align: right; + padding: 2px 3px 1px 3px; +} + + +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; +} + +article div.right div.activity div.fulltext.view { + display: block; +} /* Admin page */ .admin-preferences ul { - list-style: none; - margin: 0; - padding: 0; - margin-top: 20px; - width: 215px; - text-align: left; - li { - padding-top: 5px; - padding-bottom: 5px; - width: 215px; - &.active, &:hover { - background: #dcecfa; } - a { - color: #575756; - text-decoration: none; - padding-top: 5px; - padding-bottom: 5px; - padding-left: 15px; } } } + 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, .all div.leftlist { - float: left; - width: 200px; - margin: 0px 0px 10px 0px; } + float: left; + width: 200px; + margin: 0px 0px 10px 0px; +} .right div.rightlist, .all div.rightlist { - float: left; - width: 400px; - font-size: 12px; - color: #575756; - margin: 0px 0px 10px 0px; } + float: left; + width: 400px; + font-size: 12px; + color: #575756; + margin: 0px 0px 10px 0px; +} -.right div.rightlist div { - &.check { - float: left; } - &.forcheck { - float: left; - margin: 1px 0px 0px 5px; } } +.right div.rightlist div.check { + float: left; +} -div.rightlist { - textarea { - height: 110px; - width: 350px; - border: 1px solid #dedede; - border-radius: 4px; - padding: 5px; - font-family: Tahoma, Geneva, Helvetica, sans-serif; - font-size: 12px; } - input { - &[type="text"], &[type="password"] { - height: 15px; - width: 350px; - border: 1px solid #dedede; - border-radius: 4px; - padding: 5px; - font-family: Tahoma, Geneva, Helvetica, sans-serif; - font-size: 12px; } } } +.right div.rightlist div.forcheck { + float: left; + margin: 1px 0px 0px 5px; +} +div.rightlist textarea { + height: 110px; + width: 340px; + border: 1px solid #dedede; + border-radius: 4px; + padding: 5px; + font-family: Tahoma, Arial; + font-size: 12px; +} + +div.rightlist input[type="text"] { + height: 15px; + 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; } - &.radio { - float: left; - margin: 5px 0px 0px 0px; } - &.forimg, &.forradio { - float: left; - margin: 5px 0px 0px 5px; } } - span.niceCheck-main { - margin-top: 3px; } } - div { - &.admin-search, &.admin-role { - float: left; } - &.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, Geneva, Helvetica, sans-serif; - padding-left: 5px; } } } +.right table div.img { + float: left; +} -article input { - &.gray { - color: #cfcfcf; } - &.black { - color: #333333; } } +.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; - a { - width: 86px; - text-align: center; - padding-bottom: 5px; } } + 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; } - + width: 17px; + height: 17px; + display: inline-block; + cursor: pointer; + background: image-url("radio.png"); + overflow: hidden; +} .radioChecked { - background-position: 0 -17px; } - + background-position: 0 -17px; +} .niceRadio input { - margin-left: -18px; } + margin-left: -18px; +} .sel80 { - width: 200px; - padding-bottom: 4px; - text-align: left; - &.aside { - width: 185px; } } - -.lineForm, .lineForm3 { - margin-bottom: 0px; } + 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"); - input { - display: none; } } + 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"); - input { - display: none; } } + 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; } - &.right { - float: right; - text-align: left; - width: 200px; - margin-right: 250px; } - .left { - float: left; - margin-right: 4px; } } +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 .date-block { - width: 100%; - margin-top: 17px; - 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; } - &.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; } - &.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; - div { - &.body { - float: left; - text-align: left; } - &.code { - float: right; - margin: -7px 0px 0px 640px; - position: absolute; } } } - &.code div { - &.top { - width: 90px; - height: 22px; - border: 1px solid #9dbcd5; - background: #cbdeef; } - &.bottom { - width: 90px; - text-align: right; } - &.left { - float: left; - width: 13px; - height: 13px; - padding-left: 2px; - padding-top: 4px; } - &.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; } } - &.image { - float: left; } } } +article .fright { + float: right; +} -.last-commit div.image { - float: left; } +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, .last-commit div.image { + float: left; +} article .date-block div.text, .last-commit div.text { - float: left; - padding-left: 10px; - font-size: 12px; } + float: left; + padding-left: 10px; + font-size: 12px; +} article .date-block div.text span.name, .last-commit span.name { - font-weight: 700; } + font-weight: 700; +} article .date-block div.text span.date, .last-commit span.date { - font-size: 11px; } + font-size: 11px; +} article .date-block div.text span.subject img, .last-commit span.subject img { - cursor: pointer; } + cursor: pointer; +} article .date-block div.fulltext, .last-commit div.fulltext { - font-size: 12px; - padding-top: 10px; - display: none; - /*width: 640px;*/ } + 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; - p { - margin: 0; - padding: 0; - color: #477CAE; } } + 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; +} -div.pagination.tmargin30 { - margin-top: 30px; } +article div.year p{ + margin: 0; + padding: 0; + color: #477CAE; +} /* Create issue */ .bordered.nopadding, .right.nopadding { - padding-top: 0px; } + padding-top: 0px; +} p.tmargin5 { - margin-top: 5px; } + margin-top: 5px; +} aside input { - height: 25px; - width: 170px; - border: 1px solid #dedede; - border-radius: 4px; - padding: 0px 5px; - font-family: Tahoma, Geneva, Helvetica, sans-serif; - font-size: 12px; - margin-bottom: 5px; - margin-top: 5px; - &.gray { - color: #cfcfcf; } - &.black { - color: #333333; } } + height: 25px; + width: 170px; + border: 1px solid #dedede; + border-radius: 4px; + padding: 0px 5px; + font-family: Tahoma, Arial; + font-size: 12px; + margin-bottom: 5px; + margin-top: 5px; +} -div { - &.people { - width: 202px; - clear: both; - cursor: pointer; - margin-left: -15px; - padding: 5px; - padding-left: 10px; - padding-right: 0px; - div.avatar { - float: left; - padding-left: 5px; } } - &.avatar { - float: left; - padding-left: 5px; } - &.people div.name, &.name { - padding-top: 4px; - padding-left: 3px; - float: left; } } +aside input.gray { + color: #cfcfcf; +} -aside div.select { - background: #dcecfa; } +aside input.black { + color: #333333; +} -div { - &.people:hover { - background: #dcecfa; } - &.label { - &.selected { - width: 196px; - clear: both; - cursor: pointer; - margin-left: -15px; - padding: 5px; - padding-left: 15px; - &:hover { - background: #dcecfa; } } - width: 196px; - clear: both; - cursor: pointer; - margin-left: -15px; - padding: 5px; - padding-left: 15px; - &:hover { - background: #dcecfa; } } - &.labeltext.selected { - float: left; - margin-left: 2px; - font-size: 12px; - margin-top: 0px; - padding-left: 3px; - padding-right: 3px; - color: #FFF; - padding-top: 1px; - padding-bottom: 1px; - border-radius: 2px; } - &.label div.flag { - height: 11px; - width: 3px; - background: #39b54a; - float: left; - margin-top: 3px; - margin-right: 3px; - border-radius: 2px; } } +div.people { + width: 202px; + clear: both; + cursor: pointer; + margin-left: -15px; + padding: 5px; + padding-left: 10px; + padding-right: 0px; +} -.right { - span.small-text { - font-size: 11px; } - .bpadding10 { - padding-bottom: 10px; } } +div.people div.avatar, div.avatar { + float: left; + padding-left: 5px; +} + +div.people div.name, div.name { + padding-top: 4px; + padding-left: 3px; + float: left; +} + +aside div.select, div.people:hover { + background: #dcecfa; +} + +div.label.selected, div.label { + width: 196px; + clear: both; + cursor: pointer; + margin-left: -15px; + padding: 5px; + padding-left: 15px; +} + +div.label.selected:hover, div.label:hover { + background: #dcecfa; +} + +div.labeltext.selected { + float: left; + margin-left: 2px; + font-size: 12px; + margin-top: 0px; + padding-left: 3px; + padding-right: 3px; + color: #FFF; + padding-top: 1px; + padding-bottom: 1px; + border-radius: 2px; +} + +div.label div.flag { + height: 11px; + width: 3px; + background: #39b54a; + float: left; + margin-top: 3px; + margin-right: 3px; + border-radius: 2px; +} + +.right span.small-text { + font-size: 11px; +} + +.right .bpadding10, .all .bpadding10 { + padding-bottom: 10px; +} -.all .bpadding10 { - padding-bottom: 10px; } /* Issue page */ -aside div { - &.switcher { - height: 23px; - width: 194px; - background: image-url("switch-on.png"); - color: #FFF; - font-size: 12px; - cursor: pointer; } - &.switcher-off { - height: 23px; - width: 194px; - background: image-url("switch-on.png"); - color: #FFF; - font-size: 12px; - cursor: pointer; - background: image-url("switch-off.png"); } - &.switcher div.swleft, &.switcher-off div.swleft { - float: left; - width: 96px; - text-align: center; - padding-top: 3px; } - &.switcher div.swright, &.switcher-off div.swright { - float: right; - width: 96px; - text-align: center; - padding-top: 3px; } } +aside div.switcher, aside div.switcher-off { + height: 23px; + width: 194px; + background: image-url("switch-on.png"); + color: #FFF; + font-size: 12px; + cursor: pointer; +} + +aside div.switcher-off { + background: image-url("switch-off.png"); +} + +aside div.switcher div.swleft, aside div.switcher-off div.swleft { + float: left; + width: 96px; + text-align: center; + padding-top: 3px; +} + +aside div.switcher div.swright, aside div.switcher-off div.swright { + float: right; + width: 96px; + text-align: center; + padding-top: 3px; +} p.non-view { - display: none; } + display: none; +} -div { - &.non-view { - display: none; } - &.view { - display: block; } - &.nopointer { - cursor: default; - &:hover { - background: none; } } } +div.non-view { + display: none; +} -a.button.tmargin10, input[type="submit"].tmargin10 { - margin-top: 10px; } +div.view { + display: block; +} -h3 { - &.tmargin0 { - margin-top: 0px; } - &.bmargin10 { - margin-bottom: 10px; } } +div.nopointer { + cursor: default; +} -.right div { - &.comment { - text-align: left; - border: 1px solid #b3cce0; - -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; - width: 631px; - background: #dcecfa; - div { - &.issue-left { - float: left; - font-size: 12px; - margin-top: 4px; } - &.issue-right { - float: right; } } - textarea { - height: 110px; - width: 618px; - border: 1px solid #dedede; - border-radius: 4px; - padding: 5px; - font-family: Tahoma, Geneva, Helvetica, sans-serif; - font-size: 12px; - color: #575756; - margin: 10px 0px; } } - &.comment-closed { - display: none; - div { - &.state { - float: left; - padding: 2px 0px 2px 0px; - background: #bd4d40; - color: #FFF; - font-size: 12px; - border: 1px solid #924f52; - -moz-border-radius-topleft: 2px; - -moz-border-radius-topright: 0px; - -moz-border-radius-bottomright: 0px; - -moz-border-radius-bottomleft: 2px; - -webkit-border-radius: 2px 0px 0px 2px; - border-radius: 2px 0px 0px 2px; - width: 80px; - text-align: center; } - &.text { - border: 1px solid #dce6ed; - -moz-border-radius-topleft: 2px; - -moz-border-radius-topright: 2px; - -moz-border-radius-bottomright: 2px; - -moz-border-radius-bottomleft: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; - float: left; - width: 561px; } - &.avatar { - float: left; - padding: 5px; } - &.name { - float: left; - font-size: 12px; - padding-top: 9px; } } } } +div.nopointer:hover { + background: none; +} -div { - &.desription-top { - background: #dcecfa; - font-size: 12px; - color: #575756; - border: 1px solid #a9c6dd; - height: 38px; - width: 100%; - margin-bottom: 20px; - div.img { - float: left; - padding-left: 10px; - margin-top: 14px; } - input.name { - float: left; - margin-top: 5px; - margin-left: 10px; - background: #FFF; - border: 1px solid #d1deeb; - height: 21px; - width: auto; - color: #575756; - font-size: 12px; - width: 215px; - padding: 2px 5px 3px; } - div.role { - float: left; - margin-top: 11px; - margin-left: 10px; - font-size: 11px; } } - &.fork { - float: right; - margin-top: 5px; - margin-right: 10px; - p { - float: right; - margin-top: 5px; - margin-right: 2px; } - &.rmargin0 { - margin-right: 0px; } } } +a.button.tmargin10 { + margin-top: 10px; +} + +h3.tmargin0 { + margin-top: 0px; +} + +h3.bmargin10 { + margin-bottom: 10px; +} + +.right div.comment { + text-align: left; + border: 1px solid #b3cce0; + -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; + width: 631px; + background: #dcecfa; +} + +.right div.comment div.issue-left { + float: left; + font-size: 12px; + margin-top: 4px; +} + +.right div.comment div.issue-right { + float: right; +} + +.right div.comment textarea { + height: 110px; + width: 618px; + border: 1px solid #dedede; + border-radius: 4px; + padding: 5px; + font-family: Tahoma, Arial; + font-size: 12px; + color: #575756; + margin: 10px 0px; +} + +.right div.comment-closed { + display: none; +} + +.right div.comment-closed div.state { + float: left; + padding: 2px 0px 2px 0px; + background: #bd4d40; + color: #FFF; + font-size: 12px; + border: 1px solid #924f52; + -moz-border-radius-topleft: 2px; + -moz-border-radius-topright: 0px; + -moz-border-radius-bottomright: 0px; + -moz-border-radius-bottomleft: 2px; + -webkit-border-radius: 2px 0px 0px 2px; + border-radius: 2px 0px 0px 2px; + width: 80px; + text-align: center; +} + +.right div.comment-closed div.text { + border: 1px solid #dce6ed; + -moz-border-radius-topleft: 2px; + -moz-border-radius-topright: 2px; + -moz-border-radius-bottomright: 2px; + -moz-border-radius-bottomleft: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + float: left; + width: 561px; +} + +.right div.comment-closed div.avatar { + float: left; + padding: 5px; +} + +.right div.comment-closed div.name { + float: left; + font-size: 12px; + padding-top: 9px; +} + +div.desription-top { + background: #dcecfa; + font-size: 12px; + color: #575756; + border: 1px solid #a9c6dd; + height: 38px; + width: 100%; + margin-bottom: 20px; +} + +div.desription-top div.img { + float: left; + padding-left: 10px; + margin-top: 14px; +} + +div.desription-top div.name { + float: left; + margin-top: 5px; + margin-left: 10px; + background: #FFF; + border: 1px solid #d1deeb; + height: 21px; + width: auto; + color: #575756; + padding-right: 5px; + padding-left: 5px; + padding-top: 5px; +} + +div.desription-top div.role { + float: left; + margin-top: 11px; + margin-left: 10px; + font-size: 11px; +} + +div.desription-top div.fork { + float: right; + margin-top: 5px; + margin-right: 10px; +} +div.desription-top div.fork p { + float: right; + margin-top: 5px; + margin-right: 2px; +} + + + +.all div.description { + text-align: left; +} + +.all div.description h3{ + color: #575756; + font-weight: 700; + font-size: 14px; + margin-bottom: 5px; + margin-top: 5px; +} + +.all div.description p{ + font-size: 12px; + padding: 0; + margin: 0; + color: #575756; +} + +.all div.last-commit { + 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: 10px 0px; +} -.all div { - &.description { - text-align: left; - h3 { - color: #575756; - font-weight: 700; - font-size: 14px; - margin-bottom: 5px; - margin-top: 5px; } - p { - font-size: 12px; - padding: 0; - margin: 0; - color: #575756; } } - &.last-commit { - 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: 10px 0px; } } /* Project main page */ -table.tablesorter.project { - .th1 { - width: 130px; - /*padding-left: 17px;*/ } - .th2 { - width: 110px; - /*padding-left: 17px;*/ } - .th3 { - width: 450px; } - .th4 { - /*padding-left: 17px;*/ } - div { - &.name { - float: left; - margin-top: 0px; } - &.pic { - float: left; - padding-right: 5px; } } } +table.tablesorter.project .th1 { + width: 130px; + padding-left: 17px; +} + +table.tablesorter.project .th2 { + width: 110px; + padding-left: 17px; +} + +table.tablesorter.project .th3 { + width: 450px; +} + +table.tablesorter.project .th4 { + padding-left: 17px; +} + +table.tablesorter.project div.name { + float: left; + margin-top: 0px; +} + +table.tablesorter.project div.pic { + float: left; + padding-right: 5px; +} a.files-see { - color: #565657; - text-decoration: underline; } + color: #565657; + text-decoration: underline; +} -div { - &.file { - border: 1px solid #dddddd; - margin-top: 10px; - div.top { - height: 28px; - background: #ededed; - -webkit-box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); - -moz-box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); - box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); - position: relative; - z-index: 99; - div { - &.l { - float: left; - margin: 6px 0px 0px 10px; } - &.r { - float: right; - margin: 6px 10px 0px 0px; } } } } - &.files div { - &.l { - float: left; - margin-bottom: 5px; } - &.r { - float: right; - display: none; } } - &.file { - margin-bottom: 10px; } } +div.file { + border: 1px solid #dddddd; + margin-top: 10px; +} -textarea.commit-message { - height: 60px; - width: 450px; - border: 1px solid #dedede; - border-radius: 4px; - padding: 5px; - font-family: Tahoma, Geneva, Helvetica, sans-serif; - font-size: 12px; - margin-top: 5px; } +div.file div.top { + height: 28px; + background: #ededed; + -webkit-box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); + -moz-box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); + box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); + position: relative; + z-index: 99; +} -div { - &.files div.l p { - padding: 0; - margin: 5px 0px 0px 0px; } - &.gutter-new { - float: left; - border: 0 !important; - padding: 10px 5px 10px 0px; - font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; - background: #EDEDED; - width: 40px; - text-align: right; } } +div.file div.top div.l { + float: left; + margin: 6px 0px 0px 10px; +} -/* Code */ +div.file div.top div.r { + float: right; + margin: 6px 10px 0px 0px; +} + +div.files div.l { + float: left; + margin-bottom: 5px; +} + +div.files div.r { + float: right; + display: none; +} + +div.files div.l p{ + padding: 0; + margin: 5px 0px 0px 0px; +} /* Tracker */ -table td { - &.width18 { - width: 18px; } - &.width135 { - width: 135px; } - &.width145 { - width: 145px; } - &.width30 { - width: 30px; - &.right { - text-align: right; } } } +table td.width18 { + width: 18px; +} + +table td.width135 { + width: 135px; +} + +table td.width145 { + width: 145px; +} + +table td.width30 { + width: 30px; +} + +table td.width30.right { + text-align: right; +} div.bordered.bpadding20 { - padding-bottom: 20px; } + padding-bottom: 20px; +} -table.tracker-lables { - td { - padding: 1px; } - div.label { - width: auto; - clear: both; - cursor: default; - margin-left: -15px; - padding: 5px; - padding-left: 15px; - text-align: left; - &:hover { - background: none; } } } +table.tracker-lables td { + padding: 1px; +} + +table.tracker-lables div.label { + width: auto; + clear: both; + cursor: default; + margin-left: -15px; + padding: 5px; + padding-left: 15px; + text-align: left; +} + +table.tracker-lables div.label:hover { + background: none; +} div.blue-switcher { - height: 19px; - width: 258px; - border: 1px solid #a0a0a1; - border-radius: 3px; - background-color: #575756; - color: #FFF; - -webkit-box-shadow: inset 0px 2px 5px 0px rgba(0, 0, 0, 0.3); - -moz-box-shadow: inset 0px 2px 5px 0px rgba(0, 0, 0, 0.3); - box-shadow: inset 0px 2px 5px 0px rgba(0, 0, 0, 0.3); - float: right; - div { - &.open { - float: left; - padding: 1px 0px 2px 0px; - width: 128px; - text-align: center; - cursor: pointer; - position: relative; - z-index: 3; } - &.selected { - background-image: -webkit-gradient(linear, left top, left bottom, from(#619dd2), to(#125687)); - background-image: -webkit-linear-gradient(top, #619dd2, #125687); - background-image: -moz-linear-gradient(top, #619dd2, #125687); - background-image: -ms-linear-gradient(top, #619dd2, #125687); - background-image: -o-linear-gradient(top, #619dd2, #125687); - background-image: linear-gradient(top, #619dd2, #125687); - filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#619dd2', EndColorStr='#125687'); - border-radius: 2px; - height: 18px; - width: 128px; - -webkit-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.5); - -moz-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.5); - box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.5); - position: absolute; - margin: 0px; - z-index: 2; } - &.closed { - float: right; - padding: 1px 0px 0px 0px; - width: 128px; - text-align: center; - cursor: pointer; - position: relative; - z-index: 3; } } } + height: 19px; + width: 258px; + border: 1px solid #a0a0a1; + border-radius: 3px; + background-color: #575756; + color: #FFF; + -webkit-box-shadow: inset 0px 2px 5px 0px rgba(0, 0, 0, 0.3); + -moz-box-shadow: inset 0px 2px 5px 0px rgba(0, 0, 0, 0.3); + box-shadow: inset 0px 2px 5px 0px rgba(0, 0, 0, 0.3); + float: right; +} -table.tablesorter.tracker { - th.th1 { - width: 50px; } - td { - &.td0 { - width: 10px; - padding-right: 0px; } - &.td3 { - width: 120px; - padding-top: 10px; - div { - &.code { - height: 19px; - width: 15px; - background: #FFF; - color: #009fe3; - border: 1px solid #83d1f2; - font-size: 16px; - padding: 1px 0px 0px 5px; - float: left; - margin-right: 5px; - cursor: pointer; } - &.avatar { - float: left; - margin-right: 5px; - cursor: pointer; } - &.answers { - height: 20px; - background: #FFF; - color: #009fe3; - border: 1px solid #83d1f2; - font-size: 16px; - float: left; - cursor: pointer; - div { - &.pic { - float: left; - margin: 2px; } - &.count { - float: left; - margin: 0px 5px 0px 2px; } } } } } } - div.smalltext { - font-size: 11px; - color: #b0b0b1; - float: left; - margin-top: 3px; } } +div.blue-switcher div.open { + float: left; + padding: 1px 0px 2px 0px; + width: 128px; + text-align: center; + cursor: pointer; + position: relative; + z-index: 3; +} -div { - &.label { - &.selected.tracker { - width: auto; - clear: both; - cursor: default; - margin-left: 0px; - padding: 5px; - float: right; - margin-top: -6px; - &:hover { - background: none; } } - &.edit { - width: 196px; - clear: both; - cursor: default; - margin-left: -15px; - padding: 5px; - padding-left: 15px; - &:hover { - background: none; } } } - &.labeltext { - &.edit { - float: left; - margin-left: 2px; - font-size: 12px; - margin-top: 0px; - margin-bottom: 5px; - padding-left: 3px; - padding-right: 3px; - color: #FFF; - padding-top: 1px; - padding-bottom: 1px; - border-radius: 2px; - width: 175px; - cursor: default; - div { - &.text { - float: left; } - &.delete { - float: right; - cursor: pointer; - margin-top: 1px; } } } - a { - text-decoration: none; - color: #565657; } - &.edit a { - text-decoration: none; - color: #FFF; } } } +div.blue-switcher div.selected { + background-image: -webkit-gradient(linear, left top, left bottom, from(#619dd2), to(#125687)); + background-image: -webkit-linear-gradient(top, #619dd2, #125687); + background-image: -moz-linear-gradient(top, #619dd2, #125687); + background-image: -ms-linear-gradient(top, #619dd2, #125687); + background-image: -o-linear-gradient(top, #619dd2, #125687); + background-image: linear-gradient(top, #619dd2, #125687); + filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#619dd2', EndColorStr='#125687'); + border-radius: 2px; + height: 18px; + width: 128px; + -webkit-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.5); + box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.5); + position: absolute; + margin: 0px; + z-index: 2; + +} -aside div { - &.colors { - margin: 10px 0px; - div { - &.color { - float: left; - width: 22px; - height: 22px; - margin-right: 5px; - border-radius: 4px; - -webkit-box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.8); - -moz-box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.8); - box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.8); - cursor: pointer; } - &.choose { - height: 14px; - width: 14px; - padding: 4px; - &.selected, &:hover { - background: image-url("choose.png") no-repeat 50% 50%; - height: 14px; - width: 14px; - padding: 4px; } } } } - &.lefter { - float: left; } - &.righter { - float: right; - margin-right: 15px; } } +div.blue-switcher div.closed { + float: right; + padding: 1px 0px 0px 0px; + width: 128px; + text-align: center; + cursor: pointer; + position: relative; + z-index: 3; +} + +table.tablesorter.tracker th.th1{ + width: 50px; +} + +table.tablesorter.tracker td.td0{ + width: 10px; + padding-right: 0px; +} + +table.tablesorter.tracker td.td3{ + width: 120px; + padding-top: 10px; +} + +table.tablesorter.tracker td.td3 div.code { + height: 19px; + width: 15px; + background: #FFF; + color: #009fe3; + border: 1px solid #83d1f2; + font-size: 16px; + padding: 1px 0px 0px 5px; + float: left; + margin-right: 5px; + cursor: pointer; +} + +table.tablesorter.tracker td.td3 div.avatar { + float: left; + margin-right: 5px; + cursor: pointer; +} + +table.tablesorter.tracker td.td3 div.answers { + height: 20px; + background: #FFF; + color: #009fe3; + border: 1px solid #83d1f2; + font-size: 16px; + float: left; + cursor: pointer; +} + +table.tablesorter.tracker td.td3 div.answers div.pic { + float: left; + margin: 2px; +} + +table.tablesorter.tracker td.td3 div.answers div.count { + float: left; + margin: 0px 5px 0px 2px; +} + +table.tablesorter.tracker div.smalltext { + font-size: 11px; + color: #b0b0b1; + float: left; + margin-top: 3px; +} + + +div.label.selected.tracker { + width: auto; + clear: both; + cursor: default; + margin-left: 0px; + padding: 5px; + float: right; + margin-top: -6px; +} + +div.label.selected.tracker:hover { + background: none; +} + + +div.label.edit { + width: 196px; + clear: both; + cursor: default; + margin-left: -15px; + padding: 5px; + padding-left: 15px; +} + +div.label.edit:hover{ + background: none; +} + +div.labeltext.edit { + float: left; + margin-left: 2px; + font-size: 12px; + margin-top: 0px; + margin-bottom: 5px; + padding-left: 3px; + padding-right: 3px; + color: #FFF; + padding-top: 1px; + padding-bottom: 1px; + border-radius: 2px; + width: 175px; + cursor: default; +} + +div.labeltext.edit div.text { + float: left; +} + +div.labeltext.edit div.delete { + float: right; + cursor: pointer; + margin-top: 1px; +} + +aside div.colors { + margin: 10px 0px; +} + +aside div.colors div.color { + float: left; + width: 22px; + height: 22px; + margin-right: 5px; + border-radius: 4px; + -webkit-box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.8); + -moz-box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.8); + box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.8); + cursor: pointer; +} + +aside div.colors div.choose { + height: 14px; + width: 14px; + padding: 4px; +} + +aside div.colors div.choose.selected, aside div.colors div.choose:hover { + background: image-url("choose.png") no-repeat 50% 50%; + height: 14px; + width: 14px; + padding: 4px; +} + +aside div.lefter { + float: left; +} + +aside div.righter { + float: right; + margin-right: 15px; +} tr.label-active { - background: #DDD; - border-radius: 3px; } + background: #DDD; + border-radius: 3px; +} /* Wiki */ span.wiki-gray { - color: #b0b0b1; } + color: #b0b0b1; +} .right table.wiki { - border: 1px solid #e2e2e2; - border-bottom: none; - margin-top: 10px; - td { - border-bottom: 1px solid #e2e2e2; - padding: 8px; } - tr.history td { - &.td1 { - width: 5px; } - &.td2 { - width: 180px; } } } + border: 1px solid #e2e2e2; + border-bottom: none; + margin-top: 10px; +} + +.right table.wiki td { + border-bottom: 1px solid #e2e2e2; + padding: 8px; +} + +.right table.wiki tr.history td.td1{ + width: 5px; +} + +.right table.wiki tr.history td.td2{ + width: 180px; +} a.button.rigth { - float: right; } + float: right; +} div.r { - float: right; - margin-left: 10px; } + float: right; + margin-left: 10px; +} h3.wiki { - color: #477cae; - font-size: 16px; } + color: #477cae; + font-size: 16px; +} a.button.width100 { - width: 100px; } + width: 100px; +} -.div-tracker-labels { - margin: 2px 13px 2px 0px; - cursor: pointer; - border-radius: 4px; } +.div-tracker-lables { + margin: 2px 13px 2px 0px; + cursor: pointer; + border-radius: 4px; +} .div-label-left { - float: left; - width: 150px; } + float: left; + width: 150px; +} .div-label-right { - float: right; - width: 30px; - text-align: right; - padding-top: 4px; - padding-right: 3px; } + float: right; + width: 30px; + text-align: right; + padding-top: 4px; + padding-right: 3px; +} div.div-label-left div.label { - width: auto; - clear: both; - margin-left: -15px; - padding: 5px; - padding-left: 15px; - text-align: left; - &:hover { - background: none; } } + width: auto; + clear: both; + margin-left: -15px; + padding: 5px; + padding-left: 15px; + text-align: left; +} -/* Monitoring */ - -aside div.table { - margin-top: 5px; } - -h3.small { - font-size: 12px; - margin: 0px; - padding: 3px 0px; } - -table.tablesorter th.lpadding16 { - padding-left: 16px; } - -div.right.slim { - padding: 5px 14px 40px; - width: 695px; } - -img.delete-row { - cursor: pointer; } - -/* Create group */ - -div { - &.right-error { - float: left; - width: 369px; - height: 59px; - background: image-url("error-groups.png"); - margin: 0px 0px 5px -3px; - text-align: center; - p { - margin: 0; - padding: 27px 0px 0px 0px; } } - &.rightlist.nomargin { - margin: 0; } } - -article div { - &.rightlist input.error { - border: 1px solid #bd4d40; - -webkit-box-shadow: 0px 0px 2px 0px rgba(189, 77, 64, 1); - -moz-box-shadow: 0px 0px 2px 0px rgba(189, 77, 64, 1); - box-shadow: 0px 0px 2px 0px rgba(189, 77, 64, 1); } - &.groups-profile { - float: left; - a { - margin: 0px 0px 0px 5px; } - img { - margin: 2px 0px 0px 0px; } } } - -/* Group pages */ - -table.tablesorter { - &.group-list th.th2 { - width: 540px; } - &.create-platform th.th1 { - /*padding-left: 17px;*/ - width: 120px; } } - -/* Platform */ - -div.right div.left { - float: left; - margin-right: 5px; } - -table.tablesorter { - &.platform-products { - th.th1 { - /*padding-left: 17px;*/ - width: 560px; } - td.td2 { - text-align: center; } } - &.platform-repos { - th { - &.th1 { - /*padding-left: 17px;*/ - width: 480px; } - &.th2 { - /*padding-left: 17px;*/ - width: 80px; } } - td.td3 { - text-align: center; } } } - -div.new-owner div { - &.field { - float: left; - margin-right: 10px; - input { - width: 230px; } } - &.search { - float: left; } } - -.tpadding10 { - padding-top: 10px; } - -article div.all div.hr { - border-bottom: 1px solid #dedede; - width: 565px; - padding-top: 30px; - margin-bottom: 30px; } - -table.tablesorter.platform-product-main th { - &.th1 { - /*padding-left: 17px;*/ - width: 60px; } - &.th2 { - /*padding-left: 17px;*/ - width: 400px; } - &.th3 { - padding-left: 0px; } - &.th4 { - /*padding-left: 17px;*/ - width: 150px; } } - -div.right.rpadding0 { - padding-right: 0px; } - -article div.loadFile div { - &.btn { - float: left; } - &.name { - float: left; - margin-left: 20px; - padding-top: 4px; } } - -/* Profile */ - -.bpadding10 { - padding-bottom: 10px; } - -article div.rightlist div.load { - float: left; - margin-left: 40px; } - -.notify { - border: 1px solid #c86b60; - background: #f4e1df; - border-radius: 4px; - width: 100%; - margin-top: 20px; - p { - padding: 5px 10px; } } - -/* Pagination */ - -div.pagination { - em { - font-style: normal; - border: 1px solid #dddddd; - border-radius: 1px; - background: #ededed; - padding: 3px 7px; } - span, a { - border: 1px solid #dddddd; - border-radius: 1px; - background: #ededed; - padding: 3px 7px; } - em.current { - background: #d5e7f9; - border: 1px solid #c1daed; } - a { - color: #4c90d0; } } - -/*404*/ - -article div.all.error404 { - background: image-url("404.png") no-repeat 59% 0; - height: 500px; - text-align: center; - h1 { - margin: 0; - padding: 0; - margin-top: 165px; - font-size: 48px; - font-weight: normal; - span { - color: #4496d0; } } - h2 { - margin: 0; - padding: 0; - margin-top: 5px; - font-size: 18px; - font-weight: normal; } - p { - margin: 0 auto; - padding: 0; - text-align: center; - font-size: 14px; - &.pages { - margin-top: 72px; - width: 280px; } - &.search { - margin-top: 80px; - width: 230px; } } } \ No newline at end of file +div.div-label-left div.label:hover { + background: none; +} From f9c834cf4db2188e2b1d03edfbabb1c16b30f424 Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Tue, 28 Feb 2012 20:56:43 +0600 Subject: [PATCH 14/18] Revert "[refs #194] return main.scss" This reverts commit 0b8461a5df9f3d9bbca6e3b377164ff4aa4ac4e6. --- app/assets/stylesheets/main.scss | 3046 +++++++++++++++--------------- 1 file changed, 1510 insertions(+), 1536 deletions(-) diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index 546de2797..9ace09ccb 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -1,1708 +1,1682 @@ html, body { - margin: 0; - padding: 0; - font-family: Tahoma, Arial; - color: #565657; - background: #1f60a1 image-url("bg.png") repeat-x; - min-width: 940px; - min-height: 600px; - text-align: center; - height: 100%; -} + margin: 0; + padding: 0; + font-family: Tahoma, Geneva, Helvetica, sans-serif; + color: #565657; + 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; -} + display: block; } -input[type="text"]:focus { outline: none; } - -input[type="password"]:focus { outline: none; } - -input:focus { outline: none; } - -select:focus { outline: none; } +input { + &[type="text"]:focus, &[type="password"]:focus, &:focus { + outline: none; } } + +select:focus { + outline: none; } + +a img { + border: 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; -} + 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%; + &.columns { + background: white image-url("page-bg.png") repeat-y; } } .both { - clear: 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; -} + -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; + div { + &.left { + background: image-url("top-left.png"); + height: 46px; + width: 14px; + float: left; } + &.middle { + background: image-url("top-middle.png"); + float: left; + height: 46px; + width: 912px; } + &.right { + background: image-url("top-right.png"); + height: 46px; + width: 14px; + float: right; } } + menu { + float: left; + margin: 0; + padding: 0; + ul { + list-style: none; + margin: 0; + padding: 10px 0px 0px 0px; + li { + display: inline; + a { + font-size: 12px; + color: #FFF; + text-decoration: none; + height: 43px; + padding: 15px 15px 15px 15px; + &:hover { + color: #cee7ff; } + &.first { + padding-left: 45px; } + &.active { + background: image-url("menu-hover.png") repeat-x; } } } } } + div { + &.logo { + float: left; + margin-top: -25px; + padding-left: 10px; + position: absolute; } + &.information { + float: right; } + &.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; + div { + &.pic { + background: image-url("search-button.png"); + height: 22px; + width: 24px; + float: left; } + &.field { + float: left; + margin: -1px 0px 0px 0px; + input { + border: none; + height: 18px; + background: none; + width: 132px; + font-size: 12px; + font-family: Arial; + padding: 2px 0px 0px 0px; + &.gray { + color: #cfcfcf; } + &.black { + color: #333333; } } } } } + &.avatar { + float: left; + padding: 6px 10px 10px 10px; } + &.information div { + &.active { + background: image-url("menu-hover.png") repeat-x; } + &.user { + float: left; + margin-left: 14px; } } + &.profile { + float: left; + text-align: right; + color: #FFF; + font-size: 12px; + padding-top: 12px; + a { + color: #FFF; + text-decoration: none; + padding-right: 10px; + &:hover { + text-decoration: underline; } } } + &.droplist-wrap { + margin: -4px 0px 0px 0px; } + &.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; } + &.droplist-wrap div.a { + margin-top: 5px; } + &.droplist a { + position: relative; + padding-left: 15px; + font-size: 12px; + color: #7eb7ed; + text-decoration: none; + padding-right: 15px; + margin-top: 10px; + &:hover { + text-decoration: underline; } } } } /* 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; -} + 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); + 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; } + &.right { + float: left; } } + nav { + /*Äëÿ ïîäìåíþ áåç íàçâàíèÿ*/ + float: left; + margin: 0px 0px 0px 0px; + ul { + list-style: none; + text-align: left; + padding: 0; + margin: 0; + padding-top: 5px; + li { + display: inline; + a { + font-size: 12px; + color: #575756; + text-decoration: none; + height: 34px; + padding: 0px 20px 6px 20px; + &.active { + background: image-url("submenu-hover.png") repeat-x; } + &:hover { + color: #2b6daf; } } } } } } /* Page markup */ article { - font-size: 12px; -} + font-size: 12px; } aside { - float: left; - width: 215px; -} + 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; -} - -article div.all.bigpadding { - width: 605px; - padding: 0px 40px 20px 200px; - text-align: left; -} +article div { + &.right { + float: right; + width: 645px; + padding: 20px 40px 40px 40px; + text-align: left; + &.bigpadding { + width: 445px; + padding: 20px 140px 40px 140px; } + &.middlepadding { + width: 510px; + padding: 20px 120px 40px 50px; + div.rightlist { + width: 300px; + input, textarea { + width: 300px; } } } } + &.all { + width: 855px; + padding: 20px 40px 20px 40px; + text-align: left; + &.bigpadding { + width: 605px; + padding: 0px 40px 20px 200px; + text-align: left; } + &.verybigpadding { + width: 545px; + padding: 0px 40px 20px 200px; + text-align: left; + div.left { + float: left; + img { + padding-right: 40px; + margin-top: 20px; } + h3, h4, p { + width: 420px; } + .tmargin5 { + padding-top: 5px; + position: relative; } } } } } /* Left part of page markup */ -aside div.bordered { - border-bottom: 1px solid #dee5eb; - text-align: left; - padding: 20px 0px 30px 15px; -} - -aside div.block { - text-align: left; - padding: 10px 0px 30px 15px; -} +aside div { + &.bordered { + border-bottom: 1px solid #dee5eb; + text-align: left; + padding: 20px 0px 30px 15px; } + &.block { + text-align: left; + padding: 10px 0px 30px 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; - text-align: center; -} +article { + h4 { + font-size: 12px; + margin-bottom: 0px; + padding-bottom: 2px; } + p { + margin: 0; + padding: 0; } } -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; -} +div { + &.expand-gray-down, &.expand-gray-up { + height: 10px; + width: 12px; + float: left; + margin: 3px 0px 0px 3px; + cursor: pointer; } + &.expand-gray-down { + background: image-url("expand-gray.png") no-repeat; } + &.expand-gray-up { + background: image-url("expand-gray2.png") no-repeat; } } - - -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; - text-align: center; -} - -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; -} +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; + text-align: center; + &: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; } + &: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'); } } + &.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; + text-align: center; } } + input { + &[type="file"] {} + &[type="submit"] { + 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; + text-align: center; + height: auto; + width: auto; + &: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; + cursor: pointer; } + &: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'); } + &: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; + text-align: center; } } } + h3 { + font-size: 14px; + color: #575756; + margin-bottom: 0; + padding-bottom: 2px; + &.fix { + margin-top: 0px; + padding-top: 0px; } } + a { + color: #7eb7ed; + font-size: 12px; + text-decoration: none; + padding: 0px 0px; + &:hover { + text-decoration: underline; } } + div { + &.right div.hr { + border-bottom: 1px solid #dedede; + width: 100%; + padding-top: 30px; + margin-bottom: 30px; + &.bottom { + margin-bottom: 10px; + padding-top: 20px; } + &.top { + padding-top: 7px; + margin-bottom: 20px; } } + &.leftside { + float: left; } + &.rightside { + float: right; } + &.all.bigpadding div.rightside { + margin-right: 40px; } } } /* Right part of page markup */ -article div.right div.hr { - border-bottom: 1px solid #dedede; - width: 100%; - padding-top: 30px; - margin-bottom: 30px; -} - -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; -} - .lefter { - float: left; - margin-right: 5px; -} - -.lefter span.gap { - padding-right: 59px; -} - -.lefter.top { - margin-top: -6px; -} + float: left; + margin-right: 5px; + span.gap { + padding-right: 59px; } + &.top { + margin-top: -6px; } } .w25 { - width: 25px; -} + width: 25px; } .w420 { - width: 420px; - padding-bottom: 20px; -} + width: 420px; + padding-bottom: 20px; } .padd25 { - padding-left: 25px; -} + padding-left: 25px; } .width70 { - width: 70px; -} - + width: 70px; } /* Footer */ footer { - height: 32px; - 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; -} + height: 32px; + padding-left: 15px; + width: 900px; + margin: 0 auto; + text-align: center; + ul { + margin: 0; + padding: 0; + list-style: none; + font-size: 12px; + color: #FFF; + padding-top: 10px; + text-align: left; + li { + display: inline; + a { + font-size: 12px; + color: #FFF; + text-decoration: none; + &:hover { + text-decoration: underline; } } } } } /* Main page */ -aside div.bordered table{ - padding: 0; - margin: 0; - padding-bottom: 0px; - margin-left: -10px; -} +aside div { + &.bordered table { + padding: 0; + margin: 0; + padding-bottom: 0px; + margin-left: -10px; + td { + font-size: 12px; + padding: 1px 0px 0px 0px; } } + &.block table td { + text-align: right; + padding: 2px 3px 1px 3px; + &.first { + width: 150px; + text-align: left; } } } -aside div.bordered table td{ - font-size: 12px; - padding: 1px 0px 0px 0px; -} - -aside div.block table td { - text-align: right; - padding: 2px 3px 1px 3px; -} - - -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; -} - -article div.right div.activity div.fulltext.view { - display: block; -} +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; + &:hover { + background: #dceffa; } + p { + margin: 0; + padding: 0; } } + &.activity { + border: 1px solid #d6d6d6; + /*width: 614px;*/ + border-radius: 5px; + padding: 6px; + margin-top: 15px; + color: #333; + div.top div { + &.image { + float: left; } + &.text { + float: left; + padding-left: 10px; + font-size: 12px; + span { + &.name { + font-weight: 700; } + &.date { + font-size: 11px; } } } } } + &.text span.subject { + float: left; } + &.activity div { + &.top div.text span.subject img { + cursor: pointer; } + &.fulltext { + font-size: 12px; + padding-top: 10px; + display: none; + &.view { + display: block; } } } } /* 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; -} + list-style: none; + margin: 0; + padding: 0; + margin-top: 20px; + width: 215px; + text-align: left; + li { + padding-top: 5px; + padding-bottom: 5px; + width: 215px; + &.active, &:hover { + background: #dcecfa; } + a { + color: #575756; + text-decoration: none; + padding-top: 5px; + padding-bottom: 5px; + padding-left: 15px; } } } .right div.leftlist, .all div.leftlist { - float: left; - width: 200px; - margin: 0px 0px 10px 0px; -} + float: left; + width: 200px; + margin: 0px 0px 10px 0px; } .right div.rightlist, .all div.rightlist { - float: left; - width: 400px; - font-size: 12px; - color: #575756; - margin: 0px 0px 10px 0px; -} + 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 { + &.check { + float: left; } + &.forcheck { + float: left; + margin: 1px 0px 0px 5px; } } -.right div.rightlist div.forcheck { - float: left; - margin: 1px 0px 0px 5px; -} -div.rightlist textarea { - height: 110px; - width: 340px; - border: 1px solid #dedede; - border-radius: 4px; - padding: 5px; - font-family: Tahoma, Arial; - font-size: 12px; -} - -div.rightlist input[type="text"] { - height: 15px; - width: 340px; - border: 1px solid #dedede; - border-radius: 4px; - padding: 5px; - font-family: Tahoma, Arial; - font-size: 12px; -} +div.rightlist { + textarea { + height: 110px; + width: 350px; + border: 1px solid #dedede; + border-radius: 4px; + padding: 5px; + font-family: Tahoma, Geneva, Helvetica, sans-serif; + font-size: 12px; } + input { + &[type="text"], &[type="password"] { + height: 15px; + width: 350px; + border: 1px solid #dedede; + border-radius: 4px; + padding: 5px; + font-family: Tahoma, Geneva, Helvetica, sans-serif; + font-size: 12px; } } } /* Admin-members page */ -.right table div.img { - float: left; -} +.right { + table { + div { + &.img { + float: left; } + &.radio { + float: left; + margin: 5px 0px 0px 0px; } + &.forimg, &.forradio { + float: left; + margin: 5px 0px 0px 5px; } } + span.niceCheck-main { + margin-top: 3px; } } + div { + &.admin-search, &.admin-role { + float: left; } + &.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, Geneva, Helvetica, sans-serif; + padding-left: 5px; } } } -.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; -} +article input { + &.gray { + color: #cfcfcf; } + &.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; -} + float: left; + padding-top: 1px; + margin-left: 5px; + 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; -} + width: 17px; + height: 17px; + display: inline-block; + cursor: pointer; + background: image-url("radio.png"); + overflow: hidden; } + .radioChecked { - background-position: 0 -17px; -} + background-position: 0 -17px; } + .niceRadio input { - margin-left: -18px; -} + margin-left: -18px; } .sel80 { - width: 200px; - padding-bottom: 4px; - text-align: left; -} -.lineForm, -.lineForm3 { - margin-bottom: 0px; -} + width: 200px; + padding-bottom: 4px; + text-align: left; + &.aside { + width: 185px; } } + +.lineForm, .lineForm3 { + margin-bottom: 0px; } .niceCheck { - width: 17px; - height: 17px; - display: inline-block; - cursor: pointer; - background: image-url("checkbox.png"); -} -.niceCheck input { - display: none; -} + width: 17px; + height: 17px; + display: inline-block; + cursor: pointer; + background: image-url("checkbox.png"); + 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; -} + width: 18px; + height: 18px; + display: inline-block; + cursor: pointer; + background: image-url("checkbox-main.png"); + 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; -} +section { + &.left { + float: left; + text-align: left; + width: 230px; + margin-left: 250px; } + &.right { + float: right; + text-align: left; + width: 200px; + margin-right: 250px; } + .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; -} + width: 100%; + margin-top: 17px; + 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; } + &.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; } + &.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; + div { + &.body { + float: left; + text-align: left; } + &.code { + float: right; + margin: -7px 0px 0px 640px; + position: absolute; } } } + &.code div { + &.top { + width: 90px; + height: 22px; + border: 1px solid #9dbcd5; + background: #cbdeef; } + &.bottom { + width: 90px; + text-align: right; } + &.left { + float: left; + width: 13px; + height: 13px; + padding-left: 2px; + padding-top: 4px; } + &.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; } } + &.image { + float: left; } } } -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, .last-commit div.image { - float: left; -} +.last-commit div.image { + float: left; } article .date-block div.text, .last-commit div.text { - float: left; - padding-left: 10px; - font-size: 12px; -} + float: left; + padding-left: 10px; + font-size: 12px; } article .date-block div.text span.name, .last-commit span.name { - font-weight: 700; -} + font-weight: 700; } article .date-block div.text span.date, .last-commit span.date { - font-size: 11px; -} + font-size: 11px; } article .date-block div.text span.subject img, .last-commit span.subject img { - cursor: pointer; -} + cursor: pointer; } article .date-block div.fulltext, .last-commit div.fulltext { - font-size: 12px; - padding-top: 10px; - display: none; - /*width: 640px;*/ -} - + 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; -} + 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; + p { + margin: 0; + padding: 0; + color: #477CAE; } } -article div.year p{ - margin: 0; - padding: 0; - color: #477CAE; -} +div.pagination.tmargin30 { + margin-top: 30px; } /* Create issue */ .bordered.nopadding, .right.nopadding { - padding-top: 0px; -} + padding-top: 0px; } p.tmargin5 { - margin-top: 5px; -} + margin-top: 5px; } aside input { - height: 25px; - width: 170px; - border: 1px solid #dedede; - border-radius: 4px; - padding: 0px 5px; - font-family: Tahoma, Arial; - font-size: 12px; - margin-bottom: 5px; - margin-top: 5px; -} + height: 25px; + width: 170px; + border: 1px solid #dedede; + border-radius: 4px; + padding: 0px 5px; + font-family: Tahoma, Geneva, Helvetica, sans-serif; + font-size: 12px; + margin-bottom: 5px; + margin-top: 5px; + &.gray { + color: #cfcfcf; } + &.black { + color: #333333; } } -aside input.gray { - color: #cfcfcf; -} +div { + &.people { + width: 202px; + clear: both; + cursor: pointer; + margin-left: -15px; + padding: 5px; + padding-left: 10px; + padding-right: 0px; + div.avatar { + float: left; + padding-left: 5px; } } + &.avatar { + float: left; + padding-left: 5px; } + &.people div.name, &.name { + padding-top: 4px; + padding-left: 3px; + float: left; } } -aside input.black { - color: #333333; -} +aside div.select { + background: #dcecfa; } -div.people { - width: 202px; - clear: both; - cursor: pointer; - margin-left: -15px; - padding: 5px; - padding-left: 10px; - padding-right: 0px; -} +div { + &.people:hover { + background: #dcecfa; } + &.label { + &.selected { + width: 196px; + clear: both; + cursor: pointer; + margin-left: -15px; + padding: 5px; + padding-left: 15px; + &:hover { + background: #dcecfa; } } + width: 196px; + clear: both; + cursor: pointer; + margin-left: -15px; + padding: 5px; + padding-left: 15px; + &:hover { + background: #dcecfa; } } + &.labeltext.selected { + float: left; + margin-left: 2px; + font-size: 12px; + margin-top: 0px; + padding-left: 3px; + padding-right: 3px; + color: #FFF; + padding-top: 1px; + padding-bottom: 1px; + border-radius: 2px; } + &.label div.flag { + height: 11px; + width: 3px; + background: #39b54a; + float: left; + margin-top: 3px; + margin-right: 3px; + border-radius: 2px; } } -div.people div.avatar, div.avatar { - float: left; - padding-left: 5px; -} - -div.people div.name, div.name { - padding-top: 4px; - padding-left: 3px; - float: left; -} - -aside div.select, div.people:hover { - background: #dcecfa; -} - -div.label.selected, div.label { - width: 196px; - clear: both; - cursor: pointer; - margin-left: -15px; - padding: 5px; - padding-left: 15px; -} - -div.label.selected:hover, div.label:hover { - background: #dcecfa; -} - -div.labeltext.selected { - float: left; - margin-left: 2px; - font-size: 12px; - margin-top: 0px; - padding-left: 3px; - padding-right: 3px; - color: #FFF; - padding-top: 1px; - padding-bottom: 1px; - border-radius: 2px; -} - -div.label div.flag { - height: 11px; - width: 3px; - background: #39b54a; - float: left; - margin-top: 3px; - margin-right: 3px; - border-radius: 2px; -} - -.right span.small-text { - font-size: 11px; -} - -.right .bpadding10, .all .bpadding10 { - padding-bottom: 10px; -} +.right { + span.small-text { + font-size: 11px; } + .bpadding10 { + padding-bottom: 10px; } } +.all .bpadding10 { + padding-bottom: 10px; } /* Issue page */ -aside div.switcher, aside div.switcher-off { - height: 23px; - width: 194px; - background: image-url("switch-on.png"); - color: #FFF; - font-size: 12px; - cursor: pointer; -} - -aside div.switcher-off { - background: image-url("switch-off.png"); -} - -aside div.switcher div.swleft, aside div.switcher-off div.swleft { - float: left; - width: 96px; - text-align: center; - padding-top: 3px; -} - -aside div.switcher div.swright, aside div.switcher-off div.swright { - float: right; - width: 96px; - text-align: center; - padding-top: 3px; -} +aside div { + &.switcher { + height: 23px; + width: 194px; + background: image-url("switch-on.png"); + color: #FFF; + font-size: 12px; + cursor: pointer; } + &.switcher-off { + height: 23px; + width: 194px; + background: image-url("switch-on.png"); + color: #FFF; + font-size: 12px; + cursor: pointer; + background: image-url("switch-off.png"); } + &.switcher div.swleft, &.switcher-off div.swleft { + float: left; + width: 96px; + text-align: center; + padding-top: 3px; } + &.switcher div.swright, &.switcher-off div.swright { + float: right; + width: 96px; + text-align: center; + padding-top: 3px; } } p.non-view { - display: none; -} + display: none; } -div.non-view { - display: none; -} +div { + &.non-view { + display: none; } + &.view { + display: block; } + &.nopointer { + cursor: default; + &:hover { + background: none; } } } -div.view { - display: block; -} +a.button.tmargin10, input[type="submit"].tmargin10 { + margin-top: 10px; } -div.nopointer { - cursor: default; -} +h3 { + &.tmargin0 { + margin-top: 0px; } + &.bmargin10 { + margin-bottom: 10px; } } -div.nopointer:hover { - background: none; -} +.right div { + &.comment { + text-align: left; + border: 1px solid #b3cce0; + -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; + width: 631px; + background: #dcecfa; + div { + &.issue-left { + float: left; + font-size: 12px; + margin-top: 4px; } + &.issue-right { + float: right; } } + textarea { + height: 110px; + width: 618px; + border: 1px solid #dedede; + border-radius: 4px; + padding: 5px; + font-family: Tahoma, Geneva, Helvetica, sans-serif; + font-size: 12px; + color: #575756; + margin: 10px 0px; } } + &.comment-closed { + display: none; + div { + &.state { + float: left; + padding: 2px 0px 2px 0px; + background: #bd4d40; + color: #FFF; + font-size: 12px; + border: 1px solid #924f52; + -moz-border-radius-topleft: 2px; + -moz-border-radius-topright: 0px; + -moz-border-radius-bottomright: 0px; + -moz-border-radius-bottomleft: 2px; + -webkit-border-radius: 2px 0px 0px 2px; + border-radius: 2px 0px 0px 2px; + width: 80px; + text-align: center; } + &.text { + border: 1px solid #dce6ed; + -moz-border-radius-topleft: 2px; + -moz-border-radius-topright: 2px; + -moz-border-radius-bottomright: 2px; + -moz-border-radius-bottomleft: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + float: left; + width: 561px; } + &.avatar { + float: left; + padding: 5px; } + &.name { + float: left; + font-size: 12px; + padding-top: 9px; } } } } -a.button.tmargin10 { - margin-top: 10px; -} - -h3.tmargin0 { - margin-top: 0px; -} - -h3.bmargin10 { - margin-bottom: 10px; -} - -.right div.comment { - text-align: left; - border: 1px solid #b3cce0; - -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; - width: 631px; - background: #dcecfa; -} - -.right div.comment div.issue-left { - float: left; - font-size: 12px; - margin-top: 4px; -} - -.right div.comment div.issue-right { - float: right; -} - -.right div.comment textarea { - height: 110px; - width: 618px; - border: 1px solid #dedede; - border-radius: 4px; - padding: 5px; - font-family: Tahoma, Arial; - font-size: 12px; - color: #575756; - margin: 10px 0px; -} - -.right div.comment-closed { - display: none; -} - -.right div.comment-closed div.state { - float: left; - padding: 2px 0px 2px 0px; - background: #bd4d40; - color: #FFF; - font-size: 12px; - border: 1px solid #924f52; - -moz-border-radius-topleft: 2px; - -moz-border-radius-topright: 0px; - -moz-border-radius-bottomright: 0px; - -moz-border-radius-bottomleft: 2px; - -webkit-border-radius: 2px 0px 0px 2px; - border-radius: 2px 0px 0px 2px; - width: 80px; - text-align: center; -} - -.right div.comment-closed div.text { - border: 1px solid #dce6ed; - -moz-border-radius-topleft: 2px; - -moz-border-radius-topright: 2px; - -moz-border-radius-bottomright: 2px; - -moz-border-radius-bottomleft: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; - float: left; - width: 561px; -} - -.right div.comment-closed div.avatar { - float: left; - padding: 5px; -} - -.right div.comment-closed div.name { - float: left; - font-size: 12px; - padding-top: 9px; -} - -div.desription-top { - background: #dcecfa; - font-size: 12px; - color: #575756; - border: 1px solid #a9c6dd; - height: 38px; - width: 100%; - margin-bottom: 20px; -} - -div.desription-top div.img { - float: left; - padding-left: 10px; - margin-top: 14px; -} - -div.desription-top div.name { - float: left; - margin-top: 5px; - margin-left: 10px; - background: #FFF; - border: 1px solid #d1deeb; - height: 21px; - width: auto; - color: #575756; - padding-right: 5px; - padding-left: 5px; - padding-top: 5px; -} - -div.desription-top div.role { - float: left; - margin-top: 11px; - margin-left: 10px; - font-size: 11px; -} - -div.desription-top div.fork { - float: right; - margin-top: 5px; - margin-right: 10px; -} -div.desription-top div.fork p { - float: right; - margin-top: 5px; - margin-right: 2px; -} - - - -.all div.description { - text-align: left; -} - -.all div.description h3{ - color: #575756; - font-weight: 700; - font-size: 14px; - margin-bottom: 5px; - margin-top: 5px; -} - -.all div.description p{ - font-size: 12px; - padding: 0; - margin: 0; - color: #575756; -} - -.all div.last-commit { - 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: 10px 0px; -} +div { + &.desription-top { + background: #dcecfa; + font-size: 12px; + color: #575756; + border: 1px solid #a9c6dd; + height: 38px; + width: 100%; + margin-bottom: 20px; + div.img { + float: left; + padding-left: 10px; + margin-top: 14px; } + input.name { + float: left; + margin-top: 5px; + margin-left: 10px; + background: #FFF; + border: 1px solid #d1deeb; + height: 21px; + width: auto; + color: #575756; + font-size: 12px; + width: 215px; + padding: 2px 5px 3px; } + div.role { + float: left; + margin-top: 11px; + margin-left: 10px; + font-size: 11px; } } + &.fork { + float: right; + margin-top: 5px; + margin-right: 10px; + p { + float: right; + margin-top: 5px; + margin-right: 2px; } + &.rmargin0 { + margin-right: 0px; } } } +.all div { + &.description { + text-align: left; + h3 { + color: #575756; + font-weight: 700; + font-size: 14px; + margin-bottom: 5px; + margin-top: 5px; } + p { + font-size: 12px; + padding: 0; + margin: 0; + color: #575756; } } + &.last-commit { + 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: 10px 0px; } } /* Project main page */ -table.tablesorter.project .th1 { - width: 130px; - padding-left: 17px; -} - -table.tablesorter.project .th2 { - width: 110px; - padding-left: 17px; -} - -table.tablesorter.project .th3 { - width: 450px; -} - -table.tablesorter.project .th4 { - padding-left: 17px; -} - -table.tablesorter.project div.name { - float: left; - margin-top: 0px; -} - -table.tablesorter.project div.pic { - float: left; - padding-right: 5px; -} +table.tablesorter.project { + .th1 { + width: 130px; + /*padding-left: 17px;*/ } + .th2 { + width: 110px; + /*padding-left: 17px;*/ } + .th3 { + width: 450px; } + .th4 { + /*padding-left: 17px;*/ } + div { + &.name { + float: left; + margin-top: 0px; } + &.pic { + float: left; + padding-right: 5px; } } } a.files-see { - color: #565657; - text-decoration: underline; -} + color: #565657; + text-decoration: underline; } -div.file { - border: 1px solid #dddddd; - margin-top: 10px; -} +div { + &.file { + border: 1px solid #dddddd; + margin-top: 10px; + div.top { + height: 28px; + background: #ededed; + -webkit-box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); + -moz-box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); + box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); + position: relative; + z-index: 99; + div { + &.l { + float: left; + margin: 6px 0px 0px 10px; } + &.r { + float: right; + margin: 6px 10px 0px 0px; } } } } + &.files div { + &.l { + float: left; + margin-bottom: 5px; } + &.r { + float: right; + display: none; } } + &.file { + margin-bottom: 10px; } } -div.file div.top { - height: 28px; - background: #ededed; - -webkit-box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); - -moz-box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); - box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2); - position: relative; - z-index: 99; -} +textarea.commit-message { + height: 60px; + width: 450px; + border: 1px solid #dedede; + border-radius: 4px; + padding: 5px; + font-family: Tahoma, Geneva, Helvetica, sans-serif; + font-size: 12px; + margin-top: 5px; } -div.file div.top div.l { - float: left; - margin: 6px 0px 0px 10px; -} +div { + &.files div.l p { + padding: 0; + margin: 5px 0px 0px 0px; } + &.gutter-new { + float: left; + border: 0 !important; + padding: 10px 5px 10px 0px; + font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; + background: #EDEDED; + width: 40px; + text-align: right; } } -div.file div.top div.r { - float: right; - margin: 6px 10px 0px 0px; -} - -div.files div.l { - float: left; - margin-bottom: 5px; -} - -div.files div.r { - float: right; - display: none; -} - -div.files div.l p{ - padding: 0; - margin: 5px 0px 0px 0px; -} +/* Code */ /* Tracker */ -table td.width18 { - width: 18px; -} - -table td.width135 { - width: 135px; -} - -table td.width145 { - width: 145px; -} - -table td.width30 { - width: 30px; -} - -table td.width30.right { - text-align: right; -} +table td { + &.width18 { + width: 18px; } + &.width135 { + width: 135px; } + &.width145 { + width: 145px; } + &.width30 { + width: 30px; + &.right { + text-align: right; } } } div.bordered.bpadding20 { - padding-bottom: 20px; -} + padding-bottom: 20px; } -table.tracker-lables td { - padding: 1px; -} - -table.tracker-lables div.label { - width: auto; - clear: both; - cursor: default; - margin-left: -15px; - padding: 5px; - padding-left: 15px; - text-align: left; -} - -table.tracker-lables div.label:hover { - background: none; -} +table.tracker-lables { + td { + padding: 1px; } + div.label { + width: auto; + clear: both; + cursor: default; + margin-left: -15px; + padding: 5px; + padding-left: 15px; + text-align: left; + &:hover { + background: none; } } } div.blue-switcher { - height: 19px; - width: 258px; - border: 1px solid #a0a0a1; - border-radius: 3px; - background-color: #575756; - color: #FFF; - -webkit-box-shadow: inset 0px 2px 5px 0px rgba(0, 0, 0, 0.3); - -moz-box-shadow: inset 0px 2px 5px 0px rgba(0, 0, 0, 0.3); - box-shadow: inset 0px 2px 5px 0px rgba(0, 0, 0, 0.3); - float: right; -} + height: 19px; + width: 258px; + border: 1px solid #a0a0a1; + border-radius: 3px; + background-color: #575756; + color: #FFF; + -webkit-box-shadow: inset 0px 2px 5px 0px rgba(0, 0, 0, 0.3); + -moz-box-shadow: inset 0px 2px 5px 0px rgba(0, 0, 0, 0.3); + box-shadow: inset 0px 2px 5px 0px rgba(0, 0, 0, 0.3); + float: right; + div { + &.open { + float: left; + padding: 1px 0px 2px 0px; + width: 128px; + text-align: center; + cursor: pointer; + position: relative; + z-index: 3; } + &.selected { + background-image: -webkit-gradient(linear, left top, left bottom, from(#619dd2), to(#125687)); + background-image: -webkit-linear-gradient(top, #619dd2, #125687); + background-image: -moz-linear-gradient(top, #619dd2, #125687); + background-image: -ms-linear-gradient(top, #619dd2, #125687); + background-image: -o-linear-gradient(top, #619dd2, #125687); + background-image: linear-gradient(top, #619dd2, #125687); + filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#619dd2', EndColorStr='#125687'); + border-radius: 2px; + height: 18px; + width: 128px; + -webkit-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.5); + box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.5); + position: absolute; + margin: 0px; + z-index: 2; } + &.closed { + float: right; + padding: 1px 0px 0px 0px; + width: 128px; + text-align: center; + cursor: pointer; + position: relative; + z-index: 3; } } } -div.blue-switcher div.open { - float: left; - padding: 1px 0px 2px 0px; - width: 128px; - text-align: center; - cursor: pointer; - position: relative; - z-index: 3; -} +table.tablesorter.tracker { + th.th1 { + width: 50px; } + td { + &.td0 { + width: 10px; + padding-right: 0px; } + &.td3 { + width: 120px; + padding-top: 10px; + div { + &.code { + height: 19px; + width: 15px; + background: #FFF; + color: #009fe3; + border: 1px solid #83d1f2; + font-size: 16px; + padding: 1px 0px 0px 5px; + float: left; + margin-right: 5px; + cursor: pointer; } + &.avatar { + float: left; + margin-right: 5px; + cursor: pointer; } + &.answers { + height: 20px; + background: #FFF; + color: #009fe3; + border: 1px solid #83d1f2; + font-size: 16px; + float: left; + cursor: pointer; + div { + &.pic { + float: left; + margin: 2px; } + &.count { + float: left; + margin: 0px 5px 0px 2px; } } } } } } + div.smalltext { + font-size: 11px; + color: #b0b0b1; + float: left; + margin-top: 3px; } } -div.blue-switcher div.selected { - background-image: -webkit-gradient(linear, left top, left bottom, from(#619dd2), to(#125687)); - background-image: -webkit-linear-gradient(top, #619dd2, #125687); - background-image: -moz-linear-gradient(top, #619dd2, #125687); - background-image: -ms-linear-gradient(top, #619dd2, #125687); - background-image: -o-linear-gradient(top, #619dd2, #125687); - background-image: linear-gradient(top, #619dd2, #125687); - filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#619dd2', EndColorStr='#125687'); - border-radius: 2px; - height: 18px; - width: 128px; - -webkit-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.5); - -moz-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.5); - box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.5); - position: absolute; - margin: 0px; - z-index: 2; - -} +div { + &.label { + &.selected.tracker { + width: auto; + clear: both; + cursor: default; + margin-left: 0px; + padding: 5px; + float: right; + margin-top: -6px; + &:hover { + background: none; } } + &.edit { + width: 196px; + clear: both; + cursor: default; + margin-left: -15px; + padding: 5px; + padding-left: 15px; + &:hover { + background: none; } } } + &.labeltext { + &.edit { + float: left; + margin-left: 2px; + font-size: 12px; + margin-top: 0px; + margin-bottom: 5px; + padding-left: 3px; + padding-right: 3px; + color: #FFF; + padding-top: 1px; + padding-bottom: 1px; + border-radius: 2px; + width: 175px; + cursor: default; + div { + &.text { + float: left; } + &.delete { + float: right; + cursor: pointer; + margin-top: 1px; } } } + a { + text-decoration: none; + color: #565657; } + &.edit a { + text-decoration: none; + color: #FFF; } } } -div.blue-switcher div.closed { - float: right; - padding: 1px 0px 0px 0px; - width: 128px; - text-align: center; - cursor: pointer; - position: relative; - z-index: 3; -} - -table.tablesorter.tracker th.th1{ - width: 50px; -} - -table.tablesorter.tracker td.td0{ - width: 10px; - padding-right: 0px; -} - -table.tablesorter.tracker td.td3{ - width: 120px; - padding-top: 10px; -} - -table.tablesorter.tracker td.td3 div.code { - height: 19px; - width: 15px; - background: #FFF; - color: #009fe3; - border: 1px solid #83d1f2; - font-size: 16px; - padding: 1px 0px 0px 5px; - float: left; - margin-right: 5px; - cursor: pointer; -} - -table.tablesorter.tracker td.td3 div.avatar { - float: left; - margin-right: 5px; - cursor: pointer; -} - -table.tablesorter.tracker td.td3 div.answers { - height: 20px; - background: #FFF; - color: #009fe3; - border: 1px solid #83d1f2; - font-size: 16px; - float: left; - cursor: pointer; -} - -table.tablesorter.tracker td.td3 div.answers div.pic { - float: left; - margin: 2px; -} - -table.tablesorter.tracker td.td3 div.answers div.count { - float: left; - margin: 0px 5px 0px 2px; -} - -table.tablesorter.tracker div.smalltext { - font-size: 11px; - color: #b0b0b1; - float: left; - margin-top: 3px; -} - - -div.label.selected.tracker { - width: auto; - clear: both; - cursor: default; - margin-left: 0px; - padding: 5px; - float: right; - margin-top: -6px; -} - -div.label.selected.tracker:hover { - background: none; -} - - -div.label.edit { - width: 196px; - clear: both; - cursor: default; - margin-left: -15px; - padding: 5px; - padding-left: 15px; -} - -div.label.edit:hover{ - background: none; -} - -div.labeltext.edit { - float: left; - margin-left: 2px; - font-size: 12px; - margin-top: 0px; - margin-bottom: 5px; - padding-left: 3px; - padding-right: 3px; - color: #FFF; - padding-top: 1px; - padding-bottom: 1px; - border-radius: 2px; - width: 175px; - cursor: default; -} - -div.labeltext.edit div.text { - float: left; -} - -div.labeltext.edit div.delete { - float: right; - cursor: pointer; - margin-top: 1px; -} - -aside div.colors { - margin: 10px 0px; -} - -aside div.colors div.color { - float: left; - width: 22px; - height: 22px; - margin-right: 5px; - border-radius: 4px; - -webkit-box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.8); - -moz-box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.8); - box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.8); - cursor: pointer; -} - -aside div.colors div.choose { - height: 14px; - width: 14px; - padding: 4px; -} - -aside div.colors div.choose.selected, aside div.colors div.choose:hover { - background: image-url("choose.png") no-repeat 50% 50%; - height: 14px; - width: 14px; - padding: 4px; -} - -aside div.lefter { - float: left; -} - -aside div.righter { - float: right; - margin-right: 15px; -} +aside div { + &.colors { + margin: 10px 0px; + div { + &.color { + float: left; + width: 22px; + height: 22px; + margin-right: 5px; + border-radius: 4px; + -webkit-box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.8); + -moz-box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.8); + box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.8); + cursor: pointer; } + &.choose { + height: 14px; + width: 14px; + padding: 4px; + &.selected, &:hover { + background: image-url("choose.png") no-repeat 50% 50%; + height: 14px; + width: 14px; + padding: 4px; } } } } + &.lefter { + float: left; } + &.righter { + float: right; + margin-right: 15px; } } tr.label-active { - background: #DDD; - border-radius: 3px; -} + background: #DDD; + border-radius: 3px; } /* Wiki */ span.wiki-gray { - color: #b0b0b1; -} + color: #b0b0b1; } .right table.wiki { - border: 1px solid #e2e2e2; - border-bottom: none; - margin-top: 10px; -} - -.right table.wiki td { - border-bottom: 1px solid #e2e2e2; - padding: 8px; -} - -.right table.wiki tr.history td.td1{ - width: 5px; -} - -.right table.wiki tr.history td.td2{ - width: 180px; -} + border: 1px solid #e2e2e2; + border-bottom: none; + margin-top: 10px; + td { + border-bottom: 1px solid #e2e2e2; + padding: 8px; } + tr.history td { + &.td1 { + width: 5px; } + &.td2 { + width: 180px; } } } a.button.rigth { - float: right; -} + float: right; } div.r { - float: right; - margin-left: 10px; -} + float: right; + margin-left: 10px; } h3.wiki { - color: #477cae; - font-size: 16px; -} + color: #477cae; + font-size: 16px; } a.button.width100 { - width: 100px; -} + width: 100px; } -.div-tracker-lables { - margin: 2px 13px 2px 0px; - cursor: pointer; - border-radius: 4px; -} +.div-tracker-labels { + margin: 2px 13px 2px 0px; + cursor: pointer; + border-radius: 4px; } .div-label-left { - float: left; - width: 150px; -} + float: left; + width: 150px; } .div-label-right { - float: right; - width: 30px; - text-align: right; - padding-top: 4px; - padding-right: 3px; -} + float: right; + width: 30px; + text-align: right; + padding-top: 4px; + padding-right: 3px; } div.div-label-left div.label { - width: auto; - clear: both; - margin-left: -15px; - padding: 5px; - padding-left: 15px; - text-align: left; -} + width: auto; + clear: both; + margin-left: -15px; + padding: 5px; + padding-left: 15px; + text-align: left; + &:hover { + background: none; } } -div.div-label-left div.label:hover { - background: none; -} +/* Monitoring */ + +aside div.table { + margin-top: 5px; } + +h3.small { + font-size: 12px; + margin: 0px; + padding: 3px 0px; } + +table.tablesorter th.lpadding16 { + padding-left: 16px; } + +div.right.slim { + padding: 5px 14px 40px; + width: 695px; } + +img.delete-row { + cursor: pointer; } + +/* Create group */ + +div { + &.right-error { + float: left; + width: 369px; + height: 59px; + background: image-url("error-groups.png"); + margin: 0px 0px 5px -3px; + text-align: center; + p { + margin: 0; + padding: 27px 0px 0px 0px; } } + &.rightlist.nomargin { + margin: 0; } } + +article div { + &.rightlist input.error { + border: 1px solid #bd4d40; + -webkit-box-shadow: 0px 0px 2px 0px rgba(189, 77, 64, 1); + -moz-box-shadow: 0px 0px 2px 0px rgba(189, 77, 64, 1); + box-shadow: 0px 0px 2px 0px rgba(189, 77, 64, 1); } + &.groups-profile { + float: left; + a { + margin: 0px 0px 0px 5px; } + img { + margin: 2px 0px 0px 0px; } } } + +/* Group pages */ + +table.tablesorter { + &.group-list th.th2 { + width: 540px; } + &.create-platform th.th1 { + /*padding-left: 17px;*/ + width: 120px; } } + +/* Platform */ + +div.right div.left { + float: left; + margin-right: 5px; } + +table.tablesorter { + &.platform-products { + th.th1 { + /*padding-left: 17px;*/ + width: 560px; } + td.td2 { + text-align: center; } } + &.platform-repos { + th { + &.th1 { + /*padding-left: 17px;*/ + width: 480px; } + &.th2 { + /*padding-left: 17px;*/ + width: 80px; } } + td.td3 { + text-align: center; } } } + +div.new-owner div { + &.field { + float: left; + margin-right: 10px; + input { + width: 230px; } } + &.search { + float: left; } } + +.tpadding10 { + padding-top: 10px; } + +article div.all div.hr { + border-bottom: 1px solid #dedede; + width: 565px; + padding-top: 30px; + margin-bottom: 30px; } + +table.tablesorter.platform-product-main th { + &.th1 { + /*padding-left: 17px;*/ + width: 60px; } + &.th2 { + /*padding-left: 17px;*/ + width: 400px; } + &.th3 { + padding-left: 0px; } + &.th4 { + /*padding-left: 17px;*/ + width: 150px; } } + +div.right.rpadding0 { + padding-right: 0px; } + +article div.loadFile div { + &.btn { + float: left; } + &.name { + float: left; + margin-left: 20px; + padding-top: 4px; } } + +/* Profile */ + +.bpadding10 { + padding-bottom: 10px; } + +article div.rightlist div.load { + float: left; + margin-left: 40px; } + +.notify { + border: 1px solid #c86b60; + background: #f4e1df; + border-radius: 4px; + width: 100%; + margin-top: 20px; + p { + padding: 5px 10px; } } + +/* Pagination */ + +div.pagination { + em { + font-style: normal; + border: 1px solid #dddddd; + border-radius: 1px; + background: #ededed; + padding: 3px 7px; } + span, a { + border: 1px solid #dddddd; + border-radius: 1px; + background: #ededed; + padding: 3px 7px; } + em.current { + background: #d5e7f9; + border: 1px solid #c1daed; } + a { + color: #4c90d0; } } + +/*404*/ + +article div.all.error404 { + background: image-url("404.png") no-repeat 59% 0; + height: 500px; + text-align: center; + h1 { + margin: 0; + padding: 0; + margin-top: 165px; + font-size: 48px; + font-weight: normal; + span { + color: #4496d0; } } + h2 { + margin: 0; + padding: 0; + margin-top: 5px; + font-size: 18px; + font-weight: normal; } + p { + margin: 0 auto; + padding: 0; + text-align: center; + font-size: 14px; + &.pages { + margin-top: 72px; + width: 280px; } + &.search { + margin-top: 80px; + width: 230px; } } } \ No newline at end of file From 99e3bbb762c9a9c851be69172440bc4e259791b2 Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Tue, 28 Feb 2012 21:41:47 +0600 Subject: [PATCH 15/18] [refs #194] update issue content --- app/assets/javascripts/tracker.js | 24 ++++++++++++++++++++++++ app/controllers/issues_controller.rb | 8 ++++++-- app/views/issues/show.html.haml | 14 ++++++++++++-- 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/tracker.js b/app/assets/javascripts/tracker.js index 8e9d79940..c2ce9a81d 100644 --- a/app/assets/javascripts/tracker.js +++ b/app/assets/javascripts/tracker.js @@ -205,4 +205,28 @@ $(document).ready(function() { return false; }); + $('#edit_issue_content').live('click', function() { + $('.edit_form.issue').fadeIn('slow'); + $(this).fadeOut('slow'); + }); + + $('.edit_form.issue').live('submit', function() { + var form = $(this); + $.ajax({ + type: 'POST', + url: form.attr("action"), + data: form.serialize(), + success: function(data){ + form.fadeOut('slow'); + $('#edit_issue_content').fadeIn('slow'); + $('h3.issue_title').html(form.find('#issue_title').attr('value')); + $('.fulltext.view.issue_body').html(form.find('#issue_body').attr('value')); + }, + error: function(data){ + alert('error') // TODO remove + } + }); + return false; + }); + }); diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 15af3a55d..2d3f13cf5 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -65,9 +65,13 @@ class IssuesController < ApplicationController @issue.set_close(current_user) if status == 'closed' @issue.set_open if status == 'open' status = 200 if @issue.save + render action, :status => (status || 500), :layout => false + else + @issue.title = params[:issue][:title] + @issue.body = params[:issue][:body] + status = 200 if @issue.save + render :nothing => true, :status => (status || 500), :layout => false end - - render action, :status => (status || 500), :layout => false end def destroy diff --git a/app/views/issues/show.html.haml b/app/views/issues/show.html.haml index fca926f2c..e8e508867 100644 --- a/app/views/issues/show.html.haml +++ b/app/views/issues/show.html.haml @@ -2,7 +2,7 @@ -render :partial => 'issues/create_sidebar' -content_for :right_nopadding do dummy -%h3=@issue.title +%h3.issue_title=@issue.title .activity .top .image @@ -13,8 +13,18 @@ %span.date=@issue.created_at.to_s(:long) %br/ .both - .fulltext.view=@issue.body + .fulltext.view.issue_body=@issue.body .both +%br +- if can? :write, @issue.project + =link_to t('layout.edit'), '#', :id => 'edit_issue_content', :class => 'button' + =form_for :issue, :url => [@project, @issue], :method => :put, :html => { :class => 'edit_form issue', :style => 'display:none;' } do |f| + .leftlist= t('activerecord.attributes.issue.title') + ':' + .rightlist= f.text_field :title + .leftlist= t('activerecord.attributes.issue.body') + ':' + .rightlist= f.text_area :body + .both + =f.submit t('layout.update'), :id => 'update_issue_content' .hr =render :partial => 'issues/status' From c4719f12daad437430a169c99b012f9328a1ac0d Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Tue, 28 Feb 2012 22:32:36 +0600 Subject: [PATCH 16/18] [refs #194] some change in the issue managing --- app/assets/javascripts/tracker.js | 9 +++++-- app/assets/stylesheets/custom.scss | 2 +- app/assets/stylesheets/main.scss | 42 +++++++++++++++--------------- app/views/issues/show.html.haml | 1 + config/locales/issues.en.yml | 1 + config/locales/issues.ru.yml | 1 + 6 files changed, 32 insertions(+), 24 deletions(-) diff --git a/app/assets/javascripts/tracker.js b/app/assets/javascripts/tracker.js index c2ce9a81d..9b6fe05eb 100644 --- a/app/assets/javascripts/tracker.js +++ b/app/assets/javascripts/tracker.js @@ -206,8 +206,13 @@ $(document).ready(function() { }); $('#edit_issue_content').live('click', function() { - $('.edit_form.issue').fadeIn('slow'); - $(this).fadeOut('slow'); + $('.edit_form.issue').fadeIn('fast'); + $(this).fadeOut('fast'); + }); + + $('#cancel_edit_issue_content').live('click', function() { + $('.edit_form.issue').fadeOut('fast'); + $('#edit_issue_content').fadeIn('fast'); }); $('.edit_form.issue').live('submit', function() { diff --git a/app/assets/stylesheets/custom.scss b/app/assets/stylesheets/custom.scss index cdfc7af2b..f77220532 100644 --- a/app/assets/stylesheets/custom.scss +++ b/app/assets/stylesheets/custom.scss @@ -44,7 +44,7 @@ article div.messages div.activity { } article div.activity .top div.image { - position: absolute; + //position: absolute; // TODO broken issue page float: left; width: 40px; height: 40px; diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index 23180b6cf..c10bc0a48 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -3,7 +3,7 @@ html, body { padding: 0; font-family: Tahoma, Geneva, Helvetica, sans-serif; color: #565657; - background: #1f60a1 url("../pics/bg.png") repeat-x; + background: #1f60a1 image-url("bg.png") repeat-x; min-width: 940px; min-height: 600px; text-align: center; @@ -33,7 +33,7 @@ a img { background: #FFF; min-height: 92%; &.columns { - background: white url("../pics/page-bg.png") repeat-y; } } + background: white image-url("page-bg.png") repeat-y; } } .both { clear: both; } @@ -48,17 +48,17 @@ header { z-index: 1000; div { &.left { - background: url("../pics/top-left.png"); + background: image-url("top-left.png"); height: 46px; width: 14px; float: left; } &.middle { - background: url("../pics/top-middle.png"); + background: image-url("top-middle.png"); float: left; height: 46px; width: 912px; } &.right { - background: url("../pics/top-right.png"); + background: image-url("top-right.png"); height: 46px; width: 14px; float: right; } } @@ -83,7 +83,7 @@ header { &.first { padding-left: 45px; } &.active { - background: url("../pics/menu-hover.png") repeat-x; } } } } } + background: image-url("menu-hover.png") repeat-x; } } } } } div { &.logo { float: left; @@ -105,7 +105,7 @@ header { border: 1px solid #7691aa; div { &.pic { - background: url("../pics/search-button.png"); + background: image-url("search-button.png"); height: 22px; width: 24px; float: left; } @@ -129,7 +129,7 @@ header { padding: 6px 10px 10px 10px; } &.information div { &.active { - background: url("../pics/menu-hover.png") repeat-x; } + background: image-url("menu-hover.png") repeat-x; } &.user { float: left; margin-left: 14px; } } @@ -148,7 +148,7 @@ header { &.droplist-wrap { margin: -4px 0px 0px 0px; } &.droplist { - background: url("../pics/bg-droplist.png") repeat-x; + 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); @@ -222,7 +222,7 @@ header { height: 34px; padding: 0px 20px 6px 20px; &.active { - background: url("../pics/submenu-hover.png") repeat-x; } + background: image-url("submenu-hover.png") repeat-x; } &:hover { color: #2b6daf; } } } } } } @@ -304,9 +304,9 @@ div { margin: 3px 0px 0px 3px; cursor: pointer; } &.expand-gray-down { - background: url("../pics/expand-gray.png") no-repeat; } + background: image-url("expand-gray.png") no-repeat; } &.expand-gray-up { - background: url("../pics/expand-gray2.png") no-repeat; } } + background: image-url("expand-gray2.png") no-repeat; } } article { a { @@ -682,7 +682,7 @@ article input { height: 17px; display: inline-block; cursor: pointer; - background: url("../pics/radio.png"); + background: image-url("radio.png"); overflow: hidden; } .radioChecked { @@ -706,7 +706,7 @@ article input { height: 17px; display: inline-block; cursor: pointer; - background: url("../pics/checkbox.png"); + background: image-url("checkbox.png"); input { display: none; } } @@ -715,7 +715,7 @@ article input { height: 18px; display: inline-block; cursor: pointer; - background: url("../pics/checkbox-main.png"); + background: image-url("checkbox-main.png"); input { display: none; } } @@ -965,18 +965,18 @@ aside div { &.switcher { height: 23px; width: 194px; - background: url("../pics/switch-on.png"); + background: image-url("switch-on.png"); color: #FFF; font-size: 12px; cursor: pointer; } &.switcher-off { height: 23px; width: 194px; - background: url("../pics/switch-on.png"); + background: image-url("switch-on.png"); color: #FFF; font-size: 12px; cursor: pointer; - background: url("../pics/switch-off.png"); } + background: image-url("switch-off.png"); } &.switcher div.swleft, &.switcher-off div.swleft { float: left; width: 96px; @@ -1415,7 +1415,7 @@ aside div { width: 14px; padding: 4px; &.selected, &:hover { - background: url("../pics/choose.png") no-repeat 50% 50%; + background: image-url("choose.png") no-repeat 50% 50%; height: 14px; width: 14px; padding: 4px; } } } } @@ -1514,7 +1514,7 @@ div { float: left; width: 369px; height: 59px; - background: url("../pics/error-groups.png"); + background: image-url("error-groups.png"); margin: 0px 0px 5px -3px; text-align: center; p { @@ -1652,7 +1652,7 @@ div.pagination { /*404*/ article div.all.error404 { - background: url("../pics/404.png") no-repeat 59% 0; + background: image-url("404.png") no-repeat 59% 0; height: 500px; text-align: center; h1 { diff --git a/app/views/issues/show.html.haml b/app/views/issues/show.html.haml index e8e508867..d50d14417 100644 --- a/app/views/issues/show.html.haml +++ b/app/views/issues/show.html.haml @@ -25,6 +25,7 @@ .rightlist= f.text_area :body .both =f.submit t('layout.update'), :id => 'update_issue_content' + =link_to t('layout.issues.cancel_button'), '#', :id => 'cancel_edit_issue_content', :class => 'button' .hr =render :partial => 'issues/status' diff --git a/config/locales/issues.en.yml b/config/locales/issues.en.yml index 39a8dd365..bc42a1092 100644 --- a/config/locales/issues.en.yml +++ b/config/locales/issues.en.yml @@ -48,6 +48,7 @@ en: choose_user_on_left: Choose executor on the left choose_labels_on_left: Choose labels on the left at: at + cancel_button: Cancel flash: issue: diff --git a/config/locales/issues.ru.yml b/config/locales/issues.ru.yml index 827af86bc..fc70030c2 100644 --- a/config/locales/issues.ru.yml +++ b/config/locales/issues.ru.yml @@ -48,6 +48,7 @@ ru: choose_user_on_left: выберите исполнителя слева choose_labels_on_left: выберите метки слева at: в + cancel_button: Отменить flash: issue: From e83e19ea5055be54150cee77a2d271fbdd9a66b8 Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Tue, 28 Feb 2012 22:36:29 +0600 Subject: [PATCH 17/18] [refs #194] remove duplicates --- app/assets/stylesheets/application.scss | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index 28e3caccb..509670963 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -1,8 +1,3 @@ @import "vendor"; @import "main"; @import "custom"; -@import "blue/style"; - -//= require main -//= require vendor -//= require custom From 2cb085992b8501e42989e155b8e4c357ee83472e Mon Sep 17 00:00:00 2001 From: Alexander Machehin Date: Tue, 28 Feb 2012 22:41:03 +0600 Subject: [PATCH 18/18] [refs #194] fix submenu for issues --- app/views/projects/_submenu.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/projects/_submenu.html.haml b/app/views/projects/_submenu.html.haml index ca8013f89..fe66f5995 100644 --- a/app/views/projects/_submenu.html.haml +++ b/app/views/projects/_submenu.html.haml @@ -8,7 +8,7 @@ %li= link_to t("project_menu.project"), project_path(@project), {:class => (act == :show && contr == :projects) ? 'active' : ''} %li= link_to t("project_menu.commits"), commits_path(@project), {:class => (act == :index && contr == :commits) ? 'active' : ''} %li= link_to t("project_menu.builds"), project_build_lists_path(@project), {:class => (act == :index && contr == :builds) ? 'active' : ''} - %li= link_to t("project_menu.tracker"), project_issues_path(@project), {:class => (act == :index && contr == :issues) ? 'active' : ''} + %li= link_to t("project_menu.tracker"), project_issues_path(@project), {:class => contr == :issues ? 'active' : ''} %li= link_to t("project_menu.wiki"), project_wiki_index_path(@project), {:class => contr == :wiki ? 'active' : ''} %li= link_to t("project_menu.readme"), "#" #pending %li= link_to t("project_menu.settings"), edit_project_path(@project), {:class => (act == :edit && contr == :projects) ? 'active' : ''}