From 0ce7ad57b74053be1525dd04ba444a0174073b3c Mon Sep 17 00:00:00 2001 From: timspin Date: Wed, 27 Jun 2012 00:08:13 +0600 Subject: [PATCH 001/357] Adds refs to gitolite conf with $ at the end --- lib/gitlab/gitolite.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/gitlab/gitolite.rb b/lib/gitlab/gitolite.rb index efb89165..5fb50f85 100644 --- a/lib/gitlab/gitolite.rb +++ b/lib/gitlab/gitolite.rb @@ -106,13 +106,13 @@ module Gitlab name_writers = project.repository_writers name_masters = project.repository_masters - pr_br = project.protected_branches.map(&:name).join(" ") + pr_br = project.protected_branches.map(&:name).join("$ ") repo.clean_permissions # Deny access to protected branches for writers unless name_writers.blank? || pr_br.blank? - repo.add_permission("-", pr_br, name_writers) + repo.add_permission("-", pr_br.strip + "$ ", name_writers) end # Add read permissions From 87d2a763e61241ea8f1919c1b0f87d4a23efa5d6 Mon Sep 17 00:00:00 2001 From: Dmitry Kalinkin Date: Wed, 27 Jun 2012 21:21:44 +0400 Subject: [PATCH 002/357] fix archiving prefix --- app/roles/repository.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/roles/repository.rb b/app/roles/repository.rb index f61c7782..8de92965 100644 --- a/app/roles/repository.rb +++ b/app/roles/repository.rb @@ -133,10 +133,13 @@ module Repository storage_path = File.join(Rails.root, "tmp", "repositories", self.code) file_path = File.join(storage_path, file_name) + # Put files into a directory before archiving + prefix = self.code + "/" + # Create file if not exists unless File.exists?(file_path) FileUtils.mkdir_p storage_path - file = self.repo.archive_to_file(ref, nil, file_path) + file = self.repo.archive_to_file(ref, prefix, file_path) end file_path From 44ec5579bd73ef1f712e3a116fab5492f19b48ec Mon Sep 17 00:00:00 2001 From: gliptak Date: Thu, 19 Jul 2012 12:39:02 -0300 Subject: [PATCH 003/357] Display configured git repository location on error page (this is partially addressing issue #1072) --- app/views/errors/gitolite.html.haml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/errors/gitolite.html.haml b/app/views/errors/gitolite.html.haml index ccee7573..3691b309 100644 --- a/app/views/errors/gitolite.html.haml +++ b/app/views/errors/gitolite.html.haml @@ -15,5 +15,5 @@ Try: %pre = preserve do - sudo chmod -R 770 /home/git/repositories/ - sudo chown -R git:git /home/git/repositories/ + sudo chmod -R 770 #{Gitlab.config.git_base_path} + sudo chown -R git:git #{Gitlab.config.git_base_path} \ No newline at end of file From b0a901fe0165b00ec00c9b8fa32344a413b316bf Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 16 Aug 2012 14:51:31 -0400 Subject: [PATCH 004/357] Add API for Milestones --- lib/api.rb | 1 + lib/api/milestones.rb | 93 +++++++++++++++++++++++++++++++++++++ spec/api/milestones_spec.rb | 53 +++++++++++++++++++++ 3 files changed, 147 insertions(+) create mode 100644 lib/api/milestones.rb create mode 100644 spec/api/milestones_spec.rb diff --git a/lib/api.rb b/lib/api.rb index 3ff3b383..be04701c 100644 --- a/lib/api.rb +++ b/lib/api.rb @@ -16,5 +16,6 @@ module Gitlab mount Users mount Projects mount Issues + mount Milestones end end diff --git a/lib/api/milestones.rb b/lib/api/milestones.rb new file mode 100644 index 00000000..3cdb7d9f --- /dev/null +++ b/lib/api/milestones.rb @@ -0,0 +1,93 @@ +module Gitlab + # Milestones API + class Milestones < Grape::API + before { authenticate! } + + resource :projects do + # Get a list of project milestones + # + # Parameters: + # id (required) - The ID or code name of a project + # Example Request: + # GET /projects/:id/milestones + get ":id/milestones" do + present user_project.milestones, with: Entities::Milestone + end + + # Get a single project milestone + # + # Parameters: + # id (required) - The ID or code name of a project + # milestone_id (required) - The ID of a project milestone + # Example Request: + # GET /projects/:id/milestones/:milestone_id + get ":id/milestones/:milestone_id" do + @milestone = user_project.milestones.find(params[:milestone_id]) + present @milestone, with: Entities::Milestone + end + + # Create a new project milestone + # + # Parameters: + # id (required) - The ID or code name of the project + # title (required) - The title of the milestone + # description (optional) - The description of the milestone + # due_date (optional) - The due date of the milestone + # closed (optional) - The status of the milestone + # Example Request: + # POST /projects/:id/milestones + post ":id/milestones" do + @milestone = user_project.milestones.new( + title: params[:title], + description: params[:description], + due_date: params[:due_date], + closed: (params[:closed] || false) + ) + + if @milestone.save + present @milestone, with: Entities::Milestone + else + error!({'message' => '404 Not found'}, 404) + end + end + + # Update an existing project milestone + # + # Parameters: + # id (required) - The ID or code name of a project + # title (optional) - The title of a milestone + # description (optional) - The description of a milestone + # due_date (optional) - The due date of a milestone + # closed (optional) - The status of the milestone + # Example Request: + # PUT /projects/:id/milestones/:milestone_id + put ":id/milestones/:milestone_id" do + @milestone = user_project.milestones.find(params[:milestone_id]) + parameters = { + title: (params[:title] || @milestone.title), + description: (params[:description] || @milestone.description), + due_date: (params[:due_date] || @milestone.due_date), + closed: (params[:closed] || @milestone.closed) + } + + if @milestone.update_attributes(parameters) + present @milestone, with: Entities::Milestone + else + error!({'message' => '404 Not found'}, 404) + end + end + + # Delete a project milestone + # + # Parameters: + # id (required) - The ID or code name of a project + # milestone_id (required) - The ID of a project milestone + # Example Request: + # DELETE /projects/:id/milestones/:milestone_id + delete ":id/milestones/:milestone_id" do + @milestone = user_project.milestones.find(params[:milestone_id]) + @milestone.destroy + end + end + end +end diff --git a/spec/api/milestones_spec.rb b/spec/api/milestones_spec.rb new file mode 100644 index 00000000..23f19ddd --- /dev/null +++ b/spec/api/milestones_spec.rb @@ -0,0 +1,53 @@ +require 'spec_helper' + +describe Gitlab::API do + let(:user) { Factory :user } + let!(:project) { Factory :project, owner: user } + let!(:milestone) { Factory :milestone, project: project } + + before { project.add_access(user, :read) } + + describe "GET /projects/:id/milestones" do + it "should return project milestones" do + get "#{api_prefix}/projects/#{project.code}/milestones?private_token=#{user.private_token}" + response.status.should == 200 + json_response.should be_an Array + json_response.first['title'].should == milestone.title + end + end + + describe "GET /projects/:id/milestones/:milestone_id" do + it "should return a project milestone by id" do + get "#{api_prefix}/projects/#{project.code}/milestones/#{milestone.id}?private_token=#{user.private_token}" + response.status.should == 200 + json_response['title'].should == milestone.title + end + end + + describe "POST /projects/:id/milestones" do + it "should create a new project milestone" do + post "#{api_prefix}/projects/#{project.code}/milestones?private_token=#{user.private_token}", + title: 'new milestone' + response.status.should == 201 + json_response['title'].should == 'new milestone' + json_response['description'].should be_nil + end + end + + describe "PUT /projects/:id/milestones/:milestone_id" do + it "should update a project milestone" do + put "#{api_prefix}/projects/#{project.code}/milestones/#{milestone.id}?private_token=#{user.private_token}", + title: 'updated title' + response.status.should == 200 + json_response['title'].should == 'updated title' + end + end + + describe "DELETE /projects/:id/milestones/:milestone_id" do + it "should delete a project milestone" do + expect { + delete "#{api_prefix}/projects/#{project.code}/milestones/#{milestone.id}?private_token=#{user.private_token}" + }.to change { Milestone.count }.by(-1) + end + end +end From a64aff2f1c1ddc77b00211489d74fbc23c0c2fa2 Mon Sep 17 00:00:00 2001 From: Florian Unglaub Date: Fri, 3 Aug 2012 17:27:39 +0200 Subject: [PATCH 005/357] Omniauth Support --- Gemfile | 4 ++ Gemfile.lock | 32 ++++++++++++++ app/assets/stylesheets/auth_methods.scss | 10 +++++ app/assets/stylesheets/main.scss | 26 ++++++------ .../omniauth_callbacks_controller.rb | 32 +++++++++++++- app/helpers/application_helper.rb | 11 +++-- app/views/devise/sessions/new.html.erb | 13 ++++-- app/views/layouts/profile.html.haml | 2 +- app/views/profile/password.html.haml | 40 ++++++++++++------ app/views/profile/show.html.haml | 7 +++ config/gitlab.yml.example | 22 +++++++--- config/initializers/1_settings.rb | 19 ++++++--- ...803152018_add_provider_and_uid_to_users.rb | 6 +++ db/schema.rb | 32 +++++++------- .../assets/images/authbuttons/github_32.png | Bin 0 -> 1931 bytes .../assets/images/authbuttons/github_64.png | Bin 0 -> 4447 bytes .../assets/images/authbuttons/google_32.png | Bin 0 -> 1615 bytes .../assets/images/authbuttons/google_64.png | Bin 0 -> 3446 bytes .../assets/images/authbuttons/twitter_32.png | Bin 0 -> 1439 bytes .../assets/images/authbuttons/twitter_64.png | Bin 0 -> 3384 bytes 20 files changed, 195 insertions(+), 61 deletions(-) create mode 100644 app/assets/stylesheets/auth_methods.scss create mode 100644 db/migrate/20120803152018_add_provider_and_uid_to_users.rb create mode 100644 vendor/assets/images/authbuttons/github_32.png create mode 100644 vendor/assets/images/authbuttons/github_64.png create mode 100644 vendor/assets/images/authbuttons/google_32.png create mode 100644 vendor/assets/images/authbuttons/google_64.png create mode 100644 vendor/assets/images/authbuttons/twitter_32.png create mode 100644 vendor/assets/images/authbuttons/twitter_64.png diff --git a/Gemfile b/Gemfile index d2a5728f..12610b65 100644 --- a/Gemfile +++ b/Gemfile @@ -8,6 +8,10 @@ gem "mysql2" # Auth gem "devise", "~> 2.1.0" +gem 'omniauth' +gem 'omniauth-google-oauth2' +gem 'omniauth-twitter' +gem 'omniauth-github' # GITLAB patched libs gem "grit", :git => "https://github.com/gitlabhq/grit.git", :ref => "7f35cb98ff17d534a07e3ce6ec3d580f67402837" diff --git a/Gemfile.lock b/Gemfile.lock index 7356c35e..b34f401b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -166,6 +166,8 @@ GEM eventmachine (0.12.10) execjs (1.4.0) multi_json (~> 1.0) + faraday (0.8.1) + multipart-post (~> 1.1) ffaker (1.14.0) ffi (1.0.11) foreman (0.47.0) @@ -191,6 +193,7 @@ GEM httparty (0.8.3) multi_json (~> 1.0) multi_xml + httpauth (0.1) i18n (0.6.0) journey (1.0.4) jquery-rails (2.0.2) @@ -200,6 +203,8 @@ GEM jquery-rails railties (>= 3.1.0) json (1.7.4) + jwt (0.1.5) + multi_json (>= 1.0) kaminari (0.13.0) actionpack (>= 3.0.0) activesupport (>= 3.0.0) @@ -223,12 +228,35 @@ GEM sprockets (~> 2.0) multi_json (1.3.6) multi_xml (0.5.1) + multipart-post (1.1.5) mysql2 (0.3.11) net-ldap (0.2.2) nokogiri (1.5.3) + oauth (0.4.6) + oauth2 (0.8.0) + faraday (~> 0.8) + httpauth (~> 0.1) + jwt (~> 0.1.4) + multi_json (~> 1.0) + rack (~> 1.2) omniauth (1.1.0) hashie (~> 1.2) rack + omniauth-github (1.0.1) + omniauth (~> 1.0) + omniauth-oauth2 (~> 1.0) + omniauth-google-oauth2 (0.1.13) + omniauth (~> 1.0) + omniauth-oauth2 + omniauth-oauth (1.0.1) + oauth + omniauth (~> 1.0) + omniauth-oauth2 (1.1.0) + oauth2 (~> 0.8.0) + omniauth (~> 1.0) + omniauth-twitter (0.0.12) + multi_json (~> 1.3) + omniauth-oauth (~> 1.0) orm_adapter (0.3.0) polyglot (0.3.3) posix-spawn (0.3.6) @@ -411,7 +439,11 @@ DEPENDENCIES minitest (>= 2.10) modernizr (= 2.5.3) mysql2 + omniauth + omniauth-github + omniauth-google-oauth2 omniauth-ldap! + omniauth-twitter pry pygments.rb! rack-mini-profiler diff --git a/app/assets/stylesheets/auth_methods.scss b/app/assets/stylesheets/auth_methods.scss new file mode 100644 index 00000000..ed6f5b0f --- /dev/null +++ b/app/assets/stylesheets/auth_methods.scss @@ -0,0 +1,10 @@ +.auth_methods { + &ul { + margin: 0; + text-align:center; + padding: 5px; + &li { + display: inline; + } + } +} diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index 5613f1e8..0e3de4e8 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -3,8 +3,8 @@ /** GITLAB colors **/ $text_color:#222; -$lite_text_color: #666; -$link_color:#2A79A3; +$lite_text_color: #666; +$link_color:#2A79A3; $active_link_color:#2FA0BB; $active_bg_color:#79C3E0; $active_bd_color: #2FA0BB; @@ -31,7 +31,7 @@ $hover: #FDF5D9; box-shadow: 0 0 3px #ddd; } -@mixin solid_shade { +@mixin solid_shade { -moz-box-shadow: 0 0 0 3px #eee; -webkit-box-shadow: 0 0 0 3px #eee; box-shadow: 0 0 0 3px #eee; @@ -73,21 +73,21 @@ $hover: #FDF5D9; /** - * Header of application. + * Header of application. * Contain application logo, search panel, profile icon */ @import "sections/header.scss"; /** - * Navigation menu of application. + * Navigation menu of application. * Panel with links to pages depends on project, profile or admin area */ @import "sections/nav.scss"; /** - * This file represent some UI that can be changed - * during web app restyle or theme select. - * + * This file represent some UI that can be changed + * during web app restyle or theme select. + * * Next items should be placed there * - link, button colors * - header restyles @@ -118,11 +118,11 @@ $hover: #FDF5D9; * Most of application styles placed here. * This file represent common UI that should not be changed between themes * or project restyling like form width or user avatar class or commit title - * + * * TODO: clean it */ @import "common.scss"; - +@import "auth_methods.scss"; /** * Styles related to specific part of app @@ -140,17 +140,17 @@ $hover: #FDF5D9; @import "ref_select.scss"; /** - * Code (files list) styles. Browsing project files there + * Code (files list) styles. Browsing project files there */ @import "sections/tree.scss"; /** - * This file represent notes(comments) styles + * This file represent notes(comments) styles */ @import "sections/notes.scss"; /** - * Devise styles + * Devise styles */ @import "sections/login.scss"; diff --git a/app/controllers/omniauth_callbacks_controller.rb b/app/controllers/omniauth_callbacks_controller.rb index d19931e9..84e578a3 100644 --- a/app/controllers/omniauth_callbacks_controller.rb +++ b/app/controllers/omniauth_callbacks_controller.rb @@ -9,7 +9,7 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController error ||= env["omniauth.error.type"].to_s error.to_s.humanize if error end - + def ldap # We only find ourselves here if the authentication to LDAP was successful. info = request.env["omniauth.auth"]["info"] @@ -20,4 +20,34 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController sign_in_and_redirect @user end + Settings.omniauth_providers.each do |provider| + define_method provider['name'] do + handle_omniauth + end + end + + private + + def handle_omniauth + oauth = request.env['omniauth.auth'] + provider, uid = oauth['provider'], oauth['uid'] + + if current_user + # Change a logged-in user's authentication method: + current_user.uid = uid + current_user.provider = provider + current_user.save + redirect_to profile_path + else + @user = User.find_by_provider_and_uid(provider, uid) + + if @user + sign_in_and_redirect @user + else + flash[:notice] = "There's no such user!" + redirect_to new_user_session_path + end + end + end + end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 51569b06..8a457cea 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -75,16 +75,16 @@ module ApplicationHelper end def show_last_push_widget?(event) - event && + event && event.last_push_to_non_root? && !event.rm_ref? && - event.project && + event.project && event.project.merge_requests_enabled end def tab_class(tab_key) active = case tab_key - + # Project Area when :wall; wall_tab? when :wiki; controller.controller_name == "wikis" @@ -123,4 +123,9 @@ module ApplicationHelper def hexdigest(string) Digest::SHA1.hexdigest string end + + def authbutton(provider, size = 64) + image_tag("authbuttons/#{provider.to_s.split('_').first}_#{size}.png", + alt: "Sign in with #{provider.to_s.titleize}" ) + end end diff --git a/app/views/devise/sessions/new.html.erb b/app/views/devise/sessions/new.html.erb index a0383866..6b334b87 100644 --- a/app/views/devise/sessions/new.html.erb +++ b/app/views/devise/sessions/new.html.erb @@ -14,10 +14,15 @@
<%= render :partial => "devise/shared/links" %>
<%- if devise_mapping.omniauthable? %> - <%- resource_class.omniauth_providers.each do |provider| %> -
- <%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider), :class => "btn primary" %>
- <% end -%> +
+
+
    + <%- resource_class.omniauth_providers.each do |provider| %> +
  • <%= link_to authbutton(provider), + omniauth_authorize_path(resource_name, provider) %>
  • + <% end -%> +
+
<% end -%> <% end %> diff --git a/app/views/layouts/profile.html.haml b/app/views/layouts/profile.html.haml index b624415d..810b346f 100644 --- a/app/views/layouts/profile.html.haml +++ b/app/views/layouts/profile.html.haml @@ -10,7 +10,7 @@ = link_to "Profile", profile_path %li{class: tab_class(:password)} - = link_to "Password", profile_password_path + = link_to "Authentication", profile_password_path %li{class: tab_class(:ssh_keys)} = link_to keys_path do diff --git a/app/views/profile/password.html.haml b/app/views/profile/password.html.haml index 257dacb1..1d4d468c 100644 --- a/app/views/profile/password.html.haml +++ b/app/views/profile/password.html.haml @@ -1,19 +1,31 @@ %h3.page_title Password %hr -= form_for @user, url: profile_password_path, method: :put do |f| - .data - %p.slead After successful password update you will be redirected to login page where you should login with new password - -if @user.errors.any? - .alert-message.block-message.error - %ul - - @user.errors.full_messages.each do |msg| - %li= msg - .clearfix - = f.label :password - .input= f.password_field :password - .clearfix - = f.label :password_confirmation - .input= f.password_field :password_confirmation += form_for @user, url: profile_password_path, method: :put do |f| + .row + .span7 + .data + %p.slead After successful password update you will be redirected to login page where you should login with new password + -if @user.errors.any? + .alert-message.block-message.error + %ul + - @user.errors.full_messages.each do |msg| + %li= msg + + .clearfix + = f.label :password + .input= f.password_field :password + .clearfix + = f.label :password_confirmation + .input= f.password_field :password_confirmation + + - if Settings.omniauth.enabled + .span5.right + .auth_methods.alert.alert-info + %strong Tip: Use one of the following sites to login + %ul + - User.omniauth_providers.each do |provider| + %li= link_to authbutton(provider), | + omniauth_authorize_path(User, provider) | .actions = f.submit 'Save', class: "btn primary" diff --git a/app/views/profile/show.html.haml b/app/views/profile/show.html.haml index 95cce2bb..4d89cd3d 100644 --- a/app/views/profile/show.html.haml +++ b/app/views/profile/show.html.haml @@ -49,6 +49,13 @@ %strong Tip: You can change your avatar at gravatar.com + - if Settings.omniauth.enabled && @user.provider? + %h4 + Omniauth Providers: + = link_to "Change", profile_password_path, class: "btn small right" + You can login through #{@user.provider.titleize}! + = authbutton(@user.provider, 32) + %h4 Personal projects: %small.right diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example index 1818f2c0..622ac9ec 100644 --- a/config/gitlab.yml.example +++ b/config/gitlab.yml.example @@ -1,4 +1,4 @@ -# # # # # # # # # # # # # # # # # # +# # # # # # # # # # # # # # # # # # # Gitlab application config file # # # # # # # # # # # # # # # # # # # @@ -19,14 +19,14 @@ email: # Application specific settings # Like default project limit for user etc -app: - default_projects_limit: 10 +app: + default_projects_limit: 10 # backup_path: "/vol/backups" # default: Rails.root + backups/ # backup_keep_time: 604800 # default: 0 (forever) (in seconds) -# -# 2. Advanced settings: +# +# 2. Advanced settings: # ========================== # Git Hosting configuration @@ -49,3 +49,15 @@ git: git_max_size: 5242880 # 5.megabytes # Git timeout to read commit, in seconds git_timeout: 10 + +# Omniauth configuration +# omniauth: +# enabled: true +# providers: +# - { name: 'google_oauth2', app_id: 'YOUR APP ID', +# app_secret: 'YOUR APP SECRET', +# args: { access_type: 'offline', approval_prompt: '' } } +# - { name: 'twitter', app_id: 'YOUR APP ID', +# app_secret: 'YOUR APP SECRET'} +# - { name: 'github', app_id: 'YOUR APP ID', +# app_secret: 'YOUR APP SECRET' } diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb index 5c5987a8..741a29d5 100644 --- a/config/initializers/1_settings.rb +++ b/config/initializers/1_settings.rb @@ -6,7 +6,7 @@ class Settings < Settingslogic self.web['protocol'] ||= web.https ? "https" : "http" end - def web_host + def web_host self.web['host'] ||= 'localhost' end @@ -14,11 +14,11 @@ class Settings < Settingslogic self.email['from'] ||= ("notify@" + web_host) end - def url + def url self['url'] ||= build_url - end + end - def web_port + def web_port if web.https web['port'] = 443 else @@ -36,7 +36,7 @@ class Settings < Settingslogic raw_url << web_host if web_custom_port? - raw_url << ":#{web_port}" + raw_url << ":#{web_port}" end raw_url @@ -111,5 +111,14 @@ class Settings < Settingslogic def backup_keep_time app['backup_keep_time'] || 0 end + + def omniauth_enabled? + omniauth['enabled'] || false + end + + def omniauth_providers + omniauth['providers'] || [] + end + end end diff --git a/db/migrate/20120803152018_add_provider_and_uid_to_users.rb b/db/migrate/20120803152018_add_provider_and_uid_to_users.rb new file mode 100644 index 00000000..14f53e4e --- /dev/null +++ b/db/migrate/20120803152018_add_provider_and_uid_to_users.rb @@ -0,0 +1,6 @@ +class AddProviderAndUidToUsers < ActiveRecord::Migration + def change + add_column :users, :provider, :string + add_column :users, :uid, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index c4c54f56..5ac159d8 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20120712080407) do +ActiveRecord::Schema.define(:version => 20120803152018) do create_table "events", :force => true do |t| t.string "target_type" @@ -146,31 +146,33 @@ ActiveRecord::Schema.define(:version => 20120712080407) do end create_table "users", :force => true do |t| - t.string "email", :default => "", :null => false - t.string "encrypted_password", :limit => 128, :default => "", :null => false + t.string "email", :default => "", :null => false + t.string "encrypted_password", :default => "", :null => false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" - t.integer "sign_in_count", :default => 0 + t.integer "sign_in_count", :default => 0 t.datetime "current_sign_in_at" t.datetime "last_sign_in_at" t.string "current_sign_in_ip" t.string "last_sign_in_ip" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false t.string "name" - t.boolean "admin", :default => false, :null => false - t.integer "projects_limit", :default => 10 - t.string "skype", :default => "", :null => false - t.string "linkedin", :default => "", :null => false - t.string "twitter", :default => "", :null => false + t.boolean "admin", :default => false, :null => false + t.integer "projects_limit", :default => 10 + t.string "skype", :default => "", :null => false + t.string "linkedin", :default => "", :null => false + t.string "twitter", :default => "", :null => false t.string "authentication_token" - t.boolean "dark_scheme", :default => false, :null => false - t.integer "theme_id", :default => 1, :null => false + t.boolean "dark_scheme", :default => false, :null => false + t.integer "theme_id", :default => 1, :null => false t.string "bio" - t.boolean "blocked", :default => false, :null => false - t.integer "failed_attempts", :default => 0 + t.boolean "blocked", :default => false, :null => false + t.integer "failed_attempts", :default => 0 t.datetime "locked_at" + t.string "provider" + t.string "uid" end add_index "users", ["email"], :name => "index_users_on_email", :unique => true diff --git a/vendor/assets/images/authbuttons/github_32.png b/vendor/assets/images/authbuttons/github_32.png new file mode 100644 index 0000000000000000000000000000000000000000..247e52a5f4282110243afa350cd4a13b0154c2a1 GIT binary patch literal 1931 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 literal 0 HcmV?d00001 diff --git a/vendor/assets/images/authbuttons/google_32.png b/vendor/assets/images/authbuttons/google_32.png new file mode 100644 index 0000000000000000000000000000000000000000..3909e9de93b22e1f3a2e6c264f6289331412a3bb GIT binary patch literal 1615 zcmV-V2C(^wP)8wQ zK~#9!mVSaIA|e!R!IoP5D#joQpiPJxY7C7D!NjNpF-l@8 zi1DY2NsWn#7!t$;1BekdAhv0w)F>aJ(w2_~X`x38y|#DI_If+x?9Sfa?)9z^ewjGw z+jn;Moqe8pKW65D|9c~M`R;BSzax;AmX_Q_ix$<3?zFm(enng70IKHaVfVYs9Cke` zAA{C+1)Oss;zLA2a306vJdRB`f@dSquh(7;T~A41@7}%nwY9Z}RaJfPt*`#VzT>?h zlo%ijW@TZ|rbm(Ka~Zag&UOUWt^j8eRkx7@WZxKvd*yW9_WhmkrF)R(b;Fb9#_+fXkBg#m&U863HxK+q0PNCvC@vLLQG`%X zl}ar{Cr?OBjMe5(qhxsJ@YpdJv;?S)fEtNJX6T)xfA_;HfV~E|OK6wT|L)H|gvO%Q z1mCLXLDRjUUXLY;#|6c$3Q`IbRj~*WDhXZAyl1f;*G>S8F(V{Y7%F0tq7b;mM^s(J z>PMp-EnPP(dv{qSh*&*wxujNOqJZe2x)@70y`X4}pt0W#9!c^hf{&3JXJFde_=d(o4wqQ@uJq-iMa52H9ZiscuE zQ4}1v(QsCNN&;)EXW^$a{kS#~G3Uy9e_~#a@qRFP4X*`TaOmYyjOdlgG-1M|)}m<5 zcLPxk+p2O=bvcAL+xoHOa(EJsBLqLR{$ut1UKO9OE5m(x>DFfRVpTC#mKR`X;ufAd z*@$loRgAbP;&F=YMDbAQe{F?6)U7JUtIG?}m#(DtK*P>I(9|8p$Lp71W{wYq*=g9d zVKMrK#*Ccs3(>)6|ME75BVoB>W7W(Ak3I9a#7K$1BPHoLvbqR3dp$V;JzHBl2C!^v z6Us#;l!(fJ}G<232uotwFht;59nK^Zpbty!A*Ve zM4w~Q#>NoBUKp|=XkMUbty_qvQafRC*|Q@JF^l8T${1% z@OvhZCbeewj6L?r88|%f<>nf+?RXBaJUs_X3eJG_ZUnnf19plS!UJ0!lWX!9;{Am$ z#KB|LVD|#&PA?>EL=FNK_s;;24uPF62k#OWkp3M&s5xHdSGR#(tTk+`a4dK>zH&n} z8@SyQ$uC9@0v>w9&)Nk*__RE&xp`{GM1Kx`4}Px3nv?C$K#6ZgLj3Lh)b5`|AT#vE z0~lEODrljcep(blubI%E90w(4F z=Sfb?WM!DQMx2)=GTzJvm`Fkh@s%5MntD&#Vy`*FkhmAzZXYlP9y%Z{d|C1$shJW@ z=o9h2XroNR=Fd!EbHy4@vI*G$GCV~o35<@@E5u(8T5$>_f1T3b&R&Z~N{9=iDztaY8;@6P`C#`qK7Vn6RW!jS8~bu` z_shnm;j5@Wv|YyDsw^JwC%QZKJf>YFd%Ejsceq`Q+!ANbguE_N;-Zv#gkjbr)z$MG z8XDG=m6cTs17er%Yhm)uiB__!{YN4{N^G@F%wHh!y5WRa{aZsPkJF=peYAJ9Q`ih~ z#>N@v5t}QFrV1dx81#z)HzmX+#uRnGZX zkdUy9GS1i?{Wdgc8UI10f^p3y33JVRtGu{z`8!FHaU2Byz4osF0|3bfn|->$iJkxe N002ovPDHLkV1hOX`1Sw* literal 0 HcmV?d00001 diff --git a/vendor/assets/images/authbuttons/google_64.png b/vendor/assets/images/authbuttons/google_64.png new file mode 100644 index 0000000000000000000000000000000000000000..e55f34f1b7d57c52172eb2bab0964037c532629b GIT binary patch literal 3446 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 Y0PP3DX~$FU?EnA(07*qoM6N<$g6|lC761SM literal 0 HcmV?d00001 diff --git a/vendor/assets/images/authbuttons/twitter_32.png b/vendor/assets/images/authbuttons/twitter_32.png new file mode 100644 index 0000000000000000000000000000000000000000..daadcffd315f11026cface9d99409997050ab9b9 GIT binary patch literal 1439 zcmV;Q1z`G#P)Y_}bdkmx`I#UBDP81NhfpbG&U zJv0JOj1Iv3@;aQIy#*$Uop&g^WHcK^3)l?_0n+>QjH3I@o%-Uft*pVYm8R%O=g{zn z0tH7WN8sh@gR(X;)Gzawmu}LBjU%Pwxbn1egKk(bDkWR-p@I8Zo4N&n!Iqp6I68o- z(LF8OG%?&yz_fEyWzectT4Tzdlt;QyY~=2MmN+A{z);<@S5asvP3SBEWi%)vr!qE0 z1qd@=r5JKlpbY@C6)>C2wASU_J(VIHo7xYU*c9Uj4Ei(#xUswj=l{G5Ks*tL5VJAL z2cWb{4g0z2Lh~4`6yO-~VyB}N2Jp>qHJ@#{+tA7Zr#Iq>pAmPZyU$V9*bp>#6T4v0 z?Js)evLe%U1A02HEUZ$9vc|D155jKsB9&DE11^TmV>3$Nc74-1a_zGthtKUw2!hx+Pxzyn=8Z<&^3vYEqL7qF zl6r5!rggy^cBu_%D(*x=%*0;2vDNJAV!Z>v>(4v}mHrB8Yk_jE0IHZ7Bv7DL%6x;S zm5li$giKYl+o@s&7i!CJ{K-dKo_ls|SVp(wySY1X^4s5Gb#)Ce_PWwNTRL@scObF# zoWl@NEbp$Y!`E{QJ*VIckMD=qj!fDT?nSM`_Z%JYArLk*p(q6Lb_AdPG7mRa{_YvX z_;587dd$s)P9Z{{PKhu)Cbl=W8}NX3;l!!)aQb4cCje(IT(=p5rlqCZISVo*z` zYWF7Pv?4H{{P+iae(^dS9@_`Q)pDlfLh9u;BJH`$H>qifQXRmYg4jVq^yy@KIO$}h z>EK3%3k#vz-q?b(OAn;F`D)h$Z&T0E`&=#2wQW5KQ4&Y>l!RcLQI#~2x65gJjM1mE z6E7>nUZkCksIi`{%Ym|uNJuJJ-dtV0KXmA+7j+Qs^_9?Mgvpr1HlqGoJWSk-X?yOw z=63auw>JK|{MkqEH|k3()VPS2N!LbwK!HG%=&gZ=4^B>vKmW?B)uGYJa)0#^>BR{# z%FKN^M*~$3skkL_;Z|rjkshYCd$p@S&Hr%v)Y|Q9S7?2eoY*D@8|hXkdxT`DN{dxm zDAKMJXf5D%H}lZ8Y{;y#{FO~dltiMLN9^W^Zb$SSOX?bv$%sbx@V}wJl3z+$Wjj8w tU9M`YBd+9ILRkF~K+PWazj*v3zyKvCC{2!YO3?rS002ovPDHLkV1fr@ymbHo literal 0 HcmV?d00001 diff --git a/vendor/assets/images/authbuttons/twitter_64.png b/vendor/assets/images/authbuttons/twitter_64.png new file mode 100644 index 0000000000000000000000000000000000000000..68b74530c06b558b6c4848c2637d4caeaf4c969b GIT binary patch literal 3384 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 O0000 Date: Fri, 17 Aug 2012 16:32:22 +0200 Subject: [PATCH 006/357] Adding default values for omniauth settings so tests don't failt --- config/gitlab.yml.example | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example index 622ac9ec..85149fe8 100644 --- a/config/gitlab.yml.example +++ b/config/gitlab.yml.example @@ -51,6 +51,10 @@ git: git_timeout: 10 # Omniauth configuration +omniauth: + enabled: false + providers: + # omniauth: # enabled: true # providers: From 0f1ca8b3e7454a6fa788f8e57607b95f3195e145 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 22 Aug 2012 13:19:55 -0400 Subject: [PATCH 007/357] Remove DELETE API for Milestones --- lib/api/milestones.rb | 12 ------------ spec/api/milestones_spec.rb | 8 -------- 2 files changed, 20 deletions(-) diff --git a/lib/api/milestones.rb b/lib/api/milestones.rb index 3cdb7d9f..1ddcd1f8 100644 --- a/lib/api/milestones.rb +++ b/lib/api/milestones.rb @@ -76,18 +76,6 @@ module Gitlab error!({'message' => '404 Not found'}, 404) end end - - # Delete a project milestone - # - # Parameters: - # id (required) - The ID or code name of a project - # milestone_id (required) - The ID of a project milestone - # Example Request: - # DELETE /projects/:id/milestones/:milestone_id - delete ":id/milestones/:milestone_id" do - @milestone = user_project.milestones.find(params[:milestone_id]) - @milestone.destroy - end end end end diff --git a/spec/api/milestones_spec.rb b/spec/api/milestones_spec.rb index 23f19ddd..ba1d15cc 100644 --- a/spec/api/milestones_spec.rb +++ b/spec/api/milestones_spec.rb @@ -42,12 +42,4 @@ describe Gitlab::API do json_response['title'].should == 'updated title' end end - - describe "DELETE /projects/:id/milestones/:milestone_id" do - it "should delete a project milestone" do - expect { - delete "#{api_prefix}/projects/#{project.code}/milestones/#{milestone.id}?private_token=#{user.private_token}" - }.to change { Milestone.count }.by(-1) - end - end end From b838440f15fbc56d0504162fcff376cacf9c8186 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 22 Aug 2012 13:26:09 -0400 Subject: [PATCH 008/357] Deprecate the DELETE method for Issues API Now returns HTTP Status 405 - http://httpstatus.es/405 Closes #1245 Closes #1264 --- lib/api/issues.rb | 5 ++--- spec/api/issues_spec.rb | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/api/issues.rb b/lib/api/issues.rb index 2abc20ad..836c2818 100644 --- a/lib/api/issues.rb +++ b/lib/api/issues.rb @@ -95,7 +95,7 @@ module Gitlab end end - # Delete a project issue + # Delete a project issue (deprecated) # # Parameters: # id (required) - The ID or code name of a project @@ -103,8 +103,7 @@ module Gitlab # Example Request: # DELETE /projects/:id/issues/:issue_id delete ":id/issues/:issue_id" do - @issue = user_project.issues.find(params[:issue_id]) - @issue.destroy + error!({'message' => 'method not allowed'}, 405) end end end diff --git a/spec/api/issues_spec.rb b/spec/api/issues_spec.rb index f6d8e379..62814307 100644 --- a/spec/api/issues_spec.rb +++ b/spec/api/issues_spec.rb @@ -63,9 +63,8 @@ describe Gitlab::API do describe "DELETE /projects/:id/issues/:issue_id" do it "should delete a project issue" do - expect { - delete "#{api_prefix}/projects/#{project.code}/issues/#{issue.id}?private_token=#{user.private_token}" - }.to change { Issue.count }.by(-1) + delete "#{api_prefix}/projects/#{project.code}/issues/#{issue.id}?private_token=#{user.private_token}" + response.status.should == 405 end end end From 22ec463764f7fe2b6cf3003450c5eabe2c122d5f Mon Sep 17 00:00:00 2001 From: Seif Attar Date: Thu, 23 Aug 2012 10:48:45 +0100 Subject: [PATCH 009/357] rake task to add all users to all projects --- lib/tasks/bulk_add_permission.rake | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 lib/tasks/bulk_add_permission.rake diff --git a/lib/tasks/bulk_add_permission.rake b/lib/tasks/bulk_add_permission.rake new file mode 100644 index 00000000..779f286f --- /dev/null +++ b/lib/tasks/bulk_add_permission.rake @@ -0,0 +1,16 @@ +desc "Add all users to all projects, system administratos are added as masters" +task :add_users_to_project_teams => :environment do |t, args| + users = User.find_all_by_admin(false, :select => 'id').map(&:id) + admins = User.find_all_by_admin(true, :select => 'id').map(&:id) + + users.each do |user| + puts "#{user}" + end + + Project.all.each do |project| + puts "Importing #{users.length} users into #{project.path}" + UsersProject.bulk_import(project, users, UsersProject::DEVELOPER) + puts "Importing #{admins.length} admins into #{project.path}" + UsersProject.bulk_import(project, admins, UsersProject::MASTER) + end +end From 2d6a3e6b67ec1c469ac19d2d5e581d8425b229c6 Mon Sep 17 00:00:00 2001 From: Seif Attar Date: Thu, 23 Aug 2012 10:48:55 +0100 Subject: [PATCH 010/357] Task to assign user developer role to all projects --- lib/tasks/bulk_add_permission.rake | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/tasks/bulk_add_permission.rake b/lib/tasks/bulk_add_permission.rake index 779f286f..55797825 100644 --- a/lib/tasks/bulk_add_permission.rake +++ b/lib/tasks/bulk_add_permission.rake @@ -14,3 +14,13 @@ task :add_users_to_project_teams => :environment do |t, args| UsersProject.bulk_import(project, admins, UsersProject::MASTER) end end + +desc "Add user to as a developer to all projects" +task :add_user_to_project_teams, [:email] => :environment do |t, args| + user_email = args.email + user = User.find_by_email(user_email) + + project_ids = Project.all.map(&:id) + + UsersProject.user_bulk_import(user,project_ids,UsersProject::DEVELOPER) +end From 14bd9c9228c50d2a9c5914394603d7ff2b2aa145 Mon Sep 17 00:00:00 2001 From: randx Date: Fri, 24 Aug 2012 12:17:05 +0300 Subject: [PATCH 011/357] Fix dashboard issues atom feed rspec --- spec/requests/atom/dashboard_issues_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/requests/atom/dashboard_issues_spec.rb b/spec/requests/atom/dashboard_issues_spec.rb index 9b4ffc0e..1d208c70 100644 --- a/spec/requests/atom/dashboard_issues_spec.rb +++ b/spec/requests/atom/dashboard_issues_spec.rb @@ -7,11 +7,11 @@ describe "User Issues Dashboard" do login_as :user @project1 = Factory :project, - path: "project1", + path: "gitlabhq_0", code: "TEST1" @project2 = Factory :project, - path: "project2", + path: "gitlabhq_1", code: "TEST2" @project1.add_access(@user, :read, :write) From 3dd7703b8083d44c64a03cef6b72d161aed04239 Mon Sep 17 00:00:00 2001 From: randx Date: Fri, 24 Aug 2012 13:05:40 +0300 Subject: [PATCH 012/357] Feature: Labels page. Index page --- app/controllers/labels_controller.rb | 25 +++++++++++++++++++ app/views/issues/_head.html.haml | 3 +++ app/views/labels/_label.html.haml | 4 +++ app/views/labels/index.html.haml | 14 +++++++++++ config/routes.rb | 2 ++ features/projects/issues/labels.feature | 13 ++++++++++ .../project/project_issues_steps.rb | 21 +++++++++++++++- 7 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 app/controllers/labels_controller.rb create mode 100644 app/views/labels/_label.html.haml create mode 100644 app/views/labels/index.html.haml create mode 100644 features/projects/issues/labels.feature diff --git a/app/controllers/labels_controller.rb b/app/controllers/labels_controller.rb new file mode 100644 index 00000000..f52fc2d8 --- /dev/null +++ b/app/controllers/labels_controller.rb @@ -0,0 +1,25 @@ +class LabelsController < ApplicationController + before_filter :authenticate_user! + before_filter :project + before_filter :module_enabled + + layout "project" + + # Authorize + before_filter :add_project_abilities + + # Allow read any issue + before_filter :authorize_read_issue! + + respond_to :js, :html + + def index + @labels = Issue.tag_counts_on(:labels) + end + + protected + + def module_enabled + return render_404 unless @project.issues_enabled + end +end diff --git a/app/views/issues/_head.html.haml b/app/views/issues/_head.html.haml index 1f6e7d7f..8ebe3e05 100644 --- a/app/views/issues/_head.html.haml +++ b/app/views/issues/_head.html.haml @@ -5,6 +5,9 @@ %li{class: "#{'active' if current_page?(project_milestones_path(@project))}"} = link_to project_milestones_path(@project), class: "tab" do Milestones + %li{class: "#{'active' if current_page?(project_labels_path(@project))}"} + = link_to project_labels_path(@project), class: "tab" do + Labels %li.right %span.rss-icon = link_to project_issues_path(@project, :atom, { private_token: current_user.private_token }) do diff --git a/app/views/labels/_label.html.haml b/app/views/labels/_label.html.haml new file mode 100644 index 00000000..32158c20 --- /dev/null +++ b/app/views/labels/_label.html.haml @@ -0,0 +1,4 @@ +%li.wll + %strong= label.name + .right + %span= pluralize label.count, 'issue' diff --git a/app/views/labels/index.html.haml b/app/views/labels/index.html.haml new file mode 100644 index 00000000..4e41d375 --- /dev/null +++ b/app/views/labels/index.html.haml @@ -0,0 +1,14 @@ += render "issues/head" + +%h3.page_title + Labels +%br +%div.ui-box + %ul.unstyled.labels-table + - @labels.each do |label| + = render 'label', label: label + + - unless @labels.present? + %li + %h3.nothing_here_message Nothing to show here + diff --git a/config/routes.rb b/config/routes.rb index 97594d57..f895478f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -197,7 +197,9 @@ Gitlab::Application.routes.draw do end resources :team_members resources :milestones + resources :labels, :only => [:index] resources :issues do + collection do post :sort post :bulk_update diff --git a/features/projects/issues/labels.feature b/features/projects/issues/labels.feature new file mode 100644 index 00000000..5a20bfd6 --- /dev/null +++ b/features/projects/issues/labels.feature @@ -0,0 +1,13 @@ +Feature: Labels + Background: + Given I signin as a user + And I own project "Shop" + And project "Shop" have issues tags: + | name | + | bug | + | feature | + Given I visit project "Shop" labels page + + Scenario: I should see active milestones + Then I should see label "bug" + And I should see label "feature" diff --git a/features/step_definitions/project/project_issues_steps.rb b/features/step_definitions/project/project_issues_steps.rb index 00a1721f..27de03d5 100644 --- a/features/step_definitions/project/project_issues_steps.rb +++ b/features/step_definitions/project/project_issues_steps.rb @@ -33,6 +33,25 @@ Given /^I visit issue page "(.*?)"$/ do |arg1| end Given /^I submit new issue "(.*?)"$/ do |arg1| - fill_in "issue_title", :with => arg1 + fill_in "issue_title", with: arg1 click_button "Submit new issue" end + +Given /^project "(.*?)" have issues tags:$/ do |arg1, table| + project = Project.find_by_name(arg1) + table.hashes.each do |hash| + Factory :issue, + project: project, + label_list: [hash[:name]] + end +end + +Given /^I visit project "(.*?)" labels page$/ do |arg1| + visit project_labels_path(Project.find_by_name(arg1)) +end + +Then /^I should see label "(.*?)"$/ do |arg1| + within ".labels-table" do + page.should have_content arg1 + end +end From 6d4ae75f544d9819954865c105414a722344336a Mon Sep 17 00:00:00 2001 From: randx Date: Fri, 24 Aug 2012 13:17:19 +0300 Subject: [PATCH 013/357] Final fix for dashboard cucumber feature --- features/step_definitions/dashboard_steps.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/features/step_definitions/dashboard_steps.rb b/features/step_definitions/dashboard_steps.rb index 1eec7619..d910ec90 100644 --- a/features/step_definitions/dashboard_steps.rb +++ b/features/step_definitions/dashboard_steps.rb @@ -107,11 +107,11 @@ end Given /^I have authored merge requests$/ do project1 = Factory :project, - :path => "project1", + :path => "gitlabhq_1", :code => "gitlabhq_1" project2 = Factory :project, - :path => "project2", + :path => "gitlabhq_2", :code => "gitlabhq_2" project1.add_access(@user, :read, :write) From 2b38f51a17464537b9e4110917868bc9c1b1950a Mon Sep 17 00:00:00 2001 From: Cyril Date: Sat, 25 Aug 2012 00:22:45 +0200 Subject: [PATCH 014/357] fix merge request form --- app/controllers/merge_requests_controller.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb index 4938a294..187bb407 100644 --- a/app/controllers/merge_requests_controller.rb +++ b/app/controllers/merge_requests_controller.rb @@ -103,10 +103,12 @@ class MergeRequestsController < ApplicationController def branch_from @commit = project.commit(params[:ref]) + @commit = CommitDecorator.decorate(@commit) end def branch_to @commit = project.commit(params[:ref]) + @commit = CommitDecorator.decorate(@commit) end protected From 0dbde913dcfd8559433ef57a28e84b9e9f266f90 Mon Sep 17 00:00:00 2001 From: Joe Hillenbrand Date: Fri, 24 Aug 2012 16:04:07 -0700 Subject: [PATCH 015/357] Hide gravatar tip if gravatar is disabled. --- app/views/profile/show.html.haml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/views/profile/show.html.haml b/app/views/profile/show.html.haml index 95cce2bb..a7b6a18a 100644 --- a/app/views/profile/show.html.haml +++ b/app/views/profile/show.html.haml @@ -45,9 +45,10 @@ %span.help-block Tell us about yourself in fewer than 250 characters. .span5.right - %p.alert.alert-info - %strong Tip: - You can change your avatar at gravatar.com + -unless Gitlab.config.disable_gravatar? + %p.alert.alert-info + %strong Tip: + You can change your avatar at gravatar.com %h4 Personal projects: From 74d65bb8238923d04dde6eefc657a40995c8e4ff Mon Sep 17 00:00:00 2001 From: Saito Date: Sat, 25 Aug 2012 15:24:21 +0800 Subject: [PATCH 016/357] fix git push body bigger than 112k problem --- config/initializers/grack_auth.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/config/initializers/grack_auth.rb b/config/initializers/grack_auth.rb index 5995b873..4f77c327 100644 --- a/config/initializers/grack_auth.rb +++ b/config/initializers/grack_auth.rb @@ -42,13 +42,13 @@ module Grack def current_ref if @env["HTTP_CONTENT_ENCODING"] =~ /gzip/ - input = Zlib::GzipReader.new(@request.body).string + input = Zlib::GzipReader.new(@request.body).read else - input = @request.body.string + input = @request.body.read end - - oldrev, newrev, ref = input.split(' ') - /refs\/heads\/([\w-]+)/.match(ref).to_a.last + # Need to reset seek point + @request.body.rewind + /refs\/heads\/([\w-]+)/.match(input).to_a.first end end# Auth end# Grack From d5fcf0f672ffb5457c9b1bc345c4cf72a94af324 Mon Sep 17 00:00:00 2001 From: randx Date: Fri, 24 Aug 2012 15:34:27 +0300 Subject: [PATCH 017/357] Show labels specific to project --- app/controllers/labels_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/labels_controller.rb b/app/controllers/labels_controller.rb index f52fc2d8..e703f822 100644 --- a/app/controllers/labels_controller.rb +++ b/app/controllers/labels_controller.rb @@ -14,7 +14,7 @@ class LabelsController < ApplicationController respond_to :js, :html def index - @labels = Issue.tag_counts_on(:labels) + @labels = @project.issues.tag_counts_on(:labels).order('count DESC') end protected From 36ffdf36b96a877154f265327d83d022ed27e9e4 Mon Sep 17 00:00:00 2001 From: Florian Unglaub Date: Fri, 24 Aug 2012 15:40:44 +0200 Subject: [PATCH 018/357] Merge issue fixed --- app/controllers/omniauth_callbacks_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/omniauth_callbacks_controller.rb b/app/controllers/omniauth_callbacks_controller.rb index 9b40e564..00ec7c42 100644 --- a/app/controllers/omniauth_callbacks_controller.rb +++ b/app/controllers/omniauth_callbacks_controller.rb @@ -33,7 +33,7 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController if current_user # Change a logged-in user's authentication method: - current_user.uid = uid + current_user.extern_uid = uid current_user.provider = provider current_user.save redirect_to profile_path From fee26c58e22f9150e802b86202e5e5e9a6b2c233 Mon Sep 17 00:00:00 2001 From: randx Date: Sat, 25 Aug 2012 19:21:11 +0300 Subject: [PATCH 019/357] Move snippets api doc to separate file --- app/views/help/api.html.haml | 12 +++++ doc/api/README.md | 1 + doc/api/projects.md | 102 ----------------------------------- doc/api/snippets.md | 100 ++++++++++++++++++++++++++++++++++ 4 files changed, 113 insertions(+), 102 deletions(-) create mode 100644 doc/api/snippets.md diff --git a/app/views/help/api.html.haml b/app/views/help/api.html.haml index 344f8ade..4f7af193 100644 --- a/app/views/help/api.html.haml +++ b/app/views/help/api.html.haml @@ -9,6 +9,8 @@ %a{href: "#README"} README %li %a{href: "#projects"} Projects + %li + %a{href: "#snippets"} Snippets %li %a{href: "#users"} Users %li @@ -34,6 +36,16 @@ %br +.file_holder#snippets + .file_title + %i.icon-file + Projects Snippets + .file_content.wiki + = preserve do + = markdown File.read(Rails.root.join("doc", "api", "snippets.md")) + +%br + .file_holder#users .file_title %i.icon-file diff --git a/doc/api/README.md b/doc/api/README.md index e0111966..d32573aa 100644 --- a/doc/api/README.md +++ b/doc/api/README.md @@ -27,4 +27,5 @@ The API uses JSON to serialize data. You don't need to specify `.json` at the en + [Users](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/users.md) + [Projects](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/projects.md) ++ [Snippets](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/snippets.md) + [Issues](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/issues.md) diff --git a/doc/api/projects.md b/doc/api/projects.md index ead31003..d680b5d8 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -204,108 +204,6 @@ Parameters: ] ``` -# Project Snippets - -## List snippets - -Not implemented. - -## Single snippet - -Get a project snippet. - -``` -GET /projects/:id/snippets/:snippet_id -``` - -Parameters: - -+ `id` (required) - The ID or code name of a project -+ `snippet_id` (required) - The ID of a project's snippet - -```json -{ - "id": 1, - "title": "test", - "file_name": "add.rb", - "author": { - "id": 1, - "email": "john@example.com", - "name": "John Smith", - "blocked": false, - "created_at": "2012-05-23T08:00:58Z" - }, - "expires_at": null, - "updated_at": "2012-06-28T10:52:04Z", - "created_at": "2012-06-28T10:52:04Z" -} -``` - -## Snippet content - -Get a raw project snippet. - -``` -GET /projects/:id/snippets/:snippet_id/raw -``` - -Parameters: - -+ `id` (required) - The ID or code name of a project -+ `snippet_id` (required) - The ID of a project's snippet - -## New snippet - -Create a new project snippet. - -``` -POST /projects/:id/snippets -``` - -Parameters: - -+ `id` (required) - The ID or code name of a project -+ `title` (required) - The title of a snippet -+ `file_name` (required) - The name of a snippet file -+ `lifetime` (optional) - The expiration date of a snippet -+ `code` (required) - The content of a snippet - -Will return created snippet with status `201 Created` on success, or `404 Not found` on fail. - -## Edit snippet - -Update an existing project snippet. - -``` -PUT /projects/:id/snippets/:snippet_id -``` - -Parameters: - -+ `id` (required) - The ID or code name of a project -+ `snippet_id` (required) - The ID of a project's snippet -+ `title` (optional) - The title of a snippet -+ `file_name` (optional) - The name of a snippet file -+ `lifetime` (optional) - The expiration date of a snippet -+ `code` (optional) - The content of a snippet - -Will return updated snippet with status `200 OK` on success, or `404 Not found` on fail. - -## Delete snippet - -Delete existing project snippet. - -``` -DELETE /projects/:id/snippets/:snippet_id -``` - -Parameters: - -+ `id` (required) - The ID or code name of a project -+ `snippet_id` (required) - The ID of a project's snippet - -Status code `200` will be returned on success. - ## Raw blob content Get the raw file contents for a file. diff --git a/doc/api/snippets.md b/doc/api/snippets.md new file mode 100644 index 00000000..0cd29ce5 --- /dev/null +++ b/doc/api/snippets.md @@ -0,0 +1,100 @@ +## List snippets + +Not implemented. + +## Single snippet + +Get a project snippet. + +``` +GET /projects/:id/snippets/:snippet_id +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `snippet_id` (required) - The ID of a project's snippet + +```json +{ + "id": 1, + "title": "test", + "file_name": "add.rb", + "author": { + "id": 1, + "email": "john@example.com", + "name": "John Smith", + "blocked": false, + "created_at": "2012-05-23T08:00:58Z" + }, + "expires_at": null, + "updated_at": "2012-06-28T10:52:04Z", + "created_at": "2012-06-28T10:52:04Z" +} +``` + +## Snippet content + +Get a raw project snippet. + +``` +GET /projects/:id/snippets/:snippet_id/raw +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `snippet_id` (required) - The ID of a project's snippet + +## New snippet + +Create a new project snippet. + +``` +POST /projects/:id/snippets +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `title` (required) - The title of a snippet ++ `file_name` (required) - The name of a snippet file ++ `lifetime` (optional) - The expiration date of a snippet ++ `code` (required) - The content of a snippet + +Will return created snippet with status `201 Created` on success, or `404 Not found` on fail. + +## Edit snippet + +Update an existing project snippet. + +``` +PUT /projects/:id/snippets/:snippet_id +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `snippet_id` (required) - The ID of a project's snippet ++ `title` (optional) - The title of a snippet ++ `file_name` (optional) - The name of a snippet file ++ `lifetime` (optional) - The expiration date of a snippet ++ `code` (optional) - The content of a snippet + +Will return updated snippet with status `200 OK` on success, or `404 Not found` on fail. + +## Delete snippet + +Delete existing project snippet. + +``` +DELETE /projects/:id/snippets/:snippet_id +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `snippet_id` (required) - The ID of a project's snippet + +Status code `200` will be returned on success. + From c05692b7b1194e67b5427ca0a6a4926562abdf6e Mon Sep 17 00:00:00 2001 From: randx Date: Sat, 25 Aug 2012 19:42:34 +0300 Subject: [PATCH 020/357] scss refactoring --- app/assets/stylesheets/gitlab_bootstrap.scss | 23 ++++---------------- app/assets/stylesheets/main.scss | 8 ++++++- app/assets/stylesheets/ref_select.scss | 4 +--- app/assets/stylesheets/sections/graph.scss | 6 +---- app/assets/stylesheets/sections/nav.scss | 6 +---- app/assets/stylesheets/sections/tree.scss | 6 +---- 6 files changed, 15 insertions(+), 38 deletions(-) diff --git a/app/assets/stylesheets/gitlab_bootstrap.scss b/app/assets/stylesheets/gitlab_bootstrap.scss index 03beeaef..a1faf060 100644 --- a/app/assets/stylesheets/gitlab_bootstrap.scss +++ b/app/assets/stylesheets/gitlab_bootstrap.scss @@ -468,12 +468,8 @@ form { h5, .title { padding: 0 10px; @include round-borders-top(4px); + @include bg-gray-gradient; border-bottom: 1px solid #bbb; - background:#eee; - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); - background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); &.small { line-height: 28px; @@ -499,10 +495,7 @@ form { } .bottom { - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); - background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); + @include bg-gray-gradient; @include round-borders-bottom(4px); border-bottom:none; border-top: 1px solid #bbb; @@ -555,11 +548,7 @@ table.admin-table { th { border-color: #CCC; border-bottom: 1px solid #bbb; - background:#eee; - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); - background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); + @include bg-gray-gradient; } } @@ -682,11 +671,7 @@ h3.page_title { .file_title { border-bottom: 1px solid #bbb; - background:#eee; - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); - background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); + @include bg-gray-gradient; margin: 0; font-weight: normal; font-weight: bold; diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index ad8be0bc..b4f0ebf8 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -72,7 +72,13 @@ $hover: #FDF5D9; border-radius: $radius; } - +@mixin bg-gray-gradient { + background:#eee; + background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); + background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf); + background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf); + background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); +} /** * Header of application. diff --git a/app/assets/stylesheets/ref_select.scss b/app/assets/stylesheets/ref_select.scss index 6f6a1bc9..5b52e11b 100644 --- a/app/assets/stylesheets/ref_select.scss +++ b/app/assets/stylesheets/ref_select.scss @@ -33,9 +33,7 @@ } .chzn-single { - background:#ddd; - //border:none; - //box-shadow:none; + @include bg-gray-gradient; div { background:transparent; diff --git a/app/assets/stylesheets/sections/graph.scss b/app/assets/stylesheets/sections/graph.scss index 33d91de5..2aa4463e 100644 --- a/app/assets/stylesheets/sections/graph.scss +++ b/app/assets/stylesheets/sections/graph.scss @@ -6,11 +6,7 @@ h4 { padding:0 10px; border-bottom: 1px solid #bbb; - background:#eee; - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); - background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); + @include bg-gray-gradient; } .graph { diff --git a/app/assets/stylesheets/sections/nav.scss b/app/assets/stylesheets/sections/nav.scss index 4a773644..fc7293b2 100644 --- a/app/assets/stylesheets/sections/nav.scss +++ b/app/assets/stylesheets/sections/nav.scss @@ -6,13 +6,9 @@ ul.main_menu { border-radius: 4px; margin: auto; margin:30px 0; - background:#eee; border:1px solid #bbb; height:37px; - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); - background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); + @include bg-gray-gradient; position:relative; overflow:hidden; @include shade; diff --git a/app/assets/stylesheets/sections/tree.scss b/app/assets/stylesheets/sections/tree.scss index 2663fc9a..891f5e20 100644 --- a/app/assets/stylesheets/sections/tree.scss +++ b/app/assets/stylesheets/sections/tree.scss @@ -72,11 +72,7 @@ th { border-color: #CCC; border-bottom: 1px solid #bbb; - background:#eee; - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); - background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); + @include bg-gray-gradient; } } From f13bccc14ba915c1d04ac1688f789709267a82a9 Mon Sep 17 00:00:00 2001 From: randx Date: Sat, 25 Aug 2012 19:47:00 +0300 Subject: [PATCH 021/357] better flash message style --- app/assets/stylesheets/common.scss | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index 3c160358..68f862b8 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -129,10 +129,12 @@ table a code { border-bottom:1px solid #ccc; h4 { - color:#444; - font-size:22px; + color:#666; + font-size:18px; + line-height:38px; padding-top:5px; margin:2px; + font-weight:normal; } } From 852b9c28dd80af4a49336b0ff921a1a863dbc929 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 15 Aug 2012 23:16:33 -0400 Subject: [PATCH 022/357] Move observer specs out of spec/models into spec/observers --- spec/{models => observers}/activity_observer_spec.rb | 0 spec/{models => observers}/issue_observer_spec.rb | 0 spec/{models => observers}/user_observer_spec.rb | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename spec/{models => observers}/activity_observer_spec.rb (100%) rename spec/{models => observers}/issue_observer_spec.rb (100%) rename spec/{models => observers}/user_observer_spec.rb (100%) diff --git a/spec/models/activity_observer_spec.rb b/spec/observers/activity_observer_spec.rb similarity index 100% rename from spec/models/activity_observer_spec.rb rename to spec/observers/activity_observer_spec.rb diff --git a/spec/models/issue_observer_spec.rb b/spec/observers/issue_observer_spec.rb similarity index 100% rename from spec/models/issue_observer_spec.rb rename to spec/observers/issue_observer_spec.rb diff --git a/spec/models/user_observer_spec.rb b/spec/observers/user_observer_spec.rb similarity index 100% rename from spec/models/user_observer_spec.rb rename to spec/observers/user_observer_spec.rb From 6ff0652e9e807b35d298b63699c71377014800ea Mon Sep 17 00:00:00 2001 From: randx Date: Sat, 25 Aug 2012 20:31:19 +0300 Subject: [PATCH 023/357] Admin area -> user form --- app/views/admin/dashboard/index.html.haml | 8 +- app/views/admin/projects/index.html.haml | 2 +- app/views/admin/users/_form.html.haml | 118 ++++++++++++---------- app/views/admin/users/edit.html.haml | 2 +- app/views/admin/users/index.html.haml | 2 +- app/views/admin/users/new.html.haml | 4 +- 6 files changed, 73 insertions(+), 63 deletions(-) diff --git a/app/views/admin/dashboard/index.html.haml b/app/views/admin/dashboard/index.html.haml index 2e67abfc..3e26f566 100644 --- a/app/views/admin/dashboard/index.html.haml +++ b/app/views/admin/dashboard/index.html.haml @@ -35,11 +35,13 @@ %h3 Latest projects %hr - @projects.each do |project| - %h5 + %p = link_to project.name, [:admin, project] .span6 %h3 Latest users %hr - @users.each do |user| - %h5 - = link_to user.name, [:admin, user] + %p + = link_to [:admin, user] do + = user.name + %small= user.email diff --git a/app/views/admin/projects/index.html.haml b/app/views/admin/projects/index.html.haml index 882b2ab5..f7dd486d 100644 --- a/app/views/admin/projects/index.html.haml +++ b/app/views/admin/projects/index.html.haml @@ -1,4 +1,4 @@ -%h3 +%h3.page_title Projects = link_to 'New Project', new_admin_project_path, class: "btn small right" %br diff --git a/app/views/admin/users/_form.html.haml b/app/views/admin/users/_form.html.haml index 5e68a23f..20144723 100644 --- a/app/views/admin/users/_form.html.haml +++ b/app/views/admin/users/_form.html.haml @@ -2,68 +2,76 @@ = form_for [:admin, @admin_user] do |f| -if @admin_user.errors.any? #error_explanation - %ul + %ul.unstyled.alert.alert-error - @admin_user.errors.full_messages.each do |msg| %li= msg .row - .span6 - .clearfix - = f.label :name - .input - = f.text_field :name - %span.help-inline * required - .clearfix - = f.label :email - .input - = f.text_field :email - %span.help-inline * required - %hr + .span7 + .ui-box + %br + .clearfix + = f.label :name + .input + = f.text_field :name + %span.help-inline * required + .clearfix + = f.label :email + .input + = f.text_field :email + %span.help-inline * required + %hr + -if f.object.new_record? + .clearfix + = f.label :force_random_password do + %span Generate random password + .input= f.check_box :force_random_password, {}, true, nil + + %div.password-fields + .clearfix + = f.label :password + .input= f.password_field :password, disabled: f.object.force_random_password + .clearfix + = f.label :password_confirmation + .input= f.password_field :password_confirmation, disabled: f.object.force_random_password + %hr + .clearfix + = f.label :skype + .input= f.text_field :skype + .clearfix + = f.label :linkedin + .input= f.text_field :linkedin + .clearfix + = f.label :twitter + .input= f.text_field :twitter + .span5 + .ui-box + %br + .clearfix + = f.label :projects_limit + .input= f.number_field :projects_limit - -if f.object.new_record? - .clearfix - = f.label :admin, class: "checkbox" do - = f.check_box :force_random_password, {}, true, nil - %span Generate random password - - %div.password-fields .clearfix - = f.label :password - .input= f.password_field :password, disabled: f.object.force_random_password - .clearfix - = f.label :password_confirmation - .input= f.password_field :password_confirmation, disabled: f.object.force_random_password - %hr - .clearfix - = f.label :skype - .input= f.text_field :skype - .clearfix - = f.label :linkedin - .input= f.text_field :linkedin - .clearfix - = f.label :twitter - .input= f.text_field :twitter - .span6 - .clearfix - = f.label :projects_limit - .input= f.text_field :projects_limit, class: "small_input" + = f.label :admin do + %strong.cred Administrator + .input= f.check_box :admin + - unless @admin_user.new_record? + %hr + .padded.cred + - if @admin_user.blocked + %span + This user is blocked and is not able to login to GitLab + .clearfix + = link_to 'Unblock User', unblock_admin_user_path(@admin_user), method: :put, class: "btn small right" + - else + %span + Blocked users will be removed from all projects & will not be able to login to GitLab. + .clearfix + = link_to 'Block User', block_admin_user_path(@admin_user), confirm: 'USER WILL BE BLOCKED! Are you sure?', method: :put, class: "btn small right danger" - .alert - .clearfix - %p Make the user a GitLab administrator. - = f.label :admin, class: "checkbox" do - = f.check_box :admin - %span Administrator - - unless @admin_user.new_record? - .alert.alert-error - - if @admin_user.blocked - %span - = link_to 'Unblock', unblock_admin_user_path(@admin_user), method: :put, class: "btn small" - This user is blocked and is not able to login to GitLab - - else - %span - = link_to 'Block', block_admin_user_path(@admin_user), confirm: 'USER WILL BE BLOCKED! Are you sure?', method: :put, class: "btn small danger" - Blocked users will be removed from all projects & will not be able to login to GitLab. + .row + .span6 + .span6 .actions = f.submit 'Save', class: "btn primary" - if @admin_user.new_record? diff --git a/app/views/admin/users/edit.html.haml b/app/views/admin/users/edit.html.haml index 0e94be9e..032e3cfa 100644 --- a/app/views/admin/users/edit.html.haml +++ b/app/views/admin/users/edit.html.haml @@ -1,3 +1,3 @@ -%h3= @admin_user.name +%h3.page_title #{@admin_user.name} → Edit user %hr = render 'form' diff --git a/app/views/admin/users/index.html.haml b/app/views/admin/users/index.html.haml index 3d027217..f21baabf 100644 --- a/app/views/admin/users/index.html.haml +++ b/app/views/admin/users/index.html.haml @@ -1,4 +1,4 @@ -%h3 +%h3.page_title Users = link_to 'New User', new_admin_user_path, class: "btn small right" %br diff --git a/app/views/admin/users/new.html.haml b/app/views/admin/users/new.html.haml index 87d6b0f2..70ead0d3 100644 --- a/app/views/admin/users/new.html.haml +++ b/app/views/admin/users/new.html.haml @@ -1,3 +1,3 @@ -%h2 New user -%hr +%h3.page_title New user +%br = render 'form' From fba174e9bc4e4ef5c0c4d6a4282f37e5265b87e2 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 23 Aug 2012 05:19:40 -0400 Subject: [PATCH 024/357] Cleanup spec/support folder and spec/spec_helper Changes: * Move spec/monkeypatch to spec/support * Remove unused support/shared_examples * Move support/api to support/api_helpers to match module name * Move support/login to support/login_helpers to match module name * Move API specs to requests/api (convention over configuration) * Remove unused support/js_patch * Simplify login_as helper * Move DatabaseCleaner stuff to its own support file * Remove unnecessary configuration and requires from spec_helper --- .../project/projects_steps.rb | 2 +- features/support/env.rb | 4 +- spec/{ => requests}/api/issues_spec.rb | 0 spec/{ => requests}/api/projects_spec.rb | 0 spec/{ => requests}/api/users_spec.rb | 0 spec/spec_helper.rb | 37 +++---------------- spec/support/api.rb | 7 ---- spec/support/api_helpers.rb | 9 +++++ spec/support/db_cleaner.rb | 18 +++++++++ spec/support/js_patch.rb | 6 --- spec/support/login.rb | 30 --------------- spec/support/login_helpers.rb | 23 ++++++++++++ spec/{ => support}/monkeypatch.rb | 0 spec/support/shared_examples.rb | 16 -------- 14 files changed, 59 insertions(+), 93 deletions(-) rename spec/{ => requests}/api/issues_spec.rb (100%) rename spec/{ => requests}/api/projects_spec.rb (100%) rename spec/{ => requests}/api/users_spec.rb (100%) delete mode 100644 spec/support/api.rb create mode 100644 spec/support/api_helpers.rb create mode 100644 spec/support/db_cleaner.rb delete mode 100644 spec/support/js_patch.rb delete mode 100644 spec/support/login.rb create mode 100644 spec/support/login_helpers.rb rename spec/{ => support}/monkeypatch.rb (100%) delete mode 100644 spec/support/shared_examples.rb diff --git a/features/step_definitions/project/projects_steps.rb b/features/step_definitions/project/projects_steps.rb index 3ff08d58..d981e1f3 100644 --- a/features/step_definitions/project/projects_steps.rb +++ b/features/step_definitions/project/projects_steps.rb @@ -1,4 +1,4 @@ -include LoginMacros +include LoginHelpers Given /^I signin as a user$/ do login_as :user diff --git a/features/support/env.rb b/features/support/env.rb index b69a5fe7..80a465b4 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -7,9 +7,9 @@ require 'cucumber/rails' require 'webmock/cucumber' WebMock.allow_net_connect! -require Rails.root.join 'spec/monkeypatch' require Rails.root.join 'spec/factories' -require Rails.root.join 'spec/support/login' +require Rails.root.join 'spec/support/monkeypatch' +require Rails.root.join 'spec/support/login_helpers' require Rails.root.join 'spec/support/valid_commit' Capybara.default_selector = :css diff --git a/spec/api/issues_spec.rb b/spec/requests/api/issues_spec.rb similarity index 100% rename from spec/api/issues_spec.rb rename to spec/requests/api/issues_spec.rb diff --git a/spec/api/projects_spec.rb b/spec/requests/api/projects_spec.rb similarity index 100% rename from spec/api/projects_spec.rb rename to spec/requests/api/projects_spec.rb diff --git a/spec/api/users_spec.rb b/spec/requests/api/users_spec.rb similarity index 100% rename from spec/api/users_spec.rb rename to spec/requests/api/users_spec.rb diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index cd931475..d3635ed1 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -9,10 +9,8 @@ require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' require 'capybara/rails' require 'capybara/rspec' -require 'capybara/dsl' require 'webmock/rspec' require 'factories' -require 'monkeypatch' require 'email_spec' require 'headless' @@ -23,10 +21,13 @@ Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} # Use capybara-webkit Capybara.javascript_driver = :webkit +WebMock.disable_net_connect!(allow_localhost: true) + RSpec.configure do |config| config.mock_with :rspec - config.include LoginMacros + config.include LoginHelpers, type: :request + config.include ApiHelpers, type: :request # If you're not using ActiveRecord, or you'd prefer not to run each of your # examples within a transaction, remove the following line or assign false @@ -38,35 +39,9 @@ RSpec.configure do |config| headless.start end - config.before :each, type: :integration do - DeviseSessionMock.disable - end - config.before do - if example.metadata[:js] - DatabaseCleaner.strategy = :truncation - Capybara::Selenium::Driver::DEFAULT_OPTIONS[:resynchronize] = true - else - DatabaseCleaner.strategy = :transaction - end - - DatabaseCleaner.start - - WebMock.disable_net_connect!(allow_localhost: true) - # !!! Observers disabled by default in tests - # - # Use next code to enable observers - # before(:each) { ActiveRecord::Base.observers.enable(:all) } - # - ActiveRecord::Base.observers.disable :all + ActiveRecord::Base.observers.disable(:all) + # ActiveRecord::Base.observers.enable(:all) end - - config.after do - DatabaseCleaner.clean - end - - config.include RSpec::Rails::RequestExampleGroup, type: :request, example_group: { - file_path: /spec\/api/ - } end diff --git a/spec/support/api.rb b/spec/support/api.rb deleted file mode 100644 index d363d8b9..00000000 --- a/spec/support/api.rb +++ /dev/null @@ -1,7 +0,0 @@ -def api_prefix - "/api/#{Gitlab::API::VERSION}" -end - -def json_response - JSON.parse(response.body) -end diff --git a/spec/support/api_helpers.rb b/spec/support/api_helpers.rb new file mode 100644 index 00000000..e35d5735 --- /dev/null +++ b/spec/support/api_helpers.rb @@ -0,0 +1,9 @@ +module ApiHelpers + def api_prefix + "/api/#{Gitlab::API::VERSION}" + end + + def json_response + JSON.parse(response.body) + end +end diff --git a/spec/support/db_cleaner.rb b/spec/support/db_cleaner.rb new file mode 100644 index 00000000..f1e072aa --- /dev/null +++ b/spec/support/db_cleaner.rb @@ -0,0 +1,18 @@ +require 'database_cleaner' + +RSpec.configure do |config| + config.before do + if example.metadata[:js] + DatabaseCleaner.strategy = :truncation + Capybara::Selenium::Driver::DEFAULT_OPTIONS[:resynchronize] = true + else + DatabaseCleaner.strategy = :transaction + end + + DatabaseCleaner.start + end + + config.after do + DatabaseCleaner.clean + end +end diff --git a/spec/support/js_patch.rb b/spec/support/js_patch.rb deleted file mode 100644 index 0d4ab264..00000000 --- a/spec/support/js_patch.rb +++ /dev/null @@ -1,6 +0,0 @@ -module JsPatch - def confirm_js_popup - page.evaluate_script("window.alert = function(msg) { return true; }") - page.evaluate_script("window.confirm = function(msg) { return true; }") - end -end diff --git a/spec/support/login.rb b/spec/support/login.rb deleted file mode 100644 index 78a907ba..00000000 --- a/spec/support/login.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LoginMacros - def login_as role - @user = User.create(email: "user#{User.count}@mail.com", - name: "John Smith", - password: "123456", - password_confirmation: "123456", - skype: 'user_skype') - - if role == :admin - @user.admin = true - @user.save! - end - - visit new_user_session_path - fill_in "user_email", with: @user.email - fill_in "user_password", with: "123456" - click_button "Sign in" - end - - def login_with(user) - visit new_user_session_path - fill_in "user_email", with: user.email - fill_in "user_password", with: "123456" - click_button "Sign in" - end - - def logout - click_link "Logout" rescue nil - end -end diff --git a/spec/support/login_helpers.rb b/spec/support/login_helpers.rb new file mode 100644 index 00000000..769034e2 --- /dev/null +++ b/spec/support/login_helpers.rb @@ -0,0 +1,23 @@ +module LoginHelpers + # Internal: Create and log in as a user of the specified role + # + # role - User role (e.g., :admin, :user) + def login_as(role) + @user = Factory(role) + login_with(@user) + end + + # Internal: Login as the specified user + # + # user - User instance to login with + def login_with(user) + visit new_user_session_path + fill_in "user_email", with: user.email + fill_in "user_password", with: "123456" + click_button "Sign in" + end + + def logout + click_link "Logout" rescue nil + end +end diff --git a/spec/monkeypatch.rb b/spec/support/monkeypatch.rb similarity index 100% rename from spec/monkeypatch.rb rename to spec/support/monkeypatch.rb diff --git a/spec/support/shared_examples.rb b/spec/support/shared_examples.rb deleted file mode 100644 index 9fd207d0..00000000 --- a/spec/support/shared_examples.rb +++ /dev/null @@ -1,16 +0,0 @@ -shared_examples_for :project_side_pane do - subject { page } - it { should have_content((@project || project).name) } - it { should have_content("Commits") } - it { should have_content("Files") } -end - -shared_examples_for :tree_view do - subject { page } - - it "should have Tree View of project" do - should have_content("app") - should have_content("History") - should have_content("Gemfile") - end -end From b2a5344a2d68922d5c6cb8de228fb9b41ce3efc4 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sat, 25 Aug 2012 13:31:50 -0400 Subject: [PATCH 025/357] Add a simple `api` method to ApiHelpers, replacing api_prefix See docs for usage --- spec/requests/api/issues_spec.rb | 2 ++ spec/requests/api/projects_spec.rb | 2 ++ spec/requests/api/users_spec.rb | 2 ++ spec/spec_helper.rb | 1 - spec/support/api_helpers.rb | 29 +++++++++++++++++++++++++++-- 5 files changed, 33 insertions(+), 3 deletions(-) diff --git a/spec/requests/api/issues_spec.rb b/spec/requests/api/issues_spec.rb index f6d8e379..4701ca2f 100644 --- a/spec/requests/api/issues_spec.rb +++ b/spec/requests/api/issues_spec.rb @@ -1,6 +1,8 @@ require 'spec_helper' describe Gitlab::API do + include ApiHelpers + let(:user) { Factory :user } let!(:project) { Factory :project, owner: user } let!(:issue) { Factory :issue, author: user, assignee: user, project: project } diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index ff45619e..a721ab3a 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -1,6 +1,8 @@ require 'spec_helper' describe Gitlab::API do + include ApiHelpers + let(:user) { Factory :user } let!(:project) { Factory :project, owner: user } let!(:snippet) { Factory :snippet, author: user, project: project, title: 'example' } diff --git a/spec/requests/api/users_spec.rb b/spec/requests/api/users_spec.rb index 32b9379d..fcfea131 100644 --- a/spec/requests/api/users_spec.rb +++ b/spec/requests/api/users_spec.rb @@ -1,6 +1,8 @@ require 'spec_helper' describe Gitlab::API do + include ApiHelpers + let(:user) { Factory :user } describe "GET /users" do diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index d3635ed1..9fb0ad7e 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -27,7 +27,6 @@ RSpec.configure do |config| config.mock_with :rspec config.include LoginHelpers, type: :request - config.include ApiHelpers, type: :request # If you're not using ActiveRecord, or you'd prefer not to run each of your # examples within a transaction, remove the following line or assign false diff --git a/spec/support/api_helpers.rb b/spec/support/api_helpers.rb index e35d5735..7d901197 100644 --- a/spec/support/api_helpers.rb +++ b/spec/support/api_helpers.rb @@ -1,6 +1,31 @@ module ApiHelpers - def api_prefix - "/api/#{Gitlab::API::VERSION}" + # Public: Prepend a request path with the path to the API + # + # path - Path to append + # user - User object - If provided, automatically appends private_token query + # string for authenticated requests + # + # Examples + # + # >> api('/issues') + # => "/api/v2/issues" + # + # >> api('/issues', User.last) + # => "/api/v2/issues?private_token=..." + # + # >> api('/issues?foo=bar', User.last) + # => "/api/v2/issues?foo=bar&private_token=..." + # + # Returns the relative path to the requested API resource + def api(path, user = nil) + "/api/#{Gitlab::API::VERSION}#{path}" + + + # Normalize query string + (path.index('?') ? '' : '?') + + + # Append private_token if given a User object + (user.respond_to?(:private_token) ? + "&private_token=#{user.private_token}" : "") end def json_response From 232389f4e8ebaffd125985ce63439cea407e85d5 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sat, 25 Aug 2012 13:43:55 -0400 Subject: [PATCH 026/357] Clean up request specs --- spec/requests/admin/security_spec.rb | 24 +- spec/requests/api/issues_spec.rb | 14 +- spec/requests/api/projects_spec.rb | 35 ++- spec/requests/api/users_spec.rb | 8 +- spec/requests/security/profile_access_spec.rb | 30 ++- spec/requests/security/project_access_spec.rb | 230 ++++++++++-------- 6 files changed, 191 insertions(+), 150 deletions(-) diff --git a/spec/requests/admin/security_spec.rb b/spec/requests/admin/security_spec.rb index 0c369740..63068326 100644 --- a/spec/requests/admin/security_spec.rb +++ b/spec/requests/admin/security_spec.rb @@ -2,20 +2,26 @@ require 'spec_helper' describe "Admin::Projects" do describe "GET /admin/projects" do - it { admin_projects_path.should be_allowed_for :admin } - it { admin_projects_path.should be_denied_for :user } - it { admin_projects_path.should be_denied_for :visitor } + subject { admin_projects_path } + + it { should be_allowed_for :admin } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /admin/users" do - it { admin_users_path.should be_allowed_for :admin } - it { admin_users_path.should be_denied_for :user } - it { admin_users_path.should be_denied_for :visitor } + subject { admin_users_path } + + it { should be_allowed_for :admin } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /admin/hooks" do - it { admin_hooks_path.should be_allowed_for :admin } - it { admin_hooks_path.should be_denied_for :user } - it { admin_hooks_path.should be_denied_for :visitor } + subject { admin_hooks_path } + + it { should be_allowed_for :admin } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end end diff --git a/spec/requests/api/issues_spec.rb b/spec/requests/api/issues_spec.rb index 4701ca2f..c00a056d 100644 --- a/spec/requests/api/issues_spec.rb +++ b/spec/requests/api/issues_spec.rb @@ -10,13 +10,13 @@ describe Gitlab::API do describe "GET /issues" do it "should return authentication error" do - get "#{api_prefix}/issues" + get api("/issues") response.status.should == 401 end describe "authenticated GET /issues" do it "should return an array of issues" do - get "#{api_prefix}/issues?private_token=#{user.private_token}" + get api("/issues", user) response.status.should == 200 json_response.should be_an Array json_response.first['title'].should == issue.title @@ -26,7 +26,7 @@ describe Gitlab::API do describe "GET /projects/:id/issues" do it "should return project issues" do - get "#{api_prefix}/projects/#{project.code}/issues?private_token=#{user.private_token}" + get api("/projects/#{project.code}/issues", user) response.status.should == 200 json_response.should be_an Array json_response.first['title'].should == issue.title @@ -35,7 +35,7 @@ describe Gitlab::API do describe "GET /projects/:id/issues/:issue_id" do it "should return a project issue by id" do - get "#{api_prefix}/projects/#{project.code}/issues/#{issue.id}?private_token=#{user.private_token}" + get api("/projects/#{project.code}/issues/#{issue.id}", user) response.status.should == 200 json_response['title'].should == issue.title end @@ -43,7 +43,7 @@ describe Gitlab::API do describe "POST /projects/:id/issues" do it "should create a new project issue" do - post "#{api_prefix}/projects/#{project.code}/issues?private_token=#{user.private_token}", + post api("/projects/#{project.code}/issues", user), title: 'new issue', labels: 'label, label2' response.status.should == 201 json_response['title'].should == 'new issue' @@ -54,7 +54,7 @@ describe Gitlab::API do describe "PUT /projects/:id/issues/:issue_id" do it "should update a project issue" do - put "#{api_prefix}/projects/#{project.code}/issues/#{issue.id}?private_token=#{user.private_token}", + put api("/projects/#{project.code}/issues/#{issue.id}", user), title: 'updated title', labels: 'label2', closed: 1 response.status.should == 200 json_response['title'].should == 'updated title' @@ -66,7 +66,7 @@ describe Gitlab::API do describe "DELETE /projects/:id/issues/:issue_id" do it "should delete a project issue" do expect { - delete "#{api_prefix}/projects/#{project.code}/issues/#{issue.id}?private_token=#{user.private_token}" + delete api("/projects/#{project.code}/issues/#{issue.id}", user) }.to change { Issue.count }.by(-1) end end diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index a721ab3a..0cbc12af 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -10,13 +10,13 @@ describe Gitlab::API do describe "GET /projects" do it "should return authentication error" do - get "#{api_prefix}/projects" + get api("/projects") response.status.should == 401 end describe "authenticated GET /projects" do it "should return an array of projects" do - get "#{api_prefix}/projects?private_token=#{user.private_token}" + get api("/projects", user) response.status.should == 200 json_response.should be_an Array json_response.first['name'].should == project.name @@ -27,20 +27,20 @@ describe Gitlab::API do describe "GET /projects/:id" do it "should return a project by id" do - get "#{api_prefix}/projects/#{project.id}?private_token=#{user.private_token}" + get api("/projects/#{project.id}", user) response.status.should == 200 json_response['name'].should == project.name json_response['owner']['email'].should == user.email end it "should return a project by code name" do - get "#{api_prefix}/projects/#{project.code}?private_token=#{user.private_token}" + get api("/projects/#{project.code}", user) response.status.should == 200 json_response['name'].should == project.name end it "should return a 404 error if not found" do - get "#{api_prefix}/projects/42?private_token=#{user.private_token}" + get api("/projects/42", user) response.status.should == 404 json_response['message'].should == '404 Not found' end @@ -48,7 +48,7 @@ describe Gitlab::API do describe "GET /projects/:id/repository/branches" do it "should return an array of project branches" do - get "#{api_prefix}/projects/#{project.code}/repository/branches?private_token=#{user.private_token}" + get api("/projects/#{project.code}/repository/branches", user) response.status.should == 200 json_response.should be_an Array json_response.first['name'].should == project.repo.heads.sort_by(&:name).first.name @@ -57,7 +57,7 @@ describe Gitlab::API do describe "GET /projects/:id/repository/branches/:branch" do it "should return the branch information for a single branch" do - get "#{api_prefix}/projects/#{project.code}/repository/branches/new_design?private_token=#{user.private_token}" + get api("/projects/#{project.code}/repository/branches/new_design", user) response.status.should == 200 json_response['name'].should == 'new_design' @@ -67,7 +67,7 @@ describe Gitlab::API do describe "GET /projects/:id/repository/tags" do it "should return an array of project tags" do - get "#{api_prefix}/projects/#{project.code}/repository/tags?private_token=#{user.private_token}" + get api("/projects/#{project.code}/repository/tags", user) response.status.should == 200 json_response.should be_an Array json_response.first['name'].should == project.repo.tags.sort_by(&:name).reverse.first.name @@ -76,7 +76,7 @@ describe Gitlab::API do describe "GET /projects/:id/snippets/:snippet_id" do it "should return a project snippet" do - get "#{api_prefix}/projects/#{project.code}/snippets/#{snippet.id}?private_token=#{user.private_token}" + get api("/projects/#{project.code}/snippets/#{snippet.id}", user) response.status.should == 200 json_response['title'].should == snippet.title end @@ -84,7 +84,7 @@ describe Gitlab::API do describe "POST /projects/:id/snippets" do it "should create a new project snippet" do - post "#{api_prefix}/projects/#{project.code}/snippets?private_token=#{user.private_token}", + post api("/projects/#{project.code}/snippets", user), title: 'api test', file_name: 'sample.rb', code: 'test' response.status.should == 201 json_response['title'].should == 'api test' @@ -93,7 +93,7 @@ describe Gitlab::API do describe "PUT /projects/:id/snippets" do it "should update an existing project snippet" do - put "#{api_prefix}/projects/#{project.code}/snippets/#{snippet.id}?private_token=#{user.private_token}", + put api("/projects/#{project.code}/snippets/#{snippet.id}", user), code: 'updated code' response.status.should == 200 json_response['title'].should == 'example' @@ -104,34 +104,31 @@ describe Gitlab::API do describe "DELETE /projects/:id/snippets/:snippet_id" do it "should delete existing project snippet" do expect { - delete "#{api_prefix}/projects/#{project.code}/snippets/#{snippet.id}?private_token=#{user.private_token}" + delete api("/projects/#{project.code}/snippets/#{snippet.id}", user) }.to change { Snippet.count }.by(-1) end end describe "GET /projects/:id/snippets/:snippet_id/raw" do it "should get a raw project snippet" do - get "#{api_prefix}/projects/#{project.code}/snippets/#{snippet.id}/raw?private_token=#{user.private_token}" + get api("/projects/#{project.code}/snippets/#{snippet.id}/raw", user) response.status.should == 200 end end describe "GET /projects/:id/:sha/blob" do it "should get the raw file contents" do - get "#{api_prefix}/projects/#{project.code}/repository/commits/master/blob?filepath=README.md&private_token=#{user.private_token}" - + get api("/projects/#{project.code}/repository/commits/master/blob?filepath=README.md", user) response.status.should == 200 end it "should return 404 for invalid branch_name" do - get "#{api_prefix}/projects/#{project.code}/repository/commits/invalid_branch_name/blob?filepath=README.md&private_token=#{user.private_token}" - + get api("/projects/#{project.code}/repository/commits/invalid_branch_name/blob?filepath=README.md", user) response.status.should == 404 end it "should return 404 for invalid file" do - get "#{api_prefix}/projects/#{project.code}/repository/commits/master/blob?filepath=README.invalid&private_token=#{user.private_token}" - + get api("/projects/#{project.code}/repository/commits/master/blob?filepath=README.invalid", user) response.status.should == 404 end end diff --git a/spec/requests/api/users_spec.rb b/spec/requests/api/users_spec.rb index fcfea131..d791962a 100644 --- a/spec/requests/api/users_spec.rb +++ b/spec/requests/api/users_spec.rb @@ -7,13 +7,13 @@ describe Gitlab::API do describe "GET /users" do it "should return authentication error" do - get "#{api_prefix}/users" + get api("/users") response.status.should == 401 end describe "authenticated GET /users" do it "should return an array of users" do - get "#{api_prefix}/users?private_token=#{user.private_token}" + get api("/users", user) response.status.should == 200 json_response.should be_an Array json_response.first['email'].should == user.email @@ -23,7 +23,7 @@ describe Gitlab::API do describe "GET /users/:id" do it "should return a user by id" do - get "#{api_prefix}/users/#{user.id}?private_token=#{user.private_token}" + get api("/users/#{user.id}", user) response.status.should == 200 json_response['email'].should == user.email end @@ -31,7 +31,7 @@ describe Gitlab::API do describe "GET /user" do it "should return current user" do - get "#{api_prefix}/user?private_token=#{user.private_token}" + get api("/user", user) response.status.should == 200 json_response['email'].should == user.email end diff --git a/spec/requests/security/profile_access_spec.rb b/spec/requests/security/profile_access_spec.rb index b8ed27f0..9f6fe6a2 100644 --- a/spec/requests/security/profile_access_spec.rb +++ b/spec/requests/security/profile_access_spec.rb @@ -11,24 +11,30 @@ describe "Users Security" do end describe "GET /keys" do - it { keys_path.should be_allowed_for @u1 } - it { keys_path.should be_allowed_for :admin } - it { keys_path.should be_allowed_for :user } - it { keys_path.should be_denied_for :visitor } + subject { keys_path } + + it { should be_allowed_for @u1 } + it { should be_allowed_for :admin } + it { should be_allowed_for :user } + it { should be_denied_for :visitor } end describe "GET /profile" do - it { profile_path.should be_allowed_for @u1 } - it { profile_path.should be_allowed_for :admin } - it { profile_path.should be_allowed_for :user } - it { profile_path.should be_denied_for :visitor } + subject { profile_path } + + it { should be_allowed_for @u1 } + it { should be_allowed_for :admin } + it { should be_allowed_for :user } + it { should be_denied_for :visitor } end describe "GET /profile/password" do - it { profile_password_path.should be_allowed_for @u1 } - it { profile_password_path.should be_allowed_for :admin } - it { profile_password_path.should be_allowed_for :user } - it { profile_password_path.should be_denied_for :visitor } + subject { profile_password_path } + + it { should be_allowed_for @u1 } + it { should be_allowed_for :admin } + it { should be_allowed_for :user } + it { should be_denied_for :visitor } end end end diff --git a/spec/requests/security/project_access_spec.rb b/spec/requests/security/project_access_spec.rb index d503cf85..0cdf43bf 100644 --- a/spec/requests/security/project_access_spec.rb +++ b/spec/requests/security/project_access_spec.rb @@ -26,64 +26,76 @@ describe "Application access" do end describe "GET /project_code" do - it { project_path(@project).should be_allowed_for @u1 } - it { project_path(@project).should be_allowed_for @u3 } - it { project_path(@project).should be_denied_for :admin } - it { project_path(@project).should be_denied_for @u2 } - it { project_path(@project).should be_denied_for :user } - it { project_path(@project).should be_denied_for :visitor } + subject { project_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/master/tree" do - it { tree_project_ref_path(@project, @project.root_ref).should be_allowed_for @u1 } - it { tree_project_ref_path(@project, @project.root_ref).should be_allowed_for @u3 } - it { tree_project_ref_path(@project, @project.root_ref).should be_denied_for :admin } - it { tree_project_ref_path(@project, @project.root_ref).should be_denied_for @u2 } - it { tree_project_ref_path(@project, @project.root_ref).should be_denied_for :user } - it { tree_project_ref_path(@project, @project.root_ref).should be_denied_for :visitor } + subject { tree_project_ref_path(@project, @project.root_ref) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/commits" do - it { project_commits_path(@project).should be_allowed_for @u1 } - it { project_commits_path(@project).should be_allowed_for @u3 } - it { project_commits_path(@project).should be_denied_for :admin } - it { project_commits_path(@project).should be_denied_for @u2 } - it { project_commits_path(@project).should be_denied_for :user } - it { project_commits_path(@project).should be_denied_for :visitor } + subject { project_commits_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/commit" do - it { project_commit_path(@project, @project.commit.id).should be_allowed_for @u1 } - it { project_commit_path(@project, @project.commit.id).should be_allowed_for @u3 } - it { project_commit_path(@project, @project.commit.id).should be_denied_for :admin } - it { project_commit_path(@project, @project.commit.id).should be_denied_for @u2 } - it { project_commit_path(@project, @project.commit.id).should be_denied_for :user } - it { project_commit_path(@project, @project.commit.id).should be_denied_for :visitor } + subject { project_commit_path(@project, @project.commit.id) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/team" do - it { team_project_path(@project).should be_allowed_for @u1 } - it { team_project_path(@project).should be_allowed_for @u3 } - it { team_project_path(@project).should be_denied_for :admin } - it { team_project_path(@project).should be_denied_for @u2 } - it { team_project_path(@project).should be_denied_for :user } - it { team_project_path(@project).should be_denied_for :visitor } + subject { team_project_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/wall" do - it { wall_project_path(@project).should be_allowed_for @u1 } - it { wall_project_path(@project).should be_allowed_for @u3 } - it { wall_project_path(@project).should be_denied_for :admin } - it { wall_project_path(@project).should be_denied_for @u2 } - it { wall_project_path(@project).should be_denied_for :user } - it { wall_project_path(@project).should be_denied_for :visitor } + subject { wall_project_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/blob" do before do - @commit = @project.commit - @path = @commit.tree.contents.select { |i| i.is_a?(Grit::Blob)}.first.name - @blob_path = blob_project_ref_path(@project, @commit.id, path: @path) + commit = @project.commit + path = commit.tree.contents.select { |i| i.is_a?(Grit::Blob)}.first.name + @blob_path = blob_project_ref_path(@project, commit.id, path: path) end it { @blob_path.should be_allowed_for @u1 } @@ -95,93 +107,113 @@ describe "Application access" do end describe "GET /project_code/edit" do - it { edit_project_path(@project).should be_allowed_for @u1 } - it { edit_project_path(@project).should be_denied_for @u3 } - it { edit_project_path(@project).should be_denied_for :admin } - it { edit_project_path(@project).should be_denied_for @u2 } - it { edit_project_path(@project).should be_denied_for :user } - it { edit_project_path(@project).should be_denied_for :visitor } + subject { edit_project_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_denied_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/deploy_keys" do - it { project_deploy_keys_path(@project).should be_allowed_for @u1 } - it { project_deploy_keys_path(@project).should be_denied_for @u3 } - it { project_deploy_keys_path(@project).should be_denied_for :admin } - it { project_deploy_keys_path(@project).should be_denied_for @u2 } - it { project_deploy_keys_path(@project).should be_denied_for :user } - it { project_deploy_keys_path(@project).should be_denied_for :visitor } + subject { project_deploy_keys_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_denied_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/issues" do - it { project_issues_path(@project).should be_allowed_for @u1 } - it { project_issues_path(@project).should be_allowed_for @u3 } - it { project_issues_path(@project).should be_denied_for :admin } - it { project_issues_path(@project).should be_denied_for @u2 } - it { project_issues_path(@project).should be_denied_for :user } - it { project_issues_path(@project).should be_denied_for :visitor } + subject { project_issues_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/snippets" do - it { project_snippets_path(@project).should be_allowed_for @u1 } - it { project_snippets_path(@project).should be_allowed_for @u3 } - it { project_snippets_path(@project).should be_denied_for :admin } - it { project_snippets_path(@project).should be_denied_for @u2 } - it { project_snippets_path(@project).should be_denied_for :user } - it { project_snippets_path(@project).should be_denied_for :visitor } + subject { project_snippets_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/merge_requests" do - it { project_merge_requests_path(@project).should be_allowed_for @u1 } - it { project_merge_requests_path(@project).should be_allowed_for @u3 } - it { project_merge_requests_path(@project).should be_denied_for :admin } - it { project_merge_requests_path(@project).should be_denied_for @u2 } - it { project_merge_requests_path(@project).should be_denied_for :user } - it { project_merge_requests_path(@project).should be_denied_for :visitor } + subject { project_merge_requests_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/repository" do - it { project_repository_path(@project).should be_allowed_for @u1 } - it { project_repository_path(@project).should be_allowed_for @u3 } - it { project_repository_path(@project).should be_denied_for :admin } - it { project_repository_path(@project).should be_denied_for @u2 } - it { project_repository_path(@project).should be_denied_for :user } - it { project_repository_path(@project).should be_denied_for :visitor } + subject { project_repository_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/repository/branches" do - it { branches_project_repository_path(@project).should be_allowed_for @u1 } - it { branches_project_repository_path(@project).should be_allowed_for @u3 } - it { branches_project_repository_path(@project).should be_denied_for :admin } - it { branches_project_repository_path(@project).should be_denied_for @u2 } - it { branches_project_repository_path(@project).should be_denied_for :user } - it { branches_project_repository_path(@project).should be_denied_for :visitor } + subject { branches_project_repository_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/repository/tags" do - it { tags_project_repository_path(@project).should be_allowed_for @u1 } - it { tags_project_repository_path(@project).should be_allowed_for @u3 } - it { tags_project_repository_path(@project).should be_denied_for :admin } - it { tags_project_repository_path(@project).should be_denied_for @u2 } - it { tags_project_repository_path(@project).should be_denied_for :user } - it { tags_project_repository_path(@project).should be_denied_for :visitor } + subject { tags_project_repository_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/hooks" do - it { project_hooks_path(@project).should be_allowed_for @u1 } - it { project_hooks_path(@project).should be_allowed_for @u3 } - it { project_hooks_path(@project).should be_denied_for :admin } - it { project_hooks_path(@project).should be_denied_for @u2 } - it { project_hooks_path(@project).should be_denied_for :user } - it { project_hooks_path(@project).should be_denied_for :visitor } + subject { project_hooks_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/files" do - it { files_project_path(@project).should be_allowed_for @u1 } - it { files_project_path(@project).should be_allowed_for @u3 } - it { files_project_path(@project).should be_denied_for :admin } - it { files_project_path(@project).should be_denied_for @u2 } - it { files_project_path(@project).should be_denied_for :user } - it { files_project_path(@project).should be_denied_for :visitor } + subject { files_project_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end end end From 580ce4f2d85f89e81825c3b5993fd3ee68f4d93a Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sat, 25 Aug 2012 13:54:38 -0400 Subject: [PATCH 027/357] Minor cleanup to Milestone model and spec Back-ported from my still-in-progress major cleanup. --- app/models/milestone.rb | 14 +++----------- spec/models/milestone_spec.rb | 27 ++++++++++++++++++--------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/app/models/milestone.rb b/app/models/milestone.rb index 592c57f9..d416fb63 100644 --- a/app/models/milestone.rb +++ b/app/models/milestone.rb @@ -28,17 +28,9 @@ class Milestone < ActiveRecord::Base end def percent_complete - @percent_complete ||= begin - total_i = self.issues.count - closed_i = self.issues.closed.count - if total_i > 0 - (closed_i * 100) / total_i - else - 100 - end - rescue => ex - 0 - end + ((self.issues.closed.count * 100) / self.issues.count).abs + rescue ZeroDivisionError + 100 end def expires_at diff --git a/spec/models/milestone_spec.rb b/spec/models/milestone_spec.rb index 880d3f30..e9acc4e2 100644 --- a/spec/models/milestone_spec.rb +++ b/spec/models/milestone_spec.rb @@ -31,24 +31,33 @@ describe Milestone do it { milestone.should be_valid } - describe "Issues" do - before do + describe "#percent_complete" do + it "should not count open issues" do milestone.issues << issue + milestone.percent_complete.should == 0 end - it { milestone.percent_complete.should == 0 } + it "should count closed issues" do + issue.update_attributes(closed: true) + milestone.issues << issue + milestone.percent_complete.should == 100 + end - it do - issue.update_attributes closed: true + it "should recover from dividing by zero" do + milestone.issues.should_receive(:count).and_return(0) milestone.percent_complete.should == 100 end end - describe :expires_at do - before do - milestone.update_attributes due_date: Date.today + 1.day + describe "#expires_at" do + it "should be nil when due_date is unset" do + milestone.update_attributes(due_date: nil) + milestone.expires_at.should be_nil end - it { milestone.expires_at.should_not be_nil } + it "should not be nil when due_date is set" do + milestone.update_attributes(due_date: Date.tomorrow) + milestone.expires_at.should be_present + end end end From e0cd807020e0c50e365480133a66dca25efab36f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikul=C3=A1=C5=A1=20D=C3=ADt=C4=9B?= Date: Sat, 25 Aug 2012 20:48:30 +0200 Subject: [PATCH 028/357] fix web hooks help view commit count off by one --- app/views/hooks/_data_ex.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/hooks/_data_ex.html.erb b/app/views/hooks/_data_ex.html.erb index 8d3de3f0..e43714e9 100644 --- a/app/views/hooks/_data_ex.html.erb +++ b/app/views/hooks/_data_ex.html.erb @@ -37,7 +37,7 @@ } } ], - total_commits_count => 3 + total_commits_count => 4 } eos %> From 2c32574ac303e180f43cfc2a3d119dd6a7b29b0c Mon Sep 17 00:00:00 2001 From: randx Date: Sat, 25 Aug 2012 23:39:01 +0300 Subject: [PATCH 029/357] Project git clone panel --- app/assets/stylesheets/sections/projects.scss | 11 +++++++++++ app/views/projects/show.html.haml | 4 +--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/assets/stylesheets/sections/projects.scss b/app/assets/stylesheets/sections/projects.scss index 0866b43f..20fd2cbf 100644 --- a/app/assets/stylesheets/sections/projects.scss +++ b/app/assets/stylesheets/sections/projects.scss @@ -39,3 +39,14 @@ } } } + +.project_clone_panel { + @include border-radius(4px); + @include bg-gray-gradient; + padding: 4px 7px; + border: 1px solid #CCC; + margin-bottom:5px; + input[type=text] { + border: 1px solid #BBB; + } +} diff --git a/app/views/projects/show.html.haml b/app/views/projects/show.html.haml index ebd2c8e4..628dc53d 100644 --- a/app/views/projects/show.html.haml +++ b/app/views/projects/show.html.haml @@ -1,12 +1,10 @@ = render "project_head" -.entry +.project_clone_panel .row .span7 .form-horizontal .input-prepend.project_clone_holder - - %span.add-on git clone = link_to "SSH", "#", class: "btn small active", :"data-clone" => @project.ssh_url_to_repo = link_to "HTTP", "#", class: "btn small", :"data-clone" => @project.http_url_to_repo = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5" From 867f46076ed5fe0ce472f77eb17458ed3b317610 Mon Sep 17 00:00:00 2001 From: randx Date: Sun, 26 Aug 2012 01:40:01 +0300 Subject: [PATCH 030/357] No need to chown hooks in backup script any mroe --- lib/tasks/gitlab/backup.rake | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/tasks/gitlab/backup.rake b/lib/tasks/gitlab/backup.rake index d9053c23..8e2fa2c0 100644 --- a/lib/tasks/gitlab/backup.rake +++ b/lib/tasks/gitlab/backup.rake @@ -145,7 +145,6 @@ namespace :gitlab do permission_commands = [ "sudo chmod -R g+rwX #{Gitlab.config.git_base_path}", "sudo chown -R #{Gitlab.config.ssh_user}:#{Gitlab.config.ssh_user} #{Gitlab.config.git_base_path}", - "sudo chown gitlab:gitlab /home/git/repositories/**/hooks/post-receive" ] permission_commands.each { |command| Kernel.system(command) } puts "[DONE]".green From aaeb37419ac00ed065f1c88f617db5788ada8525 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Mon, 27 Aug 2012 00:13:03 +0300 Subject: [PATCH 031/357] Send notifiation on create UserProject relation (access granted) --- app/mailers/notify.rb | 7 +++++ app/observers/users_project_observer.rb | 5 ++++ .../project_access_granted_email.html.haml | 14 ++++++++++ spec/factories.rb | 5 ++++ spec/mailers/notify_spec.rb | 20 ++++++++++++++ spec/observers/users_project_observer_spec.rb | 27 +++++++++++++++++++ 6 files changed, 78 insertions(+) create mode 100644 app/observers/users_project_observer.rb create mode 100644 app/views/notify/project_access_granted_email.html.haml create mode 100644 spec/observers/users_project_observer_spec.rb diff --git a/app/mailers/notify.rb b/app/mailers/notify.rb index d0571b7b..1d222eb1 100644 --- a/app/mailers/notify.rb +++ b/app/mailers/notify.rb @@ -76,6 +76,13 @@ class Notify < ActionMailer::Base mail(to: recipient(recipient_id), subject: subject("changed issue ##{@issue.id}", @issue.title)) end + def project_access_granted_email(user_project_id) + @users_project = UsersProject.find user_project_id + @project = @users_project.project + mail(to: @users_project.user.email, + subject: subject("access to project was granted")) + end + private # Look up a User by their ID and return their email address diff --git a/app/observers/users_project_observer.rb b/app/observers/users_project_observer.rb new file mode 100644 index 00000000..cb33eb3f --- /dev/null +++ b/app/observers/users_project_observer.rb @@ -0,0 +1,5 @@ +class UsersProjectObserver < ActiveRecord::Observer + def after_create(users_project) + Notify.project_access_granted_email(users_project.id).deliver + end +end diff --git a/app/views/notify/project_access_granted_email.html.haml b/app/views/notify/project_access_granted_email.html.haml new file mode 100644 index 00000000..154c2aaa --- /dev/null +++ b/app/views/notify/project_access_granted_email.html.haml @@ -0,0 +1,14 @@ +%td.content{align: "left", style: "font-family: Helvetica, Arial, sans-serif; padding: 20px 0 0;", valign: "top", width: "600"} + %table{border: "0", cellpadding: "0", cellspacing: "0", style: "color: #717171; font: normal 11px Helvetica, Arial, sans-serif; margin: 0; padding: 0;", width: "600"} + %tr + %td{style: "font-size: 1px; line-height: 1px;", width: "21"} + %td{align: "left", style: "padding: 20px 0 0;"} + %h2{style: "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} + = "You got granted #{@users_project.project_access_human} access to project" + %td{style: "font-size: 1px; line-height: 1px;", width: "21"} + %tr + %td{style: "font-size: 1px; line-height: 1px;", width: "21"} + %td{align: "left", style: "padding: 20px 0 0;"} + %h2{style: "color:#646464 !important; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} + = link_to_gfm truncate(@project.name, length: 45), project_url(@project), title: @project.name + %br diff --git a/spec/factories.rb b/spec/factories.rb index ab2ca468..26868462 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -90,3 +90,8 @@ Factory.add(:milestone, Milestone) do |obj| obj.title = Faker::Lorem.sentence obj.due_date = Date.today + 1.month end + +Factory.add(:users_project, UsersProject) do |obj| + obj.user = Factory :user + obj.project = Factory :project +end diff --git a/spec/mailers/notify_spec.rb b/spec/mailers/notify_spec.rb index 93427ebf..60f3231c 100644 --- a/spec/mailers/notify_spec.rb +++ b/spec/mailers/notify_spec.rb @@ -145,6 +145,26 @@ describe Notify do end end + describe 'project access changed' do + let(:project) { Factory.create(:project, + path: "Fuu", + code: "Fuu") } + let(:user) { Factory.create :user } + let(:users_project) { Factory.create(:users_project, + project: project, + user: user) } + subject { Notify.project_access_granted_email(users_project.id) } + it 'has the correct subject' do + should have_subject /access to project was granted/ + end + it 'contains name of project' do + should have_body_text /#{project.name}/ + end + it 'contains new user role' do + should have_body_text /#{users_project.project_access_human}/ + end + end + context 'items that are noteable, the email for a note' do let(:note_author) { Factory.create(:user, name: 'author_name') } let(:note) { Factory.create(:note, project: project, author: note_author) } diff --git a/spec/observers/users_project_observer_spec.rb b/spec/observers/users_project_observer_spec.rb new file mode 100644 index 00000000..37de9e51 --- /dev/null +++ b/spec/observers/users_project_observer_spec.rb @@ -0,0 +1,27 @@ +require 'spec_helper' + +describe UsersProjectObserver do + let(:user) { Factory.create :user } + let(:project) { Factory.create(:project, + code: "Fuu", + path: "Fuu" ) } + let(:users_project) { Factory.create(:users_project, + project: project, + user: user )} + subject { UsersProjectObserver.instance } + + describe "#after_create" do + it "should called when UsersProject created" do + subject.should_receive(:after_create) + UsersProject.observers.enable :users_project_observer do + Factory.create(:users_project, + project: project, + user: user) + end + end + it "should send email to user" do + Notify.should_receive(:project_access_granted_email).with(users_project.id).and_return(double(deliver: true)) + subject.after_create(users_project) + end + end +end From 3c96d1f0e1fa1264250c0f93fbd0c26a0dbb1330 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Mon, 27 Aug 2012 00:32:03 +0300 Subject: [PATCH 032/357] Send notification on update UserProject relation (access changed) --- app/observers/users_project_observer.rb | 4 ++++ config/application.rb | 2 +- spec/observers/users_project_observer_spec.rb | 17 +++++++++++++++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/app/observers/users_project_observer.rb b/app/observers/users_project_observer.rb index cb33eb3f..763b2c87 100644 --- a/app/observers/users_project_observer.rb +++ b/app/observers/users_project_observer.rb @@ -2,4 +2,8 @@ class UsersProjectObserver < ActiveRecord::Observer def after_create(users_project) Notify.project_access_granted_email(users_project.id).deliver end + + def after_update(users_project) + Notify.project_access_granted_email(users_project.id).deliver + end end diff --git a/config/application.rb b/config/application.rb index ecd88b15..ad41f196 100644 --- a/config/application.rb +++ b/config/application.rb @@ -23,7 +23,7 @@ module Gitlab # config.plugins = [ :exception_notification, :ssl_requirement, :all ] # Activate observers that should always be running. - config.active_record.observers = :mailer_observer, :activity_observer, :project_observer, :key_observer, :issue_observer, :user_observer, :system_hook_observer + config.active_record.observers = :mailer_observer, :activity_observer, :project_observer, :key_observer, :issue_observer, :user_observer, :system_hook_observer, :users_project_observer # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. diff --git a/spec/observers/users_project_observer_spec.rb b/spec/observers/users_project_observer_spec.rb index 37de9e51..3e392040 100644 --- a/spec/observers/users_project_observer_spec.rb +++ b/spec/observers/users_project_observer_spec.rb @@ -6,8 +6,8 @@ describe UsersProjectObserver do code: "Fuu", path: "Fuu" ) } let(:users_project) { Factory.create(:users_project, - project: project, - user: user )} + project: project, + user: user )} subject { UsersProjectObserver.instance } describe "#after_create" do @@ -24,4 +24,17 @@ describe UsersProjectObserver do subject.after_create(users_project) end end + + describe "#after_update" do + it "should called when UsersProject updated" do + subject.should_receive(:after_update) + UsersProject.observers.enable :users_project_observer do + users_project.update_attribute(:project_access, 40) + end + end + it "should send email to user" do + Notify.should_receive(:project_access_granted_email).with(users_project.id).and_return(double(deliver: true)) + subject.after_update(users_project) + end + end end From 28cc4de2677d86274665acbd95891ac01960c17c Mon Sep 17 00:00:00 2001 From: Purwandi Date: Mon, 27 Aug 2012 12:43:28 +0700 Subject: [PATCH 033/357] Replace folder icon to use high quality --- app/assets/images/file_dir.png | Bin 517 -> 1648 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/app/assets/images/file_dir.png b/app/assets/images/file_dir.png index 97b0539393d29c78a596f565087b9282df0f0291..ea277bb14dba38fa633a32675ee58b88b88f80a4 100644 GIT binary patch delta 1613 zcmV-T2D15u1n>-yBYy-WX+uL$Nkc;*P;zf(X>4Tx05}naRo`#hR1`jmZ&IWdKOk5~ zhl<6oRa0BJ8yc;~21%2p?MfD<>DVeH9(p*dx19w`~g7O0}n_%Aq@s% zd)fBDv`JHkDym6Hd+5XuAtvnwRpGmKVkc9?T=n|PIo~$m6N9yl%7qB(zDb{1JtYOPA!qk%@Qub75C2T;T?(y%k7cw{!aEIzj}+@(TO5Y zz-|>CeHr)+QOwk9wo4Sh2mAPGw+7tv9PraN1Olr9mwlWPc+tlvJx(D%369Vz>lLjC zyaqhH*k&)cVSir(7|4_1Rc;%)B4&}Zt&(AK&*3kRaknx54=$T^^z2=OSo@r%xnsBw ziQX&rRKAHn*R}K<@Jp~?uenKKe+BrD`qF#?cpp*psgiwk-seYOU#%402HpjG(Qu~= zP5WwfF?$>svC;J<>zK$RIM;P&60@WifbUlLwAf?lk$1u(mFRYq89Q?S8HyrsX^MVnpsf`{W6(5UXREr zZM&7ilpo6ux^|%%%N9z;(dj0Ct!8>>5!%=VyPg-?ke}Vs>~sbgdDuU^Ixpr19NS&g zQew8Fz<)>RL_{M_7A<1csY*MfP@XcB#Jxr~JS8&7goVS)VKE|4(h_Xlc{z{c$ApZs z7riZ_QKdV_uW-M~u~8PF3UX~a6)MwxDE0Ha zPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiSBY#iOF*IB46Cei@XmvNzKBsGIKkN=X z$_Bgm&h5TyYjpf^^Nrn$ZO1mSZpOC4_}H(pE&Od#0y|)Oik6|u@OHupcq1J>TmjQ1 z4eM{2+Oeah>iL1tBPPK=$Ue-{x#7^N{-XY=Zm3_V7u4T7YJ?d(rX+nTeJlMa zeSar?Fa1o4bXmG0{UlwLzL72kIlJ$@pC#CPuU}yk-HKgk)oY(MCsR(!d*m18l>EH> zvOF8G6uDm>lc(gp@azfp%?$k=y%=-~vuaJXdoA$<7&H$h2Au}i##F_Gt8^Aw+nR zkw6!J0rE*iK~y*qrBbnKRY4G)-McTT6G=piAc84kDWVTT6hg{?rPydCf<-+!r#lj$ng=H+oN&>+I6T-{e-P!S+-TUGz1Q8eJ?#|AfIcH|CGc)<06$l<&UENr@ zwf1Pb(3elUJL&6(x6^ljI@baOKYn=s0TZZy$H89H5&3HYw|wvEvxWJ^yX$vuU-6F6 zw%+Z2{KnJo8+szXZBnrB9~`_7i*s|s=i6JuN?n6lTo+_xc=J-y3`r&lvZ7@v*`!#h zySN#7@#gS85TvQ6ckVs#qLpndV=Phf1WC&rX~-X4J_b) zs{kBPOmXL6Q~;mF6kp9LpjwHz>N4bdBvA)I=E#N_00iX#T8$Zi%qbX#0vyo^P&k}_#3Z4lNe4Z+V(J+q#Jlu=L@(bus&a$C+M_c( zoW+_(AG53jtUpcHnEBpRK=b&J4&)M?6^rAM49W;YX##ta#)&EfwI%Xox*Gs-L!r2nwN*UoS2#&-?;(lO*~KF&Bai00000 LNkvXXu0mjfR5}Yv delta 474 zcmV<00VV$M421-cBOL$%b5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D6tQ3Mx%00(qQ zO+^RX2OSA87wSK)9RL6Ug-Jv~R5;7ElQD`GK@f$%*VFzk;vvKXh?ypaf@cuSOiet6 zVq#=ux@cfxWMC$Sf?#Co0TxA9cXp<$oHh71YY)y75WthyAKuhqxU+wlw&xZPLDfK}X%WnkgiS=Y z$Mk;f+6i2wS|xDysGHzLcODn4Uxu}$c`78TNB$yb&mX&2~x+myO0-ufpjnKdv9Y# z8sV>XoZ@>OdQcKzjBvUqb`=uHOuD{0RpgI4&h5CgvUM%eY9g6^wN3VfzNcdtj_b+P zPKwS1`YkZ&rEoo4b0#$u4Pe^*ZHIJYLrI!j}Zc0q;$ zAmJq-$()<~lGPaGSXp Date: Fri, 24 Aug 2012 17:35:21 +0200 Subject: [PATCH 034/357] Update forms to show consistent link to GFM. --- app/assets/stylesheets/sections/notes.scss | 4 ++++ app/views/issues/_form.html.haml | 2 +- app/views/milestones/_form.html.haml | 2 +- app/views/notes/_form.html.haml | 5 ++--- app/views/wikis/_form.html.haml | 5 +++-- 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/app/assets/stylesheets/sections/notes.scss b/app/assets/stylesheets/sections/notes.scss index 30587ef5..afa50952 100644 --- a/app/assets/stylesheets/sections/notes.scss +++ b/app/assets/stylesheets/sections/notes.scss @@ -38,6 +38,10 @@ } } +#preview-note { + margin-bottom: 0; +} + .note { padding: 8px 0; border-bottom: 1px solid #eee; diff --git a/app/views/issues/_form.html.haml b/app/views/issues/_form.html.haml index 1b67eabd..65bf605a 100644 --- a/app/views/issues/_form.html.haml +++ b/app/views/issues/_form.html.haml @@ -38,7 +38,7 @@ = f.label :description, "Details" .input = f.text_area :description, maxlength: 2000, class: "xxlarge", rows: 14 - %p.hint Markdown is enabled. + %p.hint Issues are parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}. .actions diff --git a/app/views/milestones/_form.html.haml b/app/views/milestones/_form.html.haml index 1cd08ac3..49200c67 100644 --- a/app/views/milestones/_form.html.haml +++ b/app/views/milestones/_form.html.haml @@ -22,7 +22,7 @@ = f.label :description, "Description", class: "control-label" .controls = f.text_area :description, maxlength: 2000, class: "input-xlarge", rows: 10 - %p.hint Markdown is enabled. + %p.hint Milestones are parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}. .span6 .control-group = f.label :due_date, "Due Date", class: "control-label" diff --git a/app/views/notes/_form.html.haml b/app/views/notes/_form.html.haml index dac026bd..326f1add 100644 --- a/app/views/notes/_form.html.haml +++ b/app/views/notes/_form.html.haml @@ -9,10 +9,9 @@ = f.hidden_field :noteable_type = f.text_area :note, size: 255 #preview-note.well.hide - %p.hint - = link_to "Gitlab Markdown", help_markdown_path, target: '_blank' - is enabled. + .hint = link_to 'Preview', preview_project_notes_path(@project), id: 'preview-link' + .right Comments are parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}. .row.note_advanced_opts.hide .span2 diff --git a/app/views/wikis/_form.html.haml b/app/views/wikis/_form.html.haml index 6b6411be..305607d4 100644 --- a/app/views/wikis/_form.html.haml +++ b/app/views/wikis/_form.html.haml @@ -14,9 +14,10 @@ .middle_box_content .input %span.cgray - Wiki content is parsed with #{link_to "Markdown", "http://en.wikipedia.org/wiki/Markdown"}. - To add link to new page you can just type + Wiki content is parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}. + To link to a (new) page you can just type %code [Link Title](page-slug) + \. .bottom_box_content = f.label :content From 806695f491a8853a66d6dbde58b9e9d3eee1a72a Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Mon, 27 Aug 2012 21:20:13 +0200 Subject: [PATCH 035/357] Split and reformat markdown options and add refs to their docs. Also add hard_wrap option. --- app/helpers/gitlab_markdown_helper.rb | 29 +++++++++++++++++---------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/app/helpers/gitlab_markdown_helper.rb b/app/helpers/gitlab_markdown_helper.rb index 88e3473b..b4e3b962 100644 --- a/app/helpers/gitlab_markdown_helper.rb +++ b/app/helpers/gitlab_markdown_helper.rb @@ -54,17 +54,24 @@ module GitlabMarkdownHelper end def markdown(text) - @__renderer ||= Redcarpet::Markdown.new(Redcarpet::Render::GitlabHTML.new(self, filter_html: true, with_toc_data: true), { - no_intra_emphasis: true, - tables: true, - fenced_code_blocks: true, - autolink: true, - strikethrough: true, - lax_html_blocks: true, - space_after_headers: true, - superscript: true - }) + unless @markdown + gitlab_renderer = Redcarpet::Render::GitlabHTML.new(self, + # see https://github.com/vmg/redcarpet#darling-i-packed-you-a-couple-renderers-for-lunch- + filter_html: true, + with_toc_data: true, + hard_wrap: true) + @markdown ||= Redcarpet::Markdown.new(gitlab_renderer, + # see https://github.com/vmg/redcarpet#and-its-like-really-simple-to-use + no_intra_emphasis: true, + tables: true, + fenced_code_blocks: true, + autolink: true, + strikethrough: true, + lax_html_blocks: true, + space_after_headers: true, + superscript: true) + end - @__renderer.render(text).html_safe + @markdown.render(text).html_safe end end From 1f1ce5fbd47a8a9966323caf6b5b59672c74007a Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Fri, 24 Aug 2012 17:44:47 +0200 Subject: [PATCH 036/357] Revamp GFM user docs. --- app/views/help/markdown.html.haml | 114 +++++++++++++++++++++++++----- 1 file changed, 97 insertions(+), 17 deletions(-) diff --git a/app/views/help/markdown.html.haml b/app/views/help/markdown.html.haml index 8d6fb2a5..6a4bbb02 100644 --- a/app/views/help/markdown.html.haml +++ b/app/views/help/markdown.html.haml @@ -1,25 +1,105 @@ -- bash_lexer = Pygments::Lexer[:bash] -%h3.page_title Gitlab Markdown +%h3.page_title Gitlab Flavored Markdown .back_link = link_to help_path do ← to index %hr -%p.slead We extend Markdown with some GITLAB specific syntax. It allows you to link to: +.row + .span8 + %p + For Gitlab we developed something we call "Gitlab Flavored Markdown" (GFM). + It extends the standard Markdown in a few significant ways adds some useful functionality. -%ul - %li issues (#123) - %li merge request (!123) - %li commits (1234567) - %li team members (@foo) - %li snippets ($123) + %p You can use GFM in: + %ul + %li commit messages + %li comments + %li wall posts + %li issues + %li merge requests + %li milestones + %li wiki pages -%p.slead in + %h3 Differences from traditional Markdown -%ul - %li commit messages - %li notes/comments/wall posts - %li issues - %li merge requests - %li milestones - %li wiki pages + %h4 Newlines + + %p + The biggest difference that GFM introduces is in the handling of linebreaks. + With traditional Markdown you can hard wrap paragraphs of text and they will be combined into a single paragraph. We find this to be the cause of a huge number of unintentional formatting errors. + GFM treats newlines in paragraph-like content as real line breaks, which is probably what you intended. + + + %p The next paragraph contains two phrases separated by a single newline character: + %pre= "Roses are red\nViolets are blue" + %p becomes + = markdown "Roses are red\nViolets are blue" + + %h4 Multiple underscores in words + + %p + It is not reasonable to italicize just part of a word, especially when you're dealing with code and names often appear with multiple underscores. + Therefore, GFM ignores multiple underscores in words. + + %pre= "perform_complicated_task\ndo_this_and_do_that_and_another_thing" + %p becomes + = markdown "perform_complicated_task\ndo_this_and_do_that_and_another_thing" + + %h4 URL autolinking + + %p + GFM will autolink standard URLs you copy and paste into your text. + So if you want to link to a URL (instead of a textual link), you can simply put the URL in verbatim and it will be turned into a link to that URL. + + %h4 Fenced code blocks + + %p + Markdown converts text with four spaces at the front of each line to code blocks. + GFM supports that, but we also support fenced blocks. + Just wrap your code blocks in ``` and you won't need to indent manually to trigger a code block. + + %pre= %Q{```ruby\nrequire 'redcarpet'\nmarkdown = Redcarpet.new("Hello World!")\nputs markdown.to_html\n```} + %p becomes + = markdown %Q{```ruby\nrequire 'redcarpet'\nmarkdown = Redcarpet.new("Hello World!")\nputs markdown.to_html\n```} + + %h4 Special Gitlab references + + %p + GFM recognizes special references. + You can easily reference e.g. a team member, an issue or a commit within a project. + GFM will turn that reference into a link so you can navigate between them easily. + + %p GFM will recognize the following references: + %ul + %li + %code @foo + for team members + %li + %code #123 + for issues + %li + %code !123 + for merge request + %li + %code $123 + for snippets + %li + %code 1234567 + for commits + + -# this example will only be shown if the user has a project with at least one issue + - if @project = current_user.projects.first + - if issue = @project.issues.first + %p For example in your #{link_to @project.name, project_path(@project)} project something like + %pre= "This is related to ##{issue.id}. @#{current_user.name} is working on solving it." + %p becomes + = markdown "This is related to ##{issue.id}. @#{current_user.name} is working on solving it." + + + + .span4.right + .alert.alert-info + %p + If you're not already familiar with Markdown, you should spend 15 minutes and go over the excellent + %strong= link_to "Markdown Syntax Guide", "http://daringfireball.net/projects/markdown/syntax" + at Daring Fireball. From c81d4ab4a9101620e06cb401e7267789a6376d36 Mon Sep 17 00:00:00 2001 From: LeonB Date: Tue, 28 Aug 2012 10:57:23 +0200 Subject: [PATCH 037/357] Fixed some hardcoded paths New config option: git_hooks_path --- config/initializers/1_settings.rb | 4 ++++ lib/tasks/gitlab/backup.rake | 1 + lib/tasks/gitlab/status.rake | 2 +- lib/tasks/gitlab/write_hook.rake | 2 +- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb index 8165d6c2..27c5bc22 100644 --- a/config/initializers/1_settings.rb +++ b/config/initializers/1_settings.rb @@ -66,6 +66,10 @@ class Settings < Settingslogic git_host['base_path'] || '/home/git/repositories/' end + def git_hooks_path + git_host['hooks_path'] || '/home/git/share/gitolite/hooks/' + end + def git_upload_pack if git_host['upload_pack'] != false true diff --git a/lib/tasks/gitlab/backup.rake b/lib/tasks/gitlab/backup.rake index 8e2fa2c0..4dffd1ad 100644 --- a/lib/tasks/gitlab/backup.rake +++ b/lib/tasks/gitlab/backup.rake @@ -145,6 +145,7 @@ namespace :gitlab do permission_commands = [ "sudo chmod -R g+rwX #{Gitlab.config.git_base_path}", "sudo chown -R #{Gitlab.config.ssh_user}:#{Gitlab.config.ssh_user} #{Gitlab.config.git_base_path}", + "sudo chown gitlab:gitlab #{Gitlab.config.git_base_path}**/hooks/post-receive" ] permission_commands.each { |command| Kernel.system(command) } puts "[DONE]".green diff --git a/lib/tasks/gitlab/status.rake b/lib/tasks/gitlab/status.rake index 02d27d4b..91456189 100644 --- a/lib/tasks/gitlab/status.rake +++ b/lib/tasks/gitlab/status.rake @@ -56,7 +56,7 @@ namespace :gitlab do return end - gitolite_hooks_path = File.join("/home", Gitlab.config.ssh_user, "share", "gitolite", "hooks", "common") + gitolite_hooks_path = File.join(Gitlab.config.git_hooks_path, "common") gitlab_hook_files = ['post-receive'] gitlab_hook_files.each do |file_name| dest = File.join(gitolite_hooks_path, file_name) diff --git a/lib/tasks/gitlab/write_hook.rake b/lib/tasks/gitlab/write_hook.rake index 098331b8..9ec9c838 100644 --- a/lib/tasks/gitlab/write_hook.rake +++ b/lib/tasks/gitlab/write_hook.rake @@ -2,7 +2,7 @@ namespace :gitlab do namespace :gitolite do desc "GITLAB | Write GITLAB hook for gitolite" task :write_hooks => :environment do - gitolite_hooks_path = File.join("/home", Gitlab.config.ssh_user, "share", "gitolite", "hooks", "common") + gitolite_hooks_path = File.join(Gitlab.config.git_hooks_path, "common") gitlab_hooks_path = Rails.root.join("lib", "hooks") gitlab_hook_files = ['post-receive'] From 7a16572c0a47530939b4f59fb3f3bec490c03aba Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Tue, 28 Aug 2012 12:09:10 +0200 Subject: [PATCH 038/357] Fixed typo --- lib/tasks/gitlab/status.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tasks/gitlab/status.rake b/lib/tasks/gitlab/status.rake index 02d27d4b..9483a95c 100644 --- a/lib/tasks/gitlab/status.rake +++ b/lib/tasks/gitlab/status.rake @@ -81,7 +81,7 @@ namespace :gitlab do next end - puts "post-reveice file ok".green + puts "post-receive file ok".green end end From aa708ed961e6c84010b3371cf64359152f08e7a8 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 28 Aug 2012 13:47:13 +0300 Subject: [PATCH 039/357] Simplify setup for nginx, initd with already predefined files --- doc/installation.md | 95 +++------------------------------------- lib/support/init-gitlab | 54 +++++++++++++++++++++++ lib/support/nginx-gitlab | 33 ++++++++++++++ 3 files changed, 94 insertions(+), 88 deletions(-) create mode 100644 lib/support/init-gitlab create mode 100644 lib/support/nginx-gitlab diff --git a/doc/installation.md b/doc/installation.md index 1d32e1b7..7d3c2c41 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -244,42 +244,14 @@ You can login via web using admin generated with setup: sudo -u gitlab cp config/unicorn.rb.orig config/unicorn.rb sudo -u gitlab bundle exec unicorn_rails -c config/unicorn.rb -E production -D -Edit /etc/nginx/nginx.conf. In the *http* section add: +Add gitlab to nginx sites & change with your host specific settings - upstream gitlab { - server unix:/home/gitlab/gitlab/tmp/sockets/gitlab.socket; - } + cp /home/gitlab/gitlab/lib/support/nginx-gitlab /etc/nginx/sites-enabled/gitlab - server { - listen YOUR_SERVER_IP:80; # e.g., listen 192.168.1.1:80; - server_name YOUR_SERVER_FQDN; # e.g., server_name source.example.com; - root /home/gitlab/gitlab/public; - - # individual nginx logs for this gitlab vhost - access_log /var/log/nginx/gitlab_access.log; - error_log /var/log/nginx/gitlab_error.log; - - location / { - # serve static files from defined root folder;. - # @gitlab is a named location for the upstream fallback, see below - try_files $uri $uri/index.html $uri.html @gitlab; - } - - # if a file, which is not found in the root folder is requested, - # then the proxy pass the request to the upsteam (gitlab unicorn) - location @gitlab { - proxy_redirect off; - - # you need to change this to "https", if you set "ssl" directive to "on" - proxy_set_header X-FORWARDED_PROTO http; - proxy_set_header Host $http_host; - proxy_set_header X-Real-IP $remote_addr; - - proxy_pass http://gitlab; - } - } - -Change **YOUR_SERVER_IP** and **YOUR_SERVER_FQDN** to the IP address and fully-qualified domain name of the host serving GitLab. + # Change **YOUR_SERVER_IP** and **YOUR_SERVER_FQDN** + # to the IP address and fully-qualified domain name + # of the host serving GitLab. + vim /etc/nginx/sites-enabled/nginx-gitlab Restart nginx: @@ -287,60 +259,7 @@ Restart nginx: Create init script in /etc/init.d/gitlab: - #! /bin/bash - ### BEGIN INIT INFO - # Provides: gitlab - # Required-Start: $local_fs $remote_fs $network $syslog redis-server - # Required-Stop: $local_fs $remote_fs $network $syslog - # Default-Start: 2 3 4 5 - # Default-Stop: 0 1 6 - # Short-Description: GitLab git repository management - # Description: GitLab git repository management - ### END INIT INFO - - DAEMON_OPTS="-c /home/gitlab/gitlab/config/unicorn.rb -E production -D" - NAME=unicorn - DESC="Gitlab service" - PID=/home/gitlab/gitlab/tmp/pids/unicorn.pid - RESQUE_PID=/home/gitlab/gitlab/tmp/pids/resque_worker.pid - - case "$1" in - start) - CD_TO_APP_DIR="cd /home/gitlab/gitlab" - START_DAEMON_PROCESS="bundle exec unicorn_rails $DAEMON_OPTS" - START_RESQUE_PROCESS="./resque.sh" - - echo -n "Starting $DESC: " - if [ `whoami` = root ]; then - sudo -u gitlab sh -l -c "$CD_TO_APP_DIR > /dev/null 2>&1 && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS" - else - $CD_TO_APP_DIR > /dev/null 2>&1 && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS - fi - echo "$NAME." - ;; - stop) - echo -n "Stopping $DESC: " - kill -QUIT `cat $PID` - kill -QUIT `cat $RESQUE_PID` - echo "$NAME." - ;; - restart) - echo -n "Restarting $DESC: " - kill -USR2 `cat $PID` - echo "$NAME." - ;; - reload) - echo -n "Reloading $DESC configuration: " - kill -HUP `cat $PID` - echo "$NAME." - ;; - *) - echo "Usage: $NAME {start|stop|restart|reload}" >&2 - exit 1 - ;; - esac - - exit 0 + cp /home/gitlab/gitlab/lib/support/init-gitlab /etc/init.d/gitlab Adding permission: diff --git a/lib/support/init-gitlab b/lib/support/init-gitlab new file mode 100644 index 00000000..f146e80f --- /dev/null +++ b/lib/support/init-gitlab @@ -0,0 +1,54 @@ +#! /bin/bash +### BEGIN INIT INFO +# Provides: gitlab +# Required-Start: $local_fs $remote_fs $network $syslog redis-server +# Required-Stop: $local_fs $remote_fs $network $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: GitLab git repository management +# Description: GitLab git repository management +### END INIT INFO + +DAEMON_OPTS="-c /home/gitlab/gitlab/config/unicorn.rb -E production -D" +NAME=unicorn +DESC="Gitlab service" +PID=/home/gitlab/gitlab/tmp/pids/unicorn.pid +RESQUE_PID=/home/gitlab/gitlab/tmp/pids/resque_worker.pid + +case "$1" in + start) + CD_TO_APP_DIR="cd /home/gitlab/gitlab" + START_DAEMON_PROCESS="bundle exec unicorn_rails $DAEMON_OPTS" + START_RESQUE_PROCESS="./resque.sh" + + echo -n "Starting $DESC: " + if [ `whoami` = root ]; then + sudo -u gitlab sh -l -c "$CD_TO_APP_DIR > /dev/null 2>&1 && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS" + else + $CD_TO_APP_DIR > /dev/null 2>&1 && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS + fi + echo "$NAME." + ;; + stop) + echo -n "Stopping $DESC: " + kill -QUIT `cat $PID` + kill -QUIT `cat $RESQUE_PID` + echo "$NAME." + ;; + restart) + echo -n "Restarting $DESC: " + kill -USR2 `cat $PID` + echo "$NAME." + ;; + reload) + echo -n "Reloading $DESC configuration: " + kill -HUP `cat $PID` + echo "$NAME." + ;; + *) + echo "Usage: $NAME {start|stop|restart|reload}" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/lib/support/nginx-gitlab b/lib/support/nginx-gitlab new file mode 100644 index 00000000..fa15d201 --- /dev/null +++ b/lib/support/nginx-gitlab @@ -0,0 +1,33 @@ +upstream gitlab { + server unix:/home/gitlab/gitlab/tmp/sockets/gitlab.socket; +} + +server { + listen YOUR_SERVER_IP:80; # e.g., listen 192.168.1.1:80; + server_name YOUR_SERVER_FQDN; # e.g., server_name source.example.com; + root /home/gitlab/gitlab/public; + + # individual nginx logs for this gitlab vhost + access_log /var/log/nginx/gitlab_access.log; + error_log /var/log/nginx/gitlab_error.log; + + location / { + # serve static files from defined root folder;. + # @gitlab is a named location for the upstream fallback, see below + try_files $uri $uri/index.html $uri.html @gitlab; + } + + # if a file, which is not found in the root folder is requested, + # then the proxy pass the request to the upsteam (gitlab unicorn) + location @gitlab { + proxy_redirect off; + + # you need to change this to "https", if you set "ssl" directive to "on" + proxy_set_header X-FORWARDED_PROTO http; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + + proxy_pass http://gitlab; + } +} + From 05fa1f167c05c13b269b104de33dc7a38f34e347 Mon Sep 17 00:00:00 2001 From: LeonB Date: Tue, 28 Aug 2012 13:06:05 +0200 Subject: [PATCH 040/357] Added hooks_path option example --- config/gitlab.yml.example | 1 + 1 file changed, 1 insertion(+) diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example index be36ee6d..d05cc1be 100644 --- a/config/gitlab.yml.example +++ b/config/gitlab.yml.example @@ -33,6 +33,7 @@ app: git_host: admin_uri: git@localhost:gitolite-admin base_path: /home/git/repositories/ + # hooks_path: /var/lib/gitolite/.gitolite/hooks/ # only needed when gitolite is not installed according the manual # host: localhost git_user: git upload_pack: true From ffdda12f663d6a634689f7c7b16560bcf792415e Mon Sep 17 00:00:00 2001 From: LeonB Date: Tue, 28 Aug 2012 14:18:49 +0200 Subject: [PATCH 041/357] Line not needed anymore --- lib/tasks/gitlab/backup.rake | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/tasks/gitlab/backup.rake b/lib/tasks/gitlab/backup.rake index 4dffd1ad..04d240f6 100644 --- a/lib/tasks/gitlab/backup.rake +++ b/lib/tasks/gitlab/backup.rake @@ -144,8 +144,7 @@ namespace :gitlab do if Kernel.system("cd #{File.dirname(project.second)} > /dev/null 2>&1 && git clone --bare #{backup_path_repo}/#{project.first}.bundle #{project.first}.git > /dev/null 2>&1") permission_commands = [ "sudo chmod -R g+rwX #{Gitlab.config.git_base_path}", - "sudo chown -R #{Gitlab.config.ssh_user}:#{Gitlab.config.ssh_user} #{Gitlab.config.git_base_path}", - "sudo chown gitlab:gitlab #{Gitlab.config.git_base_path}**/hooks/post-receive" + "sudo chown -R #{Gitlab.config.ssh_user}:#{Gitlab.config.ssh_user} #{Gitlab.config.git_base_path}" ] permission_commands.each { |command| Kernel.system(command) } puts "[DONE]".green From 7cdc5b9e0438c35c83fce739a764cb146d20c004 Mon Sep 17 00:00:00 2001 From: randx Date: Wed, 29 Aug 2012 00:04:06 +0300 Subject: [PATCH 042/357] Use similar interface to access gitolite Simplified gitolite handle logic Stubn over monkeypatch Stub only specific methods in Gitlab:Gitolite Moved grach auth to lib added specs for keys observer removes SshKey role --- app/models/key.rb | 5 +- app/models/protected_branch.rb | 4 +- app/models/users_project.rb | 6 +-- app/observers/key_observer.rb | 7 ++- app/roles/git_host.rb | 5 ++ app/roles/git_merge.rb | 2 - app/roles/repository.rb | 8 ++-- app/roles/ssh_key.rb | 18 ------- config/environment.rb | 2 - config/initializers/5_backend.rb | 5 ++ features/support/env.rb | 8 ++++ lib/gitlab/{ => backend}/gitolite.rb | 48 +++++++++++++++++-- .../gitlab/backend}/grack_auth.rb | 0 lib/gitlab/git_host.rb | 17 ------- lib/tasks/gitlab/enable_automerge.rake | 4 +- lib/tasks/gitlab/gitolite_rebuild.rake | 2 +- spec/observers/key_observer_spec.rb | 34 +++++++++++++ spec/spec_helper.rb | 3 ++ spec/support/gitolite_stub.rb | 35 ++++++++++++++ spec/support/monkeypatch.rb | 30 ------------ 20 files changed, 155 insertions(+), 88 deletions(-) create mode 100644 app/roles/git_host.rb delete mode 100644 app/roles/git_merge.rb delete mode 100644 app/roles/ssh_key.rb create mode 100644 config/initializers/5_backend.rb rename lib/gitlab/{ => backend}/gitolite.rb (79%) rename {config/initializers => lib/gitlab/backend}/grack_auth.rb (100%) delete mode 100644 lib/gitlab/git_host.rb create mode 100644 spec/observers/key_observer_spec.rb create mode 100644 spec/support/gitolite_stub.rb diff --git a/app/models/key.rb b/app/models/key.rb index cfcb1f63..8b61675a 100644 --- a/app/models/key.rb +++ b/app/models/key.rb @@ -1,7 +1,6 @@ require 'digest/md5' class Key < ActiveRecord::Base - include SshKey belongs_to :user belongs_to :project @@ -50,6 +49,10 @@ class Key < ActiveRecord::Base user.projects end end + + def last_deploy? + Key.where(identifier: identifier).count == 0 + end end # == Schema Information # diff --git a/app/models/protected_branch.rb b/app/models/protected_branch.rb index 4da1432c..7c30f7a0 100644 --- a/app/models/protected_branch.rb +++ b/app/models/protected_branch.rb @@ -1,4 +1,6 @@ class ProtectedBranch < ActiveRecord::Base + include GitHost + belongs_to :project validates_presence_of :project_id validates_presence_of :name @@ -7,7 +9,7 @@ class ProtectedBranch < ActiveRecord::Base after_destroy :update_repository def update_repository - Gitlab::GitHost.system.update_project(project.path, project) + git_host.update_repository(project) end def commit diff --git a/app/models/users_project.rb b/app/models/users_project.rb index 36e6d904..7d172934 100644 --- a/app/models/users_project.rb +++ b/app/models/users_project.rb @@ -1,4 +1,6 @@ class UsersProject < ActiveRecord::Base + include GitHost + GUEST = 10 REPORTER = 20 DEVELOPER = 30 @@ -58,9 +60,7 @@ class UsersProject < ActiveRecord::Base end def update_repository - Gitlab::GitHost.system.new.configure do |c| - c.update_project(project.path, project) - end + git_host.update_repository(project) end def project_access_human diff --git a/app/observers/key_observer.rb b/app/observers/key_observer.rb index fac53a67..a3f17bde 100644 --- a/app/observers/key_observer.rb +++ b/app/observers/key_observer.rb @@ -1,9 +1,12 @@ class KeyObserver < ActiveRecord::Observer + include GitHost + def after_save(key) - key.update_repository + git_host.set_key(key.identifier, key.key, key.projects) end def after_destroy(key) - key.repository_delete_key + return if key.is_deploy_key && !key.last_deploy? + git_host.remove_key(key.identifier, key.projects) end end diff --git a/app/roles/git_host.rb b/app/roles/git_host.rb new file mode 100644 index 00000000..aa620f77 --- /dev/null +++ b/app/roles/git_host.rb @@ -0,0 +1,5 @@ +module GitHost + def git_host + Gitlab::Gitolite.new + end +end diff --git a/app/roles/git_merge.rb b/app/roles/git_merge.rb deleted file mode 100644 index 95e5942f..00000000 --- a/app/roles/git_merge.rb +++ /dev/null @@ -1,2 +0,0 @@ -module GitMerge -end diff --git a/app/roles/repository.rb b/app/roles/repository.rb index 17f52499..5fa950db 100644 --- a/app/roles/repository.rb +++ b/app/roles/repository.rb @@ -1,4 +1,6 @@ module Repository + include GitHost + def valid_repo? repo rescue @@ -48,7 +50,7 @@ module Repository end def url_to_repo - Gitlab::GitHost.url_to_repo(path) + git_host.url_to_repo(path) end def path_to_repo @@ -56,11 +58,11 @@ module Repository end def update_repository - Gitlab::GitHost.system.update_project(path, self) + git_host.update_repository(self) end def destroy_repository - Gitlab::GitHost.system.destroy_project(self) + git_host.remove_repository(self) end def repo_exists? diff --git a/app/roles/ssh_key.rb b/app/roles/ssh_key.rb deleted file mode 100644 index 5e1d2c23..00000000 --- a/app/roles/ssh_key.rb +++ /dev/null @@ -1,18 +0,0 @@ -module SshKey - def update_repository - Gitlab::GitHost.system.new.configure do |c| - c.update_keys(identifier, key) - c.update_projects(projects) - end - end - - def repository_delete_key - Gitlab::GitHost.system.new.configure do |c| - #delete key file is there is no identically deploy keys - if !is_deploy_key || Key.where(identifier: identifier).count() == 0 - c.delete_key(identifier) - end - c.update_projects(projects) - end - end -end diff --git a/config/environment.rb b/config/environment.rb index c880a7ad..3b186a9d 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -3,5 +3,3 @@ require File.expand_path('../application', __FILE__) # Initialize the rails application Gitlab::Application.initialize! - -require File.join(Rails.root, "lib", "gitlab", "git_host") diff --git a/config/initializers/5_backend.rb b/config/initializers/5_backend.rb new file mode 100644 index 00000000..85f747ac --- /dev/null +++ b/config/initializers/5_backend.rb @@ -0,0 +1,5 @@ +# GIT over HTTP +require Rails.root.join("lib", "gitlab", "backend", "grack_auth") + +# GITOLITE backend +require Rails.root.join("lib", "gitlab", "backend", "gitolite") diff --git a/features/support/env.rb b/features/support/env.rb index 80a465b4..0d9a9ed4 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -5,10 +5,12 @@ end require 'cucumber/rails' require 'webmock/cucumber' + WebMock.allow_net_connect! require Rails.root.join 'spec/factories' require Rails.root.join 'spec/support/monkeypatch' +require Rails.root.join 'spec/support/gitolite_stub' require Rails.root.join 'spec/support/login_helpers' require Rails.root.join 'spec/support/valid_commit' @@ -48,3 +50,9 @@ headless = Headless.new headless.start require 'cucumber/rspec/doubles' + +include GitoliteStub + +Before do + stub_gitolite! +end diff --git a/lib/gitlab/gitolite.rb b/lib/gitlab/backend/gitolite.rb similarity index 79% rename from lib/gitlab/gitolite.rb rename to lib/gitlab/backend/gitolite.rb index a3f34061..4d0a0cf0 100644 --- a/lib/gitlab/gitolite.rb +++ b/lib/gitlab/backend/gitolite.rb @@ -2,24 +2,62 @@ require 'gitolite' require 'timeout' require 'fileutils' +# TODO: refactor & cleanup module Gitlab class Gitolite class AccessDenied < StandardError; end - def self.update_project(path, project) - self.new.configure { |git| git.update_project(path, project) } + def set_key key_id, key_content, projects + self.configure do |c| + c.update_keys(key_id, key_content) + c.update_project(project.path, projects) + end end - def self.destroy_project(project) - self.new.configure { |git| git.destroy_project(project) } + def remove_key key_id, projects + self.configure do |c| + c.delete_key(key_id) + c.update_project(project.path, projects) + end end + def update_repository project + self.configure do |c| + c.update_project(project.path, project) + end + end + + alias_method :create_repository, :update_repository + + def remove_repository project + self.configure do |c| + c.destroy_project(project) + end + end + + def url_to_repo path + Gitlab.config.ssh_path + "#{path}.git" + end + + def initialize + # create tmp dir + @local_dir = File.join(Rails.root, 'tmp',"gitlabhq-gitolite-#{Time.now.to_i}") + end + + def enable_automerge + self.configure do |git| + git.admin_all_repo + end + end + + private + def pull # create tmp dir @local_dir = File.join(Rails.root, 'tmp',"gitlabhq-gitolite-#{Time.now.to_i}") Dir.mkdir @local_dir - `git clone #{GitHost.admin_uri} #{@local_dir}/gitolite` + `git clone #{self.class.admin_uri} #{@local_dir}/gitolite` end def push diff --git a/config/initializers/grack_auth.rb b/lib/gitlab/backend/grack_auth.rb similarity index 100% rename from config/initializers/grack_auth.rb rename to lib/gitlab/backend/grack_auth.rb diff --git a/lib/gitlab/git_host.rb b/lib/gitlab/git_host.rb deleted file mode 100644 index 76b2c7b1..00000000 --- a/lib/gitlab/git_host.rb +++ /dev/null @@ -1,17 +0,0 @@ -require File.join(Rails.root, "lib", "gitlab", "gitolite") - -module Gitlab - class GitHost - def self.system - Gitlab::Gitolite - end - - def self.admin_uri - Gitlab.config.git_host.admin_uri - end - - def self.url_to_repo(path) - Gitlab.config.ssh_path + "#{path}.git" - end - end -end diff --git a/lib/tasks/gitlab/enable_automerge.rake b/lib/tasks/gitlab/enable_automerge.rake index 07f80586..0a1a0fa7 100644 --- a/lib/tasks/gitlab/enable_automerge.rake +++ b/lib/tasks/gitlab/enable_automerge.rake @@ -2,9 +2,7 @@ namespace :gitlab do namespace :app do desc "GITLAB | Enable auto merge" task :enable_automerge => :environment do - Gitlab::GitHost.system.new.configure do |git| - git.admin_all_repo - end + Gitlab::Gitolite.new.enable_automerge Project.find_each do |project| if project.repo_exists? && !project.satellite.exists? diff --git a/lib/tasks/gitlab/gitolite_rebuild.rake b/lib/tasks/gitlab/gitolite_rebuild.rake index 5ab17606..534aa315 100644 --- a/lib/tasks/gitlab/gitolite_rebuild.rake +++ b/lib/tasks/gitlab/gitolite_rebuild.rake @@ -16,7 +16,7 @@ namespace :gitlab do task :update_keys => :environment do puts "Starting Key" Key.find_each(:batch_size => 100) do |key| - key.update_repository + Gitlab::Gitolite.new.set_key(key.identifier, key.key, key.projects) print '.' end puts "Done with keys" diff --git a/spec/observers/key_observer_spec.rb b/spec/observers/key_observer_spec.rb new file mode 100644 index 00000000..7f2a76a3 --- /dev/null +++ b/spec/observers/key_observer_spec.rb @@ -0,0 +1,34 @@ +require 'spec_helper' + +describe KeyObserver do + before do + @key = double('Key', + identifier: 'admin_654654', + key: '== a vaild ssh key', + projects: [], + is_deploy_key: false + ) + + @gitolite = double('Gitlab::Gitolite', + set_key: true, + remove_key: true + ) + + @observer = KeyObserver.instance + @observer.stub(:git_host => @gitolite) + end + + context :after_save do + it do + @gitolite.should_receive(:set_key).with(@key.identifier, @key.key, @key.projects) + @observer.after_save(@key) + end + end + + context :after_destroy do + it do + @gitolite.should_receive(:remove_key).with(@key.identifier, @key.projects) + @observer.after_destroy(@key) + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 9fb0ad7e..06909f39 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -27,6 +27,7 @@ RSpec.configure do |config| config.mock_with :rspec config.include LoginHelpers, type: :request + config.include GitoliteStub # If you're not using ActiveRecord, or you'd prefer not to run each of your # examples within a transaction, remove the following line or assign false @@ -39,6 +40,8 @@ RSpec.configure do |config| end config.before do + stub_gitolite! + # !!! Observers disabled by default in tests ActiveRecord::Base.observers.disable(:all) # ActiveRecord::Base.observers.enable(:all) diff --git a/spec/support/gitolite_stub.rb b/spec/support/gitolite_stub.rb new file mode 100644 index 00000000..2a907f99 --- /dev/null +++ b/spec/support/gitolite_stub.rb @@ -0,0 +1,35 @@ +module GitoliteStub + def stub_gitolite! + stub_gitlab_gitolite + stub_gitolite_admin + end + + def stub_gitolite_admin + gitolite_repo = mock( + clean_permissions: true, + add_permission: true + ) + + gitolite_config = mock( + add_repo: true, + get_repo: gitolite_repo, + has_repo?: true + ) + + gitolite_admin = double( + 'Gitolite::GitoliteAdmin', + config: gitolite_config, + save: true, + ) + + Gitolite::GitoliteAdmin.stub(new: gitolite_admin) + + end + + def stub_gitlab_gitolite + gitlab_gitolite = Gitlab::Gitolite.new + Gitlab::Gitolite.stub(new: gitlab_gitolite) + gitlab_gitolite.stub(configure: ->() { yield(self) }) + gitlab_gitolite.stub(update_keys: true) + end +end diff --git a/spec/support/monkeypatch.rb b/spec/support/monkeypatch.rb index 855a31f0..04bbb6fb 100644 --- a/spec/support/monkeypatch.rb +++ b/spec/support/monkeypatch.rb @@ -1,14 +1,6 @@ # Stubbing Project <-> git host path # create project using Factory only class Project - def update_repository - true - end - - def destroy_repository - true - end - def path_to_repo File.join(Rails.root, "tmp", "tests", path) end @@ -18,22 +10,6 @@ class Project end end -class Key - def update_repository - true - end - - def repository_delete_key - true - end -end - -class UsersProject - def update_repository - true - end -end - class FakeSatellite def exists? true @@ -43,9 +19,3 @@ class FakeSatellite true end end - -class ProtectedBranch - def update_repository - true - end -end From d6b2b4f06952625da670735724e8c14ac3d7b9c5 Mon Sep 17 00:00:00 2001 From: randx Date: Wed, 29 Aug 2012 00:16:33 +0300 Subject: [PATCH 043/357] fixed configure call within gitolite --- lib/gitlab/backend/gitolite.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/gitlab/backend/gitolite.rb b/lib/gitlab/backend/gitolite.rb index 4d0a0cf0..1eb8a0b0 100644 --- a/lib/gitlab/backend/gitolite.rb +++ b/lib/gitlab/backend/gitolite.rb @@ -8,21 +8,21 @@ module Gitlab class AccessDenied < StandardError; end def set_key key_id, key_content, projects - self.configure do |c| + configure do |c| c.update_keys(key_id, key_content) c.update_project(project.path, projects) end end def remove_key key_id, projects - self.configure do |c| + configure do |c| c.delete_key(key_id) c.update_project(project.path, projects) end end def update_repository project - self.configure do |c| + configure do |c| c.update_project(project.path, project) end end @@ -30,7 +30,7 @@ module Gitlab alias_method :create_repository, :update_repository def remove_repository project - self.configure do |c| + configure do |c| c.destroy_project(project) end end @@ -45,7 +45,7 @@ module Gitlab end def enable_automerge - self.configure do |git| + configure do |git| git.admin_all_repo end end From e8e8ca940bd592738f123985a8791dadcc3f75e7 Mon Sep 17 00:00:00 2001 From: randx Date: Wed, 29 Aug 2012 00:19:34 +0300 Subject: [PATCH 044/357] Fixed access to removed method --- lib/gitlab/backend/gitolite.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gitlab/backend/gitolite.rb b/lib/gitlab/backend/gitolite.rb index 1eb8a0b0..96a13350 100644 --- a/lib/gitlab/backend/gitolite.rb +++ b/lib/gitlab/backend/gitolite.rb @@ -57,7 +57,7 @@ module Gitlab @local_dir = File.join(Rails.root, 'tmp',"gitlabhq-gitolite-#{Time.now.to_i}") Dir.mkdir @local_dir - `git clone #{self.class.admin_uri} #{@local_dir}/gitolite` + `git clone #{Gitlab.config.gitolite_admin_uri} #{@local_dir}/gitolite` end def push From c48c0f95b279e3fdaf0764d48711304beaa8ace8 Mon Sep 17 00:00:00 2001 From: randx Date: Wed, 29 Aug 2012 00:33:19 +0300 Subject: [PATCH 045/357] Gitlab::Gitolite final fixes. Seems like all functionality is working correctly now --- lib/gitlab/backend/gitolite.rb | 80 +++++++++++++++++----------------- 1 file changed, 41 insertions(+), 39 deletions(-) diff --git a/lib/gitlab/backend/gitolite.rb b/lib/gitlab/backend/gitolite.rb index 96a13350..18b30500 100644 --- a/lib/gitlab/backend/gitolite.rb +++ b/lib/gitlab/backend/gitolite.rb @@ -10,14 +10,14 @@ module Gitlab def set_key key_id, key_content, projects configure do |c| c.update_keys(key_id, key_content) - c.update_project(project.path, projects) + c.update_projects(projects) end end def remove_key key_id, projects configure do |c| c.delete_key(key_id) - c.update_project(project.path, projects) + c.update_projects(projects) end end @@ -50,43 +50,7 @@ module Gitlab end end - private - - def pull - # create tmp dir - @local_dir = File.join(Rails.root, 'tmp',"gitlabhq-gitolite-#{Time.now.to_i}") - Dir.mkdir @local_dir - - `git clone #{Gitlab.config.gitolite_admin_uri} #{@local_dir}/gitolite` - end - - def push - Dir.chdir(File.join(@local_dir, "gitolite")) - `git add -A` - `git commit -am "Gitlab"` - `git push` - Dir.chdir(Rails.root) - - FileUtils.rm_rf(@local_dir) - end - - def configure - Timeout::timeout(30) do - File.open(File.join(Rails.root, 'tmp', "gitlabhq-gitolite.lock"), "w+") do |f| - begin - f.flock(File::LOCK_EX) - pull - yield(self) - push - ensure - f.flock(File::LOCK_UN) - end - end - end - rescue Exception => ex - Gitlab::Logger.error(ex.message) - raise Gitolite::AccessDenied.new("gitolite timeout") - end + protected def destroy_project(project) FileUtils.rm_rf(project.path_to_repo) @@ -191,5 +155,43 @@ module Gitlab conf.add_repo(repo, true) ga_repo.save end + + private + + def pull + # create tmp dir + @local_dir = File.join(Rails.root, 'tmp',"gitlabhq-gitolite-#{Time.now.to_i}") + Dir.mkdir @local_dir + + `git clone #{Gitlab.config.gitolite_admin_uri} #{@local_dir}/gitolite` + end + + def push + Dir.chdir(File.join(@local_dir, "gitolite")) + `git add -A` + `git commit -am "Gitlab"` + `git push` + Dir.chdir(Rails.root) + + FileUtils.rm_rf(@local_dir) + end + + def configure + Timeout::timeout(30) do + File.open(File.join(Rails.root, 'tmp', "gitlabhq-gitolite.lock"), "w+") do |f| + begin + f.flock(File::LOCK_EX) + pull + yield(self) + push + ensure + f.flock(File::LOCK_UN) + end + end + end + rescue Exception => ex + Gitlab::Logger.error(ex.message) + raise Gitolite::AccessDenied.new("gitolite timeout") + end end end From b03ee4666bc5dfa3c509768918cbc8a477d24efb Mon Sep 17 00:00:00 2001 From: randx Date: Wed, 29 Aug 2012 00:44:26 +0300 Subject: [PATCH 046/357] Handle invalid ssh exception --- app/controllers/application_controller.rb | 4 ++++ app/views/errors/invalid_ssh_key.html.haml | 3 +++ lib/gitlab/backend/gitolite.rb | 9 +++++++-- 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 app/views/errors/invalid_ssh_key.html.haml diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 7c1941ec..9aab250d 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -14,6 +14,10 @@ class ApplicationController < ActionController::Base render "errors/gitolite", layout: "error" end + rescue_from Gitlab::Gitolite::InvalidKey do |exception| + render "errors/invalid_ssh_key", layout: "error" + end + rescue_from Encoding::CompatibilityError do |exception| render "errors/encoding", layout: "error", status: 404 end diff --git a/app/views/errors/invalid_ssh_key.html.haml b/app/views/errors/invalid_ssh_key.html.haml new file mode 100644 index 00000000..fb7922b0 --- /dev/null +++ b/app/views/errors/invalid_ssh_key.html.haml @@ -0,0 +1,3 @@ +%h1 Git Error +%hr +%p Seems like SSH Key you provided is not a valid SSH key. diff --git a/lib/gitlab/backend/gitolite.rb b/lib/gitlab/backend/gitolite.rb index 18b30500..b69f4663 100644 --- a/lib/gitlab/backend/gitolite.rb +++ b/lib/gitlab/backend/gitolite.rb @@ -6,6 +6,7 @@ require 'fileutils' module Gitlab class Gitolite class AccessDenied < StandardError; end + class InvalidKey < StandardError; end def set_key key_id, key_content, projects configure do |c| @@ -190,8 +191,12 @@ module Gitlab end end rescue Exception => ex - Gitlab::Logger.error(ex.message) - raise Gitolite::AccessDenied.new("gitolite timeout") + if ex.message =~ /is not a valid SSH key string/ + raise Gitolite::InvalidKey.new("ssh key is not valid") + else + Gitlab::Logger.error(ex.message) + raise Gitolite::AccessDenied.new("gitolite timeout") + end end end end From b78fd0c13088ce2c19d939a26a26e247ca5047ea Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 5 Sep 2012 16:49:59 -0400 Subject: [PATCH 047/357] Add github-markup gem --- Gemfile | 1 + Gemfile.lock | 2 ++ app/controllers/refs_controller.rb | 2 ++ 3 files changed, 5 insertions(+) diff --git a/Gemfile b/Gemfile index b0724fad..34f7c274 100644 --- a/Gemfile +++ b/Gemfile @@ -45,6 +45,7 @@ gem "seed-fu" # Markdown to HTML gem "redcarpet", "~> 2.1.1" +gem 'github-markup' # Servers gem "thin" diff --git a/Gemfile.lock b/Gemfile.lock index f350b3fc..fc730802 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -178,6 +178,7 @@ GEM gherkin (2.11.0) json (>= 1.4.6) git (1.2.5) + github-markup (0.7.4) gitlab_meta (2.9) grape (0.2.1) hashie (~> 1.2) @@ -396,6 +397,7 @@ DEPENDENCIES ffaker foreman git + github-markup gitlab_meta (= 2.9) gitolite! grack! diff --git a/app/controllers/refs_controller.rb b/app/controllers/refs_controller.rb index 3f81a2ca..90361437 100644 --- a/app/controllers/refs_controller.rb +++ b/app/controllers/refs_controller.rb @@ -1,3 +1,5 @@ +require 'github/markup' + class RefsController < ApplicationController include Gitlab::Encode before_filter :project From 52c521ffe84dac5dc72a299ee1ecf4736a10f07f Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 5 Sep 2012 16:52:49 -0400 Subject: [PATCH 048/357] Use GitHub::Markup to parse markup files Closes #1382 --- app/helpers/tree_helper.rb | 10 ++++++++++ app/views/refs/_tree.html.haml | 6 +----- app/views/refs/_tree_file.html.haml | 5 ++--- spec/helpers/tree_helper_spec.rb | 15 +++++++++++++++ 4 files changed, 28 insertions(+), 8 deletions(-) create mode 100644 spec/helpers/tree_helper_spec.rb diff --git a/app/helpers/tree_helper.rb b/app/helpers/tree_helper.rb index ed3053d8..c51ee84a 100644 --- a/app/helpers/tree_helper.rb +++ b/app/helpers/tree_helper.rb @@ -24,4 +24,14 @@ module TreeHelper content.name end end + + # Public: Determines if a given filename is compatible with GitHub::Markup. + # + # filename - Filename string to check + # + # Returns boolean + def markup?(filename) + filename.end_with?(*%w(.mdown .md .markdown .textile .rdoc .org .creole + .mediawiki .rst .asciidoc .pod)) + end end diff --git a/app/views/refs/_tree.html.haml b/app/views/refs/_tree.html.haml index a4765c10..297a3b5f 100644 --- a/app/views/refs/_tree.html.haml +++ b/app/views/refs/_tree.html.haml @@ -43,11 +43,7 @@ %i.icon-file = content.name .file_content.wiki - - if content.name =~ /\.(md|markdown)$/i - = preserve do - = markdown(content.data) - - else - = simple_format(content.data) + = raw GitHub::Markup.render(content.name, content.data) :javascript $(function(){ diff --git a/app/views/refs/_tree_file.html.haml b/app/views/refs/_tree_file.html.haml index b5ed61bb..765f271a 100644 --- a/app/views/refs/_tree_file.html.haml +++ b/app/views/refs/_tree_file.html.haml @@ -9,10 +9,9 @@ = link_to "history", project_commits_path(@project, path: params[:path], ref: @ref), class: "btn very_small" = link_to "blame", blame_file_project_ref_path(@project, @ref, path: params[:path]), class: "btn very_small" - if file.text? - - if name =~ /\.(md|markdown)$/i + - if markup?(name) .file_content.wiki - = preserve do - = markdown(file.data) + = raw GitHub::Markup.render(name, file.data) - else .file_content.code - unless file.empty? diff --git a/spec/helpers/tree_helper_spec.rb b/spec/helpers/tree_helper_spec.rb new file mode 100644 index 00000000..bb124d8b --- /dev/null +++ b/spec/helpers/tree_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe TreeHelper do + describe '#markup?' do + %w(mdown md markdown textile rdoc org creole mediawiki rst asciidoc pod).each do |type| + it "returns true for #{type} files" do + markup?("README.#{type}").should be_true + end + end + + it "returns false when given a non-markup filename" do + markup?('README.rb').should_not be_true + end + end +end From 1814ee0ced59aa3203ce265410ae5a7c83e096aa Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 5 Sep 2012 17:02:23 -0400 Subject: [PATCH 049/357] Give github-markup gem a version requirement --- Gemfile | 4 ++-- Gemfile.lock | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 34f7c274..c8d3821f 100644 --- a/Gemfile +++ b/Gemfile @@ -44,8 +44,8 @@ gem "ffaker" gem "seed-fu" # Markdown to HTML -gem "redcarpet", "~> 2.1.1" -gem 'github-markup' +gem "redcarpet", "~> 2.1.1" +gem "github-markup", "~> 0.7.4" # Servers gem "thin" diff --git a/Gemfile.lock b/Gemfile.lock index fc730802..830e28b5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -397,7 +397,7 @@ DEPENDENCIES ffaker foreman git - github-markup + github-markup (~> 0.7.4) gitlab_meta (= 2.9) gitolite! grack! From 8559d9a156819b576127a944dbcce1fe335d68ba Mon Sep 17 00:00:00 2001 From: Dae Myung Date: Sat, 8 Sep 2012 04:24:38 -0700 Subject: [PATCH 050/357] sending argument project but there is no project to send --- lib/gitlab/backend/gitolite.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gitlab/backend/gitolite.rb b/lib/gitlab/backend/gitolite.rb index 658182c7..fe5dcef4 100644 --- a/lib/gitlab/backend/gitolite.rb +++ b/lib/gitlab/backend/gitolite.rb @@ -35,7 +35,7 @@ module Gitlab end def enable_automerge - config.admin_all_repo!(project) + config.admin_all_repo! end alias_method :create_repository, :update_repository From 1c0153682927f72f6b3011db11ddf5a139f9d16a Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sun, 9 Sep 2012 05:40:22 -0400 Subject: [PATCH 051/357] Fix spelling of "empty" in disableButtonIfEmptyField function name --- app/assets/javascripts/issues.js | 4 ++-- app/assets/javascripts/note.js | 4 ++-- app/assets/javascripts/projects.js.coffee | 2 +- app/views/merge_requests/_form.html.haml | 2 +- app/views/milestones/_form.html.haml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/assets/javascripts/issues.js b/app/assets/javascripts/issues.js index 148dc7b9..3ddc6926 100644 --- a/app/assets/javascripts/issues.js +++ b/app/assets/javascripts/issues.js @@ -5,7 +5,7 @@ function switchToNewIssue(form){ $('select#issue_milestone_id').chosen(); $("#new_issue_dialog").show("fade", { direction: "right" }, 150); $('.top-tabs .add_new').hide(); - disableButtonIfEmtpyField("#issue_title", ".save-btn"); + disableButtonIfEmptyField("#issue_title", ".save-btn"); }); } @@ -16,7 +16,7 @@ function switchToEditIssue(form){ $('select#issue_milestone_id').chosen(); $("#edit_issue_dialog").show("fade", { direction: "right" }, 150); $('.add_new').hide(); - disableButtonIfEmtpyField("#issue_title", ".save-btn"); + disableButtonIfEmptyField("#issue_title", ".save-btn"); }); } diff --git a/app/assets/javascripts/note.js b/app/assets/javascripts/note.js index 9cd3e36e..160f75c9 100644 --- a/app/assets/javascripts/note.js +++ b/app/assets/javascripts/note.js @@ -32,7 +32,7 @@ var NoteList = { $(".submit_note").removeAttr("disabled"); }) - disableButtonIfEmtpyField(".note-text", ".submit_note"); + disableButtonIfEmptyField(".note-text", ".submit_note"); $(".note-text").live("focus", function(){ $(this).css("height", "80px"); @@ -177,6 +177,6 @@ var PerLineNotes = { form.show(); return false; }); - disableButtonIfEmtpyField(".line-note-text", ".submit_inline_note"); + disableButtonIfEmptyField(".line-note-text", ".submit_inline_note"); } } diff --git a/app/assets/javascripts/projects.js.coffee b/app/assets/javascripts/projects.js.coffee index 85ab2a06..14738e14 100644 --- a/app/assets/javascripts/projects.js.coffee +++ b/app/assets/javascripts/projects.js.coffee @@ -8,7 +8,7 @@ window.Projects = -> $('.save-project-loader').show() $('form #project_default_branch').chosen() - disableButtonIfEmtpyField '#project_name', '.project-submit' + disableButtonIfEmptyField '#project_name', '.project-submit' # Git clone panel switcher $ -> diff --git a/app/views/merge_requests/_form.html.haml b/app/views/merge_requests/_form.html.haml index b554c051..d5271ed0 100644 --- a/app/views/merge_requests/_form.html.haml +++ b/app/views/merge_requests/_form.html.haml @@ -60,7 +60,7 @@ :javascript $(function(){ - disableButtonIfEmtpyField("#merge_request_title", ".save-btn"); + disableButtonIfEmptyField("#merge_request_title", ".save-btn"); $('select#merge_request_assignee_id').chosen(); $('select#merge_request_source_branch').chosen(); $('select#merge_request_target_branch').chosen(); diff --git a/app/views/milestones/_form.html.haml b/app/views/milestones/_form.html.haml index ce4145ba..194eac77 100644 --- a/app/views/milestones/_form.html.haml +++ b/app/views/milestones/_form.html.haml @@ -41,7 +41,7 @@ :javascript $(function() { - disableButtonIfEmtpyField("#milestone_title", ".save-btn"); + disableButtonIfEmptyField("#milestone_title", ".save-btn"); $( ".datepicker" ).datepicker({ dateFormat: "yy-mm-dd", onSelect: function(dateText, inst) { $("#milestone_due_date").val(dateText) } From 93daa8c568cff8c59eb77c7a47b72e0266613d5a Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sun, 9 Sep 2012 05:30:49 -0400 Subject: [PATCH 052/357] Move main.js to main.js.coffee --- app/assets/javascripts/{main.js => main.js.coffee} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename app/assets/javascripts/{main.js => main.js.coffee} (100%) diff --git a/app/assets/javascripts/main.js b/app/assets/javascripts/main.js.coffee similarity index 100% rename from app/assets/javascripts/main.js rename to app/assets/javascripts/main.js.coffee From 3b89f140905dd1e929d5bf587fa2509866ba5d32 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sun, 9 Sep 2012 05:59:15 -0400 Subject: [PATCH 053/357] Convert main.js to coffee Remove duplicate 's' hotkey code --- app/assets/javascripts/main.js.coffee | 176 +++++++++--------------- app/views/layouts/_head_panel.html.haml | 8 -- 2 files changed, 65 insertions(+), 119 deletions(-) diff --git a/app/assets/javascripts/main.js.coffee b/app/assets/javascripts/main.js.coffee index 61af1dc3..a614cf5b 100644 --- a/app/assets/javascripts/main.js.coffee +++ b/app/assets/javascripts/main.js.coffee @@ -1,130 +1,84 @@ -$(document).ready(function(){ +window.updatePage = (data) -> + $.ajax({type: "GET", url: location.href, data: data, dataType: "script"}) - $(".one_click_select").live("click", function(){ - $(this).select(); - }); +window.slugify = (text) -> + text.replace(/[^-a-zA-Z0-9]+/g, '_').toLowerCase() - $('body').on('ajax:complete, ajax:beforeSend, submit', 'form', function(e){ - var buttons = $('[type="submit"]', this); - switch( e.type ){ - case 'ajax:beforeSend': - case 'submit': - buttons.attr('disabled', 'disabled'); - break; - case ' ajax:complete': - default: - buttons.removeAttr('disabled'); - break; - } - }) +window.ajaxGet = (url) -> + $.ajax({type: "GET", url: url, dataType: "script"}) - $(".account-box").mouseenter(showMenu); - $(".account-box").mouseleave(resetMenu); + # Disable button if text field is empty +window.disableButtonIfEmptyField = (field_selector, button_selector) -> + field = $(field_selector) + closest_submit = field.closest("form").find(button_selector) - $("#projects-list .project").live('click', function(e){ - if(e.target.nodeName != "A" && e.target.nodeName != "INPUT") { - location.href = $(this).attr("url"); - e.stopPropagation(); - return false; - } - }); + closest_submit.attr("disabled", "disabled").addClass("disabled") if field.val() is "" - /** - * Focus search field by pressing 's' key - */ - $(document).keypress(function(e) { - if( $(e.target).is(":input") ) return; - switch(e.which) { - case 115: focusSearch(); - e.preventDefault(); - } - }); + field.on "keyup", -> + if $(this).val() is "" + closest_submit.attr("disabled", "disabled").addClass "disabled" + else + closest_submit.removeAttr("disabled").removeClass "disabled" - /** - * Commit show suppressed diff - * - */ - $(".supp_diff_link").bind("click", function() { - showDiff(this); - }); +$ -> + $(".one_click_select").live 'click', -> + $(this).select() - /** - * Note markdown preview - * - */ - $(document).on('click', '#preview-link', function(e) { - $('#preview-note').text('Loading...'); + $('body').on 'ajax:complete, ajax:beforeSend, submit', 'form', (e) -> + buttons = $('[type="submit"]', this) - var previewLinkText = ($(this).text() == 'Preview' ? 'Edit' : 'Preview'); - $(this).text(previewLinkText); + switch e.type + when 'ajax:beforeSend', 'submit' + buttons.attr('disabled', 'disabled') + else + buttons.removeAttr('disabled') - var note = $('#note_note').val(); - if (note.trim().length === 0) { note = 'Nothing to preview'; } - $.post($(this).attr('href'), {note: note}, function(data) { - $('#preview-note').html(data); - }); + # Show/Hide the profile menu when hovering the account box + $('.account-box').hover -> $(this).toggleClass('hover') - $('#preview-note, #note_note').toggle(); - e.preventDefault(); - }); -}); + $("#projects-list .project").live 'click', (e) -> + if e.target.nodeName isnt "A" and e.target.nodeName isnt "INPUT" + location.href = $(this).attr("url") + e.stopPropagation() + false -function focusSearch() { - $("#search").focus(); -} + # Focus search field by pressing 's' key + $(document).keypress (e) -> + # Don't do anything if typing in an input + return if $(e.target).is(":input") -function updatePage(data){ - $.ajax({type: "GET", url: location.href, data: data, dataType: "script"}); -} + switch e.which + when 115 + $("#search").focus() + e.preventDefault() -function showMenu() { - $(this).toggleClass('hover'); -} + # Commit show suppressed diff + $(".supp_diff_link").bind "click", -> + $(this).next('table').show() + $(this).remove() -function resetMenu() { - $(this).removeClass("hover"); -} + # Note markdown preview + $(document).on 'click', '#preview-link', (e) -> + $('#preview-note').text('Loading...') -function slugify(text) { - return text.replace(/[^-a-zA-Z0-9]+/g, '_').toLowerCase(); -} + previewLinkText = if $(this).text() == 'Preview' then 'Edit' else 'Preview' + $(this).text(previewLinkText) -function showDiff(link) { - $(link).next('table').show(); - $(link).remove(); -} + note = $('#note_note').val() + note = 'Nothing to preview' if note.trim().length is 0 + $.post($(this).attr('href'), {note: note}, (data) -> + $('#preview-note').html(data) + ) -(function($){ - var _chosen = $.fn.chosen; - $.fn.extend({ - chosen: function(options) { - var default_options = {'search_contains' : 'true'}; - $.extend(default_options, options); - return _chosen.apply(this, [default_options]); - }}) -})(jQuery); + $('#preview-note, #note_note').toggle() + e.preventDefault() + false +(($) -> + _chosen = $.fn.chosen + $.fn.extend chosen: (options) -> + default_options = search_contains: "true" + $.extend default_options, options + _chosen.apply this, [default_options] -function ajaxGet(url) { - $.ajax({type: "GET", url: url, dataType: "script"}); -} - -/** - * Disable button if text field is empty - */ -function disableButtonIfEmtpyField(field_selector, button_selector) { - field = $(field_selector); - if(field.val() == "") { - field.closest("form").find(button_selector).attr("disabled", "disabled").addClass("disabled"); - } - - field.on('keyup', function(){ - var field = $(this); - var closest_submit = field.closest("form").find(button_selector); - if(field.val() == "") { - closest_submit.attr("disabled", "disabled").addClass("disabled"); - } else { - closest_submit.removeAttr("disabled").removeClass("disabled"); - } - }) -} +)(jQuery) diff --git a/app/views/layouts/_head_panel.html.haml b/app/views/layouts/_head_panel.html.haml index d6247d36..f5e423a5 100644 --- a/app/views/layouts/_head_panel.html.haml +++ b/app/views/layouts/_head_panel.html.haml @@ -34,12 +34,4 @@ source: #{raw search_autocomplete_source}, select: function(event, ui) { location.href = ui.item.url } }); - - $(document).keypress(function(e) { - if($(e.target).is(":input")) return; - switch(e.which) { - case 115: focusSearch(); - e.preventDefault(); - } - }); }); From ad1aa517c7052d26e7243f6574b3deacddd0b161 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sun, 9 Sep 2012 07:08:13 -0400 Subject: [PATCH 054/357] Add "enable" and "disable" jQuery functions Handles (un)setting the disabled attribute and adding/removing the 'disabled' class --- app/assets/javascripts/main.js.coffee | 19 ++++++++++++++----- app/assets/javascripts/note.js | 4 ++-- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/app/assets/javascripts/main.js.coffee b/app/assets/javascripts/main.js.coffee index a614cf5b..84129069 100644 --- a/app/assets/javascripts/main.js.coffee +++ b/app/assets/javascripts/main.js.coffee @@ -12,26 +12,27 @@ window.disableButtonIfEmptyField = (field_selector, button_selector) -> field = $(field_selector) closest_submit = field.closest("form").find(button_selector) - closest_submit.attr("disabled", "disabled").addClass("disabled") if field.val() is "" + closest_submit.disable() if field.val() is "" field.on "keyup", -> if $(this).val() is "" - closest_submit.attr("disabled", "disabled").addClass "disabled" + closest_submit.disable() else - closest_submit.removeAttr("disabled").removeClass "disabled" + closest_submit.enable() $ -> $(".one_click_select").live 'click', -> $(this).select() + # Disable form buttons while a form is submitting $('body').on 'ajax:complete, ajax:beforeSend, submit', 'form', (e) -> buttons = $('[type="submit"]', this) switch e.type when 'ajax:beforeSend', 'submit' - buttons.attr('disabled', 'disabled') + buttons.disable() else - buttons.removeAttr('disabled') + buttons.enable() # Show/Hide the profile menu when hovering the account box $('.account-box').hover -> $(this).toggleClass('hover') @@ -81,4 +82,12 @@ $ -> $.extend default_options, options _chosen.apply this, [default_options] + # Disable an element and add the 'disabled' Bootstrap class + $.fn.extend disable: -> + $(this).attr('disabled', 'disabled').addClass('disabled') + + # Enable an element and remove the 'disabled' Bootstrap class + $.fn.extend enable: -> + $(this).removeAttr('disabled').removeClass('disabled') + )(jQuery) diff --git a/app/assets/javascripts/note.js b/app/assets/javascripts/note.js index 160f75c9..79ab086b 100644 --- a/app/assets/javascripts/note.js +++ b/app/assets/javascripts/note.js @@ -25,11 +25,11 @@ var NoteList = { $(this).closest('li').fadeOut(); }); $(".note-form-holder").live("ajax:before", function(){ - $(".submit_note").attr("disabled", "disabled"); + $(".submit_note").disable() }) $(".note-form-holder").live("ajax:complete", function(){ - $(".submit_note").removeAttr("disabled"); + $(".submit_note").enable() }) disableButtonIfEmptyField(".note-text", ".submit_note"); From 3551df8eb1c1bfe3a4cef532ddab1cbdcdd96a11 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sun, 9 Sep 2012 07:17:01 -0400 Subject: [PATCH 055/357] Minor main.js refactor and docs --- app/assets/javascripts/main.js.coffee | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/app/assets/javascripts/main.js.coffee b/app/assets/javascripts/main.js.coffee index 84129069..6002f85d 100644 --- a/app/assets/javascripts/main.js.coffee +++ b/app/assets/javascripts/main.js.coffee @@ -21,8 +21,8 @@ window.disableButtonIfEmptyField = (field_selector, button_selector) -> closest_submit.enable() $ -> - $(".one_click_select").live 'click', -> - $(this).select() + # Click a .one_click_select field, select the contents + $(".one_click_select").live 'click', -> $(this).select() # Disable form buttons while a form is submitting $('body').on 'ajax:complete, ajax:beforeSend, submit', 'form', (e) -> @@ -66,10 +66,12 @@ $ -> $(this).text(previewLinkText) note = $('#note_note').val() - note = 'Nothing to preview' if note.trim().length is 0 - $.post($(this).attr('href'), {note: note}, (data) -> - $('#preview-note').html(data) - ) + + if note.trim().length == 0 + $('#preview-note').text("Nothing to preview.") + else + $.post $(this).attr('href'), {note: note}, (data) -> + $('#preview-note').html(data) $('#preview-note, #note_note').toggle() e.preventDefault() From 5dcca7e4806730d4d77eff711a9b91b5a3ca8314 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sun, 9 Sep 2012 07:17:43 -0400 Subject: [PATCH 056/357] Remove some JS that is no longer used --- app/assets/javascripts/main.js.coffee | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app/assets/javascripts/main.js.coffee b/app/assets/javascripts/main.js.coffee index 6002f85d..a01b3932 100644 --- a/app/assets/javascripts/main.js.coffee +++ b/app/assets/javascripts/main.js.coffee @@ -37,12 +37,6 @@ $ -> # Show/Hide the profile menu when hovering the account box $('.account-box').hover -> $(this).toggleClass('hover') - $("#projects-list .project").live 'click', (e) -> - if e.target.nodeName isnt "A" and e.target.nodeName isnt "INPUT" - location.href = $(this).attr("url") - e.stopPropagation() - false - # Focus search field by pressing 's' key $(document).keypress (e) -> # Don't do anything if typing in an input From ad3a88cfd34aeed5ed69b4056e393580a686fb09 Mon Sep 17 00:00:00 2001 From: randx Date: Wed, 29 Aug 2012 02:03:04 +0300 Subject: [PATCH 057/357] Prepared for gitolite v3 --- app/models/merge_request.rb | 2 +- app/roles/push_event.rb | 2 ++ config/gitlab.yml.example | 4 ++-- doc/installation.md | 15 +++++++++------ lib/gitlab/merge.rb | 3 +-- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 542817b0..2e457f72 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -162,7 +162,7 @@ class MergeRequest < ActiveRecord::Base end def automerge!(current_user) - if Gitlab::Merge.new(self, current_user).merge + if Gitlab::Merge.new(self, current_user).merge && self.unmerged_commits.empty? self.merge!(current_user.id) true end diff --git a/app/roles/push_event.rb b/app/roles/push_event.rb index ff8e28a2..a607f212 100644 --- a/app/roles/push_event.rb +++ b/app/roles/push_event.rb @@ -90,6 +90,8 @@ module PushEvent def push_with_commits? md_ref? && commits.any? && parent_commit && last_commit + rescue Grit::NoSuchPathError + false end def last_push_to_non_root? diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example index d05cc1be..77b818ba 100644 --- a/config/gitlab.yml.example +++ b/config/gitlab.yml.example @@ -33,11 +33,11 @@ app: git_host: admin_uri: git@localhost:gitolite-admin base_path: /home/git/repositories/ - # hooks_path: /var/lib/gitolite/.gitolite/hooks/ # only needed when gitolite is not installed according the manual - # host: localhost + hooks_path: /home/git/.gitolite/hooks/ git_user: git upload_pack: true receive_pack: true + # host: localhost # port: 22 # Git settings diff --git a/doc/installation.md b/doc/installation.md index e14ec711..af169d81 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -113,17 +113,20 @@ Generate key: Clone GitLab's fork of the Gitolite source code: cd /home/git - sudo -H -u git git clone https://github.com/gitlabhq/gitolite.git /home/git/gitolite + sudo -H -u git git clone -b gl-v304 https://github.com/gitlabhq/gitolite.git /home/git/gitolite Setup: + cd /home/git + sudo -u git -H mkdir bin sudo -u git sh -c 'echo -e "PATH=\$PATH:/home/git/bin\nexport PATH" >> /home/git/.profile' - sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; /home/git/gitolite/src/gl-system-install" + sudo -u git sh -c 'gitolite/install -ln /home/git/bin' + sudo cp /home/gitlab/.ssh/id_rsa.pub /home/git/gitlab.pub sudo chmod 0444 /home/git/gitlab.pub - sudo -u git -H sed -i 's/0077/0007/g' /home/git/share/gitolite/conf/example.gitolite.rc - sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; gl-setup -q /home/git/gitlab.pub" + sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; gitolite setup -pk /home/git/gitlab.pub" + sudo -u git -H sed -i 's/0077/0007/g' /home/git/.gitolite.rc Permissions: @@ -189,8 +192,8 @@ and ensure you have followed all of the above steps carefully. #### Setup GitLab hooks - sudo cp ./lib/hooks/post-receive /home/git/share/gitolite/hooks/common/post-receive - sudo chown git:git /home/git/share/gitolite/hooks/common/post-receive + sudo cp ./lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive + sudo chown git:git /home/git/.gitolite/hooks/common/post-receive #### Check application status diff --git a/lib/gitlab/merge.rb b/lib/gitlab/merge.rb index 134695ce..18013574 100644 --- a/lib/gitlab/merge.rb +++ b/lib/gitlab/merge.rb @@ -21,8 +21,7 @@ module Gitlab if output =~ /CONFLICT/ false else - repo.git.push({}, "origin", merge_request.target_branch) - true + !!repo.git.push({}, "origin", merge_request.target_branch) end end end From a56cec113204130385e0fbc3f2223d81101357ef Mon Sep 17 00:00:00 2001 From: randx Date: Wed, 29 Aug 2012 02:08:39 +0300 Subject: [PATCH 058/357] specify gitolite-admin owner in config --- config/gitlab.yml.example | 1 + config/initializers/1_settings.rb | 4 ++++ lib/gitlab/backend/gitolite_config.rb | 13 +------------ 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example index 77b818ba..08e3427f 100644 --- a/config/gitlab.yml.example +++ b/config/gitlab.yml.example @@ -34,6 +34,7 @@ git_host: admin_uri: git@localhost:gitolite-admin base_path: /home/git/repositories/ hooks_path: /home/git/.gitolite/hooks/ + gitolite_admin_key: gitlab git_user: git upload_pack: true receive_pack: true diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb index 27c5bc22..df9ccf32 100644 --- a/config/initializers/1_settings.rb +++ b/config/initializers/1_settings.rb @@ -102,6 +102,10 @@ class Settings < Settingslogic git_host['admin_uri'] || 'git@localhost:gitolite-admin' end + def gitolite_admin_key + git_host['gitolite_admin_key'] || 'gitlab' + end + def default_projects_limit app['default_projects_limit'] || 10 end diff --git a/lib/gitlab/backend/gitolite_config.rb b/lib/gitlab/backend/gitolite_config.rb index 61ec8c11..60eef8e8 100644 --- a/lib/gitlab/backend/gitolite_config.rb +++ b/lib/gitlab/backend/gitolite_config.rb @@ -148,18 +148,7 @@ module Gitlab # Enable access to all repos for gitolite admin. # We use it for accept merge request feature def admin_all_repo - owner_name = "" - - # Read gitolite-admin user - # - begin - repo = conf.get_repo("gitolite-admin") - owner_name = repo.permissions[0]["RW+"][""][0] - raise StandardError if owner_name.blank? - rescue => ex - puts "Can't determine gitolite-admin owner".red - raise StandardError - end + owner_name = Gitlab.settings.gitolite_admin_key # @ALL repos premission for gitolite owner repo_name = "@all" From a04b919a4c5ef570e46ae94d6d11b09eb893b7cd Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 28 Aug 2012 01:28:09 -0400 Subject: [PATCH 059/357] Add factory_girl_rails gem --- Gemfile | 1 + Gemfile.lock | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/Gemfile b/Gemfile index 045baa36..4905169f 100644 --- a/Gemfile +++ b/Gemfile @@ -107,6 +107,7 @@ group :development, :test do gem "awesome_print" gem "database_cleaner" gem "launchy" + gem 'factory_girl_rails' end group :test do diff --git a/Gemfile.lock b/Gemfile.lock index 656bede4..b8e97aa0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -166,6 +166,11 @@ GEM eventmachine (0.12.10) execjs (1.4.0) multi_json (~> 1.0) + factory_girl (4.0.0) + activesupport (>= 3.0.0) + factory_girl_rails (4.0.0) + factory_girl (~> 4.0.0) + railties (>= 3.0.0) ffaker (1.14.0) ffi (1.0.11) foreman (0.47.0) @@ -388,6 +393,7 @@ DEPENDENCIES devise (~> 2.1.0) draper email_spec + factory_girl_rails ffaker foreman git From 4805c64f2a96e8a9ea5a0e94a820d840fa1675e0 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 28 Aug 2012 01:28:47 -0400 Subject: [PATCH 060/357] Remove spec/factory and spec/factories --- features/support/env.rb | 1 - spec/factories.rb | 97 ----------------------------------------- spec/factory.rb | 29 ------------ spec/spec_helper.rb | 1 - 4 files changed, 128 deletions(-) delete mode 100644 spec/factories.rb delete mode 100644 spec/factory.rb diff --git a/features/support/env.rb b/features/support/env.rb index 0d9a9ed4..da6c1b70 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -8,7 +8,6 @@ require 'webmock/cucumber' WebMock.allow_net_connect! -require Rails.root.join 'spec/factories' require Rails.root.join 'spec/support/monkeypatch' require Rails.root.join 'spec/support/gitolite_stub' require Rails.root.join 'spec/support/login_helpers' diff --git a/spec/factories.rb b/spec/factories.rb deleted file mode 100644 index 26868462..00000000 --- a/spec/factories.rb +++ /dev/null @@ -1,97 +0,0 @@ -require File.join(Rails.root, 'spec', 'factory') - -Factory.add(:project, Project) do |obj| - obj.name = Faker::Internet.user_name - obj.path = 'gitlabhq' - obj.owner = Factory(:user) - obj.code = 'LGT' -end - -Factory.add(:project_without_owner, Project) do |obj| - obj.name = Faker::Internet.user_name - obj.path = 'gitlabhq' - obj.code = 'LGT' -end - -Factory.add(:public_project, Project) do |obj| - obj.name = Faker::Internet.user_name - obj.path = 'gitlabhq' - obj.private_flag = false - obj.owner = Factory(:user) - obj.code = 'LGT' -end - -Factory.add(:user, User) do |obj| - obj.email = Faker::Internet.email - obj.password = "123456" - obj.name = Faker::Name.name - obj.password_confirmation = "123456" -end - -Factory.add(:admin, User) do |obj| - obj.email = Faker::Internet.email - obj.password = "123456" - obj.name = Faker::Name.name - obj.password_confirmation = "123456" - obj.admin = true -end - -Factory.add(:issue, Issue) do |obj| - obj.title = Faker::Lorem.sentence - obj.author = Factory :user - obj.assignee = Factory :user -end - -Factory.add(:merge_request, MergeRequest) do |obj| - obj.title = Faker::Lorem.sentence - obj.author = Factory :user - obj.assignee = Factory :user - obj.source_branch = "master" - obj.target_branch = "stable" - obj.closed = false -end - -Factory.add(:snippet, Snippet) do |obj| - obj.title = Faker::Lorem.sentence - obj.file_name = Faker::Lorem.sentence - obj.content = Faker::Lorem.sentences -end - -Factory.add(:note, Note) do |obj| - obj.note = Faker::Lorem.sentence -end - -Factory.add(:key, Key) do |obj| - obj.title = "Example key" - obj.key = File.read(File.join(Rails.root, "db", "pkey.example")) -end - -Factory.add(:project_hook, ProjectHook) do |obj| - obj.url = Faker::Internet.uri("http") -end - -Factory.add(:system_hook, SystemHook) do |obj| - obj.url = Faker::Internet.uri("http") -end - -Factory.add(:wiki, Wiki) do |obj| - obj.title = Faker::Lorem.sentence - obj.content = Faker::Lorem.sentence - obj.user = Factory(:user) - obj.project = Factory(:project) -end - -Factory.add(:event, Event) do |obj| - obj.title = Faker::Lorem.sentence - obj.project = Factory(:project) -end - -Factory.add(:milestone, Milestone) do |obj| - obj.title = Faker::Lorem.sentence - obj.due_date = Date.today + 1.month -end - -Factory.add(:users_project, UsersProject) do |obj| - obj.user = Factory :user - obj.project = Factory :project -end diff --git a/spec/factory.rb b/spec/factory.rb deleted file mode 100644 index 1758b4d6..00000000 --- a/spec/factory.rb +++ /dev/null @@ -1,29 +0,0 @@ -class Factory - @factories = {} - - class << self - def add(name, klass, &block) - @factories[name] = [klass, block] - end - - def create(name, opts = {}) - new(name, opts).tap(&:save!) - end - - def new(name, opts = {}) - factory= @factories[name] - factory[0].new.tap do |obj| - factory[1].call(obj) - end.tap do |obj| - opts.each do |k, opt| - obj.send("#{k}=", opt) - end - end - end - end -end - -def Factory(name, opts={}) - Factory.create name, opts -end - diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 06909f39..fc5ba146 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -10,7 +10,6 @@ require 'rspec/rails' require 'capybara/rails' require 'capybara/rspec' require 'webmock/rspec' -require 'factories' require 'email_spec' require 'headless' From c9c1f76e002d899dd6765c4c1630697cc5068f27 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 28 Aug 2012 01:42:28 -0400 Subject: [PATCH 061/357] All specs and features currently passing with FactoryGirl --- features/support/env.rb | 6 +- spec/factories.rb | 107 ++++++++++++++++++ spec/factories_spec.rb | 83 ++++++++++++++ spec/helpers/gitlab_flavored_markdown_spec.rb | 4 +- spec/models/system_hook_spec.rb | 11 +- spec/spec_helper.rb | 1 + spec/support/monkeypatch.rb | 21 ---- spec/support/stubbed_repository.rb | 60 ++++++++++ 8 files changed, 262 insertions(+), 31 deletions(-) create mode 100644 spec/factories.rb create mode 100644 spec/factories_spec.rb delete mode 100644 spec/support/monkeypatch.rb create mode 100644 spec/support/stubbed_repository.rb diff --git a/features/support/env.rb b/features/support/env.rb index da6c1b70..53578152 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -8,8 +8,8 @@ require 'webmock/cucumber' WebMock.allow_net_connect! -require Rails.root.join 'spec/support/monkeypatch' require Rails.root.join 'spec/support/gitolite_stub' +require Rails.root.join 'spec/support/stubbed_repository' require Rails.root.join 'spec/support/login_helpers' require Rails.root.join 'spec/support/valid_commit' @@ -52,6 +52,8 @@ require 'cucumber/rspec/doubles' include GitoliteStub -Before do +Before do stub_gitolite! end + +World(FactoryGirl::Syntax::Methods) diff --git a/spec/factories.rb b/spec/factories.rb new file mode 100644 index 00000000..eb3882a6 --- /dev/null +++ b/spec/factories.rb @@ -0,0 +1,107 @@ +# Backwards compatibility with the old method +def Factory(type, *args) + FactoryGirl.create(type, *args) +end + +module Factory + def self.create(type, *args) + FactoryGirl.create(type, *args) + end + + def self.new(type, *args) + FactoryGirl.build(type, *args) + end +end + +FactoryGirl.define do + sequence :sentence, aliases: [:title, :content] do + Faker::Lorem.sentence + end + + sequence(:url) { Faker::Internet.uri('http') } + + factory :user, aliases: [:author, :assignee, :owner] do + email { Faker::Internet.email } + name { Faker::Name.name } + password "123456" + password_confirmation "123456" + + trait :admin do + admin true + end + + factory :admin, traits: [:admin] + end + + factory :project do + sequence(:name) { |n| "project#{n}" } + path { name } + code { name } + owner + end + + factory :users_project do + user + project + end + + factory :issue do + title + author + project + + trait :closed do + closed true + end + + factory :closed_issue, traits: [:closed] + end + + factory :merge_request do + title + author + project + source_branch "master" + target_branch "stable" + end + + factory :note do + project + note "Note" + end + + factory :event do + end + + factory :key do + title + key { File.read(File.join(Rails.root, "db", "pkey.example")) } + end + + factory :milestone do + title + project + end + + factory :system_hook do + url + end + + factory :project_hook do + url + end + + factory :wiki do + title + content + user + end + + factory :snippet do + project + author + title + content + file_name { Faker::Lorem.sentence } + end +end diff --git a/spec/factories_spec.rb b/spec/factories_spec.rb new file mode 100644 index 00000000..126a5b23 --- /dev/null +++ b/spec/factories_spec.rb @@ -0,0 +1,83 @@ +require 'spec_helper' + +describe "Factories" do + describe 'User' do + it "builds a valid instance" do + build(:user).should be_valid + end + + it "builds a valid admin instance" do + build(:admin).should be_valid + end + end + + describe 'Project' do + it "builds a valid instance" do + build(:project).should be_valid + end + end + + describe 'Issue' do + it "builds a valid instance" do + build(:issue).should be_valid + end + + it "builds a valid closed instance" do + build(:closed_issue).should be_valid + end + end + + describe 'MergeRequest' do + it "builds a valid instance" do + build(:merge_request).should be_valid + end + end + + describe 'Note' do + it "builds a valid instance" do + build(:note).should be_valid + end + end + + describe 'Event' do + it "builds a valid instance" do + build(:event).should be_valid + end + end + + describe 'Key' do + it "builds a valid instance" do + build(:key).should be_valid + end + end + + describe 'Milestone' do + it "builds a valid instance" do + build(:milestone).should be_valid + end + end + + describe 'SystemHook' do + it "builds a valid instance" do + build(:system_hook).should be_valid + end + end + + describe 'ProjectHook' do + it "builds a valid instance" do + build(:project_hook).should be_valid + end + end + + describe 'Wiki' do + it "builds a valid instance" do + build(:wiki).should be_valid + end + end + + describe 'Snippet' do + it "builds a valid instance" do + build(:snippet).should be_valid + end + end +end diff --git a/spec/helpers/gitlab_flavored_markdown_spec.rb b/spec/helpers/gitlab_flavored_markdown_spec.rb index e147cb39..28bd46ec 100644 --- a/spec/helpers/gitlab_flavored_markdown_spec.rb +++ b/spec/helpers/gitlab_flavored_markdown_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" describe GitlabMarkdownHelper do before do - @project = Project.find_by_path("gitlabhq") || Factory(:project) + @project = Factory(:project) @commit = @project.repo.commits.first.parents.first @commit = CommitDecorator.decorate(Commit.new(@commit)) @other_project = Factory :project, path: "OtherPath", code: "OtherCode" @@ -157,7 +157,7 @@ describe GitlabMarkdownHelper do gfm("Let @#{user.name} fix the *mess* in #{@commit.id}").should == "Let #{link_to "@#{user.name}", project_team_member_path(@project, member), class: "gfm gfm-team_member "} fix the *mess* in #{link_to @commit.id, project_commit_path(@project, id: @commit.id), title: "Commit: #{@commit.author_name} - #{@commit.title}", class: "gfm gfm-commit "}" end - it "should not trip over other stuff", focus: true do + it "should not trip over other stuff" do gfm("_Please_ *stop* 'helping' and all the other b*$#%' you do.").should == "_Please_ *stop* 'helping' and all the other b*$#%' you do." end diff --git a/spec/models/system_hook_spec.rb b/spec/models/system_hook_spec.rb index 56d76ed0..fe2a5836 100644 --- a/spec/models/system_hook_spec.rb +++ b/spec/models/system_hook_spec.rb @@ -10,13 +10,12 @@ describe SystemHook do end it "project_create hook" do - user = Factory :user with_resque do - project = Factory :project_without_owner, owner: user + project = Factory :project end WebMock.should have_requested(:post, @system_hook.url).with(body: /project_create/).once end - + it "project_destroy hook" do project = Factory :project with_resque do @@ -31,7 +30,7 @@ describe SystemHook do end WebMock.should have_requested(:post, @system_hook.url).with(body: /user_create/).once end - + it "user_destroy hook" do user = Factory :user with_resque do @@ -39,7 +38,7 @@ describe SystemHook do end WebMock.should have_requested(:post, @system_hook.url).with(body: /user_destroy/).once end - + it "project_create hook" do user = Factory :user project = Factory :project @@ -48,7 +47,7 @@ describe SystemHook do end WebMock.should have_requested(:post, @system_hook.url).with(body: /user_add_to_team/).once end - + it "project_destroy hook" do user = Factory :user project = Factory :project diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index fc5ba146..d381b3f1 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -27,6 +27,7 @@ RSpec.configure do |config| config.include LoginHelpers, type: :request config.include GitoliteStub + config.include FactoryGirl::Syntax::Methods # If you're not using ActiveRecord, or you'd prefer not to run each of your # examples within a transaction, remove the following line or assign false diff --git a/spec/support/monkeypatch.rb b/spec/support/monkeypatch.rb deleted file mode 100644 index 04bbb6fb..00000000 --- a/spec/support/monkeypatch.rb +++ /dev/null @@ -1,21 +0,0 @@ -# Stubbing Project <-> git host path -# create project using Factory only -class Project - def path_to_repo - File.join(Rails.root, "tmp", "tests", path) - end - - def satellite - @satellite ||= FakeSatellite.new - end -end - -class FakeSatellite - def exists? - true - end - - def create - true - end -end diff --git a/spec/support/stubbed_repository.rb b/spec/support/stubbed_repository.rb new file mode 100644 index 00000000..fa6c4c9a --- /dev/null +++ b/spec/support/stubbed_repository.rb @@ -0,0 +1,60 @@ +# Stubs out all Git repository access done by models so that specs can run +# against fake repositories without Grit complaining that they don't exist. +module StubbedRepository + extend ActiveSupport::Concern + + included do + # If a class defines the method we want to stub directly, rather than + # inheriting it from a module (as is the case in UsersProject), that method + # will overwrite our stub, so use alias_method to ensure it's our stub + # getting called. + + alias_method :update_repository, :fake_update_repository + alias_method :destroy_repository, :fake_destroy_repository + alias_method :repository_delete_key, :fake_repository_delete_key + alias_method :path_to_repo, :fake_path_to_repo + alias_method :satellite, :fake_satellite + end + + def fake_update_repository + true + end + + def fake_destroy_repository + true + end + + def fake_repository_delete_key + true + end + + def fake_path_to_repo + if new_record? + # There are a couple Project specs that expect the Project's path to be + # in the returned path, so let's patronize them. + File.join(Rails.root, 'tmp', 'tests', path) + else + # For everything else, just give it the path to one of our real seeded + # repos. + File.join(Rails.root, 'tmp', 'tests', 'gitlabhq_1') + end + end + + def fake_satellite + FakeSatellite.new + end + + class FakeSatellite + def exists? + true + end + + def create + true + end + end +end + +[Project, Key, ProtectedBranch, UsersProject].each do |c| + c.send(:include, StubbedRepository) +end From 0bc909405852135d7f98440193830eba664ea122 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 28 Aug 2012 06:57:00 -0400 Subject: [PATCH 062/357] Add deploy_key and personal_key factories --- spec/factories.rb | 8 ++++++++ spec/factories_spec.rb | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/spec/factories.rb b/spec/factories.rb index eb3882a6..82fd0db2 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -76,6 +76,14 @@ FactoryGirl.define do factory :key do title key { File.read(File.join(Rails.root, "db", "pkey.example")) } + + factory :deploy_key do + project + end + + factory :personal_key do + user + end end factory :milestone do diff --git a/spec/factories_spec.rb b/spec/factories_spec.rb index 126a5b23..5760aad4 100644 --- a/spec/factories_spec.rb +++ b/spec/factories_spec.rb @@ -49,6 +49,14 @@ describe "Factories" do it "builds a valid instance" do build(:key).should be_valid end + + it "builds a valid deploy key instance" do + build(:deploy_key).should be_valid + end + + it "builds a valid personal key instance" do + build(:personal_key).should be_valid + end end describe 'Milestone' do From 77d06454ededc3beef09db709829ccb687ccc045 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 28 Aug 2012 07:01:27 -0400 Subject: [PATCH 063/357] Simple model spec changes made possible by new factories --- spec/models/issue_spec.rb | 37 ++++++++----------------------- spec/models/key_spec.rb | 17 +++++--------- spec/models/merge_request_spec.rb | 24 +++++--------------- spec/models/milestone_spec.rb | 7 ++---- spec/models/note_spec.rb | 21 +++++++----------- spec/models/user_spec.rb | 26 +++++----------------- 6 files changed, 37 insertions(+), 95 deletions(-) diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb index e9cbd725..133f0734 100644 --- a/spec/models/issue_spec.rb +++ b/spec/models/issue_spec.rb @@ -19,11 +19,7 @@ describe Issue do it { Issue.should respond_to :opened } end - subject { Factory.create(:issue, - author: Factory(:user), - assignee: Factory(:user), - project: Factory.create(:project)) } - it { should be_valid } + subject { Factory.create(:issue) } describe '#is_being_reassigned?' do it 'returns true if the issue assignee has changed' do @@ -41,11 +37,7 @@ describe Issue do subject.is_being_closed?.should be_true end it 'returns false if the closed attribute has changed and is now false' do - issue = Factory.create(:issue, - closed: true, - author: Factory(:user), - assignee: Factory(:user), - project: Factory.create(:project)) + issue = Factory.create(:closed_issue) issue.closed = false issue.is_being_closed?.should be_false end @@ -57,11 +49,7 @@ describe Issue do describe '#is_being_reopened?' do it 'returns true if the closed attribute has changed and is now false' do - issue = Factory.create(:issue, - closed: true, - author: Factory(:user), - assignee: Factory(:user), - project: Factory.create(:project)) + issue = Factory.create(:closed_issue) issue.closed = false issue.is_being_reopened?.should be_true end @@ -75,40 +63,33 @@ describe Issue do end describe "plus 1" do - let(:project) { Factory(:project) } - subject { - Factory.create(:issue, - author: Factory(:user), - assignee: Factory(:user), - project: project) - } + subject { Factory.create(:issue) } it "with no notes has a 0/0 score" do subject.upvotes.should == 0 end it "should recognize non-+1 notes" do - subject.notes << Factory(:note, note: "No +1 here", project: Factory(:project, path: 'plusone', code: 'plusone')) + subject.notes << Factory(:note, note: "No +1 here") subject.should have(1).note subject.notes.first.upvote?.should be_false subject.upvotes.should == 0 end it "should recognize a single +1 note" do - subject.notes << Factory(:note, note: "+1 This is awesome", project: Factory(:project, path: 'plusone', code: 'plusone')) + subject.notes << Factory(:note, note: "+1 This is awesome") subject.upvotes.should == 1 end it "should recognize a multiple +1 notes" do - subject.notes << Factory(:note, note: "+1 This is awesome", project: Factory(:project, path: 'plusone', code: 'plusone')) - subject.notes << Factory(:note, note: "+1 I want this", project: Factory(:project, path: 'plustwo', code: 'plustwo')) + subject.notes << Factory(:note, note: "+1 This is awesome") + subject.notes << Factory(:note, note: "+1 I want this") subject.upvotes.should == 2 end end describe ".search" do - let!(:issue) { Factory.create(:issue, title: "Searchable issue", - project: Factory.create(:project)) } + let!(:issue) { Factory.create(:issue, title: "Searchable issue") } it "matches by title" do Issue.search('able').all.should == [issue] diff --git a/spec/models/key_spec.rb b/spec/models/key_spec.rb index 0f9b3177..ea58fbd2 100644 --- a/spec/models/key_spec.rb +++ b/spec/models/key_spec.rb @@ -17,20 +17,15 @@ describe Key do context "validation of uniqueness" do context "as a deploy key" do - let(:project) { Factory.create(:project, path: 'alpha', code: 'alpha') } - let(:another_project) { Factory.create(:project, path: 'beta', code: 'beta') } - - before do - deploy_key = Factory.create(:key, project: project) - end + let!(:deploy_key) { create(:deploy_key) } it "does not accept the same key twice for a project" do - key = Factory.new(:key, project: project) + key = build(:key, project: deploy_key.project) key.should_not be_valid end it "does accept the same key for another project" do - key = Factory.new(:key, project: another_project) + key = build(:key, project_id: 0) key.should be_valid end end @@ -39,12 +34,12 @@ describe Key do let(:user) { Factory.create(:user) } it "accepts the key once" do - Factory.new(:key, user: user).should be_valid + build(:key, user: user).should be_valid end it "does not accepts the key twice" do - Factory.create(:key, user: user) - Factory.new(:key, user: user).should_not be_valid + create(:key, user: user) + build(:key, user: user).should_not be_valid end end end diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index c7ad08a1..f4b93eea 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -20,46 +20,34 @@ describe MergeRequest do it { MergeRequest.should respond_to :opened } end - it { Factory.create(:merge_request, - author: Factory(:user), - assignee: Factory(:user), - project: Factory.create(:project)).should be_valid } - describe "plus 1" do - let(:project) { Factory(:project) } - subject { - Factory.create(:merge_request, - author: Factory(:user), - assignee: Factory(:user), - project: project) - } + subject { Factory.create(:merge_request) } it "with no notes has a 0/0 score" do subject.upvotes.should == 0 end it "should recognize non-+1 notes" do - subject.notes << Factory(:note, note: "No +1 here", project: Factory(:project, path: 'plusone', code: 'plusone')) + subject.notes << Factory(:note, note: "No +1 here") subject.should have(1).note subject.notes.first.upvote?.should be_false subject.upvotes.should == 0 end it "should recognize a single +1 note" do - subject.notes << Factory(:note, note: "+1 This is awesome", project: Factory(:project, path: 'plusone', code: 'plusone')) + subject.notes << Factory(:note, note: "+1 This is awesome") subject.upvotes.should == 1 end it "should recognize a multiple +1 notes" do - subject.notes << Factory(:note, note: "+1 This is awesome", project: Factory(:project, path: 'plusone', code: 'plusone')) - subject.notes << Factory(:note, note: "+1 I want this", project: Factory(:project, path: 'plustwo', code: 'plustwo')) + subject.notes << Factory(:note, note: "+1 This is awesome") + subject.notes << Factory(:note, note: "+1 I want this") subject.upvotes.should == 2 end end describe ".search" do - let!(:issue) { Factory.create(:issue, title: "Searchable issue", - project: Factory.create(:project)) } + let!(:issue) { Factory.create(:issue, title: "Searchable issue") } it "matches by title" do Issue.search('able').all.should == [issue] diff --git a/spec/models/milestone_spec.rb b/spec/models/milestone_spec.rb index e9acc4e2..ed805a24 100644 --- a/spec/models/milestone_spec.rb +++ b/spec/models/milestone_spec.rb @@ -25,11 +25,8 @@ describe Milestone do it { should validate_presence_of(:project_id) } end - let(:project) { Factory :project } - let(:milestone) { Factory :milestone, project: project } - let(:issue) { Factory :issue, project: project } - - it { milestone.should be_valid } + let(:milestone) { Factory :milestone } + let(:issue) { Factory :issue } describe "#percent_complete" do it "should not count open issues" do diff --git a/spec/models/note_spec.rb b/spec/models/note_spec.rb index c97b23cb..89e50479 100644 --- a/spec/models/note_spec.rb +++ b/spec/models/note_spec.rb @@ -1,9 +1,6 @@ require 'spec_helper' describe Note do - let(:project) { Factory :project } - let!(:commit) { project.commit } - describe "Associations" do it { should belong_to(:project) } end @@ -13,8 +10,6 @@ describe Note do it { should validate_presence_of(:project) } end - it { Factory.create(:note, - project: project).should be_valid } describe "Scopes" do it "should have a today named scope that returns ..." do Note.today.where_values.should == ["created_at >= '#{Date.today}'"] @@ -25,26 +20,27 @@ describe Note do let(:project) { Factory(:project) } it "recognizes a neutral note" do - note = Factory(:note, project: project, note: "This is not a +1 note") + note = Factory(:note, note: "This is not a +1 note") note.should_not be_upvote end it "recognizes a +1 note" do - note = Factory(:note, project: project, note: "+1 for this") + note = Factory(:note, note: "+1 for this") note.should be_upvote end it "recognizes a -1 note as no vote" do - note = Factory(:note, project: project, note: "-1 for this") + note = Factory(:note, note: "-1 for this") note.should_not be_upvote end end - describe "Commit notes" do + let(:project) { create(:project) } + let(:commit) { project.commit } + describe "Commit notes" do before do @note = Factory :note, - project: project, noteable_id: commit.id, noteable_type: "Commit" end @@ -58,7 +54,6 @@ describe Note do describe "Pre-line commit notes" do before do @note = Factory :note, - project: project, noteable_id: commit.id, noteable_type: "Commit", line_code: "0_16_1" @@ -91,8 +86,8 @@ describe Note do describe :authorization do before do - @p1 = project - @p2 = Factory :project, code: "alien", path: "gitlabhq_1" + @p1 = create(:project) + @p2 = Factory :project @u1 = Factory :user @u2 = Factory :user @u3 = Factory :user diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 265dcef1..ebc45fa4 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -3,11 +3,12 @@ require 'spec_helper' describe User do describe "Associations" do it { should have_many(:projects) } - it { should have_many(:users_projects) } - it { should have_many(:issues) } - it { should have_many(:assigned_issues) } - it { should have_many(:merge_requests) } - it { should have_many(:assigned_merge_requests) } + it { should have_many(:users_projects).dependent(:destroy) } + it { should have_many(:issues).dependent(:destroy) } + it { should have_many(:assigned_issues).dependent(:destroy) } + it { should have_many(:merge_requests).dependent(:destroy) } + it { should have_many(:assigned_merge_requests).dependent(:destroy) } + it { should have_many(:notes).dependent(:destroy) } end describe "Respond to" do @@ -49,21 +50,6 @@ describe User do user = Factory(:user) user.authentication_token.should_not == "" end - - describe "dependent" do - before do - @user = Factory :user - @note = Factory :note, - author: @user, - project: Factory(:project) - end - - it "should destroy all notes with user" do - Note.find_by_id(@note.id).should_not be_nil - @user.destroy - Note.find_by_id(@note.id).should be_nil - end - end end # == Schema Information # From a39cfb54616fe156ba43ac3df2b771c3a11d2879 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 28 Aug 2012 20:57:54 -0400 Subject: [PATCH 064/357] Simplify StubbedRepository after GitHost changes from master --- spec/support/stubbed_repository.rb | 29 +++++++---------------------- 1 file changed, 7 insertions(+), 22 deletions(-) diff --git a/spec/support/stubbed_repository.rb b/spec/support/stubbed_repository.rb index fa6c4c9a..637754ba 100644 --- a/spec/support/stubbed_repository.rb +++ b/spec/support/stubbed_repository.rb @@ -9,34 +9,19 @@ module StubbedRepository # will overwrite our stub, so use alias_method to ensure it's our stub # getting called. - alias_method :update_repository, :fake_update_repository - alias_method :destroy_repository, :fake_destroy_repository - alias_method :repository_delete_key, :fake_repository_delete_key - alias_method :path_to_repo, :fake_path_to_repo - alias_method :satellite, :fake_satellite - end - - def fake_update_repository - true - end - - def fake_destroy_repository - true - end - - def fake_repository_delete_key - true + alias_method :path_to_repo, :fake_path_to_repo + alias_method :satellite, :fake_satellite end def fake_path_to_repo - if new_record? - # There are a couple Project specs that expect the Project's path to be - # in the returned path, so let's patronize them. + if new_record? || path == 'newproject' + # There are a couple Project specs and features that expect the Project's + # path to be in the returned path, so let's patronize them. File.join(Rails.root, 'tmp', 'tests', path) else # For everything else, just give it the path to one of our real seeded # repos. - File.join(Rails.root, 'tmp', 'tests', 'gitlabhq_1') + File.join(Rails.root, 'tmp', 'tests', 'gitlabhq_0') end end @@ -55,6 +40,6 @@ module StubbedRepository end end -[Project, Key, ProtectedBranch, UsersProject].each do |c| +[Project, ProtectedBranch, UsersProject].each do |c| c.send(:include, StubbedRepository) end From a3a63eeb92f5cc660dc3f03e2d7249e4b5f04acf Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 28 Aug 2012 21:13:22 -0400 Subject: [PATCH 065/357] Remove all instances to 'gitlabhq_x' seed repositories from specs and features We now need only one seed repo! Also cleans up the seeding script. --- db/fixtures/test/001_repo.rb | 32 ++++++++++++-------- features/step_definitions/dashboard_steps.rb | 8 ++--- spec/models/project_spec.rb | 2 +- spec/requests/admin/admin_projects_spec.rb | 2 +- spec/requests/atom/dashboard_issues_spec.rb | 8 ++--- spec/support/stubbed_repository.rb | 4 +-- 6 files changed, 28 insertions(+), 28 deletions(-) diff --git a/db/fixtures/test/001_repo.rb b/db/fixtures/test/001_repo.rb index ebf005a1..67d4e7bf 100644 --- a/db/fixtures/test/001_repo.rb +++ b/db/fixtures/test/001_repo.rb @@ -1,15 +1,23 @@ -# create tmp dir if not exist -tmp_dir = File.join(Rails.root, "tmp") -Dir.mkdir(tmp_dir) unless File.exists?(tmp_dir) +require 'fileutils' -# Create dir for test repo -repo_dir = File.join(Rails.root, "tmp", "tests") -Dir.mkdir(repo_dir) unless File.exists?(repo_dir) +print "Unpacking seed repository..." -`cp spec/seed_project.tar.gz tmp/tests/` -Dir.chdir(repo_dir) -`tar -xf seed_project.tar.gz` -3.times do |i| -`cp -r gitlabhq/ gitlabhq_#{i}/` -puts "Unpacked seed repo - tmp/tests/gitlabhq_#{i}" +SEED_REPO = 'seed_project.tar.gz' +REPO_PATH = File.join(Rails.root, 'tmp', 'repositories') + +# Make whatever directories we need to make +FileUtils.mkdir_p(REPO_PATH) + +# Copy the archive to the repo path +FileUtils.cp(File.join(Rails.root, 'spec', SEED_REPO), REPO_PATH) + +# chdir to the repo path +FileUtils.cd(REPO_PATH) do + # Extract the archive + `tar -xf #{SEED_REPO}` + + # Remove the copy + FileUtils.rm(SEED_REPO) end + +puts ' done.' diff --git a/features/step_definitions/dashboard_steps.rb b/features/step_definitions/dashboard_steps.rb index d910ec90..a4edd224 100644 --- a/features/step_definitions/dashboard_steps.rb +++ b/features/step_definitions/dashboard_steps.rb @@ -106,13 +106,9 @@ Given /^I have assigned issues$/ do end Given /^I have authored merge requests$/ do - project1 = Factory :project, - :path => "gitlabhq_1", - :code => "gitlabhq_1" + project1 = Factory :project - project2 = Factory :project, - :path => "gitlabhq_2", - :code => "gitlabhq_2" + project2 = Factory :project project1.add_access(@user, :read, :write) project2.add_access(@user, :read, :write) diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index af193295..faaa9a91 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -85,7 +85,7 @@ describe Project do it "should return path to repo" do project = Project.new(path: "somewhere") - project.path_to_repo.should == File.join(Rails.root, "tmp", "tests", "somewhere") + project.path_to_repo.should == File.join(Rails.root, "tmp", "repositories", "somewhere") end it "returns the full web URL for this repo" do diff --git a/spec/requests/admin/admin_projects_spec.rb b/spec/requests/admin/admin_projects_spec.rb index 0ce66f5f..2edfb592 100644 --- a/spec/requests/admin/admin_projects_spec.rb +++ b/spec/requests/admin/admin_projects_spec.rb @@ -87,7 +87,7 @@ describe "Admin::Projects" do visit new_admin_project_path fill_in 'project_name', with: 'NewProject' fill_in 'project_code', with: 'NPR' - fill_in 'project_path', with: 'gitlabhq_1' + fill_in 'project_path', with: 'newproject' expect { click_button "Create project" }.to change { Project.count }.by(1) @project = Project.last end diff --git a/spec/requests/atom/dashboard_issues_spec.rb b/spec/requests/atom/dashboard_issues_spec.rb index 1d208c70..79a9b8ef 100644 --- a/spec/requests/atom/dashboard_issues_spec.rb +++ b/spec/requests/atom/dashboard_issues_spec.rb @@ -6,13 +6,9 @@ describe "User Issues Dashboard" do login_as :user - @project1 = Factory :project, - path: "gitlabhq_0", - code: "TEST1" + @project1 = Factory :project - @project2 = Factory :project, - path: "gitlabhq_1", - code: "TEST2" + @project2 = Factory :project @project1.add_access(@user, :read, :write) @project2.add_access(@user, :read, :write) diff --git a/spec/support/stubbed_repository.rb b/spec/support/stubbed_repository.rb index 637754ba..8dd4f40e 100644 --- a/spec/support/stubbed_repository.rb +++ b/spec/support/stubbed_repository.rb @@ -17,11 +17,11 @@ module StubbedRepository if new_record? || path == 'newproject' # There are a couple Project specs and features that expect the Project's # path to be in the returned path, so let's patronize them. - File.join(Rails.root, 'tmp', 'tests', path) + File.join(Rails.root, 'tmp', 'repositories', path) else # For everything else, just give it the path to one of our real seeded # repos. - File.join(Rails.root, 'tmp', 'tests', 'gitlabhq_0') + File.join(Rails.root, 'tmp', 'repositories', 'gitlabhq') end end From 39ff033d1ab536c4e493510ee99e392b5fd25a07 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 28 Aug 2012 21:15:21 -0400 Subject: [PATCH 066/357] Remove pkey.example --- db/pkey.example | 3 --- spec/factories.rb | 8 +++++++- 2 files changed, 7 insertions(+), 4 deletions(-) delete mode 100644 db/pkey.example diff --git a/db/pkey.example b/db/pkey.example deleted file mode 100644 index ae045772..00000000 --- a/db/pkey.example +++ /dev/null @@ -1,3 +0,0 @@ -AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4 -596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4 -soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0= diff --git a/spec/factories.rb b/spec/factories.rb index 82fd0db2..929f9295 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -75,7 +75,13 @@ FactoryGirl.define do factory :key do title - key { File.read(File.join(Rails.root, "db", "pkey.example")) } + key do + """ + AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4 + 596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4 + soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0= + """ + end factory :deploy_key do project From 5afb16e4965e41af420211fa35bff0d2d0a07de7 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 29 Aug 2012 07:13:29 +0300 Subject: [PATCH 067/357] Add ssh key validation --- app/models/key.rb | 1 + spec/factories.rb | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/models/key.rb b/app/models/key.rb index 8b61675a..3890814c 100644 --- a/app/models/key.rb +++ b/app/models/key.rb @@ -10,6 +10,7 @@ class Key < ActiveRecord::Base validates :key, presence: true, + :format => { :with => /ssh-.{3} / }, length: { within: 0..5000 } before_save :set_identifier diff --git a/spec/factories.rb b/spec/factories.rb index 929f9295..3f9673b4 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -77,7 +77,7 @@ FactoryGirl.define do title key do """ - AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4 + ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4 596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4 soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0= """ From adc71b6a6ae06a96aa82052012ae6e61bd3a9cb1 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 29 Aug 2012 07:58:22 +0300 Subject: [PATCH 068/357] Fix test i broke with ssk key validation. Added Key.user_id as attr_protected --- app/models/key.rb | 4 +++- features/profile/ssh_keys.feature | 4 ++-- features/step_definitions/profile/profile_keys_steps.rb | 2 +- spec/requests/projects_deploy_keys_spec.rb | 8 ++++---- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/app/models/key.rb b/app/models/key.rb index 3890814c..a39a4a16 100644 --- a/app/models/key.rb +++ b/app/models/key.rb @@ -4,13 +4,15 @@ class Key < ActiveRecord::Base belongs_to :user belongs_to :project + attr_protected :user_id + validates :title, presence: true, length: { within: 0..255 } validates :key, presence: true, - :format => { :with => /ssh-.{3} / }, + format: { :with => /ssh-.{3} / }, length: { within: 0..5000 } before_save :set_identifier diff --git a/features/profile/ssh_keys.feature b/features/profile/ssh_keys.feature index c3a92f30..c81503ed 100644 --- a/features/profile/ssh_keys.feature +++ b/features/profile/ssh_keys.feature @@ -3,8 +3,8 @@ Feature: SSH Keys Given I signin as a user And I have ssh keys: | title | - | Work | - | Home | + | ssh-rsa Work | + | ssh-rsa Home | And I visit profile keys page Scenario: I should see SSH keys diff --git a/features/step_definitions/profile/profile_keys_steps.rb b/features/step_definitions/profile/profile_keys_steps.rb index 5ab7e048..25926c53 100644 --- a/features/step_definitions/profile/profile_keys_steps.rb +++ b/features/step_definitions/profile/profile_keys_steps.rb @@ -16,7 +16,7 @@ end Given /^I submit new ssh key "(.*?)"$/ do |arg1| fill_in "key_title", :with => arg1 - fill_in "key_key", :with => "publickey234=" + fill_in "key_key", :with => "ssh-rsa publickey234=" click_button "Save" end diff --git a/spec/requests/projects_deploy_keys_spec.rb b/spec/requests/projects_deploy_keys_spec.rb index 0fea7b46..894aa6d3 100644 --- a/spec/requests/projects_deploy_keys_spec.rb +++ b/spec/requests/projects_deploy_keys_spec.rb @@ -42,7 +42,7 @@ describe "Projects", "DeployKeys" do describe "fill in" do before do fill_in "key_title", with: "laptop" - fill_in "key_key", with: "publickey234=" + fill_in "key_key", with: "ssh-rsa publickey234=" end it { expect { click_button "Save" }.to change {Key.count}.by(1) } @@ -55,12 +55,12 @@ describe "Projects", "DeployKeys" do end end - describe "Show page" do + describe "Show page" do before do @key = Factory :key, project: project - visit project_deploy_key_path(project, @key) + visit project_deploy_key_path(project, @key) end - + it { page.should have_content @key.title } it { page.should have_content @key.key[0..10] } end From 245806012019b93e210564f76fa2df9da915e274 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Wed, 29 Aug 2012 05:31:00 -0700 Subject: [PATCH 069/357] add docs for Milestones API --- doc/api/milestones.md | 57 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 doc/api/milestones.md diff --git a/doc/api/milestones.md b/doc/api/milestones.md new file mode 100644 index 00000000..36a08fe4 --- /dev/null +++ b/doc/api/milestones.md @@ -0,0 +1,57 @@ +## List project milestones + +Get a list of project milestones. + +``` +GET /projects/:id/milestones +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project + +## Single milestone + +Get a single project milestone. + +``` +GET /projects/:id/milestones/:milestone_id +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `milestone_id` (required) - The ID of a project milestone + +## New milestone + +Create a new project milestone. + +``` +POST /projects/:id/milestones +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `title` (required) - The title of an milestone ++ `description` (optional) - The description of the milestone ++ `due_date` (optional) - The due date of the milestone ++ `closed` (optional) - The status of the milestone + +## Edit milestone + +Update an existing project milestone. + +``` +PUT /projects/:id/milestones/:milestone_id +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `milestone_id` (required) - The ID of a project milestone ++ `title` (optional) - The title of a milestone ++ `description` (optional) - The description of a milestone ++ `due_date` (optional) - The due date of the milestone ++ `closed` (optional) - The status of the milestone From 8a49cdc3b44579e64d50973df1a1d075e2766b97 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 29 Aug 2012 08:45:00 -0400 Subject: [PATCH 070/357] Add milestone API docs to doc/README and views/help/api Also removes `closed` attribute option from create action. --- app/views/help/api.html.haml | 10 ++++++++++ doc/api/README.md | 1 + doc/api/milestones.md | 2 +- lib/api/milestones.rb | 5 ++--- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/views/help/api.html.haml b/app/views/help/api.html.haml index 4f7af193..d7d7aed4 100644 --- a/app/views/help/api.html.haml +++ b/app/views/help/api.html.haml @@ -63,3 +63,13 @@ .file_content.wiki = preserve do = markdown File.read(Rails.root.join("doc", "api", "issues.md")) + +%br + +.file_holder#milestones + .file_title + %i.icon-file + Milestones + .file_content.wiki + = preserve do + = markdown File.read(Rails.root.join("doc", "api", "milestones.md")) diff --git a/doc/api/README.md b/doc/api/README.md index d32573aa..53b4983e 100644 --- a/doc/api/README.md +++ b/doc/api/README.md @@ -29,3 +29,4 @@ The API uses JSON to serialize data. You don't need to specify `.json` at the en + [Projects](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/projects.md) + [Snippets](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/snippets.md) + [Issues](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/issues.md) ++ [Milestones](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/milestones.md) diff --git a/doc/api/milestones.md b/doc/api/milestones.md index 36a08fe4..f68d8eb7 100644 --- a/doc/api/milestones.md +++ b/doc/api/milestones.md @@ -34,10 +34,10 @@ POST /projects/:id/milestones Parameters: + `id` (required) - The ID or code name of a project ++ `milestone_id` (required) - The ID of a project milestone + `title` (required) - The title of an milestone + `description` (optional) - The description of the milestone + `due_date` (optional) - The due date of the milestone -+ `closed` (optional) - The status of the milestone ## Edit milestone diff --git a/lib/api/milestones.rb b/lib/api/milestones.rb index 1ddcd1f8..f537b8e5 100644 --- a/lib/api/milestones.rb +++ b/lib/api/milestones.rb @@ -33,15 +33,13 @@ module Gitlab # title (required) - The title of the milestone # description (optional) - The description of the milestone # due_date (optional) - The due date of the milestone - # closed (optional) - The status of the milestone # Example Request: # POST /projects/:id/milestones post ":id/milestones" do @milestone = user_project.milestones.new( title: params[:title], description: params[:description], - due_date: params[:due_date], - closed: (params[:closed] || false) + due_date: params[:due_date] ) if @milestone.save @@ -55,6 +53,7 @@ module Gitlab # # Parameters: # id (required) - The ID or code name of a project + # milestone_id (required) - The ID of a project milestone # title (optional) - The title of a milestone # description (optional) - The description of a milestone # due_date (optional) - The due date of a milestone From e5adca1b813bf1646a08bbc239acc75a844c366d Mon Sep 17 00:00:00 2001 From: randx Date: Wed, 29 Aug 2012 08:13:38 +0300 Subject: [PATCH 071/357] Preview as button. Disable note submit unless content --- app/assets/javascripts/note.js | 11 +++++++++++ app/views/notes/_form.html.haml | 9 +++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/note.js b/app/assets/javascripts/note.js index d9ae45d9..dfa09986 100644 --- a/app/assets/javascripts/note.js +++ b/app/assets/javascripts/note.js @@ -24,6 +24,16 @@ init: $('.delete-note').live('ajax:success', function() { $(this).closest('li').fadeOut(); }); + $('#note_note').on('keyup', function(){ + var field = $(this); + var closest_submit = field.closest("form").find(".submit_note"); + if(field.val() == "") { + closest_submit.attr("disabled", "disabled").addClass("disabled"); + } else { + closest_submit.removeAttr("disabled").removeClass("disabled"); + } + }) + $("#new_note").live("ajax:before", function(){ $(".submit_note").attr("disabled", "disabled"); }) @@ -35,6 +45,7 @@ init: $("#note_note").live("focus", function(){ $(this).css("height", "80px"); $('.note_advanced_opts').show(); + $(this).closest("form").find(".submit_note").attr("disabled", "disabled"); }); $("#note_attachment").change(function(e){ diff --git a/app/views/notes/_form.html.haml b/app/views/notes/_form.html.haml index 326f1add..adb6e2b4 100644 --- a/app/views/notes/_form.html.haml +++ b/app/views/notes/_form.html.haml @@ -10,12 +10,13 @@ = f.text_area :note, size: 255 #preview-note.well.hide .hint - = link_to 'Preview', preview_project_notes_path(@project), id: 'preview-link' .right Comments are parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}. + .clearfix .row.note_advanced_opts.hide - .span2 - = f.submit 'Add Comment', class: "btn primary submit_note", id: "submit_note" + .span3 + = f.submit 'Add Comment', class: "btn primary submit_note grouped", id: "submit_note" + = link_to 'Preview', preview_project_notes_path(@project), class: 'btn grouped', id: 'preview-link' .span4.notify_opts %h6.left Notify via email: = label_tag :notify do @@ -26,7 +27,7 @@ = label_tag :notify_author do = check_box_tag :notify_author, 1 , @note.noteable_type == "Commit" %span Commit author - .span6.attachments + .span5.attachments %h6.left Attachment: %span.file_name File name... From 1dda08486b7751a677870486d4b576e6dd6071e7 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 29 Aug 2012 01:55:41 -0400 Subject: [PATCH 072/357] Only include StubbedRepository in Project model --- spec/support/stubbed_repository.rb | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/spec/support/stubbed_repository.rb b/spec/support/stubbed_repository.rb index 8dd4f40e..90491e43 100644 --- a/spec/support/stubbed_repository.rb +++ b/spec/support/stubbed_repository.rb @@ -1,19 +1,7 @@ # Stubs out all Git repository access done by models so that specs can run # against fake repositories without Grit complaining that they don't exist. module StubbedRepository - extend ActiveSupport::Concern - - included do - # If a class defines the method we want to stub directly, rather than - # inheriting it from a module (as is the case in UsersProject), that method - # will overwrite our stub, so use alias_method to ensure it's our stub - # getting called. - - alias_method :path_to_repo, :fake_path_to_repo - alias_method :satellite, :fake_satellite - end - - def fake_path_to_repo + def path_to_repo if new_record? || path == 'newproject' # There are a couple Project specs and features that expect the Project's # path to be in the returned path, so let's patronize them. @@ -25,7 +13,7 @@ module StubbedRepository end end - def fake_satellite + def satellite FakeSatellite.new end @@ -40,6 +28,4 @@ module StubbedRepository end end -[Project, ProtectedBranch, UsersProject].each do |c| - c.send(:include, StubbedRepository) -end +Project.send(:include, StubbedRepository) From 4d65532158fb826b51290e0bbc30f34a1ec21d49 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Wed, 29 Aug 2012 09:49:39 +0300 Subject: [PATCH 073/357] Issue_status_changed email added --- app/mailers/notify.rb | 8 +++++++ .../issue_status_changed_email.html.haml | 16 +++++++++++++ spec/mailers/notify_spec.rb | 23 +++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 app/views/notify/issue_status_changed_email.html.haml diff --git a/app/mailers/notify.rb b/app/mailers/notify.rb index 1d222eb1..91136fee 100644 --- a/app/mailers/notify.rb +++ b/app/mailers/notify.rb @@ -83,6 +83,14 @@ class Notify < ActionMailer::Base subject: subject("access to project was granted")) end + def issue_status_changed_email(recipient_id, issue_id, status, updated_by_user_id) + @issue = Issue.find issue_id + @issue_status = status + @updated_by = User.find updated_by_user_id + mail(to: recipient(recipient_id), + subject: subject("changed issue ##{@issue.id}", @issue.title)) + end + private # Look up a User by their ID and return their email address diff --git a/app/views/notify/issue_status_changed_email.html.haml b/app/views/notify/issue_status_changed_email.html.haml new file mode 100644 index 00000000..59130f79 --- /dev/null +++ b/app/views/notify/issue_status_changed_email.html.haml @@ -0,0 +1,16 @@ +%td.content{align: "left", style: "font-family: Helvetica, Arial, sans-serif; padding: 20px 0 0;", valign: "top", width: "600"} + %table{border: "0", cellpadding: "0", cellspacing: "0", style: "color: #717171; font: normal 11px Helvetica, Arial, sans-serif; margin: 0; padding: 0;", width: "600"} + %tr + %td{style: "font-size: 1px; line-height: 1px;", width: "21"} + %td{align: "left", style: "padding: 20px 0 0;"} + %h2{style: "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} + = "Issue was #{@issue_status} by #{@updated_by.name}" + %td{style: "font-size: 1px; line-height: 1px;", width: "21"} + %tr + %td{style: "font-size: 1px; line-height: 1px;", width: "21"} + %td{align: "left", style: "padding: 20px 0 0;"} + %h2{style: "color:#646464 !important; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} + = "Issue ##{@issue.id}" + = link_to_gfm truncate(@issue.title, length: 45), project_issue_url(@issue.project, @issue), title: @issue.title + %br + diff --git a/spec/mailers/notify_spec.rb b/spec/mailers/notify_spec.rb index 60f3231c..cf50b429 100644 --- a/spec/mailers/notify_spec.rb +++ b/spec/mailers/notify_spec.rb @@ -91,6 +91,29 @@ describe Notify do should have_body_text /#{project_issue_path project, issue}/ end end + + describe 'status changed' do + let(:current_user) { Factory.create :user, email: "current@email.com" } + let(:status) { 'closed' } + subject { Notify.issue_status_changed_email(recipient.id, issue.id, status, current_user) } + + it 'has the correct subject' do + should have_subject /changed issue ##{issue.id} \| #{issue.title}/i + end + + it 'contains the new status' do + should have_body_text /#{status}/i + end + + it 'contains the user name' do + should have_body_text /#{current_user.name}/i + end + + it 'contains a link to the issue' do + should have_body_text /#{project_issue_path project, issue}/ + end + end + end context 'for merge requests' do From 2cb0a62f7d087c77c94c1b561fd2c9e3dd3d2661 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Wed, 29 Aug 2012 10:48:17 +0300 Subject: [PATCH 074/357] Notification sends to issue author and assignee if issue being reopened or closed --- app/observers/issue_observer.rb | 16 ++++++- spec/observers/issue_observer_spec.rb | 69 ++++++++++++++++++++++++--- 2 files changed, 76 insertions(+), 9 deletions(-) diff --git a/app/observers/issue_observer.rb b/app/observers/issue_observer.rb index 92b0f836..dc5995cb 100644 --- a/app/observers/issue_observer.rb +++ b/app/observers/issue_observer.rb @@ -9,8 +9,20 @@ class IssueObserver < ActiveRecord::Observer def after_update(issue) send_reassigned_email(issue) if issue.is_being_reassigned? - Note.create_status_change_note(issue, current_user, 'closed') if issue.is_being_closed? - Note.create_status_change_note(issue, current_user, 'reopened') if issue.is_being_reopened? + + if issue.is_being_closed? + Note.create_status_change_note(issue, current_user, 'closed') + [issue.author, issue.assignee].compact.each do |recipient| + Notify.issue_status_changed_email(recipient.id, issue.id, 'closed', current_user) + end + end + + if issue.is_being_reopened? + Note.create_status_change_note(issue, current_user, 'reopened') + [issue.author, issue.assignee].compact.each do |recipient| + Notify.issue_status_changed_email(recipient.id, issue.id, 'reopened', current_user) + end + end end protected diff --git a/spec/observers/issue_observer_spec.rb b/spec/observers/issue_observer_spec.rb index c6a405f1..b5943f2c 100644 --- a/spec/observers/issue_observer_spec.rb +++ b/spec/observers/issue_observer_spec.rb @@ -3,7 +3,8 @@ require 'spec_helper' describe IssueObserver do let(:some_user) { double(:user, id: 1) } let(:assignee) { double(:user, id: 2) } - let(:issue) { double(:issue, id: 42, assignee: assignee) } + let(:author) { double(:user, id: 3) } + let(:issue) { double(:issue, id: 42, assignee: assignee, author: author) } before(:each) { subject.stub(:current_user).and_return(some_user) } @@ -67,36 +68,90 @@ describe IssueObserver do end end - context 'a status "closed" note' do - it 'is created if the issue is being closed' do + context 'a status "closed"' do + it 'note is created if the issue is being closed' do issue.should_receive(:is_being_closed?).and_return(true) Note.should_receive(:create_status_change_note).with(issue, some_user, 'closed') subject.after_update(issue) end - it 'is not created if the issue is not being closed' do + it 'note is not created if the issue is not being closed' do issue.should_receive(:is_being_closed?).and_return(false) Note.should_not_receive(:create_status_change_note).with(issue, some_user, 'closed') subject.after_update(issue) end + + it 'notification is delivered if the issue being closed' do + issue.stub(:is_being_closed?).and_return(true) + Notify.should_receive(:issue_status_changed_email).twice + Note.should_receive(:create_status_change_note).with(issue, some_user, 'closed') + + subject.after_update(issue) + end + + it 'notification is not delivered if the issue not being closed' do + issue.stub(:is_being_closed?).and_return(false) + Notify.should_not_receive(:issue_status_changed_email) + Note.should_not_receive(:create_status_change_note).with(issue, some_user, 'closed') + + subject.after_update(issue) + end + + it 'notification is delivered only to author if the issue being closed' do + issue_without_assignee = double(:issue, id: 42, author: author, assignee: nil) + issue_without_assignee.stub(:is_being_reassigned?).and_return(false) + issue_without_assignee.stub(:is_being_closed?).and_return(true) + issue_without_assignee.stub(:is_being_reopened?).and_return(false) + Notify.should_receive(:issue_status_changed_email).once + Note.should_receive(:create_status_change_note).with(issue_without_assignee, some_user, 'closed') + + subject.after_update(issue_without_assignee) + end end - context 'a status "reopened" note' do - it 'is created if the issue is being reopened' do + context 'a status "reopened"' do + it 'note is created if the issue is being reopened' do issue.should_receive(:is_being_reopened?).and_return(true) Note.should_receive(:create_status_change_note).with(issue, some_user, 'reopened') subject.after_update(issue) end - it 'is not created if the issue is not being reopened' do + it 'note is not created if the issue is not being reopened' do issue.should_receive(:is_being_reopened?).and_return(false) Note.should_not_receive(:create_status_change_note).with(issue, some_user, 'reopened') subject.after_update(issue) end + + it 'notification is delivered if the issue being reopened' do + issue.stub(:is_being_reopened?).and_return(true) + Notify.should_receive(:issue_status_changed_email).twice + Note.should_receive(:create_status_change_note).with(issue, some_user, 'reopened') + + subject.after_update(issue) + end + + it 'notification is not delivered if the issue not being reopened' do + issue.stub(:is_being_reopened?).and_return(false) + Notify.should_not_receive(:issue_status_changed_email) + Note.should_not_receive(:create_status_change_note).with(issue, some_user, 'reopened') + + subject.after_update(issue) + end + + it 'notification is delivered only to author if the issue being reopened' do + issue_without_assignee = double(:issue, id: 42, author: author, assignee: nil) + issue_without_assignee.stub(:is_being_reassigned?).and_return(false) + issue_without_assignee.stub(:is_being_closed?).and_return(false) + issue_without_assignee.stub(:is_being_reopened?).and_return(true) + Notify.should_receive(:issue_status_changed_email).once + Note.should_receive(:create_status_change_note).with(issue_without_assignee, some_user, 'reopened') + + subject.after_update(issue_without_assignee) + end end end From 43cad71f1adbefe462f1c7216c8323c3f36704f4 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Wed, 29 Aug 2012 10:50:35 +0300 Subject: [PATCH 075/357] Duplicate code removed from IssueObserver#after_update --- app/observers/issue_observer.rb | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/app/observers/issue_observer.rb b/app/observers/issue_observer.rb index dc5995cb..62fd9bf8 100644 --- a/app/observers/issue_observer.rb +++ b/app/observers/issue_observer.rb @@ -10,17 +10,13 @@ class IssueObserver < ActiveRecord::Observer def after_update(issue) send_reassigned_email(issue) if issue.is_being_reassigned? - if issue.is_being_closed? - Note.create_status_change_note(issue, current_user, 'closed') + status = nil + status = 'closed' if issue.is_being_closed? + status = 'reopened' if issue.is_being_reopened? + if status + Note.create_status_change_note(issue, current_user, status) [issue.author, issue.assignee].compact.each do |recipient| - Notify.issue_status_changed_email(recipient.id, issue.id, 'closed', current_user) - end - end - - if issue.is_being_reopened? - Note.create_status_change_note(issue, current_user, 'reopened') - [issue.author, issue.assignee].compact.each do |recipient| - Notify.issue_status_changed_email(recipient.id, issue.id, 'reopened', current_user) + Notify.issue_status_changed_email(recipient.id, issue.id, status, current_user) end end end From b99372b75679e3c05eed7b81284fc1efc7fa956b Mon Sep 17 00:00:00 2001 From: logiblocs Date: Wed, 29 Aug 2012 13:04:37 +0200 Subject: [PATCH 076/357] Fixed one letter in doc/installation.md --- doc/installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/installation.md b/doc/installation.md index 7d3c2c41..df106bc1 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -230,7 +230,7 @@ You can login via web using admin generated with setup: # causing the resque worker not to start via init script on next boot/service restart **Ok - we have a working application now. ** -**But keep going - there are some thing that should be done ** +**But keep going - there are some things that should be done ** # Nginx && Unicorn From 2c95074a5faec5e5420bfbf87134f5956d427cd1 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 29 Aug 2012 01:35:48 -0400 Subject: [PATCH 077/357] Remove model specs that are covered by factories_spec --- spec/models/event_spec.rb | 10 ---------- spec/models/wiki_spec.rb | 2 -- 2 files changed, 12 deletions(-) diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb index 188f0997..645eabc1 100644 --- a/spec/models/event_spec.rb +++ b/spec/models/event_spec.rb @@ -29,16 +29,6 @@ describe Event do it { should respond_to(:commits) } end - describe "Creation" do - before do - @event = Factory :event - end - - it "should create a valid event" do - @event.should be_valid - end - end - describe "Push event" do before do project = Factory :project diff --git a/spec/models/wiki_spec.rb b/spec/models/wiki_spec.rb index 892d0e8f..67e6caff 100644 --- a/spec/models/wiki_spec.rb +++ b/spec/models/wiki_spec.rb @@ -11,8 +11,6 @@ describe Wiki do it { should validate_presence_of(:content) } it { should validate_presence_of(:user_id) } end - - it { Factory(:wiki).should be_valid } end # == Schema Information # From 14daf2e2ba9d75527b5de07d87a9027bd53d607e Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 29 Aug 2012 01:49:26 -0400 Subject: [PATCH 078/357] Add `include_module` matcher --- spec/support/matchers.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/spec/support/matchers.rb b/spec/support/matchers.rb index e0672166..14a03870 100644 --- a/spec/support/matchers.rb +++ b/spec/support/matchers.rb @@ -28,6 +28,16 @@ RSpec::Matchers.define :be_404_for do |user| end end +RSpec::Matchers.define :include_module do |expected| + match do + described_class.included_modules.include?(expected) + end + + failure_message_for_should do + "expected #{described_class} to include the #{expected} module" + end +end + module UrlAccess def url_allowed?(user, url) emulate_user(user) From 9d4d40deed5ea649511f3aadd45b3da68c7c3217 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 29 Aug 2012 01:52:19 -0400 Subject: [PATCH 079/357] Move IssueCommonality and Upvote specs out of models and into their own specs --- spec/models/issue_spec.rb | 39 ++-------------- spec/models/merge_request_spec.rb | 35 ++------------ spec/roles/issue_commonality_spec.rb | 69 ++++++++++++++++++++++++++++ spec/roles/upvote_spec.rb | 27 +++++++++++ 4 files changed, 104 insertions(+), 66 deletions(-) create mode 100644 spec/roles/issue_commonality_spec.rb create mode 100644 spec/roles/upvote_spec.rb diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb index 133f0734..a03405b5 100644 --- a/spec/models/issue_spec.rb +++ b/spec/models/issue_spec.rb @@ -19,6 +19,11 @@ describe Issue do it { Issue.should respond_to :opened } end + describe 'modules' do + it { should include_module(IssueCommonality) } + it { should include_module(Upvote) } + end + subject { Factory.create(:issue) } describe '#is_being_reassigned?' do @@ -61,40 +66,6 @@ describe Issue do subject.is_being_reopened?.should be_false end end - - describe "plus 1" do - subject { Factory.create(:issue) } - - it "with no notes has a 0/0 score" do - subject.upvotes.should == 0 - end - - it "should recognize non-+1 notes" do - subject.notes << Factory(:note, note: "No +1 here") - subject.should have(1).note - subject.notes.first.upvote?.should be_false - subject.upvotes.should == 0 - end - - it "should recognize a single +1 note" do - subject.notes << Factory(:note, note: "+1 This is awesome") - subject.upvotes.should == 1 - end - - it "should recognize a multiple +1 notes" do - subject.notes << Factory(:note, note: "+1 This is awesome") - subject.notes << Factory(:note, note: "+1 I want this") - subject.upvotes.should == 2 - end - end - - describe ".search" do - let!(:issue) { Factory.create(:issue, title: "Searchable issue") } - - it "matches by title" do - Issue.search('able').all.should == [issue] - end - end end # == Schema Information # diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index f4b93eea..10f0a01f 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -20,38 +20,9 @@ describe MergeRequest do it { MergeRequest.should respond_to :opened } end - describe "plus 1" do - subject { Factory.create(:merge_request) } - - it "with no notes has a 0/0 score" do - subject.upvotes.should == 0 - end - - it "should recognize non-+1 notes" do - subject.notes << Factory(:note, note: "No +1 here") - subject.should have(1).note - subject.notes.first.upvote?.should be_false - subject.upvotes.should == 0 - end - - it "should recognize a single +1 note" do - subject.notes << Factory(:note, note: "+1 This is awesome") - subject.upvotes.should == 1 - end - - it "should recognize a multiple +1 notes" do - subject.notes << Factory(:note, note: "+1 This is awesome") - subject.notes << Factory(:note, note: "+1 I want this") - subject.upvotes.should == 2 - end - end - - describe ".search" do - let!(:issue) { Factory.create(:issue, title: "Searchable issue") } - - it "matches by title" do - Issue.search('able').all.should == [issue] - end + describe 'modules' do + it { should include_module(IssueCommonality) } + it { should include_module(Upvote) } end end # == Schema Information diff --git a/spec/roles/issue_commonality_spec.rb b/spec/roles/issue_commonality_spec.rb new file mode 100644 index 00000000..77b98b46 --- /dev/null +++ b/spec/roles/issue_commonality_spec.rb @@ -0,0 +1,69 @@ +require 'spec_helper' + +describe Issue, "IssueCommonality" do + let(:issue) { create(:issue) } + + describe "Associations" do + it { should belong_to(:project) } + it { should belong_to(:author) } + it { should belong_to(:assignee) } + it { should have_many(:notes).dependent(:destroy) } + end + + describe "Validation" do + it { should validate_presence_of(:project_id) } + it { should validate_presence_of(:author_id) } + it { should validate_presence_of(:title) } + it { should ensure_length_of(:title).is_at_least(0).is_at_most(255) } + end + + describe "Scope" do + it { described_class.should respond_to(:opened) } + it { described_class.should respond_to(:closed) } + it { described_class.should respond_to(:assigned) } + end + + it "has an :author_id_of_changes accessor" do + issue.should respond_to(:author_id_of_changes) + issue.should respond_to(:author_id_of_changes=) + end + + describe ".search" do + let!(:searchable_issue) { create(:issue, title: "Searchable issue") } + + it "matches by title" do + described_class.search('able').all.should == [searchable_issue] + end + end + + describe "#today?" do + it "returns true when created today" do + # Avoid timezone differences and just return exactly what we want + Date.stub(:today).and_return(issue.created_at.to_date) + issue.today?.should be_true + end + + it "returns false when not created today" do + Date.stub(:today).and_return(Date.yesterday) + issue.today?.should be_false + end + end + + describe "#new?" do + it "returns true when created today and record hasn't been updated" do + issue.stub(:today?).and_return(true) + issue.new?.should be_true + end + + it "returns false when not created today" do + issue.stub(:today?).and_return(false) + issue.new?.should be_false + end + + it "returns false when record has been updated" do + issue.stub(:today?).and_return(true) + issue.touch + issue.new?.should be_false + end + end +end diff --git a/spec/roles/upvote_spec.rb b/spec/roles/upvote_spec.rb new file mode 100644 index 00000000..24288ada --- /dev/null +++ b/spec/roles/upvote_spec.rb @@ -0,0 +1,27 @@ +require 'spec_helper' + +describe Issue, "Upvote" do + let(:issue) { create(:issue) } + + it "with no notes has a 0/0 score" do + issue.upvotes.should == 0 + end + + it "should recognize non-+1 notes" do + issue.notes << create(:note, note: "No +1 here") + issue.should have(1).note + issue.notes.first.upvote?.should be_false + issue.upvotes.should == 0 + end + + it "should recognize a single +1 note" do + issue.notes << create(:note, note: "+1 This is awesome") + issue.upvotes.should == 1 + end + + it "should recognize multiple +1 notes" do + issue.notes << create(:note, note: "+1 This is awesome") + issue.notes << create(:note, note: "+1 I want this") + issue.upvotes.should == 2 + end +end From 9e7d77cece06e48ac0f44ee808976ec6dcbff81d Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 29 Aug 2012 02:05:08 -0400 Subject: [PATCH 080/357] Remove annotations from specs --- spec/models/event_spec.rb | 16 --------------- spec/models/issue_spec.rb | 19 ------------------ spec/models/key_spec.rb | 14 ------------- spec/models/merge_request_spec.rb | 20 ------------------- spec/models/milestone_spec.rb | 14 ------------- spec/models/note_spec.rb | 16 --------------- spec/models/project_spec.rb | 20 ------------------- spec/models/protected_branch_spec.rb | 11 ---------- spec/models/snippet_spec.rb | 15 -------------- spec/models/user_spec.rb | 30 ---------------------------- spec/models/users_project_spec.rb | 12 ----------- spec/models/web_hook_spec.rb | 11 ---------- spec/models/wiki_spec.rb | 14 ------------- 13 files changed, 212 deletions(-) diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb index 645eabc1..ef6e3ed2 100644 --- a/spec/models/event_spec.rb +++ b/spec/models/event_spec.rb @@ -1,19 +1,3 @@ -# == Schema Information -# -# Table name: events -# -# id :integer(4) not null, primary key -# target_type :string(255) -# target_id :integer(4) -# title :string(255) -# data :text -# project_id :integer(4) -# created_at :datetime not null -# updated_at :datetime not null -# action :integer(4) -# author_id :integer(4) -# - require 'spec_helper' describe Event do diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb index a03405b5..5c22d0cc 100644 --- a/spec/models/issue_spec.rb +++ b/spec/models/issue_spec.rb @@ -67,22 +67,3 @@ describe Issue do end end end -# == Schema Information -# -# Table name: issues -# -# id :integer(4) not null, primary key -# title :string(255) -# assignee_id :integer(4) -# author_id :integer(4) -# project_id :integer(4) -# created_at :datetime not null -# updated_at :datetime not null -# closed :boolean(1) default(FALSE), not null -# position :integer(4) default(0) -# critical :boolean(1) default(FALSE), not null -# branch_name :string(255) -# description :text -# milestone_id :integer(4) -# - diff --git a/spec/models/key_spec.rb b/spec/models/key_spec.rb index ea58fbd2..6efb21e9 100644 --- a/spec/models/key_spec.rb +++ b/spec/models/key_spec.rb @@ -44,17 +44,3 @@ describe Key do end end end -# == Schema Information -# -# Table name: keys -# -# id :integer(4) not null, primary key -# user_id :integer(4) -# created_at :datetime not null -# updated_at :datetime not null -# key :text -# title :string(255) -# identifier :string(255) -# project_id :integer(4) -# - diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 10f0a01f..78ec0110 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -25,23 +25,3 @@ describe MergeRequest do it { should include_module(Upvote) } end end -# == Schema Information -# -# Table name: merge_requests -# -# id :integer(4) not null, primary key -# target_branch :string(255) not null -# source_branch :string(255) not null -# project_id :integer(4) not null -# author_id :integer(4) -# assignee_id :integer(4) -# title :string(255) -# closed :boolean(1) default(FALSE), not null -# created_at :datetime not null -# updated_at :datetime not null -# st_commits :text(2147483647 -# st_diffs :text(2147483647 -# merged :boolean(1) default(FALSE), not null -# state :integer(4) default(1), not null -# - diff --git a/spec/models/milestone_spec.rb b/spec/models/milestone_spec.rb index ed805a24..fa15fc8f 100644 --- a/spec/models/milestone_spec.rb +++ b/spec/models/milestone_spec.rb @@ -1,17 +1,3 @@ -# == Schema Information -# -# Table name: milestones -# -# id :integer(4) not null, primary key -# title :string(255) not null -# project_id :integer(4) not null -# description :text -# due_date :date -# closed :boolean(1) default(FALSE), not null -# created_at :datetime not null -# updated_at :datetime not null -# - require 'spec_helper' describe Milestone do diff --git a/spec/models/note_spec.rb b/spec/models/note_spec.rb index 89e50479..c4010e64 100644 --- a/spec/models/note_spec.rb +++ b/spec/models/note_spec.rb @@ -130,19 +130,3 @@ describe Note do end end end -# == Schema Information -# -# Table name: notes -# -# id :integer(4) not null, primary key -# note :text -# noteable_id :string(255) -# noteable_type :string(255) -# author_id :integer(4) -# created_at :datetime not null -# updated_at :datetime not null -# project_id :integer(4) -# attachment :string(255) -# line_code :string(255) -# - diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index faaa9a91..eac8c3b5 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -236,23 +236,3 @@ describe Project do end end end -# == Schema Information -# -# Table name: projects -# -# id :integer(4) not null, primary key -# name :string(255) -# path :string(255) -# description :text -# created_at :datetime not null -# updated_at :datetime not null -# private_flag :boolean(1) default(TRUE), not null -# code :string(255) -# owner_id :integer(4) -# default_branch :string(255) default("master"), not null -# issues_enabled :boolean(1) default(TRUE), not null -# wall_enabled :boolean(1) default(TRUE), not null -# merge_requests_enabled :boolean(1) default(TRUE), not null -# wiki_enabled :boolean(1) default(TRUE), not null -# - diff --git a/spec/models/protected_branch_spec.rb b/spec/models/protected_branch_spec.rb index 1654e3b6..77a214ff 100644 --- a/spec/models/protected_branch_spec.rb +++ b/spec/models/protected_branch_spec.rb @@ -1,14 +1,3 @@ -# == Schema Information -# -# Table name: protected_branches -# -# id :integer(4) not null, primary key -# project_id :integer(4) not null -# name :string(255) not null -# created_at :datetime not null -# updated_at :datetime not null -# - require 'spec_helper' describe ProtectedBranch do diff --git a/spec/models/snippet_spec.rb b/spec/models/snippet_spec.rb index 9b4aaa13..2a63584e 100644 --- a/spec/models/snippet_spec.rb +++ b/spec/models/snippet_spec.rb @@ -14,18 +14,3 @@ describe Snippet do it { should validate_presence_of(:content) } end end -# == Schema Information -# -# Table name: snippets -# -# id :integer(4) not null, primary key -# title :string(255) -# content :text -# author_id :integer(4) not null -# project_id :integer(4) not null -# created_at :datetime not null -# updated_at :datetime not null -# file_name :string(255) -# expires_at :datetime -# - diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index ebc45fa4..a3443dc7 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -51,33 +51,3 @@ describe User do user.authentication_token.should_not == "" end end -# == Schema Information -# -# Table name: users -# -# id :integer(4) not null, primary key -# email :string(255) default(""), not null -# encrypted_password :string(128) default(""), not null -# reset_password_token :string(255) -# reset_password_sent_at :datetime -# remember_created_at :datetime -# sign_in_count :integer(4) default(0) -# current_sign_in_at :datetime -# last_sign_in_at :datetime -# current_sign_in_ip :string(255) -# last_sign_in_ip :string(255) -# created_at :datetime not null -# updated_at :datetime not null -# name :string(255) -# admin :boolean(1) default(FALSE), not null -# projects_limit :integer(4) default(10) -# skype :string(255) default(""), not null -# linkedin :string(255) default(""), not null -# twitter :string(255) default(""), not null -# authentication_token :string(255) -# dark_scheme :boolean(1) default(FALSE), not null -# theme_id :integer(4) default(1), not null -# bio :string(255) -# blocked :boolean(1) default(FALSE), not null -# - diff --git a/spec/models/users_project_spec.rb b/spec/models/users_project_spec.rb index 87fbfbf2..5103ae00 100644 --- a/spec/models/users_project_spec.rb +++ b/spec/models/users_project_spec.rb @@ -16,15 +16,3 @@ describe UsersProject do it { should respond_to(:user_email) } end end -# == Schema Information -# -# Table name: users_projects -# -# id :integer(4) not null, primary key -# user_id :integer(4) not null -# project_id :integer(4) not null -# created_at :datetime not null -# updated_at :datetime not null -# project_access :integer(4) default(0), not null -# - diff --git a/spec/models/web_hook_spec.rb b/spec/models/web_hook_spec.rb index 88594761..3cba5b64 100644 --- a/spec/models/web_hook_spec.rb +++ b/spec/models/web_hook_spec.rb @@ -52,14 +52,3 @@ describe ProjectHook do end end end -# == Schema Information -# -# Table name: web_hooks -# -# id :integer(4) not null, primary key -# url :string(255) -# project_id :integer(4) -# created_at :datetime not null -# updated_at :datetime not null -# - diff --git a/spec/models/wiki_spec.rb b/spec/models/wiki_spec.rb index 67e6caff..8035280d 100644 --- a/spec/models/wiki_spec.rb +++ b/spec/models/wiki_spec.rb @@ -12,17 +12,3 @@ describe Wiki do it { should validate_presence_of(:user_id) } end end -# == Schema Information -# -# Table name: wikis -# -# id :integer(4) not null, primary key -# title :string(255) -# content :text -# project_id :integer(4) -# created_at :datetime not null -# updated_at :datetime not null -# slug :string(255) -# user_id :integer(4) -# - From 2bdea8651fa3bd82418986ada84828c22d451405 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 29 Aug 2012 02:21:50 -0400 Subject: [PATCH 081/357] Add is_within method for shoulda's EnsureLengthOf matcher --- spec/support/matchers.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/spec/support/matchers.rb b/spec/support/matchers.rb index 14a03870..cb1dcba3 100644 --- a/spec/support/matchers.rb +++ b/spec/support/matchers.rb @@ -67,3 +67,17 @@ module UrlAccess login_with(user) if user end end + +# Extend shoulda-matchers +module Shoulda::Matchers::ActiveModel + class EnsureLengthOfMatcher + # Shortcut for is_at_least and is_at_most + def is_within(range) + if range.exclude_end? + is_at_least(range.first) && is_at_most(range.last - 1) + else + is_at_least(range.first) && is_at_most(range.last) + end + end + end +end From 8c44789e6fc00a9cdbe3020232ad546941af18b9 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 29 Aug 2012 18:09:41 +0300 Subject: [PATCH 082/357] Mark api milestone specs as pending --- spec/api/milestones_spec.rb | 1 + spec/requests/api/issues_spec.rb | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/spec/api/milestones_spec.rb b/spec/api/milestones_spec.rb index ba1d15cc..ce602367 100644 --- a/spec/api/milestones_spec.rb +++ b/spec/api/milestones_spec.rb @@ -6,6 +6,7 @@ describe Gitlab::API do let!(:milestone) { Factory :milestone, project: project } before { project.add_access(user, :read) } + before { return pending } describe "GET /projects/:id/milestones" do it "should return project milestones" do diff --git a/spec/requests/api/issues_spec.rb b/spec/requests/api/issues_spec.rb index 4c680425..2917980b 100644 --- a/spec/requests/api/issues_spec.rb +++ b/spec/requests/api/issues_spec.rb @@ -65,7 +65,7 @@ describe Gitlab::API do describe "DELETE /projects/:id/issues/:issue_id" do it "should delete a project issue" do - delete "#{api_prefix}/projects/#{project.code}/issues/#{issue.id}?private_token=#{user.private_token}" + delete api("/projects/#{project.code}/issues/#{issue.id}?private_token=#{user.private_token}") response.status.should == 405 end end From 97423a0bed1148f65f9ed2bd8bf540e764d9576c Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 29 Aug 2012 11:36:02 -0400 Subject: [PATCH 083/357] Add more coverage for model validations and associations --- spec/factories.rb | 13 ++++++-- spec/models/event_spec.rb | 1 + spec/models/issue_spec.rb | 12 +------- spec/models/key_spec.rb | 5 +++- spec/models/merge_request_spec.rb | 14 --------- spec/models/note_spec.rb | 2 ++ spec/models/project_spec.rb | 45 +++++++++++++++++++++++----- spec/models/protected_branch_spec.rb | 20 ++++++------- spec/models/snippet_spec.rb | 11 +++++-- spec/models/user_spec.rb | 17 +++++++++-- spec/models/users_project_spec.rb | 4 +++ spec/models/wiki_spec.rb | 2 ++ 12 files changed, 96 insertions(+), 50 deletions(-) diff --git a/spec/factories.rb b/spec/factories.rb index 3f9673b4..2e4acf39 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -18,11 +18,15 @@ FactoryGirl.define do Faker::Lorem.sentence end + sequence :name, aliases: [:file_name] do + Faker::Name.name + end + sequence(:url) { Faker::Internet.uri('http') } factory :user, aliases: [:author, :assignee, :owner] do email { Faker::Internet.email } - name { Faker::Name.name } + name password "123456" password_confirmation "123456" @@ -116,6 +120,11 @@ FactoryGirl.define do author title content - file_name { Faker::Lorem.sentence } + file_name + end + + factory :protected_branch do + name + project end end diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb index ef6e3ed2..aaffda31 100644 --- a/spec/models/event_spec.rb +++ b/spec/models/event_spec.rb @@ -3,6 +3,7 @@ require 'spec_helper' describe Event do describe "Associations" do it { should belong_to(:project) } + it { should belong_to(:target) } end describe "Respond to" do diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb index 5c22d0cc..69829a4d 100644 --- a/spec/models/issue_spec.rb +++ b/spec/models/issue_spec.rb @@ -2,21 +2,11 @@ require 'spec_helper' describe Issue do describe "Associations" do - it { should belong_to(:project) } - it { should belong_to(:author) } - it { should belong_to(:assignee) } it { should belong_to(:milestone) } end describe "Validation" do - it { should validate_presence_of(:title) } - it { should validate_presence_of(:author_id) } - it { should validate_presence_of(:project_id) } - end - - describe "Scope" do - it { Issue.should respond_to :closed } - it { Issue.should respond_to :opened } + it { should ensure_length_of(:description).is_within(0..2000) } end describe 'modules' do diff --git a/spec/models/key_spec.rb b/spec/models/key_spec.rb index 6efb21e9..85cd291d 100644 --- a/spec/models/key_spec.rb +++ b/spec/models/key_spec.rb @@ -2,12 +2,15 @@ require 'spec_helper' describe Key do describe "Associations" do - it { should belong_to(:user) or belong_to(:project) } + it { should belong_to(:user) } + it { should belong_to(:project) } end describe "Validation" do it { should validate_presence_of(:title) } it { should validate_presence_of(:key) } + it { should ensure_length_of(:title).is_within(0..255) } + it { should ensure_length_of(:key).is_within(0..5000) } end describe "Methods" do diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 78ec0110..d1253b35 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -1,23 +1,9 @@ require 'spec_helper' describe MergeRequest do - describe "Associations" do - it { should belong_to(:project) } - it { should belong_to(:author) } - it { should belong_to(:assignee) } - end - describe "Validation" do it { should validate_presence_of(:target_branch) } it { should validate_presence_of(:source_branch) } - it { should validate_presence_of(:title) } - it { should validate_presence_of(:author_id) } - it { should validate_presence_of(:project_id) } - end - - describe "Scope" do - it { MergeRequest.should respond_to :closed } - it { MergeRequest.should respond_to :opened } end describe 'modules' do diff --git a/spec/models/note_spec.rb b/spec/models/note_spec.rb index c4010e64..ffaf442d 100644 --- a/spec/models/note_spec.rb +++ b/spec/models/note_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' describe Note do describe "Associations" do it { should belong_to(:project) } + it { should belong_to(:noteable) } + it { should belong_to(:author).class_name('User') } end describe "Validation" do diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index eac8c3b5..b947eeb2 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -2,23 +2,52 @@ require 'spec_helper' describe Project do describe "Associations" do + it { should belong_to(:owner).class_name('User') } it { should have_many(:users) } - it { should have_many(:protected_branches).dependent(:destroy) } it { should have_many(:events).dependent(:destroy) } - it { should have_many(:wikis).dependent(:destroy) } it { should have_many(:merge_requests).dependent(:destroy) } - it { should have_many(:users_projects).dependent(:destroy) } it { should have_many(:issues).dependent(:destroy) } + it { should have_many(:milestones).dependent(:destroy) } + it { should have_many(:users_projects).dependent(:destroy) } it { should have_many(:notes).dependent(:destroy) } it { should have_many(:snippets).dependent(:destroy) } - it { should have_many(:hooks).dependent(:destroy) } it { should have_many(:deploy_keys).dependent(:destroy) } + it { should have_many(:hooks).dependent(:destroy) } + it { should have_many(:wikis).dependent(:destroy) } + it { should have_many(:protected_branches).dependent(:destroy) } end describe "Validation" do + let!(:project) { create(:project) } + it { should validate_presence_of(:name) } + it { should validate_uniqueness_of(:name) } + it { should ensure_length_of(:name).is_within(0..255) } + it { should validate_presence_of(:path) } + it { should validate_uniqueness_of(:path) } + it { should ensure_length_of(:path).is_within(0..255) } + # TODO: Formats + + it { should ensure_length_of(:description).is_within(0..2000) } + it { should validate_presence_of(:code) } + it { should validate_uniqueness_of(:code) } + it { should ensure_length_of(:code).is_within(1..255) } + # TODO: Formats + + it { should validate_presence_of(:owner) } + + it "should not allow new projects beyond user limits" do + project.stub(:owner).and_return(double(can_create_project?: false, projects_limit: 1)) + project.should_not be_valid + project.errors[:base].first.should match(/Your own projects limit is 1/) + end + + it "should not allow 'gitolite-admin' as repo name" do + should allow_value("blah").for(:path) + should_not allow_value("gitolite-admin").for(:path) + end end describe "Respond to" do @@ -73,9 +102,11 @@ describe Project do it { should respond_to(:trigger_post_receive) } end - it "should not allow 'gitolite-admin' as repo name" do - should allow_value("blah").for(:path) - should_not allow_value("gitolite-admin").for(:path) + describe 'modules' do + it { should include_module(Repository) } + it { should include_module(PushObserver) } + it { should include_module(Authority) } + it { should include_module(Team) } end it "should return valid url to repo" do diff --git a/spec/models/protected_branch_spec.rb b/spec/models/protected_branch_spec.rb index 77a214ff..9180bc3b 100644 --- a/spec/models/protected_branch_spec.rb +++ b/spec/models/protected_branch_spec.rb @@ -1,8 +1,6 @@ require 'spec_helper' describe ProtectedBranch do - let(:project) { Factory(:project) } - describe 'Associations' do it { should belong_to(:project) } end @@ -13,26 +11,26 @@ describe ProtectedBranch do end describe 'Callbacks' do - subject { ProtectedBranch.new(project: project, name: 'branch_name') } + let(:branch) { build(:protected_branch) } it 'call update_repository after save' do - subject.should_receive(:update_repository) - subject.save + branch.should_receive(:update_repository) + branch.save end it 'call update_repository after destroy' do - subject.should_receive(:update_repository) - subject.destroy + branch.save + branch.should_receive(:update_repository) + branch.destroy end end describe '#commit' do - subject { ProtectedBranch.new(project: project, name: 'cant_touch_this') } + let(:branch) { create(:protected_branch) } it 'commits itself to its project' do - project.should_receive(:commit).with('cant_touch_this') - - subject.commit + branch.project.should_receive(:commit).with(branch.name) + branch.commit end end end diff --git a/spec/models/snippet_spec.rb b/spec/models/snippet_spec.rb index 2a63584e..ffb861c4 100644 --- a/spec/models/snippet_spec.rb +++ b/spec/models/snippet_spec.rb @@ -3,14 +3,21 @@ require 'spec_helper' describe Snippet do describe "Associations" do it { should belong_to(:project) } - it { should belong_to(:author) } + it { should belong_to(:author).class_name('User') } + it { should have_many(:notes).dependent(:destroy) } end describe "Validation" do - it { should validate_presence_of(:title) } it { should validate_presence_of(:author_id) } it { should validate_presence_of(:project_id) } + + it { should validate_presence_of(:title) } + it { should ensure_length_of(:title).is_within(0..255) } + it { should validate_presence_of(:file_name) } + it { should ensure_length_of(:title).is_within(0..255) } + it { should validate_presence_of(:content) } + it { should ensure_length_of(:content).is_within(0..10_000) } end end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index a3443dc7..ca34f07d 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -2,13 +2,26 @@ require 'spec_helper' describe User do describe "Associations" do - it { should have_many(:projects) } it { should have_many(:users_projects).dependent(:destroy) } + it { should have_many(:projects) } + it { should have_many(:my_own_projects).class_name('Project') } + it { should have_many(:keys).dependent(:destroy) } + it { should have_many(:events).class_name('Event').dependent(:destroy) } + it { should have_many(:recent_events).class_name('Event') } it { should have_many(:issues).dependent(:destroy) } + it { should have_many(:notes).dependent(:destroy) } it { should have_many(:assigned_issues).dependent(:destroy) } it { should have_many(:merge_requests).dependent(:destroy) } it { should have_many(:assigned_merge_requests).dependent(:destroy) } - it { should have_many(:notes).dependent(:destroy) } + end + + describe 'validations' do + it { should validate_presence_of(:projects_limit) } + it { should validate_numericality_of(:projects_limit) } + it { should allow_value(0).for(:projects_limit) } + it { should_not allow_value(-1).for(:projects_limit) } + + it { should ensure_length_of(:bio).is_within(0..255) } end describe "Respond to" do diff --git a/spec/models/users_project_spec.rb b/spec/models/users_project_spec.rb index 5103ae00..3197ba6e 100644 --- a/spec/models/users_project_spec.rb +++ b/spec/models/users_project_spec.rb @@ -7,7 +7,11 @@ describe UsersProject do end describe "Validation" do + let!(:users_project) { create(:users_project) } + it { should validate_presence_of(:user_id) } + it { should validate_uniqueness_of(:user_id).scoped_to(:project_id) } + it { should validate_presence_of(:project_id) } end diff --git a/spec/models/wiki_spec.rb b/spec/models/wiki_spec.rb index 8035280d..de6ce426 100644 --- a/spec/models/wiki_spec.rb +++ b/spec/models/wiki_spec.rb @@ -4,10 +4,12 @@ describe Wiki do describe "Associations" do it { should belong_to(:project) } it { should belong_to(:user) } + it { should have_many(:notes).dependent(:destroy) } end describe "Validation" do it { should validate_presence_of(:title) } + it { should ensure_length_of(:title).is_within(1..250) } it { should validate_presence_of(:content) } it { should validate_presence_of(:user_id) } end From dde8ed44553626ec8db9ad97eed95c2d12dc4dc7 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 29 Aug 2012 11:58:33 -0400 Subject: [PATCH 084/357] Fix milestone API specs and moved to requests/api Closes #1331 --- spec/requests/api/issues_spec.rb | 2 +- spec/{ => requests}/api/milestones_spec.rb | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) rename spec/{ => requests}/api/milestones_spec.rb (72%) diff --git a/spec/requests/api/issues_spec.rb b/spec/requests/api/issues_spec.rb index 2917980b..293ea83a 100644 --- a/spec/requests/api/issues_spec.rb +++ b/spec/requests/api/issues_spec.rb @@ -65,7 +65,7 @@ describe Gitlab::API do describe "DELETE /projects/:id/issues/:issue_id" do it "should delete a project issue" do - delete api("/projects/#{project.code}/issues/#{issue.id}?private_token=#{user.private_token}") + delete api("/projects/#{project.code}/issues/#{issue.id}", user) response.status.should == 405 end end diff --git a/spec/api/milestones_spec.rb b/spec/requests/api/milestones_spec.rb similarity index 72% rename from spec/api/milestones_spec.rb rename to spec/requests/api/milestones_spec.rb index ce602367..cf5f65f0 100644 --- a/spec/api/milestones_spec.rb +++ b/spec/requests/api/milestones_spec.rb @@ -1,16 +1,17 @@ require 'spec_helper' describe Gitlab::API do + include ApiHelpers + let(:user) { Factory :user } let!(:project) { Factory :project, owner: user } let!(:milestone) { Factory :milestone, project: project } before { project.add_access(user, :read) } - before { return pending } describe "GET /projects/:id/milestones" do it "should return project milestones" do - get "#{api_prefix}/projects/#{project.code}/milestones?private_token=#{user.private_token}" + get api("/projects/#{project.code}/milestones", user) response.status.should == 200 json_response.should be_an Array json_response.first['title'].should == milestone.title @@ -19,7 +20,7 @@ describe Gitlab::API do describe "GET /projects/:id/milestones/:milestone_id" do it "should return a project milestone by id" do - get "#{api_prefix}/projects/#{project.code}/milestones/#{milestone.id}?private_token=#{user.private_token}" + get api("/projects/#{project.code}/milestones/#{milestone.id}", user) response.status.should == 200 json_response['title'].should == milestone.title end @@ -27,7 +28,7 @@ describe Gitlab::API do describe "POST /projects/:id/milestones" do it "should create a new project milestone" do - post "#{api_prefix}/projects/#{project.code}/milestones?private_token=#{user.private_token}", + post api("/projects/#{project.code}/milestones", user), title: 'new milestone' response.status.should == 201 json_response['title'].should == 'new milestone' @@ -37,7 +38,7 @@ describe Gitlab::API do describe "PUT /projects/:id/milestones/:milestone_id" do it "should update a project milestone" do - put "#{api_prefix}/projects/#{project.code}/milestones/#{milestone.id}?private_token=#{user.private_token}", + put api("/projects/#{project.code}/milestones/#{milestone.id}", user), title: 'updated title' response.status.should == 200 json_response['title'].should == 'updated title' From 1dd938d20cb51a8068c9b3ab9041068292d97a9b Mon Sep 17 00:00:00 2001 From: randx Date: Wed, 29 Aug 2012 21:23:43 +0300 Subject: [PATCH 085/357] SCSS refactoring & cleanup. First iteration --- app/assets/stylesheets/common.scss | 159 +++- app/assets/stylesheets/gitlab_bootstrap.scss | 817 ------------------ .../stylesheets/gitlab_bootstrap/blocks.scss | 145 ++++ .../stylesheets/gitlab_bootstrap/buttons.scss | 72 ++ .../stylesheets/gitlab_bootstrap/common.scss | 51 ++ .../stylesheets/gitlab_bootstrap/files.scss | 156 ++++ .../stylesheets/gitlab_bootstrap/lists.scss | 30 + .../stylesheets/gitlab_bootstrap/tables.scss | 41 + .../gitlab_bootstrap/typography.scss | 71 ++ app/assets/stylesheets/main.scss | 31 +- app/assets/stylesheets/projects.css.scss | 385 --------- app/assets/stylesheets/sections/commits.scss | 5 + .../stylesheets/sections/merge_requests.scss | 11 + app/views/keys/_form.html.haml | 4 +- .../merge_requests/show/_mr_title.html.haml | 4 +- app/views/profile/password.html.haml | 2 +- app/views/profile/show.html.haml | 2 +- 17 files changed, 717 insertions(+), 1269 deletions(-) delete mode 100644 app/assets/stylesheets/gitlab_bootstrap.scss create mode 100644 app/assets/stylesheets/gitlab_bootstrap/blocks.scss create mode 100644 app/assets/stylesheets/gitlab_bootstrap/buttons.scss create mode 100644 app/assets/stylesheets/gitlab_bootstrap/common.scss create mode 100644 app/assets/stylesheets/gitlab_bootstrap/files.scss create mode 100644 app/assets/stylesheets/gitlab_bootstrap/lists.scss create mode 100644 app/assets/stylesheets/gitlab_bootstrap/tables.scss create mode 100644 app/assets/stylesheets/gitlab_bootstrap/typography.scss delete mode 100644 app/assets/stylesheets/projects.css.scss diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index 68f862b8..4fa65ac7 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -1,11 +1,9 @@ -.diff_file_header a, -.file_stats a { - color:$style_color; -} - - /** LAYOUT **/ +body { + margin-bottom:20px; +} + .container { padding-top:0; z-index:5; @@ -40,30 +38,6 @@ color: $link_color; } -.widget { - @include shade; - padding:20px; - margin-bottom:20px; - border: 1px solid #DDD; - border-radius: 5px; - background:#fafafa; - - .link_holder { - background:#eee; - position:relative; - left:-20px; - top:20px; - padding:10px 20px; - width:100%; - border-top:1px solid #ccc; - - a { - font-size:14px; - color:#666; - } - } -} - .help li { color:#111 } .back_link { @@ -88,16 +62,6 @@ padding-left:20px; } -.number { - border-radius: 4px; - text-shadow: none; - background: rgba(0,0,0,.12); - text-align: center; - padding: 2px 4px; - line-height:18px; - margin-left:2px; -} - table a code { position: relative; top: -2px; @@ -174,10 +138,6 @@ span.update-author { display:block; } /** END UPDATE ITEM **/ -.ajax-tab-loading { - padding:40px; - display:none; -} .dashboard-loader { float:left; margin:10px; @@ -200,6 +160,117 @@ a.project-update.titled { } } +.neib { + margin-right:10px; +} + +.label { + background-color: #474D57; + + &.label-issue { + background-color: #eee; + border: 1px solid #ccc; + padding:4px 6px; + color:#444; + text-shadow:0 0 1px #fff; + + &.grouped { + float: left; + margin-right: 6px; + padding: 6px; + } + } +} + +.event_label { + @extend .label; + background-color: #999; + + &.pushed { + background-color: #3A87AD; + } + + &.opened { + background-color: #468847; + } + + &.closed { + background-color: #B94A48; + } + + &.merged { + background-color: #2A2; + } +} + +form { + @extend .form-horizontal; + + .actions { + @extend .form-actions; + } + + .clearfix { + @extend .control-group; + } + + .input { + @extend .controls; + } + + label { + @extend .control-label; + } + .xlarge { + @extend .input-xlarge; + } + .xxlarge { + @extend .input-xxlarge; + } +} + + + + + + +.field_with_errors { + display:inline; +} + +ul.breadcrumb { + background:white; + border:none; + li { + display: inline; + text-shadow: 0 1px 0 white + } + + a { + color:#474D57; + font-weight:bold; + font-size:14px; + } + + .arrow { + background: url("images.png") no-repeat -85px -77px; + width: 19px; + height: 16px; + float: left; + position: relative; + left: -10px; + padding:0; + margin:0; + } +} + +input[type=text] { + &.large_text { + padding:6px; + font-size:16px; + } +} + input.git_clone_url { width:325px; } diff --git a/app/assets/stylesheets/gitlab_bootstrap.scss b/app/assets/stylesheets/gitlab_bootstrap.scss deleted file mode 100644 index a1faf060..00000000 --- a/app/assets/stylesheets/gitlab_bootstrap.scss +++ /dev/null @@ -1,817 +0,0 @@ -body { - margin-bottom:20px; -} - -pre { - font-family:'Menlo', 'Liberation Mono', 'Consolas', 'Courier New', 'andale mono','lucida console',monospace; - - &.dark { - background: #333; - color:#f5f5f5; - } -} - -a { - outline: none; - color: $link_color; - &:hover { - text-decoration:none; - color: $blue_link; - } - - &.btn { - color: $style_color; - } - - &.dark { - color: $style_color; - } - - &.lined { - text-decoration:underline; - &:hover { text-decoration:underline; } - } - - &.gray { - color:gray; - } - - &.supp_diff_link { - text-align:center; - padding:20px 0; - background:#f1f1f1; - width:100%; - float:left; - } - - &.neib { - margin-right:15px; - } -} - -.neib { - margin-right:10px; -} - -.alert-message { - @extend .alert; - - &.success { - @extend .alert-success; - } - - &.error { - @extend .alert-error; - } -} - -.alert { - &.alert-well { - background:#ddd; - border:1px solid #ccc; - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #ddd), to(#dfdfdf)); - background-image: -webkit-linear-gradient(#ddd 6.6%, #dfdfdf); - background-image: -moz-linear-gradient(#ddd 6.6%, #dfdfdf); - background-image: -o-linear-gradient(#ddd 6.6%, #dfdfdf); - color:#111; - } -} - -h3, h4, h5, h6 { - line-height: 36px; -} - -h5 { - font-size:14px; -} - - -table { - width:100%; - th { - padding-top: 9px; - font-weight: bold; - vertical-align: middle; - } - th, td { - padding: 10px 10px 9px; - line-height: 18px; - text-align: left; - } - - &.bordered-table { - border: 1px solid #DDD; - border-collapse: separate; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - } - - &.zebra-striped { - @extend .table-striped; - } -} - -.btn { - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f1f1f1), color-stop(25%, #f1f1f1), to(#e6e6e6)); - background-image: -webkit-linear-gradient(#f1f1f1, #f1f1f1 25%, #e6e6e6); - background-image: -moz-linear-gradient(top, #f1f1f1, #f1f1f1 25%, #e6e6e6); - background-image: -ms-linear-gradient(#f1f1f1, #f1f1f1 25%, #e6e6e6); - background-image: -o-linear-gradient(#f1f1f1, #f1f1f1 25%, #e6e6e6); - background-image: linear-gradient(#f1f1f1, #f1f1f1 25%, #e6e6e6); - - &:hover { - } - - &.btn-primary { - background:$link_color; - border-color: #2A79A3; - &:hover { - background:$blue_link; - } - } - &.primary { - @extend .btn-primary; - } - - &.success { - color: #fff; - text-shadow: 0 0 1px #111; - background: #5bb75b;; - font-weight: bold; - - &:hover { - background-color: #51a351; - color: #fff; - } - } - - &.danger, - &.btn-danger { - color:#fff; - background: #DA4E49; - border-color: #BD362F; - - &:hover { - color:#fff; - background: #EE4E49; - } - } - - &.danger { - @extend .btn-danger; - } - - &.small { - @extend .btn-small; - } - - &.active { - border-color:#aaa; - background-color:#ccc; - } -} - -a:focus { - outline: none; -} - -.nav-pills a:hover { - background-color:#888; -} - -.nav-pills .active a { - background-color: $style_color; -} - -.label { - background-color: #474D57; - &.label-important { - background-color: #B94A48; - } - - &.label-issue { - background-color: #eee; - border: 1px solid #ccc; - padding:4px 6px; - color:#444; - text-shadow:0 0 1px #fff; - - &.grouped { - float: left; - margin-right: 6px; - padding: 6px; - } - } -} - -.nav-tabs > li > a, .nav-pills > li > a { - color:$style_color; -} - -.nav-tabs > .active > a { - font-weight:bold; -} - -/** COLORS **/ -.cgray { color:gray; } -.cred { color:#D12F19; } -.cgreen { color:#44aa22; } -.cblack { color:#111; } -.cdark { color:#444 } -.cwhite { color:#fff !important } -.bgred { background: #F2DEDE !important} - -/** COMMON STYLES **/ -.left { - float:left; -} -.right { - float:right !important; -} -.width-50p{ - width:50%; -} -.width-49p{ - width:49%; -} -.width-30p{ - width:30%; -} -.width-65p{ - width:65%; -} -.width-100p{ - width:100%; -} -.append-bottom-10 { - margin-bottom:10px; -} -.append-bottom-20 { - margin-bottom:20px; -} -.prepend-top-10 { - margin-top:10px; -} - -.prepend-top-20 { - margin-top:20px; -} - -.padded { - padding:20px; -} - -.ipadded { - padding:20px !important; -} -.lborder { - border-left:1px solid #eee; -} - -.borders { - border: 1px solid #ccc; - @include shade; -} -.no-borders { - border:none; -} -table.no-borders { - border:none; - tr, td { border:none } -} -.no-padding { - padding:0 !important; -} -.underlined { - border-bottom: 1px solid $border_color; -} -.vlink { - color: $link_color !important; -} - -.pretty_label { - @include round-borders-all(4px); - padding:2px 4px; - background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.076, #fefefe), to(#F6F7F8)); - background-image: -webkit-linear-gradient(#fefefe 7.6%, #F6F7F8); - background-image: -moz-linear-gradient(#fefefe 7.6%, #F6F7F8); - background-image: -o-linear-gradient(#fefefe 7.6%, #F6F7F8); - color: #777; - border: 1px solid #DEDFE1; - - &.branch { - border:none; - font-size:13px; - background: #474D57; - color:#fff; - font-weight:bold; - font-family: monospace; - } -} - -.event_label { - @extend .label; - background-color: #999; - - &.pushed { - background-color: #3A87AD; - } - - &.opened { - background-color: #468847; - } - - &.closed { - background-color: #B94A48; - } - - &.merged { - background-color: #2A2; - } -} - -img.avatar { - float:left; - margin-right:15px; - width:40px; - border:1px solid #ddd; - padding:1px; - - &.s16 { - width:16px; - height:16px; - } - &.s24 { - width:24px; - height:24px; - } - &.s32 { - width:32px; - height:32px; - } -} - -img.lil_av { - padding-left: 4px; - padding-right:3px; -} - -form { - @extend .form-horizontal; - - .actions { - @extend .form-actions; - } - - .clearfix { - @extend .control-group; - } - - .input { - @extend .controls; - } - - label { - @extend .control-label; - } - .xlarge { - @extend .input-xlarge; - } - .xxlarge { - @extend .input-xxlarge; - } -} - -/** - * List li block element #1 - * - */ -.wll { - background-color: #FFF; - padding: 10px 5px; - min-height: 20px; - border-bottom: 1px solid #eee; - border-bottom: 1px solid rgba(0, 0, 0, 0.05); - &.smoke { - background-color:#f5f5f5; - } - &:hover { - background:$hover; - } - &:last-child { border:none } - p { padding-top:5px; margin:0; color:$style_color;} - .author { color: #999; } - p { - color:#222; - margin-bottom: 0; - img { - position:relative; - top:3px; - } - } -} - - -/** - * Block element #2 - * - */ -.entry { - position: relative; - padding: 7px 15px; - margin-bottom: 18px; - color: #404040; - filter:none; - - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); - - background:#F1F1F1; - border: 1px solid #ccc; - - - p { - color:$style_color; - margin-bottom: 0; - img { - position:relative; - top:3px; - } - } -} - - -/** - * Big UI Block for show page content - * - */ -.ui-box { - background:#F9F9F9; - margin-bottom: 25px; - @include round-borders-all(4px); - border-color: #CCC; - @include solid_shade; - - ul { - margin:0; - } - - h5, .title { - padding: 0 10px; - @include round-borders-top(4px); - @include bg-gray-gradient; - border-bottom: 1px solid #bbb; - - &.small { - line-height: 28px; - font-size: 14px; - line-height:28px; - text-shadow: 0 1px 1px white; - } - - form { - padding:9px 0; - margin:0px; - } - - .nav-pills { - li { - padding:3px 0; - &.active a { background-color:$style_color; } - a { - border-radius:7px; - } - } - } - } - - .bottom { - @include bg-gray-gradient; - @include round-borders-bottom(4px); - border-bottom:none; - border-top: 1px solid #bbb; - } - - &.padded { - h5, .title { - margin: -20px; - margin-bottom: 0; - padding: 5px 20px; - } - .middle_title { - background:#f5f5f5; - margin:20px -20px; - padding: 0 20px; - border-top:1px solid #eee; - border-bottom:1px solid #eee; - font-size:14px; - color:#777; - } - } - .row_title { - font-weight:bold; - color:#444; - &:hover { - color:#444; - text-decoration:underline; - } - } - - li, .wll { - padding:10px; - &:first-child { - @include round-borders-top(4px); - border-top:none; - } - - &:last-child { - @include round-borders-bottom(4px); - border:none; - } - } - -} - -table.admin-table { - @extend .table-bordered; - @extend .zebra-striped; - @include solid_shade; - th { - border-color: #CCC; - border-bottom: 1px solid #bbb; - @include bg-gray-gradient; - } -} - -.field_with_errors { - display:inline; -} - -ul.breadcrumb { - background:white; - border:none; - li { - display: inline; - text-shadow: 0 1px 0 white - } - - a { - color:#474D57; - font-weight:bold; - font-size:14px; - } - - .arrow { - background: url("images.png") no-repeat -85px -77px; - width: 19px; - height: 16px; - float: left; - position: relative; - left: -10px; - padding:0; - margin:0; - } -} - -.nothing_here_message { - text-align:center; - padding:20px; - color:#777; -} - -/** - * UI box element - * contains top, middle, bottom blocks - * - */ -.main_box { - @extend .borders; - @extend .prepend-top-20; - @extend .append-bottom-20; - border-width:1px; - @include solid_shade; - - - img { max-width: 100%; } - - pre { - code { - background: none !important; - } - } - - .top_box_content, - .middle_box_content, - .bottom_box_content { - padding:15px; - - pre { - background: none !important; - margin:0; - border:none; - padding:0; - } - } - - .middle_box_content { - border-radius:0; - border:none; - font-size:12px; - background-color:#f5f5f5; - border:none; - border-top:1px solid #eee; - } - - .bottom_box_content { - border-top:1px solid #eee; - } -} - -input[type=text] { - &.large_text { - padding:6px; - font-size:16px; - } -} - -p { - &.slead { - color:#456; - font-size:16px; - margin-bottom: 12px; - font-weight: 200; - line-height: 24px; - } -} - -h3.page_title { - color:#456; - font-size:20px; - font-weight: normal; - line-height: 28px; -} - -/** - * File content holder - * - */ -.file_holder { - border:1px solid #CCC; - margin-bottom:1em; - @include solid_shade; - - .file_title { - border-bottom: 1px solid #bbb; - @include bg-gray-gradient; - margin: 0; - font-weight: normal; - font-weight: bold; - text-align: left; - color: #666; - padding: 9px 10px; - height:18px; - - .options { - float:right; - margin-top: -5px; - } - - .file_name { - color:$style_color; - font-size:14px; - text-shadow: 0 1px 1px #fff; - small { - color:#999; - font-size:13px; - } - } - } - .file_content { - background:#fff; - font-size: 11px; - - &.wiki { - font-size: 13px; - code { - padding:0 4px; - } - padding:20px; - h1, h2 { - line-height: 46px; - } - h3, h4 { - line-height: 40px; - } - } - - &.image_file { - background:#eee; - text-align:center; - img { - padding:100px; - max-width:300px; - } - } - - &.blob_file { - - } - - /** - * Blame file - */ - &.blame { - tr { - border-bottom: 1px solid #eee; - } - td { - padding:5px; - } - .author, - .blame_commit { - background:#f5f5f5; - vertical-align:top; - } - .lines { - pre { - padding:0; - margin:0; - background:none; - border:none; - } - } - } - - &.logs { - background:#eee; - max-height: 700px; - overflow-y: auto; - - ol { - margin-left:40px; - padding: 10px 0; - border-left: 1px solid #CCC; - margin-bottom:0; - background: white; - li { - color:#888; - p { - margin:0; - color:#333; - line-height:24px; - padding-left: 10px; - } - - &:hover { - background:$hover; - } - } - } - } - - /** - * Code file - */ - &.code { - padding:0; - td.code { - width: 100%; - .highlight { - margin-left: 55px; - overflow:auto; - overflow-y:hidden; - } - } - .highlight pre { - white-space: pre; - word-wrap:normal; - } - - table.highlighttable { - border: none; - } - body.project-page table.highlighttable td { border: none } - table.highlighttable tr:hover { background:none;} - - table.highlighttable pre{ - line-height:16px !important; - font-size:12px !important; - } - - table.highlighttable .linenodiv pre { - text-align: right; - padding-right: 4px; - color:#666; - } - } - } -} diff --git a/app/assets/stylesheets/gitlab_bootstrap/blocks.scss b/app/assets/stylesheets/gitlab_bootstrap/blocks.scss new file mode 100644 index 00000000..894cb304 --- /dev/null +++ b/app/assets/stylesheets/gitlab_bootstrap/blocks.scss @@ -0,0 +1,145 @@ +/** + * =================================== + * Contain 3 main UI block elements: + * .main_box - for show pages + * .ui-box - for simple block & widgets + * =================================== + */ + +/** + * UI box element + * contains top, middle, bottom blocks + * + */ +.main_box { + @extend .borders; + @extend .prepend-top-20; + @extend .append-bottom-20; + border-width:1px; + @include solid_shade; + + + img { max-width: 100%; } + + pre { + code { + background: none !important; + } + } + + .top_box_content, + .middle_box_content, + .bottom_box_content { + padding:15px; + + pre { + background: none !important; + margin:0; + border:none; + padding:0; + } + } + + .middle_box_content { + border-radius:0; + border:none; + font-size:12px; + background-color:#f5f5f5; + border:none; + border-top:1px solid #eee; + } + + .bottom_box_content { + border-top:1px solid #eee; + } +} + +/** + * Big UI Block for show page content + * + */ +.ui-box { + background:#F9F9F9; + margin-bottom: 25px; + @include round-borders-all(4px); + border-color: #CCC; + @include solid_shade; + + ul { + margin:0; + } + + h5, .title { + padding: 0 10px; + @include round-borders-top(4px); + @include bg-gray-gradient; + border-bottom: 1px solid #bbb; + + &.small { + line-height: 28px; + font-size: 14px; + line-height:28px; + text-shadow: 0 1px 1px white; + } + + form { + padding:9px 0; + margin:0px; + } + + .nav-pills { + li { + padding:3px 0; + &.active a { background-color:$style_color; } + a { + border-radius:7px; + } + } + } + } + + .bottom { + @include bg-gray-gradient; + @include round-borders-bottom(4px); + border-bottom:none; + border-top: 1px solid #bbb; + } + + &.padded { + h5, .title { + margin: -20px; + margin-bottom: 0; + padding: 5px 20px; + } + .middle_title { + background:#f5f5f5; + margin:20px -20px; + padding: 0 20px; + border-top:1px solid #eee; + border-bottom:1px solid #eee; + font-size:14px; + color:#777; + } + } + .row_title { + font-weight:bold; + color:#444; + &:hover { + color:#444; + text-decoration:underline; + } + } + + li, .wll { + padding:10px; + &:first-child { + @include round-borders-top(4px); + border-top:none; + } + + &:last-child { + @include round-borders-bottom(4px); + border:none; + } + } +} diff --git a/app/assets/stylesheets/gitlab_bootstrap/buttons.scss b/app/assets/stylesheets/gitlab_bootstrap/buttons.scss new file mode 100644 index 00000000..8a01230c --- /dev/null +++ b/app/assets/stylesheets/gitlab_bootstrap/buttons.scss @@ -0,0 +1,72 @@ +.btn { + @include bg-dark-gray-gradient; + border-color:#aaa; + &:hover { + @include bg-gray-gradient; + border-color:#bbb; + color:#333; + } + + &.btn-primary { + background:$link_color; + border-color: #2A79A3; + &:hover { + background:$blue_link; + color:#fff; + } + } + &.primary { + @extend .btn-primary; + } + + &.success { + color: #fff; + text-shadow: 0 0 1px #111; + background: #5bb75b;; + font-weight: bold; + + &:hover { + background-color: #51a351; + color: #fff; + } + } + + &.save-btn { + @extend .wide; + @extend .primary; + } + + &.cancel-btn { + float:right; + } + + &.wide { + padding-left:30px; + padding-right:30px; + } + + &.danger, + &.btn-danger { + color:#fff; + background: #DA4E49; + border-color: #BD362F; + + &:hover { + color:#fff; + background: #EE4E49; + } + } + + &.danger { + @extend .btn-danger; + } + + &.small { + @extend .btn-small; + } + + &.active { + border-color:#aaa; + background-color:#ccc; + } +} diff --git a/app/assets/stylesheets/gitlab_bootstrap/common.scss b/app/assets/stylesheets/gitlab_bootstrap/common.scss new file mode 100644 index 00000000..30f16472 --- /dev/null +++ b/app/assets/stylesheets/gitlab_bootstrap/common.scss @@ -0,0 +1,51 @@ +/** COLORS **/ +.cgray { color:gray } +.cred { color:#D12F19 } +.cgreen { color:#4a2 } +.cblack { color:#111 } +.cdark { color:#444 } +.cwhite { color:#fff!important } +.bgred { background:#F2DEDE!important } + +/** COMMON CLASSES **/ +.left { float:left } +.right { float:right!important } +.width-50p { width:50% } +.width-49p { width:49% } +.width-30p { width:30% } +.width-65p { width:65% } +.width-100p { width:100% } +.append-bottom-10 { margin-bottom:10px } +.append-bottom-20 { margin-bottom:20px } +.prepend-top-10 { margin-top:10px } +.prepend-top-20 { margin-top:20px } +.padded { padding:20px } +.ipadded { padding:20px!important } +.lborder { border-left:1px solid #eee } +.no-padding { padding:0 !important; } +.underlined { border-bottom: 1px solid #CCC; } +.no-borders { border:none; } +.vlink { color: $link_color !important; } +.borders { border: 1px solid #ccc; @include shade; } + +/** PILLS & TABS**/ +.nav-pills a:hover { background-color:#888; } +.nav-pills .active a { background-color: $style_color; } +.nav-tabs > li > a, .nav-pills > li > a { color:$style_color; } +.nav-tabs > .active > a { font-weight:bold; } + +/** ALERT MESSAGES **/ +.alert-message { @extend .alert; } +.alert-messag.success { @extend .alert-success; } +.alert-message.error { @extend .alert-error; } + +/** AVATARS **/ +img.avatar { float:left; margin-right:15px; width:40px; border:1px solid #ddd; padding:1px; } +img.avatar.s16 { width:16px; height:16px; } +img.avatar.s24 { width:24px; height:24px; } +img.avatar.s32 { width:32px; height:32px; } +img.lil_av { padding-left: 4px; padding-right:3px; } + +/** HELPERS **/ +.nothing_here_message { text-align:center; padding:20px; color:#777; } +p.slead { color:#456; font-size:16px; margin-bottom: 12px; font-weight: 200; line-height: 24px; } diff --git a/app/assets/stylesheets/gitlab_bootstrap/files.scss b/app/assets/stylesheets/gitlab_bootstrap/files.scss new file mode 100644 index 00000000..4ea5ed02 --- /dev/null +++ b/app/assets/stylesheets/gitlab_bootstrap/files.scss @@ -0,0 +1,156 @@ +/** + * File content holder + * + */ +.file_holder { + border:1px solid #CCC; + margin-bottom:1em; + @include solid_shade; + + .file_title { + border-bottom: 1px solid #bbb; + @include bg-gray-gradient; + margin: 0; + font-weight: normal; + font-weight: bold; + text-align: left; + color: #666; + padding: 9px 10px; + height:18px; + + .options { + float:right; + margin-top: -5px; + } + + .file_name { + color:$style_color; + font-size:14px; + text-shadow: 0 1px 1px #fff; + small { + color:#999; + font-size:13px; + } + } + } + .file_content { + background:#fff; + font-size: 11px; + + &.wiki { + font-size: 13px; + code { + padding:0 4px; + } + padding:20px; + h1, h2 { + line-height: 46px; + } + h3, h4 { + line-height: 40px; + } + } + + &.image_file { + background:#eee; + text-align:center; + img { + padding:100px; + max-width:300px; + } + } + + &.blob_file { + + } + + /** + * Blame file + */ + &.blame { + tr { + border-bottom: 1px solid #eee; + } + td { + padding:5px; + } + .author, + .blame_commit { + background:#f5f5f5; + vertical-align:top; + } + .lines { + pre { + padding:0; + margin:0; + background:none; + border:none; + } + } + } + + &.logs { + background:#eee; + max-height: 700px; + overflow-y: auto; + + ol { + margin-left:40px; + padding: 10px 0; + border-left: 1px solid #CCC; + margin-bottom:0; + background: white; + li { + color:#888; + p { + margin:0; + color:#333; + line-height:24px; + padding-left: 10px; + } + + &:hover { + background:$hover; + } + } + } + } + + /** + * Code file + */ + &.code { + padding:0; + td.code { + width: 100%; + .highlight { + margin-left: 55px; + overflow:auto; + overflow-y:hidden; + } + } + .highlight pre { + white-space: pre; + word-wrap:normal; + } + + table.highlighttable { + border: none; + } + body.project-page table.highlighttable td { border: none } + table.highlighttable tr:hover { background:none;} + + table.highlighttable pre{ + line-height:16px !important; + font-size:12px !important; + } + + table.highlighttable .linenodiv pre { + text-align: right; + padding-right: 4px; + color:#666; + } + } + } +} + diff --git a/app/assets/stylesheets/gitlab_bootstrap/lists.scss b/app/assets/stylesheets/gitlab_bootstrap/lists.scss new file mode 100644 index 00000000..402ba04b --- /dev/null +++ b/app/assets/stylesheets/gitlab_bootstrap/lists.scss @@ -0,0 +1,30 @@ +/** LISTS **/ + +ul { + /** + * List li block element #1 + * + */ + .wll { + background-color: #FFF; + padding: 10px 5px; + min-height: 20px; + border-bottom: 1px solid #eee; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); + + &.smoke { background-color:#f5f5f5; } + &:hover { background:$hover; } + &:last-child { border:none } + .author { color: #999; } + + p { + padding-top:5px; + margin:0; + color:#222; + img { + position:relative; + top:3px; + } + } + } +} diff --git a/app/assets/stylesheets/gitlab_bootstrap/tables.scss b/app/assets/stylesheets/gitlab_bootstrap/tables.scss new file mode 100644 index 00000000..f78b1dee --- /dev/null +++ b/app/assets/stylesheets/gitlab_bootstrap/tables.scss @@ -0,0 +1,41 @@ +table { + width:100%; + th { + padding-top: 9px; + font-weight: bold; + vertical-align: middle; + } + th, td { + padding: 10px 10px 9px; + line-height: 18px; + text-align: left; + } + + &.bordered-table { + border: 1px solid #DDD; + border-collapse: separate; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + &.zebra-striped { + @extend .table-striped; + } +} + +table.admin-table { + @extend .table-bordered; + @extend .zebra-striped; + @include solid_shade; + th { + border-color: #CCC; + border-bottom: 1px solid #bbb; + @include bg-gray-gradient; + } +} + +table.no-borders { + border:none; + tr, td { border:none } +} diff --git a/app/assets/stylesheets/gitlab_bootstrap/typography.scss b/app/assets/stylesheets/gitlab_bootstrap/typography.scss new file mode 100644 index 00000000..c93a64bd --- /dev/null +++ b/app/assets/stylesheets/gitlab_bootstrap/typography.scss @@ -0,0 +1,71 @@ +/** + * Headers + * + */ +h3, h4, h5, h6 { line-height: 36px; } +h5 { font-size:14px; } +h3.page_title { + color:#456; + font-size:20px; + font-weight: normal; + line-height: 28px; +} + +/** CODE **/ +pre { + font-family:'Menlo', 'Liberation Mono', 'Consolas', 'Courier New', 'andale mono','lucida console',monospace; + + &.dark { + background: #333; + color:#f5f5f5; + } +} + +/** + * Links + * + */ +a { + outline: none; + color: $link_color; + &:hover { + text-decoration:none; + color: $blue_link; + } + + &.btn { + color: $style_color; + &:hover { + color: $style_color; + } + } + + &.dark { + color: $style_color; + } + + &.lined { + text-decoration:underline; + &:hover { text-decoration:underline; } + } + + &.gray { + color:gray; + } + + &.supp_diff_link { + text-align:center; + padding:20px 0; + background:#f1f1f1; + width:100%; + float:left; + } + + &.neib { + margin-right:15px; + } +} + +a:focus { + outline: none; +} diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index b4f0ebf8..4b7c0171 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -2,24 +2,8 @@ @import "bootstrap-responsive"; /** GITLAB colors **/ -$text_color:#222; -$lite_text_color: #666; $link_color:#2A79A3; -$active_link_color:#2FA0BB; -$active_bg_color:#79C3E0; -$active_bd_color: #2FA0BB; -$border_color:#CCC; -$lite_border_color:#EEE; -$min_app_width:980px; -$max_app_width:980px; -$app_padding:20px; -$bg_color: #FFF; -$styled_border_color: #2FA0BB; -$color: "#4BB8D2"; $blue_link: #2fa0bb; - - -/** Style colors **/ $style_color: #474D57; $hover: #FDF5D9; @@ -80,6 +64,13 @@ $hover: #FDF5D9; background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); } +@mixin bg-dark-gray-gradient { + background:#eee; + background-image: -webkit-linear-gradient(#e9e9e9, #d7d7d7); + background-image: -moz-linear-gradient(#e9e9e9, #d7d7d7); + background-image: -o-linear-gradient(#e9e9e9, #d7d7d7); +} + /** * Header of application. * Contain application logo, search panel, profile icon @@ -119,7 +110,13 @@ $hover: #FDF5D9; * Overrides some styles of twitter bootstrap. * Also give some common classes for gitlab app */ -@import "gitlab_bootstrap.scss"; +@import "gitlab_bootstrap/common.scss"; +@import "gitlab_bootstrap/typography.scss"; +@import "gitlab_bootstrap/buttons.scss"; +@import "gitlab_bootstrap/blocks.scss"; +@import "gitlab_bootstrap/files.scss"; +@import "gitlab_bootstrap/tables.scss"; +@import "gitlab_bootstrap/lists.scss"; /** diff --git a/app/assets/stylesheets/projects.css.scss b/app/assets/stylesheets/projects.css.scss deleted file mode 100644 index 4bdf5dee..00000000 --- a/app/assets/stylesheets/projects.css.scss +++ /dev/null @@ -1,385 +0,0 @@ -.git_url_wrapper { margin-right:50px } - -.sidebar aside a{ - display: block; - position: relative; - padding: 15px 10px; - margin: 10px 0 0 0; - - font-size:13px; - font-weight:bold; - color:#333; - - &.current { - color: white; - background: $active_bg_color; - border: 1px solid $active_bd_color; - border-radius:5px; - - -webkit-border-top-right-radius: 0; - -webkit-border-bottom-right-radius: 0; - -moz-border-radius-topright: 0px; - -moz-border-radius-bottomright: 0px; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - margin-right: -1px; - } -} - -body table .commit a{color: #{$blue_link}} -body table th, body table td{ border-bottom: 1px solid #DEE2E3;} -body .fixed{position: fixed; } - -/** File stat **/ -.file_stats { - span { - img { - width:14px; - float:left; - margin-right: 6px; - padding:2px 0; - } - } -} - -.round-borders { - @include round-borders-all(4px); - padding: 4px 0px; -} - -table.round-borders { - float:left; - text-align: left; -} - - - -/** PROJECTS **/ -input.ssh_project_url { - padding:5px; - margin:0px; - float:right; - width:400px; - text-align:center; -} - -#projects-list .project { - height:50px; -} - -#tree-slider .tree-item, -#projects-list .project, -#snippets-table .snippet, -#issues-table .issue{ - cursor:pointer; -} - -.clear { - clear: both; -} - - - -#user_projects_limit{ - width: 60px; -} - -.handle:hover{ - cursor: move; -} - -.project-refs-form { - span { - background: none !important; - position:static !important; - width:auto !important; - height: auto !important; - } -} - -.project-refs-select { - width:200px; -} - -.filter .left { margin-right:15px; } - -body table .commit { - a.tree-commit-link { - color:#444; - &:hover { - text-decoration:underline; - } - } -} - -/** NEW PROJECT **/ -.new-project-hodler { - .icon span { background-position: -31px -70px; } - td { border-bottom: 1px solid #DEE2E3; } -} - -/** Feed entry **/ -.commit, -.snippet, -.message { - .title { - color:#666; - a { color:#666 !important; } - p { margin-top:0px; } - } - .author { color: #999 } -} - -/** JQuery UI **/ -.ui-autocomplete { @include round-borders-all(5px); } -.ui-menu-item { cursor: pointer } -.ui-selectmenu{ - @include round-borders-all(4px); - margin-right:10px; - font-size:1.5em; - height:auto; - font-weight:bold; - .ui-selectmenu-status { - padding:3px 10px; - } -} - -#holder { - background:#FAFAFA; - border: 1px solid #EEE; - cursor: move; - height: 70%; - overflow: hidden; -} - -/* Project Dashboard Page */ -html, body { height: 100%; } - -.news-feed h2{float: left;} -.news-feed .project-updates {margin-bottom: 20px; display: block; width: 100%;} -.news-feed .project-updates .data{ padding: 0} -.news-feed .project-updates a.project-update {padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;} -.news-feed .project-updates a.project-update:last-child{border-bottom: 0} -.news-feed .project-updates a.project-update img{float: left; margin-right: 10px;} -.news-feed .project-updates a.project-update span.update-title, .dashboard-page .news-feed .project-updates li a span.update-author{display: block;} -.news-feed .project-updates a.project-update span.update-title{margin-bottom: 10px} -.news-feed .project-updates a.project-update span.update-author{color: #999; font-weight: normal; font-style: italic;} -.news-feed .project-updates a.project-update span.update-author strong{font-weight: bold; font-style: normal;} -/* eo Dashboard Page */ - - -/** Update entry **/ -.update-data { padding: 0 } -.update-data { width:100%; } -.update-data.ui-box .data { padding:0; } -a.update-item {padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;} -a.update-item:last-child{border-bottom: 0} -a.update-item img{float: left; margin-right: 10px;} -a.update-item span.update-title, .dashboard-page .news-feed .project-updates li a span.update-author{display: block;} -a.update-item span.update-title{margin-bottom: 10px} -a.update-item span.update-author{color: #999; font-weight: normal; font-style: italic;} -a.update-item span.update-author strong{font-weight: bold; font-style: normal;} - - -body .team_member_new .span-6, .team_member_edit .span-6{ padding:10px 0; } - -body.projects-page input.text.git-url.project_list_url { width:165px; } - - -body table.no-borders th { - background:none; - border-bottom:1px solid #CCC; - color:#333; -} - -body table.no-borders tr, -body table.no-borders td{ - border:none; -} - -.ajax-tab-loading { - padding:40px; - display:none; -} - -#tree-content-holder { float:left; width:100%; } - -#tree-readme-holder { - float:left; - width:100%; - - .readme { - @include round-borders-all(4px); - padding: 4px 15px; - background:#F7F7F7; - } -} - - - -/* Commit Page */ -.entity-info {float: right;} -.entity-button{ - background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.192, #fff), to(#f4f4f4)); - background-image: -webkit-linear-gradient(#fff 19.2%, #f4f4f4); - background-image: -moz-linear-gradient(#fff 19.2%, #f4f4f4); - background-image: -o-linear-gradient(#fff 19.2%, #f4f4f4); - box-shadow: 0 -1px 0 white inset; - display: block; - border: 1px solid #eee; - border-radius: 5px; - margin-bottom: 2px; - position: relative; - padding: 4px 10px; - font-size: 11px; - padding-right: 20px; -} - -.entity-button i{ - background: url('images.png') no-repeat -138px -27px; - width: 6px; - height: 9px; - float: right; - position: absolute; - top: 6px; - right: 5px; -} -.box-arrow{float: right; background: #E3E5EA; padding: 10px; border-radius: 5px; margin-top: 2px; text-shadow: none; color: #999; margin: 1.5em 0;} - -h4.dash-tabs { - margin: 0; - border-bottom: 1px solid #ccc; - padding: 10px 10px; - font-size: 11px; - padding-left:20px; - font-weight: bold; text-transform: uppercase; - background: #F7F7F7; - margin-bottom:20px; - height:13px; - -} - -.dash-button { - border-right: 1px solid #ddd; - background:none; - padding: 10px 15px; - float:left; - position:relative; - top:-10px; - left:0px; - height:13px; - - &:first-child { - border-left: 1px solid #ddd; - } - &.active { - background: #eaeaea; - } -} - - -.dashboard-loader { - float:right; - margin-right:30px; - display:none; -} - - -.merge-tabs { - margin: 0; - border: 1px solid #ccc; - padding: 5px; - font-size: 12px; - background: #F7F7F7; - margin-bottom:20px; - height:26px; - - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - - .tab { - font-weight: bold; - border-right: 1px solid #ddd; - background:none; - padding: 10px; - min-width:60px; - float:left; - position:relative; - top:-5px; - left:-5px; - height:16px; - padding-left:34px; - - span { - width: 20px; - height: 20px; - display: inline-block; - position: absolute; - left: 8px; - top: 8px; - } - - &.active { - background: #eaeaea; - } - } -} -.merge-tabs.repository .tab span{ background: url("images.png") no-repeat -38px -77px; } -.activities-tab span { background: url("images.png") no-repeat -161px -1px; } -.stat-tab span, -.team-tab span, -.snippets-tab span { background: url("images.png") no-repeat -38px -77px; } -.files-tab span { background: url("images.png") no-repeat -112px -23px; } - -.merge-notes-tab span { background: url("images.png") no-repeat -161px -1px; } -.merge-commits-tab span { background: url("images.png") no-repeat -86px 1px; } -.merge-diffs-tab span { background: url("images.png") no-repeat -118px 1px; } -.merge-tabs .dashboard-loader { padding:8px; } - -.user-mention { - color: #2FA0BB; - font-weight: bold; -} - -.author { - color: #999; -} - - - - -.dark_scheme_box { - padding:20px 0; - - label { - float:left; - box-shadow: 0 0px 5px rgba(0,0,0,.3); - - img { - } - } -} - -a.project-update.titled { - position: relative; - padding-left: 235px !important; - - .title-block { - padding: 10px; - width: 205px; - position: absolute; - left: 0; - top: 0; - } -} - -.add_new { - float: right; - background: #A6B807; - color: white; - padding: 4px 10px; - @include round-borders-all(4px); - font-size:11px; - margin: 10px 0; -} diff --git a/app/assets/stylesheets/sections/commits.scss b/app/assets/stylesheets/sections/commits.scss index e2db701d..d42c0077 100644 --- a/app/assets/stylesheets/sections/commits.scss +++ b/app/assets/stylesheets/sections/commits.scss @@ -207,3 +207,8 @@ font-family: 'Menlo', 'Liberation Mono', 'Consolas', 'Courier New', 'andale mono','lucida console',monospace; } } + +.diff_file_header a, +.file_stats a { + color:$style_color; +} diff --git a/app/assets/stylesheets/sections/merge_requests.scss b/app/assets/stylesheets/sections/merge_requests.scss index ec84a64e..d0486dcf 100644 --- a/app/assets/stylesheets/sections/merge_requests.scss +++ b/app/assets/stylesheets/sections/merge_requests.scss @@ -99,3 +99,14 @@ li.merge_request { @extend .padded; @extend .append-bottom-10; } + +.label_branch { + @include round-borders-all(4px); + padding:2px 4px; + border:none; + font-size:13px; + background: #474D57; + color:#fff; + font-weight:bold; + font-family: monospace; +} diff --git a/app/views/keys/_form.html.haml b/app/views/keys/_form.html.haml index 9c6e229b..26700803 100644 --- a/app/views/keys/_form.html.haml +++ b/app/views/keys/_form.html.haml @@ -19,6 +19,6 @@ .actions - = f.submit 'Save', class: "primary btn" - = link_to "Cancel", keys_path, class: "btn" + = f.submit 'Save', class: "btn save-btn" + = link_to "Cancel", keys_path, class: "btn cancel-btn" diff --git a/app/views/merge_requests/show/_mr_title.html.haml b/app/views/merge_requests/show/_mr_title.html.haml index 31fa0779..3ae1050d 100644 --- a/app/views/merge_requests/show/_mr_title.html.haml +++ b/app/views/merge_requests/show/_mr_title.html.haml @@ -1,9 +1,9 @@ %h3.page_title = "Merge Request ##{@merge_request.id}:"   - %span.pretty_label.branch= @merge_request.source_branch + %span.label_branch= @merge_request.source_branch → - %span.pretty_label.branch= @merge_request.target_branch + %span.label_branch= @merge_request.target_branch %span.right - if @merge_request.merged? diff --git a/app/views/profile/password.html.haml b/app/views/profile/password.html.haml index 257dacb1..d0aee7ac 100644 --- a/app/views/profile/password.html.haml +++ b/app/views/profile/password.html.haml @@ -16,4 +16,4 @@ = f.label :password_confirmation .input= f.password_field :password_confirmation .actions - = f.submit 'Save', class: "btn primary" + = f.submit 'Save', class: "btn save-btn" diff --git a/app/views/profile/show.html.haml b/app/views/profile/show.html.haml index a7b6a18a..22e840a0 100644 --- a/app/views/profile/show.html.haml +++ b/app/views/profile/show.html.haml @@ -67,4 +67,4 @@ = link_to "Add Public Key", new_key_path, class: "btn small right" .form-actions - = f.submit 'Save', class: "btn-primary btn" + = f.submit 'Save', class: "btn save-btn" From 51558bd57a7021a31d4e60342078e48a3dcb805a Mon Sep 17 00:00:00 2001 From: randx Date: Wed, 29 Aug 2012 22:29:50 +0300 Subject: [PATCH 086/357] Refactoring scss & improving some UI elements --- app/assets/images/merge.png | Bin 0 -> 593 bytes app/assets/stylesheets/common.scss | 175 +----------------- .../stylesheets/gitlab_bootstrap/buttons.scss | 16 ++ .../stylesheets/gitlab_bootstrap/common.scss | 1 + app/assets/stylesheets/sections/commits.scss | 15 ++ app/assets/stylesheets/sections/issues.scss | 8 + .../stylesheets/sections/merge_requests.scss | 45 +++-- app/assets/stylesheets/sections/projects.scss | 5 +- app/views/commits/_commit.html.haml | 4 +- app/views/events/_event_last_push.html.haml | 2 +- app/views/issues/_form.html.haml | 11 +- app/views/merge_requests/_form.html.haml | 18 +- app/views/projects/_form.html.haml | 13 +- app/views/projects/_new_form.html.haml | 4 +- 14 files changed, 101 insertions(+), 216 deletions(-) create mode 100644 app/assets/images/merge.png diff --git a/app/assets/images/merge.png b/app/assets/images/merge.png new file mode 100644 index 0000000000000000000000000000000000000000..4a6bb2e154d6f724080f232e5bbb9dc21f99f7fc GIT binary patch literal 593 zcmV-X0Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyo9 z5;+7dV2sKD00GfSL_t(Y$IX?oiq%jMhQB{v1e-0i5o8;|NARQ;1sg$01PfUkZL|;z zD~p5#Ec5}k5g#D|J5ji5B}rjrsd7QAw^M{=e~Tn|mv!$Yl0^qXrbysMY4b@Bv07XKNF;C(uqe+UDkkJ6i?kjm{cp0jE z)+EJ*5*gbd$&xNhei7ICNq|sg2NR0x{5Y@$Yyw^#+`B?o5$A`7AY^!teXC8&PjQve zq~$)q2JqTA2(4={a;Fm@u<8C0_$%mIlN299mC^Q)sLy(DUGOf7KtsT;BZF_V3A_qb z7KY%V&i>{U9R|n1DT%jnoo@lONy%)o36#{UcmnY(RM{Dcr_uDYE-+FDoUnpUB3Xca zuT9G5lLBl@(huw_ZCcKUxrhMS){w%g2YWf&eZHg};~Q;S&WF{}rX@4*uB4AkCt+11 z_kgp&>1A0k-;8gzY56X$yZtoS4D=niZbldc|`v!EONs7gvmfVs=qX+63FbA$TX|WUPj5aAJy_fIARlaeg fm;Pb9|DV_|IBUXuSip0M00000NkvXXu0mjfn+gJJ literal 0 HcmV?d00001 diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index 4fa65ac7..d07912f4 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -105,16 +105,6 @@ table a code { .git_url_wrapper { margin-right:50px } -.file_stats { - span { - img { - width:14px; - float:left; - margin-right:6px; - padding:2px 0; - } - } -} .handle:hover { cursor:move; @@ -148,18 +138,6 @@ span.update-author { font-weight:bold; } -a.project-update.titled { - position:relative; - padding-left:35% !important; - .title-block { - padding:10px; - width:35%; - position:absolute; - left:0; - top:0; - } -} - .neib { margin-right:10px; } @@ -230,10 +208,6 @@ form { } - - - - .field_with_errors { display:inline; } @@ -343,40 +317,6 @@ p.time { } -/** - * Dashboard page - * - */ -.dashboard_category { - margin-bottom:30px; - h3 a { - color:#474D57; - &:hover { - text-decoration:underline; - } - } - - .dashboard_block { - .dash_project_item { - margin-bottom:10px; - border:none; - padding:0px 5px; - .project_link { - color:#888; - &:hover { - color:#111; - .ico.project { - background-position:-209px -21px; - } - } - } - h4 { - color:#666; - } - } - } -} - .styled_image { border:2px solid #ddd; } @@ -466,39 +406,6 @@ p.time { } } -.btn { - &.very_small { - font-size:11px; - padding:2px 6px; - margin:2px; - } - - &.grouped { - margin-right:7px; - float:left; - } - - &.padded { - margin-right:3px; - padding:4px 10px 4px; - } -} - - -.prettyprint { - background-color: #fefbf3; - padding: 9px; - border: 1px solid rgba(0,0,0,.2); - -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.1); - -moz-box-shadow: 0 1px 2px rgba(0,0,0,.1); - box-shadow: 0 1px 2px rgba(0,0,0,.1); -} - -.hint { - font-style: italic; - color: #999; -} - .upvotes { font-size: 14px; font-weight: bold; @@ -622,14 +529,6 @@ li.note { } -/** - * Milestones list - * - */ - -.milestone { - @extend .wll; -} /** * Admin area @@ -676,11 +575,10 @@ li.note { * */ .event_lp { - @extend .alert-info; + @extend .ui-box; + color:#777; margin-bottom:20px; padding:8px; - border-style: solid; - border-width: 1px; @include border-radius(4px); min-height:22px; @@ -694,88 +592,19 @@ li.note { cursor:pointer; } -/** - * Issues, MRs legend - * - */ - -.list_legend { - float:left; - margin-right:20px; - .icon { - width:12px; - height:12px; - float:left; - margin-right:5px; - margin-top: 2px; - @include border-radius(4px); - &.today{ - background: #ADA; - border:1px solid #8B8; - } - &.closed { - background: #DDD; - border:1px solid #BBB; - } - &.yours { - background: #AAD; - border:1px solid #88B; - } - &.merged { - background: #DAD; - border:1px solid #B8B; - } - } - .text { - padding-bottom: 10px; - float:left; - } -} - .merge_request, .issue { - .list_legend { - margin-right: 5px; - margin-top: 14px; - .icon { - width:8px; - height:8px; - float:left; - margin-right:5px; - @include border-radius(4px); - border:1px solid #ddd; - } - } - &.today{ background: #EFE; border-color:#CEC; - .icon { - background: #ADA; - border:1px solid #8B8; - } } &.closed { background: #F5f5f5; border-color:#E5E5E5; - .icon { - background: #DDD; - border:1px solid #BBB; - } - } - &.yours { - .icon { - background: #AAD; - border:1px solid #88B; - } } &.merged { background: #F5f5f5; border-color:#E5E5E5; - .icon { - background: #DAD; - border:1px solid #B8B; - } } } diff --git a/app/assets/stylesheets/gitlab_bootstrap/buttons.scss b/app/assets/stylesheets/gitlab_bootstrap/buttons.scss index 8a01230c..89b292dc 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/buttons.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/buttons.scss @@ -69,4 +69,20 @@ border-color:#aaa; background-color:#ccc; } + + &.very_small { + font-size:11px; + padding:2px 6px; + margin:2px; + } + + &.grouped { + margin-right:7px; + float:left; + } + + &.padded { + margin-right:3px; + padding:4px 10px 4px; + } } diff --git a/app/assets/stylesheets/gitlab_bootstrap/common.scss b/app/assets/stylesheets/gitlab_bootstrap/common.scss index 30f16472..cd7145c9 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/common.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/common.scss @@ -27,6 +27,7 @@ .no-borders { border:none; } .vlink { color: $link_color !important; } .borders { border: 1px solid #ccc; @include shade; } +.hint { font-style: italic; color: #999; } /** PILLS & TABS**/ .nav-pills a:hover { background-color:#888; } diff --git a/app/assets/stylesheets/sections/commits.scss b/app/assets/stylesheets/sections/commits.scss index d42c0077..75e38aee 100644 --- a/app/assets/stylesheets/sections/commits.scss +++ b/app/assets/stylesheets/sections/commits.scss @@ -206,9 +206,24 @@ min-width:65px; font-family: 'Menlo', 'Liberation Mono', 'Consolas', 'Courier New', 'andale mono','lucida console',monospace; } + + .commit-author-name { + color: #777; + } } .diff_file_header a, .file_stats a { color:$style_color; } + +.file_stats { + span { + img { + width:14px; + float:left; + margin-right:6px; + padding:2px 0; + } + } +} diff --git a/app/assets/stylesheets/sections/issues.scss b/app/assets/stylesheets/sections/issues.scss index 1b61ec3f..6db4b987 100644 --- a/app/assets/stylesheets/sections/issues.scss +++ b/app/assets/stylesheets/sections/issues.scss @@ -99,3 +99,11 @@ input.check_all_issues { #update_status { width:100px; } + +/** + * Milestones list + * + */ +.milestone { + @extend .wll; +} diff --git a/app/assets/stylesheets/sections/merge_requests.scss b/app/assets/stylesheets/sections/merge_requests.scss index d0486dcf..3a134531 100644 --- a/app/assets/stylesheets/sections/merge_requests.scss +++ b/app/assets/stylesheets/sections/merge_requests.scss @@ -11,23 +11,6 @@ background:#f1f1f1; } - .commit { - margin:0; - padding:0; - padding: 5px; - margin-bottom: 5px; - - .committed_ago { - display:none; - } - .browse_code_link_holder { - display:none; - } - list-style:none; - &:hover { - background:none; - } - } } /** @@ -110,3 +93,31 @@ li.merge_request { font-weight:bold; font-family: monospace; } + +.mr_source_commit, +.mr_target_commit { + .commit { + margin:0; + padding:0; + padding: 5px; + margin-bottom: 5px; + .avatar { position:relative } + .row_title { + color:#444; + } + .commit-author-name, + .dash, + .committed_ago, + .browse_code_link_holder { + display:none; + } + list-style:none; + &:hover { + background:none; + } + } +} + +.mr_direction_tip { + margin-top:40px +} diff --git a/app/assets/stylesheets/sections/projects.scss b/app/assets/stylesheets/sections/projects.scss index 20fd2cbf..7aa40029 100644 --- a/app/assets/stylesheets/sections/projects.scss +++ b/app/assets/stylesheets/sections/projects.scss @@ -33,11 +33,14 @@ color:#888; } .btn { - padding:6px; + padding:6px 10px; margin-left:10px; margin-bottom:8px; } } + .adv_settings { + h6 { margin-left:40px; } + } } .project_clone_panel { diff --git a/app/views/commits/_commit.html.haml b/app/views/commits/_commit.html.haml index 686a4337..61371d14 100644 --- a/app/views/commits/_commit.html.haml +++ b/app/views/commits/_commit.html.haml @@ -4,8 +4,8 @@ %strong= link_to "Browse Code »", tree_project_ref_path(@project, commit.id), class: "right" %p = link_to commit.short_id(8), project_commit_path(@project, id: commit.id), class: "commit_short_id" - %strong.cgray= commit.author_name - – + %strong.commit-author-name= commit.author_name + %span.dash – = image_tag gravatar_icon(commit.author_email), class: "avatar", width: 16 = link_to_gfm truncate(commit.title, length: 50), project_commit_path(@project, id: commit.id), class: "row_title" diff --git a/app/views/events/_event_last_push.html.haml b/app/views/events/_event_last_push.html.haml index 4ef92749..66e14936 100644 --- a/app/views/events/_event_last_push.html.haml +++ b/app/views/events/_event_last_push.html.haml @@ -9,5 +9,5 @@ at %strong= link_to event.project.name, event.project - = link_to new_mr_path_from_push_event(event), title: "New Merge Request", class: "btn very_small primary" do + = link_to new_mr_path_from_push_event(event), title: "New Merge Request", class: "btn very_small" do Create Merge Request diff --git a/app/views/issues/_form.html.haml b/app/views/issues/_form.html.haml index 65bf605a..db7920b9 100644 --- a/app/views/issues/_form.html.haml +++ b/app/views/issues/_form.html.haml @@ -43,14 +43,15 @@ .actions - if @issue.new_record? - = f.submit 'Submit new issue', class: "primary btn" + = f.submit 'Submit new issue', class: "btn save-btn" -else - = f.submit 'Save changes', class: "primary btn" + = f.submit 'Save changes', class: "save-btn btn" + - cancel_class = 'btn cancel-btn' - if request.xhr? - = link_to "Cancel", "#back", onclick: "backToIssues();", class: "btn" + = link_to "Cancel", "#back", onclick: "backToIssues();", class: cancel_class - else - if @issue.new_record? - = link_to "Cancel", project_issues_path(@project), class: "btn" + = link_to "Cancel", project_issues_path(@project), class: cancel_class - else - = link_to "Cancel", project_issue_path(@project, @issue), class: "btn" + = link_to "Cancel", project_issue_path(@project, @issue), class: cancel_class diff --git a/app/views/merge_requests/_form.html.haml b/app/views/merge_requests/_form.html.haml index b6c12397..7e5c851b 100644 --- a/app/views/merge_requests/_form.html.haml +++ b/app/views/merge_requests/_form.html.haml @@ -9,7 +9,7 @@ %br .row - .span6 + .span5 .mr_branch_box %h5 From (Head Branch) .body @@ -17,10 +17,11 @@ = f.label :source_branch, "From", class: "control-label" .controls = f.select(:source_branch, @project.heads.map(&:name), { include_blank: "Select branch" }, style: "width:250px") - .bottom_commit - .mr_source_commit + .mr_source_commit - .span6 + .span2 + %center= image_tag "merge.png", class: 'mr_direction_tip' + .span5 .mr_branch_box %h5 To (Base Branch) .body @@ -28,8 +29,7 @@ = f.label :target_branch, "To", class: "control-label" .controls = f.select(:target_branch, @project.heads.map(&:name), { include_blank: "Select branch" }, style: "width:250px") - .bottom_commit - .mr_target_commit + .mr_target_commit %h4.cdark 2. Fill info @@ -48,12 +48,12 @@ .control-group .form-actions - = f.submit 'Save', class: "btn-primary btn" + = f.submit 'Save', class: "btn save-btn" - if @merge_request.new_record? - = link_to project_merge_requests_path(@project), class: "btn" do + = link_to project_merge_requests_path(@project), class: "btn cancel-btn" do Cancel - else - = link_to project_merge_request_path(@project, @merge_request), class: "btn" do + = link_to project_merge_request_path(@project, @merge_request), class: "btn cancel-btn" do Cancel diff --git a/app/views/projects/_form.html.haml b/app/views/projects/_form.html.haml index ce66b2cf..8bdeda1c 100644 --- a/app/views/projects/_form.html.haml +++ b/app/views/projects/_form.html.haml @@ -10,9 +10,9 @@ .input = f.text_field :name, placeholder: "Example Project", class: "xxlarge" - %h5.page_title - .alert.alert-info - %h5 Advanced settings: + %hr + .adv_settings + %h6 Advanced settings: .clearfix = f.label :path do Path @@ -34,8 +34,9 @@ .input= f.select(:default_branch, @project.heads.map(&:name), {}, style: "width:210px;") - unless @project.new_record? - .alert.alert-info - %h5 Features: + %hr + .adv_settings + %h6 Features: .clearfix = f.label :issues_enabled, "Issues" @@ -56,7 +57,7 @@ %br .actions - = f.submit 'Save', class: "btn primary" + = f.submit 'Save', class: "btn save-btn" = link_to 'Cancel', @project, class: "btn" - unless @project.new_record? .right diff --git a/app/views/projects/_new_form.html.haml b/app/views/projects/_new_form.html.haml index 5104df83..b1aafc37 100644 --- a/app/views/projects/_new_form.html.haml +++ b/app/views/projects/_new_form.html.haml @@ -10,8 +10,8 @@ = f.submit 'Create project', class: "btn primary" %hr - .alert.alert-info - %h5 Advanced settings: + %div.adv_settings + %h6 Advanced settings: .clearfix = f.label :path do Git Clone From 491f63794b40a7ca13de8d30227ad92a1ea04bbe Mon Sep 17 00:00:00 2001 From: Marvin Monge Date: Wed, 29 Aug 2012 19:11:22 -0600 Subject: [PATCH 087/357] nginx vhost standard --- doc/installation.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/installation.md b/doc/installation.md index 7d3c2c41..8c77d4f0 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -246,12 +246,13 @@ You can login via web using admin generated with setup: Add gitlab to nginx sites & change with your host specific settings - cp /home/gitlab/gitlab/lib/support/nginx-gitlab /etc/nginx/sites-enabled/gitlab + sudo cp /home/gitlab/gitlab/lib/support/nginx-gitlab /etc/nginx/sites-available/gitlab + sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab # Change **YOUR_SERVER_IP** and **YOUR_SERVER_FQDN** # to the IP address and fully-qualified domain name # of the host serving GitLab. - vim /etc/nginx/sites-enabled/nginx-gitlab + sudo vim /etc/nginx/sites-enabled/gitlab Restart nginx: From 793db070f0fe61c05359f34b34af0dd6f91d129a Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 30 Aug 2012 08:13:36 +0300 Subject: [PATCH 088/357] Restyled projects list on dashboard --- app/assets/stylesheets/sections/projects.scss | 28 ++++++++++++++++++- app/helpers/application_helper.rb | 15 ++++++++-- app/views/dashboard/index.html.haml | 17 ++++++----- 3 files changed, 49 insertions(+), 11 deletions(-) diff --git a/app/assets/stylesheets/sections/projects.scss b/app/assets/stylesheets/sections/projects.scss index 7aa40029..3d5aa80b 100644 --- a/app/assets/stylesheets/sections/projects.scss +++ b/app/assets/stylesheets/sections/projects.scss @@ -14,6 +14,32 @@ text-shadow: 0 1px 1px #fff; padding: 2px 10px; } + ul { + li { + padding:0; + a { + display:block; + .project_name { + color:#4fa2bd; + font-size:14px; + line-height:18px; + } + .arrow { + float:right; + padding:10px; + margin:0; + } + .last_activity { + padding-top:5px; + display:block; + span, strong { + font-size:12px; + color:#666; + } + } + } + } + } @extend .leftbar; @extend .ui-box; } @@ -39,7 +65,7 @@ } } .adv_settings { - h6 { margin-left:40px; } + h6 { margin-left:40px; } } } diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 38191f55..3dafb753 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -78,16 +78,16 @@ module ApplicationHelper end def show_last_push_widget?(event) - event && + event && event.last_push_to_non_root? && !event.rm_ref? && - event.project && + event.project && event.project.merge_requests_enabled end def tab_class(tab_key) active = case tab_key - + # Project Area when :wall; wall_tab? when :wiki; controller.controller_name == "wikis" @@ -126,4 +126,13 @@ module ApplicationHelper def hexdigest(string) Digest::SHA1.hexdigest string end + + def project_last_activity project + activity = project.last_activity + if activity && activity.created_at + time_ago_in_words(activity.created_at) + " ago" + else + "Never" + end + end end diff --git a/app/views/dashboard/index.html.haml b/app/views/dashboard/index.html.haml index ba7d019c..e13640fb 100644 --- a/app/views/dashboard/index.html.haml +++ b/app/views/dashboard/index.html.haml @@ -19,13 +19,16 @@ = link_to new_project_path, class: "btn very_small info" do %i.icon-plus New Project - - @projects.each do |project| - = link_to project_path(project), class: dom_class(project) do - %h4 - %span.ico.project - = truncate(project.name, length: 25) - %span.right - → + %ul.unstyled + - @projects.each do |project| + %li.wll + = link_to project_path(project), class: dom_class(project) do + %strong.project_name= truncate(project.name, length: 25) + %span.arrow + → + %span.last_activity + %strong Last activity: + %span= project_last_activity(project) .bottom= paginate @projects, theme: "gitlab" %hr From 4e4740285261a098b364e804a906a349731e71a3 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 30 Aug 2012 09:09:42 +0300 Subject: [PATCH 089/357] Fixed project last_activity. Links color changed a bit --- app/assets/stylesheets/gitlab_bootstrap/buttons.scss | 8 ++++---- .../stylesheets/gitlab_bootstrap/typography.scss | 12 ++++++------ app/assets/stylesheets/main.scss | 12 ++++++------ app/models/project.rb | 8 ++++---- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/app/assets/stylesheets/gitlab_bootstrap/buttons.scss b/app/assets/stylesheets/gitlab_bootstrap/buttons.scss index 89b292dc..9966e81b 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/buttons.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/buttons.scss @@ -8,7 +8,7 @@ } &.btn-primary { - background:$link_color; + background:#2a79A3; border-color: #2A79A3; &:hover { background:$blue_link; @@ -31,16 +31,16 @@ } } - &.save-btn { + &.save-btn { @extend .wide; @extend .primary; } - &.cancel-btn { + &.cancel-btn { float:right; } - &.wide { + &.wide { padding-left:30px; padding-right:30px; } diff --git a/app/assets/stylesheets/gitlab_bootstrap/typography.scss b/app/assets/stylesheets/gitlab_bootstrap/typography.scss index c93a64bd..97e85492 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/typography.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/typography.scss @@ -1,10 +1,10 @@ -/** +/** * Headers - * + * */ h3, h4, h5, h6 { line-height: 36px; } h5 { font-size:14px; } -h3.page_title { +h3.page_title { color:#456; font-size:20px; font-weight: normal; @@ -21,9 +21,9 @@ pre { } } -/** +/** * Links - * + * */ a { outline: none; @@ -35,7 +35,7 @@ a { &.btn { color: $style_color; - &:hover { + &:hover { color: $style_color; } } diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index 4b7c0171..be27d754 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -2,13 +2,13 @@ @import "bootstrap-responsive"; /** GITLAB colors **/ -$link_color:#2A79A3; +$link_color:#3A89A3; $blue_link: #2fa0bb; -$style_color: #474D57; -$hover: #FDF5D9; +$style_color: #474d57; +$hover: #fdf5d9; /** GITLAB Fonts **/ -@font-face { font-family: Korolev; src: url('korolev-medium-compressed.otf'); } +@font-face { font-family: Korolev; src: url('korolev-medium-compressed.otf'); } /** MIXINS **/ @mixin shade { @@ -56,7 +56,7 @@ $hover: #FDF5D9; border-radius: $radius; } -@mixin bg-gray-gradient { +@mixin bg-gray-gradient { background:#eee; background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf); @@ -64,7 +64,7 @@ $hover: #FDF5D9; background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); } -@mixin bg-dark-gray-gradient { +@mixin bg-dark-gray-gradient { background:#eee; background-image: -webkit-linear-gradient(#e9e9e9, #d7d7d7); background-image: -moz-linear-gradient(#e9e9e9, #d7d7d7); diff --git a/app/models/project.rb b/app/models/project.rb index 3fe11916..3c7287f8 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -8,7 +8,7 @@ class Project < ActiveRecord::Base # # Relations - # + # belongs_to :owner, class_name: "User" has_many :users, through: :users_projects has_many :events, dependent: :destroy @@ -25,12 +25,12 @@ class Project < ActiveRecord::Base attr_accessor :error_code - # + # # Protected attributes # attr_protected :private_flag, :owner_id - # + # # Scopes # scope :public_only, where(private_flag: false) @@ -158,7 +158,7 @@ class Project < ActiveRecord::Base end def last_activity - events.last || nil + events.order("created_at DESC").first || nil end def last_activity_date From a6026c9c8237020370e5499db5afb7ddab58532f Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 30 Aug 2012 08:41:43 +0300 Subject: [PATCH 090/357] Gitlab cli for development need at first --- gitlab | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100755 gitlab diff --git a/gitlab b/gitlab new file mode 100755 index 00000000..12cebd89 --- /dev/null +++ b/gitlab @@ -0,0 +1,70 @@ +#!/usr/bin/env ruby + +class GitlabCli + def initialize + @path = File.dirname(__FILE__) + @command = ARGV.shift + @mode = ARGV.shift + end + + def execute + case @command + when 'start' then start + when 'stop' then stop + else + puts "-- Usage gitlab start production or gitlab stop development" + end + end + + private + + def start + case @mode + when 'production'; + system(unicorn_start_cmd) + else + system(rails_start_cmd) + end + system(resque_start_cmd) + end + + def stop + case @mode + when 'production'; + system(unicorn_stop_cmd) + else + system(rails_stop_cmd) + end + system(resque_stop_cmd) + end + + def rails_start_cmd + "bundle exec rails s -d" + end + + def rails_stop_cmd + pid = File.join(@path, "tmp/pids/server.pid") + "kill -QUIT `cat #{pid}`" + end + + def unicorn_start_cmd + unicorn_conf = File.join(@path, "config/unicorn.rb") + "bundle exec unicorn_rails -c #{unicorn_conf} -E production -D" + end + + def unicorn_stop_cmd + pid = File.join(@path, "/tmp/pids/unicorn.pid") + "kill -QUIT `cat #{pid}`" + end + + def resque_start_cmd + "./resque.sh > /dev/null 2>&1" + end + + def resque_stop_cmd + pid = File.join(@path, "tmp/pids/resque_worker.pid") + "kill -QUIT `cat #{pid}`" + end +end + +GitlabCli.new.execute From cd3d50caf2691116424a8df73939f095814c7ab5 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 30 Aug 2012 09:26:45 +0300 Subject: [PATCH 091/357] Changed colors for buttons. Imporved preview area. Added clone panel to empty project --- app/assets/javascripts/note.js | 4 +- .../stylesheets/gitlab_bootstrap/buttons.scss | 35 +++++++--- app/assets/stylesheets/sections/notes.scss | 64 ++++++++++--------- app/views/commits/compare.html.haml | 2 +- app/views/notes/_form.html.haml | 6 +- app/views/projects/_clone_panel.html.haml | 21 ++++++ app/views/projects/empty.html.haml | 21 ++++++ app/views/projects/show.html.haml | 27 +------- app/views/search/show.html.haml | 2 +- 9 files changed, 113 insertions(+), 69 deletions(-) create mode 100644 app/views/projects/_clone_panel.html.haml diff --git a/app/assets/javascripts/note.js b/app/assets/javascripts/note.js index dfa09986..212c203a 100644 --- a/app/assets/javascripts/note.js +++ b/app/assets/javascripts/note.js @@ -45,7 +45,9 @@ init: $("#note_note").live("focus", function(){ $(this).css("height", "80px"); $('.note_advanced_opts').show(); - $(this).closest("form").find(".submit_note").attr("disabled", "disabled"); + if($(this).val() == "") { + $(this).closest("form").find(".submit_note").attr("disabled", "disabled").addClass("disabled"); + } }); $("#note_attachment").change(function(e){ diff --git a/app/assets/stylesheets/gitlab_bootstrap/buttons.scss b/app/assets/stylesheets/gitlab_bootstrap/buttons.scss index 9966e81b..c838f3b2 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/buttons.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/buttons.scss @@ -1,5 +1,8 @@ .btn { - @include bg-dark-gray-gradient; + background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.076, #f7f7f7), to(#d5d5d5)); + background-image: -webkit-linear-gradient(#f7f7f7 7.6%, #d5d5d5); + background-image: -moz-linear-gradient(#f7f7f7 7.6%, #d5d5d5); + background-image: -o-linear-gradient(#f7f7f7 7.6%, #d5d5d5); border-color:#aaa; &:hover { @include bg-gray-gradient; @@ -7,28 +10,42 @@ color:#333; } - &.btn-primary { + &.primary { background:#2a79A3; border-color: #2A79A3; + background-image: -webkit-linear-gradient(#47A7b7 7.6%, #2585b5); + background-image: -moz-linear-gradient(#47A7b7 7.6%, #2585b5); + background-image: -o-linear-gradient(#47A7b7 7.6%, #2585b5); + color:#fff; + text-shadow: 0 1px 1px #268; &:hover { background:$blue_link; color:#fff; } - } - &.primary { - @extend .btn-primary; + + &.disabled { + color:#fff; + background:#29B; + } } &.success { + border-color: #4A4; + background-image: -webkit-linear-gradient(#82D482 7.6%, #22B442); + background-image: -moz-linear-gradient(#82D482 7.6%, #22B442); + background-image: -o-linear-gradient(#82D482 7.6%, #22B442); color: #fff; - text-shadow: 0 0 1px #111; - background: #5bb75b;; - font-weight: bold; + text-shadow: 0 1px 1px #141; &:hover { - background-color: #51a351; + background: #6C6; color: #fff; } + + &.disabled { + color:#fff; + background:#2b2; + } } &.save-btn { diff --git a/app/assets/stylesheets/sections/notes.scss b/app/assets/stylesheets/sections/notes.scss index afa50952..6259939e 100644 --- a/app/assets/stylesheets/sections/notes.scss +++ b/app/assets/stylesheets/sections/notes.scss @@ -2,7 +2,7 @@ * Notes * */ -#notes-list, +#notes-list, #new_notes_list { display:block; list-style:none; @@ -10,7 +10,7 @@ padding:0px; } -#new_notes_list li:last-child{ +#new_notes_list li:last-child{ border-bottom:1px solid #aaa; } @@ -38,12 +38,16 @@ } } -#preview-note { - margin-bottom: 0; +.preview_note { + margin: 2px; + border: 1px solid #ddd; + padding: 10px; + min-height: 60px; + background:#f5f5f5; } -.note { - padding: 8px 0; +.note { + padding: 8px 0; border-bottom: 1px solid #eee; overflow: hidden; display: block; @@ -53,16 +57,16 @@ .note-author { color: $style_color;} .note-title { margin-left:45px; padding-top: 5px;} - .avatar { + .avatar { margin-top:3px; } - .delete-note { - display:none; + .delete-note { + display:none; float:right; } - &:hover { + &:hover { .delete-note { display:block; } } } @@ -76,18 +80,18 @@ p.notify_controls span{ font-weight: 700; } -tr.line_notes_row { +tr.line_notes_row { border-bottom:1px solid #DDD; border-left: 7px solid #2A79A3; - &.reply { + &.reply { background:#eee; border-left: 7px solid #2A79A3; border-top:1px solid #ddd; - td { + td { padding:7px 10px; } - a.line_note_reply_link { + a.line_note_reply_link { @include round-borders-all(4px); padding: 3px 10px; margin-left:5px; @@ -96,9 +100,9 @@ tr.line_notes_row { border-color: #2A79A3; } } - ul { + ul { margin:0; - li { + li { padding:0; border:none; } @@ -107,26 +111,26 @@ tr.line_notes_row { .line_notes_row, .per_line_form { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } -.per_line_form { +.per_line_form { background:#f5f5f5; border-top:1px solid #eee; form { margin: 0; } - td { + td { border-bottom:1px solid #ddd; } - .note_actions { + .note_actions { margin:0; padding-top: 10px; - .buttons { + .buttons { float:left; width:300px; } - .options { - .labels { + .options { + .labels { float:left; padding-left:10px; - label { + label { padding: 6px 0; margin: 0; width:120px; @@ -136,7 +140,7 @@ tr.line_notes_row { } } -td .line_note_link { +td .line_note_link { position:absolute; margin-left:-70px; margin-top:-10px; @@ -148,14 +152,14 @@ td .line_note_link { opacity: 0.0; filter: alpha(opacity=0); - &:hover { + &:hover { opacity: 1.0; filter: alpha(opacity=100); } } .diff_file_content tr.line_holder:hover > td { background: $hover !important; } -.diff_file_content tr.line_holder:hover > td .line_note_link { +.diff_file_content tr.line_holder:hover > td .line_note_link { opacity: 1.0; filter: alpha(opacity=100); } @@ -173,8 +177,8 @@ td .line_note_link { margin: 0; } - .note_advanced_opts { - h6 { + .note_advanced_opts { + h6 { line-height: 32px; padding-right: 15px; } @@ -187,7 +191,7 @@ td .line_note_link { overflow:hidden; margin:0 0 5px !important; - .input_file { + .input_file { .file_upload { position: absolute; right:14px; @@ -200,7 +204,7 @@ td .line_note_link { height:28px; overflow:hidden; } - .input-file { + .input-file { width: 260px; height: 41px; float: right; diff --git a/app/views/commits/compare.html.haml b/app/views/commits/compare.html.haml index be915cd1..7dab1f5c 100644 --- a/app/views/commits/compare.html.haml +++ b/app/views/commits/compare.html.haml @@ -20,7 +20,7 @@ = "..." = text_field_tag :to, params[:to], placeholder: "aa8b4ef", class: "xlarge" .actions - = submit_tag "Compare", class: "btn btn-primary" + = submit_tag "Compare", class: "btn primary" - unless @commits.empty? diff --git a/app/views/notes/_form.html.haml b/app/views/notes/_form.html.haml index adb6e2b4..50829a97 100644 --- a/app/views/notes/_form.html.haml +++ b/app/views/notes/_form.html.haml @@ -8,14 +8,14 @@ = f.hidden_field :noteable_id = f.hidden_field :noteable_type = f.text_area :note, size: 255 - #preview-note.well.hide + #preview-note.preview_note.hide .hint .right Comments are parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}. .clearfix .row.note_advanced_opts.hide .span3 - = f.submit 'Add Comment', class: "btn primary submit_note grouped", id: "submit_note" + = f.submit 'Add Comment', class: "btn success submit_note grouped", id: "submit_note" = link_to 'Preview', preview_project_notes_path(@project), class: 'btn grouped', id: 'preview-link' .span4.notify_opts %h6.left Notify via email: @@ -30,7 +30,7 @@ .span5.attachments %h6.left Attachment: %span.file_name File name... - + .input.input_file %a.file_upload.btn.small Upload File = f.file_field :attachment, class: "input-file" diff --git a/app/views/projects/_clone_panel.html.haml b/app/views/projects/_clone_panel.html.haml new file mode 100644 index 00000000..839a98a0 --- /dev/null +++ b/app/views/projects/_clone_panel.html.haml @@ -0,0 +1,21 @@ +.project_clone_panel + .row + .span7 + .form-horizontal + .input-prepend.project_clone_holder + = link_to "SSH", "#", class: "btn small active", :"data-clone" => @project.ssh_url_to_repo + = link_to "HTTP", "#", class: "btn small", :"data-clone" => @project.http_url_to_repo + = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5" + .span4.right + .right + - if can? current_user, :download_code, @project + = link_to archive_project_repository_path(@project), class: "btn small grouped" do + %i.icon-download-alt + Download + - if @project.merge_requests_enabled && can?(current_user, :write_merge_request, @project) + = link_to new_project_merge_request_path(@project), title: "New Merge Request", class: "btn small grouped" do + Merge Request + - if @project.issues_enabled && can?(current_user, :write_issue, @project) + = link_to new_project_issue_path(@project), title: "New Issue", class: "btn small grouped" do + Issue + diff --git a/app/views/projects/empty.html.haml b/app/views/projects/empty.html.haml index 907d5ef4..d408c0a6 100644 --- a/app/views/projects/empty.html.haml +++ b/app/views/projects/empty.html.haml @@ -1,4 +1,12 @@ = render 'shared/no_ssh' +.project_clone_panel + .row + .span7 + .form-horizontal + .input-prepend.project_clone_holder + = link_to "SSH", "#", class: "btn small active", :"data-clone" => @project.ssh_url_to_repo + = link_to "HTTP", "#", class: "btn small", :"data-clone" => @project.http_url_to_repo + = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5" %div.git-empty %h4 Git global setup: %pre.dark @@ -28,3 +36,16 @@ - if can? current_user, :admin_project, @project .prepend-top-20 = link_to 'Remove project', @project, confirm: 'Are you sure?', method: :delete, class: "btn danger right" + + + +:javascript + $(function(){ + var link_sel = ".project_clone_holder a"; + $(link_sel).bind("click", function() { + $(link_sel).removeClass("active"); + $(this).addClass("active"); + $("#project_clone").val($(this).attr("data-clone")); + }) + }) + diff --git a/app/views/projects/show.html.haml b/app/views/projects/show.html.haml index 628dc53d..77a0ef1a 100644 --- a/app/views/projects/show.html.haml +++ b/app/views/projects/show.html.haml @@ -1,33 +1,12 @@ = render "project_head" - -.project_clone_panel - .row - .span7 - .form-horizontal - .input-prepend.project_clone_holder - = link_to "SSH", "#", class: "btn small active", :"data-clone" => @project.ssh_url_to_repo - = link_to "HTTP", "#", class: "btn small", :"data-clone" => @project.http_url_to_repo - = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5" - .span4.right - .right - - if can? current_user, :download_code, @project - = link_to archive_project_repository_path(@project), class: "btn small grouped" do - %i.icon-download-alt - Download - - if @project.merge_requests_enabled && can?(current_user, :write_merge_request, @project) - = link_to new_project_merge_request_path(@project), title: "New Merge Request", class: "btn small grouped" do - Merge Request - - if @project.issues_enabled && can?(current_user, :write_issue, @project) - = link_to new_project_issue_path(@project), title: "New Issue", class: "btn small grouped" do - Issue - += render 'clone_panel' = render "events/event_last_push", event: @last_push .content_list= render @events -:javascript +:javascript $(function(){ var link_sel = ".project_clone_holder a"; - $(link_sel).bind("click", function() { + $(link_sel).bind("click", function() { $(link_sel).removeClass("active"); $(this).addClass("active"); $("#project_clone").val($(this).attr("data-clone")); diff --git a/app/views/search/show.html.haml b/app/views/search/show.html.haml index 9a0b4789..d37ef670 100644 --- a/app/views/search/show.html.haml +++ b/app/views/search/show.html.haml @@ -4,7 +4,7 @@ %strong Looking for .input = text_field_tag :search, params[:search], placeholder: "issue 143", class: "input-xxlarge", id: "dashboard_search" - = submit_tag 'Search', class: "btn btn-primary" + = submit_tag 'Search', class: "btn primary" - if params[:search].present? %br %h3 From d246a68a242e28c106ab8916ccdc3ac2643b2d96 Mon Sep 17 00:00:00 2001 From: randx Date: Thu, 30 Aug 2012 19:45:05 +0300 Subject: [PATCH 092/357] fix project.last_activity spec --- app/models/project.rb | 2 +- spec/models/project_spec.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/project.rb b/app/models/project.rb index 3c7287f8..a7735a42 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -158,7 +158,7 @@ class Project < ActiveRecord::Base end def last_activity - events.order("created_at DESC").first || nil + events.order("created_at ASC").last end def last_activity_date diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index b947eeb2..5add7ff8 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -141,7 +141,7 @@ describe Project do let(:last_event) { double } before do - project.stub(:events).and_return( [ double, double, last_event ] ) + project.stub_chain(:events, :order).and_return( [ double, double, last_event ] ) end it { project.last_activity.should == last_event } From 92137b7bebb2b6f9c5225776e3f30d0e5dfab9e6 Mon Sep 17 00:00:00 2001 From: randx Date: Thu, 30 Aug 2012 20:00:16 +0300 Subject: [PATCH 093/357] Removed class 'small' for some buttons. Fixed issue creation --- app/assets/stylesheets/sections/merge_requests.scss | 1 + app/controllers/issues_controller.rb | 8 +++++++- app/views/admin/users/_form.html.haml | 6 +++--- app/views/issues/index.html.haml | 2 +- app/views/keys/index.html.haml | 2 +- app/views/merge_requests/index.html.haml | 2 +- app/views/refs/_tree_item.html.haml | 2 +- 7 files changed, 15 insertions(+), 8 deletions(-) diff --git a/app/assets/stylesheets/sections/merge_requests.scss b/app/assets/stylesheets/sections/merge_requests.scss index 3a134531..73171915 100644 --- a/app/assets/stylesheets/sections/merge_requests.scss +++ b/app/assets/stylesheets/sections/merge_requests.scss @@ -38,6 +38,7 @@ background: #CEB; .accept_merge_request { + font-size:13px; float:left; } .remove_branch_holder { diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 889a7d98..e90fad9c 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -60,7 +60,13 @@ class IssuesController < ApplicationController @issue.save respond_to do |format| - format.html { redirect_to project_issue_path(@project, @issue) } + format.html do + if @issue.valid? + redirect_to project_issue_path(@project, @issue) + else + render :new + end + end format.js end end diff --git a/app/views/admin/users/_form.html.haml b/app/views/admin/users/_form.html.haml index 20144723..7010c272 100644 --- a/app/views/admin/users/_form.html.haml +++ b/app/views/admin/users/_form.html.haml @@ -73,8 +73,8 @@ .span6 .span6 .actions - = f.submit 'Save', class: "btn primary" + = f.submit 'Save', class: "btn save-btn" - if @admin_user.new_record? - = link_to 'Cancel', admin_users_path, class: "btn" + = link_to 'Cancel', admin_users_path, class: "btn cancel-btn" - else - = link_to 'Cancel', admin_user_path(@admin_user), class: "btn" + = link_to 'Cancel', admin_user_path(@admin_user), class: "btn cancel-btn" diff --git a/app/views/issues/index.html.haml b/app/views/issues/index.html.haml index a6836fd4..010b8856 100644 --- a/app/views/issues/index.html.haml +++ b/app/views/issues/index.html.haml @@ -6,7 +6,7 @@ .right .span5 - if can? current_user, :write_issue, @project - = link_to new_project_issue_path(@project), class: "right btn small", title: "New Issue", remote: true do + = link_to new_project_issue_path(@project), class: "right btn", title: "New Issue", remote: true do %i.icon-plus New Issue = form_tag search_project_issues_path(@project), method: :get, remote: true, id: "issue_search_form", class: :right do diff --git a/app/views/keys/index.html.haml b/app/views/keys/index.html.haml index 04e9e4cb..9b5663ed 100644 --- a/app/views/keys/index.html.haml +++ b/app/views/keys/index.html.haml @@ -1,6 +1,6 @@ %h3.page_title SSH Keys - = link_to "Add new", new_key_path, class: "btn small right" + = link_to "Add new", new_key_path, class: "btn right" %hr %p.slead diff --git a/app/views/merge_requests/index.html.haml b/app/views/merge_requests/index.html.haml index 4ad6e5c1..e7a43251 100644 --- a/app/views/merge_requests/index.html.haml +++ b/app/views/merge_requests/index.html.haml @@ -1,7 +1,7 @@ %h3.page_title Merge Requests - if can? current_user, :write_issue, @project - = link_to new_project_merge_request_path(@project), class: "right btn small", title: "New Merge Request" do + = link_to new_project_merge_request_path(@project), class: "right btn", title: "New Merge Request" do New Merge Request %br diff --git a/app/views/refs/_tree_item.html.haml b/app/views/refs/_tree_item.html.haml index 2e6bbf62..d4c4ee8d 100644 --- a/app/views/refs/_tree_item.html.haml +++ b/app/views/refs/_tree_item.html.haml @@ -2,7 +2,7 @@ %tr{ class: "tree-item #{tree_hex_class(content)}", url: tree_file_project_ref_path(@project, @ref, file) } %td.tree-item-file-name = tree_icon(content) - = link_to truncate(content.name, length: 40), tree_file_project_ref_path(@project, @ref || @commit.id, file), remote: :true + %strong= link_to truncate(content.name, length: 40), tree_file_project_ref_path(@project, @ref || @commit.id, file), remote: :true %td.tree_time_ago.cgray - if index == 1 %span.log_loading From 4a6596af274c01036aaf9f49a5b38cd678716873 Mon Sep 17 00:00:00 2001 From: randx Date: Thu, 30 Aug 2012 21:31:55 +0300 Subject: [PATCH 094/357] Fixed bunch of js bugs with comments. Also added development tips --- README.md | 1 + app/assets/javascripts/application.js | 20 ++ app/assets/javascripts/note.js | 250 ++++++++++----------- app/assets/stylesheets/sections/notes.scss | 2 +- app/views/commits/show.html.haml | 10 +- app/views/notes/_create_common.js.haml | 11 +- app/views/notes/_create_line.js.haml | 2 +- app/views/notes/_form.html.haml | 67 +++--- app/views/notes/_per_line_form.html.haml | 51 ++--- doc/development.md | 45 ++++ gitlab | 7 +- resque_dev.sh | 3 +- 12 files changed, 269 insertions(+), 200 deletions(-) create mode 100644 doc/development.md diff --git a/README.md b/README.md index 26ed209e..122cd984 100644 --- a/README.md +++ b/README.md @@ -39,5 +39,6 @@ Email ## Contribute +[Development Tips](https://github.com/gitlabhq/gitlabhq/blob/master/doc/development.md) Want to help - send a pull request. We'll accept good pull requests. diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 24d99a62..f69fd6f9 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -128,3 +128,23 @@ function showDiff(link) { function ajaxGet(url) { $.ajax({type: "GET", url: url, dataType: "script"}); } + +/** + * Disable button if text field is empty + */ +function disableButtonIfEmtpyField(field_selector, button_selector) { + field = $(field_selector); + if(field.val() == "") { + field.closest("form").find(button_selector).attr("disabled", "disabled").addClass("disabled"); + } + + field.on('keyup', function(){ + var field = $(this); + var closest_submit = field.closest("form").find(button_selector); + if(field.val() == "") { + closest_submit.attr("disabled", "disabled").addClass("disabled"); + } else { + closest_submit.removeAttr("disabled").removeClass("disabled"); + } + }) +} diff --git a/app/assets/javascripts/note.js b/app/assets/javascripts/note.js index 212c203a..9cd3e36e 100644 --- a/app/assets/javascripts/note.js +++ b/app/assets/javascripts/note.js @@ -1,174 +1,160 @@ var NoteList = { -notes_path: null, -target_params: null, -target_id: 0, -target_type: null, -first_id: 0, -last_id: 0, -disable:false, + notes_path: null, + target_params: null, + target_id: 0, + target_type: null, + first_id: 0, + last_id: 0, + disable:false, -init: - function(tid, tt, path) { - this.notes_path = path + ".js"; - this.target_id = tid; - this.target_type = tt; - this.target_params = "&target_type=" + this.target_type + "&target_id=" + this.target_id; + init: + function(tid, tt, path) { + this.notes_path = path + ".js"; + this.target_id = tid; + this.target_type = tt; + this.target_params = "&target_type=" + this.target_type + "&target_id=" + this.target_id; - // get notes - this.getContent(); + // get notes + this.getContent(); - // get new notes every n seconds - this.initRefresh(); + // get new notes every n seconds + this.initRefresh(); - $('.delete-note').live('ajax:success', function() { - $(this).closest('li').fadeOut(); }); + $('.delete-note').live('ajax:success', function() { + $(this).closest('li').fadeOut(); }); - $('#note_note').on('keyup', function(){ - var field = $(this); - var closest_submit = field.closest("form").find(".submit_note"); - if(field.val() == "") { - closest_submit.attr("disabled", "disabled").addClass("disabled"); - } else { - closest_submit.removeAttr("disabled").removeClass("disabled"); - } - }) + $(".note-form-holder").live("ajax:before", function(){ + $(".submit_note").attr("disabled", "disabled"); + }) - $("#new_note").live("ajax:before", function(){ - $(".submit_note").attr("disabled", "disabled"); - }) + $(".note-form-holder").live("ajax:complete", function(){ + $(".submit_note").removeAttr("disabled"); + }) - $("#new_note").live("ajax:complete", function(){ - $(".submit_note").removeAttr("disabled"); - }) + disableButtonIfEmtpyField(".note-text", ".submit_note"); - $("#note_note").live("focus", function(){ - $(this).css("height", "80px"); - $('.note_advanced_opts').show(); - if($(this).val() == "") { - $(this).closest("form").find(".submit_note").attr("disabled", "disabled").addClass("disabled"); - } - }); + $(".note-text").live("focus", function(){ + $(this).css("height", "80px"); + $('.note_advanced_opts').show(); + }); - $("#note_attachment").change(function(e){ + $("#note_attachment").change(function(e){ var val = $('.input-file').val(); var filename = val.replace(/^.*[\\\/]/, ''); $(".file_name").text(filename); - }); + }); - }, + }, -/** - * Load new notes to fresh list called 'new_notes_list': - * - Replace 'new_notes_list' with new list every n seconds - * - Append new notes to this list after submit - */ + /** + * Load new notes to fresh list called 'new_notes_list': + * - Replace 'new_notes_list' with new list every n seconds + * - Append new notes to this list after submit + */ -initRefresh: - function() { - // init timer - var intNew = setInterval("NoteList.getNew()", 10000); - }, + initRefresh: + function() { + // init timer + var intNew = setInterval("NoteList.getNew()", 10000); + }, -replace: - function(html) { - $("#new_notes_list").html(html); - }, + replace: + function(html) { + $("#new_notes_list").html(html); + }, -prepend: - function(id, html) { - if(id != this.last_id) { - $("#new_notes_list").prepend(html); - } - }, + prepend: + function(id, html) { + if(id != this.last_id) { + $("#new_notes_list").prepend(html); + } + }, -getNew: - function() { - // refersh notes list - $.ajax({ - type: "GET", + getNew: + function() { + // refersh notes list + $.ajax({ + type: "GET", url: this.notes_path, data: "last_id=" + this.last_id + this.target_params, dataType: "script"}); - }, + }, -refresh: - function() { - // refersh notes list - $.ajax({ - type: "GET", + refresh: + function() { + // refersh notes list + $.ajax({ + type: "GET", url: this.notes_path, data: "first_id=" + this.first_id + "&last_id=" + this.last_id + this.target_params, dataType: "script"}); - }, + }, -/** - * Init load of notes: - * 1. Get content with ajax call - * 2. Set content of notes list with loaded one - */ + /** + * Init load of notes: + * 1. Get content with ajax call + * 2. Set content of notes list with loaded one + */ -getContent: - function() { - $.ajax({ - type: "GET", + getContent: + function() { + $.ajax({ + type: "GET", url: this.notes_path, data: "?" + this.target_params, complete: function(){ $('.status').removeClass("loading")}, beforeSend: function() { $('.status').addClass("loading") }, dataType: "script"}); - }, + }, -setContent: - function(fid, lid, html) { + setContent: + function(fid, lid, html) { this.last_id = lid; this.first_id = fid; $("#notes-list").html(html); // Init infinite scrolling this.initLoadMore(); - }, + }, -/** - * Paging for old notes when scroll to bottom: - * 1. Init scroll events with 'initLoadMore' - * 2. Load onlder notes with 'getOld' method - * 3. append old notes to bottom of list with 'append' - * - */ + /** + * Paging for old notes when scroll to bottom: + * 1. Init scroll events with 'initLoadMore' + * 2. Load onlder notes with 'getOld' method + * 3. append old notes to bottom of list with 'append' + * + */ + getOld: + function() { + $('.loading').show(); + $.ajax({ + type: "GET", + url: this.notes_path, + data: "first_id=" + this.first_id + this.target_params, + complete: function(){ $('.status').removeClass("loading")}, + beforeSend: function() { $('.status').addClass("loading") }, + dataType: "script"}); + }, + append: + function(id, html) { + if(this.first_id == id) { + this.disable = true; + } else { + this.first_id = id; + $("#notes-list").append(html); + } + }, -getOld: - function() { - $('.loading').show(); - $.ajax({ - type: "GET", - url: this.notes_path, - data: "first_id=" + this.first_id + this.target_params, - complete: function(){ $('.status').removeClass("loading")}, - beforeSend: function() { $('.status').addClass("loading") }, - dataType: "script"}); - }, - -append: - function(id, html) { - if(this.first_id == id) { - this.disable = true; - } else { - this.first_id = id; - $("#notes-list").append(html); - } - }, - - -initLoadMore: - function() { - $(document).endlessScroll({ - bottomPixels: 400, + initLoadMore: + function() { + $(document).endlessScroll({ + bottomPixels: 400, fireDelay: 1000, fireOnce:true, ceaseFire: function() { @@ -177,6 +163,20 @@ initLoadMore: callback: function(i) { NoteList.getOld(); } - }); - } + }); + } +}; + +var PerLineNotes = { + init: + function() { + $(".line_note_link, .line_note_reply_link").live("click", function(e) { + var form = $(".per_line_form"); + $(this).closest("tr").after(form); + form.find("#note_line_code").val($(this).attr("line_code")); + form.show(); + return false; + }); + disableButtonIfEmtpyField(".line-note-text", ".submit_inline_note"); + } } diff --git a/app/assets/stylesheets/sections/notes.scss b/app/assets/stylesheets/sections/notes.scss index 6259939e..21dff4cf 100644 --- a/app/assets/stylesheets/sections/notes.scss +++ b/app/assets/stylesheets/sections/notes.scss @@ -30,7 +30,7 @@ } #new_note { - #note_note { + .note-text { height:25px; } .attach_holder { diff --git a/app/views/commits/show.html.haml b/app/views/commits/show.html.haml index 9a483aa2..e01f8ea5 100644 --- a/app/views/commits/show.html.haml +++ b/app/views/commits/show.html.haml @@ -5,12 +5,6 @@ :javascript - $(document).ready(function(){ - $(".line_note_link, .line_note_reply_link").live("click", function(e) { - var form = $(".per_line_form"); - $(this).parent().parent().after(form); - form.find("#note_line_code").val($(this).attr("line_code")); - form.show(); - return false; - }); + $(function(){ + PerLineNotes.init(); }); diff --git a/app/views/notes/_create_common.js.haml b/app/views/notes/_create_common.js.haml index e9538902..e80eccb1 100644 --- a/app/views/notes/_create_common.js.haml +++ b/app/views/notes/_create_common.js.haml @@ -1,11 +1,12 @@ - if note.valid? :plain - $("#new_note .error").remove(); - $('#new_note textarea').val(""); - $('#preview-link').text('Preview'); - $('#preview-note').hide(); $('#note_note').show(); + $(".note-form-holder .error").remove(); + $('.note-form-holder textarea').val(""); + $('.note-form-holder #preview-link').text('Preview'); + $('.note-form-holder #preview-note').hide(); + $('.note-form-holder').show(); NoteList.prepend(#{note.id}, "#{escape_javascript(render partial: "notes/show", locals: {note: note})}"); - else :plain - $("#new_note").replaceWith("#{escape_javascript(render('form'))}"); + $(".note-form-holder").replaceWith("#{escape_javascript(render('form'))}"); diff --git a/app/views/notes/_create_line.js.haml b/app/views/notes/_create_line.js.haml index 13809bec..662909f7 100644 --- a/app/views/notes/_create_line.js.haml +++ b/app/views/notes/_create_line.js.haml @@ -1,7 +1,7 @@ - if note.valid? :plain $(".per_line_form").hide(); - $('#new_note textarea').val(""); + $('.line-note-form-holder textarea').val(""); $("a.line_note_reply_link[line_code='#{note.line_code}']").closest("tr").remove(); var trEl = $(".#{note.line_code}").parent(); trEl.after("#{escape_javascript(render partial: "notes/per_line_show", locals: {note: note})}"); diff --git a/app/views/notes/_form.html.haml b/app/views/notes/_form.html.haml index 50829a97..7211a0ae 100644 --- a/app/views/notes/_form.html.haml +++ b/app/views/notes/_form.html.haml @@ -1,38 +1,39 @@ -= form_for [@project, @note], remote: "true", multipart: true do |f| - %h3.page_title Leave a comment - -if @note.errors.any? - .alert-message.block-message.error - - @note.errors.full_messages.each do |msg| - %div= msg +.note-form-holder + = form_for [@project, @note], remote: "true", multipart: true do |f| + %h3.page_title Leave a comment + -if @note.errors.any? + .alert-message.block-message.error + - @note.errors.full_messages.each do |msg| + %div= msg - = f.hidden_field :noteable_id - = f.hidden_field :noteable_type - = f.text_area :note, size: 255 - #preview-note.preview_note.hide - .hint - .right Comments are parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}. - .clearfix + = f.hidden_field :noteable_id + = f.hidden_field :noteable_type + = f.text_area :note, size: 255, class: 'note-text' + #preview-note.preview_note.hide + .hint + .right Comments are parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}. + .clearfix - .row.note_advanced_opts.hide - .span3 - = f.submit 'Add Comment', class: "btn success submit_note grouped", id: "submit_note" - = link_to 'Preview', preview_project_notes_path(@project), class: 'btn grouped', id: 'preview-link' - .span4.notify_opts - %h6.left Notify via email: - = label_tag :notify do - = check_box_tag :notify, 1, @note.noteable_type != "Commit" - %span Project team + .row.note_advanced_opts.hide + .span3 + = f.submit 'Add Comment', class: "btn success submit_note grouped", id: "submit_note" + = link_to 'Preview', preview_project_notes_path(@project), class: 'btn grouped', id: 'preview-link' + .span4.notify_opts + %h6.left Notify via email: + = label_tag :notify do + = check_box_tag :notify, 1, @note.noteable_type != "Commit" + %span Project team - - if @note.notify_only_author?(current_user) - = label_tag :notify_author do - = check_box_tag :notify_author, 1 , @note.noteable_type == "Commit" - %span Commit author - .span5.attachments - %h6.left Attachment: - %span.file_name File name... + - if @note.notify_only_author?(current_user) + = label_tag :notify_author do + = check_box_tag :notify_author, 1 , @note.noteable_type == "Commit" + %span Commit author + .span5.attachments + %h6.left Attachment: + %span.file_name File name... - .input.input_file - %a.file_upload.btn.small Upload File - = f.file_field :attachment, class: "input-file" - %span.hint Any file less than 10 MB + .input.input_file + %a.file_upload.btn.small Upload File + = f.file_field :attachment, class: "input-file" + %span.hint Any file less than 10 MB diff --git a/app/views/notes/_per_line_form.html.haml b/app/views/notes/_per_line_form.html.haml index afb0b30d..b6d34a04 100644 --- a/app/views/notes/_per_line_form.html.haml +++ b/app/views/notes/_per_line_form.html.haml @@ -1,33 +1,34 @@ %table{style: "display:none;"} %tr.per_line_form %td{colspan: 3 } - = form_for [@project, @note], remote: "true", multipart: true do |f| - %h3.page_title Leave a note - %div.span10 - -if @note.errors.any? - .alert-message.block-message.error - - @note.errors.full_messages.each do |msg| - %div= msg + .line-note-form-holder + = form_for [@project, @note], remote: "true", multipart: true do |f| + %h3.page_title Leave a note + %div.span10 + -if @note.errors.any? + .alert-message.block-message.error + - @note.errors.full_messages.each do |msg| + %div= msg - = f.hidden_field :noteable_id - = f.hidden_field :noteable_type - = f.hidden_field :line_code - = f.text_area :note, size: 255 - .note_actions - .buttons - = f.submit 'Add note', class: "btn primary submit_note", id: "submit_note" - = link_to "Cancel", "#", class: "btn hide-button" - .options - %h6.left Notify via email: - .labels - = label_tag :notify do - = check_box_tag :notify, 1, @note.noteable_type != "Commit" - %span Project team + = f.hidden_field :noteable_id + = f.hidden_field :noteable_type + = f.hidden_field :line_code + = f.text_area :note, size: 255, class: 'line-note-text' + .note_actions + .buttons + = f.submit 'Add note', class: "btn primary submit_note submit_inline_note", id: "submit_note" + = link_to "Cancel", "#", class: "btn hide-button" + .options + %h6.left Notify via email: + .labels + = label_tag :notify do + = check_box_tag :notify, 1, @note.noteable_type != "Commit" + %span Project team - - if @note.notify_only_author?(current_user) - = label_tag :notify_author do - = check_box_tag :notify_author, 1 , @note.noteable_type == "Commit" - %span Commit author + - if @note.notify_only_author?(current_user) + = label_tag :notify_author do + = check_box_tag :notify_author, 1 , @note.noteable_type == "Commit" + %span Commit author :javascript $(function(){ diff --git a/doc/development.md b/doc/development.md new file mode 100644 index 00000000..55be2bc3 --- /dev/null +++ b/doc/development.md @@ -0,0 +1,45 @@ +## Development tips: + +### Start application in development mode + +#### 1. Via foreman + + bundle exec foreman -p 3000 + +#### 2. Via gitlab cli + + ./gitlab start + +#### 3. Manually + + bundle exec rails s + bundle exec rake environment resque:work QUEUE=* VVERBOSE=1 + + +### Run tests: + +#### 1. Packages + + # ubuntu + sudo apt-get install libqt4-dev libqtwebkit-dev + sudo apt-get install xvfb + + # Mac + brew install qt + brew install xvfb + +#### 2. DB & seeds + + bundle exec rake db:setup RAILS_ENV=test + bundle exec rake db:seed_fu RAILS_ENV=test + +### 3. Run Tests + + # All in one + bundle exec gitlab:test + + # Rspec + bundle exec rake spec + + # Cucumber + bundle exec rake cucumber diff --git a/gitlab b/gitlab index 12cebd89..acafb3f1 100755 --- a/gitlab +++ b/gitlab @@ -22,10 +22,11 @@ class GitlabCli case @mode when 'production'; system(unicorn_start_cmd) + system(resque_start_cmd) else system(rails_start_cmd) + system(resque_dev_start_cmd) end - system(resque_start_cmd) end def stop @@ -57,6 +58,10 @@ class GitlabCli "kill -QUIT `cat #{pid}`" end + def resque_dev_start_cmd + "./resque_dev.sh > /dev/null 2>&1" + end + def resque_start_cmd "./resque.sh > /dev/null 2>&1" end diff --git a/resque_dev.sh b/resque_dev.sh index b09cfd9e..0f1d6edb 100755 --- a/resque_dev.sh +++ b/resque_dev.sh @@ -1 +1,2 @@ -bundle exec rake environment resque:work QUEUE=post_receive,mailer,system_hook VVERBOSE=1 +mkdir -p tmp/pids +bundle exec rake environment resque:work QUEUE=post_receive,mailer,system_hook VVERBOSE=1 PIDFILE=tmp/pids/resque_worker.pid RAILS_ENV=development BACKGROUND=yes From b9ff0c79b49c24dfcfc8e3188c76a861b2035770 Mon Sep 17 00:00:00 2001 From: randx Date: Thu, 30 Aug 2012 22:15:34 +0300 Subject: [PATCH 095/357] Changed filters to readable one. Styled some stuff --- app/assets/javascripts/projects.js | 4 ++- app/assets/stylesheets/common.scss | 4 +-- app/assets/stylesheets/sections/projects.scss | 11 +++++++ app/contexts/merge_requests_load.rb | 8 ++--- app/controllers/issues_controller.rb | 8 ++--- app/controllers/milestones_controller.rb | 4 +-- app/views/admin/projects/_form.html.haml | 12 ++++---- app/views/admin/projects/_new_form.html.haml | 29 +++++++++++++++++++ app/views/admin/projects/new.html.haml | 15 ++++++++-- app/views/merge_requests/index.html.haml | 16 +++++----- app/views/milestones/_form.html.haml | 13 +++------ app/views/milestones/index.html.haml | 8 ++--- app/views/projects/_new_form.html.haml | 2 +- app/views/projects/new.html.haml | 6 ++-- app/views/wikis/_form.html.haml | 4 +-- 15 files changed, 96 insertions(+), 48 deletions(-) create mode 100644 app/views/admin/projects/_new_form.html.haml diff --git a/app/assets/javascripts/projects.js b/app/assets/javascripts/projects.js index 84272698..be1b75b9 100644 --- a/app/assets/javascripts/projects.js +++ b/app/assets/javascripts/projects.js @@ -7,8 +7,10 @@ function Projects() { $('.new_project, .edit_project').live('ajax:before', function() { $('.project_new_holder, .project_edit_holder').hide(); - $('.ajax_loader').show(); + $('.save-project-loader').show(); }); $('form #project_default_branch').chosen(); + + disableButtonIfEmtpyField("#project_name", ".project-submit") } diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index d07912f4..aa27a280 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -165,11 +165,11 @@ span.update-author { background-color: #999; &.pushed { - background-color: #3A87AD; + background-color: #4A97BD; } &.opened { - background-color: #468847; + background-color: #469847; } &.closed { diff --git a/app/assets/stylesheets/sections/projects.scss b/app/assets/stylesheets/sections/projects.scss index 3d5aa80b..721b569d 100644 --- a/app/assets/stylesheets/sections/projects.scss +++ b/app/assets/stylesheets/sections/projects.scss @@ -79,3 +79,14 @@ border: 1px solid #BBB; } } + +.save-project-loader { + img { + margin-top:50px; + margin-bottom:50px; + } + h3 { + @extend .page_title; + } + +} diff --git a/app/contexts/merge_requests_load.rb b/app/contexts/merge_requests_load.rb index 6778db3b..e2f68e38 100644 --- a/app/contexts/merge_requests_load.rb +++ b/app/contexts/merge_requests_load.rb @@ -1,13 +1,13 @@ class MergeRequestsLoad < BaseContext def execute - type = params[:f].to_i + type = params[:f] merge_requests = project.merge_requests merge_requests = case type - when 1 then merge_requests - when 2 then merge_requests.closed - when 3 then merge_requests.opened.assigned(current_user) + when 'all' then merge_requests + when 'closed' then merge_requests.closed + when 'assigned-to-me' then merge_requests.opened.assigned(current_user) else merge_requests.opened end.page(params[:page]).per(20) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index e90fad9c..a47b3843 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -168,10 +168,10 @@ class IssuesController < ApplicationController def issues_filter { - all: "1", - closed: "2", - to_me: "3", - open: "0" + all: "all", + closed: "closed", + to_me: "assigned-to-me", + open: "open" } end end diff --git a/app/controllers/milestones_controller.rb b/app/controllers/milestones_controller.rb index 7acb3781..10f089f1 100644 --- a/app/controllers/milestones_controller.rb +++ b/app/controllers/milestones_controller.rb @@ -17,8 +17,8 @@ class MilestonesController < ApplicationController respond_to :html def index - @milestones = case params[:f].to_i - when 1; @project.milestones + @milestones = case params[:f] + when 'all'; @project.milestones else @project.milestones.active end diff --git a/app/views/admin/projects/_form.html.haml b/app/views/admin/projects/_form.html.haml index 7cebddf2..b78d92ca 100644 --- a/app/views/admin/projects/_form.html.haml +++ b/app/views/admin/projects/_form.html.haml @@ -13,8 +13,8 @@ = f.submit project.new_record? ? 'Create project' : 'Save Project', class: "btn primary" %hr - .alert.alert-info - %h5 Advanced settings: + .adv_settings + %h6 Advanced settings: .clearfix = f.label :path do Git Clone @@ -42,8 +42,9 @@ .input= f.select(:default_branch, project.heads.map(&:name), {}, style: "width:210px;") - unless project.new_record? - .alert.alert-info - %h5 Features: + %hr + .adv_settings + %h6 Features: .clearfix = f.label :issues_enabled, "Issues" @@ -63,7 +64,8 @@ - unless project.new_record? .actions - = f.submit 'Save Project', class: "btn primary" + = f.submit 'Save Project', class: "btn save-btn" + = link_to 'Cancel', admin_projects_path, class: "btn cancel-btn" diff --git a/app/views/admin/projects/_new_form.html.haml b/app/views/admin/projects/_new_form.html.haml new file mode 100644 index 00000000..d793b6f3 --- /dev/null +++ b/app/views/admin/projects/_new_form.html.haml @@ -0,0 +1,29 @@ += form_for [:admin, @admin_project] do |f| + - if @admin_project.errors.any? + .alert-message.block-message.error + %span= @admin_project.errors.full_messages.first + .clearfix.project_name_holder + = f.label :name do + Project name is + .input + = f.text_field :name, placeholder: "Example Project", class: "xxlarge" + = f.submit 'Create project', class: "btn primary project-submit" + + %hr + %div.adv_settings + %h6 Advanced settings: + .clearfix + = f.label :path do + Git Clone + .input + .input-prepend + %span.add-on= Gitlab.config.ssh_path + = f.text_field :path, placeholder: "example_project", disabled: !@admin_project.new_record? + %span.add-on= ".git" + .clearfix + = f.label :code do + URL + .input + .input-prepend + %span.add-on= web_app_url + = f.text_field :code, placeholder: "example" diff --git a/app/views/admin/projects/new.html.haml b/app/views/admin/projects/new.html.haml index ac6526bf..933cb671 100644 --- a/app/views/admin/projects/new.html.haml +++ b/app/views/admin/projects/new.html.haml @@ -1,3 +1,12 @@ -%h3.page_title New project -%hr -= render 'form', project: @admin_project +.project_new_holder + %h3.page_title + New Project + %hr + = render 'new_form' +%div.save-project-loader.hide + %center + = image_tag "ajax_loader.gif" + %h3 Creating project & repository. Please wait a few minutes + +:javascript + $(function(){ new Projects(); }); diff --git a/app/views/merge_requests/index.html.haml b/app/views/merge_requests/index.html.haml index e7a43251..bbf35dc7 100644 --- a/app/views/merge_requests/index.html.haml +++ b/app/views/merge_requests/index.html.haml @@ -10,17 +10,17 @@ .ui-box .title %ul.nav.nav-pills - %li{class: ("active" if (params[:f] == "0" || !params[:f]))} - = link_to project_merge_requests_path(@project, f: 0) do + %li{class: ("active" if (params[:f] == 'open' || !params[:f]))} + = link_to project_merge_requests_path(@project, f: 'open') do Open - %li{class: ("active" if params[:f] == "2")} - = link_to project_merge_requests_path(@project, f: 2) do + %li{class: ("active" if params[:f] == "closed")} + = link_to project_merge_requests_path(@project, f: "closed") do Closed - %li{class: ("active" if params[:f] == "3")} - = link_to project_merge_requests_path(@project, f: 3) do + %li{class: ("active" if params[:f] == 'assigned-to-me')} + = link_to project_merge_requests_path(@project, f: 'assigned-to-me') do To Me - %li{class: ("active" if params[:f] == "1")} - = link_to project_merge_requests_path(@project, f: 1) do + %li{class: ("active" if params[:f] == 'all')} + = link_to project_merge_requests_path(@project, f: 'all') do All %ul.unstyled diff --git a/app/views/milestones/_form.html.haml b/app/views/milestones/_form.html.haml index 49200c67..334c153a 100644 --- a/app/views/milestones/_form.html.haml +++ b/app/views/milestones/_form.html.haml @@ -32,17 +32,12 @@ .form-actions - if @milestone.new_record? - = f.submit 'Create milestone', class: "primary btn" + = f.submit 'Create milestone', class: "save-btn btn" + = link_to "Cancel", project_milestones_path(@project), class: "btn cancel-btn" -else - = f.submit 'Save changes', class: "primary btn" + = f.submit 'Save changes', class: "save-btn btn" + = link_to "Cancel", project_milestone_path(@project, @milestone), class: "btn cancel-btn" - - if request.xhr? - = link_to "Cancel", "#back", onclick: "backToIssues();", class: "btn" - - else - - if @milestone.new_record? - = link_to "Cancel", project_milestones_path(@project), class: "btn" - - else - = link_to "Cancel", project_milestone_path(@project, @milestone), class: "btn" :javascript $(function() { diff --git a/app/views/milestones/index.html.haml b/app/views/milestones/index.html.haml index ecb008dc..c5333b08 100644 --- a/app/views/milestones/index.html.haml +++ b/app/views/milestones/index.html.haml @@ -8,11 +8,11 @@ %div.ui-box .title %ul.nav.nav-pills - %li{class: ("active" if (params[:f] == "0" || !params[:f]))} - = link_to project_milestones_path(@project, f: 0) do + %li{class: ("active" if (params[:f] == "active" || !params[:f]))} + = link_to project_milestones_path(@project, f: "active") do Active - %li{class: ("active" if params[:f] == "1")} - = link_to project_milestones_path(@project, f: 1) do + %li{class: ("active" if params[:f] == "all")} + = link_to project_milestones_path(@project, f: "all") do All %ul.unstyled diff --git a/app/views/projects/_new_form.html.haml b/app/views/projects/_new_form.html.haml index b1aafc37..e6d5e93f 100644 --- a/app/views/projects/_new_form.html.haml +++ b/app/views/projects/_new_form.html.haml @@ -7,7 +7,7 @@ Project name is .input = f.text_field :name, placeholder: "Example Project", class: "xxlarge" - = f.submit 'Create project', class: "btn primary" + = f.submit 'Create project', class: "btn primary project-submit" %hr %div.adv_settings diff --git a/app/views/projects/new.html.haml b/app/views/projects/new.html.haml index 703e558a..933cb671 100644 --- a/app/views/projects/new.html.haml +++ b/app/views/projects/new.html.haml @@ -3,10 +3,10 @@ New Project %hr = render 'new_form' -%div.ajax_loader.hide +%div.save-project-loader.hide %center - %div.padded= image_tag "ajax_loader.gif" - %h3.prepend-top Creating project & repository. Please wait a few minutes + = image_tag "ajax_loader.gif" + %h3 Creating project & repository. Please wait a few minutes :javascript $(function(){ new Projects(); }); diff --git a/app/views/wikis/_form.html.haml b/app/views/wikis/_form.html.haml index 305607d4..12b57e03 100644 --- a/app/views/wikis/_form.html.haml +++ b/app/views/wikis/_form.html.haml @@ -23,5 +23,5 @@ = f.label :content .input= f.text_area :content, class: 'span8' .actions - = f.submit 'Save', class: "primary btn" - = link_to "Cancel", project_wiki_path(@project, :index), class: "btn" + = f.submit 'Save', class: "save-btn btn" + = link_to "Cancel", project_wiki_path(@project, :index), class: "btn cancel-btn" From 5e510ada7a4ca4e8537d9c14ba50cfc9f509f325 Mon Sep 17 00:00:00 2001 From: randx Date: Thu, 30 Aug 2012 22:28:45 +0300 Subject: [PATCH 096/357] Js validation for title presence in issue, mr, milestone --- app/assets/javascripts/issues.js | 2 ++ app/views/merge_requests/_form.html.haml | 1 + app/views/milestones/_form.html.haml | 1 + 3 files changed, 4 insertions(+) diff --git a/app/assets/javascripts/issues.js b/app/assets/javascripts/issues.js index bc056965..aae818de 100644 --- a/app/assets/javascripts/issues.js +++ b/app/assets/javascripts/issues.js @@ -5,6 +5,7 @@ function switchToNewIssue(form){ $('select#issue_milestone_id').chosen(); $("#new_issue_dialog").show("fade", { direction: "right" }, 150); $('.top-tabs .add_new').hide(); + disableButtonIfEmtpyField("#issue_title", ".save-btn"); }); } @@ -15,6 +16,7 @@ function switchToEditIssue(form){ $('select#issue_milestone_id').chosen(); $("#edit_issue_dialog").show("fade", { direction: "right" }, 150); $('.add_new').hide(); + disableButtonIfEmtpyField("#issue_title", ".save-btn"); }); } diff --git a/app/views/merge_requests/_form.html.haml b/app/views/merge_requests/_form.html.haml index 7e5c851b..b554c051 100644 --- a/app/views/merge_requests/_form.html.haml +++ b/app/views/merge_requests/_form.html.haml @@ -60,6 +60,7 @@ :javascript $(function(){ + disableButtonIfEmtpyField("#merge_request_title", ".save-btn"); $('select#merge_request_assignee_id').chosen(); $('select#merge_request_source_branch').chosen(); $('select#merge_request_target_branch').chosen(); diff --git a/app/views/milestones/_form.html.haml b/app/views/milestones/_form.html.haml index 334c153a..41cbd6ab 100644 --- a/app/views/milestones/_form.html.haml +++ b/app/views/milestones/_form.html.haml @@ -41,6 +41,7 @@ :javascript $(function() { + disableButtonIfEmtpyField("#milestone_title", ".save-btn"); $( ".datepicker" ).datepicker({ dateFormat: "yy-mm-dd", onSelect: function(dateText, inst) { $("#milestone_due_date").val(dateText) } From c80581e49bc7c144a9353611995d58344831eb40 Mon Sep 17 00:00:00 2001 From: randx Date: Thu, 30 Aug 2012 22:45:28 +0300 Subject: [PATCH 097/357] v2.9.0pre --- CHANGELOG | 14 ++++++++++++++ VERSION | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 6868c07b..7322efbf 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,17 @@ +v 2.9.0 + - fixed inline notes bugs + - refactored rspecs + - refactored gitolite backend + - added factory_girl + - restyled projects list on dashboard + - ssh keys validation to prevent gitolite crash + - send notifications if changed premission in project + - scss refactoring. gitlab_bootstrap/ dir + - fix git push http body bigger than 112k problem + - list of labels page under issues tab + - API for milestones + - restyled buttons + v 2.8.1 - ability to disable gravatars - improved MR diff logic diff --git a/VERSION b/VERSION index 1817afea..a564e653 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.8.2 +2.9.0pre From ed8912507dd9abed42c1a0992402341fd46e3d69 Mon Sep 17 00:00:00 2001 From: randx Date: Thu, 30 Aug 2012 22:48:01 +0300 Subject: [PATCH 098/357] gitlab_meta to 2.9 --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 4905169f..b0724fad 100644 --- a/Gemfile +++ b/Gemfile @@ -120,5 +120,5 @@ group :test do end group :production do - gem "gitlab_meta", '2.8' + gem "gitlab_meta", '2.9' end diff --git a/Gemfile.lock b/Gemfile.lock index b8e97aa0..f226c931 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -178,7 +178,7 @@ GEM gherkin (2.11.0) json (>= 1.4.6) git (1.2.5) - gitlab_meta (2.8) + gitlab_meta (2.9) grape (0.2.1) hashie (~> 1.2) multi_json @@ -397,7 +397,7 @@ DEPENDENCIES ffaker foreman git - gitlab_meta (= 2.8) + gitlab_meta (= 2.9) gitolite! grack! grape (~> 0.2.1) From 65abd8b20ab047016e2fc30e5cd1edf5bf4554ea Mon Sep 17 00:00:00 2001 From: randx Date: Fri, 31 Aug 2012 09:05:44 +0300 Subject: [PATCH 099/357] Freeze project path in admin area --- app/views/admin/projects/_form.html.haml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/views/admin/projects/_form.html.haml b/app/views/admin/projects/_form.html.haml index b78d92ca..87d212e5 100644 --- a/app/views/admin/projects/_form.html.haml +++ b/app/views/admin/projects/_form.html.haml @@ -10,19 +10,17 @@ Project name is .input = f.text_field :name, placeholder: "Example Project", class: "xxlarge" - = f.submit project.new_record? ? 'Create project' : 'Save Project', class: "btn primary" %hr .adv_settings %h6 Advanced settings: .clearfix = f.label :path do - Git Clone + Path .input .input-prepend - %span.add-on= Gitlab.config.ssh_path - = f.text_field :path, placeholder: "example_project", disabled: !!project.id - %span.add-on= ".git" + %strong + = text_field_tag :ppath, @admin_project.path_to_repo, class: "xlarge", disabled: true .clearfix = f.label :code do URL From c1173e27071b83399cd92406b229be7f0eca59f1 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Fri, 31 Aug 2012 10:15:37 +0300 Subject: [PATCH 100/357] API on Projects creation implemented --- lib/api/projects.rb | 21 +++++++++++++++++ spec/requests/api/projects_spec.rb | 37 ++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/lib/api/projects.rb b/lib/api/projects.rb index eb23641c..7ac2fd4a 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -23,6 +23,27 @@ module Gitlab present user_project, with: Entities::Project end + # Create new project + # + # Parameters: + # name (required) - name for new project + # code (optional) - code for new project, if not set used name + # path (optional) - oath for new project, if not set used name + # Example Request + # POST /projects + post do + project = {} + project[:name] = params[:name] + project[:code] = params[:code] || project[:name] + project[:path] = params[:path] || project[:name] + @project = Project.create_by_user(project, current_user) + if @project.saved? + present @project, with: Entities::Project + else + error!({'message' => '404 Not found'}, 404) + end + end + # Get a project repository branches # # Parameters: diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index 0cbc12af..cc6843cc 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -25,6 +25,43 @@ describe Gitlab::API do end end + describe "POST /projects" do + it "should create new project without code and path" do + lambda { + name = "foo" + post api("/projects", user), { + name: name + } + response.status.should == 201 + json_response["name"].should == name + json_response["code"].should == name + json_response["path"].should == name + }.should change{Project.count}.by(1) + end + it "should create new project" do + lambda { + name = "foo" + path = "bar" + code = "bazz" + post api("/projects", user), { + code: code, + path: path, + name: name + } + response.status.should == 201 + json_response["name"].should == name + json_response["path"].should == path + json_response["code"].should == code + }.should change{Project.count}.by(1) + end + it "should not create project without name" do + lambda { + post api("/projects", user) + response.status.should == 404 + }.should_not change{Project.count} + end + end + describe "GET /projects/:id" do it "should return a project by id" do get api("/projects/#{project.id}", user) From 985ecf0f045ce0d8a6fd0524935f12152bfe3918 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Fri, 31 Aug 2012 10:25:36 +0300 Subject: [PATCH 101/357] Docs added for Create Project API --- doc/api/projects.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/doc/api/projects.md b/doc/api/projects.md index d680b5d8..f015b2f5 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -89,6 +89,44 @@ Parameters: } ``` +## Create project + +Create new project owned by user + +``` +POST /projects +``` + +Parameters: + ++ `name` (required) - new project name ++ `code` (optional) - new project code, used project name if not set ++ `path` (optional) - new project path, user project name if not set + +```json +{ + "id": 5, + "code": "gitlab", + "name": "gitlab", + "description": null, + "path": "gitlab", + "default_branch": "api", + "owner": { + "id": 1, + "email": "john@example.com", + "name": "John Smith", + "blocked": false, + "created_at": "2012-05-23T08:00:58Z" + }, + "private": true, + "issues_enabled": true, + "merge_requests_enabled": true, + "wall_enabled": true, + "wiki_enabled": true, + "created_at": "2012-05-30T12:49:20Z" +} +``` + ## Project repository branches Get a list of project repository branches sorted by name alphabetically. From b6a0407e7a3ba5bc77f332dbacb9cae3acb11cce Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Fri, 31 Aug 2012 10:27:45 +0300 Subject: [PATCH 102/357] Docs changed for Create Project API --- doc/api/projects.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/api/projects.md b/doc/api/projects.md index f015b2f5..8c34f4d0 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -103,6 +103,9 @@ Parameters: + `code` (optional) - new project code, used project name if not set + `path` (optional) - new project path, user project name if not set +Will return created project with status `201 Created` on success, or `404 Not +found` on fail. + ```json { "id": 5, From acac1547a06e120a05010fbe556e5836f35248d0 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Fri, 31 Aug 2012 10:28:38 +0300 Subject: [PATCH 103/357] JSON for new project removed from API docs --- doc/api/projects.md | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/doc/api/projects.md b/doc/api/projects.md index 8c34f4d0..97a31696 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -106,29 +106,6 @@ Parameters: Will return created project with status `201 Created` on success, or `404 Not found` on fail. -```json -{ - "id": 5, - "code": "gitlab", - "name": "gitlab", - "description": null, - "path": "gitlab", - "default_branch": "api", - "owner": { - "id": 1, - "email": "john@example.com", - "name": "John Smith", - "blocked": false, - "created_at": "2012-05-23T08:00:58Z" - }, - "private": true, - "issues_enabled": true, - "merge_requests_enabled": true, - "wall_enabled": true, - "wiki_enabled": true, - "created_at": "2012-05-30T12:49:20Z" -} -``` ## Project repository branches From 9811e64d71d050554c952221c4fdaf48ce1f06a6 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Fri, 31 Aug 2012 11:11:12 +0300 Subject: [PATCH 104/357] Typo and mistakes fixed --- doc/api/projects.md | 4 ++-- lib/api/projects.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/api/projects.md b/doc/api/projects.md index 97a31696..b0c1e657 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -100,8 +100,8 @@ POST /projects Parameters: + `name` (required) - new project name -+ `code` (optional) - new project code, used project name if not set -+ `path` (optional) - new project path, user project name if not set ++ `code` (optional) - new project code, uses project name if not set ++ `path` (optional) - new project path, uses project name if not set Will return created project with status `201 Created` on success, or `404 Not found` on fail. diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 7ac2fd4a..f42849cd 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -27,8 +27,8 @@ module Gitlab # # Parameters: # name (required) - name for new project - # code (optional) - code for new project, if not set used name - # path (optional) - oath for new project, if not set used name + # code (optional) - code for new project, uses project name if not set + # path (optional) - path for new project, uses project name if not set # Example Request # POST /projects post do From 6d6c7a17ea2d2a61d4f251d6d746ebe9438405ca Mon Sep 17 00:00:00 2001 From: Florian Unglaub Date: Fri, 31 Aug 2012 15:45:50 +0200 Subject: [PATCH 105/357] Allow single-sign-on with Omniauth --- .../omniauth_callbacks_controller.rb | 4 +-- app/models/user.rb | 34 ++++++++++++++++++- config/gitlab.yml.example | 2 ++ 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/app/controllers/omniauth_callbacks_controller.rb b/app/controllers/omniauth_callbacks_controller.rb index 00ec7c42..248a75a8 100644 --- a/app/controllers/omniauth_callbacks_controller.rb +++ b/app/controllers/omniauth_callbacks_controller.rb @@ -38,7 +38,8 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController current_user.save redirect_to profile_path else - @user = User.find_by_provider_and_extern_uid(provider, uid) + @user = User.find_or_new_for_omniauth(oauth) + @user.save! if @user.try('new_record?') if @user sign_in_and_redirect @user @@ -48,5 +49,4 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController end end end - end diff --git a/app/models/user.rb b/app/models/user.rb index ad6af6a6..b956d4ed 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -86,6 +86,39 @@ class User < ActiveRecord::Base where('id NOT IN (SELECT DISTINCT(user_id) FROM users_projects)') end + def self.find_or_new_for_omniauth(oauth) + provider, uid = oauth['provider'], oauth['uid'] + + if @user = User.find_by_provider_and_extern_uid(provider, uid) + @user + else + if Gitlab.config.omniauth.allow_single_sign_on + # Ensure here that all required attributes were passed along with the + # oauth request: + %w(first_name last_name email).each do |attr| + unless oauth[:info][attr].present? + raise OmniAuth::Error, + "#{provider} does not provide the required field #{attr}" + end + end + + password = Devise.friendly_token[0, 8].downcase + @user = User.new( + extern_uid: uid, + provider: provider, + name: "#{oauth[:info][:first_name]} #{oauth[:info][:last_name]}", + email: oauth[:info][:email], + password: password, + password_confirmation: password, + projects_limit: Gitlab.config.default_projects_limit, + ) + + @user.blocked = true if Gitlab.config.omniauth.block_auto_created_users + @user + end + end + end + def self.find_for_ldap_auth(auth, signed_in_resource=nil) uid = auth.info.uid provider = auth.provider @@ -148,4 +181,3 @@ end # bio :string(255) # blocked :boolean(1) default(FALSE), not null # - diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example index 1934029d..b5aae497 100644 --- a/config/gitlab.yml.example +++ b/config/gitlab.yml.example @@ -53,6 +53,8 @@ git: omniauth: enabled: false providers: + allow_single_sign_on: false + block_auto_created_users: true # omniauth: # enabled: true From 1b0198f1d3fc621b339af0e7fd79a74919856d46 Mon Sep 17 00:00:00 2001 From: Florian Unglaub Date: Fri, 31 Aug 2012 16:24:12 +0200 Subject: [PATCH 106/357] save newly created users directly in the model --- app/controllers/omniauth_callbacks_controller.rb | 1 - app/models/user.rb | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/omniauth_callbacks_controller.rb b/app/controllers/omniauth_callbacks_controller.rb index 248a75a8..3be285ba 100644 --- a/app/controllers/omniauth_callbacks_controller.rb +++ b/app/controllers/omniauth_callbacks_controller.rb @@ -39,7 +39,6 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController redirect_to profile_path else @user = User.find_or_new_for_omniauth(oauth) - @user.save! if @user.try('new_record?') if @user sign_in_and_redirect @user diff --git a/app/models/user.rb b/app/models/user.rb index b956d4ed..0d45b6e5 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -114,6 +114,8 @@ class User < ActiveRecord::Base ) @user.blocked = true if Gitlab.config.omniauth.block_auto_created_users + @user.save! + @user end end From 0dd94cd86ec0680432e58f2630a3a35fa84afd73 Mon Sep 17 00:00:00 2001 From: Florian Unglaub Date: Fri, 31 Aug 2012 16:44:23 +0200 Subject: [PATCH 107/357] DRY'ed up the user model --- app/models/user.rb | 69 +++++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 37 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 0d45b6e5..fa5d6834 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -86,36 +86,42 @@ class User < ActiveRecord::Base where('id NOT IN (SELECT DISTINCT(user_id) FROM users_projects)') end - def self.find_or_new_for_omniauth(oauth) - provider, uid = oauth['provider'], oauth['uid'] + def self.create_from_omniauth(auth, ldap = false) + provider, uid = auth.provider, auth.uid + name = auth.info.name.force_encoding("utf-8") + email = auth.info.email.downcase unless auth.info.email.nil? + + ldap_prefix = ldap ? '(LDAP) ' : '' + raise OmniAuth::Error, "#{ldap_prefix}#{provider} does not provide an email"\ + " address" if auth.info.email.blank? + + logger.info "#{ldap_prefix}Creating user from #{provider} login"\ + " {uid => #{uid}, name => #{name}, email => #{email}}" + password = Devise.friendly_token[0, 8].downcase + @user = User.new( + extern_uid: uid, + provider: provider, + name: name, + email: email, + password: password, + password_confirmation: password, + projects_limit: Gitlab.config.default_projects_limit, + ) + if Gitlab.config.omniauth.block_auto_created_users && !ldap + @user.blocked = true + end + @user.save! + @user + end + + def self.find_or_new_for_omniauth(auth) + provider, uid = auth.provider, auth.uid if @user = User.find_by_provider_and_extern_uid(provider, uid) @user else if Gitlab.config.omniauth.allow_single_sign_on - # Ensure here that all required attributes were passed along with the - # oauth request: - %w(first_name last_name email).each do |attr| - unless oauth[:info][attr].present? - raise OmniAuth::Error, - "#{provider} does not provide the required field #{attr}" - end - end - - password = Devise.friendly_token[0, 8].downcase - @user = User.new( - extern_uid: uid, - provider: provider, - name: "#{oauth[:info][:first_name]} #{oauth[:info][:last_name]}", - email: oauth[:info][:email], - password: password, - password_confirmation: password, - projects_limit: Gitlab.config.default_projects_limit, - ) - - @user.blocked = true if Gitlab.config.omniauth.block_auto_created_users - @user.save! - + @user = User.create_from_omniauth(auth) @user end end @@ -124,7 +130,6 @@ class User < ActiveRecord::Base def self.find_for_ldap_auth(auth, signed_in_resource=nil) uid = auth.info.uid provider = auth.provider - name = auth.info.name.force_encoding("utf-8") email = auth.info.email.downcase unless auth.info.email.nil? raise OmniAuth::Error, "LDAP accounts must provide an uid and email address" if uid.nil? or email.nil? @@ -136,17 +141,7 @@ class User < ActiveRecord::Base @user.update_attributes(:extern_uid => uid, :provider => provider) @user else - logger.info "Creating user from LDAP login {uid => #{uid}, name => #{name}, email => #{email}}" - password = Devise.friendly_token[0, 8].downcase - @user = User.create( - :extern_uid => uid, - :provider => provider, - :name => name, - :email => email, - :password => password, - :password_confirmation => password, - :projects_limit => Gitlab.config.default_projects_limit - ) + create_from_omniauth(auth) end end From 0de5d08e371923871d75fbdc68732c2402006c91 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Fri, 31 Aug 2012 19:28:32 -0400 Subject: [PATCH 108/357] Give Resque route a name and use that for the iframe src Closes #1350 --- app/views/admin/resque/show.html.haml | 2 +- config/routes.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/admin/resque/show.html.haml b/app/views/admin/resque/show.html.haml index 0375d94b..d889a5d0 100644 --- a/app/views/admin/resque/show.html.haml +++ b/app/views/admin/resque/show.html.haml @@ -1,2 +1,2 @@ %h3 Resque -%iframe{src: "/info/resque", width: 1168, height: 600, style: "border: none"} \ No newline at end of file +%iframe{src: resque_url, width: 1168, height: 600, style: "border: none"} diff --git a/config/routes.rb b/config/routes.rb index f895478f..51e65721 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -10,7 +10,7 @@ Gitlab::Application.routes.draw do # Optionally, enable Resque here require 'resque/server' - mount Resque::Server.new, at: '/info/resque' + mount Resque::Server.new, at: '/info/resque', as: 'resque' # Enable Grack support mount Grack::Bundle.new({ From adeeae9f73c9a0cef7a197e10c00361a5f6ed814 Mon Sep 17 00:00:00 2001 From: randx Date: Sat, 1 Sep 2012 22:21:28 +0300 Subject: [PATCH 109/357] Few fixes for ~ 1000px resolution --- app/assets/stylesheets/sections/issues.scss | 5 +++++ app/assets/stylesheets/sections/nav.scss | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/assets/stylesheets/sections/issues.scss b/app/assets/stylesheets/sections/issues.scss index 6db4b987..230a7aea 100644 --- a/app/assets/stylesheets/sections/issues.scss +++ b/app/assets/stylesheets/sections/issues.scss @@ -65,6 +65,11 @@ input.check_all_issues { } } +@media (min-width: 800px) { .issues_filters select { width:160px; } } +@media (min-width: 1000px) { .issues_filters select { width:200px; } } +@media (min-width: 1200px) { .issues_filters select { width:220px; } } + + #issues-table-holder { .issues_filters { form { diff --git a/app/assets/stylesheets/sections/nav.scss b/app/assets/stylesheets/sections/nav.scss index fc7293b2..097e8197 100644 --- a/app/assets/stylesheets/sections/nav.scss +++ b/app/assets/stylesheets/sections/nav.scss @@ -6,7 +6,7 @@ ul.main_menu { border-radius: 4px; margin: auto; margin:30px 0; - border:1px solid #bbb; + border:1px solid #AAA; height:37px; @include bg-gray-gradient; position:relative; @@ -85,7 +85,7 @@ ul.main_menu { line-height:36px; color: $style_color; text-shadow:0 1px 1px white; - + padding:0 10px; } } /* From beb5e1bd6b6656b7c4f412a72c02c3e72ec5253c Mon Sep 17 00:00:00 2001 From: randx Date: Sat, 1 Sep 2012 23:35:04 +0300 Subject: [PATCH 110/357] Sanitize glm helper --- app/assets/stylesheets/sections/notes.scss | 7 ++++++- app/helpers/gitlab_markdown_helper.rb | 2 +- app/views/notes/_per_line_form.html.haml | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/assets/stylesheets/sections/notes.scss b/app/assets/stylesheets/sections/notes.scss index 21dff4cf..6a965fa4 100644 --- a/app/assets/stylesheets/sections/notes.scss +++ b/app/assets/stylesheets/sections/notes.scss @@ -31,7 +31,7 @@ #new_note { .note-text { - height:25px; + height:40px; } .attach_holder { display:none; @@ -212,3 +212,8 @@ td .line_note_link { } } } + +.note-text { + border: 1px solid #aaa; + box-shadow:none; +} diff --git a/app/helpers/gitlab_markdown_helper.rb b/app/helpers/gitlab_markdown_helper.rb index b4e3b962..18ce07a2 100644 --- a/app/helpers/gitlab_markdown_helper.rb +++ b/app/helpers/gitlab_markdown_helper.rb @@ -31,7 +31,7 @@ module GitlabMarkdownHelper extractions[$1] end - text.html_safe + sanitize text.html_safe end # Use this in places where you would normally use link_to(gfm(...), ...). diff --git a/app/views/notes/_per_line_form.html.haml b/app/views/notes/_per_line_form.html.haml index b6d34a04..8e31b59e 100644 --- a/app/views/notes/_per_line_form.html.haml +++ b/app/views/notes/_per_line_form.html.haml @@ -16,7 +16,7 @@ = f.text_area :note, size: 255, class: 'line-note-text' .note_actions .buttons - = f.submit 'Add note', class: "btn primary submit_note submit_inline_note", id: "submit_note" + = f.submit 'Add note', class: "btn save-btn submit_note submit_inline_note", id: "submit_note" = link_to "Cancel", "#", class: "btn hide-button" .options %h6.left Notify via email: From 877aa5458627d42d03a7f204d02db9d326af006c Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sat, 1 Sep 2012 22:56:54 -0400 Subject: [PATCH 111/357] Rename gitlab_flavored_markdown_spec to gitlab_markdown_helper_spec --- ...b_flavored_markdown_spec.rb => gitlab_markdown_helper_spec.rb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename spec/helpers/{gitlab_flavored_markdown_spec.rb => gitlab_markdown_helper_spec.rb} (100%) diff --git a/spec/helpers/gitlab_flavored_markdown_spec.rb b/spec/helpers/gitlab_markdown_helper_spec.rb similarity index 100% rename from spec/helpers/gitlab_flavored_markdown_spec.rb rename to spec/helpers/gitlab_markdown_helper_spec.rb From aecbd313bc2792a54bbecf6333fc293cd6b059a4 Mon Sep 17 00:00:00 2001 From: randx Date: Sun, 2 Sep 2012 15:25:54 +0300 Subject: [PATCH 112/357] Fix glm by adding id and classes to sanitize white attrs --- app/helpers/gitlab_markdown_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/gitlab_markdown_helper.rb b/app/helpers/gitlab_markdown_helper.rb index 18ce07a2..9da695b5 100644 --- a/app/helpers/gitlab_markdown_helper.rb +++ b/app/helpers/gitlab_markdown_helper.rb @@ -31,7 +31,7 @@ module GitlabMarkdownHelper extractions[$1] end - sanitize text.html_safe + sanitize text.html_safe, attributes: ActionView::Base.sanitized_allowed_attributes + %w(id class ) end # Use this in places where you would normally use link_to(gfm(...), ...). From eae41ad1df37cec184179df02fce7faa9434cb2a Mon Sep 17 00:00:00 2001 From: Sytse Sijbrandij Date: Sun, 26 Aug 2012 16:18:13 +0200 Subject: [PATCH 113/357] Non-interactive AWS install by running a single script. Non-interactive AWS install by running a single script. Complete non-interactive AWS install with one line. Squash of 28 commits: Initial commit of complete install script. Must be sudo. Non interactive prostgres. Install mysql with unique password. Service file. Add init file. Nginx config. Script contains aws specific settings. Update references after rename. Prevent localhost ssh prompt. Postfix with policyd. Typo in localhost. Postfix package has other name. sudo -l session needs oneliners. More sudo commands to prevent permission problems. Change in existing file. Change in existing file must be referenced. Switch order. Postfix comment. Old way to generate password, less sudo. todo login Must use private ip and login instructions. Starting up. Fixed and checked various todos. Use service. Set host name. Go to default dir. Only works on next login. Only replace first host. Cleaned up the comments. Link to nginx config. Move to aws dir. Update links to aws for interactive install. Existing script stays at the same location. Change directory. Use the new init scripts for gitlab service and nginx. Use the branch for file downloads. Update with newest changes to installation.md. Correct reference. Use master branch since we need the nginx condfig and use absolute paths. Need to copy with sudo. --- doc/debian_ubuntu.sh | 3 +- doc/installation.md | 70 +++++++-------- lib/support/aws/debian_ubuntu_aws.sh | 125 +++++++++++++++++++++++++++ 3 files changed, 162 insertions(+), 36 deletions(-) create mode 100644 lib/support/aws/debian_ubuntu_aws.sh diff --git a/doc/debian_ubuntu.sh b/doc/debian_ubuntu.sh index a0b4710b..5ed1e2a2 100644 --- a/doc/debian_ubuntu.sh +++ b/doc/debian_ubuntu.sh @@ -3,7 +3,8 @@ sudo apt-get update sudo apt-get upgrade -sudo apt-get install -y git git-core wget curl gcc checkinstall libxml2-dev libxslt-dev sqlite3 libsqlite3-dev libcurl4-openssl-dev libreadline-gplv2-dev libc6-dev libssl-dev libmysql++-dev make build-essential zlib1g-dev libicu-dev redis-server openssh-server python-dev python-pip libyaml-dev postfix +sudo DEBIAN_FRONTEND='noninteractive' apt-get install -y postfix-policyd-spf-python # Install postfix without prompting. +sudo apt-get install -y git git-core wget curl gcc checkinstall libxml2-dev libxslt-dev sqlite3 libsqlite3-dev libcurl4-openssl-dev libreadline-gplv2-dev libc6-dev libssl-dev libmysql++-dev make build-essential zlib1g-dev libicu-dev redis-server openssh-server python-dev python-pip libyaml-dev wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz tar xfvz ruby-1.9.3-p194.tar.gz diff --git a/doc/installation.md b/doc/installation.md index 5611c3b3..b6f1869b 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -1,4 +1,4 @@ -## Platform requirements: +## Platform requirements: **The project is designed for the Linux operating system.** @@ -22,7 +22,7 @@ You might have some luck using these, but no guarantees: Gitlab does **not** run on Windows and we have no plans of making Gitlab compatible. -## This installation guide created for Debian/Ubuntu and properly tested. +## This installation guide created for Debian/Ubuntu and properly tested. The installation consists of 6 steps: @@ -43,13 +43,13 @@ Also read the [Read this before you submit an issue](https://github.com/gitlabhq > - - - > First 3 steps can be easily skipped with simply install script: -> -> # Install curl and sudo +> +> # Install curl and sudo > apt-get install curl sudo -> +> > # 3 steps in 1 command :) > curl https://raw.github.com/gitlabhq/gitlabhq/master/doc/debian_ubuntu.sh | sh -> +> > Now you can go to step 4" > - - - @@ -61,7 +61,7 @@ Also read the [Read this before you submit an issue](https://github.com/gitlabhq sudo apt-get upgrade sudo apt-get install -y wget curl gcc checkinstall libxml2-dev libxslt-dev sqlite3 libsqlite3-dev libcurl4-openssl-dev libreadline6-dev libc6-dev libssl-dev libmysql++-dev make build-essential zlib1g-dev libicu-dev redis-server openssh-server git-core python-dev python-pip libyaml-dev postfix - + # If you want to use MySQL: sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev @@ -77,7 +77,7 @@ Also read the [Read this before you submit an issue](https://github.com/gitlabhq # 3. Install gitolite Create user for git: - + sudo adduser \ --system \ --shell /bin/sh \ @@ -90,7 +90,7 @@ Create user for git: Create user for gitlab: # ubuntu/debian - sudo adduser --disabled-login --gecos 'gitlab system' gitlab + sudo adduser --disabled-login --gecos 'gitlab system' gitlab Add your user to git group: @@ -103,7 +103,7 @@ Generate key: Get gitolite source code: cd /home/git - sudo -H -u git git clone git://github.com/gitlabhq/gitolite /home/git/gitolite + sudo -H -u git git clone git://github.com/gitlabhq/gitolite /home/git/gitolite Setup: @@ -114,21 +114,21 @@ Setup: sudo -u git -H sed -i 's/0077/0007/g' /home/git/share/gitolite/conf/example.gitolite.rc sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; gl-setup -q /home/git/gitlab.pub" - + Permissions: sudo chmod -R g+rwX /home/git/repositories/ sudo chown -R git:git /home/git/repositories/ - sudo chown gitlab:gitlab /home/git/repositories/**/hooks/post-receive + sudo chown gitlab:gitlab /home/git/repositories/**/hooks/post-receive #### CHECK: Logout & login again to apply git group to your user - + # clone admin repo to add localhost to known_hosts # & be sure your user has access to gitolite - sudo -u gitlab -H git clone git@localhost:gitolite-admin.git /tmp/gitolite-admin + sudo -u gitlab -H git clone git@localhost:gitolite-admin.git /tmp/gitolite-admin # if succeed you can remove it - sudo rm -rf /tmp/gitolite-admin + sudo rm -rf /tmp/gitolite-admin **IMPORTANT! If you cant clone `gitolite-admin` repository - DONT PROCEED INSTALLATION** @@ -140,7 +140,7 @@ Permissions: cd /home/gitlab sudo -H -u gitlab git clone -b stable git://github.com/gitlabhq/gitlabhq.git gitlab cd gitlab - + sudo -u gitlab mkdir tmp # Rename config files @@ -151,22 +151,22 @@ Permissions: # SQLite sudo -u gitlab cp config/database.yml.sqlite config/database.yml - # Or + # Or # Mysql # Install MySQL as directed in Step #1 - + # Login to MySQL - $ mysql -u root -p - + $ mysql -u root -p + # Create the gitlabhq production database mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`; - + # Create the MySQL User change $password to a real password - mysql> CREATE USER 'gitlab'@'localhost' IDENTIFIED BY '$password'; - + mysql> CREATE USER 'gitlab'@'localhost' IDENTIFIED BY '$password'; + # Grant proper permissions to the MySQL User mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'localhost'; - + # Exit MySQL Server and copy the example config, make sure to update username/password in config/database.yml sudo -u gitlab cp config/database.yml.example config/database.yml @@ -177,7 +177,7 @@ Permissions: #### Setup DB sudo -u gitlab bundle exec rake gitlab:app:setup RAILS_ENV=production - + Checking status: sudo -u gitlab bundle exec rake gitlab:app:status RAILS_ENV=production @@ -197,13 +197,13 @@ Checking status: Can clone gitolite-admin?............YES UMASK for .gitolite.rc is 0007? ............YES -If you got all YES - congrats! You can go to next step. +If you got all YES - congrats! You can go to next step. # 5. Server up Application can be started with next command: - # For test purposes + # For test purposes sudo -u gitlab bundle exec rails s -e production # As daemon @@ -239,7 +239,7 @@ You can login via web using admin generated with setup: sudo -u gitlab cp config/unicorn.rb.orig config/unicorn.rb sudo -u gitlab bundle exec unicorn_rails -c config/unicorn.rb -E production -D -Edit /etc/nginx/nginx.conf. In the *http* section add: +Edit /etc/nginx/nginx.conf. In the *http* section add the following section of code or replace it completely with https://raw.github.com/dosire/gitlabhq/master/aws/nginx.conf upstream gitlab { server unix:/home/gitlab/gitlab/tmp/sockets/gitlab.socket; @@ -249,27 +249,27 @@ Edit /etc/nginx/nginx.conf. In the *http* section add: listen YOUR_SERVER_IP:80; # e.g., listen 192.168.1.1:80; server_name YOUR_SERVER_FQDN; # e.g., server_name source.example.com; root /home/gitlab/gitlab/public; - + # individual nginx logs for this gitlab vhost access_log /var/log/nginx/gitlab_access.log; error_log /var/log/nginx/gitlab_error.log; - + location / { # serve static files from defined root folder;. # @gitlab is a named location for the upstream fallback, see below try_files $uri $uri/index.html $uri.html @gitlab; } - - # if a file, which is not found in the root folder is requested, + + # if a file, which is not found in the root folder is requested, # then the proxy pass the request to the upsteam (gitlab unicorn) location @gitlab { proxy_redirect off; - + # you need to change this to "https", if you set "ssl" directive to "on" proxy_set_header X-FORWARDED_PROTO http; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; - + proxy_pass http://gitlab; } } @@ -292,7 +292,7 @@ Create init script in /etc/init.d/gitlab: # Short-Description: GitLab git repository management # Description: GitLab git repository management ### END INIT INFO - + DAEMON_OPTS="-c /home/gitlab/gitlab/config/unicorn.rb -E production -D" NAME=unicorn DESC="Gitlab service" diff --git a/lib/support/aws/debian_ubuntu_aws.sh b/lib/support/aws/debian_ubuntu_aws.sh new file mode 100644 index 00000000..962ee008 --- /dev/null +++ b/lib/support/aws/debian_ubuntu_aws.sh @@ -0,0 +1,125 @@ +#!/bin/sh + +# ABOUT +# This script performs a complete installation of Gitlab (master branch). +# Is can be run with one command without needing _any_ user input after that. +# This script only works on Amazon Web Services (AWS). +# The operating system used is Ubuntu 12.04 64bit. + +# TODO +# @dosire will send a pull request after this is merged in to change dosire/gitlabhq/non-interactive-aws-install links to gitlabhq/gitlabhq/master and reference this script from installation.md + +# HOWTO +# Signup for AWS, free tier are available at http://aws.amazon.com/free/ +# Go to EC2 tab in the AWS console EC2 https://console.aws.amazon.com/ec2/home +# Click the 'Launch Instance' button +# Select: 'Quick launch wizard' and continue +# Choose a key pair => Create New => Name it => Download it +# Choose a Launch Configuration => Select 'More Amazon Marketplace Images' +# Press 'Continue' +# Enter 'ubuntu/images/ubuntu-precise-12.04-amd64-server-20120424' and press 'Search' +# Select the only result (ami-3c994355) and press 'Continue' +# Press 'Edit details' if you want to modify something, for example make the type 'c1.medium' to make the install faster. +# Press the 'Launch' button +# Press 'Close' +# Click 'Security Groups' under the left hand menu 'NETWORK & SECURITY' +# Select the newly create seciruty group, probably named 'quicklaunch-1' +# Click on the Inbound tab +# In the 'Create a new rule' dropdown select 'HTTP' +# Press 'Add Rule' +# In the 'Create a new rule' dropdown select 'HTTPS' +# Press 'Add Rule' +# Press 'Apply Rule Changes' +# Give the following command in your local terminal while suptituting the UPPERCASE items +# 'ssh -i LOCATION_OF_AWS_KEY_PAIR_PRIVATE_KEY PUBLIC_DNS_OF_THE_NEW_SERVER' +# Execute the curl command below and when its ready follow the printed 'Log in instuctions' +# curl https://raw.github.com/dosire/gitlabhq/non-interactive-aws-install/lib/support/aws/debian_ubuntu_aws.sh | sh + +# Prevent fingerprint prompt for localhost in step 1 to 3. +echo "Host localhost + StrictHostKeyChecking no + UserKnownHostsFile=/dev/null" | sudo tee -a /etc/ssh/ssh_config + +# Existing script for Step 1 to 3 +curl https://raw.github.com/dosire/gitlabhq/non-interactive-aws-install/doc/debian_ubuntu.sh | sh + +# Install MySQL +sudo apt-get install -y makepasswd # Needed to create a unique password non-interactively. +userPassword=$(makepasswd --char=10) # Generate a random MySQL password +# Note that the lines below creates a cleartext copy of the random password in /var/cache/debconf/passwords.dat +# This file is normally only readable by root and the password will be deleted by the package management system after install. +echo mysql-server mysql-server/root_password password $userPassword | sudo debconf-set-selections +echo mysql-server mysql-server/root_password_again password $userPassword | sudo debconf-set-selections +sudo apt-get install -y mysql-server + +# Gitlab install +sudo gem install charlock_holmes --version '0.6.8' +sudo pip install pygments +sudo gem install bundler +sudo su -l gitlab -c "git clone git://github.com/gitlabhq/gitlabhq.git gitlab" # Using master everywhere. +sudo su -l gitlab -c "cd gitlab && mkdir tmp" +sudo su -l gitlab -c "cd gitlab/config && cp gitlab.yml.example gitlab.yml" +sudo su -l gitlab -c "cd gitlab/config && cp database.yml.example database.yml" +sudo sed -i 's/"secure password"/"'$userPassword'"/' /home/gitlab/gitlab/config/database.yml # Insert the mysql root password. +sudo su -l gitlab -c "cd gitlab && bundle install --without development test --deployment" +sudo su -l gitlab -c "cd gitlab && bundle exec rake gitlab:app:setup RAILS_ENV=production" + +# Setup gitlab hooks +sudo cp /home/gitlab/gitlab/lib/hooks/post-receive /home/git/share/gitolite/hooks/common/post-receive +sudo chown git:git /home/git/share/gitolite/hooks/common/post-receive + +# Set the first occurrence of host in the Gitlab config to the publicly available domain name +sudo sed -i '0,/host/s/localhost/'`wget -qO- http://instance-data/latest/meta-data/public-hostname`'/' /home/gitlab/gitlab/config/gitlab.yml + +# Gitlab installation test (optional) +# sudo -u gitlab bundle exec rake gitlab:app:status RAILS_ENV=production +# sudo -u gitlab bundle exec rails s -e production +# sudo -u gitlab bundle exec rake environment resque:work QUEUE=* RAILS_ENV=production BACKGROUND=no + +# Install and configure Nginx +sudo apt-get install -y nginx +sudo cp /home/gitlab/gitlab/lib/support/nginx-gitlab /etc/nginx/sites-available/gitlab +sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab +sudo sed -i 's/YOUR_SERVER_IP/'`wget -qO- http://instance-data/latest/meta-data/local-ipv4`'/' /etc/nginx/sites-available/gitlab # Set private ip address (public won't work). +sudo sed -i 's/YOUR_SERVER_FQDN/'`wget -qO- http://instance-data/latest/meta-data/public-hostname`'/' /etc/nginx/sites-available/gitlab # Set public dns domain name. + +# Configure Unicorn +sudo -u gitlab cp /home/gitlab/gitlab/config/unicorn.rb.orig /home/gitlab/gitlab/config/unicorn.rb + +# Create a Gitlab service +sudo cp /home/gitlab/gitlab/lib/support/init-gitlab /etc/init.d/gitlab +sudo chmod +x /etc/init.d/gitlab && sudo update-rc.d gitlab defaults + +## Gitlab service commands (unicorn and resque) +## restart doesn't restart resque, only start/stop effect it. +sudo -u gitlab service gitlab start +# sudo -u gitlab service gitlab restart +# sudo -u gitlab service gitlab stop + +# nginx Service commands +# sudo service nginx start +sudo service nginx restart +# sudo service nginx stop + +# Manual startup commands for troubleshooting when the service commands do not work +# sudo -u gitlab bundle exec unicorn_rails -c config/unicorn.rb -E production -D +# sudo su -l gitlab -c "cd gitlab && ./resque.sh" + +# Monitoring commands +# sudo tail -f /var/log/nginx/access.log; +# sudo tail -f /var/log/nginx/error.log; + +# Go to gitlab directory by default on next login. +echo 'cd /home/gitlab/gitlab' >> /home/ubuntu/.bashrc + +echo '' +echo '###########################################' +echo '# Log in instuctions #' +echo '###########################################' +echo '' +echo "Surf to this Gitlab installation in your browser:" +echo "http://`wget -qO- http://instance-data/latest/meta-data/public-hostname`/" +echo '' +echo 'and login with the following Email and Password:' +echo 'admin@local.host' +echo '5iveL!fe' \ No newline at end of file From b80dd3d2422b59a1b241ccdae32140ca19f33dc3 Mon Sep 17 00:00:00 2001 From: Sytse Sijbrandij Date: Sun, 2 Sep 2012 18:31:16 +0200 Subject: [PATCH 114/357] Non-interactive AWS install by running a single script. Merge branch 'master' into non-interactive-aws-install Conflicts: doc/installation.md Fix merge mess in installation.md --- .rails_footnotes | 3 - CHANGELOG | 24 + Gemfile | 10 +- Gemfile.lock | 23 +- README.md | 1 + VERSION | 2 +- app/assets/images/file_dir.png | Bin 517 -> 1648 bytes app/assets/images/merge.png | Bin 0 -> 593 bytes app/assets/javascripts/application.js | 22 +- app/assets/javascripts/issues.js | 2 + app/assets/javascripts/note.js | 239 ++--- app/assets/javascripts/projects.js | 4 +- app/assets/stylesheets/common.scss | 334 +++---- app/assets/stylesheets/gitlab_bootstrap.scss | 818 ------------------ .../stylesheets/gitlab_bootstrap/blocks.scss | 145 ++++ .../stylesheets/gitlab_bootstrap/buttons.scss | 105 +++ .../stylesheets/gitlab_bootstrap/common.scss | 52 ++ .../stylesheets/gitlab_bootstrap/files.scss | 156 ++++ .../stylesheets/gitlab_bootstrap/lists.scss | 30 + .../stylesheets/gitlab_bootstrap/tables.scss | 41 + .../gitlab_bootstrap/typography.scss | 71 ++ app/assets/stylesheets/main.scss | 45 +- app/assets/stylesheets/projects.css.scss | 385 --------- app/assets/stylesheets/ref_select.scss | 4 +- app/assets/stylesheets/sections/commits.scss | 20 + app/assets/stylesheets/sections/graph.scss | 6 +- app/assets/stylesheets/sections/issues.scss | 13 + .../stylesheets/sections/merge_requests.scss | 57 +- app/assets/stylesheets/sections/nav.scss | 10 +- app/assets/stylesheets/sections/notes.scss | 73 +- app/assets/stylesheets/sections/projects.scss | 75 +- app/assets/stylesheets/sections/tree.scss | 6 +- app/assets/stylesheets/themes/ui_mars.scss | 8 + app/contexts/merge_requests_load.rb | 8 +- app/controllers/application_controller.rb | 4 + app/controllers/issues_controller.rb | 16 +- app/controllers/labels_controller.rb | 25 + app/controllers/merge_requests_controller.rb | 2 + app/controllers/milestones_controller.rb | 4 +- .../omniauth_callbacks_controller.rb | 3 +- app/controllers/team_members_controller.rb | 1 + app/decorators/application_decorator.rb | 2 +- app/helpers/application_helper.rb | 26 +- app/helpers/gitlab_markdown_helper.rb | 52 +- app/mailers/notify.rb | 77 +- app/models/key.rb | 8 +- app/models/merge_request.rb | 7 +- app/models/milestone.rb | 14 +- app/models/project.rb | 10 +- app/models/protected_branch.rb | 4 +- app/models/user.rb | 34 +- app/models/users_project.rb | 6 +- app/observers/issue_observer.rb | 12 +- app/observers/key_observer.rb | 7 +- app/observers/users_project_observer.rb | 9 + app/roles/git_host.rb | 5 + app/roles/git_merge.rb | 2 - .../{project_push.rb => push_observer.rb} | 2 +- app/roles/repository.rb | 31 +- app/roles/ssh_key.rb | 18 - app/views/admin/dashboard/index.html.haml | 8 +- app/views/admin/hooks/index.html.haml | 2 +- app/views/admin/projects/_form.html.haml | 20 +- app/views/admin/projects/_new_form.html.haml | 29 + app/views/admin/projects/index.html.haml | 4 +- app/views/admin/projects/new.html.haml | 15 +- app/views/admin/users/_form.html.haml | 124 +-- app/views/admin/users/edit.html.haml | 2 +- app/views/admin/users/index.html.haml | 4 +- app/views/admin/users/new.html.haml | 4 +- app/views/commits/_commit.html.haml | 4 +- app/views/commits/compare.html.haml | 2 +- app/views/commits/show.html.haml | 10 +- app/views/dashboard/index.html.haml | 28 +- app/views/errors/gitolite.html.haml | 6 +- app/views/errors/invalid_ssh_key.html.haml | 3 + app/views/events/_event_last_push.html.haml | 2 +- app/views/help/api.html.haml | 22 + app/views/help/index.html.haml | 3 + app/views/help/markdown.html.haml | 114 ++- app/views/help/permissions.html.haml | 4 +- app/views/help/ssh.html.haml | 25 + app/views/help/system_hooks.html.haml | 4 +- app/views/help/web_hooks.html.haml | 8 +- app/views/help/workflow.html.haml | 13 +- app/views/hooks/_data_ex.html.erb | 2 +- app/views/hooks/index.html.haml | 2 +- app/views/issues/_form.html.haml | 13 +- app/views/issues/_head.html.haml | 3 + app/views/issues/index.html.haml | 2 +- app/views/keys/_form.html.haml | 14 +- app/views/keys/index.html.haml | 2 +- app/views/keys/new.html.haml | 2 +- app/views/labels/_label.html.haml | 4 + app/views/labels/index.html.haml | 14 + app/views/merge_requests/_form.html.haml | 19 +- app/views/merge_requests/index.html.haml | 18 +- .../show/_how_to_merge.html.haml | 11 +- .../merge_requests/show/_mr_title.html.haml | 4 +- app/views/milestones/_form.html.haml | 16 +- app/views/milestones/index.html.haml | 8 +- app/views/notes/_create_common.js.haml | 9 +- app/views/notes/_create_line.js.haml | 2 +- app/views/notes/_form.html.haml | 69 +- app/views/notes/_per_line_form.html.haml | 51 +- .../issue_status_changed_email.html.haml | 16 + .../project_access_granted_email.html.haml | 14 + app/views/profile/password.html.haml | 2 +- app/views/profile/show.html.haml | 9 +- app/views/projects/_clone_panel.html.haml | 21 + app/views/projects/_form.html.haml | 13 +- app/views/projects/_new_form.html.haml | 6 +- app/views/projects/empty.html.haml | 88 +- app/views/projects/new.html.haml | 6 +- app/views/projects/show.html.haml | 29 +- app/views/refs/_tree_item.html.haml | 2 +- app/views/search/show.html.haml | 4 +- app/views/shared/_no_ssh.html.haml | 8 + app/views/team_members/_show.html.haml | 2 +- app/views/team_members/show.html.haml | 2 +- app/views/wikis/_form.html.haml | 9 +- config/application.rb | 2 +- config/environment.rb | 2 - config/gitlab.yml.example | 14 +- config/initializers/1_settings.rb | 8 + config/initializers/5_backend.rb | 5 + config/initializers/rails_footnotes.rb | 3 - config/routes.rb | 3 + db/fixtures/test/001_repo.rb | 32 +- ...31232_add_extern_auth_provider_to_users.rb | 8 + db/pkey.example | 3 - db/schema.rb | 5 +- doc/api/README.md | 2 + doc/api/milestones.md | 57 ++ doc/api/projects.md | 102 --- doc/api/snippets.md | 100 +++ doc/development.md | 45 + doc/installation.md | 103 +-- features/profile/ssh_keys.feature | 4 +- features/projects/issues/labels.feature | 13 + features/projects/network.feature | 4 +- features/step_definitions/dashboard_steps.rb | 24 +- .../profile/profile_keys_steps.rb | 2 +- .../project/project_issues_steps.rb | 21 +- .../project/projects_steps.rb | 11 +- features/support/env.rb | 23 +- gitlab | 75 ++ lib/api.rb | 1 + lib/api/issues.rb | 5 +- lib/api/milestones.rb | 80 ++ lib/gitlab/{ => backend}/gitolite.rb | 115 ++- .../gitlab/backend}/grack_auth.rb | 10 +- lib/gitlab/git_host.rb | 17 - lib/gitlab/markdown.rb | 19 +- lib/{post-receive-hook => hooks/post-receive} | 0 lib/support/init-gitlab | 54 ++ lib/support/nginx-gitlab | 33 + lib/tasks/bulk_add_permission.rake | 26 + lib/tasks/gitlab/backup.rake | 3 +- lib/tasks/gitlab/enable_automerge.rake | 4 +- lib/tasks/gitlab/gitolite_rebuild.rake | 2 +- lib/tasks/gitlab/setup.rake | 6 +- lib/tasks/gitlab/status.rake | 22 +- lib/tasks/gitlab/update_hooks.rake | 19 - lib/tasks/gitlab/write_hook.rake | 23 + resque_dev.sh | 3 +- spec/factories.rb | 188 ++-- spec/factories_spec.rb | 91 ++ spec/factory.rb | 29 - spec/helpers/application_helper_spec.rb | 26 + spec/helpers/gitlab_flavored_markdown_spec.rb | 4 +- spec/mailers/notify_spec.rb | 49 +- spec/models/event_spec.rb | 27 +- spec/models/issue_spec.rb | 91 +- spec/models/key_spec.rb | 36 +- spec/models/merge_request_spec.rb | 81 +- spec/models/milestone_spec.rb | 48 +- spec/models/note_spec.rb | 39 +- spec/models/project_spec.rb | 70 +- spec/models/protected_branch_spec.rb | 31 +- spec/models/snippet_spec.rb | 26 +- spec/models/system_hook_spec.rb | 11 +- spec/models/user_spec.rb | 69 +- spec/models/users_project_spec.rb | 16 +- spec/models/web_hook_spec.rb | 11 - spec/models/wiki_spec.rb | 18 +- spec/monkeypatch.rb | 51 -- .../activity_observer_spec.rb | 0 .../issue_observer_spec.rb | 69 +- spec/observers/key_observer_spec.rb | 34 + .../user_observer_spec.rb | 0 spec/observers/users_project_observer_spec.rb | 40 + spec/requests/admin/admin_projects_spec.rb | 2 +- spec/requests/admin/security_spec.rb | 24 +- spec/{ => requests}/api/issues_spec.rb | 19 +- spec/requests/api/milestones_spec.rb | 47 + spec/{ => requests}/api/projects_spec.rb | 37 +- spec/{ => requests}/api/users_spec.rb | 10 +- spec/requests/atom/dashboard_issues_spec.rb | 8 +- spec/requests/projects_deploy_keys_spec.rb | 8 +- spec/requests/security/profile_access_spec.rb | 30 +- spec/requests/security/project_access_spec.rb | 230 ++--- spec/roles/issue_commonality_spec.rb | 69 ++ spec/roles/upvote_spec.rb | 27 + spec/spec_helper.rb | 45 +- spec/support/api.rb | 7 - spec/support/api_helpers.rb | 34 + spec/support/db_cleaner.rb | 18 + spec/support/gitolite_stub.rb | 35 + spec/support/js_patch.rb | 6 - spec/support/login.rb | 30 - spec/support/login_helpers.rb | 23 + spec/support/matchers.rb | 24 + spec/support/shared_examples.rb | 16 - spec/support/stubbed_repository.rb | 31 + 215 files changed, 3829 insertions(+), 3348 deletions(-) delete mode 100644 .rails_footnotes create mode 100644 app/assets/images/merge.png delete mode 100644 app/assets/stylesheets/gitlab_bootstrap.scss create mode 100644 app/assets/stylesheets/gitlab_bootstrap/blocks.scss create mode 100644 app/assets/stylesheets/gitlab_bootstrap/buttons.scss create mode 100644 app/assets/stylesheets/gitlab_bootstrap/common.scss create mode 100644 app/assets/stylesheets/gitlab_bootstrap/files.scss create mode 100644 app/assets/stylesheets/gitlab_bootstrap/lists.scss create mode 100644 app/assets/stylesheets/gitlab_bootstrap/tables.scss create mode 100644 app/assets/stylesheets/gitlab_bootstrap/typography.scss delete mode 100644 app/assets/stylesheets/projects.css.scss create mode 100644 app/controllers/labels_controller.rb create mode 100644 app/observers/users_project_observer.rb create mode 100644 app/roles/git_host.rb delete mode 100644 app/roles/git_merge.rb rename app/roles/{project_push.rb => push_observer.rb} (99%) delete mode 100644 app/roles/ssh_key.rb create mode 100644 app/views/admin/projects/_new_form.html.haml create mode 100644 app/views/errors/invalid_ssh_key.html.haml create mode 100644 app/views/help/ssh.html.haml create mode 100644 app/views/labels/_label.html.haml create mode 100644 app/views/labels/index.html.haml create mode 100644 app/views/notify/issue_status_changed_email.html.haml create mode 100644 app/views/notify/project_access_granted_email.html.haml create mode 100644 app/views/projects/_clone_panel.html.haml create mode 100644 app/views/shared/_no_ssh.html.haml create mode 100644 config/initializers/5_backend.rb delete mode 100644 config/initializers/rails_footnotes.rb create mode 100644 db/migrate/20120729131232_add_extern_auth_provider_to_users.rb delete mode 100644 db/pkey.example create mode 100644 doc/api/milestones.md create mode 100644 doc/api/snippets.md create mode 100644 doc/development.md create mode 100644 features/projects/issues/labels.feature create mode 100755 gitlab create mode 100644 lib/api/milestones.rb rename lib/gitlab/{ => backend}/gitolite.rb (72%) rename {config/initializers => lib/gitlab/backend}/grack_auth.rb (87%) delete mode 100644 lib/gitlab/git_host.rb rename lib/{post-receive-hook => hooks/post-receive} (100%) create mode 100644 lib/support/init-gitlab create mode 100644 lib/support/nginx-gitlab create mode 100644 lib/tasks/bulk_add_permission.rake delete mode 100644 lib/tasks/gitlab/update_hooks.rake create mode 100644 lib/tasks/gitlab/write_hook.rake create mode 100644 spec/factories_spec.rb delete mode 100644 spec/factory.rb create mode 100644 spec/helpers/application_helper_spec.rb delete mode 100644 spec/monkeypatch.rb rename spec/{models => observers}/activity_observer_spec.rb (100%) rename spec/{models => observers}/issue_observer_spec.rb (58%) create mode 100644 spec/observers/key_observer_spec.rb rename spec/{models => observers}/user_observer_spec.rb (100%) create mode 100644 spec/observers/users_project_observer_spec.rb rename spec/{ => requests}/api/issues_spec.rb (73%) create mode 100644 spec/requests/api/milestones_spec.rb rename spec/{ => requests}/api/projects_spec.rb (67%) rename spec/{ => requests}/api/users_spec.rb (76%) create mode 100644 spec/roles/issue_commonality_spec.rb create mode 100644 spec/roles/upvote_spec.rb delete mode 100644 spec/support/api.rb create mode 100644 spec/support/api_helpers.rb create mode 100644 spec/support/db_cleaner.rb create mode 100644 spec/support/gitolite_stub.rb delete mode 100644 spec/support/js_patch.rb delete mode 100644 spec/support/login.rb create mode 100644 spec/support/login_helpers.rb delete mode 100644 spec/support/shared_examples.rb create mode 100644 spec/support/stubbed_repository.rb diff --git a/.rails_footnotes b/.rails_footnotes deleted file mode 100644 index 1019a70a..00000000 --- a/.rails_footnotes +++ /dev/null @@ -1,3 +0,0 @@ -#this code temporarily disables notes for all controllers -# Footnotes::Filter.notes = [] - diff --git a/CHANGELOG b/CHANGELOG index 80b68b0a..7322efbf 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,8 +1,32 @@ +v 2.9.0 + - fixed inline notes bugs + - refactored rspecs + - refactored gitolite backend + - added factory_girl + - restyled projects list on dashboard + - ssh keys validation to prevent gitolite crash + - send notifications if changed premission in project + - scss refactoring. gitlab_bootstrap/ dir + - fix git push http body bigger than 112k problem + - list of labels page under issues tab + - API for milestones + - restyled buttons + +v 2.8.1 + - ability to disable gravatars + - improved MR diff logic + - ssh key help page + v 2.8.0 - Gitlab Flavored Markdown - Bulk issues update - Issues API - Cucumber coverage increased + - Post-receive files fixed + - UI improved + - Application cleanup + - more cucumber + - capybara-webkit + headless v 2.7.0 - Issue Labels diff --git a/Gemfile b/Gemfile index e8b0b244..b0724fad 100644 --- a/Gemfile +++ b/Gemfile @@ -54,7 +54,7 @@ gem "unicorn" gem "acts-as-taggable-on", "2.3.1" # Decorators -gem "drapper" +gem "draper" # Background jobs gem "resque", "~> 1.20.0" @@ -92,7 +92,6 @@ end group :development do gem "letter_opener" - gem "rails-footnotes" gem "annotate", :git => "https://github.com/ctran/annotate_models.git" gem 'rack-mini-profiler' end @@ -108,15 +107,18 @@ group :development, :test do gem "awesome_print" gem "database_cleaner" gem "launchy" + gem 'factory_girl_rails' end group :test do gem 'cucumber-rails', :require => false - gem 'minitest', ">= 2.10" - gem "turn", :require => false gem "simplecov", :require => false gem "shoulda-matchers" gem 'email_spec' gem 'resque_spec' gem "webmock" end + +group :production do + gem "gitlab_meta", '2.9' +end diff --git a/Gemfile.lock b/Gemfile.lock index b23bc47c..f226c931 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -99,7 +99,6 @@ GEM acts-as-taggable-on (2.3.1) rails (~> 3.0) addressable (2.2.8) - ansi (1.4.2) arel (3.0.2) autotest (4.4.6) ZenTest (>= 4.4.1) @@ -156,7 +155,9 @@ GEM railties (~> 3.1) warden (~> 1.2.1) diff-lcs (1.1.3) - drapper (0.8.4) + draper (0.17.0) + actionpack (~> 3.2) + activesupport (~> 3.2) email_spec (1.2.1) mail (~> 2.2) rspec (~> 2.0) @@ -165,6 +166,11 @@ GEM eventmachine (0.12.10) execjs (1.4.0) multi_json (~> 1.0) + factory_girl (4.0.0) + activesupport (>= 3.0.0) + factory_girl_rails (4.0.0) + factory_girl (~> 4.0.0) + railties (>= 3.0.0) ffaker (1.14.0) ffi (1.0.11) foreman (0.47.0) @@ -172,6 +178,7 @@ GEM gherkin (2.11.0) json (>= 1.4.6) git (1.2.5) + gitlab_meta (2.9) grape (0.2.1) hashie (~> 1.2) multi_json @@ -218,7 +225,6 @@ GEM treetop (~> 1.4.8) method_source (0.7.1) mime-types (1.19) - minitest (3.1.0) modernizr (2.5.3) sprockets (~> 2.0) multi_json (1.3.6) @@ -258,8 +264,6 @@ GEM activesupport (= 3.2.8) bundler (~> 1.0) railties (= 3.2.8) - rails-footnotes (3.7.8) - rails (>= 3.0.0) railties (3.2.8) actionpack (= 3.2.8) activesupport (= 3.2.8) @@ -349,8 +353,6 @@ GEM treetop (1.4.10) polyglot polyglot (>= 0.3.1) - turn (0.9.5) - ansi tzinfo (0.3.33) uglifier (1.0.3) execjs (>= 0.3.0) @@ -389,11 +391,13 @@ DEPENDENCIES cucumber-rails database_cleaner devise (~> 2.1.0) - drapper + draper email_spec + factory_girl_rails ffaker foreman git + gitlab_meta (= 2.9) gitolite! grack! grape (~> 0.2.1) @@ -407,7 +411,6 @@ DEPENDENCIES launchy letter_opener linguist (~> 1.0.0)! - minitest (>= 2.10) modernizr (= 2.5.3) mysql2 omniauth-ldap! @@ -415,7 +418,6 @@ DEPENDENCIES pygments.rb! rack-mini-profiler rails (= 3.2.8) - rails-footnotes raphael-rails (= 1.5.2) redcarpet (~> 2.1.1) resque (~> 1.20.0) @@ -432,7 +434,6 @@ DEPENDENCIES stamp therubyracer thin - turn uglifier (= 1.0.3) unicorn webmock diff --git a/README.md b/README.md index 26ed209e..122cd984 100644 --- a/README.md +++ b/README.md @@ -39,5 +39,6 @@ Email ## Contribute +[Development Tips](https://github.com/gitlabhq/gitlabhq/blob/master/doc/development.md) Want to help - send a pull request. We'll accept good pull requests. diff --git a/VERSION b/VERSION index 3f80e494..a564e653 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.8.0pre +2.9.0pre diff --git a/app/assets/images/file_dir.png b/app/assets/images/file_dir.png index 97b0539393d29c78a596f565087b9282df0f0291..ea277bb14dba38fa633a32675ee58b88b88f80a4 100644 GIT binary patch delta 1613 zcmV-T2D15u1n>-yBYy-WX+uL$Nkc;*P;zf(X>4Tx05}naRo`#hR1`jmZ&IWdKOk5~ zhl<6oRa0BJ8yc;~21%2p?MfD<>DVeH9(p*dx19w`~g7O0}n_%Aq@s% zd)fBDv`JHkDym6Hd+5XuAtvnwRpGmKVkc9?T=n|PIo~$m6N9yl%7qB(zDb{1JtYOPA!qk%@Qub75C2T;T?(y%k7cw{!aEIzj}+@(TO5Y zz-|>CeHr)+QOwk9wo4Sh2mAPGw+7tv9PraN1Olr9mwlWPc+tlvJx(D%369Vz>lLjC zyaqhH*k&)cVSir(7|4_1Rc;%)B4&}Zt&(AK&*3kRaknx54=$T^^z2=OSo@r%xnsBw ziQX&rRKAHn*R}K<@Jp~?uenKKe+BrD`qF#?cpp*psgiwk-seYOU#%402HpjG(Qu~= zP5WwfF?$>svC;J<>zK$RIM;P&60@WifbUlLwAf?lk$1u(mFRYq89Q?S8HyrsX^MVnpsf`{W6(5UXREr zZM&7ilpo6ux^|%%%N9z;(dj0Ct!8>>5!%=VyPg-?ke}Vs>~sbgdDuU^Ixpr19NS&g zQew8Fz<)>RL_{M_7A<1csY*MfP@XcB#Jxr~JS8&7goVS)VKE|4(h_Xlc{z{c$ApZs z7riZ_QKdV_uW-M~u~8PF3UX~a6)MwxDE0Ha zPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiSBY#iOF*IB46Cei@XmvNzKBsGIKkN=X z$_Bgm&h5TyYjpf^^Nrn$ZO1mSZpOC4_}H(pE&Od#0y|)Oik6|u@OHupcq1J>TmjQ1 z4eM{2+Oeah>iL1tBPPK=$Ue-{x#7^N{-XY=Zm3_V7u4T7YJ?d(rX+nTeJlMa zeSar?Fa1o4bXmG0{UlwLzL72kIlJ$@pC#CPuU}yk-HKgk)oY(MCsR(!d*m18l>EH> zvOF8G6uDm>lc(gp@azfp%?$k=y%=-~vuaJXdoA$<7&H$h2Au}i##F_Gt8^Aw+nR zkw6!J0rE*iK~y*qrBbnKRY4G)-McTT6G=piAc84kDWVTT6hg{?rPydCf<-+!r#lj$ng=H+oN&>+I6T-{e-P!S+-TUGz1Q8eJ?#|AfIcH|CGc)<06$l<&UENr@ zwf1Pb(3elUJL&6(x6^ljI@baOKYn=s0TZZy$H89H5&3HYw|wvEvxWJ^yX$vuU-6F6 zw%+Z2{KnJo8+szXZBnrB9~`_7i*s|s=i6JuN?n6lTo+_xc=J-y3`r&lvZ7@v*`!#h zySN#7@#gS85TvQ6ckVs#qLpndV=Phf1WC&rX~-X4J_b) zs{kBPOmXL6Q~;mF6kp9LpjwHz>N4bdBvA)I=E#N_00iX#T8$Zi%qbX#0vyo^P&k}_#3Z4lNe4Z+V(J+q#Jlu=L@(bus&a$C+M_c( zoW+_(AG53jtUpcHnEBpRK=b&J4&)M?6^rAM49W;YX##ta#)&EfwI%Xox*Gs-L!r2nwN*UoS2#&-?;(lO*~KF&Bai00000 LNkvXXu0mjfR5}Yv delta 474 zcmV<00VV$M421-cBOL$%b5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D6tQ3Mx%00(qQ zO+^RX2OSA87wSK)9RL6Ug-Jv~R5;7ElQD`GK@f$%*VFzk;vvKXh?ypaf@cuSOiet6 zVq#=ux@cfxWMC$Sf?#Co0TxA9cXp<$oHh71YY)y75WthyAKuhqxU+wlw&xZPLDfK}X%WnkgiS=Y z$Mk;f+6i2wS|xDysGHzLcODn4Uxu}$c`78TNB$yb&mX&2~x+myO0-ufpjnKdv9Y# z8sV>XoZ@>OdQcKzjBvUqb`=uHOuD{0RpgI4&h5CgvUM%eY9g6^wN3VfzNcdtj_b+P zPKwS1`YkZ&rEoo4b0#$u4Pe^*ZHIJYLrI!j}Zc0q;$ zAmJq-$()<~lGPaGSXpPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyo9 z5;+7dV2sKD00GfSL_t(Y$IX?oiq%jMhQB{v1e-0i5o8;|NARQ;1sg$01PfUkZL|;z zD~p5#Ec5}k5g#D|J5ji5B}rjrsd7QAw^M{=e~Tn|mv!$Yl0^qXrbysMY4b@Bv07XKNF;C(uqe+UDkkJ6i?kjm{cp0jE z)+EJ*5*gbd$&xNhei7ICNq|sg2NR0x{5Y@$Yyw^#+`B?o5$A`7AY^!teXC8&PjQve zq~$)q2JqTA2(4={a;Fm@u<8C0_$%mIlN299mC^Q)sLy(DUGOf7KtsT;BZF_V3A_qb z7KY%V&i>{U9R|n1DT%jnoo@lONy%)o36#{UcmnY(RM{Dcr_uDYE-+FDoUnpUB3Xca zuT9G5lLBl@(huw_ZCcKUxrhMS){w%g2YWf&eZHg};~Q;S&WF{}rX@4*uB4AkCt+11 z_kgp&>1A0k-;8gzY56X$yZtoS4D=niZbldc|`v!EONs7gvmfVs=qX+63FbA$TX|WUPj5aAJy_fIARlaeg fm;Pb9|DV_|IBUXuSip0M00000NkvXXu0mjfn+gJJ literal 0 HcmV?d00001 diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index d9cbd5d6..f69fd6f9 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -72,7 +72,7 @@ $(document).ready(function(){ * Note markdown preview * */ - $('#preview-link').on('click', function(e) { + $(document).on('click', '#preview-link', function(e) { $('#preview-note').text('Loading...'); var previewLinkText = ($(this).text() == 'Preview' ? 'Edit' : 'Preview'); @@ -128,3 +128,23 @@ function showDiff(link) { function ajaxGet(url) { $.ajax({type: "GET", url: url, dataType: "script"}); } + +/** + * Disable button if text field is empty + */ +function disableButtonIfEmtpyField(field_selector, button_selector) { + field = $(field_selector); + if(field.val() == "") { + field.closest("form").find(button_selector).attr("disabled", "disabled").addClass("disabled"); + } + + field.on('keyup', function(){ + var field = $(this); + var closest_submit = field.closest("form").find(button_selector); + if(field.val() == "") { + closest_submit.attr("disabled", "disabled").addClass("disabled"); + } else { + closest_submit.removeAttr("disabled").removeClass("disabled"); + } + }) +} diff --git a/app/assets/javascripts/issues.js b/app/assets/javascripts/issues.js index bc056965..aae818de 100644 --- a/app/assets/javascripts/issues.js +++ b/app/assets/javascripts/issues.js @@ -5,6 +5,7 @@ function switchToNewIssue(form){ $('select#issue_milestone_id').chosen(); $("#new_issue_dialog").show("fade", { direction: "right" }, 150); $('.top-tabs .add_new').hide(); + disableButtonIfEmtpyField("#issue_title", ".save-btn"); }); } @@ -15,6 +16,7 @@ function switchToEditIssue(form){ $('select#issue_milestone_id').chosen(); $("#edit_issue_dialog").show("fade", { direction: "right" }, 150); $('.add_new').hide(); + disableButtonIfEmtpyField("#issue_title", ".save-btn"); }); } diff --git a/app/assets/javascripts/note.js b/app/assets/javascripts/note.js index d9ae45d9..9cd3e36e 100644 --- a/app/assets/javascripts/note.js +++ b/app/assets/javascripts/note.js @@ -1,161 +1,160 @@ var NoteList = { -notes_path: null, -target_params: null, -target_id: 0, -target_type: null, -first_id: 0, -last_id: 0, -disable:false, + notes_path: null, + target_params: null, + target_id: 0, + target_type: null, + first_id: 0, + last_id: 0, + disable:false, -init: - function(tid, tt, path) { - this.notes_path = path + ".js"; - this.target_id = tid; - this.target_type = tt; - this.target_params = "&target_type=" + this.target_type + "&target_id=" + this.target_id; + init: + function(tid, tt, path) { + this.notes_path = path + ".js"; + this.target_id = tid; + this.target_type = tt; + this.target_params = "&target_type=" + this.target_type + "&target_id=" + this.target_id; - // get notes - this.getContent(); + // get notes + this.getContent(); - // get new notes every n seconds - this.initRefresh(); + // get new notes every n seconds + this.initRefresh(); - $('.delete-note').live('ajax:success', function() { - $(this).closest('li').fadeOut(); }); + $('.delete-note').live('ajax:success', function() { + $(this).closest('li').fadeOut(); }); - $("#new_note").live("ajax:before", function(){ - $(".submit_note").attr("disabled", "disabled"); - }) + $(".note-form-holder").live("ajax:before", function(){ + $(".submit_note").attr("disabled", "disabled"); + }) - $("#new_note").live("ajax:complete", function(){ - $(".submit_note").removeAttr("disabled"); - }) + $(".note-form-holder").live("ajax:complete", function(){ + $(".submit_note").removeAttr("disabled"); + }) - $("#note_note").live("focus", function(){ - $(this).css("height", "80px"); - $('.note_advanced_opts').show(); - }); + disableButtonIfEmtpyField(".note-text", ".submit_note"); - $("#note_attachment").change(function(e){ + $(".note-text").live("focus", function(){ + $(this).css("height", "80px"); + $('.note_advanced_opts').show(); + }); + + $("#note_attachment").change(function(e){ var val = $('.input-file').val(); var filename = val.replace(/^.*[\\\/]/, ''); $(".file_name").text(filename); - }); + }); - }, + }, -/** - * Load new notes to fresh list called 'new_notes_list': - * - Replace 'new_notes_list' with new list every n seconds - * - Append new notes to this list after submit - */ + /** + * Load new notes to fresh list called 'new_notes_list': + * - Replace 'new_notes_list' with new list every n seconds + * - Append new notes to this list after submit + */ -initRefresh: - function() { - // init timer - var intNew = setInterval("NoteList.getNew()", 10000); - }, + initRefresh: + function() { + // init timer + var intNew = setInterval("NoteList.getNew()", 10000); + }, -replace: - function(html) { - $("#new_notes_list").html(html); - }, + replace: + function(html) { + $("#new_notes_list").html(html); + }, -prepend: - function(id, html) { - if(id != this.last_id) { - $("#new_notes_list").prepend(html); - } - }, + prepend: + function(id, html) { + if(id != this.last_id) { + $("#new_notes_list").prepend(html); + } + }, -getNew: - function() { - // refersh notes list - $.ajax({ - type: "GET", + getNew: + function() { + // refersh notes list + $.ajax({ + type: "GET", url: this.notes_path, data: "last_id=" + this.last_id + this.target_params, dataType: "script"}); - }, + }, -refresh: - function() { - // refersh notes list - $.ajax({ - type: "GET", + refresh: + function() { + // refersh notes list + $.ajax({ + type: "GET", url: this.notes_path, data: "first_id=" + this.first_id + "&last_id=" + this.last_id + this.target_params, dataType: "script"}); - }, + }, -/** - * Init load of notes: - * 1. Get content with ajax call - * 2. Set content of notes list with loaded one - */ + /** + * Init load of notes: + * 1. Get content with ajax call + * 2. Set content of notes list with loaded one + */ -getContent: - function() { - $.ajax({ - type: "GET", + getContent: + function() { + $.ajax({ + type: "GET", url: this.notes_path, data: "?" + this.target_params, complete: function(){ $('.status').removeClass("loading")}, beforeSend: function() { $('.status').addClass("loading") }, dataType: "script"}); - }, + }, -setContent: - function(fid, lid, html) { + setContent: + function(fid, lid, html) { this.last_id = lid; this.first_id = fid; $("#notes-list").html(html); // Init infinite scrolling this.initLoadMore(); - }, + }, -/** - * Paging for old notes when scroll to bottom: - * 1. Init scroll events with 'initLoadMore' - * 2. Load onlder notes with 'getOld' method - * 3. append old notes to bottom of list with 'append' - * - */ + /** + * Paging for old notes when scroll to bottom: + * 1. Init scroll events with 'initLoadMore' + * 2. Load onlder notes with 'getOld' method + * 3. append old notes to bottom of list with 'append' + * + */ + getOld: + function() { + $('.loading').show(); + $.ajax({ + type: "GET", + url: this.notes_path, + data: "first_id=" + this.first_id + this.target_params, + complete: function(){ $('.status').removeClass("loading")}, + beforeSend: function() { $('.status').addClass("loading") }, + dataType: "script"}); + }, + append: + function(id, html) { + if(this.first_id == id) { + this.disable = true; + } else { + this.first_id = id; + $("#notes-list").append(html); + } + }, -getOld: - function() { - $('.loading').show(); - $.ajax({ - type: "GET", - url: this.notes_path, - data: "first_id=" + this.first_id + this.target_params, - complete: function(){ $('.status').removeClass("loading")}, - beforeSend: function() { $('.status').addClass("loading") }, - dataType: "script"}); - }, - -append: - function(id, html) { - if(this.first_id == id) { - this.disable = true; - } else { - this.first_id = id; - $("#notes-list").append(html); - } - }, - - -initLoadMore: - function() { - $(document).endlessScroll({ - bottomPixels: 400, + initLoadMore: + function() { + $(document).endlessScroll({ + bottomPixels: 400, fireDelay: 1000, fireOnce:true, ceaseFire: function() { @@ -164,6 +163,20 @@ initLoadMore: callback: function(i) { NoteList.getOld(); } - }); - } + }); + } +}; + +var PerLineNotes = { + init: + function() { + $(".line_note_link, .line_note_reply_link").live("click", function(e) { + var form = $(".per_line_form"); + $(this).closest("tr").after(form); + form.find("#note_line_code").val($(this).attr("line_code")); + form.show(); + return false; + }); + disableButtonIfEmtpyField(".line-note-text", ".submit_inline_note"); + } } diff --git a/app/assets/javascripts/projects.js b/app/assets/javascripts/projects.js index 84272698..be1b75b9 100644 --- a/app/assets/javascripts/projects.js +++ b/app/assets/javascripts/projects.js @@ -7,8 +7,10 @@ function Projects() { $('.new_project, .edit_project').live('ajax:before', function() { $('.project_new_holder, .project_edit_holder').hide(); - $('.ajax_loader').show(); + $('.save-project-loader').show(); }); $('form #project_default_branch').chosen(); + + disableButtonIfEmtpyField("#project_name", ".project-submit") } diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index 6103d05c..aa27a280 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -1,11 +1,9 @@ -.diff_file_header a, -.file_stats a { - color:$style_color; -} - - /** LAYOUT **/ +body { + margin-bottom:20px; +} + .container { padding-top:0; z-index:5; @@ -40,30 +38,6 @@ color: $link_color; } -.widget { - @include shade; - padding:20px; - margin-bottom:20px; - border: 1px solid #DDD; - border-radius: 5px; - background:#fafafa; - - .link_holder { - background:#eee; - position:relative; - left:-20px; - top:20px; - padding:10px 20px; - width:100%; - border-top:1px solid #ccc; - - a { - font-size:14px; - color:#666; - } - } -} - .help li { color:#111 } .back_link { @@ -88,16 +62,6 @@ padding-left:20px; } -.number { - border-radius: 4px; - text-shadow: none; - background: rgba(0,0,0,.12); - text-align: center; - padding: 2px 4px; - line-height:18px; - margin-left:2px; -} - table a code { position: relative; top: -2px; @@ -129,26 +93,18 @@ table a code { border-bottom:1px solid #ccc; h4 { - color:#444; - font-size:22px; + color:#666; + font-size:18px; + line-height:38px; padding-top:5px; margin:2px; + font-weight:normal; } } .git_url_wrapper { margin-right:50px } -.file_stats { - span { - img { - width:14px; - float:left; - margin-right:6px; - padding:2px 0; - } - } -} .handle:hover { cursor:move; @@ -172,10 +128,6 @@ span.update-author { display:block; } /** END UPDATE ITEM **/ -.ajax-tab-loading { - padding:40px; - display:none; -} .dashboard-loader { float:left; margin:10px; @@ -186,15 +138,110 @@ span.update-author { font-weight:bold; } -a.project-update.titled { - position:relative; - padding-left:35% !important; - .title-block { - padding:10px; - width:35%; - position:absolute; - left:0; - top:0; +.neib { + margin-right:10px; +} + +.label { + background-color: #474D57; + + &.label-issue { + background-color: #eee; + border: 1px solid #ccc; + padding:4px 6px; + color:#444; + text-shadow:0 0 1px #fff; + + &.grouped { + float: left; + margin-right: 6px; + padding: 6px; + } + } +} + +.event_label { + @extend .label; + background-color: #999; + + &.pushed { + background-color: #4A97BD; + } + + &.opened { + background-color: #469847; + } + + &.closed { + background-color: #B94A48; + } + + &.merged { + background-color: #2A2; + } +} + +form { + @extend .form-horizontal; + + .actions { + @extend .form-actions; + } + + .clearfix { + @extend .control-group; + } + + .input { + @extend .controls; + } + + label { + @extend .control-label; + } + .xlarge { + @extend .input-xlarge; + } + .xxlarge { + @extend .input-xxlarge; + } +} + + +.field_with_errors { + display:inline; +} + +ul.breadcrumb { + background:white; + border:none; + li { + display: inline; + text-shadow: 0 1px 0 white + } + + a { + color:#474D57; + font-weight:bold; + font-size:14px; + } + + .arrow { + background: url("images.png") no-repeat -85px -77px; + width: 19px; + height: 16px; + float: left; + position: relative; + left: -10px; + padding:0; + margin:0; + } +} + +input[type=text] { + &.large_text { + padding:6px; + font-size:16px; } } @@ -270,40 +317,6 @@ p.time { } -/** - * Dashboard page - * - */ -.dashboard_category { - margin-bottom:30px; - h3 a { - color:#474D57; - &:hover { - text-decoration:underline; - } - } - - .dashboard_block { - .dash_project_item { - margin-bottom:10px; - border:none; - padding:0px 5px; - .project_link { - color:#888; - &:hover { - color:#111; - .ico.project { - background-position:-209px -21px; - } - } - } - h4 { - color:#666; - } - } - } -} - .styled_image { border:2px solid #ddd; } @@ -393,39 +406,6 @@ p.time { } } -.btn { - &.very_small { - font-size:11px; - padding:2px 6px; - margin:2px; - } - - &.grouped { - margin-right:7px; - float:left; - } - - &.padded { - margin-right:3px; - padding:4px 10px 4px; - } -} - - -.prettyprint { - background-color: #fefbf3; - padding: 9px; - border: 1px solid rgba(0,0,0,.2); - -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.1); - -moz-box-shadow: 0 1px 2px rgba(0,0,0,.1); - box-shadow: 0 1px 2px rgba(0,0,0,.1); -} - -.hint { - font-style: italic; - color: #999; -} - .upvotes { font-size: 14px; font-weight: bold; @@ -549,14 +529,6 @@ li.note { } -/** - * Milestones list - * - */ - -.milestone { - @extend .wll; -} /** * Admin area @@ -603,11 +575,10 @@ li.note { * */ .event_lp { - @extend .alert-info; + @extend .ui-box; + color:#777; margin-bottom:20px; padding:8px; - border-style: solid; - border-width: 1px; @include border-radius(4px); min-height:22px; @@ -621,88 +592,19 @@ li.note { cursor:pointer; } -/** - * Issues, MRs legend - * - */ - -.list_legend { - float:left; - margin-right:20px; - .icon { - width:12px; - height:12px; - float:left; - margin-right:5px; - margin-top: 2px; - @include border-radius(4px); - &.today{ - background: #ADA; - border:1px solid #8B8; - } - &.closed { - background: #DDD; - border:1px solid #BBB; - } - &.yours { - background: #AAD; - border:1px solid #88B; - } - &.merged { - background: #DAD; - border:1px solid #B8B; - } - } - .text { - padding-bottom: 10px; - float:left; - } -} - .merge_request, .issue { - .list_legend { - margin-right: 5px; - margin-top: 14px; - .icon { - width:8px; - height:8px; - float:left; - margin-right:5px; - @include border-radius(4px); - border:1px solid #ddd; - } - } - &.today{ background: #EFE; border-color:#CEC; - .icon { - background: #ADA; - border:1px solid #8B8; - } } &.closed { background: #F5f5f5; border-color:#E5E5E5; - .icon { - background: #DDD; - border:1px solid #BBB; - } - } - &.yours { - .icon { - background: #AAD; - border:1px solid #88B; - } } &.merged { background: #F5f5f5; border-color:#E5E5E5; - .icon { - background: #DAD; - border:1px solid #B8B; - } } } @@ -735,3 +637,11 @@ li.note { font-size: 12px; } } + +.error_message { + @extend .cred; + border-bottom: 1px solid #D21; + padding-bottom:20px; + text-align:center; + margin-bottom:10px; +} diff --git a/app/assets/stylesheets/gitlab_bootstrap.scss b/app/assets/stylesheets/gitlab_bootstrap.scss deleted file mode 100644 index 550046d0..00000000 --- a/app/assets/stylesheets/gitlab_bootstrap.scss +++ /dev/null @@ -1,818 +0,0 @@ -body { - margin-bottom:20px; -} -a { - outline: none; - color: $link_color; - &:hover { - text-decoration:none; - color: $blue_link; - } - - &.btn { - color: $style_color; - } - - &.dark { - color: $style_color; - } - - &.lined { - text-decoration:underline; - &:hover { text-decoration:underline; } - } - - &.gray { - color:gray; - } - - &.supp_diff_link { - text-align:center; - padding:20px 0; - background:#f1f1f1; - width:100%; - float:left; - } - - &.neib { - margin-right:15px; - } -} - -.neib { - margin-right:10px; -} - -.alert-message { - @extend .alert; - - &.success { - @extend .alert-success; - } - - &.error { - @extend .alert-error; - } -} - -.alert { - &.alert-well { - background:#ddd; - border:1px solid #ccc; - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #ddd), to(#dfdfdf)); - background-image: -webkit-linear-gradient(#ddd 6.6%, #dfdfdf); - background-image: -moz-linear-gradient(#ddd 6.6%, #dfdfdf); - background-image: -o-linear-gradient(#ddd 6.6%, #dfdfdf); - color:#111; - } -} - -h3, h4, h5, h6 { - line-height: 36px; -} - -h5 { - font-size:14px; -} - - -table { - width:100%; - th { - padding-top: 9px; - font-weight: bold; - vertical-align: middle; - } - th, td { - padding: 10px 10px 9px; - line-height: 18px; - text-align: left; - } - - &.bordered-table { - border: 1px solid #DDD; - border-collapse: separate; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - } - - &.zebra-striped { - @extend .table-striped; - } -} - -.btn { - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f1f1f1), color-stop(25%, #f1f1f1), to(#e6e6e6)); - background-image: -webkit-linear-gradient(#f1f1f1, #f1f1f1 25%, #e6e6e6); - background-image: -moz-linear-gradient(top, #f1f1f1, #f1f1f1 25%, #e6e6e6); - background-image: -ms-linear-gradient(#f1f1f1, #f1f1f1 25%, #e6e6e6); - background-image: -o-linear-gradient(#f1f1f1, #f1f1f1 25%, #e6e6e6); - background-image: linear-gradient(#f1f1f1, #f1f1f1 25%, #e6e6e6); - - &:hover { - } - - &.btn-primary { - background:$link_color; - border-color: #2A79A3; - &:hover { - background:$blue_link; - } - } - &.primary { - @extend .btn-primary; - } - - &.success { - color: #fff; - text-shadow: 0 0 1px #111; - background: #5bb75b;; - font-weight: bold; - - &:hover { - background-color: #51a351; - color: #fff; - } - } - - &.danger, - &.btn-danger { - color:#fff; - background: #DA4E49; - border-color: #BD362F; - - &:hover { - color:#fff; - background: #EE4E49; - } - } - - &.danger { - @extend .btn-danger; - } - - &.small { - @extend .btn-small; - } - - &.active { - border-color:#aaa; - background-color:#ccc; - } -} - -a:focus { - outline: none; -} - -.nav-pills a:hover { - background-color:#888; -} - -.nav-pills .active a { - background-color: $style_color; -} - -.label { - background-color: #474D57; - &.label-important { - background-color: #B94A48; - } - - &.label-issue { - background-color: #eee; - border: 1px solid #ccc; - padding:4px 6px; - color:#444; - text-shadow:0 0 1px #fff; - - &.grouped { - float: left; - margin-right: 6px; - padding: 6px; - } - } -} - -.nav-tabs > li > a, .nav-pills > li > a { - color:$style_color; -} - -.nav-tabs > .active > a { - font-weight:bold; -} - -/** COLORS **/ -.cgray { color:gray; } -.cred { color:#D12F19; } -.cgreen { color:#44aa22; } -.cblack { color:#111; } -.cdark { color:#444 } -.cwhite { color:#fff !important } -.bgred { background: #F2DEDE !important} - -/** COMMON STYLES **/ -.left { - float:left; -} -.right { - float:right !important; -} -.width-50p{ - width:50%; -} -.width-49p{ - width:49%; -} -.width-30p{ - width:30%; -} -.width-65p{ - width:65%; -} -.width-100p{ - width:100%; -} -.append-bottom-10 { - margin-bottom:10px; -} -.append-bottom-20 { - margin-bottom:20px; -} -.prepend-top-10 { - margin-top:10px; -} - -.prepend-top-20 { - margin-top:20px; -} - -.padded { - padding:20px; -} - -.ipadded { - padding:20px !important; -} -.lborder { - border-left:1px solid #eee; -} - -.borders { - border: 1px solid #ccc; - @include shade; -} -.no-borders { - border:none; -} -table.no-borders { - border:none; - tr, td { border:none } -} -.no-padding { - padding:0 !important; -} -.underlined { - border-bottom: 1px solid $border_color; -} -.vlink { - color: $link_color !important; -} - -.pretty_label { - @include round-borders-all(4px); - padding:2px 4px; - background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.076, #fefefe), to(#F6F7F8)); - background-image: -webkit-linear-gradient(#fefefe 7.6%, #F6F7F8); - background-image: -moz-linear-gradient(#fefefe 7.6%, #F6F7F8); - background-image: -o-linear-gradient(#fefefe 7.6%, #F6F7F8); - color: #777; - border: 1px solid #DEDFE1; - - &.branch { - border:none; - font-size:13px; - background: #474D57; - color:#fff; - font-weight:bold; - font-family: monospace; - } -} - -.event_label { - @extend .label; - background-color: #999; - - &.pushed { - background-color: #3A87AD; - } - - &.opened { - background-color: #468847; - } - - &.closed { - background-color: #B94A48; - } - - &.merged { - background-color: #2A2; - } -} - -img.avatar { - float:left; - margin-right:15px; - width:40px; - border:2px solid #ddd; - - &.s16 { - width:16px; - } - &.s24 { - width:24px; - } - &.s32 { - width:32px; - } -} - -img.lil_av { - padding-left: 4px; - padding-right:3px; -} - -form { - @extend .form-horizontal; - - .actions { - @extend .form-actions; - } - - .clearfix { - @extend .control-group; - } - - .input { - @extend .controls; - } - - label { - @extend .control-label; - } - .xlarge { - @extend .input-xlarge; - } - .xxlarge { - @extend .input-xxlarge; - } -} - -/** - * List li block element #1 - * - */ -.wll { - background-color: #FFF; - padding: 10px 5px; - min-height: 20px; - border-bottom: 1px solid #eee; - border-bottom: 1px solid rgba(0, 0, 0, 0.05); - &.smoke { - background-color:#f5f5f5; - } - &:hover { - background:$hover; - } - &:last-child { border:none } - p { padding-top:5px; margin:0; color:$style_color;} - .author { color: #999; } - p { - color:#222; - margin-bottom: 0; - img { - position:relative; - top:3px; - } - } -} - - -/** - * Block element #2 - * - */ -.entry { - position: relative; - padding: 7px 15px; - margin-bottom: 18px; - color: #404040; - filter:none; - - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); - - background:#F1F1F1; - border: 1px solid #ccc; - - - p { - color:$style_color; - margin-bottom: 0; - img { - position:relative; - top:3px; - } - } -} - - -/** - * Big UI Block for show page content - * - */ -.ui-box { - background:#F9F9F9; - margin-bottom: 25px; - @include round-borders-all(4px); - border-color: #CCC; - @include solid_shade; - - ul { - margin:0; - } - - h5, .title { - padding: 0 10px; - @include round-borders-top(4px); - border-bottom: 1px solid #bbb; - background:#eee; - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); - background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); - - &.small { - line-height: 28px; - font-size: 14px; - line-height:28px; - text-shadow: 0 1px 1px white; - } - - form { - padding:9px 0; - margin:0px; - } - - .nav-pills { - li { - padding:3px 0; - &.active a { background-color:$style_color; } - a { - border-radius:7px; - } - } - } - } - - .bottom { - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); - background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); - @include round-borders-bottom(4px); - border-bottom:none; - border-top: 1px solid #bbb; - } - - &.padded { - h5, .title { - margin: -20px; - margin-bottom: 0; - padding: 5px 20px; - } - .middle_title { - background:#f5f5f5; - margin:20px -20px; - padding: 0 20px; - border-top:1px solid #eee; - border-bottom:1px solid #eee; - font-size:14px; - color:#777; - } - } - .row_title { - font-weight:bold; - color:#444; - &:hover { - color:#444; - text-decoration:underline; - } - } - - li, .wll { - padding:10px; - &:first-child { - @include round-borders-top(4px); - border-top:none; - } - - &:last-child { - @include round-borders-bottom(4px); - border:none; - } - } - -} - -table.admin-table { - @extend .table-bordered; - @extend .zebra-striped; - @include solid_shade; - th { - border-color: #CCC; - border-bottom: 1px solid #bbb; - background:#eee; - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); - background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); - } -} - -.field_with_errors { - display:inline; -} - -ul.breadcrumb { - background:white; - border:none; - li { - display: inline; - text-shadow: 0 1px 0 white - } - - a { - color:#474D57; - font-weight:bold; - font-size:14px; - } - - .arrow { - background: url("images.png") no-repeat -85px -77px; - width: 19px; - height: 16px; - float: left; - position: relative; - left: -10px; - padding:0; - margin:0; - } -} - -.nothing_here_message { - text-align:center; - padding:20px; - color:#777; -} - -/** - * UI box element - * contains top, middle, bottom blocks - * - */ -.main_box { - @extend .borders; - @extend .prepend-top-20; - @extend .append-bottom-20; - border-width:1px; - @include solid_shade; - - - img { max-width: 100%; } - - pre { - code { - background: none !important; - } - } - - .top_box_content, - .middle_box_content, - .bottom_box_content { - padding:15px; - - pre { - background: none !important; - margin:0; - border:none; - padding:0; - } - } - - .middle_box_content { - border-radius:0; - border:none; - font-size:12px; - background-color:#f5f5f5; - border:none; - border-top:1px solid #eee; - } - - .bottom_box_content { - border-top:1px solid #eee; - } -} - -input[type=text] { - &.large_text { - padding:6px; - font-size:16px; - } -} - -p { - &.slead { - color:#456; - font-size:16px; - margin-bottom: 12px; - font-weight: 200; - line-height: 24px; - } -} - -h3.page_title { - color:#456; - font-size:20px; - font-weight: normal; - line-height: 28px; -} - -/** - * File content holder - * - */ -.file_holder { - border:1px solid #CCC; - margin-bottom:1em; - @include solid_shade; - - .file_title { - border-bottom: 1px solid #bbb; - background:#eee; - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); - background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); - margin: 0; - font-weight: normal; - font-weight: bold; - text-align: left; - color: #666; - padding: 9px 10px; - height:18px; - - .options { - float:right; - margin-top: -5px; - } - - .file_name { - color:$style_color; - font-size:14px; - text-shadow: 0 1px 1px #fff; - small { - color:#999; - font-size:13px; - } - } - } - .file_content { - background:#fff; - font-size: 11px; - - &.wiki { - font-size: 13px; - code { - padding:0 4px; - } - padding:20px; - h1, h2 { - line-height: 46px; - } - h3, h4 { - line-height: 40px; - } - } - - &.image_file { - background:#eee; - text-align:center; - img { - padding:100px; - max-width:300px; - } - } - - &.blob_file { - - } - - /** - * Blame file - */ - &.blame { - tr { - border-bottom: 1px solid #eee; - } - td { - padding:5px; - } - .author, - .blame_commit { - background:#f5f5f5; - vertical-align:top; - } - .lines { - pre { - padding:0; - margin:0; - background:none; - border:none; - } - } - } - - &.logs { - background:#eee; - max-height: 700px; - overflow-y: auto; - - ol { - margin-left:40px; - padding: 10px 0; - border-left: 1px solid #CCC; - margin-bottom:0; - background: white; - li { - color:#888; - p { - margin:0; - color:#333; - line-height:24px; - padding-left: 10px; - } - - &:hover { - background:$hover; - } - } - } - } - - /** - * Code file - */ - &.code { - padding:0; - td.code { - width: 100%; - .highlight { - margin-left: 55px; - overflow:auto; - overflow-y:hidden; - } - } - .highlight pre { - white-space: pre; - word-wrap:normal; - } - - table.highlighttable { - border: none; - } - body.project-page table.highlighttable td { border: none } - table.highlighttable tr:hover { background:none;} - - table.highlighttable pre{ - line-height:16px !important; - font-size:12px !important; - } - - table.highlighttable .linenodiv pre { - text-align: right; - padding-right: 4px; - color:#666; - } - } - } -} diff --git a/app/assets/stylesheets/gitlab_bootstrap/blocks.scss b/app/assets/stylesheets/gitlab_bootstrap/blocks.scss new file mode 100644 index 00000000..894cb304 --- /dev/null +++ b/app/assets/stylesheets/gitlab_bootstrap/blocks.scss @@ -0,0 +1,145 @@ +/** + * =================================== + * Contain 3 main UI block elements: + * .main_box - for show pages + * .ui-box - for simple block & widgets + * =================================== + */ + +/** + * UI box element + * contains top, middle, bottom blocks + * + */ +.main_box { + @extend .borders; + @extend .prepend-top-20; + @extend .append-bottom-20; + border-width:1px; + @include solid_shade; + + + img { max-width: 100%; } + + pre { + code { + background: none !important; + } + } + + .top_box_content, + .middle_box_content, + .bottom_box_content { + padding:15px; + + pre { + background: none !important; + margin:0; + border:none; + padding:0; + } + } + + .middle_box_content { + border-radius:0; + border:none; + font-size:12px; + background-color:#f5f5f5; + border:none; + border-top:1px solid #eee; + } + + .bottom_box_content { + border-top:1px solid #eee; + } +} + +/** + * Big UI Block for show page content + * + */ +.ui-box { + background:#F9F9F9; + margin-bottom: 25px; + @include round-borders-all(4px); + border-color: #CCC; + @include solid_shade; + + ul { + margin:0; + } + + h5, .title { + padding: 0 10px; + @include round-borders-top(4px); + @include bg-gray-gradient; + border-bottom: 1px solid #bbb; + + &.small { + line-height: 28px; + font-size: 14px; + line-height:28px; + text-shadow: 0 1px 1px white; + } + + form { + padding:9px 0; + margin:0px; + } + + .nav-pills { + li { + padding:3px 0; + &.active a { background-color:$style_color; } + a { + border-radius:7px; + } + } + } + } + + .bottom { + @include bg-gray-gradient; + @include round-borders-bottom(4px); + border-bottom:none; + border-top: 1px solid #bbb; + } + + &.padded { + h5, .title { + margin: -20px; + margin-bottom: 0; + padding: 5px 20px; + } + .middle_title { + background:#f5f5f5; + margin:20px -20px; + padding: 0 20px; + border-top:1px solid #eee; + border-bottom:1px solid #eee; + font-size:14px; + color:#777; + } + } + .row_title { + font-weight:bold; + color:#444; + &:hover { + color:#444; + text-decoration:underline; + } + } + + li, .wll { + padding:10px; + &:first-child { + @include round-borders-top(4px); + border-top:none; + } + + &:last-child { + @include round-borders-bottom(4px); + border:none; + } + } +} diff --git a/app/assets/stylesheets/gitlab_bootstrap/buttons.scss b/app/assets/stylesheets/gitlab_bootstrap/buttons.scss new file mode 100644 index 00000000..c838f3b2 --- /dev/null +++ b/app/assets/stylesheets/gitlab_bootstrap/buttons.scss @@ -0,0 +1,105 @@ +.btn { + background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.076, #f7f7f7), to(#d5d5d5)); + background-image: -webkit-linear-gradient(#f7f7f7 7.6%, #d5d5d5); + background-image: -moz-linear-gradient(#f7f7f7 7.6%, #d5d5d5); + background-image: -o-linear-gradient(#f7f7f7 7.6%, #d5d5d5); + border-color:#aaa; + &:hover { + @include bg-gray-gradient; + border-color:#bbb; + color:#333; + } + + &.primary { + background:#2a79A3; + border-color: #2A79A3; + background-image: -webkit-linear-gradient(#47A7b7 7.6%, #2585b5); + background-image: -moz-linear-gradient(#47A7b7 7.6%, #2585b5); + background-image: -o-linear-gradient(#47A7b7 7.6%, #2585b5); + color:#fff; + text-shadow: 0 1px 1px #268; + &:hover { + background:$blue_link; + color:#fff; + } + + &.disabled { + color:#fff; + background:#29B; + } + } + + &.success { + border-color: #4A4; + background-image: -webkit-linear-gradient(#82D482 7.6%, #22B442); + background-image: -moz-linear-gradient(#82D482 7.6%, #22B442); + background-image: -o-linear-gradient(#82D482 7.6%, #22B442); + color: #fff; + text-shadow: 0 1px 1px #141; + + &:hover { + background: #6C6; + color: #fff; + } + + &.disabled { + color:#fff; + background:#2b2; + } + } + + &.save-btn { + @extend .wide; + @extend .primary; + } + + &.cancel-btn { + float:right; + } + + &.wide { + padding-left:30px; + padding-right:30px; + } + + &.danger, + &.btn-danger { + color:#fff; + background: #DA4E49; + border-color: #BD362F; + + &:hover { + color:#fff; + background: #EE4E49; + } + } + + &.danger { + @extend .btn-danger; + } + + &.small { + @extend .btn-small; + } + + &.active { + border-color:#aaa; + background-color:#ccc; + } + + &.very_small { + font-size:11px; + padding:2px 6px; + margin:2px; + } + + &.grouped { + margin-right:7px; + float:left; + } + + &.padded { + margin-right:3px; + padding:4px 10px 4px; + } +} diff --git a/app/assets/stylesheets/gitlab_bootstrap/common.scss b/app/assets/stylesheets/gitlab_bootstrap/common.scss new file mode 100644 index 00000000..cd7145c9 --- /dev/null +++ b/app/assets/stylesheets/gitlab_bootstrap/common.scss @@ -0,0 +1,52 @@ +/** COLORS **/ +.cgray { color:gray } +.cred { color:#D12F19 } +.cgreen { color:#4a2 } +.cblack { color:#111 } +.cdark { color:#444 } +.cwhite { color:#fff!important } +.bgred { background:#F2DEDE!important } + +/** COMMON CLASSES **/ +.left { float:left } +.right { float:right!important } +.width-50p { width:50% } +.width-49p { width:49% } +.width-30p { width:30% } +.width-65p { width:65% } +.width-100p { width:100% } +.append-bottom-10 { margin-bottom:10px } +.append-bottom-20 { margin-bottom:20px } +.prepend-top-10 { margin-top:10px } +.prepend-top-20 { margin-top:20px } +.padded { padding:20px } +.ipadded { padding:20px!important } +.lborder { border-left:1px solid #eee } +.no-padding { padding:0 !important; } +.underlined { border-bottom: 1px solid #CCC; } +.no-borders { border:none; } +.vlink { color: $link_color !important; } +.borders { border: 1px solid #ccc; @include shade; } +.hint { font-style: italic; color: #999; } + +/** PILLS & TABS**/ +.nav-pills a:hover { background-color:#888; } +.nav-pills .active a { background-color: $style_color; } +.nav-tabs > li > a, .nav-pills > li > a { color:$style_color; } +.nav-tabs > .active > a { font-weight:bold; } + +/** ALERT MESSAGES **/ +.alert-message { @extend .alert; } +.alert-messag.success { @extend .alert-success; } +.alert-message.error { @extend .alert-error; } + +/** AVATARS **/ +img.avatar { float:left; margin-right:15px; width:40px; border:1px solid #ddd; padding:1px; } +img.avatar.s16 { width:16px; height:16px; } +img.avatar.s24 { width:24px; height:24px; } +img.avatar.s32 { width:32px; height:32px; } +img.lil_av { padding-left: 4px; padding-right:3px; } + +/** HELPERS **/ +.nothing_here_message { text-align:center; padding:20px; color:#777; } +p.slead { color:#456; font-size:16px; margin-bottom: 12px; font-weight: 200; line-height: 24px; } diff --git a/app/assets/stylesheets/gitlab_bootstrap/files.scss b/app/assets/stylesheets/gitlab_bootstrap/files.scss new file mode 100644 index 00000000..4ea5ed02 --- /dev/null +++ b/app/assets/stylesheets/gitlab_bootstrap/files.scss @@ -0,0 +1,156 @@ +/** + * File content holder + * + */ +.file_holder { + border:1px solid #CCC; + margin-bottom:1em; + @include solid_shade; + + .file_title { + border-bottom: 1px solid #bbb; + @include bg-gray-gradient; + margin: 0; + font-weight: normal; + font-weight: bold; + text-align: left; + color: #666; + padding: 9px 10px; + height:18px; + + .options { + float:right; + margin-top: -5px; + } + + .file_name { + color:$style_color; + font-size:14px; + text-shadow: 0 1px 1px #fff; + small { + color:#999; + font-size:13px; + } + } + } + .file_content { + background:#fff; + font-size: 11px; + + &.wiki { + font-size: 13px; + code { + padding:0 4px; + } + padding:20px; + h1, h2 { + line-height: 46px; + } + h3, h4 { + line-height: 40px; + } + } + + &.image_file { + background:#eee; + text-align:center; + img { + padding:100px; + max-width:300px; + } + } + + &.blob_file { + + } + + /** + * Blame file + */ + &.blame { + tr { + border-bottom: 1px solid #eee; + } + td { + padding:5px; + } + .author, + .blame_commit { + background:#f5f5f5; + vertical-align:top; + } + .lines { + pre { + padding:0; + margin:0; + background:none; + border:none; + } + } + } + + &.logs { + background:#eee; + max-height: 700px; + overflow-y: auto; + + ol { + margin-left:40px; + padding: 10px 0; + border-left: 1px solid #CCC; + margin-bottom:0; + background: white; + li { + color:#888; + p { + margin:0; + color:#333; + line-height:24px; + padding-left: 10px; + } + + &:hover { + background:$hover; + } + } + } + } + + /** + * Code file + */ + &.code { + padding:0; + td.code { + width: 100%; + .highlight { + margin-left: 55px; + overflow:auto; + overflow-y:hidden; + } + } + .highlight pre { + white-space: pre; + word-wrap:normal; + } + + table.highlighttable { + border: none; + } + body.project-page table.highlighttable td { border: none } + table.highlighttable tr:hover { background:none;} + + table.highlighttable pre{ + line-height:16px !important; + font-size:12px !important; + } + + table.highlighttable .linenodiv pre { + text-align: right; + padding-right: 4px; + color:#666; + } + } + } +} + diff --git a/app/assets/stylesheets/gitlab_bootstrap/lists.scss b/app/assets/stylesheets/gitlab_bootstrap/lists.scss new file mode 100644 index 00000000..402ba04b --- /dev/null +++ b/app/assets/stylesheets/gitlab_bootstrap/lists.scss @@ -0,0 +1,30 @@ +/** LISTS **/ + +ul { + /** + * List li block element #1 + * + */ + .wll { + background-color: #FFF; + padding: 10px 5px; + min-height: 20px; + border-bottom: 1px solid #eee; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); + + &.smoke { background-color:#f5f5f5; } + &:hover { background:$hover; } + &:last-child { border:none } + .author { color: #999; } + + p { + padding-top:5px; + margin:0; + color:#222; + img { + position:relative; + top:3px; + } + } + } +} diff --git a/app/assets/stylesheets/gitlab_bootstrap/tables.scss b/app/assets/stylesheets/gitlab_bootstrap/tables.scss new file mode 100644 index 00000000..f78b1dee --- /dev/null +++ b/app/assets/stylesheets/gitlab_bootstrap/tables.scss @@ -0,0 +1,41 @@ +table { + width:100%; + th { + padding-top: 9px; + font-weight: bold; + vertical-align: middle; + } + th, td { + padding: 10px 10px 9px; + line-height: 18px; + text-align: left; + } + + &.bordered-table { + border: 1px solid #DDD; + border-collapse: separate; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + &.zebra-striped { + @extend .table-striped; + } +} + +table.admin-table { + @extend .table-bordered; + @extend .zebra-striped; + @include solid_shade; + th { + border-color: #CCC; + border-bottom: 1px solid #bbb; + @include bg-gray-gradient; + } +} + +table.no-borders { + border:none; + tr, td { border:none } +} diff --git a/app/assets/stylesheets/gitlab_bootstrap/typography.scss b/app/assets/stylesheets/gitlab_bootstrap/typography.scss new file mode 100644 index 00000000..97e85492 --- /dev/null +++ b/app/assets/stylesheets/gitlab_bootstrap/typography.scss @@ -0,0 +1,71 @@ +/** + * Headers + * + */ +h3, h4, h5, h6 { line-height: 36px; } +h5 { font-size:14px; } +h3.page_title { + color:#456; + font-size:20px; + font-weight: normal; + line-height: 28px; +} + +/** CODE **/ +pre { + font-family:'Menlo', 'Liberation Mono', 'Consolas', 'Courier New', 'andale mono','lucida console',monospace; + + &.dark { + background: #333; + color:#f5f5f5; + } +} + +/** + * Links + * + */ +a { + outline: none; + color: $link_color; + &:hover { + text-decoration:none; + color: $blue_link; + } + + &.btn { + color: $style_color; + &:hover { + color: $style_color; + } + } + + &.dark { + color: $style_color; + } + + &.lined { + text-decoration:underline; + &:hover { text-decoration:underline; } + } + + &.gray { + color:gray; + } + + &.supp_diff_link { + text-align:center; + padding:20px 0; + background:#f1f1f1; + width:100%; + float:left; + } + + &.neib { + margin-right:15px; + } +} + +a:focus { + outline: none; +} diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index ad8be0bc..be27d754 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -2,29 +2,13 @@ @import "bootstrap-responsive"; /** GITLAB colors **/ -$text_color:#222; -$lite_text_color: #666; -$link_color:#2A79A3; -$active_link_color:#2FA0BB; -$active_bg_color:#79C3E0; -$active_bd_color: #2FA0BB; -$border_color:#CCC; -$lite_border_color:#EEE; -$min_app_width:980px; -$max_app_width:980px; -$app_padding:20px; -$bg_color: #FFF; -$styled_border_color: #2FA0BB; -$color: "#4BB8D2"; +$link_color:#3A89A3; $blue_link: #2fa0bb; - - -/** Style colors **/ -$style_color: #474D57; -$hover: #FDF5D9; +$style_color: #474d57; +$hover: #fdf5d9; /** GITLAB Fonts **/ -@font-face { font-family: Korolev; src: url('korolev-medium-compressed.otf'); } +@font-face { font-family: Korolev; src: url('korolev-medium-compressed.otf'); } /** MIXINS **/ @mixin shade { @@ -72,7 +56,20 @@ $hover: #FDF5D9; border-radius: $radius; } +@mixin bg-gray-gradient { + background:#eee; + background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); + background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf); + background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf); + background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); +} +@mixin bg-dark-gray-gradient { + background:#eee; + background-image: -webkit-linear-gradient(#e9e9e9, #d7d7d7); + background-image: -moz-linear-gradient(#e9e9e9, #d7d7d7); + background-image: -o-linear-gradient(#e9e9e9, #d7d7d7); +} /** * Header of application. @@ -113,7 +110,13 @@ $hover: #FDF5D9; * Overrides some styles of twitter bootstrap. * Also give some common classes for gitlab app */ -@import "gitlab_bootstrap.scss"; +@import "gitlab_bootstrap/common.scss"; +@import "gitlab_bootstrap/typography.scss"; +@import "gitlab_bootstrap/buttons.scss"; +@import "gitlab_bootstrap/blocks.scss"; +@import "gitlab_bootstrap/files.scss"; +@import "gitlab_bootstrap/tables.scss"; +@import "gitlab_bootstrap/lists.scss"; /** diff --git a/app/assets/stylesheets/projects.css.scss b/app/assets/stylesheets/projects.css.scss deleted file mode 100644 index 4bdf5dee..00000000 --- a/app/assets/stylesheets/projects.css.scss +++ /dev/null @@ -1,385 +0,0 @@ -.git_url_wrapper { margin-right:50px } - -.sidebar aside a{ - display: block; - position: relative; - padding: 15px 10px; - margin: 10px 0 0 0; - - font-size:13px; - font-weight:bold; - color:#333; - - &.current { - color: white; - background: $active_bg_color; - border: 1px solid $active_bd_color; - border-radius:5px; - - -webkit-border-top-right-radius: 0; - -webkit-border-bottom-right-radius: 0; - -moz-border-radius-topright: 0px; - -moz-border-radius-bottomright: 0px; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - margin-right: -1px; - } -} - -body table .commit a{color: #{$blue_link}} -body table th, body table td{ border-bottom: 1px solid #DEE2E3;} -body .fixed{position: fixed; } - -/** File stat **/ -.file_stats { - span { - img { - width:14px; - float:left; - margin-right: 6px; - padding:2px 0; - } - } -} - -.round-borders { - @include round-borders-all(4px); - padding: 4px 0px; -} - -table.round-borders { - float:left; - text-align: left; -} - - - -/** PROJECTS **/ -input.ssh_project_url { - padding:5px; - margin:0px; - float:right; - width:400px; - text-align:center; -} - -#projects-list .project { - height:50px; -} - -#tree-slider .tree-item, -#projects-list .project, -#snippets-table .snippet, -#issues-table .issue{ - cursor:pointer; -} - -.clear { - clear: both; -} - - - -#user_projects_limit{ - width: 60px; -} - -.handle:hover{ - cursor: move; -} - -.project-refs-form { - span { - background: none !important; - position:static !important; - width:auto !important; - height: auto !important; - } -} - -.project-refs-select { - width:200px; -} - -.filter .left { margin-right:15px; } - -body table .commit { - a.tree-commit-link { - color:#444; - &:hover { - text-decoration:underline; - } - } -} - -/** NEW PROJECT **/ -.new-project-hodler { - .icon span { background-position: -31px -70px; } - td { border-bottom: 1px solid #DEE2E3; } -} - -/** Feed entry **/ -.commit, -.snippet, -.message { - .title { - color:#666; - a { color:#666 !important; } - p { margin-top:0px; } - } - .author { color: #999 } -} - -/** JQuery UI **/ -.ui-autocomplete { @include round-borders-all(5px); } -.ui-menu-item { cursor: pointer } -.ui-selectmenu{ - @include round-borders-all(4px); - margin-right:10px; - font-size:1.5em; - height:auto; - font-weight:bold; - .ui-selectmenu-status { - padding:3px 10px; - } -} - -#holder { - background:#FAFAFA; - border: 1px solid #EEE; - cursor: move; - height: 70%; - overflow: hidden; -} - -/* Project Dashboard Page */ -html, body { height: 100%; } - -.news-feed h2{float: left;} -.news-feed .project-updates {margin-bottom: 20px; display: block; width: 100%;} -.news-feed .project-updates .data{ padding: 0} -.news-feed .project-updates a.project-update {padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;} -.news-feed .project-updates a.project-update:last-child{border-bottom: 0} -.news-feed .project-updates a.project-update img{float: left; margin-right: 10px;} -.news-feed .project-updates a.project-update span.update-title, .dashboard-page .news-feed .project-updates li a span.update-author{display: block;} -.news-feed .project-updates a.project-update span.update-title{margin-bottom: 10px} -.news-feed .project-updates a.project-update span.update-author{color: #999; font-weight: normal; font-style: italic;} -.news-feed .project-updates a.project-update span.update-author strong{font-weight: bold; font-style: normal;} -/* eo Dashboard Page */ - - -/** Update entry **/ -.update-data { padding: 0 } -.update-data { width:100%; } -.update-data.ui-box .data { padding:0; } -a.update-item {padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;} -a.update-item:last-child{border-bottom: 0} -a.update-item img{float: left; margin-right: 10px;} -a.update-item span.update-title, .dashboard-page .news-feed .project-updates li a span.update-author{display: block;} -a.update-item span.update-title{margin-bottom: 10px} -a.update-item span.update-author{color: #999; font-weight: normal; font-style: italic;} -a.update-item span.update-author strong{font-weight: bold; font-style: normal;} - - -body .team_member_new .span-6, .team_member_edit .span-6{ padding:10px 0; } - -body.projects-page input.text.git-url.project_list_url { width:165px; } - - -body table.no-borders th { - background:none; - border-bottom:1px solid #CCC; - color:#333; -} - -body table.no-borders tr, -body table.no-borders td{ - border:none; -} - -.ajax-tab-loading { - padding:40px; - display:none; -} - -#tree-content-holder { float:left; width:100%; } - -#tree-readme-holder { - float:left; - width:100%; - - .readme { - @include round-borders-all(4px); - padding: 4px 15px; - background:#F7F7F7; - } -} - - - -/* Commit Page */ -.entity-info {float: right;} -.entity-button{ - background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.192, #fff), to(#f4f4f4)); - background-image: -webkit-linear-gradient(#fff 19.2%, #f4f4f4); - background-image: -moz-linear-gradient(#fff 19.2%, #f4f4f4); - background-image: -o-linear-gradient(#fff 19.2%, #f4f4f4); - box-shadow: 0 -1px 0 white inset; - display: block; - border: 1px solid #eee; - border-radius: 5px; - margin-bottom: 2px; - position: relative; - padding: 4px 10px; - font-size: 11px; - padding-right: 20px; -} - -.entity-button i{ - background: url('images.png') no-repeat -138px -27px; - width: 6px; - height: 9px; - float: right; - position: absolute; - top: 6px; - right: 5px; -} -.box-arrow{float: right; background: #E3E5EA; padding: 10px; border-radius: 5px; margin-top: 2px; text-shadow: none; color: #999; margin: 1.5em 0;} - -h4.dash-tabs { - margin: 0; - border-bottom: 1px solid #ccc; - padding: 10px 10px; - font-size: 11px; - padding-left:20px; - font-weight: bold; text-transform: uppercase; - background: #F7F7F7; - margin-bottom:20px; - height:13px; - -} - -.dash-button { - border-right: 1px solid #ddd; - background:none; - padding: 10px 15px; - float:left; - position:relative; - top:-10px; - left:0px; - height:13px; - - &:first-child { - border-left: 1px solid #ddd; - } - &.active { - background: #eaeaea; - } -} - - -.dashboard-loader { - float:right; - margin-right:30px; - display:none; -} - - -.merge-tabs { - margin: 0; - border: 1px solid #ccc; - padding: 5px; - font-size: 12px; - background: #F7F7F7; - margin-bottom:20px; - height:26px; - - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - - .tab { - font-weight: bold; - border-right: 1px solid #ddd; - background:none; - padding: 10px; - min-width:60px; - float:left; - position:relative; - top:-5px; - left:-5px; - height:16px; - padding-left:34px; - - span { - width: 20px; - height: 20px; - display: inline-block; - position: absolute; - left: 8px; - top: 8px; - } - - &.active { - background: #eaeaea; - } - } -} -.merge-tabs.repository .tab span{ background: url("images.png") no-repeat -38px -77px; } -.activities-tab span { background: url("images.png") no-repeat -161px -1px; } -.stat-tab span, -.team-tab span, -.snippets-tab span { background: url("images.png") no-repeat -38px -77px; } -.files-tab span { background: url("images.png") no-repeat -112px -23px; } - -.merge-notes-tab span { background: url("images.png") no-repeat -161px -1px; } -.merge-commits-tab span { background: url("images.png") no-repeat -86px 1px; } -.merge-diffs-tab span { background: url("images.png") no-repeat -118px 1px; } -.merge-tabs .dashboard-loader { padding:8px; } - -.user-mention { - color: #2FA0BB; - font-weight: bold; -} - -.author { - color: #999; -} - - - - -.dark_scheme_box { - padding:20px 0; - - label { - float:left; - box-shadow: 0 0px 5px rgba(0,0,0,.3); - - img { - } - } -} - -a.project-update.titled { - position: relative; - padding-left: 235px !important; - - .title-block { - padding: 10px; - width: 205px; - position: absolute; - left: 0; - top: 0; - } -} - -.add_new { - float: right; - background: #A6B807; - color: white; - padding: 4px 10px; - @include round-borders-all(4px); - font-size:11px; - margin: 10px 0; -} diff --git a/app/assets/stylesheets/ref_select.scss b/app/assets/stylesheets/ref_select.scss index 6f6a1bc9..5b52e11b 100644 --- a/app/assets/stylesheets/ref_select.scss +++ b/app/assets/stylesheets/ref_select.scss @@ -33,9 +33,7 @@ } .chzn-single { - background:#ddd; - //border:none; - //box-shadow:none; + @include bg-gray-gradient; div { background:transparent; diff --git a/app/assets/stylesheets/sections/commits.scss b/app/assets/stylesheets/sections/commits.scss index e2db701d..75e38aee 100644 --- a/app/assets/stylesheets/sections/commits.scss +++ b/app/assets/stylesheets/sections/commits.scss @@ -206,4 +206,24 @@ min-width:65px; font-family: 'Menlo', 'Liberation Mono', 'Consolas', 'Courier New', 'andale mono','lucida console',monospace; } + + .commit-author-name { + color: #777; + } +} + +.diff_file_header a, +.file_stats a { + color:$style_color; +} + +.file_stats { + span { + img { + width:14px; + float:left; + margin-right:6px; + padding:2px 0; + } + } } diff --git a/app/assets/stylesheets/sections/graph.scss b/app/assets/stylesheets/sections/graph.scss index 33d91de5..2aa4463e 100644 --- a/app/assets/stylesheets/sections/graph.scss +++ b/app/assets/stylesheets/sections/graph.scss @@ -6,11 +6,7 @@ h4 { padding:0 10px; border-bottom: 1px solid #bbb; - background:#eee; - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); - background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); + @include bg-gray-gradient; } .graph { diff --git a/app/assets/stylesheets/sections/issues.scss b/app/assets/stylesheets/sections/issues.scss index 1b61ec3f..230a7aea 100644 --- a/app/assets/stylesheets/sections/issues.scss +++ b/app/assets/stylesheets/sections/issues.scss @@ -65,6 +65,11 @@ input.check_all_issues { } } +@media (min-width: 800px) { .issues_filters select { width:160px; } } +@media (min-width: 1000px) { .issues_filters select { width:200px; } } +@media (min-width: 1200px) { .issues_filters select { width:220px; } } + + #issues-table-holder { .issues_filters { form { @@ -99,3 +104,11 @@ input.check_all_issues { #update_status { width:100px; } + +/** + * Milestones list + * + */ +.milestone { + @extend .wll; +} diff --git a/app/assets/stylesheets/sections/merge_requests.scss b/app/assets/stylesheets/sections/merge_requests.scss index ec84a64e..73171915 100644 --- a/app/assets/stylesheets/sections/merge_requests.scss +++ b/app/assets/stylesheets/sections/merge_requests.scss @@ -11,23 +11,6 @@ background:#f1f1f1; } - .commit { - margin:0; - padding:0; - padding: 5px; - margin-bottom: 5px; - - .committed_ago { - display:none; - } - .browse_code_link_holder { - display:none; - } - list-style:none; - &:hover { - background:none; - } - } } /** @@ -55,6 +38,7 @@ background: #CEB; .accept_merge_request { + font-size:13px; float:left; } .remove_branch_holder { @@ -99,3 +83,42 @@ li.merge_request { @extend .padded; @extend .append-bottom-10; } + +.label_branch { + @include round-borders-all(4px); + padding:2px 4px; + border:none; + font-size:13px; + background: #474D57; + color:#fff; + font-weight:bold; + font-family: monospace; +} + +.mr_source_commit, +.mr_target_commit { + .commit { + margin:0; + padding:0; + padding: 5px; + margin-bottom: 5px; + .avatar { position:relative } + .row_title { + color:#444; + } + .commit-author-name, + .dash, + .committed_ago, + .browse_code_link_holder { + display:none; + } + list-style:none; + &:hover { + background:none; + } + } +} + +.mr_direction_tip { + margin-top:40px +} diff --git a/app/assets/stylesheets/sections/nav.scss b/app/assets/stylesheets/sections/nav.scss index 4a773644..097e8197 100644 --- a/app/assets/stylesheets/sections/nav.scss +++ b/app/assets/stylesheets/sections/nav.scss @@ -6,13 +6,9 @@ ul.main_menu { border-radius: 4px; margin: auto; margin:30px 0; - background:#eee; - border:1px solid #bbb; + border:1px solid #AAA; height:37px; - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); - background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); + @include bg-gray-gradient; position:relative; overflow:hidden; @include shade; @@ -89,7 +85,7 @@ ul.main_menu { line-height:36px; color: $style_color; text-shadow:0 1px 1px white; - + padding:0 10px; } } /* diff --git a/app/assets/stylesheets/sections/notes.scss b/app/assets/stylesheets/sections/notes.scss index 30587ef5..6a965fa4 100644 --- a/app/assets/stylesheets/sections/notes.scss +++ b/app/assets/stylesheets/sections/notes.scss @@ -2,7 +2,7 @@ * Notes * */ -#notes-list, +#notes-list, #new_notes_list { display:block; list-style:none; @@ -10,7 +10,7 @@ padding:0px; } -#new_notes_list li:last-child{ +#new_notes_list li:last-child{ border-bottom:1px solid #aaa; } @@ -30,16 +30,24 @@ } #new_note { - #note_note { - height:25px; + .note-text { + height:40px; } .attach_holder { display:none; } } -.note { - padding: 8px 0; +.preview_note { + margin: 2px; + border: 1px solid #ddd; + padding: 10px; + min-height: 60px; + background:#f5f5f5; +} + +.note { + padding: 8px 0; border-bottom: 1px solid #eee; overflow: hidden; display: block; @@ -49,16 +57,16 @@ .note-author { color: $style_color;} .note-title { margin-left:45px; padding-top: 5px;} - .avatar { + .avatar { margin-top:3px; } - .delete-note { - display:none; + .delete-note { + display:none; float:right; } - &:hover { + &:hover { .delete-note { display:block; } } } @@ -72,18 +80,18 @@ p.notify_controls span{ font-weight: 700; } -tr.line_notes_row { +tr.line_notes_row { border-bottom:1px solid #DDD; border-left: 7px solid #2A79A3; - &.reply { + &.reply { background:#eee; border-left: 7px solid #2A79A3; border-top:1px solid #ddd; - td { + td { padding:7px 10px; } - a.line_note_reply_link { + a.line_note_reply_link { @include round-borders-all(4px); padding: 3px 10px; margin-left:5px; @@ -92,9 +100,9 @@ tr.line_notes_row { border-color: #2A79A3; } } - ul { + ul { margin:0; - li { + li { padding:0; border:none; } @@ -103,26 +111,26 @@ tr.line_notes_row { .line_notes_row, .per_line_form { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } -.per_line_form { +.per_line_form { background:#f5f5f5; border-top:1px solid #eee; form { margin: 0; } - td { + td { border-bottom:1px solid #ddd; } - .note_actions { + .note_actions { margin:0; padding-top: 10px; - .buttons { + .buttons { float:left; width:300px; } - .options { - .labels { + .options { + .labels { float:left; padding-left:10px; - label { + label { padding: 6px 0; margin: 0; width:120px; @@ -132,7 +140,7 @@ tr.line_notes_row { } } -td .line_note_link { +td .line_note_link { position:absolute; margin-left:-70px; margin-top:-10px; @@ -144,14 +152,14 @@ td .line_note_link { opacity: 0.0; filter: alpha(opacity=0); - &:hover { + &:hover { opacity: 1.0; filter: alpha(opacity=100); } } .diff_file_content tr.line_holder:hover > td { background: $hover !important; } -.diff_file_content tr.line_holder:hover > td .line_note_link { +.diff_file_content tr.line_holder:hover > td .line_note_link { opacity: 1.0; filter: alpha(opacity=100); } @@ -169,8 +177,8 @@ td .line_note_link { margin: 0; } - .note_advanced_opts { - h6 { + .note_advanced_opts { + h6 { line-height: 32px; padding-right: 15px; } @@ -183,7 +191,7 @@ td .line_note_link { overflow:hidden; margin:0 0 5px !important; - .input_file { + .input_file { .file_upload { position: absolute; right:14px; @@ -196,7 +204,7 @@ td .line_note_link { height:28px; overflow:hidden; } - .input-file { + .input-file { width: 260px; height: 41px; float: right; @@ -204,3 +212,8 @@ td .line_note_link { } } } + +.note-text { + border: 1px solid #aaa; + box-shadow:none; +} diff --git a/app/assets/stylesheets/sections/projects.scss b/app/assets/stylesheets/sections/projects.scss index 8c79e45e..721b569d 100644 --- a/app/assets/stylesheets/sections/projects.scss +++ b/app/assets/stylesheets/sections/projects.scss @@ -1,17 +1,44 @@ -.projects { +.projects { @extend .row; .activities { } - .side { + .side { @extend .span4; @extend .right; - .projects_box { - h5 { + .projects_box { + h5 { color:$style_color; font-size:16px; text-shadow: 0 1px 1px #fff; + padding: 2px 10px; + } + ul { + li { + padding:0; + a { + display:block; + .project_name { + color:#4fa2bd; + font-size:14px; + line-height:18px; + } + .arrow { + float:right; + padding:10px; + margin:0; + } + .last_activity { + padding-top:5px; + display:block; + span, strong { + font-size:12px; + color:#666; + } + } + } + } } @extend .leftbar; @extend .ui-box; @@ -19,21 +46,47 @@ } } -.new_project, -.edit_project { - .project_name_holder { +.new_project, +.edit_project { + .project_name_holder { input, - label { + label { font-size:16px; line-height:20px; padding:8px; } - label { + label { color:#888; } - .btn { - padding:6px; + .btn { + padding:6px 10px; margin-left:10px; + margin-bottom:8px; } } + .adv_settings { + h6 { margin-left:40px; } + } +} + +.project_clone_panel { + @include border-radius(4px); + @include bg-gray-gradient; + padding: 4px 7px; + border: 1px solid #CCC; + margin-bottom:5px; + input[type=text] { + border: 1px solid #BBB; + } +} + +.save-project-loader { + img { + margin-top:50px; + margin-bottom:50px; + } + h3 { + @extend .page_title; + } + } diff --git a/app/assets/stylesheets/sections/tree.scss b/app/assets/stylesheets/sections/tree.scss index 2663fc9a..891f5e20 100644 --- a/app/assets/stylesheets/sections/tree.scss +++ b/app/assets/stylesheets/sections/tree.scss @@ -72,11 +72,7 @@ th { border-color: #CCC; border-bottom: 1px solid #bbb; - background:#eee; - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); - background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf); - background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); + @include bg-gray-gradient; } } diff --git a/app/assets/stylesheets/themes/ui_mars.scss b/app/assets/stylesheets/themes/ui_mars.scss index 2808ad32..c630f388 100644 --- a/app/assets/stylesheets/themes/ui_mars.scss +++ b/app/assets/stylesheets/themes/ui_mars.scss @@ -20,6 +20,10 @@ .fbtn { .btn { + i { + position: relative; + top: 1px; + } margin-left:8px; background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #595D63), to(#31363E)); background-image: -webkit-linear-gradient(#595D63 6.6%, #31363E); @@ -32,6 +36,10 @@ background-image: -moz-linear-gradient(#595D63 6.6%, #202227); background-image: -o-linear-gradient(#595D63 6.6%, #202227); background-position:0 0; + color:#fff; + i { + @extend .icon-white; + } } border: 1px solid #31363E; diff --git a/app/contexts/merge_requests_load.rb b/app/contexts/merge_requests_load.rb index 6778db3b..e2f68e38 100644 --- a/app/contexts/merge_requests_load.rb +++ b/app/contexts/merge_requests_load.rb @@ -1,13 +1,13 @@ class MergeRequestsLoad < BaseContext def execute - type = params[:f].to_i + type = params[:f] merge_requests = project.merge_requests merge_requests = case type - when 1 then merge_requests - when 2 then merge_requests.closed - when 3 then merge_requests.opened.assigned(current_user) + when 'all' then merge_requests + when 'closed' then merge_requests.closed + when 'assigned-to-me' then merge_requests.opened.assigned(current_user) else merge_requests.opened end.page(params[:page]).per(20) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 7c1941ec..9aab250d 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -14,6 +14,10 @@ class ApplicationController < ActionController::Base render "errors/gitolite", layout: "error" end + rescue_from Gitlab::Gitolite::InvalidKey do |exception| + render "errors/invalid_ssh_key", layout: "error" + end + rescue_from Encoding::CompatibilityError do |exception| render "errors/encoding", layout: "error", status: 404 end diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 889a7d98..a47b3843 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -60,7 +60,13 @@ class IssuesController < ApplicationController @issue.save respond_to do |format| - format.html { redirect_to project_issue_path(@project, @issue) } + format.html do + if @issue.valid? + redirect_to project_issue_path(@project, @issue) + else + render :new + end + end format.js end end @@ -162,10 +168,10 @@ class IssuesController < ApplicationController def issues_filter { - all: "1", - closed: "2", - to_me: "3", - open: "0" + all: "all", + closed: "closed", + to_me: "assigned-to-me", + open: "open" } end end diff --git a/app/controllers/labels_controller.rb b/app/controllers/labels_controller.rb new file mode 100644 index 00000000..e703f822 --- /dev/null +++ b/app/controllers/labels_controller.rb @@ -0,0 +1,25 @@ +class LabelsController < ApplicationController + before_filter :authenticate_user! + before_filter :project + before_filter :module_enabled + + layout "project" + + # Authorize + before_filter :add_project_abilities + + # Allow read any issue + before_filter :authorize_read_issue! + + respond_to :js, :html + + def index + @labels = @project.issues.tag_counts_on(:labels).order('count DESC') + end + + protected + + def module_enabled + return render_404 unless @project.issues_enabled + end +end diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb index 4938a294..187bb407 100644 --- a/app/controllers/merge_requests_controller.rb +++ b/app/controllers/merge_requests_controller.rb @@ -103,10 +103,12 @@ class MergeRequestsController < ApplicationController def branch_from @commit = project.commit(params[:ref]) + @commit = CommitDecorator.decorate(@commit) end def branch_to @commit = project.commit(params[:ref]) + @commit = CommitDecorator.decorate(@commit) end protected diff --git a/app/controllers/milestones_controller.rb b/app/controllers/milestones_controller.rb index 7acb3781..10f089f1 100644 --- a/app/controllers/milestones_controller.rb +++ b/app/controllers/milestones_controller.rb @@ -17,8 +17,8 @@ class MilestonesController < ApplicationController respond_to :html def index - @milestones = case params[:f].to_i - when 1; @project.milestones + @milestones = case params[:f] + when 'all'; @project.milestones else @project.milestones.active end diff --git a/app/controllers/omniauth_callbacks_controller.rb b/app/controllers/omniauth_callbacks_controller.rb index d19931e9..d472936b 100644 --- a/app/controllers/omniauth_callbacks_controller.rb +++ b/app/controllers/omniauth_callbacks_controller.rb @@ -12,8 +12,7 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController def ldap # We only find ourselves here if the authentication to LDAP was successful. - info = request.env["omniauth.auth"]["info"] - @user = User.find_for_ldap_auth(info) + @user = User.find_for_ldap_auth(request.env["omniauth.auth"], current_user) if @user.persisted? @user.remember_me = true end diff --git a/app/controllers/team_members_controller.rb b/app/controllers/team_members_controller.rb index 0cc58c3e..0846f096 100644 --- a/app/controllers/team_members_controller.rb +++ b/app/controllers/team_members_controller.rb @@ -9,6 +9,7 @@ class TeamMembersController < ApplicationController def show @team_member = project.users_projects.find(params[:id]) + @events = @team_member.user.recent_events.where(:project_id => @project.id).limit(7) end def new diff --git a/app/decorators/application_decorator.rb b/app/decorators/application_decorator.rb index 7bc88648..3023699e 100644 --- a/app/decorators/application_decorator.rb +++ b/app/decorators/application_decorator.rb @@ -1,4 +1,4 @@ -class ApplicationDecorator < Drapper::Base +class ApplicationDecorator < Draper::Base # Lazy Helpers # PRO: Call Rails helpers without the h. proxy # ex: number_to_currency(model.price) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 51569b06..3dafb753 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -2,10 +2,13 @@ require 'digest/md5' module ApplicationHelper def gravatar_icon(user_email = '', size = 40) - return unless user_email - gravatar_host = request.ssl? ? "https://secure.gravatar.com" : "http://www.gravatar.com" - user_email.strip! - "#{gravatar_host}/avatar/#{Digest::MD5.hexdigest(user_email.downcase)}?s=#{size}&d=identicon" + if Gitlab.config.disable_gravatar? || user_email.blank? + 'no_avatar.png' + else + gravatar_prefix = request.ssl? ? "https://secure" : "http://www" + user_email.strip! + "#{gravatar_prefix}.gravatar.com/avatar/#{Digest::MD5.hexdigest(user_email.downcase)}?s=#{size}&d=identicon" + end end def request_protocol @@ -75,16 +78,16 @@ module ApplicationHelper end def show_last_push_widget?(event) - event && + event && event.last_push_to_non_root? && !event.rm_ref? && - event.project && + event.project && event.project.merge_requests_enabled end def tab_class(tab_key) active = case tab_key - + # Project Area when :wall; wall_tab? when :wiki; controller.controller_name == "wikis" @@ -123,4 +126,13 @@ module ApplicationHelper def hexdigest(string) Digest::SHA1.hexdigest string end + + def project_last_activity project + activity = project.last_activity + if activity && activity.created_at + time_ago_in_words(activity.created_at) + " ago" + else + "Never" + end + end end diff --git a/app/helpers/gitlab_markdown_helper.rb b/app/helpers/gitlab_markdown_helper.rb index 24bc3e85..9da695b5 100644 --- a/app/helpers/gitlab_markdown_helper.rb +++ b/app/helpers/gitlab_markdown_helper.rb @@ -1,9 +1,18 @@ module GitlabMarkdownHelper + # Replaces references (i.e. @abc, #123, !456, ...) in the text with links to + # the appropriate items in Gitlab. + # + # text - the source text + # html_options - extra options for the reference links as given to link_to + # + # note: reference links will only be generated if @project is set + # + # see Gitlab::Markdown for details on the supported syntax def gfm(text, html_options = {}) return text if text.nil? return text if @project.nil? - # Extract pre blocks + # Extract pre blocks so they are not altered # from http://github.github.com/github-flavored-markdown/ extractions = {} text.gsub!(%r{
.*?
|.*?}m) do |match| @@ -22,10 +31,18 @@ module GitlabMarkdownHelper extractions[$1] end - text.html_safe + sanitize text.html_safe, attributes: ActionView::Base.sanitized_allowed_attributes + %w(id class ) end - # circumvents nesting links, which will behave bad in browsers + # Use this in places where you would normally use link_to(gfm(...), ...). + # + # It solves a problem occurring with nested links (i.e. + # "outer text gfm ref more outer text"). This will not be + # interpreted as intended. Browsers will parse something like + # "outer text gfm ref more outer text" (notice the last part is + # not linked any more). link_to_gfm corrects that. It wraps all parts to + # explicitly produce the correct linking behavior (i.e. + # "outer text gfm ref more outer text"). def link_to_gfm(body, url, html_options = {}) gfm_body = gfm(body, html_options) @@ -37,17 +54,24 @@ module GitlabMarkdownHelper end def markdown(text) - @__renderer ||= Redcarpet::Markdown.new(Redcarpet::Render::GitlabHTML.new(self, filter_html: true, with_toc_data: true), { - no_intra_emphasis: true, - tables: true, - fenced_code_blocks: true, - autolink: true, - strikethrough: true, - lax_html_blocks: true, - space_after_headers: true, - superscript: true - }) + unless @markdown + gitlab_renderer = Redcarpet::Render::GitlabHTML.new(self, + # see https://github.com/vmg/redcarpet#darling-i-packed-you-a-couple-renderers-for-lunch- + filter_html: true, + with_toc_data: true, + hard_wrap: true) + @markdown ||= Redcarpet::Markdown.new(gitlab_renderer, + # see https://github.com/vmg/redcarpet#and-its-like-really-simple-to-use + no_intra_emphasis: true, + tables: true, + fenced_code_blocks: true, + autolink: true, + strikethrough: true, + lax_html_blocks: true, + space_after_headers: true, + superscript: true) + end - @__renderer.render(text).html_safe + @markdown.render(text).html_safe end end diff --git a/app/mailers/notify.rb b/app/mailers/notify.rb index 9563fdbc..91136fee 100644 --- a/app/mailers/notify.rb +++ b/app/mailers/notify.rb @@ -12,74 +12,117 @@ class Notify < ActionMailer::Base def new_user_email(user_id, password) @user = User.find(user_id) @password = password - mail(to: @user.email, subject: "gitlab | Account was created for you") + mail(to: @user.email, subject: subject("Account was created for you")) end def new_issue_email(issue_id) @issue = Issue.find(issue_id) @project = @issue.project - mail(to: @issue.assignee_email, subject: "gitlab | new issue ##{@issue.id} | #{@issue.title} | #{@project.name}") + mail(to: @issue.assignee_email, subject: subject("new issue ##{@issue.id}", @issue.title)) end def note_wall_email(recipient_id, note_id) - recipient = User.find(recipient_id) @note = Note.find(note_id) @project = @note.project - mail(to: recipient.email, subject: "gitlab | #{@project.name}") + mail(to: recipient(recipient_id), subject: subject) end def note_commit_email(recipient_id, note_id) - recipient = User.find(recipient_id) @note = Note.find(note_id) @commit = @note.target @commit = CommitDecorator.decorate(@commit) @project = @note.project - mail(to: recipient.email, subject: "gitlab | note for commit #{@commit.short_id} | #{@commit.title} | #{@project.name}") + mail(to: recipient(recipient_id), subject: subject("note for commit #{@commit.short_id}", @commit.title)) end def note_merge_request_email(recipient_id, note_id) - recipient = User.find(recipient_id) @note = Note.find(note_id) @merge_request = @note.noteable @project = @note.project - mail(to: recipient.email, subject: "gitlab | note for merge request !#{@merge_request.id} | #{@project.name}") + mail(to: recipient(recipient_id), subject: subject("note for merge request !#{@merge_request.id}")) end def note_issue_email(recipient_id, note_id) - recipient = User.find(recipient_id) @note = Note.find(note_id) @issue = @note.noteable @project = @note.project - mail(to: recipient.email, subject: "gitlab | note for issue ##{@issue.id} | #{@project.name}") + mail(to: recipient(recipient_id), subject: subject("note for issue ##{@issue.id}")) end def note_wiki_email(recipient_id, note_id) - recipient = User.find(recipient_id) @note = Note.find(note_id) @wiki = @note.noteable @project = @note.project - mail(to: recipient.email, subject: "gitlab | note for wiki | #{@project.name}") + mail(to: recipient(recipient_id), subject: subject("note for wiki")) end def new_merge_request_email(merge_request_id) @merge_request = MergeRequest.find(merge_request_id) @project = @merge_request.project - mail(to: @merge_request.assignee_email, subject: "gitlab | new merge request !#{@merge_request.id} | #{@merge_request.title} | #{@project.name}") + mail(to: @merge_request.assignee_email, subject: subject("new merge request !#{@merge_request.id}", @merge_request.title)) end def reassigned_merge_request_email(recipient_id, merge_request_id, previous_assignee_id) - recipient = User.find(recipient_id) @merge_request = MergeRequest.find(merge_request_id) @previous_assignee ||= User.find(previous_assignee_id) @project = @merge_request.project - mail(to: recipient.email, subject: "gitlab | changed merge request !#{@merge_request.id} | #{@merge_request.title} | #{@project.name}") + mail(to: recipient(recipient_id), subject: subject("changed merge request !#{@merge_request.id}", @merge_request.title)) end def reassigned_issue_email(recipient_id, issue_id, previous_assignee_id) - recipient = User.find(recipient_id) @issue = Issue.find(issue_id) @previous_assignee ||= User.find(previous_assignee_id) @project = @issue.project - mail(to: recipient.email, subject: "gitlab | changed issue ##{@issue.id} | #{@issue.title} | #{@project.name}") + mail(to: recipient(recipient_id), subject: subject("changed issue ##{@issue.id}", @issue.title)) + end + + def project_access_granted_email(user_project_id) + @users_project = UsersProject.find user_project_id + @project = @users_project.project + mail(to: @users_project.user.email, + subject: subject("access to project was granted")) + end + + def issue_status_changed_email(recipient_id, issue_id, status, updated_by_user_id) + @issue = Issue.find issue_id + @issue_status = status + @updated_by = User.find updated_by_user_id + mail(to: recipient(recipient_id), + subject: subject("changed issue ##{@issue.id}", @issue.title)) + end + + private + + # Look up a User by their ID and return their email address + # + # recipient_id - User ID + # + # Returns a String containing the User's email address. + def recipient(recipient_id) + if recipient = User.find(recipient_id) + recipient.email + end + end + + # Formats arguments into a String suitable for use as an email subject + # + # extra - Extra Strings to be inserted into the subject + # + # Examples + # + # >> subject('Lorem ipsum') + # => "gitlab | Lorem ipsum" + # + # # Automatically inserts Project name when @project is set + # >> @project = Project.last + # => # + # >> subject('Lorem ipsum') + # => "gitlab | Lorem ipsum | Ruby on Rails" + # + # # Accepts multiple arguments + # >> subject('Lorem ipsum', 'Dolor sit amet') + # => "gitlab | Lorem ipsum | Dolor sit amet" + def subject(*extra) + "gitlab | " << extra.join(' | ') << (@project ? " | #{@project.name}" : "") end end diff --git a/app/models/key.rb b/app/models/key.rb index cfcb1f63..a39a4a16 100644 --- a/app/models/key.rb +++ b/app/models/key.rb @@ -1,16 +1,18 @@ require 'digest/md5' class Key < ActiveRecord::Base - include SshKey belongs_to :user belongs_to :project + attr_protected :user_id + validates :title, presence: true, length: { within: 0..255 } validates :key, presence: true, + format: { :with => /ssh-.{3} / }, length: { within: 0..5000 } before_save :set_identifier @@ -50,6 +52,10 @@ class Key < ActiveRecord::Base user.projects end end + + def last_deploy? + Key.where(identifier: identifier).count == 0 + end end # == Schema Information # diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 47966d66..542817b0 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -88,8 +88,11 @@ class MergeRequest < ActiveRecord::Base end def unmerged_diffs - commits = project.repo.commits_between(target_branch, source_branch).map {|c| Commit.new(c)} - diffs = project.repo.diff(commits.first.prev_commit.id, commits.last.id) rescue [] + # Only show what is new in the source branch compared to the target branch, not the other way around. + # The linex below with merge_base is equivalent to diff with three dots (git diff branch1...branch2) + # From the git documentation: "git diff A...B" is equivalent to "git diff $(git-merge-base A B) B" + common_commit = project.repo.git.native(:merge_base, {}, [target_branch, source_branch]).strip + diffs = project.repo.diff(common_commit, source_branch) end def last_commit diff --git a/app/models/milestone.rb b/app/models/milestone.rb index 592c57f9..d416fb63 100644 --- a/app/models/milestone.rb +++ b/app/models/milestone.rb @@ -28,17 +28,9 @@ class Milestone < ActiveRecord::Base end def percent_complete - @percent_complete ||= begin - total_i = self.issues.count - closed_i = self.issues.closed.count - if total_i > 0 - (closed_i * 100) / total_i - else - 100 - end - rescue => ex - 0 - end + ((self.issues.closed.count * 100) / self.issues.count).abs + rescue ZeroDivisionError + 100 end def expires_at diff --git a/app/models/project.rb b/app/models/project.rb index 714953c6..a7735a42 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -2,13 +2,13 @@ require "grit" class Project < ActiveRecord::Base include Repository - include ProjectPush + include PushObserver include Authority include Team # # Relations - # + # belongs_to :owner, class_name: "User" has_many :users, through: :users_projects has_many :events, dependent: :destroy @@ -25,12 +25,12 @@ class Project < ActiveRecord::Base attr_accessor :error_code - # + # # Protected attributes # attr_protected :private_flag, :owner_id - # + # # Scopes # scope :public_only, where(private_flag: false) @@ -158,7 +158,7 @@ class Project < ActiveRecord::Base end def last_activity - events.last || nil + events.order("created_at ASC").last end def last_activity_date diff --git a/app/models/protected_branch.rb b/app/models/protected_branch.rb index 4da1432c..7c30f7a0 100644 --- a/app/models/protected_branch.rb +++ b/app/models/protected_branch.rb @@ -1,4 +1,6 @@ class ProtectedBranch < ActiveRecord::Base + include GitHost + belongs_to :project validates_presence_of :project_id validates_presence_of :name @@ -7,7 +9,7 @@ class ProtectedBranch < ActiveRecord::Base after_destroy :update_repository def update_repository - Gitlab::GitHost.system.update_project(project.path, project) + git_host.update_repository(project) end def commit diff --git a/app/models/user.rb b/app/models/user.rb index 92c81c83..ad6af6a6 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -7,7 +7,7 @@ class User < ActiveRecord::Base attr_accessible :email, :password, :password_confirmation, :remember_me, :bio, :name, :projects_limit, :skype, :linkedin, :twitter, :dark_scheme, - :theme_id, :force_random_password + :theme_id, :force_random_password, :extern_uid, :provider attr_accessor :force_random_password @@ -54,6 +54,8 @@ class User < ActiveRecord::Base validates :bio, length: { within: 0..255 } + validates :extern_uid, :allow_blank => true, :uniqueness => {:scope => :provider} + before_save :ensure_authentication_token alias_attribute :private_token, :authentication_token @@ -84,21 +86,31 @@ class User < ActiveRecord::Base where('id NOT IN (SELECT DISTINCT(user_id) FROM users_projects)') end - def self.find_for_ldap_auth(omniauth_info) - name = omniauth_info.name.force_encoding("utf-8") - email = omniauth_info.email.downcase unless omniauth_info.email.nil? - raise OmniAuth::Error, "LDAP accounts must provide an email address" if email.nil? + def self.find_for_ldap_auth(auth, signed_in_resource=nil) + uid = auth.info.uid + provider = auth.provider + name = auth.info.name.force_encoding("utf-8") + email = auth.info.email.downcase unless auth.info.email.nil? + raise OmniAuth::Error, "LDAP accounts must provide an uid and email address" if uid.nil? or email.nil? - if @user = User.find_by_email(email) + if @user = User.find_by_extern_uid_and_provider(uid, provider) + @user + # workaround for backward compatibility + elsif @user = User.find_by_email(email) + logger.info "Updating legacy LDAP user #{email} with extern_uid => #{uid}" + @user.update_attributes(:extern_uid => uid, :provider => provider) @user else + logger.info "Creating user from LDAP login {uid => #{uid}, name => #{name}, email => #{email}}" password = Devise.friendly_token[0, 8].downcase @user = User.create( - name: name, - email: email, - password: password, - password_confirmation: password, - projects_limit: Gitlab.config.default_projects_limit + :extern_uid => uid, + :provider => provider, + :name => name, + :email => email, + :password => password, + :password_confirmation => password, + :projects_limit => Gitlab.config.default_projects_limit ) end end diff --git a/app/models/users_project.rb b/app/models/users_project.rb index 36e6d904..7d172934 100644 --- a/app/models/users_project.rb +++ b/app/models/users_project.rb @@ -1,4 +1,6 @@ class UsersProject < ActiveRecord::Base + include GitHost + GUEST = 10 REPORTER = 20 DEVELOPER = 30 @@ -58,9 +60,7 @@ class UsersProject < ActiveRecord::Base end def update_repository - Gitlab::GitHost.system.new.configure do |c| - c.update_project(project.path, project) - end + git_host.update_repository(project) end def project_access_human diff --git a/app/observers/issue_observer.rb b/app/observers/issue_observer.rb index 92b0f836..62fd9bf8 100644 --- a/app/observers/issue_observer.rb +++ b/app/observers/issue_observer.rb @@ -9,8 +9,16 @@ class IssueObserver < ActiveRecord::Observer def after_update(issue) send_reassigned_email(issue) if issue.is_being_reassigned? - Note.create_status_change_note(issue, current_user, 'closed') if issue.is_being_closed? - Note.create_status_change_note(issue, current_user, 'reopened') if issue.is_being_reopened? + + status = nil + status = 'closed' if issue.is_being_closed? + status = 'reopened' if issue.is_being_reopened? + if status + Note.create_status_change_note(issue, current_user, status) + [issue.author, issue.assignee].compact.each do |recipient| + Notify.issue_status_changed_email(recipient.id, issue.id, status, current_user) + end + end end protected diff --git a/app/observers/key_observer.rb b/app/observers/key_observer.rb index fac53a67..a3f17bde 100644 --- a/app/observers/key_observer.rb +++ b/app/observers/key_observer.rb @@ -1,9 +1,12 @@ class KeyObserver < ActiveRecord::Observer + include GitHost + def after_save(key) - key.update_repository + git_host.set_key(key.identifier, key.key, key.projects) end def after_destroy(key) - key.repository_delete_key + return if key.is_deploy_key && !key.last_deploy? + git_host.remove_key(key.identifier, key.projects) end end diff --git a/app/observers/users_project_observer.rb b/app/observers/users_project_observer.rb new file mode 100644 index 00000000..763b2c87 --- /dev/null +++ b/app/observers/users_project_observer.rb @@ -0,0 +1,9 @@ +class UsersProjectObserver < ActiveRecord::Observer + def after_create(users_project) + Notify.project_access_granted_email(users_project.id).deliver + end + + def after_update(users_project) + Notify.project_access_granted_email(users_project.id).deliver + end +end diff --git a/app/roles/git_host.rb b/app/roles/git_host.rb new file mode 100644 index 00000000..aa620f77 --- /dev/null +++ b/app/roles/git_host.rb @@ -0,0 +1,5 @@ +module GitHost + def git_host + Gitlab::Gitolite.new + end +end diff --git a/app/roles/git_merge.rb b/app/roles/git_merge.rb deleted file mode 100644 index 95e5942f..00000000 --- a/app/roles/git_merge.rb +++ /dev/null @@ -1,2 +0,0 @@ -module GitMerge -end diff --git a/app/roles/project_push.rb b/app/roles/push_observer.rb similarity index 99% rename from app/roles/project_push.rb rename to app/roles/push_observer.rb index 02025384..1067404d 100644 --- a/app/roles/project_push.rb +++ b/app/roles/push_observer.rb @@ -1,4 +1,4 @@ -module ProjectPush +module PushObserver def observe_push(oldrev, newrev, ref, user) data = post_receive_data(oldrev, newrev, ref, user) diff --git a/app/roles/repository.rb b/app/roles/repository.rb index 8d5b018d..5fa950db 100644 --- a/app/roles/repository.rb +++ b/app/roles/repository.rb @@ -1,4 +1,6 @@ module Repository + include GitHost + def valid_repo? repo rescue @@ -30,26 +32,10 @@ module Repository Commit.commits_between(repo, from, to) end - def write_hooks - %w(post-receive).each do |hook| - write_hook(hook, File.read(File.join(Rails.root, 'lib', "#{hook}-hook"))) - end - end - def satellite @satellite ||= Gitlab::Satellite.new(self) end - def write_hook(name, content) - hook_file = File.join(path_to_repo, 'hooks', name) - - File.open(hook_file, 'w') do |f| - f.write(content) - end - - File.chmod(0775, hook_file) - end - def has_post_receive_file? hook_file = File.join(path_to_repo, 'hooks', 'post-receive') File.exists?(hook_file) @@ -64,7 +50,7 @@ module Repository end def url_to_repo - Gitlab::GitHost.url_to_repo(path) + git_host.url_to_repo(path) end def path_to_repo @@ -72,13 +58,11 @@ module Repository end def update_repository - Gitlab::GitHost.system.update_project(path, self) - - write_hooks if File.exists?(path_to_repo) + git_host.update_repository(self) end def destroy_repository - Gitlab::GitHost.system.destroy_project(self) + git_host.remove_repository(self) end def repo_exists? @@ -133,10 +117,13 @@ module Repository storage_path = File.join(Rails.root, "tmp", "repositories", self.code) file_path = File.join(storage_path, file_name) + # Put files into a directory before archiving + prefix = self.code + "/" + # Create file if not exists unless File.exists?(file_path) FileUtils.mkdir_p storage_path - file = self.repo.archive_to_file(ref, nil, file_path) + file = self.repo.archive_to_file(ref, prefix, file_path) end file_path diff --git a/app/roles/ssh_key.rb b/app/roles/ssh_key.rb deleted file mode 100644 index 5e1d2c23..00000000 --- a/app/roles/ssh_key.rb +++ /dev/null @@ -1,18 +0,0 @@ -module SshKey - def update_repository - Gitlab::GitHost.system.new.configure do |c| - c.update_keys(identifier, key) - c.update_projects(projects) - end - end - - def repository_delete_key - Gitlab::GitHost.system.new.configure do |c| - #delete key file is there is no identically deploy keys - if !is_deploy_key || Key.where(identifier: identifier).count() == 0 - c.delete_key(identifier) - end - c.update_projects(projects) - end - end -end diff --git a/app/views/admin/dashboard/index.html.haml b/app/views/admin/dashboard/index.html.haml index 2e67abfc..3e26f566 100644 --- a/app/views/admin/dashboard/index.html.haml +++ b/app/views/admin/dashboard/index.html.haml @@ -35,11 +35,13 @@ %h3 Latest projects %hr - @projects.each do |project| - %h5 + %p = link_to project.name, [:admin, project] .span6 %h3 Latest users %hr - @users.each do |user| - %h5 - = link_to user.name, [:admin, user] + %p + = link_to [:admin, user] do + = user.name + %small= user.email diff --git a/app/views/admin/hooks/index.html.haml b/app/views/admin/hooks/index.html.haml index d34acffe..43288424 100644 --- a/app/views/admin/hooks/index.html.haml +++ b/app/views/admin/hooks/index.html.haml @@ -5,7 +5,7 @@ Read more about system hooks %strong #{link_to "here", help_system_hooks_path, class: "vlink"} -= form_for @hook, as: :hook, url: admin_hooks_path do |f| += form_for @hook, as: :hook, url: admin_hooks_path, html: { class: 'form-inline' } do |f| -if @hook.errors.any? .alert-message.block-message.error - @hook.errors.full_messages.each do |msg| diff --git a/app/views/admin/projects/_form.html.haml b/app/views/admin/projects/_form.html.haml index 7cebddf2..87d212e5 100644 --- a/app/views/admin/projects/_form.html.haml +++ b/app/views/admin/projects/_form.html.haml @@ -10,19 +10,17 @@ Project name is .input = f.text_field :name, placeholder: "Example Project", class: "xxlarge" - = f.submit project.new_record? ? 'Create project' : 'Save Project', class: "btn primary" %hr - .alert.alert-info - %h5 Advanced settings: + .adv_settings + %h6 Advanced settings: .clearfix = f.label :path do - Git Clone + Path .input .input-prepend - %span.add-on= Gitlab.config.ssh_path - = f.text_field :path, placeholder: "example_project", disabled: !!project.id - %span.add-on= ".git" + %strong + = text_field_tag :ppath, @admin_project.path_to_repo, class: "xlarge", disabled: true .clearfix = f.label :code do URL @@ -42,8 +40,9 @@ .input= f.select(:default_branch, project.heads.map(&:name), {}, style: "width:210px;") - unless project.new_record? - .alert.alert-info - %h5 Features: + %hr + .adv_settings + %h6 Features: .clearfix = f.label :issues_enabled, "Issues" @@ -63,7 +62,8 @@ - unless project.new_record? .actions - = f.submit 'Save Project', class: "btn primary" + = f.submit 'Save Project', class: "btn save-btn" + = link_to 'Cancel', admin_projects_path, class: "btn cancel-btn" diff --git a/app/views/admin/projects/_new_form.html.haml b/app/views/admin/projects/_new_form.html.haml new file mode 100644 index 00000000..d793b6f3 --- /dev/null +++ b/app/views/admin/projects/_new_form.html.haml @@ -0,0 +1,29 @@ += form_for [:admin, @admin_project] do |f| + - if @admin_project.errors.any? + .alert-message.block-message.error + %span= @admin_project.errors.full_messages.first + .clearfix.project_name_holder + = f.label :name do + Project name is + .input + = f.text_field :name, placeholder: "Example Project", class: "xxlarge" + = f.submit 'Create project', class: "btn primary project-submit" + + %hr + %div.adv_settings + %h6 Advanced settings: + .clearfix + = f.label :path do + Git Clone + .input + .input-prepend + %span.add-on= Gitlab.config.ssh_path + = f.text_field :path, placeholder: "example_project", disabled: !@admin_project.new_record? + %span.add-on= ".git" + .clearfix + = f.label :code do + URL + .input + .input-prepend + %span.add-on= web_app_url + = f.text_field :code, placeholder: "example" diff --git a/app/views/admin/projects/index.html.haml b/app/views/admin/projects/index.html.haml index 4512bb7e..f7dd486d 100644 --- a/app/views/admin/projects/index.html.haml +++ b/app/views/admin/projects/index.html.haml @@ -1,8 +1,8 @@ -%h3 +%h3.page_title Projects = link_to 'New Project', new_admin_project_path, class: "btn small right" %br -= form_tag admin_projects_path, method: :get do += form_tag admin_projects_path, method: :get, class: 'form-inline' do = text_field_tag :name, params[:name], class: "xlarge" = submit_tag "Search", class: "btn submit primary" diff --git a/app/views/admin/projects/new.html.haml b/app/views/admin/projects/new.html.haml index ac6526bf..933cb671 100644 --- a/app/views/admin/projects/new.html.haml +++ b/app/views/admin/projects/new.html.haml @@ -1,3 +1,12 @@ -%h3.page_title New project -%hr -= render 'form', project: @admin_project +.project_new_holder + %h3.page_title + New Project + %hr + = render 'new_form' +%div.save-project-loader.hide + %center + = image_tag "ajax_loader.gif" + %h3 Creating project & repository. Please wait a few minutes + +:javascript + $(function(){ new Projects(); }); diff --git a/app/views/admin/users/_form.html.haml b/app/views/admin/users/_form.html.haml index 5e68a23f..7010c272 100644 --- a/app/views/admin/users/_form.html.haml +++ b/app/views/admin/users/_form.html.haml @@ -2,71 +2,79 @@ = form_for [:admin, @admin_user] do |f| -if @admin_user.errors.any? #error_explanation - %ul + %ul.unstyled.alert.alert-error - @admin_user.errors.full_messages.each do |msg| %li= msg .row - .span6 - .clearfix - = f.label :name - .input - = f.text_field :name - %span.help-inline * required - .clearfix - = f.label :email - .input - = f.text_field :email - %span.help-inline * required - %hr + .span7 + .ui-box + %br + .clearfix + = f.label :name + .input + = f.text_field :name + %span.help-inline * required + .clearfix + = f.label :email + .input + = f.text_field :email + %span.help-inline * required + %hr + -if f.object.new_record? + .clearfix + = f.label :force_random_password do + %span Generate random password + .input= f.check_box :force_random_password, {}, true, nil + + %div.password-fields + .clearfix + = f.label :password + .input= f.password_field :password, disabled: f.object.force_random_password + .clearfix + = f.label :password_confirmation + .input= f.password_field :password_confirmation, disabled: f.object.force_random_password + %hr + .clearfix + = f.label :skype + .input= f.text_field :skype + .clearfix + = f.label :linkedin + .input= f.text_field :linkedin + .clearfix + = f.label :twitter + .input= f.text_field :twitter + .span5 + .ui-box + %br + .clearfix + = f.label :projects_limit + .input= f.number_field :projects_limit - -if f.object.new_record? - .clearfix - = f.label :admin, class: "checkbox" do - = f.check_box :force_random_password, {}, true, nil - %span Generate random password - - %div.password-fields .clearfix - = f.label :password - .input= f.password_field :password, disabled: f.object.force_random_password - .clearfix - = f.label :password_confirmation - .input= f.password_field :password_confirmation, disabled: f.object.force_random_password - %hr - .clearfix - = f.label :skype - .input= f.text_field :skype - .clearfix - = f.label :linkedin - .input= f.text_field :linkedin - .clearfix - = f.label :twitter - .input= f.text_field :twitter - .span6 - .clearfix - = f.label :projects_limit - .input= f.text_field :projects_limit, class: "small_input" + = f.label :admin do + %strong.cred Administrator + .input= f.check_box :admin + - unless @admin_user.new_record? + %hr + .padded.cred + - if @admin_user.blocked + %span + This user is blocked and is not able to login to GitLab + .clearfix + = link_to 'Unblock User', unblock_admin_user_path(@admin_user), method: :put, class: "btn small right" + - else + %span + Blocked users will be removed from all projects & will not be able to login to GitLab. + .clearfix + = link_to 'Block User', block_admin_user_path(@admin_user), confirm: 'USER WILL BE BLOCKED! Are you sure?', method: :put, class: "btn small right danger" - .alert - .clearfix - %p Make the user a GitLab administrator. - = f.label :admin, class: "checkbox" do - = f.check_box :admin - %span Administrator - - unless @admin_user.new_record? - .alert.alert-error - - if @admin_user.blocked - %span - = link_to 'Unblock', unblock_admin_user_path(@admin_user), method: :put, class: "btn small" - This user is blocked and is not able to login to GitLab - - else - %span - = link_to 'Block', block_admin_user_path(@admin_user), confirm: 'USER WILL BE BLOCKED! Are you sure?', method: :put, class: "btn small danger" - Blocked users will be removed from all projects & will not be able to login to GitLab. + .row + .span6 + .span6 .actions - = f.submit 'Save', class: "btn primary" + = f.submit 'Save', class: "btn save-btn" - if @admin_user.new_record? - = link_to 'Cancel', admin_users_path, class: "btn" + = link_to 'Cancel', admin_users_path, class: "btn cancel-btn" - else - = link_to 'Cancel', admin_user_path(@admin_user), class: "btn" + = link_to 'Cancel', admin_user_path(@admin_user), class: "btn cancel-btn" diff --git a/app/views/admin/users/edit.html.haml b/app/views/admin/users/edit.html.haml index 0e94be9e..032e3cfa 100644 --- a/app/views/admin/users/edit.html.haml +++ b/app/views/admin/users/edit.html.haml @@ -1,3 +1,3 @@ -%h3= @admin_user.name +%h3.page_title #{@admin_user.name} → Edit user %hr = render 'form' diff --git a/app/views/admin/users/index.html.haml b/app/views/admin/users/index.html.haml index 5edca312..f21baabf 100644 --- a/app/views/admin/users/index.html.haml +++ b/app/views/admin/users/index.html.haml @@ -1,9 +1,9 @@ -%h3 +%h3.page_title Users = link_to 'New User', new_admin_user_path, class: "btn small right" %br -= form_tag admin_users_path, method: :get do += form_tag admin_users_path, method: :get, class: 'form-inline' do = text_field_tag :name, params[:name], class: "xlarge" = submit_tag "Search", class: "btn submit primary" %ul.nav.nav-pills diff --git a/app/views/admin/users/new.html.haml b/app/views/admin/users/new.html.haml index 87d6b0f2..70ead0d3 100644 --- a/app/views/admin/users/new.html.haml +++ b/app/views/admin/users/new.html.haml @@ -1,3 +1,3 @@ -%h2 New user -%hr +%h3.page_title New user +%br = render 'form' diff --git a/app/views/commits/_commit.html.haml b/app/views/commits/_commit.html.haml index 686a4337..61371d14 100644 --- a/app/views/commits/_commit.html.haml +++ b/app/views/commits/_commit.html.haml @@ -4,8 +4,8 @@ %strong= link_to "Browse Code »", tree_project_ref_path(@project, commit.id), class: "right" %p = link_to commit.short_id(8), project_commit_path(@project, id: commit.id), class: "commit_short_id" - %strong.cgray= commit.author_name - – + %strong.commit-author-name= commit.author_name + %span.dash – = image_tag gravatar_icon(commit.author_email), class: "avatar", width: 16 = link_to_gfm truncate(commit.title, length: 50), project_commit_path(@project, id: commit.id), class: "row_title" diff --git a/app/views/commits/compare.html.haml b/app/views/commits/compare.html.haml index be915cd1..7dab1f5c 100644 --- a/app/views/commits/compare.html.haml +++ b/app/views/commits/compare.html.haml @@ -20,7 +20,7 @@ = "..." = text_field_tag :to, params[:to], placeholder: "aa8b4ef", class: "xlarge" .actions - = submit_tag "Compare", class: "btn btn-primary" + = submit_tag "Compare", class: "btn primary" - unless @commits.empty? diff --git a/app/views/commits/show.html.haml b/app/views/commits/show.html.haml index 9a483aa2..e01f8ea5 100644 --- a/app/views/commits/show.html.haml +++ b/app/views/commits/show.html.haml @@ -5,12 +5,6 @@ :javascript - $(document).ready(function(){ - $(".line_note_link, .line_note_reply_link").live("click", function(e) { - var form = $(".per_line_form"); - $(this).parent().parent().after(form); - form.find("#note_line_code").val($(this).attr("line_code")); - form.show(); - return false; - }); + $(function(){ + PerLineNotes.init(); }); diff --git a/app/views/dashboard/index.html.haml b/app/views/dashboard/index.html.haml index 9fea5acb..e13640fb 100644 --- a/app/views/dashboard/index.html.haml +++ b/app/views/dashboard/index.html.haml @@ -1,14 +1,7 @@ - if @projects.any? .projects .activities.span8 - - if current_user.require_ssh_key? - .alert.alert-error.padded - %span - You wont be able to pull/push project code unless you - %strong - = link_to new_key_path, class: "vlink" do - add new key - to your profile + = render 'shared/no_ssh' - if @events.any? .content_list= render @events - else @@ -26,13 +19,16 @@ = link_to new_project_path, class: "btn very_small info" do %i.icon-plus New Project - - @projects.each do |project| - = link_to project_path(project), class: dom_class(project) do - %h4 - %span.ico.project - = truncate(project.name, length: 25) - %span.right - → + %ul.unstyled + - @projects.each do |project| + %li.wll + = link_to project_path(project), class: dom_class(project) do + %strong.project_name= truncate(project.name, length: 25) + %span.arrow + → + %span.last_activity + %strong Last activity: + %span= project_last_activity(project) .bottom= paginate @projects, theme: "gitlab" %hr @@ -57,5 +53,5 @@ If you will be added to project - it will be displayed here -:javascript +:javascript $(function(){ Pager.init(20); }); diff --git a/app/views/errors/gitolite.html.haml b/app/views/errors/gitolite.html.haml index 4788c2e5..d5f51951 100644 --- a/app/views/errors/gitolite.html.haml +++ b/app/views/errors/gitolite.html.haml @@ -21,7 +21,5 @@ Permissions: %pre = preserve do - sudo chmod -R 770 /home/git/repositories/ - sudo chown -R git:git /home/git/repositories/ - sudo chown gitlab:gitlab /home/git/repositories/**/hooks/post-receive - + sudo chmod -R 770 #{Gitlab.config.git_base_path} + sudo chown -R git:git #{Gitlab.config.git_base_path} diff --git a/app/views/errors/invalid_ssh_key.html.haml b/app/views/errors/invalid_ssh_key.html.haml new file mode 100644 index 00000000..fb7922b0 --- /dev/null +++ b/app/views/errors/invalid_ssh_key.html.haml @@ -0,0 +1,3 @@ +%h1 Git Error +%hr +%p Seems like SSH Key you provided is not a valid SSH key. diff --git a/app/views/events/_event_last_push.html.haml b/app/views/events/_event_last_push.html.haml index 4ef92749..66e14936 100644 --- a/app/views/events/_event_last_push.html.haml +++ b/app/views/events/_event_last_push.html.haml @@ -9,5 +9,5 @@ at %strong= link_to event.project.name, event.project - = link_to new_mr_path_from_push_event(event), title: "New Merge Request", class: "btn very_small primary" do + = link_to new_mr_path_from_push_event(event), title: "New Merge Request", class: "btn very_small" do Create Merge Request diff --git a/app/views/help/api.html.haml b/app/views/help/api.html.haml index 344f8ade..d7d7aed4 100644 --- a/app/views/help/api.html.haml +++ b/app/views/help/api.html.haml @@ -9,6 +9,8 @@ %a{href: "#README"} README %li %a{href: "#projects"} Projects + %li + %a{href: "#snippets"} Snippets %li %a{href: "#users"} Users %li @@ -34,6 +36,16 @@ %br +.file_holder#snippets + .file_title + %i.icon-file + Projects Snippets + .file_content.wiki + = preserve do + = markdown File.read(Rails.root.join("doc", "api", "snippets.md")) + +%br + .file_holder#users .file_title %i.icon-file @@ -51,3 +63,13 @@ .file_content.wiki = preserve do = markdown File.read(Rails.root.join("doc", "api", "issues.md")) + +%br + +.file_holder#milestones + .file_title + %i.icon-file + Milestones + .file_content.wiki + = preserve do + = markdown File.read(Rails.root.join("doc", "api", "milestones.md")) diff --git a/app/views/help/index.html.haml b/app/views/help/index.html.haml index 66f7c722..02549577 100644 --- a/app/views/help/index.html.haml +++ b/app/views/help/index.html.haml @@ -31,3 +31,6 @@ %li %h5= link_to "Gitlab Markdown", help_markdown_path + + %li + %h5= link_to "SSH keys", help_ssh_path diff --git a/app/views/help/markdown.html.haml b/app/views/help/markdown.html.haml index 8d6fb2a5..6a4bbb02 100644 --- a/app/views/help/markdown.html.haml +++ b/app/views/help/markdown.html.haml @@ -1,25 +1,105 @@ -- bash_lexer = Pygments::Lexer[:bash] -%h3.page_title Gitlab Markdown +%h3.page_title Gitlab Flavored Markdown .back_link = link_to help_path do ← to index %hr -%p.slead We extend Markdown with some GITLAB specific syntax. It allows you to link to: +.row + .span8 + %p + For Gitlab we developed something we call "Gitlab Flavored Markdown" (GFM). + It extends the standard Markdown in a few significant ways adds some useful functionality. -%ul - %li issues (#123) - %li merge request (!123) - %li commits (1234567) - %li team members (@foo) - %li snippets ($123) + %p You can use GFM in: + %ul + %li commit messages + %li comments + %li wall posts + %li issues + %li merge requests + %li milestones + %li wiki pages -%p.slead in + %h3 Differences from traditional Markdown -%ul - %li commit messages - %li notes/comments/wall posts - %li issues - %li merge requests - %li milestones - %li wiki pages + %h4 Newlines + + %p + The biggest difference that GFM introduces is in the handling of linebreaks. + With traditional Markdown you can hard wrap paragraphs of text and they will be combined into a single paragraph. We find this to be the cause of a huge number of unintentional formatting errors. + GFM treats newlines in paragraph-like content as real line breaks, which is probably what you intended. + + + %p The next paragraph contains two phrases separated by a single newline character: + %pre= "Roses are red\nViolets are blue" + %p becomes + = markdown "Roses are red\nViolets are blue" + + %h4 Multiple underscores in words + + %p + It is not reasonable to italicize just part of a word, especially when you're dealing with code and names often appear with multiple underscores. + Therefore, GFM ignores multiple underscores in words. + + %pre= "perform_complicated_task\ndo_this_and_do_that_and_another_thing" + %p becomes + = markdown "perform_complicated_task\ndo_this_and_do_that_and_another_thing" + + %h4 URL autolinking + + %p + GFM will autolink standard URLs you copy and paste into your text. + So if you want to link to a URL (instead of a textual link), you can simply put the URL in verbatim and it will be turned into a link to that URL. + + %h4 Fenced code blocks + + %p + Markdown converts text with four spaces at the front of each line to code blocks. + GFM supports that, but we also support fenced blocks. + Just wrap your code blocks in ``` and you won't need to indent manually to trigger a code block. + + %pre= %Q{```ruby\nrequire 'redcarpet'\nmarkdown = Redcarpet.new("Hello World!")\nputs markdown.to_html\n```} + %p becomes + = markdown %Q{```ruby\nrequire 'redcarpet'\nmarkdown = Redcarpet.new("Hello World!")\nputs markdown.to_html\n```} + + %h4 Special Gitlab references + + %p + GFM recognizes special references. + You can easily reference e.g. a team member, an issue or a commit within a project. + GFM will turn that reference into a link so you can navigate between them easily. + + %p GFM will recognize the following references: + %ul + %li + %code @foo + for team members + %li + %code #123 + for issues + %li + %code !123 + for merge request + %li + %code $123 + for snippets + %li + %code 1234567 + for commits + + -# this example will only be shown if the user has a project with at least one issue + - if @project = current_user.projects.first + - if issue = @project.issues.first + %p For example in your #{link_to @project.name, project_path(@project)} project something like + %pre= "This is related to ##{issue.id}. @#{current_user.name} is working on solving it." + %p becomes + = markdown "This is related to ##{issue.id}. @#{current_user.name} is working on solving it." + + + + .span4.right + .alert.alert-info + %p + If you're not already familiar with Markdown, you should spend 15 minutes and go over the excellent + %strong= link_to "Markdown Syntax Guide", "http://daringfireball.net/projects/markdown/syntax" + at Daring Fireball. diff --git a/app/views/help/permissions.html.haml b/app/views/help/permissions.html.haml index 7511d15d..f9287fa0 100644 --- a/app/views/help/permissions.html.haml +++ b/app/views/help/permissions.html.haml @@ -1,6 +1,6 @@ -%h3 Permissions +%h3.page_title Permissions .back_link - = link_to help_path do + = link_to help_path do ← to index %hr diff --git a/app/views/help/ssh.html.haml b/app/views/help/ssh.html.haml new file mode 100644 index 00000000..6a581204 --- /dev/null +++ b/app/views/help/ssh.html.haml @@ -0,0 +1,25 @@ +%h3.page_title SSH Keys +.back_link + = link_to help_path do + ← to index +%hr + +%p.slead + SSH key allows you to establish a secure connection between your computer and Gitlab + +%p.slead + To generate a new SSH key just open your terminal and use code below. + +%pre.dark + ssh-keygen -t rsa -C "#{current_user.email}" + + \# Creates a new ssh key using the provided email + \# Generating public/private rsa key pair... + +%p.slead + Next just use code below to dump your public key and add to GITLAB SSH Keys + +%pre.dark + cat ~/.ssh/id_rsa.pub + + \# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc.... diff --git a/app/views/help/system_hooks.html.haml b/app/views/help/system_hooks.html.haml index 2088208a..9fc8cbab 100644 --- a/app/views/help/system_hooks.html.haml +++ b/app/views/help/system_hooks.html.haml @@ -1,10 +1,10 @@ %h3 System hooks .back_link - = link_to :back do + = link_to :back do ← back %hr -%p.slead +%p.slead Your Gitlab instance can perform HTTP POST request on next event: create_project, delete_project, create_user, delete_user, change_team_member. %br System Hooks can be used for logging or change information in LDAP server. diff --git a/app/views/help/web_hooks.html.haml b/app/views/help/web_hooks.html.haml index 3acea62c..263eadf6 100644 --- a/app/views/help/web_hooks.html.haml +++ b/app/views/help/web_hooks.html.haml @@ -1,11 +1,11 @@ -%h3 Web hooks +%h3.page_title Web hooks .back_link - = link_to help_path do + = link_to help_path do ← to index %hr -%p.slead - Every Gitlab project can trigger a web server whenever the repo is pushed to. +%p.slead + Every Gitlab project can trigger a web server whenever the repo is pushed to. %br Web Hooks can be used to update an external issue tracker, trigger CI builds, update a backup mirror, or even deploy to your production server. %br diff --git a/app/views/help/workflow.html.haml b/app/views/help/workflow.html.haml index 7db8133b..a3fe3b01 100644 --- a/app/views/help/workflow.html.haml +++ b/app/views/help/workflow.html.haml @@ -1,7 +1,6 @@ -- bash_lexer = Pygments::Lexer[:bash] -%h3 Workflow +%h3.page_title Workflow .back_link - = link_to help_path do + = link_to help_path do ← to index %hr @@ -9,25 +8,25 @@ %li %p Clone project .bash - %pre + %pre.dark git clone git@example.com:project-name.git %li %p Create branch with your feature .bash - %pre + %pre.dark git checkout -b $feature_name %li %p Write code. Commit changes .bash - %pre + %pre.dark git commit -am "My feature is ready" %li %p Push your branch to gitlabhq .bash - %pre + %pre.dark git push origin $feature_name %li diff --git a/app/views/hooks/_data_ex.html.erb b/app/views/hooks/_data_ex.html.erb index 8d3de3f0..e43714e9 100644 --- a/app/views/hooks/_data_ex.html.erb +++ b/app/views/hooks/_data_ex.html.erb @@ -37,7 +37,7 @@ } } ], - total_commits_count => 3 + total_commits_count => 4 } eos %> diff --git a/app/views/hooks/index.html.haml b/app/views/hooks/index.html.haml index 4e15dc50..3d2a381e 100644 --- a/app/views/hooks/index.html.haml +++ b/app/views/hooks/index.html.haml @@ -8,7 +8,7 @@ Read more about web hooks %strong #{link_to "here", help_web_hooks_path, class: "vlink"} -= form_for [@project, @hook], as: :hook, url: project_hooks_path(@project) do |f| += form_for [@project, @hook], as: :hook, url: project_hooks_path(@project), html: { class: 'form-inline' } do |f| -if @hook.errors.any? .alert-message.block-message.error - @hook.errors.full_messages.each do |msg| diff --git a/app/views/issues/_form.html.haml b/app/views/issues/_form.html.haml index 1b67eabd..db7920b9 100644 --- a/app/views/issues/_form.html.haml +++ b/app/views/issues/_form.html.haml @@ -38,19 +38,20 @@ = f.label :description, "Details" .input = f.text_area :description, maxlength: 2000, class: "xxlarge", rows: 14 - %p.hint Markdown is enabled. + %p.hint Issues are parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}. .actions - if @issue.new_record? - = f.submit 'Submit new issue', class: "primary btn" + = f.submit 'Submit new issue', class: "btn save-btn" -else - = f.submit 'Save changes', class: "primary btn" + = f.submit 'Save changes', class: "save-btn btn" + - cancel_class = 'btn cancel-btn' - if request.xhr? - = link_to "Cancel", "#back", onclick: "backToIssues();", class: "btn" + = link_to "Cancel", "#back", onclick: "backToIssues();", class: cancel_class - else - if @issue.new_record? - = link_to "Cancel", project_issues_path(@project), class: "btn" + = link_to "Cancel", project_issues_path(@project), class: cancel_class - else - = link_to "Cancel", project_issue_path(@project, @issue), class: "btn" + = link_to "Cancel", project_issue_path(@project, @issue), class: cancel_class diff --git a/app/views/issues/_head.html.haml b/app/views/issues/_head.html.haml index 1f6e7d7f..8ebe3e05 100644 --- a/app/views/issues/_head.html.haml +++ b/app/views/issues/_head.html.haml @@ -5,6 +5,9 @@ %li{class: "#{'active' if current_page?(project_milestones_path(@project))}"} = link_to project_milestones_path(@project), class: "tab" do Milestones + %li{class: "#{'active' if current_page?(project_labels_path(@project))}"} + = link_to project_labels_path(@project), class: "tab" do + Labels %li.right %span.rss-icon = link_to project_issues_path(@project, :atom, { private_token: current_user.private_token }) do diff --git a/app/views/issues/index.html.haml b/app/views/issues/index.html.haml index a6836fd4..010b8856 100644 --- a/app/views/issues/index.html.haml +++ b/app/views/issues/index.html.haml @@ -6,7 +6,7 @@ .right .span5 - if can? current_user, :write_issue, @project - = link_to new_project_issue_path(@project), class: "right btn small", title: "New Issue", remote: true do + = link_to new_project_issue_path(@project), class: "right btn", title: "New Issue", remote: true do %i.icon-plus New Issue = form_tag search_project_issues_path(@project), method: :get, remote: true, id: "issue_search_form", class: :right do diff --git a/app/views/keys/_form.html.haml b/app/views/keys/_form.html.haml index ee2eafdd..26700803 100644 --- a/app/views/keys/_form.html.haml +++ b/app/views/keys/_form.html.haml @@ -11,8 +11,14 @@ .input= f.text_field :title .clearfix = f.label :key - .input= f.text_area :key, class: [:xxlarge, :thin_area] - .actions - = f.submit 'Save', class: "primary btn" - = link_to "Cancel", keys_path, class: "btn" + .input + = f.text_area :key, class: [:xxlarge, :thin_area] + %p.hint + Paste your public key here. Read more about how generate it + = link_to "here", help_ssh_path + + + .actions + = f.submit 'Save', class: "btn save-btn" + = link_to "Cancel", keys_path, class: "btn cancel-btn" diff --git a/app/views/keys/index.html.haml b/app/views/keys/index.html.haml index 04e9e4cb..9b5663ed 100644 --- a/app/views/keys/index.html.haml +++ b/app/views/keys/index.html.haml @@ -1,6 +1,6 @@ %h3.page_title SSH Keys - = link_to "Add new", new_key_path, class: "btn small right" + = link_to "Add new", new_key_path, class: "btn right" %hr %p.slead diff --git a/app/views/keys/new.html.haml b/app/views/keys/new.html.haml index 02e782b9..fff38058 100644 --- a/app/views/keys/new.html.haml +++ b/app/views/keys/new.html.haml @@ -1,4 +1,4 @@ -%h3.page_title New key +%h3.page_title Add an SSH Key %hr = render 'form' diff --git a/app/views/labels/_label.html.haml b/app/views/labels/_label.html.haml new file mode 100644 index 00000000..32158c20 --- /dev/null +++ b/app/views/labels/_label.html.haml @@ -0,0 +1,4 @@ +%li.wll + %strong= label.name + .right + %span= pluralize label.count, 'issue' diff --git a/app/views/labels/index.html.haml b/app/views/labels/index.html.haml new file mode 100644 index 00000000..4e41d375 --- /dev/null +++ b/app/views/labels/index.html.haml @@ -0,0 +1,14 @@ += render "issues/head" + +%h3.page_title + Labels +%br +%div.ui-box + %ul.unstyled.labels-table + - @labels.each do |label| + = render 'label', label: label + + - unless @labels.present? + %li + %h3.nothing_here_message Nothing to show here + diff --git a/app/views/merge_requests/_form.html.haml b/app/views/merge_requests/_form.html.haml index b6c12397..b554c051 100644 --- a/app/views/merge_requests/_form.html.haml +++ b/app/views/merge_requests/_form.html.haml @@ -9,7 +9,7 @@ %br .row - .span6 + .span5 .mr_branch_box %h5 From (Head Branch) .body @@ -17,10 +17,11 @@ = f.label :source_branch, "From", class: "control-label" .controls = f.select(:source_branch, @project.heads.map(&:name), { include_blank: "Select branch" }, style: "width:250px") - .bottom_commit - .mr_source_commit + .mr_source_commit - .span6 + .span2 + %center= image_tag "merge.png", class: 'mr_direction_tip' + .span5 .mr_branch_box %h5 To (Base Branch) .body @@ -28,8 +29,7 @@ = f.label :target_branch, "To", class: "control-label" .controls = f.select(:target_branch, @project.heads.map(&:name), { include_blank: "Select branch" }, style: "width:250px") - .bottom_commit - .mr_target_commit + .mr_target_commit %h4.cdark 2. Fill info @@ -48,18 +48,19 @@ .control-group .form-actions - = f.submit 'Save', class: "btn-primary btn" + = f.submit 'Save', class: "btn save-btn" - if @merge_request.new_record? - = link_to project_merge_requests_path(@project), class: "btn" do + = link_to project_merge_requests_path(@project), class: "btn cancel-btn" do Cancel - else - = link_to project_merge_request_path(@project, @merge_request), class: "btn" do + = link_to project_merge_request_path(@project, @merge_request), class: "btn cancel-btn" do Cancel :javascript $(function(){ + disableButtonIfEmtpyField("#merge_request_title", ".save-btn"); $('select#merge_request_assignee_id').chosen(); $('select#merge_request_source_branch').chosen(); $('select#merge_request_target_branch').chosen(); diff --git a/app/views/merge_requests/index.html.haml b/app/views/merge_requests/index.html.haml index 4ad6e5c1..bbf35dc7 100644 --- a/app/views/merge_requests/index.html.haml +++ b/app/views/merge_requests/index.html.haml @@ -1,7 +1,7 @@ %h3.page_title Merge Requests - if can? current_user, :write_issue, @project - = link_to new_project_merge_request_path(@project), class: "right btn small", title: "New Merge Request" do + = link_to new_project_merge_request_path(@project), class: "right btn", title: "New Merge Request" do New Merge Request %br @@ -10,17 +10,17 @@ .ui-box .title %ul.nav.nav-pills - %li{class: ("active" if (params[:f] == "0" || !params[:f]))} - = link_to project_merge_requests_path(@project, f: 0) do + %li{class: ("active" if (params[:f] == 'open' || !params[:f]))} + = link_to project_merge_requests_path(@project, f: 'open') do Open - %li{class: ("active" if params[:f] == "2")} - = link_to project_merge_requests_path(@project, f: 2) do + %li{class: ("active" if params[:f] == "closed")} + = link_to project_merge_requests_path(@project, f: "closed") do Closed - %li{class: ("active" if params[:f] == "3")} - = link_to project_merge_requests_path(@project, f: 3) do + %li{class: ("active" if params[:f] == 'assigned-to-me')} + = link_to project_merge_requests_path(@project, f: 'assigned-to-me') do To Me - %li{class: ("active" if params[:f] == "1")} - = link_to project_merge_requests_path(@project, f: 1) do + %li{class: ("active" if params[:f] == 'all')} + = link_to project_merge_requests_path(@project, f: 'all') do All %ul.unstyled diff --git a/app/views/merge_requests/show/_how_to_merge.html.haml b/app/views/merge_requests/show/_how_to_merge.html.haml index c21f2727..69881d43 100644 --- a/app/views/merge_requests/show/_how_to_merge.html.haml +++ b/app/views/merge_requests/show/_how_to_merge.html.haml @@ -3,13 +3,12 @@ %a.close{href: "#"} × %h3 How To Merge .modal-body - %pre + %pre.dark = preserve do - :erb - git checkout <%= @merge_request.target_branch %> - git fetch origin - git merge origin/<%= @merge_request.source_branch %> - git push origin <%= @merge_request.target_branch %> + git checkout #{@merge_request.target_branch} + git fetch origin + git merge origin/#{@merge_request.source_branch} + git push origin #{@merge_request.target_branch} :javascript diff --git a/app/views/merge_requests/show/_mr_title.html.haml b/app/views/merge_requests/show/_mr_title.html.haml index 31fa0779..3ae1050d 100644 --- a/app/views/merge_requests/show/_mr_title.html.haml +++ b/app/views/merge_requests/show/_mr_title.html.haml @@ -1,9 +1,9 @@ %h3.page_title = "Merge Request ##{@merge_request.id}:"   - %span.pretty_label.branch= @merge_request.source_branch + %span.label_branch= @merge_request.source_branch → - %span.pretty_label.branch= @merge_request.target_branch + %span.label_branch= @merge_request.target_branch %span.right - if @merge_request.merged? diff --git a/app/views/milestones/_form.html.haml b/app/views/milestones/_form.html.haml index 1cd08ac3..41cbd6ab 100644 --- a/app/views/milestones/_form.html.haml +++ b/app/views/milestones/_form.html.haml @@ -22,7 +22,7 @@ = f.label :description, "Description", class: "control-label" .controls = f.text_area :description, maxlength: 2000, class: "input-xlarge", rows: 10 - %p.hint Markdown is enabled. + %p.hint Milestones are parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}. .span6 .control-group = f.label :due_date, "Due Date", class: "control-label" @@ -32,20 +32,16 @@ .form-actions - if @milestone.new_record? - = f.submit 'Create milestone', class: "primary btn" + = f.submit 'Create milestone', class: "save-btn btn" + = link_to "Cancel", project_milestones_path(@project), class: "btn cancel-btn" -else - = f.submit 'Save changes', class: "primary btn" + = f.submit 'Save changes', class: "save-btn btn" + = link_to "Cancel", project_milestone_path(@project, @milestone), class: "btn cancel-btn" - - if request.xhr? - = link_to "Cancel", "#back", onclick: "backToIssues();", class: "btn" - - else - - if @milestone.new_record? - = link_to "Cancel", project_milestones_path(@project), class: "btn" - - else - = link_to "Cancel", project_milestone_path(@project, @milestone), class: "btn" :javascript $(function() { + disableButtonIfEmtpyField("#milestone_title", ".save-btn"); $( ".datepicker" ).datepicker({ dateFormat: "yy-mm-dd", onSelect: function(dateText, inst) { $("#milestone_due_date").val(dateText) } diff --git a/app/views/milestones/index.html.haml b/app/views/milestones/index.html.haml index ecb008dc..c5333b08 100644 --- a/app/views/milestones/index.html.haml +++ b/app/views/milestones/index.html.haml @@ -8,11 +8,11 @@ %div.ui-box .title %ul.nav.nav-pills - %li{class: ("active" if (params[:f] == "0" || !params[:f]))} - = link_to project_milestones_path(@project, f: 0) do + %li{class: ("active" if (params[:f] == "active" || !params[:f]))} + = link_to project_milestones_path(@project, f: "active") do Active - %li{class: ("active" if params[:f] == "1")} - = link_to project_milestones_path(@project, f: 1) do + %li{class: ("active" if params[:f] == "all")} + = link_to project_milestones_path(@project, f: "all") do All %ul.unstyled diff --git a/app/views/notes/_create_common.js.haml b/app/views/notes/_create_common.js.haml index 847ff383..e80eccb1 100644 --- a/app/views/notes/_create_common.js.haml +++ b/app/views/notes/_create_common.js.haml @@ -1,9 +1,12 @@ - if note.valid? :plain - $("#new_note .errors").remove(); - $('#new_note textarea').val(""); + $(".note-form-holder .error").remove(); + $('.note-form-holder textarea').val(""); + $('.note-form-holder #preview-link').text('Preview'); + $('.note-form-holder #preview-note').hide(); + $('.note-form-holder').show(); NoteList.prepend(#{note.id}, "#{escape_javascript(render partial: "notes/show", locals: {note: note})}"); - else :plain - $("#new_note").replaceWith("#{escape_javascript(render('form'))}"); + $(".note-form-holder").replaceWith("#{escape_javascript(render('form'))}"); diff --git a/app/views/notes/_create_line.js.haml b/app/views/notes/_create_line.js.haml index 13809bec..662909f7 100644 --- a/app/views/notes/_create_line.js.haml +++ b/app/views/notes/_create_line.js.haml @@ -1,7 +1,7 @@ - if note.valid? :plain $(".per_line_form").hide(); - $('#new_note textarea').val(""); + $('.line-note-form-holder textarea').val(""); $("a.line_note_reply_link[line_code='#{note.line_code}']").closest("tr").remove(); var trEl = $(".#{note.line_code}").parent(); trEl.after("#{escape_javascript(render partial: "notes/per_line_show", locals: {note: note})}"); diff --git a/app/views/notes/_form.html.haml b/app/views/notes/_form.html.haml index dac026bd..7211a0ae 100644 --- a/app/views/notes/_form.html.haml +++ b/app/views/notes/_form.html.haml @@ -1,38 +1,39 @@ -= form_for [@project, @note], remote: "true", multipart: true do |f| - %h3.page_title Leave a comment - -if @note.errors.any? - .alert-message.block-message.error - - @note.errors.full_messages.each do |msg| - %div= msg +.note-form-holder + = form_for [@project, @note], remote: "true", multipart: true do |f| + %h3.page_title Leave a comment + -if @note.errors.any? + .alert-message.block-message.error + - @note.errors.full_messages.each do |msg| + %div= msg - = f.hidden_field :noteable_id - = f.hidden_field :noteable_type - = f.text_area :note, size: 255 - #preview-note.well.hide - %p.hint - = link_to "Gitlab Markdown", help_markdown_path, target: '_blank' - is enabled. - = link_to 'Preview', preview_project_notes_path(@project), id: 'preview-link' + = f.hidden_field :noteable_id + = f.hidden_field :noteable_type + = f.text_area :note, size: 255, class: 'note-text' + #preview-note.preview_note.hide + .hint + .right Comments are parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}. + .clearfix - .row.note_advanced_opts.hide - .span2 - = f.submit 'Add Comment', class: "btn primary submit_note", id: "submit_note" - .span4.notify_opts - %h6.left Notify via email: - = label_tag :notify do - = check_box_tag :notify, 1, @note.noteable_type != "Commit" - %span Project team + .row.note_advanced_opts.hide + .span3 + = f.submit 'Add Comment', class: "btn success submit_note grouped", id: "submit_note" + = link_to 'Preview', preview_project_notes_path(@project), class: 'btn grouped', id: 'preview-link' + .span4.notify_opts + %h6.left Notify via email: + = label_tag :notify do + = check_box_tag :notify, 1, @note.noteable_type != "Commit" + %span Project team - - if @note.notify_only_author?(current_user) - = label_tag :notify_author do - = check_box_tag :notify_author, 1 , @note.noteable_type == "Commit" - %span Commit author - .span6.attachments - %h6.left Attachment: - %span.file_name File name... - - .input.input_file - %a.file_upload.btn.small Upload File - = f.file_field :attachment, class: "input-file" - %span.hint Any file less than 10 MB + - if @note.notify_only_author?(current_user) + = label_tag :notify_author do + = check_box_tag :notify_author, 1 , @note.noteable_type == "Commit" + %span Commit author + .span5.attachments + %h6.left Attachment: + %span.file_name File name... + + .input.input_file + %a.file_upload.btn.small Upload File + = f.file_field :attachment, class: "input-file" + %span.hint Any file less than 10 MB diff --git a/app/views/notes/_per_line_form.html.haml b/app/views/notes/_per_line_form.html.haml index afb0b30d..8e31b59e 100644 --- a/app/views/notes/_per_line_form.html.haml +++ b/app/views/notes/_per_line_form.html.haml @@ -1,33 +1,34 @@ %table{style: "display:none;"} %tr.per_line_form %td{colspan: 3 } - = form_for [@project, @note], remote: "true", multipart: true do |f| - %h3.page_title Leave a note - %div.span10 - -if @note.errors.any? - .alert-message.block-message.error - - @note.errors.full_messages.each do |msg| - %div= msg + .line-note-form-holder + = form_for [@project, @note], remote: "true", multipart: true do |f| + %h3.page_title Leave a note + %div.span10 + -if @note.errors.any? + .alert-message.block-message.error + - @note.errors.full_messages.each do |msg| + %div= msg - = f.hidden_field :noteable_id - = f.hidden_field :noteable_type - = f.hidden_field :line_code - = f.text_area :note, size: 255 - .note_actions - .buttons - = f.submit 'Add note', class: "btn primary submit_note", id: "submit_note" - = link_to "Cancel", "#", class: "btn hide-button" - .options - %h6.left Notify via email: - .labels - = label_tag :notify do - = check_box_tag :notify, 1, @note.noteable_type != "Commit" - %span Project team + = f.hidden_field :noteable_id + = f.hidden_field :noteable_type + = f.hidden_field :line_code + = f.text_area :note, size: 255, class: 'line-note-text' + .note_actions + .buttons + = f.submit 'Add note', class: "btn save-btn submit_note submit_inline_note", id: "submit_note" + = link_to "Cancel", "#", class: "btn hide-button" + .options + %h6.left Notify via email: + .labels + = label_tag :notify do + = check_box_tag :notify, 1, @note.noteable_type != "Commit" + %span Project team - - if @note.notify_only_author?(current_user) - = label_tag :notify_author do - = check_box_tag :notify_author, 1 , @note.noteable_type == "Commit" - %span Commit author + - if @note.notify_only_author?(current_user) + = label_tag :notify_author do + = check_box_tag :notify_author, 1 , @note.noteable_type == "Commit" + %span Commit author :javascript $(function(){ diff --git a/app/views/notify/issue_status_changed_email.html.haml b/app/views/notify/issue_status_changed_email.html.haml new file mode 100644 index 00000000..59130f79 --- /dev/null +++ b/app/views/notify/issue_status_changed_email.html.haml @@ -0,0 +1,16 @@ +%td.content{align: "left", style: "font-family: Helvetica, Arial, sans-serif; padding: 20px 0 0;", valign: "top", width: "600"} + %table{border: "0", cellpadding: "0", cellspacing: "0", style: "color: #717171; font: normal 11px Helvetica, Arial, sans-serif; margin: 0; padding: 0;", width: "600"} + %tr + %td{style: "font-size: 1px; line-height: 1px;", width: "21"} + %td{align: "left", style: "padding: 20px 0 0;"} + %h2{style: "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} + = "Issue was #{@issue_status} by #{@updated_by.name}" + %td{style: "font-size: 1px; line-height: 1px;", width: "21"} + %tr + %td{style: "font-size: 1px; line-height: 1px;", width: "21"} + %td{align: "left", style: "padding: 20px 0 0;"} + %h2{style: "color:#646464 !important; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} + = "Issue ##{@issue.id}" + = link_to_gfm truncate(@issue.title, length: 45), project_issue_url(@issue.project, @issue), title: @issue.title + %br + diff --git a/app/views/notify/project_access_granted_email.html.haml b/app/views/notify/project_access_granted_email.html.haml new file mode 100644 index 00000000..154c2aaa --- /dev/null +++ b/app/views/notify/project_access_granted_email.html.haml @@ -0,0 +1,14 @@ +%td.content{align: "left", style: "font-family: Helvetica, Arial, sans-serif; padding: 20px 0 0;", valign: "top", width: "600"} + %table{border: "0", cellpadding: "0", cellspacing: "0", style: "color: #717171; font: normal 11px Helvetica, Arial, sans-serif; margin: 0; padding: 0;", width: "600"} + %tr + %td{style: "font-size: 1px; line-height: 1px;", width: "21"} + %td{align: "left", style: "padding: 20px 0 0;"} + %h2{style: "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} + = "You got granted #{@users_project.project_access_human} access to project" + %td{style: "font-size: 1px; line-height: 1px;", width: "21"} + %tr + %td{style: "font-size: 1px; line-height: 1px;", width: "21"} + %td{align: "left", style: "padding: 20px 0 0;"} + %h2{style: "color:#646464 !important; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} + = link_to_gfm truncate(@project.name, length: 45), project_url(@project), title: @project.name + %br diff --git a/app/views/profile/password.html.haml b/app/views/profile/password.html.haml index 257dacb1..d0aee7ac 100644 --- a/app/views/profile/password.html.haml +++ b/app/views/profile/password.html.haml @@ -16,4 +16,4 @@ = f.label :password_confirmation .input= f.password_field :password_confirmation .actions - = f.submit 'Save', class: "btn primary" + = f.submit 'Save', class: "btn save-btn" diff --git a/app/views/profile/show.html.haml b/app/views/profile/show.html.haml index 95cce2bb..22e840a0 100644 --- a/app/views/profile/show.html.haml +++ b/app/views/profile/show.html.haml @@ -45,9 +45,10 @@ %span.help-block Tell us about yourself in fewer than 250 characters. .span5.right - %p.alert.alert-info - %strong Tip: - You can change your avatar at gravatar.com + -unless Gitlab.config.disable_gravatar? + %p.alert.alert-info + %strong Tip: + You can change your avatar at gravatar.com %h4 Personal projects: @@ -66,4 +67,4 @@ = link_to "Add Public Key", new_key_path, class: "btn small right" .form-actions - = f.submit 'Save', class: "btn-primary btn" + = f.submit 'Save', class: "btn save-btn" diff --git a/app/views/projects/_clone_panel.html.haml b/app/views/projects/_clone_panel.html.haml new file mode 100644 index 00000000..839a98a0 --- /dev/null +++ b/app/views/projects/_clone_panel.html.haml @@ -0,0 +1,21 @@ +.project_clone_panel + .row + .span7 + .form-horizontal + .input-prepend.project_clone_holder + = link_to "SSH", "#", class: "btn small active", :"data-clone" => @project.ssh_url_to_repo + = link_to "HTTP", "#", class: "btn small", :"data-clone" => @project.http_url_to_repo + = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5" + .span4.right + .right + - if can? current_user, :download_code, @project + = link_to archive_project_repository_path(@project), class: "btn small grouped" do + %i.icon-download-alt + Download + - if @project.merge_requests_enabled && can?(current_user, :write_merge_request, @project) + = link_to new_project_merge_request_path(@project), title: "New Merge Request", class: "btn small grouped" do + Merge Request + - if @project.issues_enabled && can?(current_user, :write_issue, @project) + = link_to new_project_issue_path(@project), title: "New Issue", class: "btn small grouped" do + Issue + diff --git a/app/views/projects/_form.html.haml b/app/views/projects/_form.html.haml index ce66b2cf..8bdeda1c 100644 --- a/app/views/projects/_form.html.haml +++ b/app/views/projects/_form.html.haml @@ -10,9 +10,9 @@ .input = f.text_field :name, placeholder: "Example Project", class: "xxlarge" - %h5.page_title - .alert.alert-info - %h5 Advanced settings: + %hr + .adv_settings + %h6 Advanced settings: .clearfix = f.label :path do Path @@ -34,8 +34,9 @@ .input= f.select(:default_branch, @project.heads.map(&:name), {}, style: "width:210px;") - unless @project.new_record? - .alert.alert-info - %h5 Features: + %hr + .adv_settings + %h6 Features: .clearfix = f.label :issues_enabled, "Issues" @@ -56,7 +57,7 @@ %br .actions - = f.submit 'Save', class: "btn primary" + = f.submit 'Save', class: "btn save-btn" = link_to 'Cancel', @project, class: "btn" - unless @project.new_record? .right diff --git a/app/views/projects/_new_form.html.haml b/app/views/projects/_new_form.html.haml index 5104df83..e6d5e93f 100644 --- a/app/views/projects/_new_form.html.haml +++ b/app/views/projects/_new_form.html.haml @@ -7,11 +7,11 @@ Project name is .input = f.text_field :name, placeholder: "Example Project", class: "xxlarge" - = f.submit 'Create project', class: "btn primary" + = f.submit 'Create project', class: "btn primary project-submit" %hr - .alert.alert-info - %h5 Advanced settings: + %div.adv_settings + %h6 Advanced settings: .clearfix = f.label :path do Git Clone diff --git a/app/views/projects/empty.html.haml b/app/views/projects/empty.html.haml index b8d0dad9..d408c0a6 100644 --- a/app/views/projects/empty.html.haml +++ b/app/views/projects/empty.html.haml @@ -1,47 +1,51 @@ -- if current_user.require_ssh_key? - .alert-message.block-message.error - %ul - %li You have no ssh keys added to your profile. - %li You wont be able to pull/push repository. - %li Visit profile → keys and add public key of every machine you want to use for work with gitlabhq. - -.alert-message.block-message.error - %ul.unstyled.alert_holder - %li You should push repository to proceed. - %li After push you will be able to browse code, commits etc. - -- bash_lexer = Pygments::Lexer[:bash] += render 'shared/no_ssh' +.project_clone_panel + .row + .span7 + .form-horizontal + .input-prepend.project_clone_holder + = link_to "SSH", "#", class: "btn small active", :"data-clone" => @project.ssh_url_to_repo + = link_to "HTTP", "#", class: "btn small", :"data-clone" => @project.http_url_to_repo + = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5" %div.git-empty - %h3 Git global setup: - - setup_str = ["git config --global user.name \"#{current_user.name}\"", - "git config --global user.email \"#{current_user.email}\""].join("\n") - = preserve do - = raw bash_lexer.highlight(setup_str, lexer: 'bash', options: {encoding: 'utf-8'}) + %h4 Git global setup: + %pre.dark + = preserve do + git config --global user.name "#{current_user.name}" + git config --global user.email "#{current_user.email}" - %br - %br - %h3 Create Repository - - repo_setup_str = ["mkdir #{@project.path}", - "cd #{@project.path}", - "git init", - "touch README", - "git add README", - "git commit -m 'first commit'", - "git remote add origin #{@project.url_to_repo}", - "git push -u origin master"].join("\n") + %h4.prepend-top-20 Create Repository + %pre.dark + = preserve do + mkdir #{@project.path} + cd #{@project.path} + git init + touch README + git add README + git commit -m 'first commit' + git remote add origin #{@project.url_to_repo} + git push -u origin master - = preserve do - = raw bash_lexer.highlight(repo_setup_str) - - %br - %br - %h3 Existing Git Repo? - - exist_repo_setup_str = ["cd existing_git_repo", - "git remote add origin #{@project.url_to_repo}", - "git push -u origin master"].join("\n") - = preserve do - = raw bash_lexer.highlight(exist_repo_setup_str) + %h4.prepend-top-20 Existing Git Repo? + %pre.dark + = preserve do + cd existing_git_repo + git remote add origin #{@project.url_to_repo} + git push -u origin master - if can? current_user, :admin_project, @project - .alert-message.block-message.error.prepend-top-20 - = link_to 'Remove project', @project, confirm: 'Are you sure?', method: :delete, class: "btn danger" + .prepend-top-20 + = link_to 'Remove project', @project, confirm: 'Are you sure?', method: :delete, class: "btn danger right" + + + +:javascript + $(function(){ + var link_sel = ".project_clone_holder a"; + $(link_sel).bind("click", function() { + $(link_sel).removeClass("active"); + $(this).addClass("active"); + $("#project_clone").val($(this).attr("data-clone")); + }) + }) + diff --git a/app/views/projects/new.html.haml b/app/views/projects/new.html.haml index 703e558a..933cb671 100644 --- a/app/views/projects/new.html.haml +++ b/app/views/projects/new.html.haml @@ -3,10 +3,10 @@ New Project %hr = render 'new_form' -%div.ajax_loader.hide +%div.save-project-loader.hide %center - %div.padded= image_tag "ajax_loader.gif" - %h3.prepend-top Creating project & repository. Please wait a few minutes + = image_tag "ajax_loader.gif" + %h3 Creating project & repository. Please wait a few minutes :javascript $(function(){ new Projects(); }); diff --git a/app/views/projects/show.html.haml b/app/views/projects/show.html.haml index ebd2c8e4..77a0ef1a 100644 --- a/app/views/projects/show.html.haml +++ b/app/views/projects/show.html.haml @@ -1,35 +1,12 @@ = render "project_head" - -.entry - .row - .span7 - .form-horizontal - .input-prepend.project_clone_holder - - %span.add-on git clone - = link_to "SSH", "#", class: "btn small active", :"data-clone" => @project.ssh_url_to_repo - = link_to "HTTP", "#", class: "btn small", :"data-clone" => @project.http_url_to_repo - = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5" - .span4.right - .right - - if can? current_user, :download_code, @project - = link_to archive_project_repository_path(@project), class: "btn small grouped" do - %i.icon-download-alt - Download - - if @project.merge_requests_enabled && can?(current_user, :write_merge_request, @project) - = link_to new_project_merge_request_path(@project), title: "New Merge Request", class: "btn small grouped" do - Merge Request - - if @project.issues_enabled && can?(current_user, :write_issue, @project) - = link_to new_project_issue_path(@project), title: "New Issue", class: "btn small grouped" do - Issue - += render 'clone_panel' = render "events/event_last_push", event: @last_push .content_list= render @events -:javascript +:javascript $(function(){ var link_sel = ".project_clone_holder a"; - $(link_sel).bind("click", function() { + $(link_sel).bind("click", function() { $(link_sel).removeClass("active"); $(this).addClass("active"); $("#project_clone").val($(this).attr("data-clone")); diff --git a/app/views/refs/_tree_item.html.haml b/app/views/refs/_tree_item.html.haml index 2e6bbf62..d4c4ee8d 100644 --- a/app/views/refs/_tree_item.html.haml +++ b/app/views/refs/_tree_item.html.haml @@ -2,7 +2,7 @@ %tr{ class: "tree-item #{tree_hex_class(content)}", url: tree_file_project_ref_path(@project, @ref, file) } %td.tree-item-file-name = tree_icon(content) - = link_to truncate(content.name, length: 40), tree_file_project_ref_path(@project, @ref || @commit.id, file), remote: :true + %strong= link_to truncate(content.name, length: 40), tree_file_project_ref_path(@project, @ref || @commit.id, file), remote: :true %td.tree_time_ago.cgray - if index == 1 %span.log_loading diff --git a/app/views/search/show.html.haml b/app/views/search/show.html.haml index ed9da1f0..d37ef670 100644 --- a/app/views/search/show.html.haml +++ b/app/views/search/show.html.haml @@ -1,10 +1,10 @@ -= form_tag search_path, method: :get do |f| += form_tag search_path, method: :get, class: 'form-inline' do |f| .padded = label_tag :search do %strong Looking for .input = text_field_tag :search, params[:search], placeholder: "issue 143", class: "input-xxlarge", id: "dashboard_search" - = submit_tag 'Search', class: "btn btn-primary" + = submit_tag 'Search', class: "btn primary" - if params[:search].present? %br %h3 diff --git a/app/views/shared/_no_ssh.html.haml b/app/views/shared/_no_ssh.html.haml new file mode 100644 index 00000000..b6ab666b --- /dev/null +++ b/app/views/shared/_no_ssh.html.haml @@ -0,0 +1,8 @@ +- if current_user.require_ssh_key? + %h6.error_message + %span + You wont be able to pull/push project code unless you + %strong + = link_to new_key_path, class: "vlink" do + add SSH key + to your profile diff --git a/app/views/team_members/_show.html.haml b/app/views/team_members/_show.html.haml index f47554c1..2dc4fb65 100644 --- a/app/views/team_members/_show.html.haml +++ b/app/views/team_members/_show.html.haml @@ -9,7 +9,7 @@ %span.label Blocked = link_to project_team_member_path(@project, member), title: user.name, class: "dark" do - = image_tag gravatar_icon(user.email, 40), class: "avatar" + = image_tag gravatar_icon(user.email, 40), class: "avatar s32" = link_to project_team_member_path(@project, member), title: user.name, class: "dark" do %strong= truncate(user.name, lenght: 40) %br diff --git a/app/views/team_members/show.html.haml b/app/views/team_members/show.html.haml index d7e09bce..6cb357cd 100644 --- a/app/views/team_members/show.html.haml +++ b/app/views/team_members/show.html.haml @@ -51,7 +51,7 @@ = form_for(@team_member, as: :team_member, url: project_team_member_path(@project, @team_member)) do |f| = f.select :project_access, options_for_select(Project.access_options, @team_member.project_access), {}, class: "project-access-select", disabled: !allow_admin %hr - = render user.recent_events.limit(5) + = render @events :javascript $(function(){ $('.repo-access-select, .project-access-select').live("change", function() { diff --git a/app/views/wikis/_form.html.haml b/app/views/wikis/_form.html.haml index 6b6411be..12b57e03 100644 --- a/app/views/wikis/_form.html.haml +++ b/app/views/wikis/_form.html.haml @@ -14,13 +14,14 @@ .middle_box_content .input %span.cgray - Wiki content is parsed with #{link_to "Markdown", "http://en.wikipedia.org/wiki/Markdown"}. - To add link to new page you can just type + Wiki content is parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}. + To link to a (new) page you can just type %code [Link Title](page-slug) + \. .bottom_box_content = f.label :content .input= f.text_area :content, class: 'span8' .actions - = f.submit 'Save', class: "primary btn" - = link_to "Cancel", project_wiki_path(@project, :index), class: "btn" + = f.submit 'Save', class: "save-btn btn" + = link_to "Cancel", project_wiki_path(@project, :index), class: "btn cancel-btn" diff --git a/config/application.rb b/config/application.rb index ecd88b15..ad41f196 100644 --- a/config/application.rb +++ b/config/application.rb @@ -23,7 +23,7 @@ module Gitlab # config.plugins = [ :exception_notification, :ssl_requirement, :all ] # Activate observers that should always be running. - config.active_record.observers = :mailer_observer, :activity_observer, :project_observer, :key_observer, :issue_observer, :user_observer, :system_hook_observer + config.active_record.observers = :mailer_observer, :activity_observer, :project_observer, :key_observer, :issue_observer, :user_observer, :system_hook_observer, :users_project_observer # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. diff --git a/config/environment.rb b/config/environment.rb index c880a7ad..3b186a9d 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -3,5 +3,3 @@ require File.expand_path('../application', __FILE__) # Initialize the rails application Gitlab::Application.initialize! - -require File.join(Rails.root, "lib", "gitlab", "git_host") diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example index 1818f2c0..d05cc1be 100644 --- a/config/gitlab.yml.example +++ b/config/gitlab.yml.example @@ -1,4 +1,4 @@ -# # # # # # # # # # # # # # # # # # +# # # # # # # # # # # # # # # # # # # Gitlab application config file # # # # # # # # # # # # # # # # # # # @@ -19,27 +19,27 @@ email: # Application specific settings # Like default project limit for user etc -app: - default_projects_limit: 10 +app: + default_projects_limit: 10 # backup_path: "/vol/backups" # default: Rails.root + backups/ # backup_keep_time: 604800 # default: 0 (forever) (in seconds) + # disable_gravatar: true # default: false - Disable user avatars from Gravatar.com - -# -# 2. Advanced settings: +# +# 2. Advanced settings: # ========================== # Git Hosting configuration git_host: admin_uri: git@localhost:gitolite-admin base_path: /home/git/repositories/ + # hooks_path: /var/lib/gitolite/.gitolite/hooks/ # only needed when gitolite is not installed according the manual # host: localhost git_user: git upload_pack: true receive_pack: true # port: 22 - # Git settings # Use default values unless you understand it git: diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb index 5c5987a8..27c5bc22 100644 --- a/config/initializers/1_settings.rb +++ b/config/initializers/1_settings.rb @@ -66,6 +66,10 @@ class Settings < Settingslogic git_host['base_path'] || '/home/git/repositories/' end + def git_hooks_path + git_host['hooks_path'] || '/home/git/share/gitolite/hooks/' + end + def git_upload_pack if git_host['upload_pack'] != false true @@ -111,5 +115,9 @@ class Settings < Settingslogic def backup_keep_time app['backup_keep_time'] || 0 end + + def disable_gravatar? + app['disable_gravatar'] || false + end end end diff --git a/config/initializers/5_backend.rb b/config/initializers/5_backend.rb new file mode 100644 index 00000000..85f747ac --- /dev/null +++ b/config/initializers/5_backend.rb @@ -0,0 +1,5 @@ +# GIT over HTTP +require Rails.root.join("lib", "gitlab", "backend", "grack_auth") + +# GITOLITE backend +require Rails.root.join("lib", "gitlab", "backend", "gitolite") diff --git a/config/initializers/rails_footnotes.rb b/config/initializers/rails_footnotes.rb deleted file mode 100644 index afe6f3ad..00000000 --- a/config/initializers/rails_footnotes.rb +++ /dev/null @@ -1,3 +0,0 @@ -#if defined?(Footnotes) && Rails.env.development? - #Footnotes.run! # first of all -#end diff --git a/config/routes.rb b/config/routes.rb index 04e13bc4..f895478f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -30,6 +30,7 @@ Gitlab::Application.routes.draw do get 'help/web_hooks' => 'help#web_hooks' get 'help/system_hooks' => 'help#system_hooks' get 'help/markdown' => 'help#markdown' + get 'help/ssh' => 'help#ssh' # # Admin Area @@ -196,7 +197,9 @@ Gitlab::Application.routes.draw do end resources :team_members resources :milestones + resources :labels, :only => [:index] resources :issues do + collection do post :sort post :bulk_update diff --git a/db/fixtures/test/001_repo.rb b/db/fixtures/test/001_repo.rb index ebf005a1..67d4e7bf 100644 --- a/db/fixtures/test/001_repo.rb +++ b/db/fixtures/test/001_repo.rb @@ -1,15 +1,23 @@ -# create tmp dir if not exist -tmp_dir = File.join(Rails.root, "tmp") -Dir.mkdir(tmp_dir) unless File.exists?(tmp_dir) +require 'fileutils' -# Create dir for test repo -repo_dir = File.join(Rails.root, "tmp", "tests") -Dir.mkdir(repo_dir) unless File.exists?(repo_dir) +print "Unpacking seed repository..." -`cp spec/seed_project.tar.gz tmp/tests/` -Dir.chdir(repo_dir) -`tar -xf seed_project.tar.gz` -3.times do |i| -`cp -r gitlabhq/ gitlabhq_#{i}/` -puts "Unpacked seed repo - tmp/tests/gitlabhq_#{i}" +SEED_REPO = 'seed_project.tar.gz' +REPO_PATH = File.join(Rails.root, 'tmp', 'repositories') + +# Make whatever directories we need to make +FileUtils.mkdir_p(REPO_PATH) + +# Copy the archive to the repo path +FileUtils.cp(File.join(Rails.root, 'spec', SEED_REPO), REPO_PATH) + +# chdir to the repo path +FileUtils.cd(REPO_PATH) do + # Extract the archive + `tar -xf #{SEED_REPO}` + + # Remove the copy + FileUtils.rm(SEED_REPO) end + +puts ' done.' diff --git a/db/migrate/20120729131232_add_extern_auth_provider_to_users.rb b/db/migrate/20120729131232_add_extern_auth_provider_to_users.rb new file mode 100644 index 00000000..d5e66ba4 --- /dev/null +++ b/db/migrate/20120729131232_add_extern_auth_provider_to_users.rb @@ -0,0 +1,8 @@ +class AddExternAuthProviderToUsers < ActiveRecord::Migration + def change + add_column :users, :extern_uid, :string + add_column :users, :provider, :string + + add_index :users, [:extern_uid, :provider], :unique => true + end +end diff --git a/db/pkey.example b/db/pkey.example deleted file mode 100644 index ae045772..00000000 --- a/db/pkey.example +++ /dev/null @@ -1,3 +0,0 @@ -AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4 -596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4 -soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0= diff --git a/db/schema.rb b/db/schema.rb index c4c54f56..46461e44 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20120712080407) do +ActiveRecord::Schema.define(:version => 20120729131232) do create_table "events", :force => true do |t| t.string "target_type" @@ -171,9 +171,12 @@ ActiveRecord::Schema.define(:version => 20120712080407) do t.boolean "blocked", :default => false, :null => false t.integer "failed_attempts", :default => 0 t.datetime "locked_at" + t.string "extern_uid" + t.string "provider" end add_index "users", ["email"], :name => "index_users_on_email", :unique => true + add_index "users", ["extern_uid", "provider"], :name => "index_users_on_extern_uid_and_provider", :unique => true add_index "users", ["reset_password_token"], :name => "index_users_on_reset_password_token", :unique => true create_table "users_projects", :force => true do |t| diff --git a/doc/api/README.md b/doc/api/README.md index e0111966..53b4983e 100644 --- a/doc/api/README.md +++ b/doc/api/README.md @@ -27,4 +27,6 @@ The API uses JSON to serialize data. You don't need to specify `.json` at the en + [Users](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/users.md) + [Projects](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/projects.md) ++ [Snippets](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/snippets.md) + [Issues](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/issues.md) ++ [Milestones](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/milestones.md) diff --git a/doc/api/milestones.md b/doc/api/milestones.md new file mode 100644 index 00000000..f68d8eb7 --- /dev/null +++ b/doc/api/milestones.md @@ -0,0 +1,57 @@ +## List project milestones + +Get a list of project milestones. + +``` +GET /projects/:id/milestones +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project + +## Single milestone + +Get a single project milestone. + +``` +GET /projects/:id/milestones/:milestone_id +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `milestone_id` (required) - The ID of a project milestone + +## New milestone + +Create a new project milestone. + +``` +POST /projects/:id/milestones +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `milestone_id` (required) - The ID of a project milestone ++ `title` (required) - The title of an milestone ++ `description` (optional) - The description of the milestone ++ `due_date` (optional) - The due date of the milestone + +## Edit milestone + +Update an existing project milestone. + +``` +PUT /projects/:id/milestones/:milestone_id +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `milestone_id` (required) - The ID of a project milestone ++ `title` (optional) - The title of a milestone ++ `description` (optional) - The description of a milestone ++ `due_date` (optional) - The due date of the milestone ++ `closed` (optional) - The status of the milestone diff --git a/doc/api/projects.md b/doc/api/projects.md index ead31003..d680b5d8 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -204,108 +204,6 @@ Parameters: ] ``` -# Project Snippets - -## List snippets - -Not implemented. - -## Single snippet - -Get a project snippet. - -``` -GET /projects/:id/snippets/:snippet_id -``` - -Parameters: - -+ `id` (required) - The ID or code name of a project -+ `snippet_id` (required) - The ID of a project's snippet - -```json -{ - "id": 1, - "title": "test", - "file_name": "add.rb", - "author": { - "id": 1, - "email": "john@example.com", - "name": "John Smith", - "blocked": false, - "created_at": "2012-05-23T08:00:58Z" - }, - "expires_at": null, - "updated_at": "2012-06-28T10:52:04Z", - "created_at": "2012-06-28T10:52:04Z" -} -``` - -## Snippet content - -Get a raw project snippet. - -``` -GET /projects/:id/snippets/:snippet_id/raw -``` - -Parameters: - -+ `id` (required) - The ID or code name of a project -+ `snippet_id` (required) - The ID of a project's snippet - -## New snippet - -Create a new project snippet. - -``` -POST /projects/:id/snippets -``` - -Parameters: - -+ `id` (required) - The ID or code name of a project -+ `title` (required) - The title of a snippet -+ `file_name` (required) - The name of a snippet file -+ `lifetime` (optional) - The expiration date of a snippet -+ `code` (required) - The content of a snippet - -Will return created snippet with status `201 Created` on success, or `404 Not found` on fail. - -## Edit snippet - -Update an existing project snippet. - -``` -PUT /projects/:id/snippets/:snippet_id -``` - -Parameters: - -+ `id` (required) - The ID or code name of a project -+ `snippet_id` (required) - The ID of a project's snippet -+ `title` (optional) - The title of a snippet -+ `file_name` (optional) - The name of a snippet file -+ `lifetime` (optional) - The expiration date of a snippet -+ `code` (optional) - The content of a snippet - -Will return updated snippet with status `200 OK` on success, or `404 Not found` on fail. - -## Delete snippet - -Delete existing project snippet. - -``` -DELETE /projects/:id/snippets/:snippet_id -``` - -Parameters: - -+ `id` (required) - The ID or code name of a project -+ `snippet_id` (required) - The ID of a project's snippet - -Status code `200` will be returned on success. - ## Raw blob content Get the raw file contents for a file. diff --git a/doc/api/snippets.md b/doc/api/snippets.md new file mode 100644 index 00000000..0cd29ce5 --- /dev/null +++ b/doc/api/snippets.md @@ -0,0 +1,100 @@ +## List snippets + +Not implemented. + +## Single snippet + +Get a project snippet. + +``` +GET /projects/:id/snippets/:snippet_id +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `snippet_id` (required) - The ID of a project's snippet + +```json +{ + "id": 1, + "title": "test", + "file_name": "add.rb", + "author": { + "id": 1, + "email": "john@example.com", + "name": "John Smith", + "blocked": false, + "created_at": "2012-05-23T08:00:58Z" + }, + "expires_at": null, + "updated_at": "2012-06-28T10:52:04Z", + "created_at": "2012-06-28T10:52:04Z" +} +``` + +## Snippet content + +Get a raw project snippet. + +``` +GET /projects/:id/snippets/:snippet_id/raw +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `snippet_id` (required) - The ID of a project's snippet + +## New snippet + +Create a new project snippet. + +``` +POST /projects/:id/snippets +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `title` (required) - The title of a snippet ++ `file_name` (required) - The name of a snippet file ++ `lifetime` (optional) - The expiration date of a snippet ++ `code` (required) - The content of a snippet + +Will return created snippet with status `201 Created` on success, or `404 Not found` on fail. + +## Edit snippet + +Update an existing project snippet. + +``` +PUT /projects/:id/snippets/:snippet_id +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `snippet_id` (required) - The ID of a project's snippet ++ `title` (optional) - The title of a snippet ++ `file_name` (optional) - The name of a snippet file ++ `lifetime` (optional) - The expiration date of a snippet ++ `code` (optional) - The content of a snippet + +Will return updated snippet with status `200 OK` on success, or `404 Not found` on fail. + +## Delete snippet + +Delete existing project snippet. + +``` +DELETE /projects/:id/snippets/:snippet_id +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `snippet_id` (required) - The ID of a project's snippet + +Status code `200` will be returned on success. + diff --git a/doc/development.md b/doc/development.md new file mode 100644 index 00000000..55be2bc3 --- /dev/null +++ b/doc/development.md @@ -0,0 +1,45 @@ +## Development tips: + +### Start application in development mode + +#### 1. Via foreman + + bundle exec foreman -p 3000 + +#### 2. Via gitlab cli + + ./gitlab start + +#### 3. Manually + + bundle exec rails s + bundle exec rake environment resque:work QUEUE=* VVERBOSE=1 + + +### Run tests: + +#### 1. Packages + + # ubuntu + sudo apt-get install libqt4-dev libqtwebkit-dev + sudo apt-get install xvfb + + # Mac + brew install qt + brew install xvfb + +#### 2. DB & seeds + + bundle exec rake db:setup RAILS_ENV=test + bundle exec rake db:seed_fu RAILS_ENV=test + +### 3. Run Tests + + # All in one + bundle exec gitlab:test + + # Rspec + bundle exec rake spec + + # Cucumber + bundle exec rake cucumber diff --git a/doc/installation.md b/doc/installation.md index b6f1869b..b3fe92bf 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -119,7 +119,6 @@ Permissions: sudo chmod -R g+rwX /home/git/repositories/ sudo chown -R git:git /home/git/repositories/ - sudo chown gitlab:gitlab /home/git/repositories/**/hooks/post-receive #### CHECK: Logout & login again to apply git group to your user @@ -178,6 +177,11 @@ Permissions: sudo -u gitlab bundle exec rake gitlab:app:setup RAILS_ENV=production +#### Setup gitlab hooks + + sudo cp ./lib/hooks/post-receive /home/git/share/gitolite/hooks/common/post-receive + sudo chown git:git /home/git/share/gitolite/hooks/common/post-receive + Checking status: sudo -u gitlab bundle exec rake gitlab:app:status RAILS_ENV=production @@ -196,6 +200,7 @@ Checking status: Resolving deltas: 100% (174/174), done. Can clone gitolite-admin?............YES UMASK for .gitolite.rc is 0007? ............YES + /home/git/share/gitolite/hooks/common/post-receive exists? ............YES If you got all YES - congrats! You can go to next step. @@ -239,42 +244,15 @@ You can login via web using admin generated with setup: sudo -u gitlab cp config/unicorn.rb.orig config/unicorn.rb sudo -u gitlab bundle exec unicorn_rails -c config/unicorn.rb -E production -D -Edit /etc/nginx/nginx.conf. In the *http* section add the following section of code or replace it completely with https://raw.github.com/dosire/gitlabhq/master/aws/nginx.conf +Add gitlab to nginx sites & change with your host specific settings - upstream gitlab { - server unix:/home/gitlab/gitlab/tmp/sockets/gitlab.socket; - } + sudo cp /home/gitlab/gitlab/lib/support/nginx-gitlab /etc/nginx/sites-available/gitlab + sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab - server { - listen YOUR_SERVER_IP:80; # e.g., listen 192.168.1.1:80; - server_name YOUR_SERVER_FQDN; # e.g., server_name source.example.com; - root /home/gitlab/gitlab/public; - - # individual nginx logs for this gitlab vhost - access_log /var/log/nginx/gitlab_access.log; - error_log /var/log/nginx/gitlab_error.log; - - location / { - # serve static files from defined root folder;. - # @gitlab is a named location for the upstream fallback, see below - try_files $uri $uri/index.html $uri.html @gitlab; - } - - # if a file, which is not found in the root folder is requested, - # then the proxy pass the request to the upsteam (gitlab unicorn) - location @gitlab { - proxy_redirect off; - - # you need to change this to "https", if you set "ssl" directive to "on" - proxy_set_header X-FORWARDED_PROTO http; - proxy_set_header Host $http_host; - proxy_set_header X-Real-IP $remote_addr; - - proxy_pass http://gitlab; - } - } - -Change **YOUR_SERVER_IP** and **YOUR_SERVER_FQDN** to the IP address and fully-qualified domain name of the host serving GitLab. + # Change **YOUR_SERVER_IP** and **YOUR_SERVER_FQDN** + # to the IP address and fully-qualified domain name + # of the host serving GitLab. + sudo vim /etc/nginx/sites-enabled/gitlab Restart nginx: @@ -282,60 +260,7 @@ Restart nginx: Create init script in /etc/init.d/gitlab: - #! /bin/bash - ### BEGIN INIT INFO - # Provides: gitlab - # Required-Start: $local_fs $remote_fs $network $syslog redis-server - # Required-Stop: $local_fs $remote_fs $network $syslog - # Default-Start: 2 3 4 5 - # Default-Stop: 0 1 6 - # Short-Description: GitLab git repository management - # Description: GitLab git repository management - ### END INIT INFO - - DAEMON_OPTS="-c /home/gitlab/gitlab/config/unicorn.rb -E production -D" - NAME=unicorn - DESC="Gitlab service" - PID=/home/gitlab/gitlab/tmp/pids/unicorn.pid - RESQUE_PID=/home/gitlab/gitlab/tmp/pids/resque_worker.pid - - case "$1" in - start) - CD_TO_APP_DIR="cd /home/gitlab/gitlab" - START_DAEMON_PROCESS="bundle exec unicorn_rails $DAEMON_OPTS" - START_RESQUE_PROCESS="./resque.sh" - - echo -n "Starting $DESC: " - if [ `whoami` = root ]; then - sudo -u gitlab sh -l -c "$CD_TO_APP_DIR > /dev/null 2>&1 && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS" - else - $CD_TO_APP_DIR > /dev/null 2>&1 && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS - fi - echo "$NAME." - ;; - stop) - echo -n "Stopping $DESC: " - kill -QUIT `cat $PID` - kill -QUIT `cat $RESQUE_PID` - echo "$NAME." - ;; - restart) - echo -n "Restarting $DESC: " - kill -USR2 `cat $PID` - echo "$NAME." - ;; - reload) - echo -n "Reloading $DESC configuration: " - kill -HUP `cat $PID` - echo "$NAME." - ;; - *) - echo "Usage: $NAME {start|stop|restart|reload}" >&2 - exit 1 - ;; - esac - - exit 0 + cp /home/gitlab/gitlab/lib/support/init-gitlab /etc/init.d/gitlab Adding permission: diff --git a/features/profile/ssh_keys.feature b/features/profile/ssh_keys.feature index c3a92f30..c81503ed 100644 --- a/features/profile/ssh_keys.feature +++ b/features/profile/ssh_keys.feature @@ -3,8 +3,8 @@ Feature: SSH Keys Given I signin as a user And I have ssh keys: | title | - | Work | - | Home | + | ssh-rsa Work | + | ssh-rsa Home | And I visit profile keys page Scenario: I should see SSH keys diff --git a/features/projects/issues/labels.feature b/features/projects/issues/labels.feature new file mode 100644 index 00000000..5a20bfd6 --- /dev/null +++ b/features/projects/issues/labels.feature @@ -0,0 +1,13 @@ +Feature: Labels + Background: + Given I signin as a user + And I own project "Shop" + And project "Shop" have issues tags: + | name | + | bug | + | feature | + Given I visit project "Shop" labels page + + Scenario: I should see active milestones + Then I should see label "bug" + And I should see label "feature" diff --git a/features/projects/network.feature b/features/projects/network.feature index 9655184c..61c05eb3 100644 --- a/features/projects/network.feature +++ b/features/projects/network.feature @@ -4,9 +4,7 @@ Feature: Project Network Graph Background: Given I signin as a user And I own project "Shop" - And I visit project "Shop" network page + And I visit project "Shop" network page Scenario: I should see project network Then page should have network graph - - diff --git a/features/step_definitions/dashboard_steps.rb b/features/step_definitions/dashboard_steps.rb index 90c3a69c..a4edd224 100644 --- a/features/step_definitions/dashboard_steps.rb +++ b/features/step_definitions/dashboard_steps.rb @@ -91,36 +91,24 @@ Then /^I should see my merge requests$/ do end Given /^I have assigned issues$/ do - project1 = Factory :project, - :path => "project1", - :code => "gitlabhq_1" - - project2 = Factory :project, - :path => "project2", - :code => "gitlabhq_2" - - project1.add_access(@user, :read, :write) - project2.add_access(@user, :read, :write) + project = Factory :project + project.add_access(@user, :read, :write) issue1 = Factory :issue, :author => @user, :assignee => @user, - :project => project1 + :project => project issue2 = Factory :issue, :author => @user, :assignee => @user, - :project => project2 + :project => project end Given /^I have authored merge requests$/ do - project1 = Factory :project, - :path => "project1", - :code => "gitlabhq_1" + project1 = Factory :project - project2 = Factory :project, - :path => "project2", - :code => "gitlabhq_2" + project2 = Factory :project project1.add_access(@user, :read, :write) project2.add_access(@user, :read, :write) diff --git a/features/step_definitions/profile/profile_keys_steps.rb b/features/step_definitions/profile/profile_keys_steps.rb index 5ab7e048..25926c53 100644 --- a/features/step_definitions/profile/profile_keys_steps.rb +++ b/features/step_definitions/profile/profile_keys_steps.rb @@ -16,7 +16,7 @@ end Given /^I submit new ssh key "(.*?)"$/ do |arg1| fill_in "key_title", :with => arg1 - fill_in "key_key", :with => "publickey234=" + fill_in "key_key", :with => "ssh-rsa publickey234=" click_button "Save" end diff --git a/features/step_definitions/project/project_issues_steps.rb b/features/step_definitions/project/project_issues_steps.rb index 00a1721f..27de03d5 100644 --- a/features/step_definitions/project/project_issues_steps.rb +++ b/features/step_definitions/project/project_issues_steps.rb @@ -33,6 +33,25 @@ Given /^I visit issue page "(.*?)"$/ do |arg1| end Given /^I submit new issue "(.*?)"$/ do |arg1| - fill_in "issue_title", :with => arg1 + fill_in "issue_title", with: arg1 click_button "Submit new issue" end + +Given /^project "(.*?)" have issues tags:$/ do |arg1, table| + project = Project.find_by_name(arg1) + table.hashes.each do |hash| + Factory :issue, + project: project, + label_list: [hash[:name]] + end +end + +Given /^I visit project "(.*?)" labels page$/ do |arg1| + visit project_labels_path(Project.find_by_name(arg1)) +end + +Then /^I should see label "(.*?)"$/ do |arg1| + within ".labels-table" do + page.should have_content arg1 + end +end diff --git a/features/step_definitions/project/projects_steps.rb b/features/step_definitions/project/projects_steps.rb index c9af346e..d981e1f3 100644 --- a/features/step_definitions/project/projects_steps.rb +++ b/features/step_definitions/project/projects_steps.rb @@ -1,4 +1,4 @@ -include LoginMacros +include LoginHelpers Given /^I signin as a user$/ do login_as :user @@ -57,6 +57,11 @@ end Given /^I visit project "(.*?)" network page$/ do |arg1| project = Project.find_by_name(arg1) + + # Stub out find_all to speed this up (10 commits vs. 650) + commits = Grit::Commit.find_all(project.repo, nil, {max_count: 10}) + Grit::Commit.stub(:find_all).and_return(commits) + visit graph_project_path(project) end @@ -67,8 +72,8 @@ end Given /^page should have network graph$/ do page.should have_content "Project Network Graph" within ".graph" do - page.should have_content "stable" - page.should have_content "notes_refacto..." + page.should have_content "master" + page.should have_content "scss_refactor..." end end diff --git a/features/support/env.rb b/features/support/env.rb index 496f23f9..53578152 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -1,13 +1,16 @@ -require 'simplecov' -SimpleCov.start 'rails' +unless ENV['CI'] + require 'simplecov' + SimpleCov.start 'rails' +end require 'cucumber/rails' require 'webmock/cucumber' + WebMock.allow_net_connect! -require Rails.root.join 'spec/monkeypatch' -require Rails.root.join 'spec/factories' -require Rails.root.join 'spec/support/login' +require Rails.root.join 'spec/support/gitolite_stub' +require Rails.root.join 'spec/support/stubbed_repository' +require Rails.root.join 'spec/support/login_helpers' require Rails.root.join 'spec/support/valid_commit' Capybara.default_selector = :css @@ -44,3 +47,13 @@ require 'headless' headless = Headless.new headless.start + +require 'cucumber/rspec/doubles' + +include GitoliteStub + +Before do + stub_gitolite! +end + +World(FactoryGirl::Syntax::Methods) diff --git a/gitlab b/gitlab new file mode 100755 index 00000000..acafb3f1 --- /dev/null +++ b/gitlab @@ -0,0 +1,75 @@ +#!/usr/bin/env ruby + +class GitlabCli + def initialize + @path = File.dirname(__FILE__) + @command = ARGV.shift + @mode = ARGV.shift + end + + def execute + case @command + when 'start' then start + when 'stop' then stop + else + puts "-- Usage gitlab start production or gitlab stop development" + end + end + + private + + def start + case @mode + when 'production'; + system(unicorn_start_cmd) + system(resque_start_cmd) + else + system(rails_start_cmd) + system(resque_dev_start_cmd) + end + end + + def stop + case @mode + when 'production'; + system(unicorn_stop_cmd) + else + system(rails_stop_cmd) + end + system(resque_stop_cmd) + end + + def rails_start_cmd + "bundle exec rails s -d" + end + + def rails_stop_cmd + pid = File.join(@path, "tmp/pids/server.pid") + "kill -QUIT `cat #{pid}`" + end + + def unicorn_start_cmd + unicorn_conf = File.join(@path, "config/unicorn.rb") + "bundle exec unicorn_rails -c #{unicorn_conf} -E production -D" + end + + def unicorn_stop_cmd + pid = File.join(@path, "/tmp/pids/unicorn.pid") + "kill -QUIT `cat #{pid}`" + end + + def resque_dev_start_cmd + "./resque_dev.sh > /dev/null 2>&1" + end + + def resque_start_cmd + "./resque.sh > /dev/null 2>&1" + end + + def resque_stop_cmd + pid = File.join(@path, "tmp/pids/resque_worker.pid") + "kill -QUIT `cat #{pid}`" + end +end + +GitlabCli.new.execute diff --git a/lib/api.rb b/lib/api.rb index 3ff3b383..be04701c 100644 --- a/lib/api.rb +++ b/lib/api.rb @@ -16,5 +16,6 @@ module Gitlab mount Users mount Projects mount Issues + mount Milestones end end diff --git a/lib/api/issues.rb b/lib/api/issues.rb index 2abc20ad..836c2818 100644 --- a/lib/api/issues.rb +++ b/lib/api/issues.rb @@ -95,7 +95,7 @@ module Gitlab end end - # Delete a project issue + # Delete a project issue (deprecated) # # Parameters: # id (required) - The ID or code name of a project @@ -103,8 +103,7 @@ module Gitlab # Example Request: # DELETE /projects/:id/issues/:issue_id delete ":id/issues/:issue_id" do - @issue = user_project.issues.find(params[:issue_id]) - @issue.destroy + error!({'message' => 'method not allowed'}, 405) end end end diff --git a/lib/api/milestones.rb b/lib/api/milestones.rb new file mode 100644 index 00000000..f537b8e5 --- /dev/null +++ b/lib/api/milestones.rb @@ -0,0 +1,80 @@ +module Gitlab + # Milestones API + class Milestones < Grape::API + before { authenticate! } + + resource :projects do + # Get a list of project milestones + # + # Parameters: + # id (required) - The ID or code name of a project + # Example Request: + # GET /projects/:id/milestones + get ":id/milestones" do + present user_project.milestones, with: Entities::Milestone + end + + # Get a single project milestone + # + # Parameters: + # id (required) - The ID or code name of a project + # milestone_id (required) - The ID of a project milestone + # Example Request: + # GET /projects/:id/milestones/:milestone_id + get ":id/milestones/:milestone_id" do + @milestone = user_project.milestones.find(params[:milestone_id]) + present @milestone, with: Entities::Milestone + end + + # Create a new project milestone + # + # Parameters: + # id (required) - The ID or code name of the project + # title (required) - The title of the milestone + # description (optional) - The description of the milestone + # due_date (optional) - The due date of the milestone + # Example Request: + # POST /projects/:id/milestones + post ":id/milestones" do + @milestone = user_project.milestones.new( + title: params[:title], + description: params[:description], + due_date: params[:due_date] + ) + + if @milestone.save + present @milestone, with: Entities::Milestone + else + error!({'message' => '404 Not found'}, 404) + end + end + + # Update an existing project milestone + # + # Parameters: + # id (required) - The ID or code name of a project + # milestone_id (required) - The ID of a project milestone + # title (optional) - The title of a milestone + # description (optional) - The description of a milestone + # due_date (optional) - The due date of a milestone + # closed (optional) - The status of the milestone + # Example Request: + # PUT /projects/:id/milestones/:milestone_id + put ":id/milestones/:milestone_id" do + @milestone = user_project.milestones.find(params[:milestone_id]) + parameters = { + title: (params[:title] || @milestone.title), + description: (params[:description] || @milestone.description), + due_date: (params[:due_date] || @milestone.due_date), + closed: (params[:closed] || @milestone.closed) + } + + if @milestone.update_attributes(parameters) + present @milestone, with: Entities::Milestone + else + error!({'message' => '404 Not found'}, 404) + end + end + end + end +end diff --git a/lib/gitlab/gitolite.rb b/lib/gitlab/backend/gitolite.rb similarity index 72% rename from lib/gitlab/gitolite.rb rename to lib/gitlab/backend/gitolite.rb index e82f9e62..b69f4663 100644 --- a/lib/gitlab/gitolite.rb +++ b/lib/gitlab/backend/gitolite.rb @@ -2,54 +2,57 @@ require 'gitolite' require 'timeout' require 'fileutils' +# TODO: refactor & cleanup module Gitlab class Gitolite class AccessDenied < StandardError; end + class InvalidKey < StandardError; end - def self.update_project(path, project) - self.new.configure { |git| git.update_project(path, project) } + def set_key key_id, key_content, projects + configure do |c| + c.update_keys(key_id, key_content) + c.update_projects(projects) + end end - def self.destroy_project(project) - self.new.configure { |git| git.destroy_project(project) } + def remove_key key_id, projects + configure do |c| + c.delete_key(key_id) + c.update_projects(projects) + end end - def pull + def update_repository project + configure do |c| + c.update_project(project.path, project) + end + end + + alias_method :create_repository, :update_repository + + def remove_repository project + configure do |c| + c.destroy_project(project) + end + end + + def url_to_repo path + Gitlab.config.ssh_path + "#{path}.git" + end + + def initialize # create tmp dir @local_dir = File.join(Rails.root, 'tmp',"gitlabhq-gitolite-#{Time.now.to_i}") - Dir.mkdir @local_dir - - `git clone #{GitHost.admin_uri} #{@local_dir}/gitolite` end - def push - Dir.chdir(File.join(@local_dir, "gitolite")) - `git add -A` - `git commit -am "Gitlab"` - `git push` - Dir.chdir(Rails.root) - - FileUtils.rm_rf(@local_dir) - end - - def configure - Timeout::timeout(30) do - File.open(File.join(Rails.root, 'tmp', "gitlabhq-gitolite.lock"), "w+") do |f| - begin - f.flock(File::LOCK_EX) - pull - yield(self) - push - ensure - f.flock(File::LOCK_UN) - end - end + def enable_automerge + configure do |git| + git.admin_all_repo end - rescue Exception => ex - Gitlab::Logger.error(ex.message) - raise Gitolite::AccessDenied.new("gitolite timeout") end + protected + def destroy_project(project) FileUtils.rm_rf(project.path_to_repo) @@ -106,13 +109,13 @@ module Gitlab name_writers = project.repository_writers name_masters = project.repository_masters - pr_br = project.protected_branches.map(&:name).join(" ") + pr_br = project.protected_branches.map(&:name).join("$ ") repo.clean_permissions # Deny access to protected branches for writers unless name_writers.blank? || pr_br.blank? - repo.add_permission("-", pr_br, name_writers) + repo.add_permission("-", pr_br.strip + "$ ", name_writers) end # Add read permissions @@ -153,5 +156,47 @@ module Gitlab conf.add_repo(repo, true) ga_repo.save end + + private + + def pull + # create tmp dir + @local_dir = File.join(Rails.root, 'tmp',"gitlabhq-gitolite-#{Time.now.to_i}") + Dir.mkdir @local_dir + + `git clone #{Gitlab.config.gitolite_admin_uri} #{@local_dir}/gitolite` + end + + def push + Dir.chdir(File.join(@local_dir, "gitolite")) + `git add -A` + `git commit -am "Gitlab"` + `git push` + Dir.chdir(Rails.root) + + FileUtils.rm_rf(@local_dir) + end + + def configure + Timeout::timeout(30) do + File.open(File.join(Rails.root, 'tmp', "gitlabhq-gitolite.lock"), "w+") do |f| + begin + f.flock(File::LOCK_EX) + pull + yield(self) + push + ensure + f.flock(File::LOCK_UN) + end + end + end + rescue Exception => ex + if ex.message =~ /is not a valid SSH key string/ + raise Gitolite::InvalidKey.new("ssh key is not valid") + else + Gitlab::Logger.error(ex.message) + raise Gitolite::AccessDenied.new("gitolite timeout") + end + end end end diff --git a/config/initializers/grack_auth.rb b/lib/gitlab/backend/grack_auth.rb similarity index 87% rename from config/initializers/grack_auth.rb rename to lib/gitlab/backend/grack_auth.rb index 5995b873..4f77c327 100644 --- a/config/initializers/grack_auth.rb +++ b/lib/gitlab/backend/grack_auth.rb @@ -42,13 +42,13 @@ module Grack def current_ref if @env["HTTP_CONTENT_ENCODING"] =~ /gzip/ - input = Zlib::GzipReader.new(@request.body).string + input = Zlib::GzipReader.new(@request.body).read else - input = @request.body.string + input = @request.body.read end - - oldrev, newrev, ref = input.split(' ') - /refs\/heads\/([\w-]+)/.match(ref).to_a.last + # Need to reset seek point + @request.body.rewind + /refs\/heads\/([\w-]+)/.match(input).to_a.first end end# Auth end# Grack diff --git a/lib/gitlab/git_host.rb b/lib/gitlab/git_host.rb deleted file mode 100644 index 76b2c7b1..00000000 --- a/lib/gitlab/git_host.rb +++ /dev/null @@ -1,17 +0,0 @@ -require File.join(Rails.root, "lib", "gitlab", "gitolite") - -module Gitlab - class GitHost - def self.system - Gitlab::Gitolite - end - - def self.admin_uri - Gitlab.config.git_host.admin_uri - end - - def self.url_to_repo(path) - Gitlab.config.ssh_path + "#{path}.git" - end - end -end diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb index d3daed91..75fa835d 100644 --- a/lib/gitlab/markdown.rb +++ b/lib/gitlab/markdown.rb @@ -1,5 +1,14 @@ module Gitlab - # Custom parsing for Gitlab-flavored Markdown + # Custom parser for Gitlab-flavored Markdown + # + # It replaces references in the text with links to the appropriate items in Gitlab. + # + # Supported reference formats are: + # * @foo for team members + # * #123 for issues + # * !123 for merge requests + # * $123 for snippets + # * 123456 for commits # # Examples # @@ -67,25 +76,25 @@ module Gitlab def reference_user(identifier) if user = @project.users.where(name: identifier).first member = @project.users_projects.where(user_id: user).first - link_to("@#{user.name}", project_team_member_path(@project, member), html_options.merge(class: "gfm gfm-team_member #{html_options[:class]}")) if member + link_to("@#{identifier}", project_team_member_path(@project, member), html_options.merge(class: "gfm gfm-team_member #{html_options[:class]}")) if member end end def reference_issue(identifier) if issue = @project.issues.where(id: identifier).first - link_to("##{issue.id}", project_issue_path(@project, issue), html_options.merge(title: "Issue: #{issue.title}", class: "gfm gfm-issue #{html_options[:class]}")) + link_to("##{identifier}", project_issue_path(@project, issue), html_options.merge(title: "Issue: #{issue.title}", class: "gfm gfm-issue #{html_options[:class]}")) end end def reference_merge_request(identifier) if merge_request = @project.merge_requests.where(id: identifier).first - link_to("!#{merge_request.id}", project_merge_request_path(@project, merge_request), html_options.merge(title: "Merge Request: #{merge_request.title}", class: "gfm gfm-merge_request #{html_options[:class]}")) + link_to("!#{identifier}", project_merge_request_path(@project, merge_request), html_options.merge(title: "Merge Request: #{merge_request.title}", class: "gfm gfm-merge_request #{html_options[:class]}")) end end def reference_snippet(identifier) if snippet = @project.snippets.where(id: identifier).first - link_to("$#{snippet.id}", project_snippet_path(@project, snippet), html_options.merge(title: "Snippet: #{snippet.title}", class: "gfm gfm-snippet #{html_options[:class]}")) + link_to("$#{identifier}", project_snippet_path(@project, snippet), html_options.merge(title: "Snippet: #{snippet.title}", class: "gfm gfm-snippet #{html_options[:class]}")) end end diff --git a/lib/post-receive-hook b/lib/hooks/post-receive similarity index 100% rename from lib/post-receive-hook rename to lib/hooks/post-receive diff --git a/lib/support/init-gitlab b/lib/support/init-gitlab new file mode 100644 index 00000000..f146e80f --- /dev/null +++ b/lib/support/init-gitlab @@ -0,0 +1,54 @@ +#! /bin/bash +### BEGIN INIT INFO +# Provides: gitlab +# Required-Start: $local_fs $remote_fs $network $syslog redis-server +# Required-Stop: $local_fs $remote_fs $network $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: GitLab git repository management +# Description: GitLab git repository management +### END INIT INFO + +DAEMON_OPTS="-c /home/gitlab/gitlab/config/unicorn.rb -E production -D" +NAME=unicorn +DESC="Gitlab service" +PID=/home/gitlab/gitlab/tmp/pids/unicorn.pid +RESQUE_PID=/home/gitlab/gitlab/tmp/pids/resque_worker.pid + +case "$1" in + start) + CD_TO_APP_DIR="cd /home/gitlab/gitlab" + START_DAEMON_PROCESS="bundle exec unicorn_rails $DAEMON_OPTS" + START_RESQUE_PROCESS="./resque.sh" + + echo -n "Starting $DESC: " + if [ `whoami` = root ]; then + sudo -u gitlab sh -l -c "$CD_TO_APP_DIR > /dev/null 2>&1 && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS" + else + $CD_TO_APP_DIR > /dev/null 2>&1 && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS + fi + echo "$NAME." + ;; + stop) + echo -n "Stopping $DESC: " + kill -QUIT `cat $PID` + kill -QUIT `cat $RESQUE_PID` + echo "$NAME." + ;; + restart) + echo -n "Restarting $DESC: " + kill -USR2 `cat $PID` + echo "$NAME." + ;; + reload) + echo -n "Reloading $DESC configuration: " + kill -HUP `cat $PID` + echo "$NAME." + ;; + *) + echo "Usage: $NAME {start|stop|restart|reload}" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/lib/support/nginx-gitlab b/lib/support/nginx-gitlab new file mode 100644 index 00000000..fa15d201 --- /dev/null +++ b/lib/support/nginx-gitlab @@ -0,0 +1,33 @@ +upstream gitlab { + server unix:/home/gitlab/gitlab/tmp/sockets/gitlab.socket; +} + +server { + listen YOUR_SERVER_IP:80; # e.g., listen 192.168.1.1:80; + server_name YOUR_SERVER_FQDN; # e.g., server_name source.example.com; + root /home/gitlab/gitlab/public; + + # individual nginx logs for this gitlab vhost + access_log /var/log/nginx/gitlab_access.log; + error_log /var/log/nginx/gitlab_error.log; + + location / { + # serve static files from defined root folder;. + # @gitlab is a named location for the upstream fallback, see below + try_files $uri $uri/index.html $uri.html @gitlab; + } + + # if a file, which is not found in the root folder is requested, + # then the proxy pass the request to the upsteam (gitlab unicorn) + location @gitlab { + proxy_redirect off; + + # you need to change this to "https", if you set "ssl" directive to "on" + proxy_set_header X-FORWARDED_PROTO http; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + + proxy_pass http://gitlab; + } +} + diff --git a/lib/tasks/bulk_add_permission.rake b/lib/tasks/bulk_add_permission.rake new file mode 100644 index 00000000..55797825 --- /dev/null +++ b/lib/tasks/bulk_add_permission.rake @@ -0,0 +1,26 @@ +desc "Add all users to all projects, system administratos are added as masters" +task :add_users_to_project_teams => :environment do |t, args| + users = User.find_all_by_admin(false, :select => 'id').map(&:id) + admins = User.find_all_by_admin(true, :select => 'id').map(&:id) + + users.each do |user| + puts "#{user}" + end + + Project.all.each do |project| + puts "Importing #{users.length} users into #{project.path}" + UsersProject.bulk_import(project, users, UsersProject::DEVELOPER) + puts "Importing #{admins.length} admins into #{project.path}" + UsersProject.bulk_import(project, admins, UsersProject::MASTER) + end +end + +desc "Add user to as a developer to all projects" +task :add_user_to_project_teams, [:email] => :environment do |t, args| + user_email = args.email + user = User.find_by_email(user_email) + + project_ids = Project.all.map(&:id) + + UsersProject.user_bulk_import(user,project_ids,UsersProject::DEVELOPER) +end diff --git a/lib/tasks/gitlab/backup.rake b/lib/tasks/gitlab/backup.rake index d9053c23..04d240f6 100644 --- a/lib/tasks/gitlab/backup.rake +++ b/lib/tasks/gitlab/backup.rake @@ -144,8 +144,7 @@ namespace :gitlab do if Kernel.system("cd #{File.dirname(project.second)} > /dev/null 2>&1 && git clone --bare #{backup_path_repo}/#{project.first}.bundle #{project.first}.git > /dev/null 2>&1") permission_commands = [ "sudo chmod -R g+rwX #{Gitlab.config.git_base_path}", - "sudo chown -R #{Gitlab.config.ssh_user}:#{Gitlab.config.ssh_user} #{Gitlab.config.git_base_path}", - "sudo chown gitlab:gitlab /home/git/repositories/**/hooks/post-receive" + "sudo chown -R #{Gitlab.config.ssh_user}:#{Gitlab.config.ssh_user} #{Gitlab.config.git_base_path}" ] permission_commands.each { |command| Kernel.system(command) } puts "[DONE]".green diff --git a/lib/tasks/gitlab/enable_automerge.rake b/lib/tasks/gitlab/enable_automerge.rake index 07f80586..0a1a0fa7 100644 --- a/lib/tasks/gitlab/enable_automerge.rake +++ b/lib/tasks/gitlab/enable_automerge.rake @@ -2,9 +2,7 @@ namespace :gitlab do namespace :app do desc "GITLAB | Enable auto merge" task :enable_automerge => :environment do - Gitlab::GitHost.system.new.configure do |git| - git.admin_all_repo - end + Gitlab::Gitolite.new.enable_automerge Project.find_each do |project| if project.repo_exists? && !project.satellite.exists? diff --git a/lib/tasks/gitlab/gitolite_rebuild.rake b/lib/tasks/gitlab/gitolite_rebuild.rake index 5ab17606..534aa315 100644 --- a/lib/tasks/gitlab/gitolite_rebuild.rake +++ b/lib/tasks/gitlab/gitolite_rebuild.rake @@ -16,7 +16,7 @@ namespace :gitlab do task :update_keys => :environment do puts "Starting Key" Key.find_each(:batch_size => 100) do |key| - key.update_repository + Gitlab::Gitolite.new.set_key(key.identifier, key.key, key.projects) print '.' end puts "Done with keys" diff --git a/lib/tasks/gitlab/setup.rake b/lib/tasks/gitlab/setup.rake index d60e73e9..49c86461 100644 --- a/lib/tasks/gitlab/setup.rake +++ b/lib/tasks/gitlab/setup.rake @@ -1,7 +1,11 @@ namespace :gitlab do namespace :app do desc "GITLAB | Setup production application" - task :setup => ['db:setup', 'db:seed_fu', 'gitlab:app:enable_automerge'] + task :setup => [ + 'db:setup', + 'db:seed_fu', + 'gitlab:app:enable_automerge' + ] end end diff --git a/lib/tasks/gitlab/status.rake b/lib/tasks/gitlab/status.rake index bc4e86ea..e5b5e122 100644 --- a/lib/tasks/gitlab/status.rake +++ b/lib/tasks/gitlab/status.rake @@ -56,6 +56,20 @@ namespace :gitlab do return end + gitolite_hooks_path = File.join(Gitlab.config.git_hooks_path, "common") + gitlab_hook_files = ['post-receive'] + gitlab_hook_files.each do |file_name| + dest = File.join(gitolite_hooks_path, file_name) + print "#{dest} exists? ............" + if File.exists?(dest) + puts "YES".green + else + puts "NO".red + return + end + end + + if Project.count > 0 puts "Validating projects repositories:".yellow Project.find_each(:batch_size => 100) do |project| @@ -67,13 +81,7 @@ namespace :gitlab do next end - - unless File.owned?(hook_file) - puts "post-receive file is not owner by gitlab".red - next - end - - puts "post-reveice file ok".green + puts "post-receive file ok".green end end diff --git a/lib/tasks/gitlab/update_hooks.rake b/lib/tasks/gitlab/update_hooks.rake deleted file mode 100644 index 44e1617e..00000000 --- a/lib/tasks/gitlab/update_hooks.rake +++ /dev/null @@ -1,19 +0,0 @@ -namespace :gitlab do - namespace :gitolite do - desc "GITLAB | Rewrite hooks for repos" - task :update_hooks => :environment do - puts "Starting Projects" - Project.find_each(:batch_size => 100) do |project| - begin - if project.commit - project.write_hooks - print ".".green - end - rescue Exception => e - print e.message.red - end - end - puts "\nDone with projects" - end - end -end diff --git a/lib/tasks/gitlab/write_hook.rake b/lib/tasks/gitlab/write_hook.rake new file mode 100644 index 00000000..9ec9c838 --- /dev/null +++ b/lib/tasks/gitlab/write_hook.rake @@ -0,0 +1,23 @@ +namespace :gitlab do + namespace :gitolite do + desc "GITLAB | Write GITLAB hook for gitolite" + task :write_hooks => :environment do + gitolite_hooks_path = File.join(Gitlab.config.git_hooks_path, "common") + gitlab_hooks_path = Rails.root.join("lib", "hooks") + + gitlab_hook_files = ['post-receive'] + + gitlab_hook_files.each do |file_name| + source = File.join(gitlab_hooks_path, file_name) + dest = File.join(gitolite_hooks_path, file_name) + + puts "sudo -u root cp #{source} #{dest}".yellow + `sudo -u root cp #{source} #{dest}` + + puts "sudo -u root chown git:git #{dest}".yellow + `sudo -u root chown git:git #{dest}` + end + end + end +end + diff --git a/resque_dev.sh b/resque_dev.sh index b09cfd9e..0f1d6edb 100755 --- a/resque_dev.sh +++ b/resque_dev.sh @@ -1 +1,2 @@ -bundle exec rake environment resque:work QUEUE=post_receive,mailer,system_hook VVERBOSE=1 +mkdir -p tmp/pids +bundle exec rake environment resque:work QUEUE=post_receive,mailer,system_hook VVERBOSE=1 PIDFILE=tmp/pids/resque_worker.pid RAILS_ENV=development BACKGROUND=yes diff --git a/spec/factories.rb b/spec/factories.rb index ab2ca468..2e4acf39 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -1,92 +1,130 @@ -require File.join(Rails.root, 'spec', 'factory') - -Factory.add(:project, Project) do |obj| - obj.name = Faker::Internet.user_name - obj.path = 'gitlabhq' - obj.owner = Factory(:user) - obj.code = 'LGT' +# Backwards compatibility with the old method +def Factory(type, *args) + FactoryGirl.create(type, *args) end -Factory.add(:project_without_owner, Project) do |obj| - obj.name = Faker::Internet.user_name - obj.path = 'gitlabhq' - obj.code = 'LGT' +module Factory + def self.create(type, *args) + FactoryGirl.create(type, *args) + end + + def self.new(type, *args) + FactoryGirl.build(type, *args) + end end -Factory.add(:public_project, Project) do |obj| - obj.name = Faker::Internet.user_name - obj.path = 'gitlabhq' - obj.private_flag = false - obj.owner = Factory(:user) - obj.code = 'LGT' -end +FactoryGirl.define do + sequence :sentence, aliases: [:title, :content] do + Faker::Lorem.sentence + end -Factory.add(:user, User) do |obj| - obj.email = Faker::Internet.email - obj.password = "123456" - obj.name = Faker::Name.name - obj.password_confirmation = "123456" -end + sequence :name, aliases: [:file_name] do + Faker::Name.name + end -Factory.add(:admin, User) do |obj| - obj.email = Faker::Internet.email - obj.password = "123456" - obj.name = Faker::Name.name - obj.password_confirmation = "123456" - obj.admin = true -end + sequence(:url) { Faker::Internet.uri('http') } -Factory.add(:issue, Issue) do |obj| - obj.title = Faker::Lorem.sentence - obj.author = Factory :user - obj.assignee = Factory :user -end + factory :user, aliases: [:author, :assignee, :owner] do + email { Faker::Internet.email } + name + password "123456" + password_confirmation "123456" -Factory.add(:merge_request, MergeRequest) do |obj| - obj.title = Faker::Lorem.sentence - obj.author = Factory :user - obj.assignee = Factory :user - obj.source_branch = "master" - obj.target_branch = "stable" - obj.closed = false -end + trait :admin do + admin true + end -Factory.add(:snippet, Snippet) do |obj| - obj.title = Faker::Lorem.sentence - obj.file_name = Faker::Lorem.sentence - obj.content = Faker::Lorem.sentences -end + factory :admin, traits: [:admin] + end -Factory.add(:note, Note) do |obj| - obj.note = Faker::Lorem.sentence -end + factory :project do + sequence(:name) { |n| "project#{n}" } + path { name } + code { name } + owner + end -Factory.add(:key, Key) do |obj| - obj.title = "Example key" - obj.key = File.read(File.join(Rails.root, "db", "pkey.example")) -end + factory :users_project do + user + project + end -Factory.add(:project_hook, ProjectHook) do |obj| - obj.url = Faker::Internet.uri("http") -end + factory :issue do + title + author + project -Factory.add(:system_hook, SystemHook) do |obj| - obj.url = Faker::Internet.uri("http") -end + trait :closed do + closed true + end -Factory.add(:wiki, Wiki) do |obj| - obj.title = Faker::Lorem.sentence - obj.content = Faker::Lorem.sentence - obj.user = Factory(:user) - obj.project = Factory(:project) -end + factory :closed_issue, traits: [:closed] + end -Factory.add(:event, Event) do |obj| - obj.title = Faker::Lorem.sentence - obj.project = Factory(:project) -end + factory :merge_request do + title + author + project + source_branch "master" + target_branch "stable" + end -Factory.add(:milestone, Milestone) do |obj| - obj.title = Faker::Lorem.sentence - obj.due_date = Date.today + 1.month + factory :note do + project + note "Note" + end + + factory :event do + end + + factory :key do + title + key do + """ + ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4 + 596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4 + soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0= + """ + end + + factory :deploy_key do + project + end + + factory :personal_key do + user + end + end + + factory :milestone do + title + project + end + + factory :system_hook do + url + end + + factory :project_hook do + url + end + + factory :wiki do + title + content + user + end + + factory :snippet do + project + author + title + content + file_name + end + + factory :protected_branch do + name + project + end end diff --git a/spec/factories_spec.rb b/spec/factories_spec.rb new file mode 100644 index 00000000..5760aad4 --- /dev/null +++ b/spec/factories_spec.rb @@ -0,0 +1,91 @@ +require 'spec_helper' + +describe "Factories" do + describe 'User' do + it "builds a valid instance" do + build(:user).should be_valid + end + + it "builds a valid admin instance" do + build(:admin).should be_valid + end + end + + describe 'Project' do + it "builds a valid instance" do + build(:project).should be_valid + end + end + + describe 'Issue' do + it "builds a valid instance" do + build(:issue).should be_valid + end + + it "builds a valid closed instance" do + build(:closed_issue).should be_valid + end + end + + describe 'MergeRequest' do + it "builds a valid instance" do + build(:merge_request).should be_valid + end + end + + describe 'Note' do + it "builds a valid instance" do + build(:note).should be_valid + end + end + + describe 'Event' do + it "builds a valid instance" do + build(:event).should be_valid + end + end + + describe 'Key' do + it "builds a valid instance" do + build(:key).should be_valid + end + + it "builds a valid deploy key instance" do + build(:deploy_key).should be_valid + end + + it "builds a valid personal key instance" do + build(:personal_key).should be_valid + end + end + + describe 'Milestone' do + it "builds a valid instance" do + build(:milestone).should be_valid + end + end + + describe 'SystemHook' do + it "builds a valid instance" do + build(:system_hook).should be_valid + end + end + + describe 'ProjectHook' do + it "builds a valid instance" do + build(:project_hook).should be_valid + end + end + + describe 'Wiki' do + it "builds a valid instance" do + build(:wiki).should be_valid + end + end + + describe 'Snippet' do + it "builds a valid instance" do + build(:snippet).should be_valid + end + end +end diff --git a/spec/factory.rb b/spec/factory.rb deleted file mode 100644 index 1758b4d6..00000000 --- a/spec/factory.rb +++ /dev/null @@ -1,29 +0,0 @@ -class Factory - @factories = {} - - class << self - def add(name, klass, &block) - @factories[name] = [klass, block] - end - - def create(name, opts = {}) - new(name, opts).tap(&:save!) - end - - def new(name, opts = {}) - factory= @factories[name] - factory[0].new.tap do |obj| - factory[1].call(obj) - end.tap do |obj| - opts.each do |k, opt| - obj.send("#{k}=", opt) - end - end - end - end -end - -def Factory(name, opts={}) - Factory.create name, opts -end - diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb new file mode 100644 index 00000000..9a2df314 --- /dev/null +++ b/spec/helpers/application_helper_spec.rb @@ -0,0 +1,26 @@ +require 'spec_helper' + +describe ApplicationHelper do + describe "gravatar_icon" do + let(:user_email) { 'user@email.com' } + + it "should return a generic avatar path when Gravatar is disabled" do + Gitlab.config.stub(:disable_gravatar?).and_return(true) + gravatar_icon(user_email).should == 'no_avatar.png' + end + + it "should return a generic avatar path when email is blank" do + gravatar_icon('').should == 'no_avatar.png' + end + + it "should use SSL when appropriate" do + stub!(:request).and_return(double(:ssl? => true)) + gravatar_icon(user_email).should match('https://secure.gravatar.com') + end + + it "should accept a custom size" do + stub!(:request).and_return(double(:ssl? => false)) + gravatar_icon(user_email, 64).should match(/\?s=64/) + end + end +end diff --git a/spec/helpers/gitlab_flavored_markdown_spec.rb b/spec/helpers/gitlab_flavored_markdown_spec.rb index e147cb39..28bd46ec 100644 --- a/spec/helpers/gitlab_flavored_markdown_spec.rb +++ b/spec/helpers/gitlab_flavored_markdown_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" describe GitlabMarkdownHelper do before do - @project = Project.find_by_path("gitlabhq") || Factory(:project) + @project = Factory(:project) @commit = @project.repo.commits.first.parents.first @commit = CommitDecorator.decorate(Commit.new(@commit)) @other_project = Factory :project, path: "OtherPath", code: "OtherCode" @@ -157,7 +157,7 @@ describe GitlabMarkdownHelper do gfm("Let @#{user.name} fix the *mess* in #{@commit.id}").should == "Let #{link_to "@#{user.name}", project_team_member_path(@project, member), class: "gfm gfm-team_member "} fix the *mess* in #{link_to @commit.id, project_commit_path(@project, id: @commit.id), title: "Commit: #{@commit.author_name} - #{@commit.title}", class: "gfm gfm-commit "}" end - it "should not trip over other stuff", focus: true do + it "should not trip over other stuff" do gfm("_Please_ *stop* 'helping' and all the other b*$#%' you do.").should == "_Please_ *stop* 'helping' and all the other b*$#%' you do." end diff --git a/spec/mailers/notify_spec.rb b/spec/mailers/notify_spec.rb index 27af1e38..cf50b429 100644 --- a/spec/mailers/notify_spec.rb +++ b/spec/mailers/notify_spec.rb @@ -24,7 +24,7 @@ describe Notify do end it 'has the correct subject' do - should have_subject /Account was created for you/ + should have_subject /^gitlab \| Account was created for you$/ end it 'contains the new user\'s login name' do @@ -60,7 +60,7 @@ describe Notify do it_behaves_like 'an assignee email' it 'has the correct subject' do - should have_subject /new issue ##{issue.id}/ + should have_subject /new issue ##{issue.id} \| #{issue.title} \| #{project.name}/ end it 'contains a link to the new issue' do @@ -76,7 +76,7 @@ describe Notify do it_behaves_like 'a multiple recipients email' it 'has the correct subject' do - should have_subject /changed issue/ + should have_subject /changed issue ##{issue.id} \| #{issue.title}/ end it 'contains the name of the previous assignee' do @@ -91,6 +91,29 @@ describe Notify do should have_body_text /#{project_issue_path project, issue}/ end end + + describe 'status changed' do + let(:current_user) { Factory.create :user, email: "current@email.com" } + let(:status) { 'closed' } + subject { Notify.issue_status_changed_email(recipient.id, issue.id, status, current_user) } + + it 'has the correct subject' do + should have_subject /changed issue ##{issue.id} \| #{issue.title}/i + end + + it 'contains the new status' do + should have_body_text /#{status}/i + end + + it 'contains the user name' do + should have_body_text /#{current_user.name}/i + end + + it 'contains a link to the issue' do + should have_body_text /#{project_issue_path project, issue}/ + end + end + end context 'for merge requests' do @@ -145,6 +168,26 @@ describe Notify do end end + describe 'project access changed' do + let(:project) { Factory.create(:project, + path: "Fuu", + code: "Fuu") } + let(:user) { Factory.create :user } + let(:users_project) { Factory.create(:users_project, + project: project, + user: user) } + subject { Notify.project_access_granted_email(users_project.id) } + it 'has the correct subject' do + should have_subject /access to project was granted/ + end + it 'contains name of project' do + should have_body_text /#{project.name}/ + end + it 'contains new user role' do + should have_body_text /#{users_project.project_access_human}/ + end + end + context 'items that are noteable, the email for a note' do let(:note_author) { Factory.create(:user, name: 'author_name') } let(:note) { Factory.create(:note, project: project, author: note_author) } diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb index 188f0997..aaffda31 100644 --- a/spec/models/event_spec.rb +++ b/spec/models/event_spec.rb @@ -1,24 +1,9 @@ -# == Schema Information -# -# Table name: events -# -# id :integer(4) not null, primary key -# target_type :string(255) -# target_id :integer(4) -# title :string(255) -# data :text -# project_id :integer(4) -# created_at :datetime not null -# updated_at :datetime not null -# action :integer(4) -# author_id :integer(4) -# - require 'spec_helper' describe Event do describe "Associations" do it { should belong_to(:project) } + it { should belong_to(:target) } end describe "Respond to" do @@ -29,16 +14,6 @@ describe Event do it { should respond_to(:commits) } end - describe "Creation" do - before do - @event = Factory :event - end - - it "should create a valid event" do - @event.should be_valid - end - end - describe "Push event" do before do project = Factory :project diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb index e9cbd725..69829a4d 100644 --- a/spec/models/issue_spec.rb +++ b/spec/models/issue_spec.rb @@ -2,28 +2,19 @@ require 'spec_helper' describe Issue do describe "Associations" do - it { should belong_to(:project) } - it { should belong_to(:author) } - it { should belong_to(:assignee) } it { should belong_to(:milestone) } end describe "Validation" do - it { should validate_presence_of(:title) } - it { should validate_presence_of(:author_id) } - it { should validate_presence_of(:project_id) } + it { should ensure_length_of(:description).is_within(0..2000) } end - describe "Scope" do - it { Issue.should respond_to :closed } - it { Issue.should respond_to :opened } + describe 'modules' do + it { should include_module(IssueCommonality) } + it { should include_module(Upvote) } end - subject { Factory.create(:issue, - author: Factory(:user), - assignee: Factory(:user), - project: Factory.create(:project)) } - it { should be_valid } + subject { Factory.create(:issue) } describe '#is_being_reassigned?' do it 'returns true if the issue assignee has changed' do @@ -41,11 +32,7 @@ describe Issue do subject.is_being_closed?.should be_true end it 'returns false if the closed attribute has changed and is now false' do - issue = Factory.create(:issue, - closed: true, - author: Factory(:user), - assignee: Factory(:user), - project: Factory.create(:project)) + issue = Factory.create(:closed_issue) issue.closed = false issue.is_being_closed?.should be_false end @@ -57,11 +44,7 @@ describe Issue do describe '#is_being_reopened?' do it 'returns true if the closed attribute has changed and is now false' do - issue = Factory.create(:issue, - closed: true, - author: Factory(:user), - assignee: Factory(:user), - project: Factory.create(:project)) + issue = Factory.create(:closed_issue) issue.closed = false issue.is_being_reopened?.should be_true end @@ -73,64 +56,4 @@ describe Issue do subject.is_being_reopened?.should be_false end end - - describe "plus 1" do - let(:project) { Factory(:project) } - subject { - Factory.create(:issue, - author: Factory(:user), - assignee: Factory(:user), - project: project) - } - - it "with no notes has a 0/0 score" do - subject.upvotes.should == 0 - end - - it "should recognize non-+1 notes" do - subject.notes << Factory(:note, note: "No +1 here", project: Factory(:project, path: 'plusone', code: 'plusone')) - subject.should have(1).note - subject.notes.first.upvote?.should be_false - subject.upvotes.should == 0 - end - - it "should recognize a single +1 note" do - subject.notes << Factory(:note, note: "+1 This is awesome", project: Factory(:project, path: 'plusone', code: 'plusone')) - subject.upvotes.should == 1 - end - - it "should recognize a multiple +1 notes" do - subject.notes << Factory(:note, note: "+1 This is awesome", project: Factory(:project, path: 'plusone', code: 'plusone')) - subject.notes << Factory(:note, note: "+1 I want this", project: Factory(:project, path: 'plustwo', code: 'plustwo')) - subject.upvotes.should == 2 - end - end - - describe ".search" do - let!(:issue) { Factory.create(:issue, title: "Searchable issue", - project: Factory.create(:project)) } - - it "matches by title" do - Issue.search('able').all.should == [issue] - end - end end -# == Schema Information -# -# Table name: issues -# -# id :integer(4) not null, primary key -# title :string(255) -# assignee_id :integer(4) -# author_id :integer(4) -# project_id :integer(4) -# created_at :datetime not null -# updated_at :datetime not null -# closed :boolean(1) default(FALSE), not null -# position :integer(4) default(0) -# critical :boolean(1) default(FALSE), not null -# branch_name :string(255) -# description :text -# milestone_id :integer(4) -# - diff --git a/spec/models/key_spec.rb b/spec/models/key_spec.rb index 0f9b3177..85cd291d 100644 --- a/spec/models/key_spec.rb +++ b/spec/models/key_spec.rb @@ -2,12 +2,15 @@ require 'spec_helper' describe Key do describe "Associations" do - it { should belong_to(:user) or belong_to(:project) } + it { should belong_to(:user) } + it { should belong_to(:project) } end describe "Validation" do it { should validate_presence_of(:title) } it { should validate_presence_of(:key) } + it { should ensure_length_of(:title).is_within(0..255) } + it { should ensure_length_of(:key).is_within(0..5000) } end describe "Methods" do @@ -17,20 +20,15 @@ describe Key do context "validation of uniqueness" do context "as a deploy key" do - let(:project) { Factory.create(:project, path: 'alpha', code: 'alpha') } - let(:another_project) { Factory.create(:project, path: 'beta', code: 'beta') } - - before do - deploy_key = Factory.create(:key, project: project) - end + let!(:deploy_key) { create(:deploy_key) } it "does not accept the same key twice for a project" do - key = Factory.new(:key, project: project) + key = build(:key, project: deploy_key.project) key.should_not be_valid end it "does accept the same key for another project" do - key = Factory.new(:key, project: another_project) + key = build(:key, project_id: 0) key.should be_valid end end @@ -39,27 +37,13 @@ describe Key do let(:user) { Factory.create(:user) } it "accepts the key once" do - Factory.new(:key, user: user).should be_valid + build(:key, user: user).should be_valid end it "does not accepts the key twice" do - Factory.create(:key, user: user) - Factory.new(:key, user: user).should_not be_valid + create(:key, user: user) + build(:key, user: user).should_not be_valid end end end end -# == Schema Information -# -# Table name: keys -# -# id :integer(4) not null, primary key -# user_id :integer(4) -# created_at :datetime not null -# updated_at :datetime not null -# key :text -# title :string(255) -# identifier :string(255) -# project_id :integer(4) -# - diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index c7ad08a1..d1253b35 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -1,88 +1,13 @@ require 'spec_helper' describe MergeRequest do - describe "Associations" do - it { should belong_to(:project) } - it { should belong_to(:author) } - it { should belong_to(:assignee) } - end - describe "Validation" do it { should validate_presence_of(:target_branch) } it { should validate_presence_of(:source_branch) } - it { should validate_presence_of(:title) } - it { should validate_presence_of(:author_id) } - it { should validate_presence_of(:project_id) } end - describe "Scope" do - it { MergeRequest.should respond_to :closed } - it { MergeRequest.should respond_to :opened } - end - - it { Factory.create(:merge_request, - author: Factory(:user), - assignee: Factory(:user), - project: Factory.create(:project)).should be_valid } - - describe "plus 1" do - let(:project) { Factory(:project) } - subject { - Factory.create(:merge_request, - author: Factory(:user), - assignee: Factory(:user), - project: project) - } - - it "with no notes has a 0/0 score" do - subject.upvotes.should == 0 - end - - it "should recognize non-+1 notes" do - subject.notes << Factory(:note, note: "No +1 here", project: Factory(:project, path: 'plusone', code: 'plusone')) - subject.should have(1).note - subject.notes.first.upvote?.should be_false - subject.upvotes.should == 0 - end - - it "should recognize a single +1 note" do - subject.notes << Factory(:note, note: "+1 This is awesome", project: Factory(:project, path: 'plusone', code: 'plusone')) - subject.upvotes.should == 1 - end - - it "should recognize a multiple +1 notes" do - subject.notes << Factory(:note, note: "+1 This is awesome", project: Factory(:project, path: 'plusone', code: 'plusone')) - subject.notes << Factory(:note, note: "+1 I want this", project: Factory(:project, path: 'plustwo', code: 'plustwo')) - subject.upvotes.should == 2 - end - end - - describe ".search" do - let!(:issue) { Factory.create(:issue, title: "Searchable issue", - project: Factory.create(:project)) } - - it "matches by title" do - Issue.search('able').all.should == [issue] - end + describe 'modules' do + it { should include_module(IssueCommonality) } + it { should include_module(Upvote) } end end -# == Schema Information -# -# Table name: merge_requests -# -# id :integer(4) not null, primary key -# target_branch :string(255) not null -# source_branch :string(255) not null -# project_id :integer(4) not null -# author_id :integer(4) -# assignee_id :integer(4) -# title :string(255) -# closed :boolean(1) default(FALSE), not null -# created_at :datetime not null -# updated_at :datetime not null -# st_commits :text(2147483647 -# st_diffs :text(2147483647 -# merged :boolean(1) default(FALSE), not null -# state :integer(4) default(1), not null -# - diff --git a/spec/models/milestone_spec.rb b/spec/models/milestone_spec.rb index 880d3f30..fa15fc8f 100644 --- a/spec/models/milestone_spec.rb +++ b/spec/models/milestone_spec.rb @@ -1,17 +1,3 @@ -# == Schema Information -# -# Table name: milestones -# -# id :integer(4) not null, primary key -# title :string(255) not null -# project_id :integer(4) not null -# description :text -# due_date :date -# closed :boolean(1) default(FALSE), not null -# created_at :datetime not null -# updated_at :datetime not null -# - require 'spec_helper' describe Milestone do @@ -25,30 +11,36 @@ describe Milestone do it { should validate_presence_of(:project_id) } end - let(:project) { Factory :project } - let(:milestone) { Factory :milestone, project: project } - let(:issue) { Factory :issue, project: project } + let(:milestone) { Factory :milestone } + let(:issue) { Factory :issue } - it { milestone.should be_valid } - - describe "Issues" do - before do + describe "#percent_complete" do + it "should not count open issues" do milestone.issues << issue + milestone.percent_complete.should == 0 end - it { milestone.percent_complete.should == 0 } + it "should count closed issues" do + issue.update_attributes(closed: true) + milestone.issues << issue + milestone.percent_complete.should == 100 + end - it do - issue.update_attributes closed: true + it "should recover from dividing by zero" do + milestone.issues.should_receive(:count).and_return(0) milestone.percent_complete.should == 100 end end - describe :expires_at do - before do - milestone.update_attributes due_date: Date.today + 1.day + describe "#expires_at" do + it "should be nil when due_date is unset" do + milestone.update_attributes(due_date: nil) + milestone.expires_at.should be_nil end - it { milestone.expires_at.should_not be_nil } + it "should not be nil when due_date is set" do + milestone.update_attributes(due_date: Date.tomorrow) + milestone.expires_at.should be_present + end end end diff --git a/spec/models/note_spec.rb b/spec/models/note_spec.rb index c97b23cb..ffaf442d 100644 --- a/spec/models/note_spec.rb +++ b/spec/models/note_spec.rb @@ -1,11 +1,10 @@ require 'spec_helper' describe Note do - let(:project) { Factory :project } - let!(:commit) { project.commit } - describe "Associations" do it { should belong_to(:project) } + it { should belong_to(:noteable) } + it { should belong_to(:author).class_name('User') } end describe "Validation" do @@ -13,8 +12,6 @@ describe Note do it { should validate_presence_of(:project) } end - it { Factory.create(:note, - project: project).should be_valid } describe "Scopes" do it "should have a today named scope that returns ..." do Note.today.where_values.should == ["created_at >= '#{Date.today}'"] @@ -25,26 +22,27 @@ describe Note do let(:project) { Factory(:project) } it "recognizes a neutral note" do - note = Factory(:note, project: project, note: "This is not a +1 note") + note = Factory(:note, note: "This is not a +1 note") note.should_not be_upvote end it "recognizes a +1 note" do - note = Factory(:note, project: project, note: "+1 for this") + note = Factory(:note, note: "+1 for this") note.should be_upvote end it "recognizes a -1 note as no vote" do - note = Factory(:note, project: project, note: "-1 for this") + note = Factory(:note, note: "-1 for this") note.should_not be_upvote end end - describe "Commit notes" do + let(:project) { create(:project) } + let(:commit) { project.commit } + describe "Commit notes" do before do @note = Factory :note, - project: project, noteable_id: commit.id, noteable_type: "Commit" end @@ -58,7 +56,6 @@ describe Note do describe "Pre-line commit notes" do before do @note = Factory :note, - project: project, noteable_id: commit.id, noteable_type: "Commit", line_code: "0_16_1" @@ -91,8 +88,8 @@ describe Note do describe :authorization do before do - @p1 = project - @p2 = Factory :project, code: "alien", path: "gitlabhq_1" + @p1 = create(:project) + @p2 = Factory :project @u1 = Factory :user @u2 = Factory :user @u3 = Factory :user @@ -135,19 +132,3 @@ describe Note do end end end -# == Schema Information -# -# Table name: notes -# -# id :integer(4) not null, primary key -# note :text -# noteable_id :string(255) -# noteable_type :string(255) -# author_id :integer(4) -# created_at :datetime not null -# updated_at :datetime not null -# project_id :integer(4) -# attachment :string(255) -# line_code :string(255) -# - diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 5bba4ff6..5add7ff8 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -2,23 +2,52 @@ require 'spec_helper' describe Project do describe "Associations" do + it { should belong_to(:owner).class_name('User') } it { should have_many(:users) } - it { should have_many(:protected_branches).dependent(:destroy) } it { should have_many(:events).dependent(:destroy) } - it { should have_many(:wikis).dependent(:destroy) } it { should have_many(:merge_requests).dependent(:destroy) } - it { should have_many(:users_projects).dependent(:destroy) } it { should have_many(:issues).dependent(:destroy) } + it { should have_many(:milestones).dependent(:destroy) } + it { should have_many(:users_projects).dependent(:destroy) } it { should have_many(:notes).dependent(:destroy) } it { should have_many(:snippets).dependent(:destroy) } - it { should have_many(:hooks).dependent(:destroy) } it { should have_many(:deploy_keys).dependent(:destroy) } + it { should have_many(:hooks).dependent(:destroy) } + it { should have_many(:wikis).dependent(:destroy) } + it { should have_many(:protected_branches).dependent(:destroy) } end describe "Validation" do + let!(:project) { create(:project) } + it { should validate_presence_of(:name) } + it { should validate_uniqueness_of(:name) } + it { should ensure_length_of(:name).is_within(0..255) } + it { should validate_presence_of(:path) } + it { should validate_uniqueness_of(:path) } + it { should ensure_length_of(:path).is_within(0..255) } + # TODO: Formats + + it { should ensure_length_of(:description).is_within(0..2000) } + it { should validate_presence_of(:code) } + it { should validate_uniqueness_of(:code) } + it { should ensure_length_of(:code).is_within(1..255) } + # TODO: Formats + + it { should validate_presence_of(:owner) } + + it "should not allow new projects beyond user limits" do + project.stub(:owner).and_return(double(can_create_project?: false, projects_limit: 1)) + project.should_not be_valid + project.errors[:base].first.should match(/Your own projects limit is 1/) + end + + it "should not allow 'gitolite-admin' as repo name" do + should allow_value("blah").for(:path) + should_not allow_value("gitolite-admin").for(:path) + end end describe "Respond to" do @@ -40,7 +69,6 @@ describe Project do it { should respond_to(:commits_with_refs) } it { should respond_to(:commits_since) } it { should respond_to(:commits_between) } - it { should respond_to(:write_hooks) } it { should respond_to(:satellite) } it { should respond_to(:update_repository) } it { should respond_to(:destroy_repository) } @@ -74,9 +102,11 @@ describe Project do it { should respond_to(:trigger_post_receive) } end - it "should not allow 'gitolite-admin' as repo name" do - should allow_value("blah").for(:path) - should_not allow_value("gitolite-admin").for(:path) + describe 'modules' do + it { should include_module(Repository) } + it { should include_module(PushObserver) } + it { should include_module(Authority) } + it { should include_module(Team) } end it "should return valid url to repo" do @@ -86,7 +116,7 @@ describe Project do it "should return path to repo" do project = Project.new(path: "somewhere") - project.path_to_repo.should == File.join(Rails.root, "tmp", "tests", "somewhere") + project.path_to_repo.should == File.join(Rails.root, "tmp", "repositories", "somewhere") end it "returns the full web URL for this repo" do @@ -111,7 +141,7 @@ describe Project do let(:last_event) { double } before do - project.stub(:events).and_return( [ double, double, last_event ] ) + project.stub_chain(:events, :order).and_return( [ double, double, last_event ] ) end it { project.last_activity.should == last_event } @@ -237,23 +267,3 @@ describe Project do end end end -# == Schema Information -# -# Table name: projects -# -# id :integer(4) not null, primary key -# name :string(255) -# path :string(255) -# description :text -# created_at :datetime not null -# updated_at :datetime not null -# private_flag :boolean(1) default(TRUE), not null -# code :string(255) -# owner_id :integer(4) -# default_branch :string(255) default("master"), not null -# issues_enabled :boolean(1) default(TRUE), not null -# wall_enabled :boolean(1) default(TRUE), not null -# merge_requests_enabled :boolean(1) default(TRUE), not null -# wiki_enabled :boolean(1) default(TRUE), not null -# - diff --git a/spec/models/protected_branch_spec.rb b/spec/models/protected_branch_spec.rb index 1654e3b6..9180bc3b 100644 --- a/spec/models/protected_branch_spec.rb +++ b/spec/models/protected_branch_spec.rb @@ -1,19 +1,6 @@ -# == Schema Information -# -# Table name: protected_branches -# -# id :integer(4) not null, primary key -# project_id :integer(4) not null -# name :string(255) not null -# created_at :datetime not null -# updated_at :datetime not null -# - require 'spec_helper' describe ProtectedBranch do - let(:project) { Factory(:project) } - describe 'Associations' do it { should belong_to(:project) } end @@ -24,26 +11,26 @@ describe ProtectedBranch do end describe 'Callbacks' do - subject { ProtectedBranch.new(project: project, name: 'branch_name') } + let(:branch) { build(:protected_branch) } it 'call update_repository after save' do - subject.should_receive(:update_repository) - subject.save + branch.should_receive(:update_repository) + branch.save end it 'call update_repository after destroy' do - subject.should_receive(:update_repository) - subject.destroy + branch.save + branch.should_receive(:update_repository) + branch.destroy end end describe '#commit' do - subject { ProtectedBranch.new(project: project, name: 'cant_touch_this') } + let(:branch) { create(:protected_branch) } it 'commits itself to its project' do - project.should_receive(:commit).with('cant_touch_this') - - subject.commit + branch.project.should_receive(:commit).with(branch.name) + branch.commit end end end diff --git a/spec/models/snippet_spec.rb b/spec/models/snippet_spec.rb index 9b4aaa13..ffb861c4 100644 --- a/spec/models/snippet_spec.rb +++ b/spec/models/snippet_spec.rb @@ -3,29 +3,21 @@ require 'spec_helper' describe Snippet do describe "Associations" do it { should belong_to(:project) } - it { should belong_to(:author) } + it { should belong_to(:author).class_name('User') } + it { should have_many(:notes).dependent(:destroy) } end describe "Validation" do - it { should validate_presence_of(:title) } it { should validate_presence_of(:author_id) } it { should validate_presence_of(:project_id) } + + it { should validate_presence_of(:title) } + it { should ensure_length_of(:title).is_within(0..255) } + it { should validate_presence_of(:file_name) } + it { should ensure_length_of(:title).is_within(0..255) } + it { should validate_presence_of(:content) } + it { should ensure_length_of(:content).is_within(0..10_000) } end end -# == Schema Information -# -# Table name: snippets -# -# id :integer(4) not null, primary key -# title :string(255) -# content :text -# author_id :integer(4) not null -# project_id :integer(4) not null -# created_at :datetime not null -# updated_at :datetime not null -# file_name :string(255) -# expires_at :datetime -# - diff --git a/spec/models/system_hook_spec.rb b/spec/models/system_hook_spec.rb index 56d76ed0..fe2a5836 100644 --- a/spec/models/system_hook_spec.rb +++ b/spec/models/system_hook_spec.rb @@ -10,13 +10,12 @@ describe SystemHook do end it "project_create hook" do - user = Factory :user with_resque do - project = Factory :project_without_owner, owner: user + project = Factory :project end WebMock.should have_requested(:post, @system_hook.url).with(body: /project_create/).once end - + it "project_destroy hook" do project = Factory :project with_resque do @@ -31,7 +30,7 @@ describe SystemHook do end WebMock.should have_requested(:post, @system_hook.url).with(body: /user_create/).once end - + it "user_destroy hook" do user = Factory :user with_resque do @@ -39,7 +38,7 @@ describe SystemHook do end WebMock.should have_requested(:post, @system_hook.url).with(body: /user_destroy/).once end - + it "project_create hook" do user = Factory :user project = Factory :project @@ -48,7 +47,7 @@ describe SystemHook do end WebMock.should have_requested(:post, @system_hook.url).with(body: /user_add_to_team/).once end - + it "project_destroy hook" do user = Factory :user project = Factory :project diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 265dcef1..ca34f07d 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -2,12 +2,26 @@ require 'spec_helper' describe User do describe "Associations" do + it { should have_many(:users_projects).dependent(:destroy) } it { should have_many(:projects) } - it { should have_many(:users_projects) } - it { should have_many(:issues) } - it { should have_many(:assigned_issues) } - it { should have_many(:merge_requests) } - it { should have_many(:assigned_merge_requests) } + it { should have_many(:my_own_projects).class_name('Project') } + it { should have_many(:keys).dependent(:destroy) } + it { should have_many(:events).class_name('Event').dependent(:destroy) } + it { should have_many(:recent_events).class_name('Event') } + it { should have_many(:issues).dependent(:destroy) } + it { should have_many(:notes).dependent(:destroy) } + it { should have_many(:assigned_issues).dependent(:destroy) } + it { should have_many(:merge_requests).dependent(:destroy) } + it { should have_many(:assigned_merge_requests).dependent(:destroy) } + end + + describe 'validations' do + it { should validate_presence_of(:projects_limit) } + it { should validate_numericality_of(:projects_limit) } + it { should allow_value(0).for(:projects_limit) } + it { should_not allow_value(-1).for(:projects_limit) } + + it { should ensure_length_of(:bio).is_within(0..255) } end describe "Respond to" do @@ -49,49 +63,4 @@ describe User do user = Factory(:user) user.authentication_token.should_not == "" end - - describe "dependent" do - before do - @user = Factory :user - @note = Factory :note, - author: @user, - project: Factory(:project) - end - - it "should destroy all notes with user" do - Note.find_by_id(@note.id).should_not be_nil - @user.destroy - Note.find_by_id(@note.id).should be_nil - end - end end -# == Schema Information -# -# Table name: users -# -# id :integer(4) not null, primary key -# email :string(255) default(""), not null -# encrypted_password :string(128) default(""), not null -# reset_password_token :string(255) -# reset_password_sent_at :datetime -# remember_created_at :datetime -# sign_in_count :integer(4) default(0) -# current_sign_in_at :datetime -# last_sign_in_at :datetime -# current_sign_in_ip :string(255) -# last_sign_in_ip :string(255) -# created_at :datetime not null -# updated_at :datetime not null -# name :string(255) -# admin :boolean(1) default(FALSE), not null -# projects_limit :integer(4) default(10) -# skype :string(255) default(""), not null -# linkedin :string(255) default(""), not null -# twitter :string(255) default(""), not null -# authentication_token :string(255) -# dark_scheme :boolean(1) default(FALSE), not null -# theme_id :integer(4) default(1), not null -# bio :string(255) -# blocked :boolean(1) default(FALSE), not null -# - diff --git a/spec/models/users_project_spec.rb b/spec/models/users_project_spec.rb index 87fbfbf2..3197ba6e 100644 --- a/spec/models/users_project_spec.rb +++ b/spec/models/users_project_spec.rb @@ -7,7 +7,11 @@ describe UsersProject do end describe "Validation" do + let!(:users_project) { create(:users_project) } + it { should validate_presence_of(:user_id) } + it { should validate_uniqueness_of(:user_id).scoped_to(:project_id) } + it { should validate_presence_of(:project_id) } end @@ -16,15 +20,3 @@ describe UsersProject do it { should respond_to(:user_email) } end end -# == Schema Information -# -# Table name: users_projects -# -# id :integer(4) not null, primary key -# user_id :integer(4) not null -# project_id :integer(4) not null -# created_at :datetime not null -# updated_at :datetime not null -# project_access :integer(4) default(0), not null -# - diff --git a/spec/models/web_hook_spec.rb b/spec/models/web_hook_spec.rb index 88594761..3cba5b64 100644 --- a/spec/models/web_hook_spec.rb +++ b/spec/models/web_hook_spec.rb @@ -52,14 +52,3 @@ describe ProjectHook do end end end -# == Schema Information -# -# Table name: web_hooks -# -# id :integer(4) not null, primary key -# url :string(255) -# project_id :integer(4) -# created_at :datetime not null -# updated_at :datetime not null -# - diff --git a/spec/models/wiki_spec.rb b/spec/models/wiki_spec.rb index 892d0e8f..de6ce426 100644 --- a/spec/models/wiki_spec.rb +++ b/spec/models/wiki_spec.rb @@ -4,27 +4,13 @@ describe Wiki do describe "Associations" do it { should belong_to(:project) } it { should belong_to(:user) } + it { should have_many(:notes).dependent(:destroy) } end describe "Validation" do it { should validate_presence_of(:title) } + it { should ensure_length_of(:title).is_within(1..250) } it { should validate_presence_of(:content) } it { should validate_presence_of(:user_id) } end - - it { Factory(:wiki).should be_valid } end -# == Schema Information -# -# Table name: wikis -# -# id :integer(4) not null, primary key -# title :string(255) -# content :text -# project_id :integer(4) -# created_at :datetime not null -# updated_at :datetime not null -# slug :string(255) -# user_id :integer(4) -# - diff --git a/spec/monkeypatch.rb b/spec/monkeypatch.rb deleted file mode 100644 index 855a31f0..00000000 --- a/spec/monkeypatch.rb +++ /dev/null @@ -1,51 +0,0 @@ -# Stubbing Project <-> git host path -# create project using Factory only -class Project - def update_repository - true - end - - def destroy_repository - true - end - - def path_to_repo - File.join(Rails.root, "tmp", "tests", path) - end - - def satellite - @satellite ||= FakeSatellite.new - end -end - -class Key - def update_repository - true - end - - def repository_delete_key - true - end -end - -class UsersProject - def update_repository - true - end -end - -class FakeSatellite - def exists? - true - end - - def create - true - end -end - -class ProtectedBranch - def update_repository - true - end -end diff --git a/spec/models/activity_observer_spec.rb b/spec/observers/activity_observer_spec.rb similarity index 100% rename from spec/models/activity_observer_spec.rb rename to spec/observers/activity_observer_spec.rb diff --git a/spec/models/issue_observer_spec.rb b/spec/observers/issue_observer_spec.rb similarity index 58% rename from spec/models/issue_observer_spec.rb rename to spec/observers/issue_observer_spec.rb index c6a405f1..b5943f2c 100644 --- a/spec/models/issue_observer_spec.rb +++ b/spec/observers/issue_observer_spec.rb @@ -3,7 +3,8 @@ require 'spec_helper' describe IssueObserver do let(:some_user) { double(:user, id: 1) } let(:assignee) { double(:user, id: 2) } - let(:issue) { double(:issue, id: 42, assignee: assignee) } + let(:author) { double(:user, id: 3) } + let(:issue) { double(:issue, id: 42, assignee: assignee, author: author) } before(:each) { subject.stub(:current_user).and_return(some_user) } @@ -67,36 +68,90 @@ describe IssueObserver do end end - context 'a status "closed" note' do - it 'is created if the issue is being closed' do + context 'a status "closed"' do + it 'note is created if the issue is being closed' do issue.should_receive(:is_being_closed?).and_return(true) Note.should_receive(:create_status_change_note).with(issue, some_user, 'closed') subject.after_update(issue) end - it 'is not created if the issue is not being closed' do + it 'note is not created if the issue is not being closed' do issue.should_receive(:is_being_closed?).and_return(false) Note.should_not_receive(:create_status_change_note).with(issue, some_user, 'closed') subject.after_update(issue) end + + it 'notification is delivered if the issue being closed' do + issue.stub(:is_being_closed?).and_return(true) + Notify.should_receive(:issue_status_changed_email).twice + Note.should_receive(:create_status_change_note).with(issue, some_user, 'closed') + + subject.after_update(issue) + end + + it 'notification is not delivered if the issue not being closed' do + issue.stub(:is_being_closed?).and_return(false) + Notify.should_not_receive(:issue_status_changed_email) + Note.should_not_receive(:create_status_change_note).with(issue, some_user, 'closed') + + subject.after_update(issue) + end + + it 'notification is delivered only to author if the issue being closed' do + issue_without_assignee = double(:issue, id: 42, author: author, assignee: nil) + issue_without_assignee.stub(:is_being_reassigned?).and_return(false) + issue_without_assignee.stub(:is_being_closed?).and_return(true) + issue_without_assignee.stub(:is_being_reopened?).and_return(false) + Notify.should_receive(:issue_status_changed_email).once + Note.should_receive(:create_status_change_note).with(issue_without_assignee, some_user, 'closed') + + subject.after_update(issue_without_assignee) + end end - context 'a status "reopened" note' do - it 'is created if the issue is being reopened' do + context 'a status "reopened"' do + it 'note is created if the issue is being reopened' do issue.should_receive(:is_being_reopened?).and_return(true) Note.should_receive(:create_status_change_note).with(issue, some_user, 'reopened') subject.after_update(issue) end - it 'is not created if the issue is not being reopened' do + it 'note is not created if the issue is not being reopened' do issue.should_receive(:is_being_reopened?).and_return(false) Note.should_not_receive(:create_status_change_note).with(issue, some_user, 'reopened') subject.after_update(issue) end + + it 'notification is delivered if the issue being reopened' do + issue.stub(:is_being_reopened?).and_return(true) + Notify.should_receive(:issue_status_changed_email).twice + Note.should_receive(:create_status_change_note).with(issue, some_user, 'reopened') + + subject.after_update(issue) + end + + it 'notification is not delivered if the issue not being reopened' do + issue.stub(:is_being_reopened?).and_return(false) + Notify.should_not_receive(:issue_status_changed_email) + Note.should_not_receive(:create_status_change_note).with(issue, some_user, 'reopened') + + subject.after_update(issue) + end + + it 'notification is delivered only to author if the issue being reopened' do + issue_without_assignee = double(:issue, id: 42, author: author, assignee: nil) + issue_without_assignee.stub(:is_being_reassigned?).and_return(false) + issue_without_assignee.stub(:is_being_closed?).and_return(false) + issue_without_assignee.stub(:is_being_reopened?).and_return(true) + Notify.should_receive(:issue_status_changed_email).once + Note.should_receive(:create_status_change_note).with(issue_without_assignee, some_user, 'reopened') + + subject.after_update(issue_without_assignee) + end end end diff --git a/spec/observers/key_observer_spec.rb b/spec/observers/key_observer_spec.rb new file mode 100644 index 00000000..7f2a76a3 --- /dev/null +++ b/spec/observers/key_observer_spec.rb @@ -0,0 +1,34 @@ +require 'spec_helper' + +describe KeyObserver do + before do + @key = double('Key', + identifier: 'admin_654654', + key: '== a vaild ssh key', + projects: [], + is_deploy_key: false + ) + + @gitolite = double('Gitlab::Gitolite', + set_key: true, + remove_key: true + ) + + @observer = KeyObserver.instance + @observer.stub(:git_host => @gitolite) + end + + context :after_save do + it do + @gitolite.should_receive(:set_key).with(@key.identifier, @key.key, @key.projects) + @observer.after_save(@key) + end + end + + context :after_destroy do + it do + @gitolite.should_receive(:remove_key).with(@key.identifier, @key.projects) + @observer.after_destroy(@key) + end + end +end diff --git a/spec/models/user_observer_spec.rb b/spec/observers/user_observer_spec.rb similarity index 100% rename from spec/models/user_observer_spec.rb rename to spec/observers/user_observer_spec.rb diff --git a/spec/observers/users_project_observer_spec.rb b/spec/observers/users_project_observer_spec.rb new file mode 100644 index 00000000..3e392040 --- /dev/null +++ b/spec/observers/users_project_observer_spec.rb @@ -0,0 +1,40 @@ +require 'spec_helper' + +describe UsersProjectObserver do + let(:user) { Factory.create :user } + let(:project) { Factory.create(:project, + code: "Fuu", + path: "Fuu" ) } + let(:users_project) { Factory.create(:users_project, + project: project, + user: user )} + subject { UsersProjectObserver.instance } + + describe "#after_create" do + it "should called when UsersProject created" do + subject.should_receive(:after_create) + UsersProject.observers.enable :users_project_observer do + Factory.create(:users_project, + project: project, + user: user) + end + end + it "should send email to user" do + Notify.should_receive(:project_access_granted_email).with(users_project.id).and_return(double(deliver: true)) + subject.after_create(users_project) + end + end + + describe "#after_update" do + it "should called when UsersProject updated" do + subject.should_receive(:after_update) + UsersProject.observers.enable :users_project_observer do + users_project.update_attribute(:project_access, 40) + end + end + it "should send email to user" do + Notify.should_receive(:project_access_granted_email).with(users_project.id).and_return(double(deliver: true)) + subject.after_update(users_project) + end + end +end diff --git a/spec/requests/admin/admin_projects_spec.rb b/spec/requests/admin/admin_projects_spec.rb index 0ce66f5f..2edfb592 100644 --- a/spec/requests/admin/admin_projects_spec.rb +++ b/spec/requests/admin/admin_projects_spec.rb @@ -87,7 +87,7 @@ describe "Admin::Projects" do visit new_admin_project_path fill_in 'project_name', with: 'NewProject' fill_in 'project_code', with: 'NPR' - fill_in 'project_path', with: 'gitlabhq_1' + fill_in 'project_path', with: 'newproject' expect { click_button "Create project" }.to change { Project.count }.by(1) @project = Project.last end diff --git a/spec/requests/admin/security_spec.rb b/spec/requests/admin/security_spec.rb index 0c369740..63068326 100644 --- a/spec/requests/admin/security_spec.rb +++ b/spec/requests/admin/security_spec.rb @@ -2,20 +2,26 @@ require 'spec_helper' describe "Admin::Projects" do describe "GET /admin/projects" do - it { admin_projects_path.should be_allowed_for :admin } - it { admin_projects_path.should be_denied_for :user } - it { admin_projects_path.should be_denied_for :visitor } + subject { admin_projects_path } + + it { should be_allowed_for :admin } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /admin/users" do - it { admin_users_path.should be_allowed_for :admin } - it { admin_users_path.should be_denied_for :user } - it { admin_users_path.should be_denied_for :visitor } + subject { admin_users_path } + + it { should be_allowed_for :admin } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /admin/hooks" do - it { admin_hooks_path.should be_allowed_for :admin } - it { admin_hooks_path.should be_denied_for :user } - it { admin_hooks_path.should be_denied_for :visitor } + subject { admin_hooks_path } + + it { should be_allowed_for :admin } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end end diff --git a/spec/api/issues_spec.rb b/spec/requests/api/issues_spec.rb similarity index 73% rename from spec/api/issues_spec.rb rename to spec/requests/api/issues_spec.rb index f6d8e379..293ea83a 100644 --- a/spec/api/issues_spec.rb +++ b/spec/requests/api/issues_spec.rb @@ -1,6 +1,8 @@ require 'spec_helper' describe Gitlab::API do + include ApiHelpers + let(:user) { Factory :user } let!(:project) { Factory :project, owner: user } let!(:issue) { Factory :issue, author: user, assignee: user, project: project } @@ -8,13 +10,13 @@ describe Gitlab::API do describe "GET /issues" do it "should return authentication error" do - get "#{api_prefix}/issues" + get api("/issues") response.status.should == 401 end describe "authenticated GET /issues" do it "should return an array of issues" do - get "#{api_prefix}/issues?private_token=#{user.private_token}" + get api("/issues", user) response.status.should == 200 json_response.should be_an Array json_response.first['title'].should == issue.title @@ -24,7 +26,7 @@ describe Gitlab::API do describe "GET /projects/:id/issues" do it "should return project issues" do - get "#{api_prefix}/projects/#{project.code}/issues?private_token=#{user.private_token}" + get api("/projects/#{project.code}/issues", user) response.status.should == 200 json_response.should be_an Array json_response.first['title'].should == issue.title @@ -33,7 +35,7 @@ describe Gitlab::API do describe "GET /projects/:id/issues/:issue_id" do it "should return a project issue by id" do - get "#{api_prefix}/projects/#{project.code}/issues/#{issue.id}?private_token=#{user.private_token}" + get api("/projects/#{project.code}/issues/#{issue.id}", user) response.status.should == 200 json_response['title'].should == issue.title end @@ -41,7 +43,7 @@ describe Gitlab::API do describe "POST /projects/:id/issues" do it "should create a new project issue" do - post "#{api_prefix}/projects/#{project.code}/issues?private_token=#{user.private_token}", + post api("/projects/#{project.code}/issues", user), title: 'new issue', labels: 'label, label2' response.status.should == 201 json_response['title'].should == 'new issue' @@ -52,7 +54,7 @@ describe Gitlab::API do describe "PUT /projects/:id/issues/:issue_id" do it "should update a project issue" do - put "#{api_prefix}/projects/#{project.code}/issues/#{issue.id}?private_token=#{user.private_token}", + put api("/projects/#{project.code}/issues/#{issue.id}", user), title: 'updated title', labels: 'label2', closed: 1 response.status.should == 200 json_response['title'].should == 'updated title' @@ -63,9 +65,8 @@ describe Gitlab::API do describe "DELETE /projects/:id/issues/:issue_id" do it "should delete a project issue" do - expect { - delete "#{api_prefix}/projects/#{project.code}/issues/#{issue.id}?private_token=#{user.private_token}" - }.to change { Issue.count }.by(-1) + delete api("/projects/#{project.code}/issues/#{issue.id}", user) + response.status.should == 405 end end end diff --git a/spec/requests/api/milestones_spec.rb b/spec/requests/api/milestones_spec.rb new file mode 100644 index 00000000..cf5f65f0 --- /dev/null +++ b/spec/requests/api/milestones_spec.rb @@ -0,0 +1,47 @@ +require 'spec_helper' + +describe Gitlab::API do + include ApiHelpers + + let(:user) { Factory :user } + let!(:project) { Factory :project, owner: user } + let!(:milestone) { Factory :milestone, project: project } + + before { project.add_access(user, :read) } + + describe "GET /projects/:id/milestones" do + it "should return project milestones" do + get api("/projects/#{project.code}/milestones", user) + response.status.should == 200 + json_response.should be_an Array + json_response.first['title'].should == milestone.title + end + end + + describe "GET /projects/:id/milestones/:milestone_id" do + it "should return a project milestone by id" do + get api("/projects/#{project.code}/milestones/#{milestone.id}", user) + response.status.should == 200 + json_response['title'].should == milestone.title + end + end + + describe "POST /projects/:id/milestones" do + it "should create a new project milestone" do + post api("/projects/#{project.code}/milestones", user), + title: 'new milestone' + response.status.should == 201 + json_response['title'].should == 'new milestone' + json_response['description'].should be_nil + end + end + + describe "PUT /projects/:id/milestones/:milestone_id" do + it "should update a project milestone" do + put api("/projects/#{project.code}/milestones/#{milestone.id}", user), + title: 'updated title' + response.status.should == 200 + json_response['title'].should == 'updated title' + end + end +end diff --git a/spec/api/projects_spec.rb b/spec/requests/api/projects_spec.rb similarity index 67% rename from spec/api/projects_spec.rb rename to spec/requests/api/projects_spec.rb index ff45619e..0cbc12af 100644 --- a/spec/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -1,6 +1,8 @@ require 'spec_helper' describe Gitlab::API do + include ApiHelpers + let(:user) { Factory :user } let!(:project) { Factory :project, owner: user } let!(:snippet) { Factory :snippet, author: user, project: project, title: 'example' } @@ -8,13 +10,13 @@ describe Gitlab::API do describe "GET /projects" do it "should return authentication error" do - get "#{api_prefix}/projects" + get api("/projects") response.status.should == 401 end describe "authenticated GET /projects" do it "should return an array of projects" do - get "#{api_prefix}/projects?private_token=#{user.private_token}" + get api("/projects", user) response.status.should == 200 json_response.should be_an Array json_response.first['name'].should == project.name @@ -25,20 +27,20 @@ describe Gitlab::API do describe "GET /projects/:id" do it "should return a project by id" do - get "#{api_prefix}/projects/#{project.id}?private_token=#{user.private_token}" + get api("/projects/#{project.id}", user) response.status.should == 200 json_response['name'].should == project.name json_response['owner']['email'].should == user.email end it "should return a project by code name" do - get "#{api_prefix}/projects/#{project.code}?private_token=#{user.private_token}" + get api("/projects/#{project.code}", user) response.status.should == 200 json_response['name'].should == project.name end it "should return a 404 error if not found" do - get "#{api_prefix}/projects/42?private_token=#{user.private_token}" + get api("/projects/42", user) response.status.should == 404 json_response['message'].should == '404 Not found' end @@ -46,7 +48,7 @@ describe Gitlab::API do describe "GET /projects/:id/repository/branches" do it "should return an array of project branches" do - get "#{api_prefix}/projects/#{project.code}/repository/branches?private_token=#{user.private_token}" + get api("/projects/#{project.code}/repository/branches", user) response.status.should == 200 json_response.should be_an Array json_response.first['name'].should == project.repo.heads.sort_by(&:name).first.name @@ -55,7 +57,7 @@ describe Gitlab::API do describe "GET /projects/:id/repository/branches/:branch" do it "should return the branch information for a single branch" do - get "#{api_prefix}/projects/#{project.code}/repository/branches/new_design?private_token=#{user.private_token}" + get api("/projects/#{project.code}/repository/branches/new_design", user) response.status.should == 200 json_response['name'].should == 'new_design' @@ -65,7 +67,7 @@ describe Gitlab::API do describe "GET /projects/:id/repository/tags" do it "should return an array of project tags" do - get "#{api_prefix}/projects/#{project.code}/repository/tags?private_token=#{user.private_token}" + get api("/projects/#{project.code}/repository/tags", user) response.status.should == 200 json_response.should be_an Array json_response.first['name'].should == project.repo.tags.sort_by(&:name).reverse.first.name @@ -74,7 +76,7 @@ describe Gitlab::API do describe "GET /projects/:id/snippets/:snippet_id" do it "should return a project snippet" do - get "#{api_prefix}/projects/#{project.code}/snippets/#{snippet.id}?private_token=#{user.private_token}" + get api("/projects/#{project.code}/snippets/#{snippet.id}", user) response.status.should == 200 json_response['title'].should == snippet.title end @@ -82,7 +84,7 @@ describe Gitlab::API do describe "POST /projects/:id/snippets" do it "should create a new project snippet" do - post "#{api_prefix}/projects/#{project.code}/snippets?private_token=#{user.private_token}", + post api("/projects/#{project.code}/snippets", user), title: 'api test', file_name: 'sample.rb', code: 'test' response.status.should == 201 json_response['title'].should == 'api test' @@ -91,7 +93,7 @@ describe Gitlab::API do describe "PUT /projects/:id/snippets" do it "should update an existing project snippet" do - put "#{api_prefix}/projects/#{project.code}/snippets/#{snippet.id}?private_token=#{user.private_token}", + put api("/projects/#{project.code}/snippets/#{snippet.id}", user), code: 'updated code' response.status.should == 200 json_response['title'].should == 'example' @@ -102,34 +104,31 @@ describe Gitlab::API do describe "DELETE /projects/:id/snippets/:snippet_id" do it "should delete existing project snippet" do expect { - delete "#{api_prefix}/projects/#{project.code}/snippets/#{snippet.id}?private_token=#{user.private_token}" + delete api("/projects/#{project.code}/snippets/#{snippet.id}", user) }.to change { Snippet.count }.by(-1) end end describe "GET /projects/:id/snippets/:snippet_id/raw" do it "should get a raw project snippet" do - get "#{api_prefix}/projects/#{project.code}/snippets/#{snippet.id}/raw?private_token=#{user.private_token}" + get api("/projects/#{project.code}/snippets/#{snippet.id}/raw", user) response.status.should == 200 end end describe "GET /projects/:id/:sha/blob" do it "should get the raw file contents" do - get "#{api_prefix}/projects/#{project.code}/repository/commits/master/blob?filepath=README.md&private_token=#{user.private_token}" - + get api("/projects/#{project.code}/repository/commits/master/blob?filepath=README.md", user) response.status.should == 200 end it "should return 404 for invalid branch_name" do - get "#{api_prefix}/projects/#{project.code}/repository/commits/invalid_branch_name/blob?filepath=README.md&private_token=#{user.private_token}" - + get api("/projects/#{project.code}/repository/commits/invalid_branch_name/blob?filepath=README.md", user) response.status.should == 404 end it "should return 404 for invalid file" do - get "#{api_prefix}/projects/#{project.code}/repository/commits/master/blob?filepath=README.invalid&private_token=#{user.private_token}" - + get api("/projects/#{project.code}/repository/commits/master/blob?filepath=README.invalid", user) response.status.should == 404 end end diff --git a/spec/api/users_spec.rb b/spec/requests/api/users_spec.rb similarity index 76% rename from spec/api/users_spec.rb rename to spec/requests/api/users_spec.rb index 32b9379d..d791962a 100644 --- a/spec/api/users_spec.rb +++ b/spec/requests/api/users_spec.rb @@ -1,17 +1,19 @@ require 'spec_helper' describe Gitlab::API do + include ApiHelpers + let(:user) { Factory :user } describe "GET /users" do it "should return authentication error" do - get "#{api_prefix}/users" + get api("/users") response.status.should == 401 end describe "authenticated GET /users" do it "should return an array of users" do - get "#{api_prefix}/users?private_token=#{user.private_token}" + get api("/users", user) response.status.should == 200 json_response.should be_an Array json_response.first['email'].should == user.email @@ -21,7 +23,7 @@ describe Gitlab::API do describe "GET /users/:id" do it "should return a user by id" do - get "#{api_prefix}/users/#{user.id}?private_token=#{user.private_token}" + get api("/users/#{user.id}", user) response.status.should == 200 json_response['email'].should == user.email end @@ -29,7 +31,7 @@ describe Gitlab::API do describe "GET /user" do it "should return current user" do - get "#{api_prefix}/user?private_token=#{user.private_token}" + get api("/user", user) response.status.should == 200 json_response['email'].should == user.email end diff --git a/spec/requests/atom/dashboard_issues_spec.rb b/spec/requests/atom/dashboard_issues_spec.rb index 9b4ffc0e..79a9b8ef 100644 --- a/spec/requests/atom/dashboard_issues_spec.rb +++ b/spec/requests/atom/dashboard_issues_spec.rb @@ -6,13 +6,9 @@ describe "User Issues Dashboard" do login_as :user - @project1 = Factory :project, - path: "project1", - code: "TEST1" + @project1 = Factory :project - @project2 = Factory :project, - path: "project2", - code: "TEST2" + @project2 = Factory :project @project1.add_access(@user, :read, :write) @project2.add_access(@user, :read, :write) diff --git a/spec/requests/projects_deploy_keys_spec.rb b/spec/requests/projects_deploy_keys_spec.rb index 0fea7b46..894aa6d3 100644 --- a/spec/requests/projects_deploy_keys_spec.rb +++ b/spec/requests/projects_deploy_keys_spec.rb @@ -42,7 +42,7 @@ describe "Projects", "DeployKeys" do describe "fill in" do before do fill_in "key_title", with: "laptop" - fill_in "key_key", with: "publickey234=" + fill_in "key_key", with: "ssh-rsa publickey234=" end it { expect { click_button "Save" }.to change {Key.count}.by(1) } @@ -55,12 +55,12 @@ describe "Projects", "DeployKeys" do end end - describe "Show page" do + describe "Show page" do before do @key = Factory :key, project: project - visit project_deploy_key_path(project, @key) + visit project_deploy_key_path(project, @key) end - + it { page.should have_content @key.title } it { page.should have_content @key.key[0..10] } end diff --git a/spec/requests/security/profile_access_spec.rb b/spec/requests/security/profile_access_spec.rb index b8ed27f0..9f6fe6a2 100644 --- a/spec/requests/security/profile_access_spec.rb +++ b/spec/requests/security/profile_access_spec.rb @@ -11,24 +11,30 @@ describe "Users Security" do end describe "GET /keys" do - it { keys_path.should be_allowed_for @u1 } - it { keys_path.should be_allowed_for :admin } - it { keys_path.should be_allowed_for :user } - it { keys_path.should be_denied_for :visitor } + subject { keys_path } + + it { should be_allowed_for @u1 } + it { should be_allowed_for :admin } + it { should be_allowed_for :user } + it { should be_denied_for :visitor } end describe "GET /profile" do - it { profile_path.should be_allowed_for @u1 } - it { profile_path.should be_allowed_for :admin } - it { profile_path.should be_allowed_for :user } - it { profile_path.should be_denied_for :visitor } + subject { profile_path } + + it { should be_allowed_for @u1 } + it { should be_allowed_for :admin } + it { should be_allowed_for :user } + it { should be_denied_for :visitor } end describe "GET /profile/password" do - it { profile_password_path.should be_allowed_for @u1 } - it { profile_password_path.should be_allowed_for :admin } - it { profile_password_path.should be_allowed_for :user } - it { profile_password_path.should be_denied_for :visitor } + subject { profile_password_path } + + it { should be_allowed_for @u1 } + it { should be_allowed_for :admin } + it { should be_allowed_for :user } + it { should be_denied_for :visitor } end end end diff --git a/spec/requests/security/project_access_spec.rb b/spec/requests/security/project_access_spec.rb index d503cf85..0cdf43bf 100644 --- a/spec/requests/security/project_access_spec.rb +++ b/spec/requests/security/project_access_spec.rb @@ -26,64 +26,76 @@ describe "Application access" do end describe "GET /project_code" do - it { project_path(@project).should be_allowed_for @u1 } - it { project_path(@project).should be_allowed_for @u3 } - it { project_path(@project).should be_denied_for :admin } - it { project_path(@project).should be_denied_for @u2 } - it { project_path(@project).should be_denied_for :user } - it { project_path(@project).should be_denied_for :visitor } + subject { project_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/master/tree" do - it { tree_project_ref_path(@project, @project.root_ref).should be_allowed_for @u1 } - it { tree_project_ref_path(@project, @project.root_ref).should be_allowed_for @u3 } - it { tree_project_ref_path(@project, @project.root_ref).should be_denied_for :admin } - it { tree_project_ref_path(@project, @project.root_ref).should be_denied_for @u2 } - it { tree_project_ref_path(@project, @project.root_ref).should be_denied_for :user } - it { tree_project_ref_path(@project, @project.root_ref).should be_denied_for :visitor } + subject { tree_project_ref_path(@project, @project.root_ref) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/commits" do - it { project_commits_path(@project).should be_allowed_for @u1 } - it { project_commits_path(@project).should be_allowed_for @u3 } - it { project_commits_path(@project).should be_denied_for :admin } - it { project_commits_path(@project).should be_denied_for @u2 } - it { project_commits_path(@project).should be_denied_for :user } - it { project_commits_path(@project).should be_denied_for :visitor } + subject { project_commits_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/commit" do - it { project_commit_path(@project, @project.commit.id).should be_allowed_for @u1 } - it { project_commit_path(@project, @project.commit.id).should be_allowed_for @u3 } - it { project_commit_path(@project, @project.commit.id).should be_denied_for :admin } - it { project_commit_path(@project, @project.commit.id).should be_denied_for @u2 } - it { project_commit_path(@project, @project.commit.id).should be_denied_for :user } - it { project_commit_path(@project, @project.commit.id).should be_denied_for :visitor } + subject { project_commit_path(@project, @project.commit.id) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/team" do - it { team_project_path(@project).should be_allowed_for @u1 } - it { team_project_path(@project).should be_allowed_for @u3 } - it { team_project_path(@project).should be_denied_for :admin } - it { team_project_path(@project).should be_denied_for @u2 } - it { team_project_path(@project).should be_denied_for :user } - it { team_project_path(@project).should be_denied_for :visitor } + subject { team_project_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/wall" do - it { wall_project_path(@project).should be_allowed_for @u1 } - it { wall_project_path(@project).should be_allowed_for @u3 } - it { wall_project_path(@project).should be_denied_for :admin } - it { wall_project_path(@project).should be_denied_for @u2 } - it { wall_project_path(@project).should be_denied_for :user } - it { wall_project_path(@project).should be_denied_for :visitor } + subject { wall_project_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/blob" do before do - @commit = @project.commit - @path = @commit.tree.contents.select { |i| i.is_a?(Grit::Blob)}.first.name - @blob_path = blob_project_ref_path(@project, @commit.id, path: @path) + commit = @project.commit + path = commit.tree.contents.select { |i| i.is_a?(Grit::Blob)}.first.name + @blob_path = blob_project_ref_path(@project, commit.id, path: path) end it { @blob_path.should be_allowed_for @u1 } @@ -95,93 +107,113 @@ describe "Application access" do end describe "GET /project_code/edit" do - it { edit_project_path(@project).should be_allowed_for @u1 } - it { edit_project_path(@project).should be_denied_for @u3 } - it { edit_project_path(@project).should be_denied_for :admin } - it { edit_project_path(@project).should be_denied_for @u2 } - it { edit_project_path(@project).should be_denied_for :user } - it { edit_project_path(@project).should be_denied_for :visitor } + subject { edit_project_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_denied_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/deploy_keys" do - it { project_deploy_keys_path(@project).should be_allowed_for @u1 } - it { project_deploy_keys_path(@project).should be_denied_for @u3 } - it { project_deploy_keys_path(@project).should be_denied_for :admin } - it { project_deploy_keys_path(@project).should be_denied_for @u2 } - it { project_deploy_keys_path(@project).should be_denied_for :user } - it { project_deploy_keys_path(@project).should be_denied_for :visitor } + subject { project_deploy_keys_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_denied_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/issues" do - it { project_issues_path(@project).should be_allowed_for @u1 } - it { project_issues_path(@project).should be_allowed_for @u3 } - it { project_issues_path(@project).should be_denied_for :admin } - it { project_issues_path(@project).should be_denied_for @u2 } - it { project_issues_path(@project).should be_denied_for :user } - it { project_issues_path(@project).should be_denied_for :visitor } + subject { project_issues_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/snippets" do - it { project_snippets_path(@project).should be_allowed_for @u1 } - it { project_snippets_path(@project).should be_allowed_for @u3 } - it { project_snippets_path(@project).should be_denied_for :admin } - it { project_snippets_path(@project).should be_denied_for @u2 } - it { project_snippets_path(@project).should be_denied_for :user } - it { project_snippets_path(@project).should be_denied_for :visitor } + subject { project_snippets_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/merge_requests" do - it { project_merge_requests_path(@project).should be_allowed_for @u1 } - it { project_merge_requests_path(@project).should be_allowed_for @u3 } - it { project_merge_requests_path(@project).should be_denied_for :admin } - it { project_merge_requests_path(@project).should be_denied_for @u2 } - it { project_merge_requests_path(@project).should be_denied_for :user } - it { project_merge_requests_path(@project).should be_denied_for :visitor } + subject { project_merge_requests_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/repository" do - it { project_repository_path(@project).should be_allowed_for @u1 } - it { project_repository_path(@project).should be_allowed_for @u3 } - it { project_repository_path(@project).should be_denied_for :admin } - it { project_repository_path(@project).should be_denied_for @u2 } - it { project_repository_path(@project).should be_denied_for :user } - it { project_repository_path(@project).should be_denied_for :visitor } + subject { project_repository_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/repository/branches" do - it { branches_project_repository_path(@project).should be_allowed_for @u1 } - it { branches_project_repository_path(@project).should be_allowed_for @u3 } - it { branches_project_repository_path(@project).should be_denied_for :admin } - it { branches_project_repository_path(@project).should be_denied_for @u2 } - it { branches_project_repository_path(@project).should be_denied_for :user } - it { branches_project_repository_path(@project).should be_denied_for :visitor } + subject { branches_project_repository_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/repository/tags" do - it { tags_project_repository_path(@project).should be_allowed_for @u1 } - it { tags_project_repository_path(@project).should be_allowed_for @u3 } - it { tags_project_repository_path(@project).should be_denied_for :admin } - it { tags_project_repository_path(@project).should be_denied_for @u2 } - it { tags_project_repository_path(@project).should be_denied_for :user } - it { tags_project_repository_path(@project).should be_denied_for :visitor } + subject { tags_project_repository_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/hooks" do - it { project_hooks_path(@project).should be_allowed_for @u1 } - it { project_hooks_path(@project).should be_allowed_for @u3 } - it { project_hooks_path(@project).should be_denied_for :admin } - it { project_hooks_path(@project).should be_denied_for @u2 } - it { project_hooks_path(@project).should be_denied_for :user } - it { project_hooks_path(@project).should be_denied_for :visitor } + subject { project_hooks_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end describe "GET /project_code/files" do - it { files_project_path(@project).should be_allowed_for @u1 } - it { files_project_path(@project).should be_allowed_for @u3 } - it { files_project_path(@project).should be_denied_for :admin } - it { files_project_path(@project).should be_denied_for @u2 } - it { files_project_path(@project).should be_denied_for :user } - it { files_project_path(@project).should be_denied_for :visitor } + subject { files_project_path(@project) } + + it { should be_allowed_for @u1 } + it { should be_allowed_for @u3 } + it { should be_denied_for :admin } + it { should be_denied_for @u2 } + it { should be_denied_for :user } + it { should be_denied_for :visitor } end end end diff --git a/spec/roles/issue_commonality_spec.rb b/spec/roles/issue_commonality_spec.rb new file mode 100644 index 00000000..77b98b46 --- /dev/null +++ b/spec/roles/issue_commonality_spec.rb @@ -0,0 +1,69 @@ +require 'spec_helper' + +describe Issue, "IssueCommonality" do + let(:issue) { create(:issue) } + + describe "Associations" do + it { should belong_to(:project) } + it { should belong_to(:author) } + it { should belong_to(:assignee) } + it { should have_many(:notes).dependent(:destroy) } + end + + describe "Validation" do + it { should validate_presence_of(:project_id) } + it { should validate_presence_of(:author_id) } + it { should validate_presence_of(:title) } + it { should ensure_length_of(:title).is_at_least(0).is_at_most(255) } + end + + describe "Scope" do + it { described_class.should respond_to(:opened) } + it { described_class.should respond_to(:closed) } + it { described_class.should respond_to(:assigned) } + end + + it "has an :author_id_of_changes accessor" do + issue.should respond_to(:author_id_of_changes) + issue.should respond_to(:author_id_of_changes=) + end + + describe ".search" do + let!(:searchable_issue) { create(:issue, title: "Searchable issue") } + + it "matches by title" do + described_class.search('able').all.should == [searchable_issue] + end + end + + describe "#today?" do + it "returns true when created today" do + # Avoid timezone differences and just return exactly what we want + Date.stub(:today).and_return(issue.created_at.to_date) + issue.today?.should be_true + end + + it "returns false when not created today" do + Date.stub(:today).and_return(Date.yesterday) + issue.today?.should be_false + end + end + + describe "#new?" do + it "returns true when created today and record hasn't been updated" do + issue.stub(:today?).and_return(true) + issue.new?.should be_true + end + + it "returns false when not created today" do + issue.stub(:today?).and_return(false) + issue.new?.should be_false + end + + it "returns false when record has been updated" do + issue.stub(:today?).and_return(true) + issue.touch + issue.new?.should be_false + end + end +end diff --git a/spec/roles/upvote_spec.rb b/spec/roles/upvote_spec.rb new file mode 100644 index 00000000..24288ada --- /dev/null +++ b/spec/roles/upvote_spec.rb @@ -0,0 +1,27 @@ +require 'spec_helper' + +describe Issue, "Upvote" do + let(:issue) { create(:issue) } + + it "with no notes has a 0/0 score" do + issue.upvotes.should == 0 + end + + it "should recognize non-+1 notes" do + issue.notes << create(:note, note: "No +1 here") + issue.should have(1).note + issue.notes.first.upvote?.should be_false + issue.upvotes.should == 0 + end + + it "should recognize a single +1 note" do + issue.notes << create(:note, note: "+1 This is awesome") + issue.upvotes.should == 1 + end + + it "should recognize multiple +1 notes" do + issue.notes << create(:note, note: "+1 This is awesome") + issue.notes << create(:note, note: "+1 I want this") + issue.upvotes.should == 2 + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 5c0bb618..d381b3f1 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,5 +1,7 @@ -require 'simplecov' -SimpleCov.start 'rails' +unless ENV['CI'] + require 'simplecov' + SimpleCov.start 'rails' +end # This file is copied to spec/ when you run 'rails generate rspec:install' ENV["RAILS_ENV"] ||= 'test' @@ -7,10 +9,7 @@ require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' require 'capybara/rails' require 'capybara/rspec' -require 'capybara/dsl' require 'webmock/rspec' -require 'factories' -require 'monkeypatch' require 'email_spec' require 'headless' @@ -21,10 +20,14 @@ Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} # Use capybara-webkit Capybara.javascript_driver = :webkit +WebMock.disable_net_connect!(allow_localhost: true) + RSpec.configure do |config| config.mock_with :rspec - config.include LoginMacros + config.include LoginHelpers, type: :request + config.include GitoliteStub + config.include FactoryGirl::Syntax::Methods # If you're not using ActiveRecord, or you'd prefer not to run each of your # examples within a transaction, remove the following line or assign false @@ -36,35 +39,11 @@ RSpec.configure do |config| headless.start end - config.before :each, type: :integration do - DeviseSessionMock.disable - end - config.before do - if example.metadata[:js] - DatabaseCleaner.strategy = :truncation - Capybara::Selenium::Driver::DEFAULT_OPTIONS[:resynchronize] = true - else - DatabaseCleaner.strategy = :transaction - end - - DatabaseCleaner.start - - WebMock.disable_net_connect!(allow_localhost: true) + stub_gitolite! # !!! Observers disabled by default in tests - # - # Use next code to enable observers - # before(:each) { ActiveRecord::Base.observers.enable(:all) } - # - ActiveRecord::Base.observers.disable :all + ActiveRecord::Base.observers.disable(:all) + # ActiveRecord::Base.observers.enable(:all) end - - config.after do - DatabaseCleaner.clean - end - - config.include RSpec::Rails::RequestExampleGroup, type: :request, example_group: { - file_path: /spec\/api/ - } end diff --git a/spec/support/api.rb b/spec/support/api.rb deleted file mode 100644 index d363d8b9..00000000 --- a/spec/support/api.rb +++ /dev/null @@ -1,7 +0,0 @@ -def api_prefix - "/api/#{Gitlab::API::VERSION}" -end - -def json_response - JSON.parse(response.body) -end diff --git a/spec/support/api_helpers.rb b/spec/support/api_helpers.rb new file mode 100644 index 00000000..7d901197 --- /dev/null +++ b/spec/support/api_helpers.rb @@ -0,0 +1,34 @@ +module ApiHelpers + # Public: Prepend a request path with the path to the API + # + # path - Path to append + # user - User object - If provided, automatically appends private_token query + # string for authenticated requests + # + # Examples + # + # >> api('/issues') + # => "/api/v2/issues" + # + # >> api('/issues', User.last) + # => "/api/v2/issues?private_token=..." + # + # >> api('/issues?foo=bar', User.last) + # => "/api/v2/issues?foo=bar&private_token=..." + # + # Returns the relative path to the requested API resource + def api(path, user = nil) + "/api/#{Gitlab::API::VERSION}#{path}" + + + # Normalize query string + (path.index('?') ? '' : '?') + + + # Append private_token if given a User object + (user.respond_to?(:private_token) ? + "&private_token=#{user.private_token}" : "") + end + + def json_response + JSON.parse(response.body) + end +end diff --git a/spec/support/db_cleaner.rb b/spec/support/db_cleaner.rb new file mode 100644 index 00000000..f1e072aa --- /dev/null +++ b/spec/support/db_cleaner.rb @@ -0,0 +1,18 @@ +require 'database_cleaner' + +RSpec.configure do |config| + config.before do + if example.metadata[:js] + DatabaseCleaner.strategy = :truncation + Capybara::Selenium::Driver::DEFAULT_OPTIONS[:resynchronize] = true + else + DatabaseCleaner.strategy = :transaction + end + + DatabaseCleaner.start + end + + config.after do + DatabaseCleaner.clean + end +end diff --git a/spec/support/gitolite_stub.rb b/spec/support/gitolite_stub.rb new file mode 100644 index 00000000..2a907f99 --- /dev/null +++ b/spec/support/gitolite_stub.rb @@ -0,0 +1,35 @@ +module GitoliteStub + def stub_gitolite! + stub_gitlab_gitolite + stub_gitolite_admin + end + + def stub_gitolite_admin + gitolite_repo = mock( + clean_permissions: true, + add_permission: true + ) + + gitolite_config = mock( + add_repo: true, + get_repo: gitolite_repo, + has_repo?: true + ) + + gitolite_admin = double( + 'Gitolite::GitoliteAdmin', + config: gitolite_config, + save: true, + ) + + Gitolite::GitoliteAdmin.stub(new: gitolite_admin) + + end + + def stub_gitlab_gitolite + gitlab_gitolite = Gitlab::Gitolite.new + Gitlab::Gitolite.stub(new: gitlab_gitolite) + gitlab_gitolite.stub(configure: ->() { yield(self) }) + gitlab_gitolite.stub(update_keys: true) + end +end diff --git a/spec/support/js_patch.rb b/spec/support/js_patch.rb deleted file mode 100644 index 0d4ab264..00000000 --- a/spec/support/js_patch.rb +++ /dev/null @@ -1,6 +0,0 @@ -module JsPatch - def confirm_js_popup - page.evaluate_script("window.alert = function(msg) { return true; }") - page.evaluate_script("window.confirm = function(msg) { return true; }") - end -end diff --git a/spec/support/login.rb b/spec/support/login.rb deleted file mode 100644 index 78a907ba..00000000 --- a/spec/support/login.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LoginMacros - def login_as role - @user = User.create(email: "user#{User.count}@mail.com", - name: "John Smith", - password: "123456", - password_confirmation: "123456", - skype: 'user_skype') - - if role == :admin - @user.admin = true - @user.save! - end - - visit new_user_session_path - fill_in "user_email", with: @user.email - fill_in "user_password", with: "123456" - click_button "Sign in" - end - - def login_with(user) - visit new_user_session_path - fill_in "user_email", with: user.email - fill_in "user_password", with: "123456" - click_button "Sign in" - end - - def logout - click_link "Logout" rescue nil - end -end diff --git a/spec/support/login_helpers.rb b/spec/support/login_helpers.rb new file mode 100644 index 00000000..769034e2 --- /dev/null +++ b/spec/support/login_helpers.rb @@ -0,0 +1,23 @@ +module LoginHelpers + # Internal: Create and log in as a user of the specified role + # + # role - User role (e.g., :admin, :user) + def login_as(role) + @user = Factory(role) + login_with(@user) + end + + # Internal: Login as the specified user + # + # user - User instance to login with + def login_with(user) + visit new_user_session_path + fill_in "user_email", with: user.email + fill_in "user_password", with: "123456" + click_button "Sign in" + end + + def logout + click_link "Logout" rescue nil + end +end diff --git a/spec/support/matchers.rb b/spec/support/matchers.rb index e0672166..cb1dcba3 100644 --- a/spec/support/matchers.rb +++ b/spec/support/matchers.rb @@ -28,6 +28,16 @@ RSpec::Matchers.define :be_404_for do |user| end end +RSpec::Matchers.define :include_module do |expected| + match do + described_class.included_modules.include?(expected) + end + + failure_message_for_should do + "expected #{described_class} to include the #{expected} module" + end +end + module UrlAccess def url_allowed?(user, url) emulate_user(user) @@ -57,3 +67,17 @@ module UrlAccess login_with(user) if user end end + +# Extend shoulda-matchers +module Shoulda::Matchers::ActiveModel + class EnsureLengthOfMatcher + # Shortcut for is_at_least and is_at_most + def is_within(range) + if range.exclude_end? + is_at_least(range.first) && is_at_most(range.last - 1) + else + is_at_least(range.first) && is_at_most(range.last) + end + end + end +end diff --git a/spec/support/shared_examples.rb b/spec/support/shared_examples.rb deleted file mode 100644 index 9fd207d0..00000000 --- a/spec/support/shared_examples.rb +++ /dev/null @@ -1,16 +0,0 @@ -shared_examples_for :project_side_pane do - subject { page } - it { should have_content((@project || project).name) } - it { should have_content("Commits") } - it { should have_content("Files") } -end - -shared_examples_for :tree_view do - subject { page } - - it "should have Tree View of project" do - should have_content("app") - should have_content("History") - should have_content("Gemfile") - end -end diff --git a/spec/support/stubbed_repository.rb b/spec/support/stubbed_repository.rb new file mode 100644 index 00000000..90491e43 --- /dev/null +++ b/spec/support/stubbed_repository.rb @@ -0,0 +1,31 @@ +# Stubs out all Git repository access done by models so that specs can run +# against fake repositories without Grit complaining that they don't exist. +module StubbedRepository + def path_to_repo + if new_record? || path == 'newproject' + # There are a couple Project specs and features that expect the Project's + # path to be in the returned path, so let's patronize them. + File.join(Rails.root, 'tmp', 'repositories', path) + else + # For everything else, just give it the path to one of our real seeded + # repos. + File.join(Rails.root, 'tmp', 'repositories', 'gitlabhq') + end + end + + def satellite + FakeSatellite.new + end + + class FakeSatellite + def exists? + true + end + + def create + true + end + end +end + +Project.send(:include, StubbedRepository) From 8db2a59d0b6959a78ea7be4663dd9a858dff9f98 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sat, 1 Sep 2012 23:39:28 -0400 Subject: [PATCH 115/357] Add StaticModel role, and add it to Commit model Instead of doing this: link_to(commit.id, project_commit_path(project, id: commit.id)) Note.create(noteable_id: commit.id, noteable_type: "Commit", ...) It lets us do this: link_to(commit.id, project_commit_path(project, commit)) Note.create(noteable: commit, ...) --- app/models/commit.rb | 12 ++++-------- app/roles/static_model.rb | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 app/roles/static_model.rb diff --git a/app/models/commit.rb b/app/models/commit.rb index 5c6b4d88..15afedcb 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -1,6 +1,7 @@ class Commit include ActiveModel::Conversion include Gitlab::Encode + include StaticModel extend ActiveModel::Naming attr_accessor :commit @@ -22,8 +23,7 @@ class Commit :to_patch, to: :commit - - class << self + class << self def find_or_first(repo, commit_id = nil, root_ref) commit = if commit_id repo.commit(commit_id) @@ -85,7 +85,7 @@ class Commit first = project.commit(to.try(:strip)) last = project.commit(from.try(:strip)) - result = { + result = { commits: [], diffs: [], commit: nil @@ -105,10 +105,6 @@ class Commit end end - def persisted? - false - end - def initialize(raw_commit, head = nil) @commit = raw_commit @head = head @@ -155,7 +151,7 @@ class Commit prev_commit.try :id end - def parents_count + def parents_count parents && parents.count || 0 end end diff --git a/app/roles/static_model.rb b/app/roles/static_model.rb new file mode 100644 index 00000000..d26c8f47 --- /dev/null +++ b/app/roles/static_model.rb @@ -0,0 +1,35 @@ +# Provides an ActiveRecord-like interface to a model whose data is not persisted to a database. +module StaticModel + extend ActiveSupport::Concern + + module ClassMethods + # Used by ActiveRecord's polymorphic association to set object_id + def primary_key + 'id' + end + + # Used by ActiveRecord's polymorphic association to set object_type + def base_class + self + end + end + + # Used by AR for fetching attributes + # + # Pass it along if we respond to it. + def [](key) + send(key) if respond_to?(key) + end + + def to_param + id + end + + def persisted? + false + end + + def destroyed? + false + end +end From 40d619107f9027a33eccc01afa120f7b588e5cf9 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sat, 1 Sep 2012 23:56:44 -0400 Subject: [PATCH 116/357] Add link_title to CommitDecorator --- app/decorators/commit_decorator.rb | 9 +++++++++ lib/gitlab/markdown.rb | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/decorators/commit_decorator.rb b/app/decorators/commit_decorator.rb index cc8fa975..074176ae 100644 --- a/app/decorators/commit_decorator.rb +++ b/app/decorators/commit_decorator.rb @@ -1,6 +1,15 @@ class CommitDecorator < ApplicationDecorator decorates :commit + # Returns a string describing the commit for use in a link title + # + # Example + # + # "Commit: Alex Denisov - Project git clone panel" + def link_title + "Commit: #{author_name} - #{title}" + end + # Returns the commits title. # # Usually, the commit title is the first line of the commit message. diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb index 75fa835d..9a07133d 100644 --- a/lib/gitlab/markdown.rb +++ b/lib/gitlab/markdown.rb @@ -100,7 +100,7 @@ module Gitlab def reference_commit(identifier) if commit = @project.commit(identifier) - link_to(identifier, project_commit_path(@project, id: commit.id), html_options.merge(title: "Commit: #{commit.author_name} - #{CommitDecorator.new(commit).title}", class: "gfm gfm-commit #{html_options[:class]}")) + link_to(identifier, project_commit_path(@project, id: commit.id), html_options.merge(title: CommitDecorator.new(commit).link_title, class: "gfm gfm-commit #{html_options[:class]}")) end end end From ef24576fc2239935d2d7b553e7d55674abf4eb4c Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sun, 2 Sep 2012 02:13:13 -0400 Subject: [PATCH 117/357] Redesign gfm helper specs Should now be much clearer about what each spec is actually testing. For example, instead of testing stuff like link classes and titles in every single call, we only test those things once, in their own specs. --- spec/helpers/gitlab_markdown_helper_spec.rb | 344 ++++++++++++-------- 1 file changed, 200 insertions(+), 144 deletions(-) diff --git a/spec/helpers/gitlab_markdown_helper_spec.rb b/spec/helpers/gitlab_markdown_helper_spec.rb index 28bd46ec..00164e0c 100644 --- a/spec/helpers/gitlab_markdown_helper_spec.rb +++ b/spec/helpers/gitlab_markdown_helper_spec.rb @@ -1,232 +1,288 @@ require "spec_helper" describe GitlabMarkdownHelper do + let!(:project) { create(:project) } + + let(:user) { create(:user, name: 'gfm') } + let(:commit) { CommitDecorator.decorate(project.commit) } + let(:issue) { create(:issue, project: project) } + let(:merge_request) { create(:merge_request, project: project) } + let(:snippet) { create(:snippet, project: project) } + let(:member) { project.users_projects.where(user_id: user).first } + before do - @project = Factory(:project) - @commit = @project.repo.commits.first.parents.first - @commit = CommitDecorator.decorate(Commit.new(@commit)) - @other_project = Factory :project, path: "OtherPath", code: "OtherCode" - @fake_user = Factory :user, name: "fred" + # Helper expects a @project instance variable + @project = project end describe "#gfm" do - it "should return text if @project is not set" do - @project = nil + it "should return unaltered text if project is nil" do + actual = "Testing references: ##{issue.id}" - gfm("foo").should == "foo" + gfm(actual).should_not == actual + + @project = nil + gfm(actual).should == actual + end + + it "should not alter non-references" do + actual = expected = "_Please_ *stop* 'helping' and all the other b*$#%' you do." + gfm(actual).should == expected + end + + it "should not touch HTML entities" do + actual = expected = "We'll accept good pull requests." + gfm(actual).should == expected + end + + it "should forward HTML options to links" do + gfm("Fixed in #{commit.id}", class: "foo").should have_selector("a.gfm.foo") end describe "referencing a commit" do + let(:expected) { project_commit_path(project, commit) } + it "should link using a full id" do - gfm("Reverts changes from #{@commit.id}").should == "Reverts changes from #{link_to @commit.id, project_commit_path(@project, id: @commit.id), title: "Commit: #{@commit.author_name} - #{@commit.title}", class: "gfm gfm-commit "}" + actual = "Reverts #{commit.id}" + gfm(actual).should match(expected) end it "should link using a short id" do - gfm("Backported from #{@commit.id[0, 6]}").should == "Backported from #{link_to @commit.id[0, 6], project_commit_path(@project, id: @commit.id), title: "Commit: #{@commit.author_name} - #{@commit.title}", class: "gfm gfm-commit "}" + actual = "Backported from #{commit.short_id(6)}" + gfm(actual).should match(expected) end - it "should link with adjecent text" do - gfm("Reverted (see #{@commit.id})").should == "Reverted (see #{link_to @commit.id, project_commit_path(@project, id: @commit.id), title: "Commit: #{@commit.author_name} - #{@commit.title}", class: "gfm gfm-commit "})" + it "should link with adjacent text" do + actual = "Reverted (see #{commit.id})" + gfm(actual).should match(expected) + end + + it "should keep whitespace intact" do + actual = "Changes #{commit.id} dramatically" + expected = /Changes #{commit.id}<\/a> dramatically/ + gfm(actual).should match(expected) end it "should not link with an invalid id" do - gfm("What happened in 12345678?").should == "What happened in 12345678?" + actual = expected = "What happened in #{commit.id.reverse}" + gfm(actual).should == expected + end + + it "should include a title attribute" do + actual = "Reverts #{commit.id}" + gfm(actual).should match(/title="#{commit.link_title}"/) + end + + it "should include standard gfm classes" do + actual = "Reverts #{commit.id}" + gfm(actual).should match(/class="\s?gfm gfm-commit\s?"/) end end describe "referencing a team member" do - it "should link using a simple name" do - user = Factory :user, name: "barry" - @project.users << user - member = @project.users_projects.where(user_id: user).first + let(:actual) { "@#{user.name} you are right." } + let(:expected) { project_team_member_path(project, member) } - gfm("@#{user.name} you are right").should == "#{link_to "@#{user.name}", project_team_member_path(@project, member), class: "gfm gfm-team_member "} you are right" + before do + project.users << user + end + + it "should link using a simple name" do + gfm(actual).should match(expected) end it "should link using a name with dots" do - user = Factory :user, name: "alphA.Beta" - @project.users << user - member = @project.users_projects.where(user_id: user).first - - gfm("@#{user.name} you are right").should == "#{link_to "@#{user.name}", project_team_member_path(@project, member), class: "gfm gfm-team_member "} you are right" + user.update_attributes(name: "alphA.Beta") + gfm(actual).should match(expected) end it "should link using name with underscores" do - user = Factory :user, name: "ping_pong_king" - @project.users << user - member = @project.users_projects.where(user_id: user).first - - gfm("@#{user.name} you are right").should == "#{link_to "@#{user.name}", project_team_member_path(@project, member), class: "gfm gfm-team_member "} you are right" + user.update_attributes(name: "ping_pong_king") + gfm(actual).should match(expected) end - it "should link with adjecent text" do - user = Factory.create(:user, name: "ace") - @project.users << user - member = @project.users_projects.where(user_id: user).first - - gfm("Mail the Admin (@#{user.name})").should == "Mail the Admin (#{link_to "@#{user.name}", project_team_member_path(@project, member), class: "gfm gfm-team_member "})" + it "should link with adjacent text" do + actual = "Mail the admin (@gfm)" + gfm(actual).should match(expected) end - it "should add styles" do - user = Factory :user, name: "barry" - @project.users << user - gfm("@#{user.name} you are right").should have_selector(".gfm.gfm-team_member") + it "should keep whitespace intact" do + actual = "Yes, @#{user.name} is right." + expected = /Yes, @#{user.name}<\/a> is right/ + gfm(actual).should match(expected) end - it "should not link using a bogus name" do - gfm("What hapened to @foo?").should == "What hapened to @foo?" + it "should not link with an invalid id" do + actual = expected = "@#{user.name.reverse} you are right." + gfm(actual).should == expected + end + + it "should include standard gfm classes" do + gfm(actual).should match(/class="\s?gfm gfm-team_member\s?"/) + end + end + + # Shared examples for referencing an object + # + # Expects the following attributes to be available in the example group: + # + # - object - The object itself + # - reference - The object reference string (e.g., #1234, $1234, !1234) + # + # Currently limited to Snippets, Issues and MergeRequests + shared_examples 'referenced object' do + let(:actual) { "Reference to #{reference}" } + let(:expected) { polymorphic_path([project, object]) } + + it "should link using a valid id" do + gfm(actual).should match(expected) + end + + it "should link with adjacent text" do + # Wrap the reference in parenthesis + gfm(actual.gsub(reference, "(#{reference})")).should match(expected) + + # Append some text to the end of the reference + gfm(actual.gsub(reference, "#{reference}, right?")).should match(expected) + end + + it "should keep whitespace intact" do + actual = "Referenced #{reference} already." + expected = /Referenced [^\s]+<\/a> already/ + gfm(actual).should match(expected) + end + + it "should not link with an invalid id" do + # Modify the reference string so it's still parsed, but is invalid + reference.gsub!(/^(.)(\d+)$/, '\1' + ('\2' * 2)) + gfm(actual).should == actual + end + + it "should include a title attribute" do + title = "#{object.class.to_s.titlecase}: #{object.title}" + gfm(actual).should match(/title="#{title}"/) + end + + it "should include standard gfm classes" do + css = object.class.to_s.underscore + gfm(actual).should match(/class="\s?gfm gfm-#{css}\s?"/) end end describe "referencing an issue" do - before do - @issue = Factory :issue, assignee: @fake_user, author: @fake_user, project: @project - @invalid_issue = Factory :issue, assignee: @fake_user, author: @fake_user, project: @other_project - end + let(:object) { issue } + let(:reference) { "##{issue.id}" } - it "should link using a correct id" do - gfm("Fixes ##{@issue.id}").should == "Fixes #{link_to "##{@issue.id}", project_issue_path(@project, @issue), title: "Issue: #{@issue.title}", class: "gfm gfm-issue "}" - end - - it "should link with adjecent text" do - gfm("This has already been discussed (see ##{@issue.id})").should == "This has already been discussed (see #{link_to "##{@issue.id}", project_issue_path(@project, @issue), title: "Issue: #{@issue.title}", class: "gfm gfm-issue "})" - end - - it "should add styles" do - gfm("Fixes ##{@issue.id}").should have_selector(".gfm.gfm-issue") - end - - it "should not link using an invalid id" do - gfm("##{@invalid_issue.id} has been marked duplicate of this").should == "##{@invalid_issue.id} has been marked duplicate of this" - end + include_examples 'referenced object' end describe "referencing a merge request" do - before do - @merge_request = Factory :merge_request, assignee: @fake_user, author: @fake_user, project: @project - @invalid_merge_request = Factory :merge_request, assignee: @fake_user, author: @fake_user, project: @other_project - end + let(:object) { merge_request } + let(:reference) { "!#{merge_request.id}" } - it "should link using a correct id" do - gfm("Fixed in !#{@merge_request.id}").should == "Fixed in #{link_to "!#{@merge_request.id}", project_merge_request_path(@project, @merge_request), title: "Merge Request: #{@merge_request.title}", class: "gfm gfm-merge_request "}" - end - - it "should link with adjecent text" do - gfm("This has been fixed already (see !#{@merge_request.id})").should == "This has been fixed already (see #{link_to "!#{@merge_request.id}", project_merge_request_path(@project, @merge_request), title: "Merge Request: #{@merge_request.title}", class: "gfm gfm-merge_request "})" - end - - it "should add styles" do - gfm("Fixed in !#{@merge_request.id}").should have_selector(".gfm.gfm-merge_request") - end - - it "should not link using an invalid id" do - gfm("!#{@invalid_merge_request.id} violates our coding guidelines") - end + include_examples 'referenced object' end describe "referencing a snippet" do - before do - @snippet = Factory.create(:snippet, - title: "Render asset to string", - author: @fake_user, - project: @project) - end + let(:object) { snippet } + let(:reference) { "$#{snippet.id}" } - it "should link using a correct id" do - gfm("Check out $#{@snippet.id}").should == "Check out #{link_to "$#{@snippet.id}", project_snippet_path(@project, @snippet), title: "Snippet: #{@snippet.title}", class: "gfm gfm-snippet "}" - end - - it "should link with adjecent text" do - gfm("I have created a snippet for that ($#{@snippet.id})").should == "I have created a snippet for that (#{link_to "$#{@snippet.id}", project_snippet_path(@project, @snippet), title: "Snippet: #{@snippet.title}", class: "gfm gfm-snippet "})" - end - - it "should add styles" do - gfm("Check out $#{@snippet.id}").should have_selector(".gfm.gfm-snippet") - end - - it "should not link using an invalid id" do - gfm("Don't use $1234").should == "Don't use $1234" - end + include_examples 'referenced object' end - it "should link to multiple things" do - user = Factory :user, name: "barry" - @project.users << user - member = @project.users_projects.where(user_id: user).first + describe "referencing multiple objects" do + let(:actual) { "!#{merge_request.id} -> #{commit.id} -> ##{issue.id}" } - gfm("Let @#{user.name} fix the *mess* in #{@commit.id}").should == "Let #{link_to "@#{user.name}", project_team_member_path(@project, member), class: "gfm gfm-team_member "} fix the *mess* in #{link_to @commit.id, project_commit_path(@project, id: @commit.id), title: "Commit: #{@commit.author_name} - #{@commit.title}", class: "gfm gfm-commit "}" - end + it "should link to the merge request" do + expected = project_merge_request_path(project, merge_request) + gfm(actual).should match(expected) + end - it "should not trip over other stuff" do - gfm("_Please_ *stop* 'helping' and all the other b*$#%' you do.").should == "_Please_ *stop* 'helping' and all the other b*$#%' you do." - end + it "should link to the commit" do + expected = project_commit_path(project, commit) + gfm(actual).should match(expected) + end - it "should not touch HTML entities" do - gfm("We'll accept good pull requests.").should == "We'll accept good pull requests." - end - - it "should forward HTML options to links" do - gfm("fixed in #{@commit.id}", class: "foo").should have_selector("a.foo") + it "should link to the issue" do + expected = project_issue_path(project, issue) + gfm(actual).should match(expected) + end end end describe "#link_to_gfm" do - let(:issue1) { Factory :issue, assignee: @fake_user, author: @fake_user, project: @project } - let(:issue2) { Factory :issue, assignee: @fake_user, author: @fake_user, project: @project } + let(:commit_path) { project_commit_path(project, commit) } + let(:issues) { create_list(:issue, 2, project: project) } it "should handle references nested in links with all the text" do - link_to_gfm("This should finally fix ##{issue1.id} and ##{issue2.id} for real", project_commit_path(@project, id: @commit.id)).should == "#{link_to "This should finally fix ", project_commit_path(@project, id: @commit.id)}#{link_to "##{issue1.id}", project_issue_path(@project, issue1), title: "Issue: #{issue1.title}", class: "gfm gfm-issue "}#{link_to " and ", project_commit_path(@project, id: @commit.id)}#{link_to "##{issue2.id}", project_issue_path(@project, issue2), title: "Issue: #{issue2.title}", class: "gfm gfm-issue "}#{link_to " for real", project_commit_path(@project, id: @commit.id)}" + actual = link_to_gfm("This should finally fix ##{issues[0].id} and ##{issues[1].id} for real", commit_path) + + # Break the result into groups of links with their content, without + # closing tags + groups = actual.split("") + + # Leading commit link + groups[0].should match(/href="#{commit_path}"/) + groups[0].should match(/This should finally fix $/) + + # First issue link + groups[1].should match(/href="#{project_issue_path(project, issues[0])}"/) + groups[1].should match(/##{issues[0].id}$/) + + # Internal commit link + groups[2].should match(/href="#{commit_path}"/) + groups[2].should match(/ and /) + + # Second issue link + groups[3].should match(/href="#{project_issue_path(project, issues[1])}"/) + groups[3].should match(/##{issues[1].id}$/) + + # Trailing commit link + groups[4].should match(/href="#{commit_path}"/) + groups[4].should match(/ for real$/) end it "should forward HTML options" do - link_to_gfm("This should finally fix ##{issue1.id} for real", project_commit_path(@project, id: @commit.id), class: "foo").should have_selector(".foo") + actual = link_to_gfm("Fixed in #{commit.id}", commit_path, class: 'foo') + actual.should have_selector 'a.gfm.gfm-commit.foo' end end describe "#markdown" do - before do - @issue = Factory :issue, assignee: @fake_user, author: @fake_user, project: @project - @merge_request = Factory :merge_request, assignee: @fake_user, author: @fake_user, project: @project - @note = Factory.create(:note, - note: "Screenshot of the new feature", - project: @project, - noteable_id: @commit.id, - noteable_type: "Commit", - attachment: "screenshot123.jpg") - @snippet = Factory.create(:snippet, - title: "Render asset to string", - author: @fake_user, - project: @project) - - @other_user = Factory :user, name: "bill" - @project.users << @other_user - @member = @project.users_projects.where(user_id: @other_user).first - end - it "should handle references in paragraphs" do - markdown("\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. #{@commit.id} Nam pulvinar sapien eget odio adipiscing at faucibus orci vestibulum.\n").should == "

Lorem ipsum dolor sit amet, consectetur adipiscing elit. #{link_to @commit.id, project_commit_path(@project, id: @commit.id), title: "Commit: #{@commit.author_name} - #{@commit.title}", class: "gfm gfm-commit "} Nam pulvinar sapien eget odio adipiscing at faucibus orci vestibulum.

\n" + markdown("\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. #{commit.id} Nam pulvinar sapien eget odio adipiscing at faucibus orci vestibulum.\n").should == "

Lorem ipsum dolor sit amet, consectetur adipiscing elit. #{link_to commit.id, project_commit_path(project, commit), title: commit.link_title, class: "gfm gfm-commit "} Nam pulvinar sapien eget odio adipiscing at faucibus orci vestibulum.

\n" end it "should handle references in headers" do - markdown("\n# Working around ##{@issue.id} for now\n## Apply !#{@merge_request.id}").should == "

Working around #{link_to "##{@issue.id}", project_issue_path(@project, @issue), title: "Issue: #{@issue.title}", class: "gfm gfm-issue "} for now

\n\n

Apply #{link_to "!#{@merge_request.id}", project_merge_request_path(@project, @merge_request), title: "Merge Request: #{@merge_request.title}", class: "gfm gfm-merge_request "}

\n" + actual = "\n# Working around ##{issue.id}\n## Apply !#{merge_request.id}" + + markdown(actual).should match(%r{Working around ##{issue.id}}) + markdown(actual).should match(%r{Apply !#{merge_request.id}}) end it "should handle references in lists" do - markdown("\n* dark: ##{@issue.id}\n* light by @#{@other_user.name}\n").should == "
    \n
  • dark: #{link_to "##{@issue.id}", project_issue_path(@project, @issue), title: "Issue: #{@issue.title}", class: "gfm gfm-issue "}
  • \n
  • light by #{link_to "@#{@other_user.name}", project_team_member_path(@project, @member), class: "gfm gfm-team_member "}
  • \n
\n" + project.users << user + + actual = "\n* dark: ##{issue.id}\n* light by @#{member.user_name}" + + markdown(actual).should match(%r{
  • dark: ##{issue.id}
  • }) + markdown(actual).should match(%r{
  • light by @#{member.user_name}
  • }) end it "should handle references in " do - markdown("Apply _!#{@merge_request.id}_ ASAP").should == "

    Apply #{link_to "!#{@merge_request.id}", project_merge_request_path(@project, @merge_request), title: "Merge Request: #{@merge_request.title}", class: "gfm gfm-merge_request "} ASAP

    \n" + actual = "Apply _!#{merge_request.id}_ ASAP" + + markdown(actual).should match(%r{Apply !#{merge_request.id}}) end it "should leave code blocks untouched" do - markdown("\n some code from $#{@snippet.id}\n here too\n").should == "
    some code from $#{@snippet.id}\nhere too\n
    \n
    \n" + markdown("\n some code from $#{snippet.id}\n here too\n").should == "
    some code from $#{snippet.id}\nhere too\n
    \n
    \n" - markdown("\n```\nsome code from $#{@snippet.id}\nhere too\n```\n").should == "
    some code from $#{@snippet.id}\nhere too\n
    \n
    \n" + markdown("\n```\nsome code from $#{snippet.id}\nhere too\n```\n").should == "
    some code from $#{snippet.id}\nhere too\n
    \n
    \n" end it "should leave inline code untouched" do - markdown("\nDon't use `$#{@snippet.id}` here.\n").should == "

    Don't use $#{@snippet.id} here.

    \n" + markdown("\nDon't use `$#{snippet.id}` here.\n").should == "

    Don't use $#{snippet.id} here.

    \n" end end end From cc137bba7905790347418f184c6b02d01af3e225 Mon Sep 17 00:00:00 2001 From: Sytse Sijbrandij Date: Sun, 2 Sep 2012 22:41:21 +0200 Subject: [PATCH 118/357] Update the references to the script and refer to it from the installation manual. Update the references to the script and refer to it from the installation manual. Indent the code block. --- doc/installation.md | 6 ++++++ lib/support/aws/debian_ubuntu_aws.sh | 7 ++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/doc/installation.md b/doc/installation.md index efed21f0..4cb873f0 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -51,6 +51,12 @@ Also read the [Read this before you submit an issue](https://github.com/gitlabhq > curl https://raw.github.com/gitlabhq/gitlabhq/master/doc/debian_ubuntu.sh | sh > > Now you can go to step 4" +> +> Or if you are installing on Amazon Web Services using Ubuntu 12.04 you can do all steps (1 to 6) at once with: +> +> curl https://raw.github.com/gitlabhq/gitlabhq/master/lib/support/aws/debian_ubuntu_aws.sh | sh +> +> for more detailed instructions read the HOWTO section of [the script](https://github.com/gitlabhq/gitlabhq/blob/master/lib/support/aws/debian_ubuntu_aws.sh) > - - - # 1. Install packages diff --git a/lib/support/aws/debian_ubuntu_aws.sh b/lib/support/aws/debian_ubuntu_aws.sh index 962ee008..c4103ec9 100644 --- a/lib/support/aws/debian_ubuntu_aws.sh +++ b/lib/support/aws/debian_ubuntu_aws.sh @@ -6,9 +6,6 @@ # This script only works on Amazon Web Services (AWS). # The operating system used is Ubuntu 12.04 64bit. -# TODO -# @dosire will send a pull request after this is merged in to change dosire/gitlabhq/non-interactive-aws-install links to gitlabhq/gitlabhq/master and reference this script from installation.md - # HOWTO # Signup for AWS, free tier are available at http://aws.amazon.com/free/ # Go to EC2 tab in the AWS console EC2 https://console.aws.amazon.com/ec2/home @@ -33,7 +30,7 @@ # Give the following command in your local terminal while suptituting the UPPERCASE items # 'ssh -i LOCATION_OF_AWS_KEY_PAIR_PRIVATE_KEY PUBLIC_DNS_OF_THE_NEW_SERVER' # Execute the curl command below and when its ready follow the printed 'Log in instuctions' -# curl https://raw.github.com/dosire/gitlabhq/non-interactive-aws-install/lib/support/aws/debian_ubuntu_aws.sh | sh +# curl https://raw.github.com/gitlabhq/gitlabhq/master/lib/support/aws/debian_ubuntu_aws.sh | sh # Prevent fingerprint prompt for localhost in step 1 to 3. echo "Host localhost @@ -41,7 +38,7 @@ echo "Host localhost UserKnownHostsFile=/dev/null" | sudo tee -a /etc/ssh/ssh_config # Existing script for Step 1 to 3 -curl https://raw.github.com/dosire/gitlabhq/non-interactive-aws-install/doc/debian_ubuntu.sh | sh +curl https://raw.github.com/gitlabhq/gitlabhq/master/doc/debian_ubuntu.sh | sh # Install MySQL sudo apt-get install -y makepasswd # Needed to create a unique password non-interactively. From c7cfe3d83bfbad2a074cacb5a4ed8a24244f8f26 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 3 Sep 2012 08:13:51 +0300 Subject: [PATCH 119/357] devise session templates to haml. Fix problem with missing message in commit --- app/decorators/commit_decorator.rb | 8 ++++ app/views/devise/sessions/_new_ldap.html.erb | 39 ------------------- app/views/devise/sessions/_new_ldap.html.haml | 29 ++++++++++++++ app/views/devise/sessions/new.html.erb | 27 ------------- app/views/devise/sessions/new.html.haml | 21 ++++++++++ 5 files changed, 58 insertions(+), 66 deletions(-) delete mode 100644 app/views/devise/sessions/_new_ldap.html.erb create mode 100644 app/views/devise/sessions/_new_ldap.html.haml delete mode 100644 app/views/devise/sessions/new.html.erb create mode 100644 app/views/devise/sessions/new.html.haml diff --git a/app/decorators/commit_decorator.rb b/app/decorators/commit_decorator.rb index 074176ae..f813ed25 100644 --- a/app/decorators/commit_decorator.rb +++ b/app/decorators/commit_decorator.rb @@ -16,6 +16,8 @@ class CommitDecorator < ApplicationDecorator # In case this first line is longer than 80 characters, it is cut off # after 70 characters and ellipses (`&hellp;`) are appended. def title + return no_commit_message unless safe_message + title_end = safe_message.index(/\n/) if (!title_end && safe_message.length > 80) || (title_end && title_end > 80) safe_message[0..69] << "…".html_safe @@ -35,4 +37,10 @@ class CommitDecorator < ApplicationDecorator safe_message.split(/\n/, 2)[1].try(:chomp) end end + + protected + + def no_commit_message + "--no commit message" + end end diff --git a/app/views/devise/sessions/_new_ldap.html.erb b/app/views/devise/sessions/_new_ldap.html.erb deleted file mode 100644 index 35dfaf71..00000000 --- a/app/views/devise/sessions/_new_ldap.html.erb +++ /dev/null @@ -1,39 +0,0 @@ -<%= form_tag(user_omniauth_callback_path(:ldap), :class => "login-box", :id => 'new_ldap_user' ) do %> - <%= image_tag "login-logo.png", :width => "304", :height => "66", :class => "login-logo", :alt => "Login Logo" %> - - <%= text_field_tag :username, nil, {:class => "text top", :placeholder => "LDAP Login"} %> - <%= password_field_tag :password, nil, {:class => "text bottom", :placeholder => "Password"} %> - -
    - <%= submit_tag "LDAP Sign in", :class => "primary btn" %> - - <%- if devise_mapping.omniauthable? %> - <%- (resource_class.omniauth_providers - [:ldap]).each do |provider| %> -
    - <%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider), :class => "btn primary" %>
    - <% end -%> - <% end -%> - -
    - Other Sign in - - -<% end %> - - -<%= form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => { :class => "login-box" }) do |f| %> - <%= f.text_field :email, :class => "text top", :placeholder => "Email" %> - <%= f.password_field :password, :class => "text bottom", :placeholder => "Password" %> - - <% if devise_mapping.rememberable? -%> -
    - <% end -%> -
    - <%= f.submit "Sign in", :class => "primary btn" %> -
    <%= render :partial => "devise/shared/links" %>
    - -<% end %> diff --git a/app/views/devise/sessions/_new_ldap.html.haml b/app/views/devise/sessions/_new_ldap.html.haml new file mode 100644 index 00000000..85010df7 --- /dev/null +++ b/app/views/devise/sessions/_new_ldap.html.haml @@ -0,0 +1,29 @@ += form_tag(user_omniauth_callback_path(:ldap), :class => "login-box", :id => 'new_ldap_user' ) do + = image_tag "login-logo.png", :width => "304", :height => "66", :class => "login-logo", :alt => "Login Logo" + = text_field_tag :username, nil, {:class => "text top", :placeholder => "LDAP Login"} + = password_field_tag :password, nil, {:class => "text bottom", :placeholder => "Password"} + %br/ + = submit_tag "LDAP Sign in", :class => "primary btn" + - if devise_mapping.omniauthable? + - (resource_class.omniauth_providers - [:ldap]).each do |provider| + %hr/ + = link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider), :class => "btn primary" + %br/ + %hr/ + %a#other_form_toggle{:href => "#", :onclick => "javascript:$('#new_user').toggle();"} Other Sign in + :javascript + $(function() { + $('#new_user').toggle(); + }); + = form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => { :class => "login-box" }) do |f| + = f.text_field :email, :class => "text top", :placeholder => "Email" + = f.password_field :password, :class => "text bottom", :placeholder => "Password" + - if devise_mapping.rememberable? + .clearfix.inputs-list + %label.checkbox.remember_me{:for => "user_remember_me"} + = f.check_box :remember_me + %span Remember me + %br/ + = f.submit "Sign in", :class => "primary btn" + .right + = render :partial => "devise/shared/links" diff --git a/app/views/devise/sessions/new.html.erb b/app/views/devise/sessions/new.html.erb deleted file mode 100644 index a0383866..00000000 --- a/app/views/devise/sessions/new.html.erb +++ /dev/null @@ -1,27 +0,0 @@ -<% unless ldap_enable? -%> - - <%= form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => { :class => "login-box" }) do |f| %> - <%= image_tag "login-logo.png", :width => "304", :height => "66", :class => "login-logo", :alt => "Login Logo" %> - - <%= f.text_field :email, :class => "text top", :placeholder => "Email" %> - <%= f.password_field :password, :class => "text bottom", :placeholder => "Password" %> - - <% if devise_mapping.rememberable? -%> -
    - <% end -%> -
    - <%= f.submit "Sign in", :class => "primary btn" %> -
    <%= render :partial => "devise/shared/links" %>
    - - <%- if devise_mapping.omniauthable? %> - <%- resource_class.omniauth_providers.each do |provider| %> -
    - <%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider), :class => "btn primary" %>
    - <% end -%> - <% end -%> - - <% end %> - -<% else %> - <%= render :partial => 'devise/sessions/new_ldap' %> -<% end %> diff --git a/app/views/devise/sessions/new.html.haml b/app/views/devise/sessions/new.html.haml new file mode 100644 index 00000000..6e86186c --- /dev/null +++ b/app/views/devise/sessions/new.html.haml @@ -0,0 +1,21 @@ +- if ldap_enable? + = render :partial => 'devise/sessions/new_ldap' +- else + = form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => { :class => "login-box" }) do |f| + = image_tag "login-logo.png", :width => "304", :height => "66", :class => "login-logo", :alt => "Login Logo" + = f.text_field :email, :class => "text top", :placeholder => "Email" + = f.password_field :password, :class => "text bottom", :placeholder => "Password" + - if devise_mapping.rememberable? + .clearfix.inputs-list + %label.checkbox.remember_me{:for => "user_remember_me"} + = f.check_box :remember_me + %span Remember me + %br/ + = f.submit "Sign in", :class => "primary btn wide" + .right + = render :partial => "devise/shared/links" + - if devise_mapping.omniauthable? + - resource_class.omniauth_providers.each do |provider| + %hr/ + = link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider), :class => "btn primary" + %br/ From 6745812c7236e8d4f463e226feb2e61389c85563 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Mon, 3 Sep 2012 03:43:19 -0700 Subject: [PATCH 120/357] bump kaminari --- Gemfile.lock | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index f226c931..7ec37f59 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -198,7 +198,7 @@ GEM httparty (0.8.3) multi_json (~> 1.0) multi_xml - i18n (0.6.0) + i18n (0.6.1) journey (1.0.4) jquery-rails (2.0.2) railties (>= 3.2.0, < 5.0) @@ -206,11 +206,10 @@ GEM jquery-ui-rails (0.5.0) jquery-rails railties (>= 3.1.0) - json (1.7.4) - kaminari (0.13.0) + json (1.7.5) + kaminari (0.14.0) actionpack (>= 3.0.0) activesupport (>= 3.0.0) - railties (>= 3.0.0) kgio (2.7.4) launchy (2.1.0) addressable (~> 2.2.6) @@ -348,7 +347,7 @@ GEM daemons (>= 1.0.9) eventmachine (>= 0.12.6) rack (>= 1.0.0) - thor (0.15.4) + thor (0.16.0) tilt (1.3.3) treetop (1.4.10) polyglot From 6817a6a2952bc6af74eb239982ed337f90897f98 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Mon, 3 Sep 2012 04:22:49 -0700 Subject: [PATCH 121/357] add kaminari config with default and max per_page values --- config/initializers/kaminari_config.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 config/initializers/kaminari_config.rb diff --git a/config/initializers/kaminari_config.rb b/config/initializers/kaminari_config.rb new file mode 100644 index 00000000..3cbe9a05 --- /dev/null +++ b/config/initializers/kaminari_config.rb @@ -0,0 +1,10 @@ +Kaminari.configure do |config| + config.default_per_page = 20 + config.max_per_page = 100 + # config.window = 4 + # config.outer_window = 0 + # config.left = 0 + # config.right = 0 + # config.page_method_name = :page + # config.param_name = :page +end From 76e4d94d432b19d7dd58503c5eac46811630c04a Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Mon, 3 Sep 2012 04:46:29 -0700 Subject: [PATCH 122/357] add pagination to API --- doc/api/README.md | 7 +++++++ lib/api/helpers.rb | 4 ++++ lib/api/issues.rb | 4 ++-- lib/api/milestones.rb | 2 +- lib/api/projects.rb | 2 +- lib/api/users.rb | 2 +- 6 files changed, 16 insertions(+), 5 deletions(-) diff --git a/doc/api/README.md b/doc/api/README.md index 53b4983e..3a6c7b76 100644 --- a/doc/api/README.md +++ b/doc/api/README.md @@ -23,6 +23,13 @@ GET http://example.com/api/v2/projects?private_token=QVy1PB7sTxfy4pqfZM1U The API uses JSON to serialize data. You don't need to specify `.json` at the end of API URL. +#### Pagination + +When listing resources you can pass the following parameters: + ++ `page` (default: `1`) - page number ++ `per_page` (default: `20`, max: `100`) - how many items to list per page + ## Contents + [Users](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/users.md) diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb index c1ea0566..ce7b7b49 100644 --- a/lib/api/helpers.rb +++ b/lib/api/helpers.rb @@ -14,6 +14,10 @@ module Gitlab @project end + def paginate(object) + object.page(params[:page]).per(params[:per_page].to_i) + end + def authenticate! error!({'message' => '401 Unauthorized'}, 401) unless current_user end diff --git a/lib/api/issues.rb b/lib/api/issues.rb index 836c2818..68cb7e05 100644 --- a/lib/api/issues.rb +++ b/lib/api/issues.rb @@ -9,7 +9,7 @@ module Gitlab # Example Request: # GET /issues get do - present current_user.issues, with: Entities::Issue + present paginate(current_user.issues), with: Entities::Issue end end @@ -21,7 +21,7 @@ module Gitlab # Example Request: # GET /projects/:id/issues get ":id/issues" do - present user_project.issues, with: Entities::Issue + present paginate(user_project.issues), with: Entities::Issue end # Get a single project issue diff --git a/lib/api/milestones.rb b/lib/api/milestones.rb index f537b8e5..29f5efa4 100644 --- a/lib/api/milestones.rb +++ b/lib/api/milestones.rb @@ -11,7 +11,7 @@ module Gitlab # Example Request: # GET /projects/:id/milestones get ":id/milestones" do - present user_project.milestones, with: Entities::Milestone + present paginate(user_project.milestones), with: Entities::Milestone end # Get a single project milestone diff --git a/lib/api/projects.rb b/lib/api/projects.rb index f42849cd..3d4fde92 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -9,7 +9,7 @@ module Gitlab # Example Request: # GET /projects get do - @projects = current_user.projects + @projects = paginate current_user.projects present @projects, with: Entities::Project end diff --git a/lib/api/users.rb b/lib/api/users.rb index 81cb2a0e..98ced6f8 100644 --- a/lib/api/users.rb +++ b/lib/api/users.rb @@ -9,7 +9,7 @@ module Gitlab # Example Request: # GET /users get do - @users = User.all + @users = paginate User present @users, with: Entities::User end From e078a173d6fad0ec79ed252f5e268f060c37508d Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Mon, 3 Sep 2012 18:00:24 +0300 Subject: [PATCH 123/357] Create project via API: fixes added --- doc/api/projects.md | 6 +++++ lib/api/projects.rb | 22 ++++++++++++---- spec/requests/api/projects_spec.rb | 41 +++++++++++++++++++++++++++--- 3 files changed, 61 insertions(+), 8 deletions(-) diff --git a/doc/api/projects.md b/doc/api/projects.md index b0c1e657..32775c32 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -102,6 +102,12 @@ Parameters: + `name` (required) - new project name + `code` (optional) - new project code, uses project name if not set + `path` (optional) - new project path, uses project name if not set ++ `description (optional) - short project description ++ `default_branch` (optional) - 'master' by default ++ `issues_enabled` (optional) - enabled by default ++ `wall_enabled` (optional) - enabled by default ++ `merge_requests_enabled` (optional) - enabled by default ++ `wiki_enabled` (optional) - enabled by default Will return created project with status `201 Created` on success, or `404 Not found` on fail. diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 3d4fde92..45c25127 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -29,14 +29,26 @@ module Gitlab # name (required) - name for new project # code (optional) - code for new project, uses project name if not set # path (optional) - path for new project, uses project name if not set + # description (optional) - short project description + # default_branch (optional) - 'master' by default + # issues_enabled (optional) - enabled by default + # wall_enabled (optional) - enabled by default + # merge_requests_enabled (optional) - enabled by default + # wiki_enabled (optional) - enabled by default # Example Request # POST /projects post do - project = {} - project[:name] = params[:name] - project[:code] = params[:code] || project[:name] - project[:path] = params[:path] || project[:name] - @project = Project.create_by_user(project, current_user) + @project = Project.create_by_user({ + name: params[:name], + code: (params[:code] || params[:name]), + path: (params[:path] || params[:name]), + description: (params[:description] || Project.columns_hash["description"].default), + default_branch: (params[:default_branch] || Project.columns_hash["default_branch"].default), + issues_enabled: (params[:issues_enabled] || Project.columns_hash["issues_enabled"].default), + wall_enabled: (params[:wall_enabled] || Project.columns_hash["wall_enabled"].default), + merge_requests_enabled: (params[:merge_requests_enabled] || Project.columns_hash["merge_requests_enabled"].default), + wiki_enabled: (params[:wiki_enabled] || Project.columns_hash["wiki_enabled"].default) + }, current_user) if @project.saved? present @project, with: Entities::Project else diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index cc6843cc..cdab2657 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -27,7 +27,7 @@ describe Gitlab::API do describe "POST /projects" do it "should create new project without code and path" do - lambda { + expect { name = "foo" post api("/projects", user), { name: name @@ -39,7 +39,41 @@ describe Gitlab::API do }.should change{Project.count}.by(1) end it "should create new project" do - lambda { + expect { + name = "foo" + path = "bar" + code = "bazz" + description = "fuu project" + default_branch = "default_branch" + issues_enabled = false + wall_enabled = false + merge_requests_enabled = false + wiki_enabled = false + post api("/projects", user), { + code: code, + path: path, + name: name, + description: description, + default_branch: default_branch, + issues_enabled: issues_enabled, + wall_enabled: wall_enabled, + merge_requests_enabled: merge_requests_enabled, + wiki_enabled: wiki_enabled + } + response.status.should == 201 + json_response["name"].should == name + json_response["path"].should == path + json_response["code"].should == code + json_response["description"].should == description + json_response["default_branch"].should == default_branch + json_response["issues_enabled"].should == issues_enabled + json_response["wall_enabled"].should == wall_enabled + json_response["merge_requests_enabled"].should == merge_requests_enabled + json_response["wiki_enabled"].should == wiki_enabled + }.should change{Project.count}.by(1) + end + it "should create new projects within all parameters" do + expect { name = "foo" path = "bar" code = "bazz" @@ -53,9 +87,10 @@ describe Gitlab::API do json_response["path"].should == path json_response["code"].should == code }.should change{Project.count}.by(1) + end it "should not create project without name" do - lambda { + expect { post api("/projects", user) response.status.should == 404 }.should_not change{Project.count} From 8ca0b75d05b457e4335a6734582ba703404cc9c6 Mon Sep 17 00:00:00 2001 From: randx Date: Mon, 3 Sep 2012 21:53:16 +0300 Subject: [PATCH 124/357] Tables refactored --- .../stylesheets/gitlab_bootstrap/tables.scss | 56 ++++++++++--------- app/assets/stylesheets/sections/tree.scss | 56 +++++++------------ app/views/admin/hooks/index.html.haml | 2 +- app/views/admin/projects/index.html.haml | 2 +- app/views/admin/projects/show.html.haml | 10 +++- app/views/admin/users/index.html.haml | 2 +- app/views/admin/users/show.html.haml | 14 +++-- app/views/hooks/index.html.haml | 11 ++-- app/views/keys/index.html.haml | 2 +- app/views/milestones/show.html.haml | 4 +- app/views/projects/_team.html.haml | 2 +- app/views/projects/files.html.haml | 7 ++- app/views/protected_branches/index.html.haml | 2 +- app/views/refs/_tree.html.haml | 2 +- app/views/repositories/branches.html.haml | 2 +- app/views/repositories/show.html.haml | 2 +- app/views/repositories/tags.html.haml | 2 +- app/views/search/show.html.haml | 6 +- app/views/snippets/index.html.haml | 2 +- app/views/team_members/show.html.haml | 4 +- app/views/wikis/history.html.haml | 2 +- app/views/wikis/pages.html.haml | 2 +- 22 files changed, 99 insertions(+), 95 deletions(-) diff --git a/app/assets/stylesheets/gitlab_bootstrap/tables.scss b/app/assets/stylesheets/gitlab_bootstrap/tables.scss index f78b1dee..29293867 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/tables.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/tables.scss @@ -1,41 +1,45 @@ table { + @extend .table; + @extend .table-striped; + @include solid_shade; + border:1px solid #bbb; width:100%; + th { - padding-top: 9px; font-weight: bold; vertical-align: middle; + border-bottom: 1px solid #bbb; + text-shadow: 0 1px 1px #fff; + @include bg-dark-gray-gradient; } + th, td { - padding: 10px 10px 9px; + padding: 8px; line-height: 18px; text-align: left; } - &.bordered-table { - border: 1px solid #DDD; - border-collapse: separate; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; + td { + border-color:#f1f1f1; + &:first-child { + border-left:1px solid #bbb; + } + + &:last-child { + border-right:1px solid #bbb; + } } - &.zebra-striped { - @extend .table-striped; + &.bordered { + @extend .table-bordered; + } + + &.lite { + border:none; + box-shadow:none; + tr, td { + border:none; + background:none !important; + } } } - -table.admin-table { - @extend .table-bordered; - @extend .zebra-striped; - @include solid_shade; - th { - border-color: #CCC; - border-bottom: 1px solid #bbb; - @include bg-gray-gradient; - } -} - -table.no-borders { - border:none; - tr, td { border:none } -} diff --git a/app/assets/stylesheets/sections/tree.scss b/app/assets/stylesheets/sections/tree.scss index 891f5e20..07568706 100644 --- a/app/assets/stylesheets/sections/tree.scss +++ b/app/assets/stylesheets/sections/tree.scss @@ -1,4 +1,4 @@ -#tree-holder { +#tree-holder { #tree-content-holder { float:left; width:100%; @@ -11,40 +11,44 @@ padding:12px; background: #F7F7F7; - pre { + pre { overflow: auto; } } } - .tree_progress { + .tree_progress { display:none; margin:20px; - &.loading { + &.loading { display:block; } } #tree-slider { @include border-radius(0); - .tree-item { - &:hover { - td { background: $hover; } + .tree-item { + &:hover { + td { + background: $hover; + border-top:1px solid #FEA; + border-bottom:1px solid #FEA; + } cursor:pointer; } } } - .tree-item { - .tree-item-file-name { + .tree-item { + .tree-item-file-name { vertical-align:middle; - a { - &:hover { + a { + &:hover { color:$blue_link; } } - img { + img { position: relative; top:-1px; } @@ -52,37 +56,19 @@ } - #tree-slider { - @include solid_shade; - width:100%; - - border-color:#ccc; - - td { - padding:8px; - border-color:#f1f1f1; + #tree-slider { + td { background:#fafafa; } - - tr:first-child td:first-child, - tr:first-child td:last-child { - border-radius:0; - } - - th { - border-color: #CCC; - border-bottom: 1px solid #bbb; - @include bg-gray-gradient; - } } - .tree-commit-link { + .tree-commit-link { color:#333; } - a.tree-commit-link { + a.tree-commit-link { color: #666; - &:hover { + &:hover { text-decoration: underline; } } diff --git a/app/views/admin/hooks/index.html.haml b/app/views/admin/hooks/index.html.haml index 43288424..f17355fb 100644 --- a/app/views/admin/hooks/index.html.haml +++ b/app/views/admin/hooks/index.html.haml @@ -23,7 +23,7 @@ Hooks %small (#{@hooks.count}) %br - %table.admin-table + %table %tr %th URL %th Method diff --git a/app/views/admin/projects/index.html.haml b/app/views/admin/projects/index.html.haml index f7dd486d..bd38ae72 100644 --- a/app/views/admin/projects/index.html.haml +++ b/app/views/admin/projects/index.html.haml @@ -6,7 +6,7 @@ = text_field_tag :name, params[:name], class: "xlarge" = submit_tag "Search", class: "btn submit primary" -%table.admin-table +%table %thead %th Name %th Path diff --git a/app/views/admin/projects/show.html.haml b/app/views/admin/projects/show.html.haml index 5ed56477..65d888f5 100644 --- a/app/views/admin/projects/show.html.haml +++ b/app/views/admin/projects/show.html.haml @@ -3,7 +3,11 @@ = link_to 'Edit', edit_admin_project_path(@admin_project), class: "btn right small" %br -%table.zebra-striped.table-bordered +%table.zebra-striped + %thead + %tr + %th Project + %th %tr %td %b @@ -40,7 +44,7 @@ %small (#{@admin_project.users_projects.count}) %br -%table.zebra-striped.table-bordered +%table.zebra-striped %thead %tr %th Name @@ -60,7 +64,7 @@ %h3 Add new team member %br = form_tag team_update_admin_project_path(@admin_project), class: "bulk_import", method: :put do - %table.zebra-striped.table-bordered + %table.zebra-striped %thead %tr %th Users diff --git a/app/views/admin/users/index.html.haml b/app/views/admin/users/index.html.haml index f21baabf..5ef94ef5 100644 --- a/app/views/admin/users/index.html.haml +++ b/app/views/admin/users/index.html.haml @@ -19,7 +19,7 @@ = link_to admin_users_path(filter: "wop") do Without projects -%table.admin-table +%table %thead %th Admin %th Name diff --git a/app/views/admin/users/show.html.haml b/app/views/admin/users/show.html.haml index 4cca8ed7..4d2b9832 100644 --- a/app/views/admin/users/show.html.haml +++ b/app/views/admin/users/show.html.haml @@ -8,7 +8,11 @@ %br -%table.zebra-striped.table-bordered +%table.zebra-striped + %thead + %tr + %th Profile + %th %tr %td %b @@ -57,7 +61,7 @@ %h3 Add User to Projects %br = form_tag team_update_admin_user_path(@admin_user), class: "bulk_import", method: :put do - %table.table-bordered + %table %thead %tr %th Projects @@ -78,9 +82,9 @@ %h3 Projects %br - %table.zebra-striped.table-bordered - %tr - %thead + %table.zebra-striped + %thead + %tr %th Name %th Project Access %th diff --git a/app/views/hooks/index.html.haml b/app/views/hooks/index.html.haml index 3d2a381e..1b59c8e8 100644 --- a/app/views/hooks/index.html.haml +++ b/app/views/hooks/index.html.haml @@ -26,11 +26,12 @@ Hooks %small (#{@hooks.count}) %br - %table.admin-table - %tr - %th URL - %th Method - %th + %table + %thead + %tr + %th URL + %th Method + %th - @hooks.each do |hook| %tr %td diff --git a/app/views/keys/index.html.haml b/app/views/keys/index.html.haml index 9b5663ed..8f7e2bab 100644 --- a/app/views/keys/index.html.haml +++ b/app/views/keys/index.html.haml @@ -7,7 +7,7 @@ SSH key allows you to establish a secure connection between your computer and Gitlab -%table#keys-table.admin-table +%table#keys-table %thead %tr %th Name diff --git a/app/views/milestones/show.html.haml b/app/views/milestones/show.html.haml index b7da7b66..0d6cb2a0 100644 --- a/app/views/milestones/show.html.haml +++ b/app/views/milestones/show.html.haml @@ -42,7 +42,7 @@ .row .span6 - %table.admin-table + %table %thead %th Open Issues - @issues.each do |issue| @@ -56,7 +56,7 @@ = paginate @issues, theme: "gitlab" .span6 - %table.admin-table + %table %thead %th Participants - @users.each do |user| diff --git a/app/views/projects/_team.html.haml b/app/views/projects/_team.html.haml index 175aea27..0ddcf17f 100644 --- a/app/views/projects/_team.html.haml +++ b/app/views/projects/_team.html.haml @@ -1,4 +1,4 @@ -%table.admin-table +%table %thead %tr %th User diff --git a/app/views/projects/files.html.haml b/app/views/projects/files.html.haml index 68d51df0..ce8ba876 100644 --- a/app/views/projects/files.html.haml +++ b/app/views/projects/files.html.haml @@ -1,6 +1,11 @@ = render "project_head" - unless @notes.empty? - %table.zebra-striped.borders + %table + %thead + %tr + %th File name + %th + - @notes.each do |note| %tr %td diff --git a/app/views/protected_branches/index.html.haml b/app/views/protected_branches/index.html.haml index 2b93b0a8..33bb448a 100644 --- a/app/views/protected_branches/index.html.haml +++ b/app/views/protected_branches/index.html.haml @@ -24,7 +24,7 @@ = f.submit 'Protect', class: "primary btn" - unless @branches.empty? - %table.admin-table + %table %thead %tr %th Name diff --git a/app/views/refs/_tree.html.haml b/app/views/refs/_tree.html.haml index c231c407..a4765c10 100644 --- a/app/views/refs/_tree.html.haml +++ b/app/views/refs/_tree.html.haml @@ -13,7 +13,7 @@ = render partial: "refs/tree_file", locals: { name: tree.name, content: tree.data, file: tree } - else - contents = tree.contents - %table#tree-slider.bordered-table.table{class: "table_#{@hex_path}" } + %table#tree-slider{class: "table_#{@hex_path}" } %thead %th Name %th Last Update diff --git a/app/views/repositories/branches.html.haml b/app/views/repositories/branches.html.haml index 45004bdf..4c246c69 100644 --- a/app/views/repositories/branches.html.haml +++ b/app/views/repositories/branches.html.haml @@ -1,6 +1,6 @@ = render "repositories/branches_head" - unless @branches.empty? - %table.admin-table + %table %thead %tr %th Name diff --git a/app/views/repositories/show.html.haml b/app/views/repositories/show.html.haml index a09cdd62..fd0abac8 100644 --- a/app/views/repositories/show.html.haml +++ b/app/views/repositories/show.html.haml @@ -1,6 +1,6 @@ = render "branches_head" -%table.admin-table +%table %thead %tr %th Name diff --git a/app/views/repositories/tags.html.haml b/app/views/repositories/tags.html.haml index 7fc2c3bf..0e870c80 100644 --- a/app/views/repositories/tags.html.haml +++ b/app/views/repositories/tags.html.haml @@ -1,6 +1,6 @@ = render "commits/head" - unless @tags.empty? - %table.admin-table + %table %thead %tr %th Name diff --git a/app/views/search/show.html.haml b/app/views/search/show.html.haml index d37ef670..b4a38b57 100644 --- a/app/views/search/show.html.haml +++ b/app/views/search/show.html.haml @@ -14,7 +14,7 @@ .search_results .row .span6 - %table.admin-table + %table %tr %th Projects %tbody @@ -31,7 +31,7 @@ %td %h4.nothing_here_message No Projects %br - %table.admin-table + %table %tr %th Merge Requests %tbody @@ -49,7 +49,7 @@ %td %h4.nothing_here_message No Merge Requests .span6 - %table.admin-table + %table %tr %th Issues %tbody diff --git a/app/views/snippets/index.html.haml b/app/views/snippets/index.html.haml index 7229b587..515daec6 100644 --- a/app/views/snippets/index.html.haml +++ b/app/views/snippets/index.html.haml @@ -8,7 +8,7 @@ %br To add new snippet - click on button. -%table.admin-table +%table %thead %tr %th Title diff --git a/app/views/team_members/show.html.haml b/app/views/team_members/show.html.haml index 6cb357cd..89662309 100644 --- a/app/views/team_members/show.html.haml +++ b/app/views/team_members/show.html.haml @@ -19,7 +19,7 @@ %br .row .span6 - %table.no-borders + %table.lite %tr %td Email %td= mail_to user.email @@ -39,7 +39,7 @@ %td Bio %td= user.bio .span6 - %table.no-borders + %table.lite %tr %td Member since %td= @team_member.created_at.stamp("Aug 21, 2011") diff --git a/app/views/wikis/history.html.haml b/app/views/wikis/history.html.haml index e31c5dc2..0a81817c 100644 --- a/app/views/wikis/history.html.haml +++ b/app/views/wikis/history.html.haml @@ -2,7 +2,7 @@ %span.cgray History for = @wikis.last.title %br -%table.admin-table +%table %thead %tr %th # diff --git a/app/views/wikis/pages.html.haml b/app/views/wikis/pages.html.haml index 2bfd0deb..7421d8f9 100644 --- a/app/views/wikis/pages.html.haml +++ b/app/views/wikis/pages.html.haml @@ -1,6 +1,6 @@ %h3.page_title All Pages %br -%table.admin-table +%table %thead %tr %th Title From f557686eb2d432f794addbc052331d5d8f0be400 Mon Sep 17 00:00:00 2001 From: randx Date: Mon, 3 Sep 2012 22:30:14 +0300 Subject: [PATCH 125/357] git clone panel available on files tab too --- app/assets/javascripts/projects.js | 9 +++++++++ app/assets/stylesheets/gitlab_bootstrap/blocks.scss | 2 +- app/assets/stylesheets/sections/projects.scss | 12 ++++++++---- app/views/projects/_clone_panel.html.haml | 4 ++-- app/views/projects/show.html.haml | 7 +------ app/views/refs/_head.html.haml | 9 +++++++++ app/views/refs/tree.js.haml | 2 +- 7 files changed, 31 insertions(+), 14 deletions(-) diff --git a/app/assets/javascripts/projects.js b/app/assets/javascripts/projects.js index be1b75b9..6bbfbacc 100644 --- a/app/assets/javascripts/projects.js +++ b/app/assets/javascripts/projects.js @@ -14,3 +14,12 @@ function Projects() { disableButtonIfEmtpyField("#project_name", ".project-submit") } + +function initGitCloneSwitcher() { + var link_sel = ".project_clone_holder button"; + $(link_sel).bind("click", function(e) { + $(link_sel).removeClass("active"); + $(this).addClass("active"); + $("#project_clone").val($(this).attr("data-clone")); + }) +} diff --git a/app/assets/stylesheets/gitlab_bootstrap/blocks.scss b/app/assets/stylesheets/gitlab_bootstrap/blocks.scss index 894cb304..70f7889f 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/blocks.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/blocks.scss @@ -1,6 +1,6 @@ /** * =================================== - * Contain 3 main UI block elements: + * Contain 3 main UI block elements: * .main_box - for show pages * .ui-box - for simple block & widgets * =================================== diff --git a/app/assets/stylesheets/sections/projects.scss b/app/assets/stylesheets/sections/projects.scss index 721b569d..92d0fc43 100644 --- a/app/assets/stylesheets/sections/projects.scss +++ b/app/assets/stylesheets/sections/projects.scss @@ -75,17 +75,21 @@ padding: 4px 7px; border: 1px solid #CCC; margin-bottom:5px; - input[type=text] { +} + +.project_clone_holder { + input[type="text"] { border: 1px solid #BBB; + box-shadow: none; } } -.save-project-loader { - img { +.save-project-loader { + img { margin-top:50px; margin-bottom:50px; } - h3 { + h3 { @extend .page_title; } diff --git a/app/views/projects/_clone_panel.html.haml b/app/views/projects/_clone_panel.html.haml index 839a98a0..76059f32 100644 --- a/app/views/projects/_clone_panel.html.haml +++ b/app/views/projects/_clone_panel.html.haml @@ -3,8 +3,8 @@ .span7 .form-horizontal .input-prepend.project_clone_holder - = link_to "SSH", "#", class: "btn small active", :"data-clone" => @project.ssh_url_to_repo - = link_to "HTTP", "#", class: "btn small", :"data-clone" => @project.http_url_to_repo + %button{class: "btn small active", :"data-clone" => @project.ssh_url_to_repo} SSH + %button{class: "btn small", :"data-clone" => @project.http_url_to_repo} HTTP = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5" .span4.right .right diff --git a/app/views/projects/show.html.haml b/app/views/projects/show.html.haml index 77a0ef1a..de3e9cef 100644 --- a/app/views/projects/show.html.haml +++ b/app/views/projects/show.html.haml @@ -5,10 +5,5 @@ :javascript $(function(){ - var link_sel = ".project_clone_holder a"; - $(link_sel).bind("click", function() { - $(link_sel).removeClass("active"); - $(this).addClass("active"); - $("#project_clone").val($(this).attr("data-clone")); - }) + initGitCloneSwitcher(); }) diff --git a/app/views/refs/_head.html.haml b/app/views/refs/_head.html.haml index 8825493a..affd07cb 100644 --- a/app/views/refs/_head.html.haml +++ b/app/views/refs/_head.html.haml @@ -7,4 +7,13 @@ %li{class: "#{'active' if (controller.controller_name == "refs") }"} = link_to tree_project_ref_path(@project, @ref) do Source + %li.right + .input-prepend.project_clone_holder + %button{class: "btn small active", :"data-clone" => @project.ssh_url_to_repo} SSH + %button{class: "btn small", :"data-clone" => @project.http_url_to_repo} HTTP + = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5" +:javascript + $(function(){ + initGitCloneSwitcher(); + }) diff --git a/app/views/refs/tree.js.haml b/app/views/refs/tree.js.haml index 2eccf8c1..92e90579 100644 --- a/app/views/refs/tree.js.haml +++ b/app/views/refs/tree.js.haml @@ -6,5 +6,5 @@ // Load last commit log for each file in tree $('#tree-slider').waitForImages(function() { - ajaxGet('#{@logs_path}'); + ajaxGet('#{@logs_path}'); }); From 5db2dbdcf110d4a5ff4180ae96ec9131ac9a1723 Mon Sep 17 00:00:00 2001 From: randx Date: Mon, 3 Sep 2012 22:57:34 +0300 Subject: [PATCH 126/357] fix browse file css --- app/assets/stylesheets/gitlab_bootstrap/files.scss | 2 +- app/assets/stylesheets/highlight/white.scss | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/assets/stylesheets/gitlab_bootstrap/files.scss b/app/assets/stylesheets/gitlab_bootstrap/files.scss index 4ea5ed02..83903c53 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/files.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/files.scss @@ -9,7 +9,7 @@ .file_title { border-bottom: 1px solid #bbb; - @include bg-gray-gradient; + @include bg-dark-gray-gradient; margin: 0; font-weight: normal; font-weight: bold; diff --git a/app/assets/stylesheets/highlight/white.scss b/app/assets/stylesheets/highlight/white.scss index a08f05bd..9b003b8a 100644 --- a/app/assets/stylesheets/highlight/white.scss +++ b/app/assets/stylesheets/highlight/white.scss @@ -1,12 +1,21 @@ -table.highlighttable -{ +table.highlighttable { margin:0px; padding:0px; font-size:12px; table-layout:fixed; background: #EEE; + box-shadow: none; + border: none; + td.linenos { + background:#eee; + border-left:none; + } + td.code { + border-right:none; + } } + td.code, td.linenos{ padding:0; From b44e9a08d5c0e012d645e75a321c6ea299b4bea1 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Mon, 3 Sep 2012 20:38:41 -0400 Subject: [PATCH 127/357] Add Milestone link to API help TOC [ci skip] --- app/views/help/api.html.haml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/views/help/api.html.haml b/app/views/help/api.html.haml index d7d7aed4..35176f8e 100644 --- a/app/views/help/api.html.haml +++ b/app/views/help/api.html.haml @@ -15,6 +15,8 @@ %a{href: "#users"} Users %li %a{href: "#issues"} Issues + %li + %a{href: "#milestones"} Milestones .file_holder#README .file_title From d29827433d77b9f9353fcae396ca321dd9016771 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 4 Sep 2012 00:04:36 -0400 Subject: [PATCH 128/357] Update User#identifier to conform to Gitolite 2.x's user pattern Also modifies the specs a bit because I can't help myself. Closes #480 --- app/roles/account.rb | 11 +++++-- spec/factories.rb | 2 +- spec/models/user_spec.rb | 64 +++++++++++++++++++++++----------------- 3 files changed, 47 insertions(+), 30 deletions(-) diff --git a/app/roles/account.rb b/app/roles/account.rb index 63a9b5c5..b8c445a3 100644 --- a/app/roles/account.rb +++ b/app/roles/account.rb @@ -1,6 +1,13 @@ -module Account +module Account + # Returns a string for use as a Gitolite user identifier + # + # Note that Gitolite 2.x requires the following pattern for users: + # + # ^@?[0-9a-zA-Z][0-9a-zA-Z._\@+-]*$ def identifier - email.gsub /[^[:alnum:]]/, "_" + # Replace non-word chars with underscores, then make sure it starts with + # valid chars + email.gsub(/\W/, '_').gsub(/\A([\W\_])+/, '') end def is_admin? diff --git a/spec/factories.rb b/spec/factories.rb index 2e4acf39..a8b3bc57 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -28,7 +28,7 @@ FactoryGirl.define do email { Faker::Internet.email } name password "123456" - password_confirmation "123456" + password_confirmation { password } trait :admin do admin true diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index ca34f07d..08176754 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -31,36 +31,46 @@ describe User do it { should respond_to(:private_token) } end - it "should return valid identifier" do - user = User.new(email: "test@mail.com") - user.identifier.should == "test_mail_com" + describe '#identifier' do + it "should return valid identifier" do + user = build(:user, email: "test@mail.com") + user.identifier.should == "test_mail_com" + end + + it "should return identifier without + sign" do + user = build(:user, email: "test+foo@mail.com") + user.identifier.should == "test_foo_mail_com" + end + + it "should conform to Gitolite's required identifier pattern" do + user = build(:user, email: "_test@example.com") + user.identifier.should == 'test_example_com' + end end - it "should return identifier without + sign" do - user = User.new(email: "test+foo@mail.com") - user.identifier.should == "test_foo_mail_com" + describe '#generate_password' do + it "should execute callback when force_random_password specified" do + user = build(:user, force_random_password: true) + user.should_receive(:generate_password) + user.save + end + + it "should not generate password by default" do + user = create(:user, password: 'abcdefg') + user.password.should == 'abcdefg' + end + + it "should generate password when forcing random password" do + Devise.stub(:friendly_token).and_return('123456789') + user = create(:user, password: 'abcdefg', force_random_password: true) + user.password.should == '12345678' + end end - it "should execute callback when force_random_password specified" do - user = User.new(email: "test@mail.com", force_random_password: true) - user.should_receive(:generate_password) - user.save - end - - it "should not generate password by default" do - user = Factory(:user, password: 'abcdefg', password_confirmation: 'abcdefg') - user.password.should == 'abcdefg' - end - - it "should generate password when forcing random password" do - Devise.stub(:friendly_token).and_return('123456789') - user = User.create(email: "test1@mail.com", force_random_password: true) - user.password.should == user.password_confirmation - user.password.should == '12345678' - end - - it "should have authentication token" do - user = Factory(:user) - user.authentication_token.should_not == "" + describe 'authentication token' do + it "should have authentication token" do + user = Factory(:user) + user.authentication_token.should_not be_blank + end end end From b73d4419ea458a2824a35563bcd84d519b2a5516 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Tue, 4 Sep 2012 09:38:48 +0300 Subject: [PATCH 129/357] json_spec added. Create project via REST API fixed --- Gemfile | 1 + Gemfile.lock | 4 ++ spec/factories.rb | 3 ++ spec/requests/api/projects_spec.rb | 62 +++++++----------------------- spec/spec_helper.rb | 1 + 5 files changed, 22 insertions(+), 49 deletions(-) diff --git a/Gemfile b/Gemfile index b0724fad..33f9cf4c 100644 --- a/Gemfile +++ b/Gemfile @@ -117,6 +117,7 @@ group :test do gem 'email_spec' gem 'resque_spec' gem "webmock" + gem 'json_spec' end group :production do diff --git a/Gemfile.lock b/Gemfile.lock index 7ec37f59..ae85a43a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -207,6 +207,9 @@ GEM jquery-rails railties (>= 3.1.0) json (1.7.5) + json_spec (1.0.3) + multi_json (~> 1.0) + rspec (~> 2.0) kaminari (0.14.0) actionpack (>= 3.0.0) activesupport (>= 3.0.0) @@ -406,6 +409,7 @@ DEPENDENCIES httparty jquery-rails (= 2.0.2) jquery-ui-rails (= 0.5.0) + json_spec kaminari launchy letter_opener diff --git a/spec/factories.rb b/spec/factories.rb index 2e4acf39..95c919fd 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -11,6 +11,9 @@ module Factory def self.new(type, *args) FactoryGirl.build(type, *args) end + def self.attributes(type, *args) + FactoryGirl.attributes_for(type, *args) + end end FactoryGirl.define do diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index cdab2657..43c44974 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -39,55 +39,19 @@ describe Gitlab::API do }.should change{Project.count}.by(1) end it "should create new project" do - expect { - name = "foo" - path = "bar" - code = "bazz" - description = "fuu project" - default_branch = "default_branch" - issues_enabled = false - wall_enabled = false - merge_requests_enabled = false - wiki_enabled = false - post api("/projects", user), { - code: code, - path: path, - name: name, - description: description, - default_branch: default_branch, - issues_enabled: issues_enabled, - wall_enabled: wall_enabled, - merge_requests_enabled: merge_requests_enabled, - wiki_enabled: wiki_enabled - } - response.status.should == 201 - json_response["name"].should == name - json_response["path"].should == path - json_response["code"].should == code - json_response["description"].should == description - json_response["default_branch"].should == default_branch - json_response["issues_enabled"].should == issues_enabled - json_response["wall_enabled"].should == wall_enabled - json_response["merge_requests_enabled"].should == merge_requests_enabled - json_response["wiki_enabled"].should == wiki_enabled - }.should change{Project.count}.by(1) - end - it "should create new projects within all parameters" do - expect { - name = "foo" - path = "bar" - code = "bazz" - post api("/projects", user), { - code: code, - path: path, - name: name - } - response.status.should == 201 - json_response["name"].should == name - json_response["path"].should == path - json_response["code"].should == code - }.should change{Project.count}.by(1) - + attributes = Factory.attributes(:project, + name: "foo", + path: "bar", + code: "bazz", + description: "foo project", + default_branch: "default_branch", + issues_enabled: false, + wall_enabled: false, + merge_requests_enabled: false, + wiki_enabled: false) + post api("/projects", user), attributes + response.status.should == 201 + response.body.should be_json_eql(attributes.to_json).excluding("owner", "private") end it "should not create project without name" do expect { diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index d381b3f1..30a213ba 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -28,6 +28,7 @@ RSpec.configure do |config| config.include LoginHelpers, type: :request config.include GitoliteStub config.include FactoryGirl::Syntax::Methods + config.include JsonSpec::Helpers # If you're not using ActiveRecord, or you'd prefer not to run each of your # examples within a transaction, remove the following line or assign false From 6471d8c6521ef7a88f3aa893cc11c1da8077bdc0 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 4 Sep 2012 03:18:26 -0400 Subject: [PATCH 130/357] Change @project instance variable to a local in views/help/markdown It was erroneously appending the project name to the page's title, even though the Help system isn't specific to one project. --- app/views/help/markdown.html.haml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/help/markdown.html.haml b/app/views/help/markdown.html.haml index 6a4bbb02..43d3d4b0 100644 --- a/app/views/help/markdown.html.haml +++ b/app/views/help/markdown.html.haml @@ -88,9 +88,9 @@ for commits -# this example will only be shown if the user has a project with at least one issue - - if @project = current_user.projects.first - - if issue = @project.issues.first - %p For example in your #{link_to @project.name, project_path(@project)} project something like + - if project = current_user.projects.first + - if issue = project.issues.first + %p For example in your #{link_to project.name, project_path(project)} project something like %pre= "This is related to ##{issue.id}. @#{current_user.name} is working on solving it." %p becomes = markdown "This is related to ##{issue.id}. @#{current_user.name} is working on solving it." From 4bd30245805bc7814fc24686a418a9c883259800 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Tue, 4 Sep 2012 10:29:26 +0300 Subject: [PATCH 131/357] json_spec removed --- Gemfile | 1 - Gemfile.lock | 4 -- spec/requests/api/projects_spec.rb | 59 ++++++++++++++++-------------- spec/spec_helper.rb | 1 - 4 files changed, 31 insertions(+), 34 deletions(-) diff --git a/Gemfile b/Gemfile index 33f9cf4c..b0724fad 100644 --- a/Gemfile +++ b/Gemfile @@ -117,7 +117,6 @@ group :test do gem 'email_spec' gem 'resque_spec' gem "webmock" - gem 'json_spec' end group :production do diff --git a/Gemfile.lock b/Gemfile.lock index ae85a43a..7ec37f59 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -207,9 +207,6 @@ GEM jquery-rails railties (>= 3.1.0) json (1.7.5) - json_spec (1.0.3) - multi_json (~> 1.0) - rspec (~> 2.0) kaminari (0.14.0) actionpack (>= 3.0.0) activesupport (>= 3.0.0) @@ -409,7 +406,6 @@ DEPENDENCIES httparty jquery-rails (= 2.0.2) jquery-ui-rails (= 0.5.0) - json_spec kaminari launchy letter_opener diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index 43c44974..1373748f 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -27,37 +27,40 @@ describe Gitlab::API do describe "POST /projects" do it "should create new project without code and path" do - expect { - name = "foo" - post api("/projects", user), { - name: name - } - response.status.should == 201 - json_response["name"].should == name - json_response["code"].should == name - json_response["path"].should == name - }.should change{Project.count}.by(1) + expect { post api("/projects", user), name: 'foo' }.to change {Project.count}.by(1) end - it "should create new project" do - attributes = Factory.attributes(:project, - name: "foo", - path: "bar", - code: "bazz", - description: "foo project", - default_branch: "default_branch", - issues_enabled: false, - wall_enabled: false, - merge_requests_enabled: false, - wiki_enabled: false) - post api("/projects", user), attributes + + it "should not create new project without name" do + expect { post api("/projects", user) }.to_not change {Project.count} + end + + it "should respond with 201 on success" do + post api("/projects", user), name: 'foo' response.status.should == 201 - response.body.should be_json_eql(attributes.to_json).excluding("owner", "private") end - it "should not create project without name" do - expect { - post api("/projects", user) - response.status.should == 404 - }.should_not change{Project.count} + + it "should repsond with 404 on failure" do + post api("/projects", user) + response.status.should == 404 + end + + it "should assign attributes to project" do + project = Factory.attributes(:project, { + path: 'path', + code: 'code', + description: Faker::Lorem.sentence, + default_branch: 'stable', + issues_enabled: false, + wall_enabled: false, + merge_requests_enabled: false, + wiki_enabled: false + }) + + post api("/projects", user), project + + project.each_pair do |k,v| + json_response[k.to_s].should == v + end end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 30a213ba..d381b3f1 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -28,7 +28,6 @@ RSpec.configure do |config| config.include LoginHelpers, type: :request config.include GitoliteStub config.include FactoryGirl::Syntax::Methods - config.include JsonSpec::Helpers # If you're not using ActiveRecord, or you'd prefer not to run each of your # examples within a transaction, remove the following line or assign false From 457b0f604fc005cc695627c558a39c9e14f3c6a0 Mon Sep 17 00:00:00 2001 From: Tse-Ching Ho Date: Mon, 3 Sep 2012 21:04:10 +0800 Subject: [PATCH 132/357] use APP_ROOT in init-gitlab to specify root of project --- lib/support/init-gitlab | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/support/init-gitlab b/lib/support/init-gitlab index f146e80f..26ed11e1 100644 --- a/lib/support/init-gitlab +++ b/lib/support/init-gitlab @@ -9,23 +9,24 @@ # Description: GitLab git repository management ### END INIT INFO -DAEMON_OPTS="-c /home/gitlab/gitlab/config/unicorn.rb -E production -D" -NAME=unicorn +APP_ROOT="/home/gitlab/gitlab" +DAEMON_OPTS="-c $APP_ROOT/config/unicorn.rb -E production -D" +NAME="unicorn" DESC="Gitlab service" -PID=/home/gitlab/gitlab/tmp/pids/unicorn.pid -RESQUE_PID=/home/gitlab/gitlab/tmp/pids/resque_worker.pid +PID="$APP_ROOT/tmp/pids/unicorn.pid" +RESQUE_PID="$APP_ROOT/tmp/pids/resque_worker.pid" case "$1" in start) - CD_TO_APP_DIR="cd /home/gitlab/gitlab" + CD_TO_APP_DIR="cd $APP_ROOT" START_DAEMON_PROCESS="bundle exec unicorn_rails $DAEMON_OPTS" START_RESQUE_PROCESS="./resque.sh" echo -n "Starting $DESC: " if [ `whoami` = root ]; then - sudo -u gitlab sh -l -c "$CD_TO_APP_DIR > /dev/null 2>&1 && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS" + sudo -u gitlab sh -l -c "$CD_TO_APP_DIR && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS" else - $CD_TO_APP_DIR > /dev/null 2>&1 && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS + $CD_TO_APP_DIR && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS fi echo "$NAME." ;; From 4cb03183ac4d9c765111174f0d657997bfb35d45 Mon Sep 17 00:00:00 2001 From: Rob Taylor Date: Tue, 14 Aug 2012 17:54:25 +0100 Subject: [PATCH 133/357] Text changes to API documentation --- doc/api/README.md | 11 ++++------- doc/api/projects.md | 9 +++++---- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/doc/api/README.md b/doc/api/README.md index 3a6c7b76..dece3e23 100644 --- a/doc/api/README.md +++ b/doc/api/README.md @@ -1,10 +1,8 @@ # Gitlab API -All API requests require authentication. You need to pass `private_token` parameter to authenticate. +All API requests require authentication. You need to pass a `private_token` parameter to authenticate. You can find or reset your private token in your profile. -To get or reset your token visit your profile. - -If no or invalid `private_token` provided error message will be returned with status code 401: +If no, or an invalid, `private_token` is provided then an error message will be returned with status code 401: ```json { @@ -12,10 +10,9 @@ If no or invalid `private_token` provided error message will be returned with st } ``` -API requests should be prefixed with `api` and the API version. -API version is equal to Gitlab major version number and defined in `lib/api.rb`. +API requests should be prefixed with `api` and the API version. The API version is equal to the Gitlab major version number, which is defined in `lib/api.rb`. -Example of valid API request: +Example of a valid API request: ``` GET http://example.com/api/v2/projects?private_token=QVy1PB7sTxfy4pqfZM1U diff --git a/doc/api/projects.md b/doc/api/projects.md index b0c1e657..e029522b 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -1,6 +1,6 @@ ## List projects -Get a list of authenticated user's projects. +Get a list of projects owned by the authenticated user. ``` GET /projects @@ -55,7 +55,7 @@ GET /projects ## Single project -Get an authenticated user's project. +Get a specific project, identified by project ID, which is owned by the authentication user. ``` GET /projects/:id @@ -109,7 +109,7 @@ found` on fail. ## Project repository branches -Get a list of project repository branches sorted by name alphabetically. +Get a list of repository branches from a project, sorted by name alphabetically. ``` GET /projects/:id/repository/branches @@ -186,7 +186,7 @@ Parameters: ## Project repository tags -Get a list of project repository tags sorted by name in reverse alphabetical order. +Get a list of repository tags from a project, sorted by name in reverse alphabetical order. ``` GET /projects/:id/repository/tags @@ -237,3 +237,4 @@ Parameters: + `filepath` (required) - The path the file Will return the raw file contents. + From 12c57a7061d55798e77e79c3cfae293b4d773365 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 4 Sep 2012 05:03:31 -0400 Subject: [PATCH 134/357] Change hardcoded base path to use Gitlab settings Closes #1072 --- lib/tasks/bulk_import.rake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/tasks/bulk_import.rake b/lib/tasks/bulk_import.rake index 607250f1..5941eadb 100644 --- a/lib/tasks/bulk_import.rake +++ b/lib/tasks/bulk_import.rake @@ -1,8 +1,9 @@ IMPORT_DIRECTORY = 'import_projects' -REPOSITORY_DIRECTORY = '/home/git/repositories' desc "Imports existing Git repos into new projects from the import_projects folder" task :import_projects, [:email] => :environment do |t, args| + REPOSITORY_DIRECTORY = Gitlab.config.git_base_path + user_email = args.email repos_to_import = Dir.glob("#{IMPORT_DIRECTORY}/*") From 11ebbb68d8c0db7b23db8b0509f160fc1571e50a Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 4 Sep 2012 05:24:43 -0400 Subject: [PATCH 135/357] Add tmp/.gitkeep file to ensure tmp folder exists on clone The install guide lists it as a requirement, so we might as well have it by default. --- tmp/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tmp/.gitkeep diff --git a/tmp/.gitkeep b/tmp/.gitkeep new file mode 100644 index 00000000..e69de29b From fc7ac316a084788f91710912e110f1aa70fd5a65 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 4 Sep 2012 05:26:25 -0400 Subject: [PATCH 136/357] Clean up doc/installation.md Closes #939 --- doc/installation.md | 66 ++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/doc/installation.md b/doc/installation.md index 4cb873f0..6ba14566 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -20,7 +20,7 @@ You might have some luck using these, but no guarantees: - MacOS X - FreeBSD -Gitlab does **not** run on Windows and we have no plans of making Gitlab compatible. +GitLab does **not** run on Windows and we have no plans of making GitLab compatible. ## This installation guide created for Debian/Ubuntu and properly tested. @@ -28,21 +28,21 @@ The installation consists of 6 steps: 1. Install packages / dependencies 2. Install ruby -3. Install gitolite -4. Install and configure Gitlab. +3. Install Gitolite +4. Install and configure GitLab. 5. Start the web front-end 6. Start a Resque worker (for background processing) ### IMPORTANT -Please make sure you have followed all the steps below before posting to the mailinglist with installation and configuration questions. +Please make sure you have followed all the steps below before posting to the mailing list with installation and configuration questions. -Only create a Github Issue if you want a specific part of this installation guide updated. +Only create a GitHub Issue if you want a specific part of this installation guide updated. Also read the [Read this before you submit an issue](https://github.com/gitlabhq/gitlabhq/wiki/Read-this-before-you-submit-an-issue) wiki page. > - - - -> First 3 steps can be easily skipped with simply install script: +> The first 3 steps of this guide can be easily skipped by executing an install script: > > # Install curl and sudo > apt-get install curl sudo @@ -50,9 +50,9 @@ Also read the [Read this before you submit an issue](https://github.com/gitlabhq > # 3 steps in 1 command :) > curl https://raw.github.com/gitlabhq/gitlabhq/master/doc/debian_ubuntu.sh | sh > -> Now you can go to step 4" +> Now you can go to [Step 4](#4-install-gitlab-and-configuration-check-status-configuration) > -> Or if you are installing on Amazon Web Services using Ubuntu 12.04 you can do all steps (1 to 6) at once with: +> Or if you are installing on Amazon Web Services using Ubuntu 12.04 you can do all steps (1 to 6) at once with: > > curl https://raw.github.com/gitlabhq/gitlabhq/master/lib/support/aws/debian_ubuntu_aws.sh | sh > @@ -61,7 +61,11 @@ Also read the [Read this before you submit an issue](https://github.com/gitlabhq # 1. Install packages -*Keep in mind that `sudo` is not installed for debian by default. You should install it with as root:* **apt-get update && apt-get upgrade && apt-get install sudo** +*Keep in mind that `sudo` is not installed on Debian by default. You should install it as root:* + + apt-get update && apt-get upgrade && apt-get install sudo + +Now install the required packages: sudo apt-get update sudo apt-get upgrade @@ -71,7 +75,7 @@ Also read the [Read this before you submit an issue](https://github.com/gitlabhq # If you want to use MySQL: sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev -# 2. Install ruby +# 2. Install Ruby wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p290.tar.gz tar xzfv ruby-1.9.2-p290.tar.gz @@ -80,7 +84,7 @@ Also read the [Read this before you submit an issue](https://github.com/gitlabhq make sudo make install -# 3. Install gitolite +# 3. Install Gitolite Create user for git: @@ -93,12 +97,12 @@ Create user for git: --home /home/git \ git -Create user for gitlab: +Create user for GitLab: # ubuntu/debian sudo adduser --disabled-login --gecos 'gitlab system' gitlab -Add your user to git group: +Add your user to the `git` group: sudo usermod -a -G git gitlab @@ -106,10 +110,10 @@ Generate key: sudo -H -u gitlab ssh-keygen -q -N '' -t rsa -f /home/gitlab/.ssh/id_rsa -Get gitolite source code: +Clone GitLab's fork of the Gitolite source code: cd /home/git - sudo -H -u git git clone git://github.com/gitlabhq/gitolite /home/git/gitolite + sudo -H -u git git clone https://github.com/gitlabhq/gitolite.git /home/git/gitolite Setup: @@ -135,23 +139,23 @@ Permissions: # if succeed you can remove it sudo rm -rf /tmp/gitolite-admin -**IMPORTANT! If you cant clone `gitolite-admin` repository - DONT PROCEED INSTALLATION** +**IMPORTANT! If you can't clone `gitolite-admin` repository - DO NOT PROCEED WITH INSTALLATION** +Check the [Trouble Shooting Guide](https://github.com/gitlabhq/gitlab-public-wiki/wiki/Trouble-Shooting-Guide) +and ensure you have followed all of the above steps carefully. -# 4. Install gitlab and configuration. Check status configuration. +# 4. Clone GitLab source and install prerequisites sudo gem install charlock_holmes --version '0.6.8' sudo pip install pygments sudo gem install bundler cd /home/gitlab - sudo -H -u gitlab git clone -b stable git://github.com/gitlabhq/gitlabhq.git gitlab + sudo -H -u gitlab git clone -b stable https://github.com/gitlabhq/gitlabhq.git gitlab cd gitlab - sudo -u gitlab mkdir tmp - # Rename config files sudo -u gitlab cp config/gitlab.yml.example config/gitlab.yml -#### Select db you want to use +#### Select the database you want to use # SQLite sudo -u gitlab cp config/database.yml.sqlite config/database.yml @@ -179,15 +183,17 @@ Permissions: sudo -u gitlab -H bundle install --without development test --deployment -#### Setup DB +#### Setup database sudo -u gitlab bundle exec rake gitlab:app:setup RAILS_ENV=production -#### Setup gitlab hooks +#### Setup GitLab hooks sudo cp ./lib/hooks/post-receive /home/git/share/gitolite/hooks/common/post-receive sudo chown git:git /home/git/share/gitolite/hooks/common/post-receive +#### Check application status + Checking status: sudo -u gitlab bundle exec rake gitlab:app:status RAILS_ENV=production @@ -208,9 +214,9 @@ Checking status: UMASK for .gitolite.rc is 0007? ............YES /home/git/share/gitolite/hooks/common/post-receive exists? ............YES -If you got all YES - congrats! You can go to next step. +If you got all YES - congratulations! You can go to the next step. -# 5. Server up +# 5. Start the web server Application can be started with next command: @@ -225,12 +231,12 @@ You can login via web using admin generated with setup: admin@local.host 5iveL!fe -# 6. Run resque process (for processing queue). +# 6. Run Resque process (for processing job queue). # Manually sudo -u gitlab bundle exec rake environment resque:work QUEUE=* RAILS_ENV=production BACKGROUND=yes - # Gitlab start script + # GitLab start script sudo -u gitlab ./resque.sh # if you run this as root /home/gitlab/gitlab/tmp/pids/resque_worker.pid will be owned by root # causing the resque worker not to start via init script on next boot/service restart @@ -250,7 +256,7 @@ You can login via web using admin generated with setup: sudo -u gitlab cp config/unicorn.rb.orig config/unicorn.rb sudo -u gitlab bundle exec unicorn_rails -c config/unicorn.rb -E production -D -Add gitlab to nginx sites & change with your host specific settings +Add GitLab to nginx sites & change with your host specific settings sudo cp /home/gitlab/gitlab/lib/support/nginx-gitlab /etc/nginx/sites-available/gitlab sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab @@ -272,10 +278,10 @@ Adding permission: sudo chmod +x /etc/init.d/gitlab -Gitlab autostart: +GitLab autostart: sudo update-rc.d gitlab defaults -Now you can start/restart/stop gitlab like: +Now you can start/restart/stop GitLab like: sudo /etc/init.d/gitlab restart From c1ff89fa2adc4809ea093833464f41ea9af5bc6f Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 4 Sep 2012 11:30:49 -0400 Subject: [PATCH 137/357] Rename projects.js to projects.js.coffee --- app/assets/javascripts/{projects.js => projects.js.coffee} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename app/assets/javascripts/{projects.js => projects.js.coffee} (100%) diff --git a/app/assets/javascripts/projects.js b/app/assets/javascripts/projects.js.coffee similarity index 100% rename from app/assets/javascripts/projects.js rename to app/assets/javascripts/projects.js.coffee From 7e76610d0a521af73459ffc2ba7b3956ab9da34c Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 4 Sep 2012 11:36:14 -0400 Subject: [PATCH 138/357] Update the projects js file to coffeescript; refactor the clone panel switcher --- app/assets/javascripts/projects.js.coffee | 40 ++++++++++------------- app/views/projects/empty.html.haml | 13 -------- app/views/projects/show.html.haml | 5 --- app/views/refs/_head.html.haml | 5 --- 4 files changed, 18 insertions(+), 45 deletions(-) diff --git a/app/assets/javascripts/projects.js.coffee b/app/assets/javascripts/projects.js.coffee index 6bbfbacc..ca8f13f6 100644 --- a/app/assets/javascripts/projects.js.coffee +++ b/app/assets/javascripts/projects.js.coffee @@ -1,25 +1,21 @@ -function Projects() { - $("#project_name").live("change", function(){ - var slug = slugify($(this).val()); - $("#project_code").val(slug); - $("#project_path").val(slug); - }); +window.Projects = -> + $("#project_name").live "change", -> + slug = slugify($(this).val()) + $("#project_code").val(slug) + $("#project_path").val(slug) - $('.new_project, .edit_project').live('ajax:before', function() { - $('.project_new_holder, .project_edit_holder').hide(); - $('.save-project-loader').show(); - }); + $(".new_project, .edit_project").live "ajax:before", -> + $(".project_new_holder, .project_edit_holder").hide() + $(".save-project-loader").show() - $('form #project_default_branch').chosen(); + $("form #project_default_branch").chosen() + disableButtonIfEmtpyField "#project_name", ".project-submit" - disableButtonIfEmtpyField("#project_name", ".project-submit") -} - -function initGitCloneSwitcher() { - var link_sel = ".project_clone_holder button"; - $(link_sel).bind("click", function(e) { - $(link_sel).removeClass("active"); - $(this).addClass("active"); - $("#project_clone").val($(this).attr("data-clone")); - }) -} +# Git clone panel switcher +$ -> + scope = $('.project_clone_holder') + if scope.length > 0 + $('a, button', scope).click -> + $('a, button', scope).removeClass('active') + $(this).addClass('active') + $('#project_clone', scope).val($(this).data('clone')) diff --git a/app/views/projects/empty.html.haml b/app/views/projects/empty.html.haml index d408c0a6..6ec7015a 100644 --- a/app/views/projects/empty.html.haml +++ b/app/views/projects/empty.html.haml @@ -36,16 +36,3 @@ - if can? current_user, :admin_project, @project .prepend-top-20 = link_to 'Remove project', @project, confirm: 'Are you sure?', method: :delete, class: "btn danger right" - - - -:javascript - $(function(){ - var link_sel = ".project_clone_holder a"; - $(link_sel).bind("click", function() { - $(link_sel).removeClass("active"); - $(this).addClass("active"); - $("#project_clone").val($(this).attr("data-clone")); - }) - }) - diff --git a/app/views/projects/show.html.haml b/app/views/projects/show.html.haml index de3e9cef..21459da2 100644 --- a/app/views/projects/show.html.haml +++ b/app/views/projects/show.html.haml @@ -2,8 +2,3 @@ = render 'clone_panel' = render "events/event_last_push", event: @last_push .content_list= render @events - -:javascript - $(function(){ - initGitCloneSwitcher(); - }) diff --git a/app/views/refs/_head.html.haml b/app/views/refs/_head.html.haml index affd07cb..d51602de 100644 --- a/app/views/refs/_head.html.haml +++ b/app/views/refs/_head.html.haml @@ -12,8 +12,3 @@ %button{class: "btn small active", :"data-clone" => @project.ssh_url_to_repo} SSH %button{class: "btn small", :"data-clone" => @project.http_url_to_repo} HTTP = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5" - -:javascript - $(function(){ - initGitCloneSwitcher(); - }) From a4633537737d1ea85c74b2089fa1c82e407c0cfa Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 4 Sep 2012 11:37:38 -0400 Subject: [PATCH 139/357] Add "empty_repo?" method to Repository role Replaces two calls that this method simplifies --- app/controllers/application_controller.rb | 2 +- app/controllers/projects_controller.rb | 2 +- app/roles/repository.rb | 12 ++++++++---- spec/roles/repository_spec.rb | 22 ++++++++++++++++++++++ 4 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 spec/roles/repository_spec.rb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 9aab250d..d53b23bb 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -135,7 +135,7 @@ class ApplicationController < ActionController::Base end def require_non_empty_project - redirect_to @project unless @project.repo_exists? && @project.has_commits? + redirect_to @project if @project.empty_repo? end def no_cache_headers diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index bd7f811e..170b8892 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -50,7 +50,7 @@ class ProjectsController < ApplicationController respond_to do |format| format.html do - if @project.repo_exists? && @project.has_commits? + unless @project.empty_repo? @last_push = current_user.recent_push(@project.id) render :show else diff --git a/app/roles/repository.rb b/app/roles/repository.rb index 5fa950db..5f6c3541 100644 --- a/app/roles/repository.rb +++ b/app/roles/repository.rb @@ -8,6 +8,10 @@ module Repository false end + def empty_repo? + !repo_exists? || !has_commits? + end + def commit(commit_id = nil) Commit.find_or_first(repo, commit_id, root_ref) end @@ -38,7 +42,7 @@ module Repository def has_post_receive_file? hook_file = File.join(path_to_repo, 'hooks', 'post-receive') - File.exists?(hook_file) + File.exists?(hook_file) end def tags @@ -67,7 +71,7 @@ module Repository def repo_exists? @repo_exists ||= (repo && !repo.branches.empty?) - rescue + rescue @repo_exists = false end @@ -94,7 +98,7 @@ module Repository !!commit end - def root_ref + def root_ref default_branch || "master" end @@ -104,7 +108,7 @@ module Repository # Archive Project to .tar.gz # - # Already packed repo archives stored at + # Already packed repo archives stored at # app_root/tmp/repositories/project_name/project_name-commit-id.tag.gz # def archive_repo ref diff --git a/spec/roles/repository_spec.rb b/spec/roles/repository_spec.rb new file mode 100644 index 00000000..62aecc13 --- /dev/null +++ b/spec/roles/repository_spec.rb @@ -0,0 +1,22 @@ +require 'spec_helper' + +describe Project, "Repository" do + let(:project) { build(:project) } + + describe "#empty_repo?" do + it "should return true if the repo doesn't exist" do + project.stub(repo_exists?: false, has_commits?: true) + project.should be_empty_repo + end + + it "should return true if the repo has commits" do + project.stub(repo_exists?: true, has_commits?: false) + project.should be_empty_repo + end + + it "should return false if the repo exists and has commits" do + project.stub(repo_exists?: true, has_commits?: true) + project.should_not be_empty_repo + end + end +end From 82a399688316caa9d860d93204f5bfc9b7847a16 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 4 Sep 2012 12:03:40 -0400 Subject: [PATCH 140/357] Remove projects/_show partial I have no earthly idea what this file was for, but I couldn't find it being rendered anywhere. --- app/views/projects/_show.html.haml | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 app/views/projects/_show.html.haml diff --git a/app/views/projects/_show.html.haml b/app/views/projects/_show.html.haml deleted file mode 100644 index e8a5b00d..00000000 --- a/app/views/projects/_show.html.haml +++ /dev/null @@ -1,23 +0,0 @@ -%h5.title - = @project.name -%br -%div - %a.btn.info{href: tree_project_ref_path(@project, @project.root_ref)} Browse code -   - %a.btn{href: project_commits_path(@project)} Commits - %strong.right - = link_to project_path(@project) do - Switch to project → -%br -.alert-message.block-message.warning - .input - .input-prepend - %span.add-on git clone - = text_field_tag :project_clone, @project.url_to_repo, class: "xlarge one_click_select git_clone_url" - -= simple_format @project.description -- unless @events.blank? - %h4.middle_title Recent Activity - .content_list= render @events - - From 0bc4ecfedd1f8580ab861955b0c21605e5a3aadb Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 4 Sep 2012 12:05:08 -0400 Subject: [PATCH 141/357] Change projects/empty to include the clone_panel partial instead of duplicating --- app/views/projects/_clone_panel.html.haml | 22 +++++++++++----------- app/views/projects/empty.html.haml | 10 ++-------- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/app/views/projects/_clone_panel.html.haml b/app/views/projects/_clone_panel.html.haml index 76059f32..20891610 100644 --- a/app/views/projects/_clone_panel.html.haml +++ b/app/views/projects/_clone_panel.html.haml @@ -8,14 +8,14 @@ = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5" .span4.right .right - - if can? current_user, :download_code, @project - = link_to archive_project_repository_path(@project), class: "btn small grouped" do - %i.icon-download-alt - Download - - if @project.merge_requests_enabled && can?(current_user, :write_merge_request, @project) - = link_to new_project_merge_request_path(@project), title: "New Merge Request", class: "btn small grouped" do - Merge Request - - if @project.issues_enabled && can?(current_user, :write_issue, @project) - = link_to new_project_issue_path(@project), title: "New Issue", class: "btn small grouped" do - Issue - + - unless @project.empty_repo? + - if can? current_user, :download_code, @project + = link_to archive_project_repository_path(@project), class: "btn small grouped" do + %i.icon-download-alt + Download + - if @project.merge_requests_enabled && can?(current_user, :write_merge_request, @project) + = link_to new_project_merge_request_path(@project), title: "New Merge Request", class: "btn small grouped" do + Merge Request + - if @project.issues_enabled && can?(current_user, :write_issue, @project) + = link_to new_project_issue_path(@project), title: "New Issue", class: "btn small grouped" do + Issue diff --git a/app/views/projects/empty.html.haml b/app/views/projects/empty.html.haml index 6ec7015a..d9a151fc 100644 --- a/app/views/projects/empty.html.haml +++ b/app/views/projects/empty.html.haml @@ -1,12 +1,6 @@ = render 'shared/no_ssh' -.project_clone_panel - .row - .span7 - .form-horizontal - .input-prepend.project_clone_holder - = link_to "SSH", "#", class: "btn small active", :"data-clone" => @project.ssh_url_to_repo - = link_to "HTTP", "#", class: "btn small", :"data-clone" => @project.http_url_to_repo - = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5" += render 'clone_panel' + %div.git-empty %h4 Git global setup: %pre.dark From 874a86f820466b2c9cd384483d862a3d5e2a3ae7 Mon Sep 17 00:00:00 2001 From: randx Date: Tue, 4 Sep 2012 19:44:17 +0300 Subject: [PATCH 142/357] update install to use recipes --- doc/installation.md | 16 ++++++------ lib/support/init-gitlab | 55 ---------------------------------------- lib/support/nginx-gitlab | 33 ------------------------ 3 files changed, 8 insertions(+), 96 deletions(-) delete mode 100644 lib/support/init-gitlab delete mode 100644 lib/support/nginx-gitlab diff --git a/doc/installation.md b/doc/installation.md index 6ba14566..462fbc57 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -48,15 +48,15 @@ Also read the [Read this before you submit an issue](https://github.com/gitlabhq > apt-get install curl sudo > > # 3 steps in 1 command :) -> curl https://raw.github.com/gitlabhq/gitlabhq/master/doc/debian_ubuntu.sh | sh +> curl https://raw.github.com/gitlabhq/gitlab-recipes/master/install/debian_ubuntu.sh | sh > > Now you can go to [Step 4](#4-install-gitlab-and-configuration-check-status-configuration) > > Or if you are installing on Amazon Web Services using Ubuntu 12.04 you can do all steps (1 to 6) at once with: > -> curl https://raw.github.com/gitlabhq/gitlabhq/master/lib/support/aws/debian_ubuntu_aws.sh | sh +> curl https://raw.github.com/gitlabhq/gitlab-recipes/master/install/debian_ubuntu_aws.sh | sh > -> for more detailed instructions read the HOWTO section of [the script](https://github.com/gitlabhq/gitlabhq/blob/master/lib/support/aws/debian_ubuntu_aws.sh) +> for more detailed instructions read the HOWTO section of [the script](https://github.com/gitlabhq/gitlab-recipes/blob/master/install/debian_ubuntu_aws.sh) > - - - # 1. Install packages @@ -77,9 +77,9 @@ Now install the required packages: # 2. Install Ruby - wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p290.tar.gz - tar xzfv ruby-1.9.2-p290.tar.gz - cd ruby-1.9.2-p290 + wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz + tar xfvz ruby-1.9.3-p194.tar.gz + cd ruby-1.9.3-p194 ./configure make sudo make install @@ -258,7 +258,7 @@ You can login via web using admin generated with setup: Add GitLab to nginx sites & change with your host specific settings - sudo cp /home/gitlab/gitlab/lib/support/nginx-gitlab /etc/nginx/sites-available/gitlab + sudo wget https://raw.github.com/gitlabhq/gitlab-recipes/master/nginx/gitlab -P /etc/nginx/sites-available/ sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab # Change **YOUR_SERVER_IP** and **YOUR_SERVER_FQDN** @@ -272,7 +272,7 @@ Restart nginx: Create init script in /etc/init.d/gitlab: - cp /home/gitlab/gitlab/lib/support/init-gitlab /etc/init.d/gitlab + sudo wget https://raw.github.com/gitlabhq/gitlab-recipes/master/init.d/gitlab -P /etc/init.d/ Adding permission: diff --git a/lib/support/init-gitlab b/lib/support/init-gitlab deleted file mode 100644 index 26ed11e1..00000000 --- a/lib/support/init-gitlab +++ /dev/null @@ -1,55 +0,0 @@ -#! /bin/bash -### BEGIN INIT INFO -# Provides: gitlab -# Required-Start: $local_fs $remote_fs $network $syslog redis-server -# Required-Stop: $local_fs $remote_fs $network $syslog -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: GitLab git repository management -# Description: GitLab git repository management -### END INIT INFO - -APP_ROOT="/home/gitlab/gitlab" -DAEMON_OPTS="-c $APP_ROOT/config/unicorn.rb -E production -D" -NAME="unicorn" -DESC="Gitlab service" -PID="$APP_ROOT/tmp/pids/unicorn.pid" -RESQUE_PID="$APP_ROOT/tmp/pids/resque_worker.pid" - -case "$1" in - start) - CD_TO_APP_DIR="cd $APP_ROOT" - START_DAEMON_PROCESS="bundle exec unicorn_rails $DAEMON_OPTS" - START_RESQUE_PROCESS="./resque.sh" - - echo -n "Starting $DESC: " - if [ `whoami` = root ]; then - sudo -u gitlab sh -l -c "$CD_TO_APP_DIR && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS" - else - $CD_TO_APP_DIR && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS - fi - echo "$NAME." - ;; - stop) - echo -n "Stopping $DESC: " - kill -QUIT `cat $PID` - kill -QUIT `cat $RESQUE_PID` - echo "$NAME." - ;; - restart) - echo -n "Restarting $DESC: " - kill -USR2 `cat $PID` - echo "$NAME." - ;; - reload) - echo -n "Reloading $DESC configuration: " - kill -HUP `cat $PID` - echo "$NAME." - ;; - *) - echo "Usage: $NAME {start|stop|restart|reload}" >&2 - exit 1 - ;; -esac - -exit 0 diff --git a/lib/support/nginx-gitlab b/lib/support/nginx-gitlab deleted file mode 100644 index fa15d201..00000000 --- a/lib/support/nginx-gitlab +++ /dev/null @@ -1,33 +0,0 @@ -upstream gitlab { - server unix:/home/gitlab/gitlab/tmp/sockets/gitlab.socket; -} - -server { - listen YOUR_SERVER_IP:80; # e.g., listen 192.168.1.1:80; - server_name YOUR_SERVER_FQDN; # e.g., server_name source.example.com; - root /home/gitlab/gitlab/public; - - # individual nginx logs for this gitlab vhost - access_log /var/log/nginx/gitlab_access.log; - error_log /var/log/nginx/gitlab_error.log; - - location / { - # serve static files from defined root folder;. - # @gitlab is a named location for the upstream fallback, see below - try_files $uri $uri/index.html $uri.html @gitlab; - } - - # if a file, which is not found in the root folder is requested, - # then the proxy pass the request to the upsteam (gitlab unicorn) - location @gitlab { - proxy_redirect off; - - # you need to change this to "https", if you set "ssl" directive to "on" - proxy_set_header X-FORWARDED_PROTO http; - proxy_set_header Host $http_host; - proxy_set_header X-Real-IP $remote_addr; - - proxy_pass http://gitlab; - } -} - From d59d2a197e5ffb0231f97b0ef503e12e8d383709 Mon Sep 17 00:00:00 2001 From: randx Date: Tue, 4 Sep 2012 20:29:20 +0300 Subject: [PATCH 143/357] cleanup gitlab from setup scripts --- doc/debian_ubuntu.sh | 45 ---------- lib/support/aws/debian_ubuntu_aws.sh | 122 --------------------------- 2 files changed, 167 deletions(-) delete mode 100644 doc/debian_ubuntu.sh delete mode 100644 lib/support/aws/debian_ubuntu_aws.sh diff --git a/doc/debian_ubuntu.sh b/doc/debian_ubuntu.sh deleted file mode 100644 index 5ed1e2a2..00000000 --- a/doc/debian_ubuntu.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/sh - -sudo apt-get update -sudo apt-get upgrade - -sudo DEBIAN_FRONTEND='noninteractive' apt-get install -y postfix-policyd-spf-python # Install postfix without prompting. -sudo apt-get install -y git git-core wget curl gcc checkinstall libxml2-dev libxslt-dev sqlite3 libsqlite3-dev libcurl4-openssl-dev libreadline-gplv2-dev libc6-dev libssl-dev libmysql++-dev make build-essential zlib1g-dev libicu-dev redis-server openssh-server python-dev python-pip libyaml-dev - -wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz -tar xfvz ruby-1.9.3-p194.tar.gz -cd ruby-1.9.3-p194 -./configure -make -sudo make install - -sudo adduser \ - --system \ - --shell /bin/sh \ - --gecos 'git version control' \ - --group \ - --disabled-password \ - --home /home/git \ - git - -sudo adduser --disabled-login --gecos 'gitlab system' gitlab - -sudo usermod -a -G git gitlab - -sudo -H -u gitlab ssh-keygen -q -N '' -t rsa -f /home/gitlab/.ssh/id_rsa - -cd /home/git -sudo -H -u git git clone git://github.com/gitlabhq/gitolite /home/git/gitolite - -sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; /home/git/gitolite/src/gl-system-install" -sudo cp /home/gitlab/.ssh/id_rsa.pub /home/git/gitlab.pub -sudo chmod 777 /home/git/gitlab.pub - -sudo -u git -H sed -i 's/0077/0007/g' /home/git/share/gitolite/conf/example.gitolite.rc -sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; gl-setup -q /home/git/gitlab.pub" - -sudo chmod -R g+rwX /home/git/repositories/ -sudo chown -R git:git /home/git/repositories/ - -sudo -u gitlab -H git clone git@localhost:gitolite-admin.git /tmp/gitolite-admin -sudo rm -rf /tmp/gitolite-admin diff --git a/lib/support/aws/debian_ubuntu_aws.sh b/lib/support/aws/debian_ubuntu_aws.sh deleted file mode 100644 index c4103ec9..00000000 --- a/lib/support/aws/debian_ubuntu_aws.sh +++ /dev/null @@ -1,122 +0,0 @@ -#!/bin/sh - -# ABOUT -# This script performs a complete installation of Gitlab (master branch). -# Is can be run with one command without needing _any_ user input after that. -# This script only works on Amazon Web Services (AWS). -# The operating system used is Ubuntu 12.04 64bit. - -# HOWTO -# Signup for AWS, free tier are available at http://aws.amazon.com/free/ -# Go to EC2 tab in the AWS console EC2 https://console.aws.amazon.com/ec2/home -# Click the 'Launch Instance' button -# Select: 'Quick launch wizard' and continue -# Choose a key pair => Create New => Name it => Download it -# Choose a Launch Configuration => Select 'More Amazon Marketplace Images' -# Press 'Continue' -# Enter 'ubuntu/images/ubuntu-precise-12.04-amd64-server-20120424' and press 'Search' -# Select the only result (ami-3c994355) and press 'Continue' -# Press 'Edit details' if you want to modify something, for example make the type 'c1.medium' to make the install faster. -# Press the 'Launch' button -# Press 'Close' -# Click 'Security Groups' under the left hand menu 'NETWORK & SECURITY' -# Select the newly create seciruty group, probably named 'quicklaunch-1' -# Click on the Inbound tab -# In the 'Create a new rule' dropdown select 'HTTP' -# Press 'Add Rule' -# In the 'Create a new rule' dropdown select 'HTTPS' -# Press 'Add Rule' -# Press 'Apply Rule Changes' -# Give the following command in your local terminal while suptituting the UPPERCASE items -# 'ssh -i LOCATION_OF_AWS_KEY_PAIR_PRIVATE_KEY PUBLIC_DNS_OF_THE_NEW_SERVER' -# Execute the curl command below and when its ready follow the printed 'Log in instuctions' -# curl https://raw.github.com/gitlabhq/gitlabhq/master/lib/support/aws/debian_ubuntu_aws.sh | sh - -# Prevent fingerprint prompt for localhost in step 1 to 3. -echo "Host localhost - StrictHostKeyChecking no - UserKnownHostsFile=/dev/null" | sudo tee -a /etc/ssh/ssh_config - -# Existing script for Step 1 to 3 -curl https://raw.github.com/gitlabhq/gitlabhq/master/doc/debian_ubuntu.sh | sh - -# Install MySQL -sudo apt-get install -y makepasswd # Needed to create a unique password non-interactively. -userPassword=$(makepasswd --char=10) # Generate a random MySQL password -# Note that the lines below creates a cleartext copy of the random password in /var/cache/debconf/passwords.dat -# This file is normally only readable by root and the password will be deleted by the package management system after install. -echo mysql-server mysql-server/root_password password $userPassword | sudo debconf-set-selections -echo mysql-server mysql-server/root_password_again password $userPassword | sudo debconf-set-selections -sudo apt-get install -y mysql-server - -# Gitlab install -sudo gem install charlock_holmes --version '0.6.8' -sudo pip install pygments -sudo gem install bundler -sudo su -l gitlab -c "git clone git://github.com/gitlabhq/gitlabhq.git gitlab" # Using master everywhere. -sudo su -l gitlab -c "cd gitlab && mkdir tmp" -sudo su -l gitlab -c "cd gitlab/config && cp gitlab.yml.example gitlab.yml" -sudo su -l gitlab -c "cd gitlab/config && cp database.yml.example database.yml" -sudo sed -i 's/"secure password"/"'$userPassword'"/' /home/gitlab/gitlab/config/database.yml # Insert the mysql root password. -sudo su -l gitlab -c "cd gitlab && bundle install --without development test --deployment" -sudo su -l gitlab -c "cd gitlab && bundle exec rake gitlab:app:setup RAILS_ENV=production" - -# Setup gitlab hooks -sudo cp /home/gitlab/gitlab/lib/hooks/post-receive /home/git/share/gitolite/hooks/common/post-receive -sudo chown git:git /home/git/share/gitolite/hooks/common/post-receive - -# Set the first occurrence of host in the Gitlab config to the publicly available domain name -sudo sed -i '0,/host/s/localhost/'`wget -qO- http://instance-data/latest/meta-data/public-hostname`'/' /home/gitlab/gitlab/config/gitlab.yml - -# Gitlab installation test (optional) -# sudo -u gitlab bundle exec rake gitlab:app:status RAILS_ENV=production -# sudo -u gitlab bundle exec rails s -e production -# sudo -u gitlab bundle exec rake environment resque:work QUEUE=* RAILS_ENV=production BACKGROUND=no - -# Install and configure Nginx -sudo apt-get install -y nginx -sudo cp /home/gitlab/gitlab/lib/support/nginx-gitlab /etc/nginx/sites-available/gitlab -sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab -sudo sed -i 's/YOUR_SERVER_IP/'`wget -qO- http://instance-data/latest/meta-data/local-ipv4`'/' /etc/nginx/sites-available/gitlab # Set private ip address (public won't work). -sudo sed -i 's/YOUR_SERVER_FQDN/'`wget -qO- http://instance-data/latest/meta-data/public-hostname`'/' /etc/nginx/sites-available/gitlab # Set public dns domain name. - -# Configure Unicorn -sudo -u gitlab cp /home/gitlab/gitlab/config/unicorn.rb.orig /home/gitlab/gitlab/config/unicorn.rb - -# Create a Gitlab service -sudo cp /home/gitlab/gitlab/lib/support/init-gitlab /etc/init.d/gitlab -sudo chmod +x /etc/init.d/gitlab && sudo update-rc.d gitlab defaults - -## Gitlab service commands (unicorn and resque) -## restart doesn't restart resque, only start/stop effect it. -sudo -u gitlab service gitlab start -# sudo -u gitlab service gitlab restart -# sudo -u gitlab service gitlab stop - -# nginx Service commands -# sudo service nginx start -sudo service nginx restart -# sudo service nginx stop - -# Manual startup commands for troubleshooting when the service commands do not work -# sudo -u gitlab bundle exec unicorn_rails -c config/unicorn.rb -E production -D -# sudo su -l gitlab -c "cd gitlab && ./resque.sh" - -# Monitoring commands -# sudo tail -f /var/log/nginx/access.log; -# sudo tail -f /var/log/nginx/error.log; - -# Go to gitlab directory by default on next login. -echo 'cd /home/gitlab/gitlab' >> /home/ubuntu/.bashrc - -echo '' -echo '###########################################' -echo '# Log in instuctions #' -echo '###########################################' -echo '' -echo "Surf to this Gitlab installation in your browser:" -echo "http://`wget -qO- http://instance-data/latest/meta-data/public-hostname`/" -echo '' -echo 'and login with the following Email and Password:' -echo 'admin@local.host' -echo '5iveL!fe' \ No newline at end of file From 42032956bd4d51bd954762a6f1192f20d6375885 Mon Sep 17 00:00:00 2001 From: randx Date: Tue, 4 Sep 2012 20:50:00 +0300 Subject: [PATCH 144/357] Cleaner install section for nginx, unicorn --- doc/installation.md | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/doc/installation.md b/doc/installation.md index 462fbc57..327fc192 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -246,18 +246,18 @@ You can login via web using admin generated with setup: # Nginx && Unicorn -### Install Nginx - - sudo apt-get install nginx - -## Unicorn +## 1. Unicorn cd /home/gitlab/gitlab sudo -u gitlab cp config/unicorn.rb.orig config/unicorn.rb sudo -u gitlab bundle exec unicorn_rails -c config/unicorn.rb -E production -D -Add GitLab to nginx sites & change with your host specific settings +## 2. Nginx + # Install first + sudo apt-get install nginx + + # Add GitLab to nginx sites & change with your host specific settings sudo wget https://raw.github.com/gitlabhq/gitlab-recipes/master/nginx/gitlab -P /etc/nginx/sites-available/ sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab @@ -266,16 +266,15 @@ Add GitLab to nginx sites & change with your host specific settings # of the host serving GitLab. sudo vim /etc/nginx/sites-enabled/gitlab -Restart nginx: + # Restart nginx: /etc/init.d/nginx restart +## 3. Init script + Create init script in /etc/init.d/gitlab: sudo wget https://raw.github.com/gitlabhq/gitlab-recipes/master/init.d/gitlab -P /etc/init.d/ - -Adding permission: - sudo chmod +x /etc/init.d/gitlab GitLab autostart: From 36738897bf06937056285b0eeabef13928d4d704 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 4 Sep 2012 23:57:39 -0400 Subject: [PATCH 145/357] Add specs for Project#discover_default_branch --- spec/roles/repository_spec.rb | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/spec/roles/repository_spec.rb b/spec/roles/repository_spec.rb index 62aecc13..579425d7 100644 --- a/spec/roles/repository_spec.rb +++ b/spec/roles/repository_spec.rb @@ -19,4 +19,30 @@ describe Project, "Repository" do project.should_not be_empty_repo end end + + describe "#discover_default_branch" do + let(:master) { double(name: 'master') } + let(:stable) { double(name: 'stable') } + + it "returns 'master' when master exists" do + project.should_receive(:heads).and_return([stable, master]) + project.discover_default_branch.should == 'master' + end + + it "returns non-master when master exists but default branch is set to something else" do + project.default_branch = 'stable' + project.should_receive(:heads).and_return([stable, master]) + project.discover_default_branch.should == 'stable' + end + + it "returns a non-master branch when only one exists" do + project.should_receive(:heads).and_return([stable]) + project.discover_default_branch.should == 'stable' + end + + it "returns nil when no branch exists" do + project.should_receive(:heads).and_return([]) + project.discover_default_branch.should be_nil + end + end end From f06d98e907f71dc9b3a4a2da0db1c096b6c07024 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 5 Sep 2012 01:00:07 -0400 Subject: [PATCH 146/357] Add SetDefaultBranchDefaultToNil migration default_branch now defaults to nil, not 'master'. It will be set after the first push by discover_default_branch. --- app/models/project.rb | 2 +- ...043334_set_default_branch_default_to_nil.rb | 12 ++++++++++++ db/schema.rb | 18 +++++++++--------- 3 files changed, 22 insertions(+), 10 deletions(-) create mode 100644 db/migrate/20120905043334_set_default_branch_default_to_nil.rb diff --git a/app/models/project.rb b/app/models/project.rb index a7735a42..fc18ad55 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -187,7 +187,7 @@ end # private_flag :boolean(1) default(TRUE), not null # code :string(255) # owner_id :integer(4) -# default_branch :string(255) default("master"), not null +# default_branch :string(255) # issues_enabled :boolean(1) default(TRUE), not null # wall_enabled :boolean(1) default(TRUE), not null # merge_requests_enabled :boolean(1) default(TRUE), not null diff --git a/db/migrate/20120905043334_set_default_branch_default_to_nil.rb b/db/migrate/20120905043334_set_default_branch_default_to_nil.rb new file mode 100644 index 00000000..f5956fe8 --- /dev/null +++ b/db/migrate/20120905043334_set_default_branch_default_to_nil.rb @@ -0,0 +1,12 @@ +class SetDefaultBranchDefaultToNil < ActiveRecord::Migration + def up + # Set the default_branch to allow nil, and default it to nil + change_column_null(:projects, :default_branch, true) + change_column_default(:projects, :default_branch, nil) + end + + def down + change_column_null(:projects, :default_branch, false) + change_column_default(:projects, :default_branch, 'master') + end +end diff --git a/db/schema.rb b/db/schema.rb index 46461e44..00bb5523 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20120729131232) do +ActiveRecord::Schema.define(:version => 20120905043334) do create_table "events", :force => true do |t| t.string "target_type" @@ -98,16 +98,16 @@ ActiveRecord::Schema.define(:version => 20120729131232) do t.string "name" t.string "path" t.text "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.boolean "private_flag", :default => true, :null => false + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.boolean "private_flag", :default => true, :null => false t.string "code" t.integer "owner_id" - t.string "default_branch", :default => "master", :null => false - t.boolean "issues_enabled", :default => true, :null => false - t.boolean "wall_enabled", :default => true, :null => false - t.boolean "merge_requests_enabled", :default => true, :null => false - t.boolean "wiki_enabled", :default => true, :null => false + t.string "default_branch" + t.boolean "issues_enabled", :default => true, :null => false + t.boolean "wall_enabled", :default => true, :null => false + t.boolean "merge_requests_enabled", :default => true, :null => false + t.boolean "wiki_enabled", :default => true, :null => false end create_table "protected_branches", :force => true do |t| From 443e23e61a10f34e9eccc3b6e91803a0996f5050 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 5 Sep 2012 01:01:20 -0400 Subject: [PATCH 147/357] Add Repository#discover_default_branch and add it to PushObserver --- app/roles/push_observer.rb | 16 ++++++++++++---- app/roles/repository.rb | 24 +++++++++++++++++++++--- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/app/roles/push_observer.rb b/app/roles/push_observer.rb index 1067404d..947ed423 100644 --- a/app/roles/push_observer.rb +++ b/app/roles/push_observer.rb @@ -1,3 +1,6 @@ +# Includes methods for handling Git Push events +# +# Triggered by PostReceive job module PushObserver def observe_push(oldrev, newrev, ref, user) data = post_receive_data(oldrev, newrev, ref, user) @@ -84,11 +87,10 @@ module PushObserver data end - - # This method will be called after each post receive - # and only if user present in gitlab. - # All callbacks for post receive should be placed here + # This method will be called after each post receive and only if the provided + # user is present in GitLab. # + # All callbacks for post receive should be placed here. def trigger_post_receive(oldrev, newrev, ref, user) # Create push event self.observe_push(oldrev, newrev, ref, user) @@ -101,5 +103,11 @@ module PushObserver # Create satellite self.satellite.create unless self.satellite.exists? + + # Discover the default branch, but only if it hasn't already been set to + # something else + if default_branch.nil? + update_attributes(default_branch: discover_default_branch) + end end end diff --git a/app/roles/repository.rb b/app/roles/repository.rb index 5f6c3541..a77de4ad 100644 --- a/app/roles/repository.rb +++ b/app/roles/repository.rb @@ -94,6 +94,24 @@ module Repository end.sort_by(&:name) end + # Discovers the default branch based on the repository's available branches + # + # - If no branches are present, returns nil + # - If one branch is present, returns its name + # - If two or more branches are present, returns the one that has a name + # matching root_ref (default_branch or 'master' if default_branch is nil) + def discover_default_branch + branches = heads.collect(&:name) + + if branches.length == 0 + nil + elsif branches.length == 1 + branches.first + else + branches.select { |v| v == root_ref }.first + end + end + def has_commits? !!commit end @@ -102,7 +120,7 @@ module Repository default_branch || "master" end - def root_ref? branch + def root_ref?(branch) root_ref == branch end @@ -111,7 +129,7 @@ module Repository # Already packed repo archives stored at # app_root/tmp/repositories/project_name/project_name-commit-id.tag.gz # - def archive_repo ref + def archive_repo(ref) ref = ref || self.root_ref commit = self.commit(ref) return nil unless commit @@ -138,6 +156,6 @@ module Repository end def http_url_to_repo - http_url = [Gitlab.config.url, "/", path, ".git"].join() + http_url = [Gitlab.config.url, "/", path, ".git"].join('') end end From 861a51488a44eac143ac4f44802fdf05fbd8f4c1 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 5 Sep 2012 01:02:30 -0400 Subject: [PATCH 148/357] Add specs for a couple more Repository methods used by discover_default_branch --- spec/roles/repository_spec.rb | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/spec/roles/repository_spec.rb b/spec/roles/repository_spec.rb index 579425d7..0fda57a3 100644 --- a/spec/roles/repository_spec.rb +++ b/spec/roles/repository_spec.rb @@ -45,4 +45,28 @@ describe Project, "Repository" do project.discover_default_branch.should be_nil end end + + describe "#root_ref" do + it "returns default_branch when set" do + project.default_branch = 'stable' + project.root_ref.should == 'stable' + end + + it "returns 'master' when default_branch is nil" do + project.default_branch = nil + project.root_ref.should == 'master' + end + end + + describe "#root_ref?" do + it "returns true when branch is root_ref" do + project.default_branch = 'stable' + project.root_ref?('stable').should be_true + end + + it "returns false when branch is not root_ref" do + project.default_branch = nil + project.root_ref?('stable').should be_false + end + end end From a9f275bc201e666b9f26768aa228aca8250d5a94 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 5 Sep 2012 01:12:44 -0400 Subject: [PATCH 149/357] Fix load_refs in ApplicationController after default_branch change As a last resort it was calling a method that didn't exist. Woops! --- app/controllers/application_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index d53b23bb..dae2e906 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -124,7 +124,7 @@ class ApplicationController < ActionController::Base if params[:ref].blank? @branch = params[:branch].blank? ? nil : params[:branch] @tag = params[:tag].blank? ? nil : params[:tag] - @ref = @branch || @tag || @project.try(:default_branch) || Repository.default_ref + @ref = @branch || @tag || @project.try(:default_branch) || 'master' else @ref = params[:ref] end From 5e1c63d3f0f0729a1d9d9e19c64b2fef65cc30fb Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 5 Sep 2012 01:13:41 -0400 Subject: [PATCH 150/357] Move load_refs out of ApplicationController and into CommitsController That was the only place it was used. --- app/controllers/application_controller.rb | 10 ---------- app/controllers/commits_controller.rb | 14 +++++++++++++- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index dae2e906..7e53b8fe 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -120,16 +120,6 @@ class ApplicationController < ActionController::Base end end - def load_refs - if params[:ref].blank? - @branch = params[:branch].blank? ? nil : params[:branch] - @tag = params[:tag].blank? ? nil : params[:tag] - @ref = @branch || @tag || @project.try(:default_branch) || 'master' - else - @ref = params[:ref] - end - end - def render_404 render file: File.join(Rails.root, "public", "404"), layout: false, status: "404" end diff --git a/app/controllers/commits_controller.rb b/app/controllers/commits_controller.rb index 717912d9..5e10a1b6 100644 --- a/app/controllers/commits_controller.rb +++ b/app/controllers/commits_controller.rb @@ -59,7 +59,7 @@ class CommitsController < ApplicationController def patch @commit = project.commit(params[:id]) - + send_data( @commit.to_patch, type: "text/plain", @@ -67,4 +67,16 @@ class CommitsController < ApplicationController filename: (@commit.id.to_s + ".patch") ) end + + protected + + def load_refs + if params[:ref].blank? + @branch = params[:branch].blank? ? nil : params[:branch] + @tag = params[:tag].blank? ? nil : params[:tag] + @ref = @branch || @tag || @project.try(:default_branch) || 'master' + else + @ref = params[:ref] + end + end end From 982a4095c193a9256b76ffcc40526e726eac14d1 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 5 Sep 2012 08:56:59 +0300 Subject: [PATCH 151/357] Use tw style for some buttons. Improved deploy key UI --- .../stylesheets/gitlab_bootstrap/buttons.scss | 26 +++++-------------- app/assets/stylesheets/main.scss | 7 +++++ app/views/deploy_keys/_form.html.haml | 13 +++++++--- app/views/deploy_keys/index.html.haml | 14 +++++++--- app/views/deploy_keys/new.html.haml | 2 +- app/views/deploy_keys/show.html.haml | 13 +++++++--- app/views/keys/show.html.haml | 2 +- app/views/team_members/show.html.haml | 2 +- 8 files changed, 46 insertions(+), 33 deletions(-) diff --git a/app/assets/stylesheets/gitlab_bootstrap/buttons.scss b/app/assets/stylesheets/gitlab_bootstrap/buttons.scss index c838f3b2..380fc3e3 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/buttons.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/buttons.scss @@ -1,8 +1,5 @@ .btn { - background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.076, #f7f7f7), to(#d5d5d5)); - background-image: -webkit-linear-gradient(#f7f7f7 7.6%, #d5d5d5); - background-image: -moz-linear-gradient(#f7f7f7 7.6%, #d5d5d5); - background-image: -o-linear-gradient(#f7f7f7 7.6%, #d5d5d5); + @include bg-gradient(#f7f7f7, #d5d5d5); border-color:#aaa; &:hover { @include bg-gray-gradient; @@ -12,10 +9,8 @@ &.primary { background:#2a79A3; + @include bg-gradient(#47A7b7, #2585b5); border-color: #2A79A3; - background-image: -webkit-linear-gradient(#47A7b7 7.6%, #2585b5); - background-image: -moz-linear-gradient(#47A7b7 7.6%, #2585b5); - background-image: -o-linear-gradient(#47A7b7 7.6%, #2585b5); color:#fff; text-shadow: 0 1px 1px #268; &:hover { @@ -30,16 +25,11 @@ } &.success { - border-color: #4A4; - background-image: -webkit-linear-gradient(#82D482 7.6%, #22B442); - background-image: -moz-linear-gradient(#82D482 7.6%, #22B442); - background-image: -o-linear-gradient(#82D482 7.6%, #22B442); - color: #fff; - text-shadow: 0 1px 1px #141; + @extend .btn-success; &:hover { - background: #6C6; - color: #fff; + @extend .btn-success; + background: #51a351; } &.disabled { @@ -62,10 +52,8 @@ padding-right:30px; } - &.danger, - &.btn-danger { - color:#fff; - background: #DA4E49; + &.danger { + @extend .btn-danger; border-color: #BD362F; &:hover { diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index be27d754..abd1ddf9 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -56,6 +56,13 @@ $hover: #fdf5d9; border-radius: $radius; } +@mixin bg-gradient($from, $to) { + background-image: -webkit-gradient(linear, 0 0, 0 100%, from($from), to($to)); + background-image: -webkit-linear-gradient($from, $to); + background-image: -moz-linear-gradient($from, $to); + background-image: -o-linear-gradient($from, $to); +} + @mixin bg-gray-gradient { background:#eee; background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); diff --git a/app/views/deploy_keys/_form.html.haml b/app/views/deploy_keys/_form.html.haml index 461f1f5d..6beba562 100644 --- a/app/views/deploy_keys/_form.html.haml +++ b/app/views/deploy_keys/_form.html.haml @@ -11,8 +11,13 @@ .input= f.text_field :title .clearfix = f.label :key - .input= f.text_area :key, class: "xlarge" - .actions - = f.submit 'Save', class: "primary btn" - = link_to "Cancel", project_deploy_keys_path(@project), class: "btn" + .input + = f.text_area :key, class: [:xxlarge, :thin_area] + %p.hint + Paste a machine public key here. Read more about how generate it + = link_to "here", help_ssh_path + + .actions + = f.submit 'Save', class: "save-btn btn" + = link_to "Cancel", project_deploy_keys_path(@project), class: "btn cancel-btn" diff --git a/app/views/deploy_keys/index.html.haml b/app/views/deploy_keys/index.html.haml index 0ee9d03b..b9c654a1 100644 --- a/app/views/deploy_keys/index.html.haml +++ b/app/views/deploy_keys/index.html.haml @@ -1,11 +1,17 @@ = render "repositories/head" -- if can? current_user, :admin_project, @project - .alert-message.block-message - Deploy keys allow read-only access to repository. + +%p.slead + Deploy keys allow read-only access to repository. It matches perfectly for CI, staging or production servers. + + - if can? current_user, :admin_project, @project = link_to new_project_deploy_key_path(@project), class: "btn small", title: "New Deploy Key" do Add Deploy Key - - if @keys.any? %table + %thead + %tr + %th Keys + %th + %th - @keys.each do |key| = render(partial: 'show', locals: {key: key}) diff --git a/app/views/deploy_keys/new.html.haml b/app/views/deploy_keys/new.html.haml index a2f1010b..e973cb7d 100644 --- a/app/views/deploy_keys/new.html.haml +++ b/app/views/deploy_keys/new.html.haml @@ -1,6 +1,6 @@ = render "repositories/head" -%h3 New Deploy key +%h3.page_title New Deploy key %hr = render 'form' diff --git a/app/views/deploy_keys/show.html.haml b/app/views/deploy_keys/show.html.haml index b1e0dc5c..c94cf10d 100644 --- a/app/views/deploy_keys/show.html.haml +++ b/app/views/deploy_keys/show.html.haml @@ -1,7 +1,14 @@ = render "repositories/head" -%h3= @key.title +%h3.page_title + Deploy key: + = @key.title + %small + created at + = @key.created_at.stamp("Aug 21, 2011") +.back_link + = link_to project_deploy_keys_path(@project) do + ← To keys list %hr %pre= @key.key -.actions +.right = link_to 'Remove', project_deploy_key_path(@key.project, @key), confirm: 'Are you sure?', method: :delete, class: "danger btn delete-key" - .clear diff --git a/app/views/keys/show.html.haml b/app/views/keys/show.html.haml index ffd52b96..a8cba6c8 100644 --- a/app/views/keys/show.html.haml +++ b/app/views/keys/show.html.haml @@ -10,5 +10,5 @@ %hr %pre= @key.key -.actions +.right = link_to 'Remove', @key, confirm: 'Are you sure?', method: :delete, class: "btn danger delete-key" diff --git a/app/views/team_members/show.html.haml b/app/views/team_members/show.html.haml index 89662309..3b5c78a8 100644 --- a/app/views/team_members/show.html.haml +++ b/app/views/team_members/show.html.haml @@ -3,7 +3,7 @@ .team_member_show - if can? current_user, :admin_project, @project - = link_to 'Remove from team', project_team_member_path(project_id: @project, id: @team_member.id), confirm: 'Are you sure?', method: :delete, class: "right btn btn-danger" + = link_to 'Remove from team', project_team_member_path(project_id: @project, id: @team_member.id), confirm: 'Are you sure?', method: :delete, class: "right btn danger" .profile_avatar_holder = image_tag gravatar_icon(user.email, 60), class: "borders" %h3 From 761c17f282c51baa6bc8e3ec169bc09dfaa43b83 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Wed, 5 Sep 2012 09:20:02 +0300 Subject: [PATCH 152/357] Unused routes removed --- config/routes.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index 51e65721..ed5eac0d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -50,10 +50,6 @@ Gitlab::Application.routes.draw do end end resources :team_members, :only => [:edit, :update, :destroy] - get 'mailer/preview_note' - get 'mailer/preview_user_new' - get 'mailer/preview_issue_new' - resources :hooks, :only => [:index, :create, :destroy] do get :test end From 9b9dd3f9bf62e8b116213012b766abcaef3e641e Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Wed, 5 Sep 2012 11:44:47 +0300 Subject: [PATCH 153/357] Unnecessary code removed --- lib/api/projects.rb | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 45c25127..d45d1d82 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -38,17 +38,15 @@ module Gitlab # Example Request # POST /projects post do - @project = Project.create_by_user({ - name: params[:name], - code: (params[:code] || params[:name]), - path: (params[:path] || params[:name]), - description: (params[:description] || Project.columns_hash["description"].default), - default_branch: (params[:default_branch] || Project.columns_hash["default_branch"].default), - issues_enabled: (params[:issues_enabled] || Project.columns_hash["issues_enabled"].default), - wall_enabled: (params[:wall_enabled] || Project.columns_hash["wall_enabled"].default), - merge_requests_enabled: (params[:merge_requests_enabled] || Project.columns_hash["merge_requests_enabled"].default), - wiki_enabled: (params[:wiki_enabled] || Project.columns_hash["wiki_enabled"].default) - }, current_user) + params[:code] ||= params[:name] + params[:path] ||= params[:name] + project_attrs = {} + params.each_pair do |k ,v| + if Project.attribute_names.include? k + project_attrs[k] = v + end + end + @project = Project.create_by_user(project_attrs, current_user) if @project.saved? present @project, with: Entities::Project else From 2680371785bfac1d0b76e5c4e53aa1074f743f84 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Wed, 5 Sep 2012 03:05:57 -0700 Subject: [PATCH 154/357] bump shoulda-matchers --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 7ec37f59..f350b3fc 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -323,7 +323,7 @@ GEM multi_json (~> 1.0) rubyzip settingslogic (2.0.8) - shoulda-matchers (1.1.0) + shoulda-matchers (1.3.0) activesupport (>= 3.0.0) simplecov (0.6.4) multi_json (~> 1.0) From 0b559cdece743269a7087c8206ab2cc587ec15f2 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Wed, 5 Sep 2012 03:14:24 -0700 Subject: [PATCH 155/357] add validations for boolean attributes --- app/models/project.rb | 2 ++ app/roles/issue_commonality.rb | 2 +- spec/models/issue_spec.rb | 1 + spec/models/milestone_spec.rb | 1 + spec/models/project_spec.rb | 8 ++++++-- 5 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/models/project.rb b/app/models/project.rb index fc18ad55..4de836c7 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -104,6 +104,8 @@ class Project < ActiveRecord::Base length: { within: 1..255 } validates :owner, presence: true + validates :issues_enabled, :wall_enabled, :merge_requests_enabled, + :wiki_enabled, inclusion: { in: [true, false] } validate :check_limit validate :repo_name diff --git a/app/roles/issue_commonality.rb b/app/roles/issue_commonality.rb index a8fd679d..ac972a70 100644 --- a/app/roles/issue_commonality.rb +++ b/app/roles/issue_commonality.rb @@ -16,7 +16,7 @@ module IssueCommonality validates :title, presence: true, length: { within: 0..255 } - + validates :closed, inclusion: { in: [true, false] } scope :opened, where(closed: false) scope :closed, where(closed: true) diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb index 69829a4d..ca6307e7 100644 --- a/spec/models/issue_spec.rb +++ b/spec/models/issue_spec.rb @@ -7,6 +7,7 @@ describe Issue do describe "Validation" do it { should ensure_length_of(:description).is_within(0..2000) } + it { should ensure_inclusion_of(:closed).in_array([true, false]) } end describe 'modules' do diff --git a/spec/models/milestone_spec.rb b/spec/models/milestone_spec.rb index fa15fc8f..f0f0f883 100644 --- a/spec/models/milestone_spec.rb +++ b/spec/models/milestone_spec.rb @@ -9,6 +9,7 @@ describe Milestone do describe "Validation" do it { should validate_presence_of(:title) } it { should validate_presence_of(:project_id) } + it { should ensure_inclusion_of(:closed).in_array([true, false]) } end let(:milestone) { Factory :milestone } diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 5add7ff8..756f69de 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -37,6 +37,10 @@ describe Project do # TODO: Formats it { should validate_presence_of(:owner) } + it { should ensure_inclusion_of(:issues_enabled).in_array([true, false]) } + it { should ensure_inclusion_of(:wall_enabled).in_array([true, false]) } + it { should ensure_inclusion_of(:merge_requests_enabled).in_array([true, false]) } + it { should ensure_inclusion_of(:wiki_enabled).in_array([true, false]) } it "should not allow new projects beyond user limits" do project.stub(:owner).and_return(double(can_create_project?: false, projects_limit: 1)) @@ -239,7 +243,7 @@ describe Project do end end - describe :update_merge_requests do + describe :update_merge_requests do let(:project) { Factory :project } before do @@ -259,7 +263,7 @@ describe Project do @merge_request.closed.should be_true end - it "should update merge request commits with new one if pushed to source branch" do + it "should update merge request commits with new one if pushed to source branch" do @merge_request.last_commit.should == nil project.update_merge_requests("8716fc78f3c65bbf7bcf7b574febd583bc5d2812", "bcf03b5de6c33f3869ef70d68cf06e679d1d7f9a", "refs/heads/master", @key.user) @merge_request.reload From 21bfd1e7fc91ce9a1aa34582381c1dec716607f8 Mon Sep 17 00:00:00 2001 From: randx Date: Wed, 5 Sep 2012 23:00:10 +0300 Subject: [PATCH 156/357] minor css improvements --- .../stylesheets/gitlab_bootstrap/files.scss | 2 +- app/assets/stylesheets/sections/header.scss | 4 ++-- app/assets/stylesheets/sections/nav.scss | 24 +++++++++---------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/assets/stylesheets/gitlab_bootstrap/files.scss b/app/assets/stylesheets/gitlab_bootstrap/files.scss index 83903c53..d39fdb27 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/files.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/files.scss @@ -3,7 +3,7 @@ * */ .file_holder { - border:1px solid #CCC; + border:1px solid #BBB; margin-bottom:1em; @include solid_shade; diff --git a/app/assets/stylesheets/sections/header.scss b/app/assets/stylesheets/sections/header.scss index d0fb662e..8328a5ab 100644 --- a/app/assets/stylesheets/sections/header.scss +++ b/app/assets/stylesheets/sections/header.scss @@ -22,7 +22,7 @@ header { * */ .app_logo { - width:230px; + width:200px; float:left; position:relative; top:-5px; @@ -31,7 +31,7 @@ header { h1 { padding-top: 5px; - width:102px; + width:90px; background: url('logo_dark.png') no-repeat 0px -3px; float:left; margin-left:5px; diff --git a/app/assets/stylesheets/sections/nav.scss b/app/assets/stylesheets/sections/nav.scss index 097e8197..6f6a0e8e 100644 --- a/app/assets/stylesheets/sections/nav.scss +++ b/app/assets/stylesheets/sections/nav.scss @@ -2,7 +2,7 @@ * Main Menu of Application * */ -ul.main_menu { +ul.main_menu { border-radius: 4px; margin: auto; margin:30px 0; @@ -12,7 +12,7 @@ ul.main_menu { position:relative; overflow:hidden; @include shade; - .count { + .count { position: relative; top: -1px; display: inline-block; @@ -29,12 +29,12 @@ ul.main_menu { border-radius: 8px; -moz-border-radius: 8px; } - .label { + .label { background:$hover; text-shadow:none; color:$style_color; } - li { + li { list-style-type: none; margin: 0; display: table-cell; @@ -43,7 +43,7 @@ ul.main_menu { border-left: 1px solid #EEE; border-bottom:2px solid #CFCFCF; - &:first-child{ + &:first-child{ -webkit-border-top-left-radius: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-topleft: 4px; @@ -53,31 +53,31 @@ ul.main_menu { border-left: 0; } - &.current { + &.current { background-color:#D5D5D5; - border-bottom: 2px solid $style_color; + border-bottom: 1px solid #AAA; border-right: 1px solid #BBB; border-left: 1px solid #BBB; border-radius: 0 0 1px 1px; - &:first-child{ + &:first-child{ border-bottom:none; border-left:none; } } - &.home { - a { + &.home { + a { background: url(home_icon.PNG) no-repeat center center; text-indent:-9999px; min-width:20px; - img { + img { position:relative; top:4px; } } } } - a { + a { display: block; text-align: center; font-weight:bold; From 8f7360f3901ae27a457f252b1a9a091a857434ee Mon Sep 17 00:00:00 2001 From: miks Date: Wed, 5 Sep 2012 23:01:03 +0300 Subject: [PATCH 157/357] API on adding users to project implemented --- doc/api/projects.md | 15 +++++++++++++++ lib/api/projects.rb | 12 ++++++++++++ spec/requests/api/projects_spec.rb | 12 ++++++++++++ 3 files changed, 39 insertions(+) diff --git a/doc/api/projects.md b/doc/api/projects.md index e029522b..85b88d40 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -106,6 +106,21 @@ Parameters: Will return created project with status `201 Created` on success, or `404 Not found` on fail. +## Add project users + +Add users to exiting project + +``` +PUT /projects/:id/add_users +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `user_ids` (required) - new project name ++ `project_access` (required) - new project name + +Will return updated project with status `200 OK` on success, or `404 Not found` on fail. ## Project repository branches diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 3d4fde92..46e688e4 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -44,6 +44,18 @@ module Gitlab end end + # Add users to project with specified access level + # + # Parameters: + # id (required) - The ID or code name of a project + # user_ids (required) - The ID list of users to add + # project_access (required) - Project access level + # Example Request: + # PUT /projects/:id/add_users + put ":id/add_users" do + user_project.add_users_ids_to_team(params[:user_ids], params[:project_access]) + end + # Get a project repository branches # # Parameters: diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index cc6843cc..f8434654 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -62,6 +62,18 @@ describe Gitlab::API do end end + describe "PUT /projects/:id/add_users" do + @user2 = Factory :user + @user3 = Factory :user + + it "should add users to existing project" do + expect { + put api("/projects/#{project.code}/add_users", user), + user_ids: [@user2.id, @user3.id], project_access: UsersProject::DEVELOPER + }.to change {Project.users_projects.where(:project_access => UsersProject::DEVELOPER).count}.by(2) + end + end + describe "GET /projects/:id" do it "should return a project by id" do get api("/projects/#{project.id}", user) From d480a478c1cb1246e1dad80cc438c5556a3eb33f Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 5 Sep 2012 16:04:41 -0400 Subject: [PATCH 158/357] Add emoji image files --- app/assets/images/emoji/+1.png | Bin 0 -> 5135 bytes app/assets/images/emoji/-1.png | Bin 0 -> 5070 bytes app/assets/images/emoji/100.png | Bin 0 -> 3302 bytes app/assets/images/emoji/109.png | Bin 0 -> 3698 bytes app/assets/images/emoji/1234.png | Bin 0 -> 4751 bytes app/assets/images/emoji/8ball.png | Bin 0 -> 4141 bytes app/assets/images/emoji/a.png | Bin 0 -> 3154 bytes app/assets/images/emoji/ab.png | Bin 0 -> 3859 bytes app/assets/images/emoji/abc.png | Bin 0 -> 4247 bytes app/assets/images/emoji/abcd.png | Bin 0 -> 4471 bytes app/assets/images/emoji/accept.png | Bin 0 -> 4729 bytes app/assets/images/emoji/aerial_tramway.png | Bin 0 -> 3489 bytes app/assets/images/emoji/airplane.png | Bin 0 -> 4740 bytes app/assets/images/emoji/alarm_clock.png | Bin 0 -> 7062 bytes app/assets/images/emoji/alien.png | Bin 0 -> 5457 bytes app/assets/images/emoji/ambulance.png | Bin 0 -> 3708 bytes app/assets/images/emoji/anchor.png | Bin 0 -> 4479 bytes app/assets/images/emoji/angel.png | Bin 0 -> 6672 bytes app/assets/images/emoji/anger.png | Bin 0 -> 3079 bytes app/assets/images/emoji/angry.png | Bin 0 -> 5037 bytes app/assets/images/emoji/ant.png | Bin 0 -> 2851 bytes app/assets/images/emoji/apple.png | Bin 0 -> 5630 bytes app/assets/images/emoji/aquarius.png | Bin 0 -> 5096 bytes app/assets/images/emoji/aries.png | Bin 0 -> 4345 bytes app/assets/images/emoji/arrow_backward.png | Bin 0 -> 3180 bytes app/assets/images/emoji/arrow_double_down.png | Bin 0 -> 3179 bytes app/assets/images/emoji/arrow_double_up.png | Bin 0 -> 3613 bytes app/assets/images/emoji/arrow_down.png | Bin 0 -> 3006 bytes app/assets/images/emoji/arrow_down_small.png | Bin 0 -> 2934 bytes app/assets/images/emoji/arrow_forward.png | Bin 0 -> 3201 bytes app/assets/images/emoji/arrow_heading_down.png | Bin 0 -> 3521 bytes app/assets/images/emoji/arrow_heading_up.png | Bin 0 -> 3520 bytes app/assets/images/emoji/arrow_left.png | Bin 0 -> 3041 bytes app/assets/images/emoji/arrow_lower_left.png | Bin 0 -> 3342 bytes app/assets/images/emoji/arrow_lower_right.png | Bin 0 -> 3334 bytes app/assets/images/emoji/arrow_right.png | Bin 0 -> 3022 bytes app/assets/images/emoji/arrow_right_hook.png | Bin 0 -> 3712 bytes app/assets/images/emoji/arrow_up.png | Bin 0 -> 3073 bytes app/assets/images/emoji/arrow_up_down.png | Bin 0 -> 3544 bytes app/assets/images/emoji/arrow_up_small.png | Bin 0 -> 3198 bytes app/assets/images/emoji/arrow_upper_left.png | Bin 0 -> 3228 bytes app/assets/images/emoji/arrow_upper_right.png | Bin 0 -> 3235 bytes app/assets/images/emoji/arrows_clockwise.png | Bin 0 -> 1399 bytes .../images/emoji/arrows_counterclockwise.png | Bin 0 -> 4823 bytes app/assets/images/emoji/art.png | Bin 0 -> 6744 bytes app/assets/images/emoji/articulated_lorry.png | Bin 0 -> 2938 bytes app/assets/images/emoji/astonished.png | Bin 0 -> 6043 bytes app/assets/images/emoji/atm.png | Bin 0 -> 4072 bytes app/assets/images/emoji/b.png | Bin 0 -> 3025 bytes app/assets/images/emoji/baby.png | Bin 0 -> 5921 bytes app/assets/images/emoji/baby_bottle.png | Bin 0 -> 4461 bytes app/assets/images/emoji/baby_chick.png | Bin 0 -> 3961 bytes app/assets/images/emoji/baby_symbol.png | Bin 0 -> 2967 bytes app/assets/images/emoji/baggage_claim.png | Bin 0 -> 3502 bytes app/assets/images/emoji/balloon.png | Bin 0 -> 2300 bytes .../images/emoji/ballot_box_with_check.png | Bin 0 -> 1829 bytes app/assets/images/emoji/bamboo.png | Bin 0 -> 4672 bytes app/assets/images/emoji/banana.png | Bin 0 -> 3915 bytes app/assets/images/emoji/bangbang.png | Bin 0 -> 1387 bytes app/assets/images/emoji/bank.png | Bin 0 -> 5583 bytes app/assets/images/emoji/bar_chart.png | Bin 0 -> 2460 bytes app/assets/images/emoji/barber.png | Bin 0 -> 4252 bytes app/assets/images/emoji/baseball.png | Bin 0 -> 6032 bytes app/assets/images/emoji/basketball.png | Bin 0 -> 6386 bytes app/assets/images/emoji/bath.png | Bin 0 -> 3210 bytes app/assets/images/emoji/bathtub.png | Bin 0 -> 2784 bytes app/assets/images/emoji/battery.png | Bin 0 -> 3812 bytes app/assets/images/emoji/bear.png | Bin 0 -> 5561 bytes app/assets/images/emoji/beer.png | Bin 0 -> 6097 bytes app/assets/images/emoji/beers.png | Bin 0 -> 6591 bytes app/assets/images/emoji/beetle.png | Bin 0 -> 5255 bytes app/assets/images/emoji/beginner.png | Bin 0 -> 2761 bytes app/assets/images/emoji/bell.png | Bin 0 -> 4859 bytes app/assets/images/emoji/bento.png | Bin 0 -> 5732 bytes app/assets/images/emoji/bicyclist.png | Bin 0 -> 6484 bytes app/assets/images/emoji/bike.png | Bin 0 -> 4722 bytes app/assets/images/emoji/bikini.png | Bin 0 -> 3890 bytes app/assets/images/emoji/bird.png | Bin 0 -> 4878 bytes app/assets/images/emoji/birthday.png | Bin 0 -> 5404 bytes app/assets/images/emoji/black_circle.png | Bin 0 -> 2369 bytes app/assets/images/emoji/black_joker.png | Bin 0 -> 3877 bytes app/assets/images/emoji/black_nib.png | Bin 0 -> 2352 bytes app/assets/images/emoji/black_square.png | Bin 0 -> 1332 bytes app/assets/images/emoji/blossom.png | Bin 0 -> 4232 bytes app/assets/images/emoji/blowfish.png | Bin 0 -> 3751 bytes app/assets/images/emoji/blue_book.png | Bin 0 -> 5092 bytes app/assets/images/emoji/blue_car.png | Bin 0 -> 4081 bytes app/assets/images/emoji/blue_heart.png | Bin 0 -> 4094 bytes app/assets/images/emoji/blush.png | Bin 0 -> 5188 bytes app/assets/images/emoji/boar.png | Bin 0 -> 4840 bytes app/assets/images/emoji/boat.png | Bin 0 -> 3833 bytes app/assets/images/emoji/bomb.png | Bin 0 -> 5208 bytes app/assets/images/emoji/book.png | Bin 0 -> 6050 bytes app/assets/images/emoji/bookmark.png | Bin 0 -> 4696 bytes app/assets/images/emoji/bookmark_tabs.png | Bin 0 -> 3162 bytes app/assets/images/emoji/books.png | Bin 0 -> 6539 bytes app/assets/images/emoji/boot.png | Bin 0 -> 3327 bytes app/assets/images/emoji/bouquet.png | Bin 0 -> 6915 bytes app/assets/images/emoji/bow.png | Bin 0 -> 5143 bytes app/assets/images/emoji/bowling.png | Bin 0 -> 4184 bytes app/assets/images/emoji/bowtie.png | Bin 0 -> 6478 bytes app/assets/images/emoji/boy.png | Bin 0 -> 5946 bytes app/assets/images/emoji/bread.png | Bin 0 -> 6214 bytes app/assets/images/emoji/bride_with_veil.png | Bin 0 -> 8515 bytes app/assets/images/emoji/bridge_at_night.png | Bin 0 -> 5137 bytes app/assets/images/emoji/briefcase.png | Bin 0 -> 2698 bytes app/assets/images/emoji/broken_heart.png | Bin 0 -> 4118 bytes app/assets/images/emoji/bug.png | Bin 0 -> 5945 bytes app/assets/images/emoji/bulb.png | Bin 0 -> 4490 bytes app/assets/images/emoji/bullettrain_front.png | Bin 0 -> 4992 bytes app/assets/images/emoji/bullettrain_side.png | Bin 0 -> 3842 bytes app/assets/images/emoji/bus.png | Bin 0 -> 4065 bytes app/assets/images/emoji/busstop.png | Bin 0 -> 1676 bytes app/assets/images/emoji/bust_in_silhouette.png | Bin 0 -> 2007 bytes app/assets/images/emoji/busts_in_silhouette.png | Bin 0 -> 3021 bytes app/assets/images/emoji/cactus.png | Bin 0 -> 4509 bytes app/assets/images/emoji/cake.png | Bin 0 -> 6129 bytes app/assets/images/emoji/calendar.png | Bin 0 -> 2920 bytes app/assets/images/emoji/calling.png | Bin 0 -> 4037 bytes app/assets/images/emoji/camel.png | Bin 0 -> 4485 bytes app/assets/images/emoji/camera.png | Bin 0 -> 4661 bytes app/assets/images/emoji/cancer.png | Bin 0 -> 5384 bytes app/assets/images/emoji/candy.png | Bin 0 -> 4502 bytes app/assets/images/emoji/capital_abcd.png | Bin 0 -> 5136 bytes app/assets/images/emoji/capricorn.png | Bin 0 -> 4670 bytes app/assets/images/emoji/car.png | Bin 0 -> 4278 bytes app/assets/images/emoji/card_index.png | Bin 0 -> 3749 bytes app/assets/images/emoji/carousel_horse.png | Bin 0 -> 5893 bytes app/assets/images/emoji/cat.png | Bin 0 -> 5987 bytes app/assets/images/emoji/cat2.png | Bin 0 -> 5723 bytes app/assets/images/emoji/cd.png | Bin 0 -> 6718 bytes app/assets/images/emoji/chart.png | Bin 0 -> 4331 bytes .../images/emoji/chart_with_downwards_trend.png | Bin 0 -> 2910 bytes .../images/emoji/chart_with_upwards_trend.png | Bin 0 -> 2939 bytes app/assets/images/emoji/checkered_flag.png | Bin 0 -> 1675 bytes app/assets/images/emoji/cherries.png | Bin 0 -> 5604 bytes app/assets/images/emoji/cherry_blossom.png | Bin 0 -> 7174 bytes app/assets/images/emoji/chestnut.png | Bin 0 -> 5875 bytes app/assets/images/emoji/chicken.png | Bin 0 -> 3988 bytes app/assets/images/emoji/children_crossing.png | Bin 0 -> 3460 bytes app/assets/images/emoji/chocolate_bar.png | Bin 0 -> 5249 bytes app/assets/images/emoji/christmas_tree.png | Bin 0 -> 4721 bytes app/assets/images/emoji/church.png | Bin 0 -> 4653 bytes app/assets/images/emoji/cinema.png | Bin 0 -> 3573 bytes app/assets/images/emoji/circus_tent.png | Bin 0 -> 4683 bytes app/assets/images/emoji/city_sunrise.png | Bin 0 -> 4312 bytes app/assets/images/emoji/city_sunset.png | Bin 0 -> 3841 bytes app/assets/images/emoji/cl.png | Bin 0 -> 3493 bytes app/assets/images/emoji/clap.png | Bin 0 -> 7110 bytes app/assets/images/emoji/clapper.png | Bin 0 -> 4192 bytes app/assets/images/emoji/clipboard.png | Bin 0 -> 4663 bytes app/assets/images/emoji/clock1.png | Bin 0 -> 2590 bytes app/assets/images/emoji/clock10.png | Bin 0 -> 2590 bytes app/assets/images/emoji/clock1030.png | Bin 0 -> 2864 bytes app/assets/images/emoji/clock11.png | Bin 0 -> 2587 bytes app/assets/images/emoji/clock1130.png | Bin 0 -> 2854 bytes app/assets/images/emoji/clock12.png | Bin 0 -> 2504 bytes app/assets/images/emoji/clock1230.png | Bin 0 -> 2797 bytes app/assets/images/emoji/clock130.png | Bin 0 -> 2842 bytes app/assets/images/emoji/clock2.png | Bin 0 -> 2595 bytes app/assets/images/emoji/clock230.png | Bin 0 -> 2853 bytes app/assets/images/emoji/clock3.png | Bin 0 -> 2492 bytes app/assets/images/emoji/clock330.png | Bin 0 -> 2739 bytes app/assets/images/emoji/clock4.png | Bin 0 -> 2619 bytes app/assets/images/emoji/clock430.png | Bin 0 -> 2847 bytes app/assets/images/emoji/clock5.png | Bin 0 -> 2624 bytes app/assets/images/emoji/clock530.png | Bin 0 -> 2832 bytes app/assets/images/emoji/clock6.png | Bin 0 -> 2577 bytes app/assets/images/emoji/clock630.png | Bin 0 -> 2730 bytes app/assets/images/emoji/clock7.png | Bin 0 -> 2615 bytes app/assets/images/emoji/clock730.png | Bin 0 -> 2820 bytes app/assets/images/emoji/clock8.png | Bin 0 -> 2603 bytes app/assets/images/emoji/clock830.png | Bin 0 -> 2847 bytes app/assets/images/emoji/clock9.png | Bin 0 -> 2486 bytes app/assets/images/emoji/clock930.png | Bin 0 -> 2746 bytes app/assets/images/emoji/closed_book.png | Bin 0 -> 4847 bytes app/assets/images/emoji/closed_lock_with_key.png | Bin 0 -> 5701 bytes app/assets/images/emoji/closed_umbrella.png | Bin 0 -> 3868 bytes app/assets/images/emoji/cloud.png | Bin 0 -> 3860 bytes app/assets/images/emoji/clubs.png | Bin 0 -> 1685 bytes app/assets/images/emoji/cn.png | Bin 0 -> 3634 bytes app/assets/images/emoji/cocktail.png | Bin 0 -> 2949 bytes app/assets/images/emoji/coffee.png | Bin 0 -> 4306 bytes app/assets/images/emoji/cold_sweat.png | Bin 0 -> 5972 bytes app/assets/images/emoji/collision.png | Bin 0 -> 3781 bytes app/assets/images/emoji/computer.png | Bin 0 -> 1705 bytes app/assets/images/emoji/confetti_ball.png | Bin 0 -> 5521 bytes app/assets/images/emoji/confounded.png | Bin 0 -> 5857 bytes app/assets/images/emoji/congratulations.png | Bin 0 -> 4883 bytes app/assets/images/emoji/construction.png | Bin 0 -> 3700 bytes app/assets/images/emoji/construction_worker.png | Bin 0 -> 6193 bytes app/assets/images/emoji/convenience_store.png | Bin 0 -> 4073 bytes app/assets/images/emoji/cookie.png | Bin 0 -> 8149 bytes app/assets/images/emoji/cool.png | Bin 0 -> 4182 bytes app/assets/images/emoji/cop.png | Bin 0 -> 7141 bytes app/assets/images/emoji/copyright.png | Bin 0 -> 1579 bytes app/assets/images/emoji/corn.png | Bin 0 -> 6694 bytes app/assets/images/emoji/couple.png | Bin 0 -> 7615 bytes app/assets/images/emoji/couple_with_heart.png | Bin 0 -> 7370 bytes app/assets/images/emoji/couplekiss.png | Bin 0 -> 7219 bytes app/assets/images/emoji/cow.png | Bin 0 -> 5745 bytes app/assets/images/emoji/cow2.png | Bin 0 -> 5303 bytes app/assets/images/emoji/credit_card.png | Bin 0 -> 2648 bytes app/assets/images/emoji/crocodile.png | Bin 0 -> 6125 bytes app/assets/images/emoji/crossed_flags.png | Bin 0 -> 4015 bytes app/assets/images/emoji/crown.png | Bin 0 -> 5655 bytes app/assets/images/emoji/cry.png | Bin 0 -> 5699 bytes app/assets/images/emoji/crying_cat_face.png | Bin 0 -> 6682 bytes app/assets/images/emoji/crystal_ball.png | Bin 0 -> 6236 bytes app/assets/images/emoji/cupid.png | Bin 0 -> 5413 bytes app/assets/images/emoji/curly_loop.png | Bin 0 -> 1264 bytes app/assets/images/emoji/currency_exchange.png | Bin 0 -> 1959 bytes app/assets/images/emoji/curry.png | Bin 0 -> 5336 bytes app/assets/images/emoji/custard.png | Bin 0 -> 5810 bytes app/assets/images/emoji/customs.png | Bin 0 -> 3899 bytes app/assets/images/emoji/cyclone.png | Bin 0 -> 4890 bytes app/assets/images/emoji/dancer.png | Bin 0 -> 3737 bytes app/assets/images/emoji/dancers.png | Bin 0 -> 7918 bytes app/assets/images/emoji/dango.png | Bin 0 -> 4449 bytes app/assets/images/emoji/dart.png | Bin 0 -> 5462 bytes app/assets/images/emoji/dash.png | Bin 0 -> 5448 bytes app/assets/images/emoji/date.png | Bin 0 -> 2977 bytes app/assets/images/emoji/de.png | Bin 0 -> 2640 bytes app/assets/images/emoji/deciduous_tree.png | Bin 0 -> 7374 bytes app/assets/images/emoji/department_store.png | Bin 0 -> 5159 bytes .../emoji/diamond_shape_with_a_dot_inside.png | Bin 0 -> 5698 bytes app/assets/images/emoji/diamonds.png | Bin 0 -> 2785 bytes app/assets/images/emoji/disappointed.png | Bin 0 -> 4764 bytes app/assets/images/emoji/dizzy.png | Bin 0 -> 3044 bytes app/assets/images/emoji/dizzy_face.png | Bin 0 -> 6278 bytes app/assets/images/emoji/do_not_litter.png | Bin 0 -> 5277 bytes app/assets/images/emoji/dog.png | Bin 0 -> 5945 bytes app/assets/images/emoji/dog2.png | Bin 0 -> 5931 bytes app/assets/images/emoji/dollar.png | Bin 0 -> 4622 bytes app/assets/images/emoji/dolls.png | Bin 0 -> 7138 bytes app/assets/images/emoji/dolphin.png | Bin 0 -> 4343 bytes app/assets/images/emoji/door.png | Bin 0 -> 3310 bytes app/assets/images/emoji/doughnut.png | Bin 0 -> 5209 bytes app/assets/images/emoji/dragon.png | Bin 0 -> 7828 bytes app/assets/images/emoji/dragon_face.png | Bin 0 -> 6737 bytes app/assets/images/emoji/dress.png | Bin 0 -> 3631 bytes app/assets/images/emoji/dromedary_camel.png | Bin 0 -> 5139 bytes app/assets/images/emoji/droplet.png | Bin 0 -> 3278 bytes app/assets/images/emoji/dvd.png | Bin 0 -> 6993 bytes app/assets/images/emoji/e-mail.png | Bin 0 -> 2128 bytes app/assets/images/emoji/ear.png | Bin 0 -> 4335 bytes app/assets/images/emoji/ear_of_rice.png | Bin 0 -> 4758 bytes app/assets/images/emoji/earth_africa.png | Bin 0 -> 7164 bytes app/assets/images/emoji/earth_americas.png | Bin 0 -> 7039 bytes app/assets/images/emoji/earth_asia.png | Bin 0 -> 7303 bytes app/assets/images/emoji/egg.png | Bin 0 -> 5211 bytes app/assets/images/emoji/eggplant.png | Bin 0 -> 4672 bytes app/assets/images/emoji/eight.png | Bin 0 -> 3844 bytes .../images/emoji/eight_pointed_black_star.png | Bin 0 -> 3289 bytes .../images/emoji/eight_spoked_asterisk.png | Bin 0 -> 4012 bytes app/assets/images/emoji/electric_plug.png | Bin 0 -> 2819 bytes app/assets/images/emoji/elephant.png | Bin 0 -> 5086 bytes app/assets/images/emoji/email.png | Bin 0 -> 2697 bytes app/assets/images/emoji/end.png | Bin 0 -> 1475 bytes app/assets/images/emoji/envelope.png | Bin 0 -> 1655 bytes app/assets/images/emoji/es.png | Bin 0 -> 4302 bytes app/assets/images/emoji/euro.png | Bin 0 -> 3942 bytes app/assets/images/emoji/european_castle.png | Bin 0 -> 5427 bytes app/assets/images/emoji/european_post_office.png | Bin 0 -> 4816 bytes app/assets/images/emoji/evergreen_tree.png | Bin 0 -> 4924 bytes app/assets/images/emoji/exclamation.png | Bin 0 -> 1175 bytes app/assets/images/emoji/eyeglasses.png | Bin 0 -> 4929 bytes app/assets/images/emoji/eyes.png | Bin 0 -> 4398 bytes app/assets/images/emoji/facepunch.png | Bin 0 -> 4873 bytes app/assets/images/emoji/factory.png | Bin 0 -> 5558 bytes app/assets/images/emoji/fallen_leaf.png | Bin 0 -> 4890 bytes app/assets/images/emoji/family.png | Bin 0 -> 7211 bytes app/assets/images/emoji/fast_forward.png | Bin 0 -> 3105 bytes app/assets/images/emoji/fax.png | Bin 0 -> 4650 bytes app/assets/images/emoji/fearful.png | Bin 0 -> 5600 bytes app/assets/images/emoji/feelsgood.png | Bin 0 -> 1150 bytes app/assets/images/emoji/feet.png | Bin 0 -> 1529 bytes app/assets/images/emoji/ferris_wheel.png | Bin 0 -> 6213 bytes app/assets/images/emoji/file_folder.png | Bin 0 -> 4013 bytes app/assets/images/emoji/finnadie.png | Bin 0 -> 1186 bytes app/assets/images/emoji/fire.png | Bin 0 -> 3886 bytes app/assets/images/emoji/fire_engine.png | Bin 0 -> 4862 bytes app/assets/images/emoji/fireworks.png | Bin 0 -> 6269 bytes app/assets/images/emoji/first_quarter_moon.png | Bin 0 -> 5967 bytes .../emoji/first_quarter_moon_with_face.png | Bin 0 -> 4280 bytes app/assets/images/emoji/fish.png | Bin 0 -> 4721 bytes app/assets/images/emoji/fish_cake.png | Bin 0 -> 5818 bytes .../images/emoji/fishing_pole_and_fish.png | Bin 0 -> 4470 bytes app/assets/images/emoji/fist.png | Bin 0 -> 5880 bytes app/assets/images/emoji/five.png | Bin 0 -> 3593 bytes app/assets/images/emoji/flags.png | Bin 0 -> 6124 bytes app/assets/images/emoji/flashlight.png | Bin 0 -> 5024 bytes app/assets/images/emoji/floppy_disk.png | Bin 0 -> 3215 bytes app/assets/images/emoji/flower_playing_cards.png | Bin 0 -> 3434 bytes app/assets/images/emoji/flushed.png | Bin 0 -> 5845 bytes app/assets/images/emoji/foggy.png | Bin 0 -> 4623 bytes app/assets/images/emoji/football.png | Bin 0 -> 6712 bytes app/assets/images/emoji/fork_and_knife.png | Bin 0 -> 3608 bytes app/assets/images/emoji/fountain.png | Bin 0 -> 5087 bytes app/assets/images/emoji/four.png | Bin 0 -> 3176 bytes app/assets/images/emoji/four_leaf_clover.png | Bin 0 -> 5995 bytes app/assets/images/emoji/fr.png | Bin 0 -> 3398 bytes app/assets/images/emoji/free.png | Bin 0 -> 3605 bytes app/assets/images/emoji/fried_shrimp.png | Bin 0 -> 7550 bytes app/assets/images/emoji/fries.png | Bin 0 -> 6405 bytes app/assets/images/emoji/frog.png | Bin 0 -> 4823 bytes app/assets/images/emoji/fuelpump.png | Bin 0 -> 4296 bytes app/assets/images/emoji/full_moon.png | Bin 0 -> 6458 bytes app/assets/images/emoji/full_moon_with_face.png | Bin 0 -> 7224 bytes app/assets/images/emoji/game_die.png | Bin 0 -> 2957 bytes app/assets/images/emoji/gb.png | Bin 0 -> 5894 bytes app/assets/images/emoji/gem.png | Bin 0 -> 4855 bytes app/assets/images/emoji/gemini.png | Bin 0 -> 4296 bytes app/assets/images/emoji/ghost.png | Bin 0 -> 4513 bytes app/assets/images/emoji/gift.png | Bin 0 -> 6712 bytes app/assets/images/emoji/gift_heart.png | Bin 0 -> 6013 bytes app/assets/images/emoji/girl.png | Bin 0 -> 6314 bytes app/assets/images/emoji/globe_with_meridians.png | Bin 0 -> 5837 bytes app/assets/images/emoji/goat.png | Bin 0 -> 4889 bytes app/assets/images/emoji/goberserk.png | Bin 0 -> 1334 bytes app/assets/images/emoji/godmode.png | Bin 0 -> 1042 bytes app/assets/images/emoji/golf.png | Bin 0 -> 3548 bytes app/assets/images/emoji/grapes.png | Bin 0 -> 5423 bytes app/assets/images/emoji/green_apple.png | Bin 0 -> 6205 bytes app/assets/images/emoji/green_book.png | Bin 0 -> 5090 bytes app/assets/images/emoji/green_heart.png | Bin 0 -> 4432 bytes app/assets/images/emoji/grey_exclamation.png | Bin 0 -> 1142 bytes app/assets/images/emoji/grey_question.png | Bin 0 -> 1057 bytes app/assets/images/emoji/grin.png | Bin 0 -> 5721 bytes app/assets/images/emoji/guardsman.png | Bin 0 -> 3587 bytes app/assets/images/emoji/guitar.png | Bin 0 -> 4382 bytes app/assets/images/emoji/gun.png | Bin 0 -> 3161 bytes app/assets/images/emoji/haircut.png | Bin 0 -> 7100 bytes app/assets/images/emoji/hamburger.png | Bin 0 -> 5706 bytes app/assets/images/emoji/hammer.png | Bin 0 -> 3670 bytes app/assets/images/emoji/hamster.png | Bin 0 -> 7221 bytes app/assets/images/emoji/hand.png | Bin 0 -> 4161 bytes app/assets/images/emoji/handbag.png | Bin 0 -> 5449 bytes app/assets/images/emoji/hankey.png | Bin 0 -> 4754 bytes app/assets/images/emoji/hash.png | Bin 0 -> 3742 bytes app/assets/images/emoji/hatched_chick.png | Bin 0 -> 5646 bytes app/assets/images/emoji/hatching_chick.png | Bin 0 -> 5928 bytes app/assets/images/emoji/headphones.png | Bin 0 -> 1910 bytes app/assets/images/emoji/hear_no_evil.png | Bin 0 -> 6550 bytes app/assets/images/emoji/heart.png | Bin 0 -> 3302 bytes app/assets/images/emoji/heart_decoration.png | Bin 0 -> 3507 bytes app/assets/images/emoji/heart_eyes.png | Bin 0 -> 5758 bytes app/assets/images/emoji/heart_eyes_cat.png | Bin 0 -> 6176 bytes app/assets/images/emoji/heartbeat.png | Bin 0 -> 4052 bytes app/assets/images/emoji/heartpulse.png | Bin 0 -> 6269 bytes app/assets/images/emoji/hearts.png | Bin 0 -> 2925 bytes app/assets/images/emoji/heavy_check_mark.png | Bin 0 -> 1103 bytes app/assets/images/emoji/heavy_division_sign.png | Bin 0 -> 340 bytes app/assets/images/emoji/heavy_dollar_sign.png | Bin 0 -> 1416 bytes .../images/emoji/heavy_exclamation_mark.png | Bin 0 -> 1315 bytes app/assets/images/emoji/heavy_minus_sign.png | Bin 0 -> 197 bytes .../images/emoji/heavy_multiplication_x.png | Bin 0 -> 591 bytes app/assets/images/emoji/heavy_plus_sign.png | Bin 0 -> 315 bytes app/assets/images/emoji/helicopter.png | Bin 0 -> 4100 bytes app/assets/images/emoji/herb.png | Bin 0 -> 5889 bytes app/assets/images/emoji/hibiscus.png | Bin 0 -> 8322 bytes app/assets/images/emoji/high_brightness.png | Bin 0 -> 4060 bytes app/assets/images/emoji/high_heel.png | Bin 0 -> 4557 bytes app/assets/images/emoji/hocho.png | Bin 0 -> 2506 bytes app/assets/images/emoji/honey_pot.png | Bin 0 -> 5830 bytes app/assets/images/emoji/honeybee.png | Bin 0 -> 5851 bytes app/assets/images/emoji/horse.png | Bin 0 -> 4582 bytes app/assets/images/emoji/horse_racing.png | Bin 0 -> 5905 bytes app/assets/images/emoji/hospital.png | Bin 0 -> 4887 bytes app/assets/images/emoji/hotel.png | Bin 0 -> 5123 bytes app/assets/images/emoji/hotsprings.png | Bin 0 -> 3538 bytes app/assets/images/emoji/hourglass.png | Bin 0 -> 4492 bytes app/assets/images/emoji/house.png | Bin 0 -> 3510 bytes app/assets/images/emoji/hurtrealbad.png | Bin 0 -> 1456 bytes app/assets/images/emoji/ice_cream.png | Bin 0 -> 5469 bytes app/assets/images/emoji/icecream.png | Bin 0 -> 4603 bytes app/assets/images/emoji/id.png | Bin 0 -> 3905 bytes app/assets/images/emoji/ideograph_advantage.png | Bin 0 -> 3095 bytes app/assets/images/emoji/imp.png | Bin 0 -> 6631 bytes app/assets/images/emoji/inbox_tray.png | Bin 0 -> 3700 bytes app/assets/images/emoji/incoming_envelope.png | Bin 0 -> 2206 bytes .../images/emoji/information_desk_person.png | Bin 0 -> 6605 bytes app/assets/images/emoji/information_source.png | Bin 0 -> 3670 bytes app/assets/images/emoji/innocent.png | Bin 0 -> 7000 bytes app/assets/images/emoji/interrobang.png | Bin 0 -> 2875 bytes app/assets/images/emoji/iphone.png | Bin 0 -> 3499 bytes app/assets/images/emoji/it.png | Bin 0 -> 3495 bytes app/assets/images/emoji/izakaya_lantern.png | Bin 0 -> 4064 bytes app/assets/images/emoji/jack_o_lantern.png | Bin 0 -> 5633 bytes app/assets/images/emoji/japan.png | Bin 0 -> 4085 bytes app/assets/images/emoji/japanese_castle.png | Bin 0 -> 4939 bytes app/assets/images/emoji/japanese_goblin.png | Bin 0 -> 5159 bytes app/assets/images/emoji/japanese_ogre.png | Bin 0 -> 7147 bytes app/assets/images/emoji/jeans.png | Bin 0 -> 3470 bytes app/assets/images/emoji/joy.png | Bin 0 -> 6339 bytes app/assets/images/emoji/joy_cat.png | Bin 0 -> 7190 bytes app/assets/images/emoji/jp.png | Bin 0 -> 2827 bytes app/assets/images/emoji/key.png | Bin 0 -> 3452 bytes app/assets/images/emoji/keycap_ten.png | Bin 0 -> 4095 bytes app/assets/images/emoji/kimono.png | Bin 0 -> 4938 bytes app/assets/images/emoji/kiss.png | Bin 0 -> 6276 bytes app/assets/images/emoji/kissing_cat.png | Bin 0 -> 6801 bytes app/assets/images/emoji/kissing_face.png | Bin 0 -> 5563 bytes app/assets/images/emoji/kissing_heart.png | Bin 0 -> 5767 bytes app/assets/images/emoji/koala.png | Bin 0 -> 5687 bytes app/assets/images/emoji/koko.png | Bin 0 -> 2854 bytes app/assets/images/emoji/kr.png | Bin 0 -> 5105 bytes app/assets/images/emoji/large_blue_circle.png | Bin 0 -> 4637 bytes app/assets/images/emoji/large_blue_diamond.png | Bin 0 -> 3790 bytes app/assets/images/emoji/large_orange_diamond.png | Bin 0 -> 3899 bytes app/assets/images/emoji/last_quarter_moon.png | Bin 0 -> 6176 bytes .../images/emoji/last_quarter_moon_with_face.png | Bin 0 -> 4328 bytes app/assets/images/emoji/laughing.png | Bin 0 -> 6347 bytes app/assets/images/emoji/leaves.png | Bin 0 -> 5571 bytes app/assets/images/emoji/ledger.png | Bin 0 -> 5921 bytes app/assets/images/emoji/left_luggage.png | Bin 0 -> 4025 bytes app/assets/images/emoji/left_right_arrow.png | Bin 0 -> 3413 bytes .../images/emoji/leftwards_arrow_with_hook.png | Bin 0 -> 3775 bytes app/assets/images/emoji/lemon.png | Bin 0 -> 6055 bytes app/assets/images/emoji/leo.png | Bin 0 -> 4913 bytes app/assets/images/emoji/leopard.png | Bin 0 -> 5384 bytes app/assets/images/emoji/libra.png | Bin 0 -> 4229 bytes app/assets/images/emoji/light_rail.png | Bin 0 -> 3792 bytes app/assets/images/emoji/link.png | Bin 0 -> 2652 bytes app/assets/images/emoji/lips.png | Bin 0 -> 3738 bytes app/assets/images/emoji/lipstick.png | Bin 0 -> 3384 bytes app/assets/images/emoji/lock.png | Bin 0 -> 3676 bytes app/assets/images/emoji/lock_with_ink_pen.png | Bin 0 -> 4967 bytes app/assets/images/emoji/lollipop.png | Bin 0 -> 5771 bytes app/assets/images/emoji/loop.png | Bin 0 -> 3417 bytes app/assets/images/emoji/loudspeaker.png | Bin 0 -> 6001 bytes app/assets/images/emoji/love_hotel.png | Bin 0 -> 5941 bytes app/assets/images/emoji/love_letter.png | Bin 0 -> 2467 bytes app/assets/images/emoji/low_brightness.png | Bin 0 -> 2498 bytes app/assets/images/emoji/m.png | Bin 0 -> 4737 bytes app/assets/images/emoji/mag.png | Bin 0 -> 3040 bytes app/assets/images/emoji/mag_right.png | Bin 0 -> 3629 bytes app/assets/images/emoji/mahjong.png | Bin 0 -> 3309 bytes app/assets/images/emoji/mailbox.png | Bin 0 -> 4196 bytes app/assets/images/emoji/mailbox_closed.png | Bin 0 -> 4360 bytes app/assets/images/emoji/mailbox_with_mail.png | Bin 0 -> 4581 bytes app/assets/images/emoji/mailbox_with_no_mail.png | Bin 0 -> 3101 bytes app/assets/images/emoji/man.png | Bin 0 -> 6023 bytes app/assets/images/emoji/man_with_gua_pi_mao.png | Bin 0 -> 5324 bytes app/assets/images/emoji/man_with_turban.png | Bin 0 -> 6528 bytes app/assets/images/emoji/mans_shoe.png | Bin 0 -> 4749 bytes app/assets/images/emoji/maple_leaf.png | Bin 0 -> 4450 bytes app/assets/images/emoji/mask.png | Bin 0 -> 5235 bytes app/assets/images/emoji/massage.png | Bin 0 -> 6036 bytes app/assets/images/emoji/meat_on_bone.png | Bin 0 -> 5534 bytes app/assets/images/emoji/mega.png | Bin 0 -> 4680 bytes app/assets/images/emoji/melon.png | Bin 0 -> 8233 bytes app/assets/images/emoji/memo.png | Bin 0 -> 4945 bytes app/assets/images/emoji/mens.png | Bin 0 -> 3368 bytes app/assets/images/emoji/metal.png | Bin 0 -> 3098 bytes app/assets/images/emoji/metro.png | Bin 0 -> 3402 bytes app/assets/images/emoji/microphone.png | Bin 0 -> 3680 bytes app/assets/images/emoji/microscope.png | Bin 0 -> 4141 bytes app/assets/images/emoji/milky_way.png | Bin 0 -> 5878 bytes app/assets/images/emoji/minibus.png | Bin 0 -> 3113 bytes app/assets/images/emoji/minidisc.png | Bin 0 -> 5594 bytes app/assets/images/emoji/mobile_phone_off.png | Bin 0 -> 3521 bytes app/assets/images/emoji/money_with_wings.png | Bin 0 -> 7586 bytes app/assets/images/emoji/moneybag.png | Bin 0 -> 5500 bytes app/assets/images/emoji/monkey.png | Bin 0 -> 4973 bytes app/assets/images/emoji/monkey_face.png | Bin 0 -> 5348 bytes app/assets/images/emoji/monorail.png | Bin 0 -> 4311 bytes app/assets/images/emoji/moon.png | Bin 0 -> 3541 bytes app/assets/images/emoji/mortar_board.png | Bin 0 -> 4165 bytes app/assets/images/emoji/mount_fuji.png | Bin 0 -> 5004 bytes app/assets/images/emoji/mountain_bicyclist.png | Bin 0 -> 9511 bytes app/assets/images/emoji/mountain_cableway.png | Bin 0 -> 4405 bytes app/assets/images/emoji/mountain_railway.png | Bin 0 -> 7448 bytes app/assets/images/emoji/mouse.png | Bin 0 -> 6625 bytes app/assets/images/emoji/mouse2.png | Bin 0 -> 4087 bytes app/assets/images/emoji/movie_camera.png | Bin 0 -> 4081 bytes app/assets/images/emoji/moyai.png | Bin 0 -> 2166 bytes app/assets/images/emoji/muscle.png | Bin 0 -> 4672 bytes app/assets/images/emoji/mushroom.png | Bin 0 -> 4887 bytes app/assets/images/emoji/musical_keyboard.png | Bin 0 -> 1944 bytes app/assets/images/emoji/musical_note.png | Bin 0 -> 3188 bytes app/assets/images/emoji/musical_score.png | Bin 0 -> 1576 bytes app/assets/images/emoji/mute.png | Bin 0 -> 6635 bytes app/assets/images/emoji/nail_care.png | Bin 0 -> 5814 bytes app/assets/images/emoji/name_badge.png | Bin 0 -> 3985 bytes app/assets/images/emoji/neckbeard.png | Bin 0 -> 6421 bytes app/assets/images/emoji/necktie.png | Bin 0 -> 6116 bytes .../images/emoji/negative_squared_cross_mark.png | Bin 0 -> 3853 bytes app/assets/images/emoji/neutral_face.png | Bin 0 -> 4843 bytes app/assets/images/emoji/new.png | Bin 0 -> 3927 bytes app/assets/images/emoji/new_moon.png | Bin 0 -> 5371 bytes app/assets/images/emoji/new_moon_with_face.png | Bin 0 -> 6750 bytes app/assets/images/emoji/newspaper.png | Bin 0 -> 5198 bytes app/assets/images/emoji/ng.png | Bin 0 -> 4201 bytes app/assets/images/emoji/nine.png | Bin 0 -> 3776 bytes app/assets/images/emoji/no_bell.png | Bin 0 -> 5944 bytes app/assets/images/emoji/no_bicycles.png | Bin 0 -> 5661 bytes app/assets/images/emoji/no_entry.png | Bin 0 -> 3514 bytes app/assets/images/emoji/no_entry_sign.png | Bin 0 -> 3288 bytes app/assets/images/emoji/no_good.png | Bin 0 -> 7034 bytes app/assets/images/emoji/no_mobile_phones.png | Bin 0 -> 5083 bytes app/assets/images/emoji/no_mouth.png | Bin 0 -> 4732 bytes app/assets/images/emoji/no_pedestrians.png | Bin 0 -> 5487 bytes app/assets/images/emoji/no_smoking.png | Bin 0 -> 4212 bytes app/assets/images/emoji/non-potable_water.png | Bin 0 -> 5202 bytes app/assets/images/emoji/nose.png | Bin 0 -> 3703 bytes app/assets/images/emoji/notebook.png | Bin 0 -> 6036 bytes .../emoji/notebook_with_decorative_cover.png | Bin 0 -> 5329 bytes app/assets/images/emoji/notes.png | Bin 0 -> 1536 bytes app/assets/images/emoji/nut_and_bolt.png | Bin 0 -> 2169 bytes app/assets/images/emoji/o.png | Bin 0 -> 2542 bytes app/assets/images/emoji/o2.png | Bin 0 -> 3498 bytes app/assets/images/emoji/ocean.png | Bin 0 -> 5777 bytes app/assets/images/emoji/octocat.png | Bin 0 -> 3933 bytes app/assets/images/emoji/octopus.png | Bin 0 -> 5779 bytes app/assets/images/emoji/oden.png | Bin 0 -> 5543 bytes app/assets/images/emoji/office.png | Bin 0 -> 5162 bytes app/assets/images/emoji/ok.png | Bin 0 -> 4158 bytes app/assets/images/emoji/ok_hand.png | Bin 0 -> 4598 bytes app/assets/images/emoji/ok_woman.png | Bin 0 -> 7527 bytes app/assets/images/emoji/older_man.png | Bin 0 -> 6733 bytes app/assets/images/emoji/older_woman.png | Bin 0 -> 5977 bytes app/assets/images/emoji/on.png | Bin 0 -> 1806 bytes app/assets/images/emoji/oncoming_automobile.png | Bin 0 -> 7469 bytes app/assets/images/emoji/oncoming_bus.png | Bin 0 -> 5305 bytes app/assets/images/emoji/oncoming_police_car.png | Bin 0 -> 5683 bytes app/assets/images/emoji/oncoming_taxi.png | Bin 0 -> 6287 bytes app/assets/images/emoji/one.png | Bin 0 -> 2825 bytes app/assets/images/emoji/open_file_folder.png | Bin 0 -> 4292 bytes app/assets/images/emoji/open_hands.png | Bin 0 -> 4951 bytes app/assets/images/emoji/ophiuchus.png | Bin 0 -> 4434 bytes app/assets/images/emoji/orange_book.png | Bin 0 -> 5085 bytes app/assets/images/emoji/outbox_tray.png | Bin 0 -> 3683 bytes app/assets/images/emoji/ox.png | Bin 0 -> 6079 bytes app/assets/images/emoji/page_facing_up.png | Bin 0 -> 2183 bytes app/assets/images/emoji/page_with_curl.png | Bin 0 -> 3729 bytes app/assets/images/emoji/pager.png | Bin 0 -> 4022 bytes app/assets/images/emoji/palm_tree.png | Bin 0 -> 3664 bytes app/assets/images/emoji/panda_face.png | Bin 0 -> 4814 bytes app/assets/images/emoji/paperclip.png | Bin 0 -> 2558 bytes app/assets/images/emoji/parking.png | Bin 0 -> 3083 bytes .../images/emoji/part_alternation_mark.png | Bin 0 -> 2685 bytes app/assets/images/emoji/partly_sunny.png | Bin 0 -> 5181 bytes app/assets/images/emoji/passport_control.png | Bin 0 -> 4018 bytes app/assets/images/emoji/paw_prints.png | Bin 0 -> 2471 bytes app/assets/images/emoji/peach.png | Bin 0 -> 5920 bytes app/assets/images/emoji/pear.png | Bin 0 -> 6936 bytes app/assets/images/emoji/pencil.png | Bin 0 -> 4945 bytes app/assets/images/emoji/pencil2.png | Bin 0 -> 4450 bytes app/assets/images/emoji/penguin.png | Bin 0 -> 4746 bytes app/assets/images/emoji/pensive.png | Bin 0 -> 5062 bytes app/assets/images/emoji/performing_arts.png | Bin 0 -> 6287 bytes app/assets/images/emoji/persevere.png | Bin 0 -> 5519 bytes app/assets/images/emoji/person_frowning.png | Bin 0 -> 4826 bytes .../images/emoji/person_with_blond_hair.png | Bin 0 -> 6622 bytes .../images/emoji/person_with_pouting_face.png | Bin 0 -> 5428 bytes app/assets/images/emoji/phone.png | Bin 0 -> 5495 bytes app/assets/images/emoji/pig.png | Bin 0 -> 5996 bytes app/assets/images/emoji/pig2.png | Bin 0 -> 4797 bytes app/assets/images/emoji/pig_nose.png | Bin 0 -> 4761 bytes app/assets/images/emoji/pill.png | Bin 0 -> 5022 bytes app/assets/images/emoji/pineapple.png | Bin 0 -> 5634 bytes app/assets/images/emoji/pisces.png | Bin 0 -> 4458 bytes app/assets/images/emoji/pizza.png | Bin 0 -> 5273 bytes app/assets/images/emoji/plus1.png | Bin 0 -> 5075 bytes app/assets/images/emoji/point_down.png | Bin 0 -> 3225 bytes app/assets/images/emoji/point_left.png | Bin 0 -> 3085 bytes app/assets/images/emoji/point_right.png | Bin 0 -> 3079 bytes app/assets/images/emoji/point_up.png | Bin 0 -> 3431 bytes app/assets/images/emoji/point_up_2.png | Bin 0 -> 3181 bytes app/assets/images/emoji/police_car.png | Bin 0 -> 3349 bytes app/assets/images/emoji/poodle.png | Bin 0 -> 6852 bytes app/assets/images/emoji/poop.png | Bin 0 -> 4754 bytes app/assets/images/emoji/post_office.png | Bin 0 -> 5136 bytes app/assets/images/emoji/postal_horn.png | Bin 0 -> 4819 bytes app/assets/images/emoji/postbox.png | Bin 0 -> 3388 bytes app/assets/images/emoji/potable_water.png | Bin 0 -> 3934 bytes app/assets/images/emoji/pouch.png | Bin 0 -> 4691 bytes app/assets/images/emoji/poultry_leg.png | Bin 0 -> 4200 bytes app/assets/images/emoji/pound.png | Bin 0 -> 4235 bytes app/assets/images/emoji/pouting_cat.png | Bin 0 -> 4918 bytes app/assets/images/emoji/pray.png | Bin 0 -> 6203 bytes app/assets/images/emoji/princess.png | Bin 0 -> 7920 bytes app/assets/images/emoji/punch.png | Bin 0 -> 4833 bytes app/assets/images/emoji/purple_heart.png | Bin 0 -> 4295 bytes app/assets/images/emoji/purse.png | Bin 0 -> 5033 bytes app/assets/images/emoji/pushpin.png | Bin 0 -> 3793 bytes .../images/emoji/put_litter_in_its_place.png | Bin 0 -> 4091 bytes app/assets/images/emoji/question.png | Bin 0 -> 1711 bytes app/assets/images/emoji/rabbit.png | Bin 0 -> 5677 bytes app/assets/images/emoji/rabbit2.png | Bin 0 -> 4517 bytes app/assets/images/emoji/racehorse.png | Bin 0 -> 4735 bytes app/assets/images/emoji/radio.png | Bin 0 -> 6150 bytes app/assets/images/emoji/radio_button.png | Bin 0 -> 2198 bytes app/assets/images/emoji/rage.png | Bin 0 -> 5410 bytes app/assets/images/emoji/rage1.png | Bin 0 -> 1086 bytes app/assets/images/emoji/rage2.png | Bin 0 -> 1098 bytes app/assets/images/emoji/rage3.png | Bin 0 -> 1119 bytes app/assets/images/emoji/rage4.png | Bin 0 -> 1270 bytes app/assets/images/emoji/railway_car.png | Bin 0 -> 3648 bytes app/assets/images/emoji/rainbow.png | Bin 0 -> 5314 bytes app/assets/images/emoji/raised_hand.png | Bin 0 -> 6177 bytes app/assets/images/emoji/raised_hands.png | Bin 0 -> 5375 bytes app/assets/images/emoji/ram.png | Bin 0 -> 6531 bytes app/assets/images/emoji/ramen.png | Bin 0 -> 6574 bytes app/assets/images/emoji/rat.png | Bin 0 -> 5441 bytes app/assets/images/emoji/recycle.png | Bin 0 -> 3704 bytes app/assets/images/emoji/red_car.png | Bin 0 -> 4278 bytes app/assets/images/emoji/red_circle.png | Bin 0 -> 3946 bytes app/assets/images/emoji/registered.png | Bin 0 -> 1613 bytes app/assets/images/emoji/relaxed.png | Bin 0 -> 5455 bytes app/assets/images/emoji/relieved.png | Bin 0 -> 5648 bytes app/assets/images/emoji/repeat.png | Bin 0 -> 4009 bytes app/assets/images/emoji/repeat_one.png | Bin 0 -> 4287 bytes app/assets/images/emoji/restroom.png | Bin 0 -> 4142 bytes app/assets/images/emoji/revolving_hearts.png | Bin 0 -> 5472 bytes app/assets/images/emoji/rewind.png | Bin 0 -> 3056 bytes app/assets/images/emoji/ribbon.png | Bin 0 -> 5581 bytes app/assets/images/emoji/rice.png | Bin 0 -> 4645 bytes app/assets/images/emoji/rice_ball.png | Bin 0 -> 5408 bytes app/assets/images/emoji/rice_cracker.png | Bin 0 -> 7787 bytes app/assets/images/emoji/rice_scene.png | Bin 0 -> 6261 bytes app/assets/images/emoji/ring.png | Bin 0 -> 5232 bytes app/assets/images/emoji/rocket.png | Bin 0 -> 5388 bytes app/assets/images/emoji/roller_coaster.png | Bin 0 -> 5148 bytes app/assets/images/emoji/rooster.png | Bin 0 -> 6168 bytes app/assets/images/emoji/rose.png | Bin 0 -> 4202 bytes app/assets/images/emoji/rotating_light.png | Bin 0 -> 6620 bytes app/assets/images/emoji/round_pushpin.png | Bin 0 -> 1936 bytes app/assets/images/emoji/rowboat.png | Bin 0 -> 5433 bytes app/assets/images/emoji/ru.png | Bin 0 -> 3920 bytes app/assets/images/emoji/rugby_football.png | Bin 0 -> 7781 bytes app/assets/images/emoji/runner.png | Bin 0 -> 3137 bytes app/assets/images/emoji/running.png | Bin 0 -> 3214 bytes .../images/emoji/running_shirt_with_sash.png | Bin 0 -> 5701 bytes app/assets/images/emoji/sa.png | Bin 0 -> 3556 bytes app/assets/images/emoji/sagittarius.png | Bin 0 -> 4505 bytes app/assets/images/emoji/sailboat.png | Bin 0 -> 3833 bytes app/assets/images/emoji/sake.png | Bin 0 -> 5073 bytes app/assets/images/emoji/sandal.png | Bin 0 -> 3974 bytes app/assets/images/emoji/santa.png | Bin 0 -> 6271 bytes app/assets/images/emoji/satellite.png | Bin 0 -> 4867 bytes app/assets/images/emoji/satisfied.png | Bin 0 -> 5364 bytes app/assets/images/emoji/saxophone.png | Bin 0 -> 4252 bytes app/assets/images/emoji/school.png | Bin 0 -> 5446 bytes app/assets/images/emoji/school_satchel.png | Bin 0 -> 5741 bytes app/assets/images/emoji/scissors.png | Bin 0 -> 3839 bytes app/assets/images/emoji/scorpius.png | Bin 0 -> 4566 bytes app/assets/images/emoji/scream.png | Bin 0 -> 6482 bytes app/assets/images/emoji/scream_cat.png | Bin 0 -> 6844 bytes app/assets/images/emoji/scroll.png | Bin 0 -> 6749 bytes app/assets/images/emoji/seat.png | Bin 0 -> 6059 bytes app/assets/images/emoji/secret.png | Bin 0 -> 5364 bytes app/assets/images/emoji/see_no_evil.png | Bin 0 -> 6828 bytes app/assets/images/emoji/seedling.png | Bin 0 -> 2260 bytes app/assets/images/emoji/seven.png | Bin 0 -> 3055 bytes app/assets/images/emoji/shaved_ice.png | Bin 0 -> 5908 bytes app/assets/images/emoji/sheep.png | Bin 0 -> 4732 bytes app/assets/images/emoji/shell.png | Bin 0 -> 5115 bytes app/assets/images/emoji/ship.png | Bin 0 -> 4233 bytes app/assets/images/emoji/shipit.png | Bin 0 -> 9351 bytes app/assets/images/emoji/shirt.png | Bin 0 -> 4676 bytes app/assets/images/emoji/shit.png | Bin 0 -> 4754 bytes app/assets/images/emoji/shoe.png | Bin 0 -> 4799 bytes app/assets/images/emoji/shower.png | Bin 0 -> 7583 bytes app/assets/images/emoji/signal_strength.png | Bin 0 -> 3231 bytes app/assets/images/emoji/six.png | Bin 0 -> 3791 bytes app/assets/images/emoji/six_pointed_star.png | Bin 0 -> 4859 bytes app/assets/images/emoji/ski.png | Bin 0 -> 4167 bytes app/assets/images/emoji/skull.png | Bin 0 -> 2428 bytes app/assets/images/emoji/sleepy.png | Bin 0 -> 5837 bytes app/assets/images/emoji/slot_machine.png | Bin 0 -> 4605 bytes app/assets/images/emoji/small_blue_diamond.png | Bin 0 -> 1898 bytes app/assets/images/emoji/small_orange_diamond.png | Bin 0 -> 1944 bytes app/assets/images/emoji/small_red_triangle.png | Bin 0 -> 2054 bytes .../images/emoji/small_red_triangle_down.png | Bin 0 -> 2157 bytes app/assets/images/emoji/smile.png | Bin 0 -> 5890 bytes app/assets/images/emoji/smile_cat.png | Bin 0 -> 6117 bytes app/assets/images/emoji/smiley.png | Bin 0 -> 5794 bytes app/assets/images/emoji/smiley_cat.png | Bin 0 -> 6083 bytes app/assets/images/emoji/smiling_imp.png | Bin 0 -> 7189 bytes app/assets/images/emoji/smirk.png | Bin 0 -> 5307 bytes app/assets/images/emoji/smirk_cat.png | Bin 0 -> 6062 bytes app/assets/images/emoji/smoking.png | Bin 0 -> 2875 bytes app/assets/images/emoji/snail.png | Bin 0 -> 6657 bytes app/assets/images/emoji/snake.png | Bin 0 -> 4069 bytes app/assets/images/emoji/snowboarder.png | Bin 0 -> 5356 bytes app/assets/images/emoji/snowflake.png | Bin 0 -> 5637 bytes app/assets/images/emoji/snowman.png | Bin 0 -> 4658 bytes app/assets/images/emoji/sob.png | Bin 0 -> 5709 bytes app/assets/images/emoji/soccer.png | Bin 0 -> 4878 bytes app/assets/images/emoji/soon.png | Bin 0 -> 1911 bytes app/assets/images/emoji/sos.png | Bin 0 -> 4262 bytes app/assets/images/emoji/sound.png | Bin 0 -> 5024 bytes app/assets/images/emoji/space_invader.png | Bin 0 -> 4353 bytes app/assets/images/emoji/spades.png | Bin 0 -> 1719 bytes app/assets/images/emoji/spaghetti.png | Bin 0 -> 6955 bytes app/assets/images/emoji/sparkler.png | Bin 0 -> 5696 bytes app/assets/images/emoji/sparkles.png | Bin 0 -> 2212 bytes app/assets/images/emoji/speak_no_evil.png | Bin 0 -> 5977 bytes app/assets/images/emoji/speaker.png | Bin 0 -> 5173 bytes app/assets/images/emoji/speech_balloon.png | Bin 0 -> 2130 bytes app/assets/images/emoji/speedboat.png | Bin 0 -> 3512 bytes app/assets/images/emoji/squirrel.png | Bin 0 -> 9351 bytes app/assets/images/emoji/star.png | Bin 0 -> 3628 bytes app/assets/images/emoji/star2.png | Bin 0 -> 4068 bytes app/assets/images/emoji/stars.png | Bin 0 -> 4366 bytes app/assets/images/emoji/station.png | Bin 0 -> 4836 bytes app/assets/images/emoji/statue_of_liberty.png | Bin 0 -> 6075 bytes app/assets/images/emoji/steam_locomotive.png | Bin 0 -> 5159 bytes app/assets/images/emoji/stew.png | Bin 0 -> 5365 bytes app/assets/images/emoji/straight_ruler.png | Bin 0 -> 3832 bytes app/assets/images/emoji/strawberry.png | Bin 0 -> 5477 bytes app/assets/images/emoji/sun_with_face.png | Bin 0 -> 7958 bytes app/assets/images/emoji/sunflower.png | Bin 0 -> 6567 bytes app/assets/images/emoji/sunglasses.png | Bin 0 -> 5749 bytes app/assets/images/emoji/sunny.png | Bin 0 -> 3802 bytes app/assets/images/emoji/sunrise.png | Bin 0 -> 3914 bytes .../images/emoji/sunrise_over_mountains.png | Bin 0 -> 6594 bytes app/assets/images/emoji/surfer.png | Bin 0 -> 6259 bytes app/assets/images/emoji/sushi.png | Bin 0 -> 5257 bytes app/assets/images/emoji/suspect.png | Bin 0 -> 1016 bytes app/assets/images/emoji/suspension_railway.png | Bin 0 -> 3937 bytes app/assets/images/emoji/sweat.png | Bin 0 -> 5576 bytes app/assets/images/emoji/sweat_drops.png | Bin 0 -> 4782 bytes app/assets/images/emoji/sweat_smile.png | Bin 0 -> 6519 bytes app/assets/images/emoji/sweet_potato.png | Bin 0 -> 5684 bytes app/assets/images/emoji/swimmer.png | Bin 0 -> 4378 bytes app/assets/images/emoji/symbols.png | Bin 0 -> 5434 bytes app/assets/images/emoji/syringe.png | Bin 0 -> 3040 bytes app/assets/images/emoji/tada.png | Bin 0 -> 5945 bytes app/assets/images/emoji/tanabata_tree.png | Bin 0 -> 4409 bytes app/assets/images/emoji/tangerine.png | Bin 0 -> 6645 bytes app/assets/images/emoji/taurus.png | Bin 0 -> 4733 bytes app/assets/images/emoji/taxi.png | Bin 0 -> 3744 bytes app/assets/images/emoji/tea.png | Bin 0 -> 5954 bytes app/assets/images/emoji/telephone.png | Bin 0 -> 5495 bytes app/assets/images/emoji/telephone_receiver.png | Bin 0 -> 2001 bytes app/assets/images/emoji/telescope.png | Bin 0 -> 3322 bytes app/assets/images/emoji/tennis.png | Bin 0 -> 5976 bytes app/assets/images/emoji/tent.png | Bin 0 -> 4482 bytes app/assets/images/emoji/thought_balloon.png | Bin 0 -> 2582 bytes app/assets/images/emoji/three.png | Bin 0 -> 3758 bytes app/assets/images/emoji/thumbsdown.png | Bin 0 -> 5070 bytes app/assets/images/emoji/thumbsup.png | Bin 0 -> 5075 bytes app/assets/images/emoji/ticket.png | Bin 0 -> 3091 bytes app/assets/images/emoji/tiger.png | Bin 0 -> 6051 bytes app/assets/images/emoji/tiger2.png | Bin 0 -> 5744 bytes app/assets/images/emoji/tired_face.png | Bin 0 -> 6178 bytes app/assets/images/emoji/tm.png | Bin 0 -> 842 bytes app/assets/images/emoji/toilet.png | Bin 0 -> 1733 bytes app/assets/images/emoji/tokyo_tower.png | Bin 0 -> 4802 bytes app/assets/images/emoji/tomato.png | Bin 0 -> 5748 bytes app/assets/images/emoji/tongue.png | Bin 0 -> 5785 bytes app/assets/images/emoji/tongue2.png | Bin 0 -> 3662 bytes app/assets/images/emoji/top.png | Bin 0 -> 3785 bytes app/assets/images/emoji/tophat.png | Bin 0 -> 3009 bytes app/assets/images/emoji/tractor.png | Bin 0 -> 5671 bytes app/assets/images/emoji/traffic_light.png | Bin 0 -> 3545 bytes app/assets/images/emoji/train.png | Bin 0 -> 3905 bytes app/assets/images/emoji/train2.png | Bin 0 -> 4817 bytes app/assets/images/emoji/tram.png | Bin 0 -> 4869 bytes .../images/emoji/triangular_flag_on_post.png | Bin 0 -> 1399 bytes app/assets/images/emoji/triangular_ruler.png | Bin 0 -> 2706 bytes app/assets/images/emoji/trident.png | Bin 0 -> 4833 bytes app/assets/images/emoji/triumph.png | Bin 0 -> 6164 bytes app/assets/images/emoji/trolleybus.png | Bin 0 -> 4431 bytes app/assets/images/emoji/trollface.png | Bin 0 -> 4905 bytes app/assets/images/emoji/trophy.png | Bin 0 -> 5520 bytes app/assets/images/emoji/tropical_drink.png | Bin 0 -> 4189 bytes app/assets/images/emoji/tropical_fish.png | Bin 0 -> 5846 bytes app/assets/images/emoji/truck.png | Bin 0 -> 3721 bytes app/assets/images/emoji/trumpet.png | Bin 0 -> 4373 bytes app/assets/images/emoji/tshirt.png | Bin 0 -> 4676 bytes app/assets/images/emoji/tulip.png | Bin 0 -> 6065 bytes app/assets/images/emoji/turtle.png | Bin 0 -> 5336 bytes app/assets/images/emoji/tv.png | Bin 0 -> 5242 bytes .../images/emoji/twisted_rightwards_arrows.png | Bin 0 -> 4313 bytes app/assets/images/emoji/two.png | Bin 0 -> 3518 bytes app/assets/images/emoji/two_hearts.png | Bin 0 -> 3565 bytes .../images/emoji/two_men_holding_hands.png | Bin 0 -> 6994 bytes .../images/emoji/two_women_holding_hands.png | Bin 0 -> 7633 bytes app/assets/images/emoji/u5272.png | Bin 0 -> 4533 bytes app/assets/images/emoji/u5408.png | Bin 0 -> 3890 bytes app/assets/images/emoji/u55b6.png | Bin 0 -> 3411 bytes app/assets/images/emoji/u6307.png | Bin 0 -> 4103 bytes app/assets/images/emoji/u6708.png | Bin 0 -> 3011 bytes app/assets/images/emoji/u6709.png | Bin 0 -> 3198 bytes app/assets/images/emoji/u6e80.png | Bin 0 -> 4419 bytes app/assets/images/emoji/u7121.png | Bin 0 -> 3942 bytes app/assets/images/emoji/u7533.png | Bin 0 -> 3048 bytes app/assets/images/emoji/u7981.png | Bin 0 -> 5175 bytes app/assets/images/emoji/u7a7a.png | Bin 0 -> 4180 bytes app/assets/images/emoji/uk.png | Bin 0 -> 5894 bytes app/assets/images/emoji/umbrella.png | Bin 0 -> 4745 bytes app/assets/images/emoji/unamused.png | Bin 0 -> 5315 bytes app/assets/images/emoji/underage.png | Bin 0 -> 5722 bytes app/assets/images/emoji/unlock.png | Bin 0 -> 3551 bytes app/assets/images/emoji/up.png | Bin 0 -> 3721 bytes app/assets/images/emoji/us.png | Bin 0 -> 6285 bytes app/assets/images/emoji/v.png | Bin 0 -> 4669 bytes .../images/emoji/vertical_traffic_light.png | Bin 0 -> 3422 bytes app/assets/images/emoji/vhs.png | Bin 0 -> 3145 bytes app/assets/images/emoji/vibration_mode.png | Bin 0 -> 3906 bytes app/assets/images/emoji/video_camera.png | Bin 0 -> 5090 bytes app/assets/images/emoji/video_game.png | Bin 0 -> 4957 bytes app/assets/images/emoji/violin.png | Bin 0 -> 5020 bytes app/assets/images/emoji/virgo.png | Bin 0 -> 4869 bytes app/assets/images/emoji/volcano.png | Bin 0 -> 6167 bytes app/assets/images/emoji/vs.png | Bin 0 -> 3424 bytes app/assets/images/emoji/walking.png | Bin 0 -> 2468 bytes app/assets/images/emoji/waning_crescent_moon.png | Bin 0 -> 5885 bytes app/assets/images/emoji/waning_gibbous_moon.png | Bin 0 -> 6510 bytes app/assets/images/emoji/warning.png | Bin 0 -> 3177 bytes app/assets/images/emoji/watch.png | Bin 0 -> 5189 bytes app/assets/images/emoji/water_buffalo.png | Bin 0 -> 4774 bytes app/assets/images/emoji/watermelon.png | Bin 0 -> 5501 bytes app/assets/images/emoji/wave.png | Bin 0 -> 5048 bytes app/assets/images/emoji/wavy_dash.png | Bin 0 -> 872 bytes app/assets/images/emoji/waxing_crescent_moon.png | Bin 0 -> 6198 bytes app/assets/images/emoji/waxing_gibbous_moon.png | Bin 0 -> 6455 bytes app/assets/images/emoji/wc.png | Bin 0 -> 4088 bytes app/assets/images/emoji/weary.png | Bin 0 -> 6279 bytes app/assets/images/emoji/wedding.png | Bin 0 -> 5847 bytes app/assets/images/emoji/whale.png | Bin 0 -> 4940 bytes app/assets/images/emoji/whale2.png | Bin 0 -> 6032 bytes app/assets/images/emoji/wheelchair.png | Bin 0 -> 4224 bytes app/assets/images/emoji/white_circle.png | Bin 0 -> 2506 bytes app/assets/images/emoji/white_flower.png | Bin 0 -> 4391 bytes app/assets/images/emoji/white_square.png | Bin 0 -> 1411 bytes app/assets/images/emoji/wind_chime.png | Bin 0 -> 3487 bytes app/assets/images/emoji/wine_glass.png | Bin 0 -> 3151 bytes app/assets/images/emoji/wink.png | Bin 0 -> 5253 bytes app/assets/images/emoji/wink2.png | Bin 0 -> 6007 bytes app/assets/images/emoji/wolf.png | Bin 0 -> 4845 bytes app/assets/images/emoji/woman.png | Bin 0 -> 6895 bytes app/assets/images/emoji/womans_clothes.png | Bin 0 -> 4075 bytes app/assets/images/emoji/womans_hat.png | Bin 0 -> 8101 bytes app/assets/images/emoji/womens.png | Bin 0 -> 3893 bytes app/assets/images/emoji/wrench.png | Bin 0 -> 2775 bytes app/assets/images/emoji/x.png | Bin 0 -> 2044 bytes app/assets/images/emoji/yellow_heart.png | Bin 0 -> 4414 bytes app/assets/images/emoji/yen.png | Bin 0 -> 4989 bytes app/assets/images/emoji/yum.png | Bin 0 -> 5886 bytes app/assets/images/emoji/zap.png | Bin 0 -> 2233 bytes app/assets/images/emoji/zero.png | Bin 0 -> 3590 bytes app/assets/images/emoji/zzz.png | Bin 0 -> 2027 bytes 847 files changed, 0 insertions(+), 0 deletions(-) create mode 100755 app/assets/images/emoji/+1.png create mode 100755 app/assets/images/emoji/-1.png create mode 100755 app/assets/images/emoji/100.png create mode 100755 app/assets/images/emoji/109.png create mode 100755 app/assets/images/emoji/1234.png create mode 100755 app/assets/images/emoji/8ball.png create mode 100755 app/assets/images/emoji/a.png create mode 100755 app/assets/images/emoji/ab.png create mode 100755 app/assets/images/emoji/abc.png create mode 100755 app/assets/images/emoji/abcd.png create mode 100755 app/assets/images/emoji/accept.png create mode 100755 app/assets/images/emoji/aerial_tramway.png create mode 100755 app/assets/images/emoji/airplane.png create mode 100755 app/assets/images/emoji/alarm_clock.png create mode 100755 app/assets/images/emoji/alien.png create mode 100755 app/assets/images/emoji/ambulance.png create mode 100755 app/assets/images/emoji/anchor.png create mode 100755 app/assets/images/emoji/angel.png create mode 100755 app/assets/images/emoji/anger.png create mode 100755 app/assets/images/emoji/angry.png create mode 100755 app/assets/images/emoji/ant.png create mode 100755 app/assets/images/emoji/apple.png create mode 100755 app/assets/images/emoji/aquarius.png create mode 100755 app/assets/images/emoji/aries.png create mode 100755 app/assets/images/emoji/arrow_backward.png create mode 100755 app/assets/images/emoji/arrow_double_down.png create mode 100755 app/assets/images/emoji/arrow_double_up.png create mode 100755 app/assets/images/emoji/arrow_down.png create mode 100755 app/assets/images/emoji/arrow_down_small.png create mode 100755 app/assets/images/emoji/arrow_forward.png create mode 100755 app/assets/images/emoji/arrow_heading_down.png create mode 100755 app/assets/images/emoji/arrow_heading_up.png create mode 100755 app/assets/images/emoji/arrow_left.png create mode 100755 app/assets/images/emoji/arrow_lower_left.png create mode 100755 app/assets/images/emoji/arrow_lower_right.png create mode 100755 app/assets/images/emoji/arrow_right.png create mode 100755 app/assets/images/emoji/arrow_right_hook.png create mode 100755 app/assets/images/emoji/arrow_up.png create mode 100755 app/assets/images/emoji/arrow_up_down.png create mode 100755 app/assets/images/emoji/arrow_up_small.png create mode 100755 app/assets/images/emoji/arrow_upper_left.png create mode 100755 app/assets/images/emoji/arrow_upper_right.png create mode 100755 app/assets/images/emoji/arrows_clockwise.png create mode 100755 app/assets/images/emoji/arrows_counterclockwise.png create mode 100755 app/assets/images/emoji/art.png create mode 100755 app/assets/images/emoji/articulated_lorry.png create mode 100755 app/assets/images/emoji/astonished.png create mode 100755 app/assets/images/emoji/atm.png create mode 100755 app/assets/images/emoji/b.png create mode 100755 app/assets/images/emoji/baby.png create mode 100755 app/assets/images/emoji/baby_bottle.png create mode 100755 app/assets/images/emoji/baby_chick.png create mode 100755 app/assets/images/emoji/baby_symbol.png create mode 100755 app/assets/images/emoji/baggage_claim.png create mode 100755 app/assets/images/emoji/balloon.png create mode 100755 app/assets/images/emoji/ballot_box_with_check.png create mode 100755 app/assets/images/emoji/bamboo.png create mode 100755 app/assets/images/emoji/banana.png create mode 100755 app/assets/images/emoji/bangbang.png create mode 100755 app/assets/images/emoji/bank.png create mode 100755 app/assets/images/emoji/bar_chart.png create mode 100755 app/assets/images/emoji/barber.png create mode 100755 app/assets/images/emoji/baseball.png create mode 100755 app/assets/images/emoji/basketball.png create mode 100755 app/assets/images/emoji/bath.png create mode 100755 app/assets/images/emoji/bathtub.png create mode 100755 app/assets/images/emoji/battery.png create mode 100755 app/assets/images/emoji/bear.png create mode 100755 app/assets/images/emoji/beer.png create mode 100755 app/assets/images/emoji/beers.png create mode 100755 app/assets/images/emoji/beetle.png create mode 100755 app/assets/images/emoji/beginner.png create mode 100755 app/assets/images/emoji/bell.png create mode 100755 app/assets/images/emoji/bento.png create mode 100755 app/assets/images/emoji/bicyclist.png create mode 100755 app/assets/images/emoji/bike.png create mode 100755 app/assets/images/emoji/bikini.png create mode 100755 app/assets/images/emoji/bird.png create mode 100755 app/assets/images/emoji/birthday.png create mode 100755 app/assets/images/emoji/black_circle.png create mode 100755 app/assets/images/emoji/black_joker.png create mode 100755 app/assets/images/emoji/black_nib.png create mode 100755 app/assets/images/emoji/black_square.png create mode 100755 app/assets/images/emoji/blossom.png create mode 100755 app/assets/images/emoji/blowfish.png create mode 100755 app/assets/images/emoji/blue_book.png create mode 100755 app/assets/images/emoji/blue_car.png create mode 100755 app/assets/images/emoji/blue_heart.png create mode 100755 app/assets/images/emoji/blush.png create mode 100755 app/assets/images/emoji/boar.png create mode 100755 app/assets/images/emoji/boat.png create mode 100755 app/assets/images/emoji/bomb.png create mode 100755 app/assets/images/emoji/book.png create mode 100755 app/assets/images/emoji/bookmark.png create mode 100755 app/assets/images/emoji/bookmark_tabs.png create mode 100755 app/assets/images/emoji/books.png create mode 100755 app/assets/images/emoji/boot.png create mode 100755 app/assets/images/emoji/bouquet.png create mode 100755 app/assets/images/emoji/bow.png create mode 100755 app/assets/images/emoji/bowling.png create mode 100755 app/assets/images/emoji/bowtie.png create mode 100755 app/assets/images/emoji/boy.png create mode 100755 app/assets/images/emoji/bread.png create mode 100755 app/assets/images/emoji/bride_with_veil.png create mode 100755 app/assets/images/emoji/bridge_at_night.png create mode 100755 app/assets/images/emoji/briefcase.png create mode 100755 app/assets/images/emoji/broken_heart.png create mode 100755 app/assets/images/emoji/bug.png create mode 100755 app/assets/images/emoji/bulb.png create mode 100755 app/assets/images/emoji/bullettrain_front.png create mode 100755 app/assets/images/emoji/bullettrain_side.png create mode 100755 app/assets/images/emoji/bus.png create mode 100755 app/assets/images/emoji/busstop.png create mode 100755 app/assets/images/emoji/bust_in_silhouette.png create mode 100755 app/assets/images/emoji/busts_in_silhouette.png create mode 100755 app/assets/images/emoji/cactus.png create mode 100755 app/assets/images/emoji/cake.png create mode 100755 app/assets/images/emoji/calendar.png create mode 100755 app/assets/images/emoji/calling.png create mode 100755 app/assets/images/emoji/camel.png create mode 100755 app/assets/images/emoji/camera.png create mode 100755 app/assets/images/emoji/cancer.png create mode 100755 app/assets/images/emoji/candy.png create mode 100755 app/assets/images/emoji/capital_abcd.png create mode 100755 app/assets/images/emoji/capricorn.png create mode 100755 app/assets/images/emoji/car.png create mode 100755 app/assets/images/emoji/card_index.png create mode 100755 app/assets/images/emoji/carousel_horse.png create mode 100755 app/assets/images/emoji/cat.png create mode 100755 app/assets/images/emoji/cat2.png create mode 100755 app/assets/images/emoji/cd.png create mode 100755 app/assets/images/emoji/chart.png create mode 100755 app/assets/images/emoji/chart_with_downwards_trend.png create mode 100755 app/assets/images/emoji/chart_with_upwards_trend.png create mode 100755 app/assets/images/emoji/checkered_flag.png create mode 100755 app/assets/images/emoji/cherries.png create mode 100755 app/assets/images/emoji/cherry_blossom.png create mode 100755 app/assets/images/emoji/chestnut.png create mode 100755 app/assets/images/emoji/chicken.png create mode 100755 app/assets/images/emoji/children_crossing.png create mode 100755 app/assets/images/emoji/chocolate_bar.png create mode 100755 app/assets/images/emoji/christmas_tree.png create mode 100755 app/assets/images/emoji/church.png create mode 100755 app/assets/images/emoji/cinema.png create mode 100755 app/assets/images/emoji/circus_tent.png create mode 100755 app/assets/images/emoji/city_sunrise.png create mode 100755 app/assets/images/emoji/city_sunset.png create mode 100755 app/assets/images/emoji/cl.png create mode 100755 app/assets/images/emoji/clap.png create mode 100755 app/assets/images/emoji/clapper.png create mode 100755 app/assets/images/emoji/clipboard.png create mode 100755 app/assets/images/emoji/clock1.png create mode 100755 app/assets/images/emoji/clock10.png create mode 100755 app/assets/images/emoji/clock1030.png create mode 100755 app/assets/images/emoji/clock11.png create mode 100755 app/assets/images/emoji/clock1130.png create mode 100755 app/assets/images/emoji/clock12.png create mode 100755 app/assets/images/emoji/clock1230.png create mode 100755 app/assets/images/emoji/clock130.png create mode 100755 app/assets/images/emoji/clock2.png create mode 100755 app/assets/images/emoji/clock230.png create mode 100755 app/assets/images/emoji/clock3.png create mode 100755 app/assets/images/emoji/clock330.png create mode 100755 app/assets/images/emoji/clock4.png create mode 100755 app/assets/images/emoji/clock430.png create mode 100755 app/assets/images/emoji/clock5.png create mode 100755 app/assets/images/emoji/clock530.png create mode 100755 app/assets/images/emoji/clock6.png create mode 100755 app/assets/images/emoji/clock630.png create mode 100755 app/assets/images/emoji/clock7.png create mode 100755 app/assets/images/emoji/clock730.png create mode 100755 app/assets/images/emoji/clock8.png create mode 100755 app/assets/images/emoji/clock830.png create mode 100755 app/assets/images/emoji/clock9.png create mode 100755 app/assets/images/emoji/clock930.png create mode 100755 app/assets/images/emoji/closed_book.png create mode 100755 app/assets/images/emoji/closed_lock_with_key.png create mode 100755 app/assets/images/emoji/closed_umbrella.png create mode 100755 app/assets/images/emoji/cloud.png create mode 100755 app/assets/images/emoji/clubs.png create mode 100755 app/assets/images/emoji/cn.png create mode 100755 app/assets/images/emoji/cocktail.png create mode 100755 app/assets/images/emoji/coffee.png create mode 100755 app/assets/images/emoji/cold_sweat.png create mode 100755 app/assets/images/emoji/collision.png create mode 100755 app/assets/images/emoji/computer.png create mode 100755 app/assets/images/emoji/confetti_ball.png create mode 100755 app/assets/images/emoji/confounded.png create mode 100755 app/assets/images/emoji/congratulations.png create mode 100755 app/assets/images/emoji/construction.png create mode 100755 app/assets/images/emoji/construction_worker.png create mode 100755 app/assets/images/emoji/convenience_store.png create mode 100755 app/assets/images/emoji/cookie.png create mode 100755 app/assets/images/emoji/cool.png create mode 100755 app/assets/images/emoji/cop.png create mode 100755 app/assets/images/emoji/copyright.png create mode 100755 app/assets/images/emoji/corn.png create mode 100755 app/assets/images/emoji/couple.png create mode 100755 app/assets/images/emoji/couple_with_heart.png create mode 100755 app/assets/images/emoji/couplekiss.png create mode 100755 app/assets/images/emoji/cow.png create mode 100755 app/assets/images/emoji/cow2.png create mode 100755 app/assets/images/emoji/credit_card.png create mode 100755 app/assets/images/emoji/crocodile.png create mode 100755 app/assets/images/emoji/crossed_flags.png create mode 100755 app/assets/images/emoji/crown.png create mode 100755 app/assets/images/emoji/cry.png create mode 100755 app/assets/images/emoji/crying_cat_face.png create mode 100755 app/assets/images/emoji/crystal_ball.png create mode 100755 app/assets/images/emoji/cupid.png create mode 100755 app/assets/images/emoji/curly_loop.png create mode 100755 app/assets/images/emoji/currency_exchange.png create mode 100755 app/assets/images/emoji/curry.png create mode 100755 app/assets/images/emoji/custard.png create mode 100755 app/assets/images/emoji/customs.png create mode 100755 app/assets/images/emoji/cyclone.png create mode 100755 app/assets/images/emoji/dancer.png create mode 100755 app/assets/images/emoji/dancers.png create mode 100755 app/assets/images/emoji/dango.png create mode 100755 app/assets/images/emoji/dart.png create mode 100755 app/assets/images/emoji/dash.png create mode 100755 app/assets/images/emoji/date.png create mode 100755 app/assets/images/emoji/de.png create mode 100755 app/assets/images/emoji/deciduous_tree.png create mode 100755 app/assets/images/emoji/department_store.png create mode 100755 app/assets/images/emoji/diamond_shape_with_a_dot_inside.png create mode 100755 app/assets/images/emoji/diamonds.png create mode 100755 app/assets/images/emoji/disappointed.png create mode 100755 app/assets/images/emoji/dizzy.png create mode 100755 app/assets/images/emoji/dizzy_face.png create mode 100755 app/assets/images/emoji/do_not_litter.png create mode 100755 app/assets/images/emoji/dog.png create mode 100755 app/assets/images/emoji/dog2.png create mode 100755 app/assets/images/emoji/dollar.png create mode 100755 app/assets/images/emoji/dolls.png create mode 100755 app/assets/images/emoji/dolphin.png create mode 100755 app/assets/images/emoji/door.png create mode 100755 app/assets/images/emoji/doughnut.png create mode 100755 app/assets/images/emoji/dragon.png create mode 100755 app/assets/images/emoji/dragon_face.png create mode 100755 app/assets/images/emoji/dress.png create mode 100755 app/assets/images/emoji/dromedary_camel.png create mode 100755 app/assets/images/emoji/droplet.png create mode 100755 app/assets/images/emoji/dvd.png create mode 100755 app/assets/images/emoji/e-mail.png create mode 100755 app/assets/images/emoji/ear.png create mode 100755 app/assets/images/emoji/ear_of_rice.png create mode 100755 app/assets/images/emoji/earth_africa.png create mode 100755 app/assets/images/emoji/earth_americas.png create mode 100755 app/assets/images/emoji/earth_asia.png create mode 100755 app/assets/images/emoji/egg.png create mode 100755 app/assets/images/emoji/eggplant.png create mode 100755 app/assets/images/emoji/eight.png create mode 100755 app/assets/images/emoji/eight_pointed_black_star.png create mode 100755 app/assets/images/emoji/eight_spoked_asterisk.png create mode 100755 app/assets/images/emoji/electric_plug.png create mode 100755 app/assets/images/emoji/elephant.png create mode 100755 app/assets/images/emoji/email.png create mode 100755 app/assets/images/emoji/end.png create mode 100755 app/assets/images/emoji/envelope.png create mode 100755 app/assets/images/emoji/es.png create mode 100755 app/assets/images/emoji/euro.png create mode 100755 app/assets/images/emoji/european_castle.png create mode 100755 app/assets/images/emoji/european_post_office.png create mode 100755 app/assets/images/emoji/evergreen_tree.png create mode 100755 app/assets/images/emoji/exclamation.png create mode 100755 app/assets/images/emoji/eyeglasses.png create mode 100755 app/assets/images/emoji/eyes.png create mode 100755 app/assets/images/emoji/facepunch.png create mode 100755 app/assets/images/emoji/factory.png create mode 100755 app/assets/images/emoji/fallen_leaf.png create mode 100755 app/assets/images/emoji/family.png create mode 100755 app/assets/images/emoji/fast_forward.png create mode 100755 app/assets/images/emoji/fax.png create mode 100755 app/assets/images/emoji/fearful.png create mode 100755 app/assets/images/emoji/feelsgood.png create mode 100755 app/assets/images/emoji/feet.png create mode 100755 app/assets/images/emoji/ferris_wheel.png create mode 100755 app/assets/images/emoji/file_folder.png create mode 100755 app/assets/images/emoji/finnadie.png create mode 100755 app/assets/images/emoji/fire.png create mode 100755 app/assets/images/emoji/fire_engine.png create mode 100755 app/assets/images/emoji/fireworks.png create mode 100755 app/assets/images/emoji/first_quarter_moon.png create mode 100755 app/assets/images/emoji/first_quarter_moon_with_face.png create mode 100755 app/assets/images/emoji/fish.png create mode 100755 app/assets/images/emoji/fish_cake.png create mode 100755 app/assets/images/emoji/fishing_pole_and_fish.png create mode 100755 app/assets/images/emoji/fist.png create mode 100755 app/assets/images/emoji/five.png create mode 100755 app/assets/images/emoji/flags.png create mode 100755 app/assets/images/emoji/flashlight.png create mode 100755 app/assets/images/emoji/floppy_disk.png create mode 100755 app/assets/images/emoji/flower_playing_cards.png create mode 100755 app/assets/images/emoji/flushed.png create mode 100755 app/assets/images/emoji/foggy.png create mode 100755 app/assets/images/emoji/football.png create mode 100755 app/assets/images/emoji/fork_and_knife.png create mode 100755 app/assets/images/emoji/fountain.png create mode 100755 app/assets/images/emoji/four.png create mode 100755 app/assets/images/emoji/four_leaf_clover.png create mode 100755 app/assets/images/emoji/fr.png create mode 100755 app/assets/images/emoji/free.png create mode 100755 app/assets/images/emoji/fried_shrimp.png create mode 100755 app/assets/images/emoji/fries.png create mode 100755 app/assets/images/emoji/frog.png create mode 100755 app/assets/images/emoji/fuelpump.png create mode 100755 app/assets/images/emoji/full_moon.png create mode 100755 app/assets/images/emoji/full_moon_with_face.png create mode 100755 app/assets/images/emoji/game_die.png create mode 100755 app/assets/images/emoji/gb.png create mode 100755 app/assets/images/emoji/gem.png create mode 100755 app/assets/images/emoji/gemini.png create mode 100755 app/assets/images/emoji/ghost.png create mode 100755 app/assets/images/emoji/gift.png create mode 100755 app/assets/images/emoji/gift_heart.png create mode 100755 app/assets/images/emoji/girl.png create mode 100755 app/assets/images/emoji/globe_with_meridians.png create mode 100755 app/assets/images/emoji/goat.png create mode 100755 app/assets/images/emoji/goberserk.png create mode 100755 app/assets/images/emoji/godmode.png create mode 100755 app/assets/images/emoji/golf.png create mode 100755 app/assets/images/emoji/grapes.png create mode 100755 app/assets/images/emoji/green_apple.png create mode 100755 app/assets/images/emoji/green_book.png create mode 100755 app/assets/images/emoji/green_heart.png create mode 100755 app/assets/images/emoji/grey_exclamation.png create mode 100755 app/assets/images/emoji/grey_question.png create mode 100755 app/assets/images/emoji/grin.png create mode 100755 app/assets/images/emoji/guardsman.png create mode 100755 app/assets/images/emoji/guitar.png create mode 100755 app/assets/images/emoji/gun.png create mode 100755 app/assets/images/emoji/haircut.png create mode 100755 app/assets/images/emoji/hamburger.png create mode 100755 app/assets/images/emoji/hammer.png create mode 100755 app/assets/images/emoji/hamster.png create mode 100755 app/assets/images/emoji/hand.png create mode 100755 app/assets/images/emoji/handbag.png create mode 100755 app/assets/images/emoji/hankey.png create mode 100755 app/assets/images/emoji/hash.png create mode 100755 app/assets/images/emoji/hatched_chick.png create mode 100755 app/assets/images/emoji/hatching_chick.png create mode 100755 app/assets/images/emoji/headphones.png create mode 100755 app/assets/images/emoji/hear_no_evil.png create mode 100755 app/assets/images/emoji/heart.png create mode 100755 app/assets/images/emoji/heart_decoration.png create mode 100755 app/assets/images/emoji/heart_eyes.png create mode 100755 app/assets/images/emoji/heart_eyes_cat.png create mode 100755 app/assets/images/emoji/heartbeat.png create mode 100755 app/assets/images/emoji/heartpulse.png create mode 100755 app/assets/images/emoji/hearts.png create mode 100755 app/assets/images/emoji/heavy_check_mark.png create mode 100755 app/assets/images/emoji/heavy_division_sign.png create mode 100755 app/assets/images/emoji/heavy_dollar_sign.png create mode 100755 app/assets/images/emoji/heavy_exclamation_mark.png create mode 100755 app/assets/images/emoji/heavy_minus_sign.png create mode 100755 app/assets/images/emoji/heavy_multiplication_x.png create mode 100755 app/assets/images/emoji/heavy_plus_sign.png create mode 100755 app/assets/images/emoji/helicopter.png create mode 100755 app/assets/images/emoji/herb.png create mode 100755 app/assets/images/emoji/hibiscus.png create mode 100755 app/assets/images/emoji/high_brightness.png create mode 100755 app/assets/images/emoji/high_heel.png create mode 100755 app/assets/images/emoji/hocho.png create mode 100755 app/assets/images/emoji/honey_pot.png create mode 100755 app/assets/images/emoji/honeybee.png create mode 100755 app/assets/images/emoji/horse.png create mode 100755 app/assets/images/emoji/horse_racing.png create mode 100755 app/assets/images/emoji/hospital.png create mode 100755 app/assets/images/emoji/hotel.png create mode 100755 app/assets/images/emoji/hotsprings.png create mode 100755 app/assets/images/emoji/hourglass.png create mode 100755 app/assets/images/emoji/house.png create mode 100755 app/assets/images/emoji/hurtrealbad.png create mode 100755 app/assets/images/emoji/ice_cream.png create mode 100755 app/assets/images/emoji/icecream.png create mode 100755 app/assets/images/emoji/id.png create mode 100755 app/assets/images/emoji/ideograph_advantage.png create mode 100755 app/assets/images/emoji/imp.png create mode 100755 app/assets/images/emoji/inbox_tray.png create mode 100755 app/assets/images/emoji/incoming_envelope.png create mode 100755 app/assets/images/emoji/information_desk_person.png create mode 100755 app/assets/images/emoji/information_source.png create mode 100755 app/assets/images/emoji/innocent.png create mode 100755 app/assets/images/emoji/interrobang.png create mode 100755 app/assets/images/emoji/iphone.png create mode 100755 app/assets/images/emoji/it.png create mode 100755 app/assets/images/emoji/izakaya_lantern.png create mode 100755 app/assets/images/emoji/jack_o_lantern.png create mode 100755 app/assets/images/emoji/japan.png create mode 100755 app/assets/images/emoji/japanese_castle.png create mode 100755 app/assets/images/emoji/japanese_goblin.png create mode 100755 app/assets/images/emoji/japanese_ogre.png create mode 100755 app/assets/images/emoji/jeans.png create mode 100755 app/assets/images/emoji/joy.png create mode 100755 app/assets/images/emoji/joy_cat.png create mode 100755 app/assets/images/emoji/jp.png create mode 100755 app/assets/images/emoji/key.png create mode 100755 app/assets/images/emoji/keycap_ten.png create mode 100755 app/assets/images/emoji/kimono.png create mode 100755 app/assets/images/emoji/kiss.png create mode 100755 app/assets/images/emoji/kissing_cat.png create mode 100755 app/assets/images/emoji/kissing_face.png create mode 100755 app/assets/images/emoji/kissing_heart.png create mode 100755 app/assets/images/emoji/koala.png create mode 100755 app/assets/images/emoji/koko.png create mode 100755 app/assets/images/emoji/kr.png create mode 100755 app/assets/images/emoji/large_blue_circle.png create mode 100755 app/assets/images/emoji/large_blue_diamond.png create mode 100755 app/assets/images/emoji/large_orange_diamond.png create mode 100755 app/assets/images/emoji/last_quarter_moon.png create mode 100755 app/assets/images/emoji/last_quarter_moon_with_face.png create mode 100755 app/assets/images/emoji/laughing.png create mode 100755 app/assets/images/emoji/leaves.png create mode 100755 app/assets/images/emoji/ledger.png create mode 100755 app/assets/images/emoji/left_luggage.png create mode 100755 app/assets/images/emoji/left_right_arrow.png create mode 100755 app/assets/images/emoji/leftwards_arrow_with_hook.png create mode 100755 app/assets/images/emoji/lemon.png create mode 100755 app/assets/images/emoji/leo.png create mode 100755 app/assets/images/emoji/leopard.png create mode 100755 app/assets/images/emoji/libra.png create mode 100755 app/assets/images/emoji/light_rail.png create mode 100755 app/assets/images/emoji/link.png create mode 100755 app/assets/images/emoji/lips.png create mode 100755 app/assets/images/emoji/lipstick.png create mode 100755 app/assets/images/emoji/lock.png create mode 100755 app/assets/images/emoji/lock_with_ink_pen.png create mode 100755 app/assets/images/emoji/lollipop.png create mode 100755 app/assets/images/emoji/loop.png create mode 100755 app/assets/images/emoji/loudspeaker.png create mode 100755 app/assets/images/emoji/love_hotel.png create mode 100755 app/assets/images/emoji/love_letter.png create mode 100755 app/assets/images/emoji/low_brightness.png create mode 100755 app/assets/images/emoji/m.png create mode 100755 app/assets/images/emoji/mag.png create mode 100755 app/assets/images/emoji/mag_right.png create mode 100755 app/assets/images/emoji/mahjong.png create mode 100755 app/assets/images/emoji/mailbox.png create mode 100755 app/assets/images/emoji/mailbox_closed.png create mode 100755 app/assets/images/emoji/mailbox_with_mail.png create mode 100755 app/assets/images/emoji/mailbox_with_no_mail.png create mode 100755 app/assets/images/emoji/man.png create mode 100755 app/assets/images/emoji/man_with_gua_pi_mao.png create mode 100755 app/assets/images/emoji/man_with_turban.png create mode 100755 app/assets/images/emoji/mans_shoe.png create mode 100755 app/assets/images/emoji/maple_leaf.png create mode 100755 app/assets/images/emoji/mask.png create mode 100755 app/assets/images/emoji/massage.png create mode 100755 app/assets/images/emoji/meat_on_bone.png create mode 100755 app/assets/images/emoji/mega.png create mode 100755 app/assets/images/emoji/melon.png create mode 100755 app/assets/images/emoji/memo.png create mode 100755 app/assets/images/emoji/mens.png create mode 100755 app/assets/images/emoji/metal.png create mode 100755 app/assets/images/emoji/metro.png create mode 100755 app/assets/images/emoji/microphone.png create mode 100755 app/assets/images/emoji/microscope.png create mode 100755 app/assets/images/emoji/milky_way.png create mode 100755 app/assets/images/emoji/minibus.png create mode 100755 app/assets/images/emoji/minidisc.png create mode 100755 app/assets/images/emoji/mobile_phone_off.png create mode 100755 app/assets/images/emoji/money_with_wings.png create mode 100755 app/assets/images/emoji/moneybag.png create mode 100755 app/assets/images/emoji/monkey.png create mode 100755 app/assets/images/emoji/monkey_face.png create mode 100755 app/assets/images/emoji/monorail.png create mode 100755 app/assets/images/emoji/moon.png create mode 100755 app/assets/images/emoji/mortar_board.png create mode 100755 app/assets/images/emoji/mount_fuji.png create mode 100755 app/assets/images/emoji/mountain_bicyclist.png create mode 100755 app/assets/images/emoji/mountain_cableway.png create mode 100755 app/assets/images/emoji/mountain_railway.png create mode 100755 app/assets/images/emoji/mouse.png create mode 100755 app/assets/images/emoji/mouse2.png create mode 100755 app/assets/images/emoji/movie_camera.png create mode 100755 app/assets/images/emoji/moyai.png create mode 100755 app/assets/images/emoji/muscle.png create mode 100755 app/assets/images/emoji/mushroom.png create mode 100755 app/assets/images/emoji/musical_keyboard.png create mode 100755 app/assets/images/emoji/musical_note.png create mode 100755 app/assets/images/emoji/musical_score.png create mode 100755 app/assets/images/emoji/mute.png create mode 100755 app/assets/images/emoji/nail_care.png create mode 100755 app/assets/images/emoji/name_badge.png create mode 100755 app/assets/images/emoji/neckbeard.png create mode 100755 app/assets/images/emoji/necktie.png create mode 100755 app/assets/images/emoji/negative_squared_cross_mark.png create mode 100755 app/assets/images/emoji/neutral_face.png create mode 100755 app/assets/images/emoji/new.png create mode 100755 app/assets/images/emoji/new_moon.png create mode 100755 app/assets/images/emoji/new_moon_with_face.png create mode 100755 app/assets/images/emoji/newspaper.png create mode 100755 app/assets/images/emoji/ng.png create mode 100755 app/assets/images/emoji/nine.png create mode 100755 app/assets/images/emoji/no_bell.png create mode 100755 app/assets/images/emoji/no_bicycles.png create mode 100755 app/assets/images/emoji/no_entry.png create mode 100755 app/assets/images/emoji/no_entry_sign.png create mode 100755 app/assets/images/emoji/no_good.png create mode 100755 app/assets/images/emoji/no_mobile_phones.png create mode 100755 app/assets/images/emoji/no_mouth.png create mode 100755 app/assets/images/emoji/no_pedestrians.png create mode 100755 app/assets/images/emoji/no_smoking.png create mode 100755 app/assets/images/emoji/non-potable_water.png create mode 100755 app/assets/images/emoji/nose.png create mode 100755 app/assets/images/emoji/notebook.png create mode 100755 app/assets/images/emoji/notebook_with_decorative_cover.png create mode 100755 app/assets/images/emoji/notes.png create mode 100755 app/assets/images/emoji/nut_and_bolt.png create mode 100755 app/assets/images/emoji/o.png create mode 100755 app/assets/images/emoji/o2.png create mode 100755 app/assets/images/emoji/ocean.png create mode 100755 app/assets/images/emoji/octocat.png create mode 100755 app/assets/images/emoji/octopus.png create mode 100755 app/assets/images/emoji/oden.png create mode 100755 app/assets/images/emoji/office.png create mode 100755 app/assets/images/emoji/ok.png create mode 100755 app/assets/images/emoji/ok_hand.png create mode 100755 app/assets/images/emoji/ok_woman.png create mode 100755 app/assets/images/emoji/older_man.png create mode 100755 app/assets/images/emoji/older_woman.png create mode 100755 app/assets/images/emoji/on.png create mode 100755 app/assets/images/emoji/oncoming_automobile.png create mode 100755 app/assets/images/emoji/oncoming_bus.png create mode 100755 app/assets/images/emoji/oncoming_police_car.png create mode 100755 app/assets/images/emoji/oncoming_taxi.png create mode 100755 app/assets/images/emoji/one.png create mode 100755 app/assets/images/emoji/open_file_folder.png create mode 100755 app/assets/images/emoji/open_hands.png create mode 100755 app/assets/images/emoji/ophiuchus.png create mode 100755 app/assets/images/emoji/orange_book.png create mode 100755 app/assets/images/emoji/outbox_tray.png create mode 100755 app/assets/images/emoji/ox.png create mode 100755 app/assets/images/emoji/page_facing_up.png create mode 100755 app/assets/images/emoji/page_with_curl.png create mode 100755 app/assets/images/emoji/pager.png create mode 100755 app/assets/images/emoji/palm_tree.png create mode 100755 app/assets/images/emoji/panda_face.png create mode 100755 app/assets/images/emoji/paperclip.png create mode 100755 app/assets/images/emoji/parking.png create mode 100755 app/assets/images/emoji/part_alternation_mark.png create mode 100755 app/assets/images/emoji/partly_sunny.png create mode 100755 app/assets/images/emoji/passport_control.png create mode 100755 app/assets/images/emoji/paw_prints.png create mode 100755 app/assets/images/emoji/peach.png create mode 100755 app/assets/images/emoji/pear.png create mode 100755 app/assets/images/emoji/pencil.png create mode 100755 app/assets/images/emoji/pencil2.png create mode 100755 app/assets/images/emoji/penguin.png create mode 100755 app/assets/images/emoji/pensive.png create mode 100755 app/assets/images/emoji/performing_arts.png create mode 100755 app/assets/images/emoji/persevere.png create mode 100755 app/assets/images/emoji/person_frowning.png create mode 100755 app/assets/images/emoji/person_with_blond_hair.png create mode 100755 app/assets/images/emoji/person_with_pouting_face.png create mode 100755 app/assets/images/emoji/phone.png create mode 100755 app/assets/images/emoji/pig.png create mode 100755 app/assets/images/emoji/pig2.png create mode 100755 app/assets/images/emoji/pig_nose.png create mode 100755 app/assets/images/emoji/pill.png create mode 100755 app/assets/images/emoji/pineapple.png create mode 100755 app/assets/images/emoji/pisces.png create mode 100755 app/assets/images/emoji/pizza.png create mode 100755 app/assets/images/emoji/plus1.png create mode 100755 app/assets/images/emoji/point_down.png create mode 100755 app/assets/images/emoji/point_left.png create mode 100755 app/assets/images/emoji/point_right.png create mode 100755 app/assets/images/emoji/point_up.png create mode 100755 app/assets/images/emoji/point_up_2.png create mode 100755 app/assets/images/emoji/police_car.png create mode 100755 app/assets/images/emoji/poodle.png create mode 100755 app/assets/images/emoji/poop.png create mode 100755 app/assets/images/emoji/post_office.png create mode 100755 app/assets/images/emoji/postal_horn.png create mode 100755 app/assets/images/emoji/postbox.png create mode 100755 app/assets/images/emoji/potable_water.png create mode 100755 app/assets/images/emoji/pouch.png create mode 100755 app/assets/images/emoji/poultry_leg.png create mode 100755 app/assets/images/emoji/pound.png create mode 100755 app/assets/images/emoji/pouting_cat.png create mode 100755 app/assets/images/emoji/pray.png create mode 100755 app/assets/images/emoji/princess.png create mode 100755 app/assets/images/emoji/punch.png create mode 100755 app/assets/images/emoji/purple_heart.png create mode 100755 app/assets/images/emoji/purse.png create mode 100755 app/assets/images/emoji/pushpin.png create mode 100755 app/assets/images/emoji/put_litter_in_its_place.png create mode 100755 app/assets/images/emoji/question.png create mode 100755 app/assets/images/emoji/rabbit.png create mode 100755 app/assets/images/emoji/rabbit2.png create mode 100755 app/assets/images/emoji/racehorse.png create mode 100755 app/assets/images/emoji/radio.png create mode 100755 app/assets/images/emoji/radio_button.png create mode 100755 app/assets/images/emoji/rage.png create mode 100755 app/assets/images/emoji/rage1.png create mode 100755 app/assets/images/emoji/rage2.png create mode 100755 app/assets/images/emoji/rage3.png create mode 100755 app/assets/images/emoji/rage4.png create mode 100755 app/assets/images/emoji/railway_car.png create mode 100755 app/assets/images/emoji/rainbow.png create mode 100755 app/assets/images/emoji/raised_hand.png create mode 100755 app/assets/images/emoji/raised_hands.png create mode 100755 app/assets/images/emoji/ram.png create mode 100755 app/assets/images/emoji/ramen.png create mode 100755 app/assets/images/emoji/rat.png create mode 100755 app/assets/images/emoji/recycle.png create mode 100755 app/assets/images/emoji/red_car.png create mode 100755 app/assets/images/emoji/red_circle.png create mode 100755 app/assets/images/emoji/registered.png create mode 100755 app/assets/images/emoji/relaxed.png create mode 100755 app/assets/images/emoji/relieved.png create mode 100755 app/assets/images/emoji/repeat.png create mode 100755 app/assets/images/emoji/repeat_one.png create mode 100755 app/assets/images/emoji/restroom.png create mode 100755 app/assets/images/emoji/revolving_hearts.png create mode 100755 app/assets/images/emoji/rewind.png create mode 100755 app/assets/images/emoji/ribbon.png create mode 100755 app/assets/images/emoji/rice.png create mode 100755 app/assets/images/emoji/rice_ball.png create mode 100755 app/assets/images/emoji/rice_cracker.png create mode 100755 app/assets/images/emoji/rice_scene.png create mode 100755 app/assets/images/emoji/ring.png create mode 100755 app/assets/images/emoji/rocket.png create mode 100755 app/assets/images/emoji/roller_coaster.png create mode 100755 app/assets/images/emoji/rooster.png create mode 100755 app/assets/images/emoji/rose.png create mode 100755 app/assets/images/emoji/rotating_light.png create mode 100755 app/assets/images/emoji/round_pushpin.png create mode 100755 app/assets/images/emoji/rowboat.png create mode 100755 app/assets/images/emoji/ru.png create mode 100755 app/assets/images/emoji/rugby_football.png create mode 100755 app/assets/images/emoji/runner.png create mode 100755 app/assets/images/emoji/running.png create mode 100755 app/assets/images/emoji/running_shirt_with_sash.png create mode 100755 app/assets/images/emoji/sa.png create mode 100755 app/assets/images/emoji/sagittarius.png create mode 100755 app/assets/images/emoji/sailboat.png create mode 100755 app/assets/images/emoji/sake.png create mode 100755 app/assets/images/emoji/sandal.png create mode 100755 app/assets/images/emoji/santa.png create mode 100755 app/assets/images/emoji/satellite.png create mode 100755 app/assets/images/emoji/satisfied.png create mode 100755 app/assets/images/emoji/saxophone.png create mode 100755 app/assets/images/emoji/school.png create mode 100755 app/assets/images/emoji/school_satchel.png create mode 100755 app/assets/images/emoji/scissors.png create mode 100755 app/assets/images/emoji/scorpius.png create mode 100755 app/assets/images/emoji/scream.png create mode 100755 app/assets/images/emoji/scream_cat.png create mode 100755 app/assets/images/emoji/scroll.png create mode 100755 app/assets/images/emoji/seat.png create mode 100755 app/assets/images/emoji/secret.png create mode 100755 app/assets/images/emoji/see_no_evil.png create mode 100755 app/assets/images/emoji/seedling.png create mode 100755 app/assets/images/emoji/seven.png create mode 100755 app/assets/images/emoji/shaved_ice.png create mode 100755 app/assets/images/emoji/sheep.png create mode 100755 app/assets/images/emoji/shell.png create mode 100755 app/assets/images/emoji/ship.png create mode 100755 app/assets/images/emoji/shipit.png create mode 100755 app/assets/images/emoji/shirt.png create mode 100755 app/assets/images/emoji/shit.png create mode 100755 app/assets/images/emoji/shoe.png create mode 100755 app/assets/images/emoji/shower.png create mode 100755 app/assets/images/emoji/signal_strength.png create mode 100755 app/assets/images/emoji/six.png create mode 100755 app/assets/images/emoji/six_pointed_star.png create mode 100755 app/assets/images/emoji/ski.png create mode 100755 app/assets/images/emoji/skull.png create mode 100755 app/assets/images/emoji/sleepy.png create mode 100755 app/assets/images/emoji/slot_machine.png create mode 100755 app/assets/images/emoji/small_blue_diamond.png create mode 100755 app/assets/images/emoji/small_orange_diamond.png create mode 100755 app/assets/images/emoji/small_red_triangle.png create mode 100755 app/assets/images/emoji/small_red_triangle_down.png create mode 100755 app/assets/images/emoji/smile.png create mode 100755 app/assets/images/emoji/smile_cat.png create mode 100755 app/assets/images/emoji/smiley.png create mode 100755 app/assets/images/emoji/smiley_cat.png create mode 100755 app/assets/images/emoji/smiling_imp.png create mode 100755 app/assets/images/emoji/smirk.png create mode 100755 app/assets/images/emoji/smirk_cat.png create mode 100755 app/assets/images/emoji/smoking.png create mode 100755 app/assets/images/emoji/snail.png create mode 100755 app/assets/images/emoji/snake.png create mode 100755 app/assets/images/emoji/snowboarder.png create mode 100755 app/assets/images/emoji/snowflake.png create mode 100755 app/assets/images/emoji/snowman.png create mode 100755 app/assets/images/emoji/sob.png create mode 100755 app/assets/images/emoji/soccer.png create mode 100755 app/assets/images/emoji/soon.png create mode 100755 app/assets/images/emoji/sos.png create mode 100755 app/assets/images/emoji/sound.png create mode 100755 app/assets/images/emoji/space_invader.png create mode 100755 app/assets/images/emoji/spades.png create mode 100755 app/assets/images/emoji/spaghetti.png create mode 100755 app/assets/images/emoji/sparkler.png create mode 100755 app/assets/images/emoji/sparkles.png create mode 100755 app/assets/images/emoji/speak_no_evil.png create mode 100755 app/assets/images/emoji/speaker.png create mode 100755 app/assets/images/emoji/speech_balloon.png create mode 100755 app/assets/images/emoji/speedboat.png create mode 100755 app/assets/images/emoji/squirrel.png create mode 100755 app/assets/images/emoji/star.png create mode 100755 app/assets/images/emoji/star2.png create mode 100755 app/assets/images/emoji/stars.png create mode 100755 app/assets/images/emoji/station.png create mode 100755 app/assets/images/emoji/statue_of_liberty.png create mode 100755 app/assets/images/emoji/steam_locomotive.png create mode 100755 app/assets/images/emoji/stew.png create mode 100755 app/assets/images/emoji/straight_ruler.png create mode 100755 app/assets/images/emoji/strawberry.png create mode 100755 app/assets/images/emoji/sun_with_face.png create mode 100755 app/assets/images/emoji/sunflower.png create mode 100755 app/assets/images/emoji/sunglasses.png create mode 100755 app/assets/images/emoji/sunny.png create mode 100755 app/assets/images/emoji/sunrise.png create mode 100755 app/assets/images/emoji/sunrise_over_mountains.png create mode 100755 app/assets/images/emoji/surfer.png create mode 100755 app/assets/images/emoji/sushi.png create mode 100755 app/assets/images/emoji/suspect.png create mode 100755 app/assets/images/emoji/suspension_railway.png create mode 100755 app/assets/images/emoji/sweat.png create mode 100755 app/assets/images/emoji/sweat_drops.png create mode 100755 app/assets/images/emoji/sweat_smile.png create mode 100755 app/assets/images/emoji/sweet_potato.png create mode 100755 app/assets/images/emoji/swimmer.png create mode 100755 app/assets/images/emoji/symbols.png create mode 100755 app/assets/images/emoji/syringe.png create mode 100755 app/assets/images/emoji/tada.png create mode 100755 app/assets/images/emoji/tanabata_tree.png create mode 100755 app/assets/images/emoji/tangerine.png create mode 100755 app/assets/images/emoji/taurus.png create mode 100755 app/assets/images/emoji/taxi.png create mode 100755 app/assets/images/emoji/tea.png create mode 100755 app/assets/images/emoji/telephone.png create mode 100755 app/assets/images/emoji/telephone_receiver.png create mode 100755 app/assets/images/emoji/telescope.png create mode 100755 app/assets/images/emoji/tennis.png create mode 100755 app/assets/images/emoji/tent.png create mode 100755 app/assets/images/emoji/thought_balloon.png create mode 100755 app/assets/images/emoji/three.png create mode 100755 app/assets/images/emoji/thumbsdown.png create mode 100755 app/assets/images/emoji/thumbsup.png create mode 100755 app/assets/images/emoji/ticket.png create mode 100755 app/assets/images/emoji/tiger.png create mode 100755 app/assets/images/emoji/tiger2.png create mode 100755 app/assets/images/emoji/tired_face.png create mode 100755 app/assets/images/emoji/tm.png create mode 100755 app/assets/images/emoji/toilet.png create mode 100755 app/assets/images/emoji/tokyo_tower.png create mode 100755 app/assets/images/emoji/tomato.png create mode 100755 app/assets/images/emoji/tongue.png create mode 100755 app/assets/images/emoji/tongue2.png create mode 100755 app/assets/images/emoji/top.png create mode 100755 app/assets/images/emoji/tophat.png create mode 100755 app/assets/images/emoji/tractor.png create mode 100755 app/assets/images/emoji/traffic_light.png create mode 100755 app/assets/images/emoji/train.png create mode 100755 app/assets/images/emoji/train2.png create mode 100755 app/assets/images/emoji/tram.png create mode 100755 app/assets/images/emoji/triangular_flag_on_post.png create mode 100755 app/assets/images/emoji/triangular_ruler.png create mode 100755 app/assets/images/emoji/trident.png create mode 100755 app/assets/images/emoji/triumph.png create mode 100755 app/assets/images/emoji/trolleybus.png create mode 100755 app/assets/images/emoji/trollface.png create mode 100755 app/assets/images/emoji/trophy.png create mode 100755 app/assets/images/emoji/tropical_drink.png create mode 100755 app/assets/images/emoji/tropical_fish.png create mode 100755 app/assets/images/emoji/truck.png create mode 100755 app/assets/images/emoji/trumpet.png create mode 100755 app/assets/images/emoji/tshirt.png create mode 100755 app/assets/images/emoji/tulip.png create mode 100755 app/assets/images/emoji/turtle.png create mode 100755 app/assets/images/emoji/tv.png create mode 100755 app/assets/images/emoji/twisted_rightwards_arrows.png create mode 100755 app/assets/images/emoji/two.png create mode 100755 app/assets/images/emoji/two_hearts.png create mode 100755 app/assets/images/emoji/two_men_holding_hands.png create mode 100755 app/assets/images/emoji/two_women_holding_hands.png create mode 100755 app/assets/images/emoji/u5272.png create mode 100755 app/assets/images/emoji/u5408.png create mode 100755 app/assets/images/emoji/u55b6.png create mode 100755 app/assets/images/emoji/u6307.png create mode 100755 app/assets/images/emoji/u6708.png create mode 100755 app/assets/images/emoji/u6709.png create mode 100755 app/assets/images/emoji/u6e80.png create mode 100755 app/assets/images/emoji/u7121.png create mode 100755 app/assets/images/emoji/u7533.png create mode 100755 app/assets/images/emoji/u7981.png create mode 100755 app/assets/images/emoji/u7a7a.png create mode 100755 app/assets/images/emoji/uk.png create mode 100755 app/assets/images/emoji/umbrella.png create mode 100755 app/assets/images/emoji/unamused.png create mode 100755 app/assets/images/emoji/underage.png create mode 100755 app/assets/images/emoji/unlock.png create mode 100755 app/assets/images/emoji/up.png create mode 100755 app/assets/images/emoji/us.png create mode 100755 app/assets/images/emoji/v.png create mode 100755 app/assets/images/emoji/vertical_traffic_light.png create mode 100755 app/assets/images/emoji/vhs.png create mode 100755 app/assets/images/emoji/vibration_mode.png create mode 100755 app/assets/images/emoji/video_camera.png create mode 100755 app/assets/images/emoji/video_game.png create mode 100755 app/assets/images/emoji/violin.png create mode 100755 app/assets/images/emoji/virgo.png create mode 100755 app/assets/images/emoji/volcano.png create mode 100755 app/assets/images/emoji/vs.png create mode 100755 app/assets/images/emoji/walking.png create mode 100755 app/assets/images/emoji/waning_crescent_moon.png create mode 100755 app/assets/images/emoji/waning_gibbous_moon.png create mode 100755 app/assets/images/emoji/warning.png create mode 100755 app/assets/images/emoji/watch.png create mode 100755 app/assets/images/emoji/water_buffalo.png create mode 100755 app/assets/images/emoji/watermelon.png create mode 100755 app/assets/images/emoji/wave.png create mode 100755 app/assets/images/emoji/wavy_dash.png create mode 100755 app/assets/images/emoji/waxing_crescent_moon.png create mode 100755 app/assets/images/emoji/waxing_gibbous_moon.png create mode 100755 app/assets/images/emoji/wc.png create mode 100755 app/assets/images/emoji/weary.png create mode 100755 app/assets/images/emoji/wedding.png create mode 100755 app/assets/images/emoji/whale.png create mode 100755 app/assets/images/emoji/whale2.png create mode 100755 app/assets/images/emoji/wheelchair.png create mode 100755 app/assets/images/emoji/white_circle.png create mode 100755 app/assets/images/emoji/white_flower.png create mode 100755 app/assets/images/emoji/white_square.png create mode 100755 app/assets/images/emoji/wind_chime.png create mode 100755 app/assets/images/emoji/wine_glass.png create mode 100755 app/assets/images/emoji/wink.png create mode 100755 app/assets/images/emoji/wink2.png create mode 100755 app/assets/images/emoji/wolf.png create mode 100755 app/assets/images/emoji/woman.png create mode 100755 app/assets/images/emoji/womans_clothes.png create mode 100755 app/assets/images/emoji/womans_hat.png create mode 100755 app/assets/images/emoji/womens.png create mode 100755 app/assets/images/emoji/wrench.png create mode 100755 app/assets/images/emoji/x.png create mode 100755 app/assets/images/emoji/yellow_heart.png create mode 100755 app/assets/images/emoji/yen.png create mode 100755 app/assets/images/emoji/yum.png create mode 100755 app/assets/images/emoji/zap.png create mode 100755 app/assets/images/emoji/zero.png create mode 100755 app/assets/images/emoji/zzz.png diff --git a/app/assets/images/emoji/+1.png b/app/assets/images/emoji/+1.png new file mode 100755 index 0000000000000000000000000000000000000000..3a43ecae29590cb314aeeea6e1b0fc4b065df671 GIT binary patch literal 5135 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/-1.png b/app/assets/images/emoji/-1.png new file mode 100755 index 0000000000000000000000000000000000000000..41c6b825d6a6abf736a1b882c951c1eb942afabf GIT binary patch literal 5070 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/100.png b/app/assets/images/emoji/100.png new file mode 100755 index 0000000000000000000000000000000000000000..bce9ab14f59d1c8dc298279ed1931292f613fdcd GIT binary patch literal 3302 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/109.png b/app/assets/images/emoji/109.png new file mode 100755 index 0000000000000000000000000000000000000000..74b9d5d38cdce2f1dee8cc7c1ff2fa8619851aed GIT binary patch literal 3698 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 sm~u* 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/abcd.png b/app/assets/images/emoji/abcd.png new file mode 100755 index 0000000000000000000000000000000000000000..5218470b63c93b4074c814b879f5c7c542c3b855 GIT binary patch literal 4471 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 JPDHLkV1i%gPt^bb literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/accept.png b/app/assets/images/emoji/accept.png new file mode 100755 index 0000000000000000000000000000000000000000..2d200903188ccc0c59156798e3a939c2dc88ab7e GIT binary patch literal 4729 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/airplane.png b/app/assets/images/emoji/airplane.png new file mode 100755 index 0000000000000000000000000000000000000000..8407cb6757565f0561b470f63a0d2a101fcb50f4 GIT binary patch literal 4740 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/angry.png b/app/assets/images/emoji/angry.png new file mode 100755 index 0000000000000000000000000000000000000000..f95bfa897ed9a5bf105a66a3e962eb11d6ccd1a4 GIT binary patch literal 5037 zcmV;e6H@GnP)5J zchy_#obJ8X`kr@v>pOex?!zCCKkASA|61~D1AGR|#TTK#w$Fh3Lo`6PU&3k?&W!@jFp(S=M5bhN29p!S2n20ITScAX z8mSyMb`=-vZ(_@RqJ00TTUZC^>)L?z=TMr{!v{>jM{))8_Mm8tDFv8(3a*H8NT5>^ zkhY;!QJYFoXK)R{)g7*4u~p|9HTNrL`Om=-ZeMi|mDiO4KRcCh$zm=JBl$$GXxKbTc08LJ8`uHtp_AymSi-cHer8Ki@9RO zH(7V643KRXaao}x|B~yCI)a{vu;ehMkg$Ix!I5WR=Bgy^U)DeXR_T^%u}JugF&l<>2CIZjP`! zAShbG`O68Gt;NiL3xoyG2B<~E@VgwU&Sy&wk{WLBqu4FqCE2?fTMbA?E%E*awQ+mv zzAFE)>JG*LeKie`C(mVJUmv%Xy2DeW{v2Uh2s@|Rqu+yBvKGnrfU6+@BEQ>c%FF@@ zUs%4qW7&=41$_~2cdy;If{v1wE1HD^zvJ|_T@~FmxF)!0!~`eD?cqPDs<%L zK8qqSJu{M3Ahf*G}rGRDlq;>j9FT50Q*PBdrI!YLh#L_0QgR2TvTxgz!M{ zm-JIuROUp(ysZ`>Gr}~ZsQg}4`@I;{3ln_)sdIWoABi+6$H~cw|O6roj^oEXPNm!kqJ(a zQhzhXAl`>7M@_<=O({DdEg!PPiAOnIgtl`9BNmd1&A*K*u zat6s25fg%~f+(-cLnV!|8LP>~&Dc|hVkutrg*AHOX?O7m;AS_#r+SpFl-hj#ANEBlA915y{^KJGXbo$UB0tiU^dms`BvoUZAbvJW9!~nJ#vx&6H zkg}vqSDmCwKlA{b4rD;ExXj8hZ;B>wFrh%;1JXLU%JgeNgrx3R_vjc~w^smVZeNb& zN9S33ghBESYB5;r!KXv(EZHF*LLdmB5TSL$wk?j$TkGr}Y5>B~N0nIp<}Sj>fM!Ob z+KN?Lv8N0vOUksk>{bGs0hx6P^c2l;L0*tZkiZ~DnnGhp#=#V_D+EtyR|)T1RdE%-pd_*4W)CLtb! zWTIupo&n+&M8bT0>Wg@I3|Zzj zrcV}!bqF6gy98^y8LtY@JzM4R`}VQ~I^(mvC^(=pPqT4PpXU!Me3eA|lEkKl2IlqqEcq65|d zBNW7VaBWFcL8hCaUSwNgQK%=dYaDh@u(ZFx(#saI;ho()aK}qL_4qh9-9E(CN6e?Y z9Dr>r-+?eX6gST?I99%;%;^^_1PPavR-EtaIXjkHjQz^x(Z??tqVfxSRe35yYB-K?bhvfiOLOyj6$*-T*HR+dh+wb=0tU zXp5>K8u*j4%n*E5%={Rp5yLhAZ-{4}s?l8(Zhv-?i$BrNC$2t%Ql$Xy%aY7RLA>HwJuuPWJ()zhhM$vLo)vUvm4Yvx`cag3>R zs7+8Spxz9h>)FjrmikEMD|unVx&|+7ZE)g|A*D#zUvd24w*6dt^8&iN1@_iw8sOk9 ztMiPGG`Q@l{T#6%U~b7!iIuHe8*JD($?Da)tcW^1xn%VjNtLa+v`#ZwfAHz&G z*!XCIvC0ws0X=zPGJ%ms+Gm~BZ&5HAANT^NpgssxvJ&7Fb=I@ECfjVgLG@y^Af`+GGP|wk4oI^8A?Fx}p)_tm2%*s6oim z99(8#pr`;w5#JI*&s+#{LReJ7oDd1*O3>A(U@Qd8JWQ(eoYuKf0m4+FrhPU0BuqTG zHvmBtu#zoNW59V&oBXcD(twl=u(NH49gzI$CAPim7*`{91+@ls4iG=n3gYlt07iYw z^p<7E3Qs-+NeC`d8g-@6CoEZR!TIxOlL8Kw93vEZg@!0D2Z@5qGu5Xz-UyJHfJ!DZ zBe0;(XL91ObyrK-fEaMI84!QtSzf&CWVROSdb}n+g)j&pfqM9sR1^`v6g&lWIPQ4m z@Rh=@&Cu5kFO4WCoT1EL;9!i|4X{j|11Fqnc=|rUg)lVARA0(*Z&VluRPpuRj|vDg zKmVZ>d#t#+GErq~%61?F6sS+e!~yB5Oe*O5nmvm3zJed!L6B z&VjT3JO!8qp6ptxaQ0e7^1_xUl|?JyoV7~iV-aRP+Ekg@7ZylBQ&p9eX)fHc1JkVKt#bQU=^Ey)|8~CE@c9$Ks=iP01l{J`#Asem&fbI{yz7n zpdq-}5ah*!3V;U|knHvp<6j$X1w5eS0|iG`M9KP?AONL#WQjs1FB;&)eXD#t~2JjH)+j432>keBoxF$dtkDgp|+nH zADn5sS<2yoG8P(M3J7h5&V#o76-rdH^BkbQwLbOhijF%{mXryowi^)4@`;>(YA>S~ zF5{hrlJrPkFga*FCjjvv1Rg5Dzn2Wsh;Q*f7bpqxI3m3PW zAXzrZ^v`_{o+<&q?ny>11N+^RDFZM9OdQM~N9(}IXpQc#ZqOV5smtCdMN^Qx5QPpC z7zjZ`z_ghFKsNi7VB-_Ym%pfVN5bJp3#AYOk!;rnl)IFkKG?n+zW7T2li6KHq? zUQ5&+gH1;WmF<`_q(JsU6^>_>zyly>PAKNZB+d+#Pak$A= zb=4TuWkF#iOHKbMjR=MYgs*-DIwHf|9)SQ{hY<8b;V8%*2{I2{Q7{24>KBFw;HG~E z>jVPY9+S7Ndq*plS}Qg;>PTZvV@_iS20e=&?0<+fe9SD3ByDv|re@6*fNNm{{+4 z_#x%wpTTKo7^naW9y(j^31|ac72LQIk2o6p61MJi_nmjA-VN;c3=M#TGa#!4LqPG8 zAL!TaTI=Tb2lfO6A_Ec_1VKfcZMOCWL}`q}o)O{fO9IaNi-3iPDKs2Z)I%u%IT1>8 zl*11fPB}H;x#vQ@dz)p;3(9FW%Q75U+BblPpcTc9IpX0d?X~RPd8Oul<8J z0Koe76aCK+`AhHBf4%u^d*ysM79W#3!B_)%AOZ;mjDkWG!4?0Kr_iY|Zs8?uzl-w{ zh=FkhajZDPaK&dLY9k6Y2g>wWhgi@$xT;HMz6C#!!rM)0j8n1h0rvXX?STLTUj9e` z2k^oevSEOyPMxbuJB%*$A4P~VeJ_sqDlI^06~@$;Ajt%v*)@1F z1MJS=83lNy3;?L(SK&|{`P$Pwy?U;U_6K&QNeET5HHtR_@TRnVZqxQ!+l)wB(!^Kz zI%rjK6JS&LVQsGW%ATb5%jdZ1-QU*RhN?~I0brj`eO_4uG83#f!rZ<|UySRlUtZMy zlGBCif75Jjc3+MY)MkJ;0J!}_I9 z{8ZNggC5?`Jo>8sw>VG+=6LlM1Ijm^$=gmnO5Wcy*Blje8-lXIlmsaXK@P|X5&?cM zfst%<1)QSZu-2|!u?;`-6~#`p3>ew(wm-OCzxVg|@^IBM?yLQv*EpcB)%OKDfo`A| z=mEMGb<+8{Q(5)a#qypxy|OawG?JPSlnjy=BnRU65~+*<0O!F`zk_SET3c~V_+-NA z;E+D^$cy^pPd~`|T@y@zzr%xJKkE~R;u|A*pAB8!gt9j#{Kr)sb@nl4)lt2=swYL8chrpujBH񉏠NkvXXu0mjf DY7tX_ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/ant.png b/app/assets/images/emoji/ant.png new file mode 100755 index 0000000000000000000000000000000000000000..b92d1cc14bde3bd6bb43ba03416719cec806d803 GIT binary patch literal 2851 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 Y3w;ooYW65K8~^|S07*qoM6N<$f{_iVPyhe` literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/aquarius.png b/app/assets/images/emoji/aquarius.png new file mode 100755 index 0000000000000000000000000000000000000000..cbff66edcf3c5308ad51cd25a8168158934747ce GIT binary patch literal 5096 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 KMNUMnLSTYE$H1ll literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/aries.png b/app/assets/images/emoji/aries.png new file mode 100755 index 0000000000000000000000000000000000000000..899902237c974fb00d51b113e405e3747987c32a GIT binary patch literal 4345 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/arrow_backward.png b/app/assets/images/emoji/arrow_backward.png new file mode 100755 index 0000000000000000000000000000000000000000..088621834f79d886414b5bce8038f51848600d2f GIT binary patch literal 3180 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 S%9gYM00007 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 Ksl8UQ4gU`%ogsbz literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/arrow_double_up.png b/app/assets/images/emoji/arrow_double_up.png new file mode 100755 index 0000000000000000000000000000000000000000..d42979d4bf6adc6b1ea911bd0625beefad84ece1 GIT binary patch literal 3613 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≶kvzD;f}l3J~%-Aeny^A~eIr2Tvd8Yufd{kd#8sB6>+ z%{j_YYT3?ak1C{2eiU3}0=fCQiOSthZ_|%2D-#*?1q^|_ICt%&LOU8haO6QaY(4Kn zZa*tw()83mmsSo6_C7MrK04462S0jS8)R~pcx*2zlXX`L%FQxhs13GRa!y|?LN*ys2vAk zi_kO*L*DhG#P;$>W6Jk5D~0)|6a5w^%kV8(6@#}icz|VIlWb^PRzZ%aej|Unr#8LS zl{8#Y!H7jR$s2cC@Y<@U!To{GqQPW=DQTxY5wxc{%bJ0+e)D<0X`%4|o#?KmXqjHs zhH$lekyRAdWy9;V8+qGFHG1{2*r(TxByP%j(}u)c-$8G4WZ0#j3Lnx$Zw(8%9GFe= z(x7uX51mzWFeQPiH!P}yFE(&`a29(%!_Dp4sO_H+9i0yaDs{%G5Ao8J2@u24jjXy~ zz=fiSwS^CluR=44vl@mzK~!)bvESeKvYo~Hji=>l%YB>PCVrSK*V4hN znZlw{1-?^l!=rLzzDp&W;`T{vy=fT-OA#AhPu~QzwJRdrg`;&BerL+ z{>5ulk=T+%z65KWy_(y7seWwK3z65m&F9ri>$j%YAYr>AE#gUpSk*V%pof`93xw}K z{2yG-d3~pE9U^~-WGNJ7M{5K9ucsla=QK|j!tJ0rJY)n)omV~ZUbZ%$5?+ytf1Cyq z;b5M{Z*fdu~GZ(jm28kJ#Wbnx96JlA{?S9mY66nJvz4S zM}sj@>VEm;qfFO1GCGc5aNC4L;01 z`%+)yL@z49aaAh^?{cmW0h_*a7m`iM|7W!x+dLoRgO;jDl|#fC=6HMkMr0#Vrg#RS zLmN8@9y(z(1WGJtF3_Cld?PSu>hsEHQJ&!th+nEq()gZ@)m=umQ@%oKwCU4b_B$qpckK(2I=fXUokFGs&LmNITwKni}kHIEY&_;08!h8vl&v>A;4A{!igW z_xrzckX#K7p8-hNdU|0hoL*cj;`DoMQC*y4Ia-Laq!| z<4wTMdg=Wbnp^)uLBy)^xm3M#LR_Qzwyb!CSf>Bxh&wgEE@l?0JKF2S7l@`aR1vEp z<6SFGQ|>9ZTzRlF1sl{no5%_tE$cHX@_uGH&&`UU%dDcvbh~Ec4%dDU*$$ z=2S_zQ@(-lE*s-9NtGqRQv%p2L5+|i>gKT1<(x+=<-fy1Tuc_2$k+fE-JcOaS@;P- zz6G8`bw}-IOXOKeI)>{r~^~ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/arrow_down_small.png b/app/assets/images/emoji/arrow_down_small.png new file mode 100755 index 0000000000000000000000000000000000000000..f7f2d510137230ea3126018c3b790fda7aee42f9 GIT binary patch literal 2934 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/arrow_forward.png b/app/assets/images/emoji/arrow_forward.png new file mode 100755 index 0000000000000000000000000000000000000000..fbfe711b64debda17e7a38e48ef0e3d0f05f85c3 GIT binary patch literal 3201 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/arrow_heading_up.png b/app/assets/images/emoji/arrow_heading_up.png new file mode 100755 index 0000000000000000000000000000000000000000..c8f670a1ef0d6507b478c10aef33805db936a958 GIT binary patch literal 3520 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/arrow_lower_right.png b/app/assets/images/emoji/arrow_lower_right.png new file mode 100755 index 0000000000000000000000000000000000000000..da8fb8294d91d46426752555c1b32e9543f6f4f1 GIT binary patch literal 3334 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/arrow_right.png b/app/assets/images/emoji/arrow_right.png new file mode 100755 index 0000000000000000000000000000000000000000..6d483b5144f38155564201bb77b7de0921c23de7 GIT binary patch literal 3022 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 F>R*r%&l~^% literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/arrow_up_down.png b/app/assets/images/emoji/arrow_up_down.png new file mode 100755 index 0000000000000000000000000000000000000000..b718c21458293f890b495deef5d48acf989d6c29 GIT binary patch literal 3544 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/arrow_upper_left.png b/app/assets/images/emoji/arrow_upper_left.png new file mode 100755 index 0000000000000000000000000000000000000000..e895fd7b628ee110eaa92196e43aad48f96f9121 GIT binary patch literal 3228 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/arrows_clockwise.png b/app/assets/images/emoji/arrows_clockwise.png new file mode 100755 index 0000000000000000000000000000000000000000..5f84d7e72b79e1ada173447a15f44444dcc1b5e8 GIT binary patch literal 1399 zcmV--1&I2IP)66eQ^|hh=GD2 z1+ifelZJvM453&Q3ED)MnSwGBM`P3L?!E7y^F+LC-akXR_q}5X{ob$VocH%W=Xst3 z=T*Y`qFHBb>ZE&v^@{EQfasi>zi^GZsACJdJM@5hTX$+e0RkAzb(t{7E}maYf%xTz ztoJo-Jc=el0F4H6%o7ovP(v4H)=Z$gHMr`uH}M!niWr0#g~Fu;_=hlxzGCR2zeW+* zl4ZQvYC=G_v$(w$T(Q!2)~_qFL@*4#R2YG_&LXI7Fl3{MRF8~xJQU!qu+g@ zH*o~EX6fd4eOC2LT>wPfeM;In5Q24m)e_@Myw8vrLL53NwFglPG~eXNI$` z*Fqja;Sy3H9Qtz@K)K?xLR-cjY09+Vt|(X-@`P_){l0F2bXre2?X46ru`4Nx_?Z67 zV^pEsC%$g#Yr#PgZeSvAS|OW z&($ojCF^I3=OVzNsjJxoMU0`q-AiFU#KyH!2l$K%q8US}07zTS0@o*)Acl>9nC+zz z2r=(0Oy6g@Ie{_(Y7?lYd_my>RDM4uX)BhB#qW<_Az%;^ML-awLZFrzKr#UXi3B8h z1PrEDfsz>}c@88ec@EU@J@FV_I{%@MfGOKi!RLPXq%hF92neM}f<}~}6ACp@p)JY# zfUI*LNGL#Ka{vUWEo*3G4hR4VW+WF70`5nEt~?LdwG5LdAqfv7dFU^xqJ(8=9{R(` zAT=IFR>ffyCXIlsLnBJiid}S>gu+fH5Z2h&9IO%ng-$9!P7oB!C~&Ew?Gu$%2nyHJ zXbdreh5ORuzsD;Ge6%oGtH5GZ;;7JAU7VwW+h5qdUdF@55S5jl;I!%;iXwUZ;b5}n zJ0dlb+V7!=(FEkj{C=uX?Myjo4-17*ib4p;!I<>dQw8UXWsOy1zuAJ7#n?u~|s9L%y)X6tXoM*~8H7!#M;hu%-EFO_Mw0>}x50+u&T;@2=HxvjFNa11Ve-h8+0x$Rs2X0M*B63I`2k5>j$k z98&zv-z|Ai7UN`7SS$hb%NQgS0QCde6b`CXD}Er>Ai$pp_euoH<185fhGZBTA<)L} zq+^BEQ9wxXNI1CM6-aYL2B9GWpf)kZ76%8->S%<3a3~lCP}@1cK8YG80BQr{?1Cor z>JlgnMZ&UOZ=e7umoM25kir5~#kn6*1ejy1EUt+Ffa>CNdWpdyCLo50Z}?bluJMmc zmEi-jbWqMT-*GH{`5Ftvs5BjP;gJVs`9#lVly8GpvuBxtGyKDC+Wko3rRAN*B0DvJQE&l#_75+6|0H5bF3x^c|06R-YTtv-% z@i5&(8P_AL&m01QP;=56Kcz*kq(%}!^2|LUP|sqw<&@>wTG;(Z9$ZG-Q(?HR4!c*% zo4{N;feopHtQ1U}vuc&yvTZ%djfWRdG}_VJj(5`t=v)h>jY zFU0LGq^s>Xd_Otm70G9TJ_ye69Nq0yp=6rL#bu?m6kj}#t2B?$rPWw;n<+GbNsz$z zcLJRbfGPIe&NO~z%S-m;Ew^t1-=PfNVAdWbWVufD8r0zs8*xgK{8=MK=RH0wSP?Qb z_YE{(3R-9mebZ9|pR$H~SFM@>aZ@sgo3`1?@2kk+NFmimj7~tUSXv4UYd5cb>gA}< zu_&&(fYxqC%4n#|JVsFRUXxsAm$SqM797VFo(D$g46NRkEh{d z`}e3Q`w|{4AkN0CRp-P_w zNJcr|ekl!4nj1Zt8IH1I74mr(m0=}ze(Soao++xhg)%84(IUind7Jm=EPvVL1eXC> zJd6&c*{(PB_t*I6#chObCD;`8JHplZ6e&ILQFhTIcY{j>>fXQ%2pz~2w?IF&N7SGt`y%z}7==&IAjA7T7MlT5P!Lc@JI-;ePfb1_coR(`-m;(uVDesKLD+NNWORG7i#|Zs*Gto^b zaTW$kh<(xNFJ~z|YNA&{HzPxG;xDE;V*qNndP|6IHUh@895Tr`0Xk7ssV7&TGV zk})K=ty5fhT~f>A6Xy>guk$k+p!Ut_xt)Gq`8Cp!&|Y7V4rXlU4#{?PMNh_Nrj`cu z)nX;Q##o~QPWxwM8av(sme|OMGC28b=|ljkA^B&Nce3fYIrVivWeFIWc@Qg|C;O*t z>}9b6&IC=TjJRoMy9A1{FwS^Hph!^ea1+0(texhWg~+8ewi<;JKP6WI4eSU(d0e7F zQQErLNq0c5N8PC;1LI+bDzs1v|Ay{dhnCep1biNG(o&EJSHYvEeQSvQ!bvi4nBBS*G^3HQ8^0pV1%&-RoCsu!WigyM%=*)hXuM9ia$=L%x@@@2)@%S9t%l`4~cNUKFC3KwfO)d_~VnxBk@{N!Olc1 zD5PpJ;5B^=1%|f)tJO8NPdnMTftRPC8_G?5@puT3=8Ygn!j@l#hJz!>MYaSi{5`&P zQ1}@mkrDq27&_$nH0shH=FL*Sc58CH)Kzg@B*CYYlTWvY|5 zhSmkMX&KCgVR&lSx;%MIH|X|wcr<$~^0|j%et}}?I|G>LIiwlX`OE%AqA!tq6H8OxUDPp_D}w_`e-Wl33&Ms3Wm zLJ^h)`jrYB$Cwy~OM*IWF_X$~3jTU6*$;;T737|mOrW4B29AVXQx%n*@`WXw)3Y>1 zNqr5Zo(a&CVy6Dkm4weZ*jJ)5>kV!@uAXo3jJ-BxV`^|IoAsf$%+?_{(r37&o7g!I-ybpsMw4CzQd9i z3vVnQ;n)p6s#cEkVIUhbmGS{EWKW%b6}kyKv2S9hBBwrD^@S{}ZuDRqZx}Yj#Xhm$ zGFp%I(0}F<{ijDH3mWV-%YjJhjNX^-_mA346`rPo_RC{9TKY?Lu$e1Z^2!43 zZ?+}I?0SR7xh`QJlbNAuE#g}x88#>Vl{i(GZlHC!Si#@t>H#S_ZRyI^_}=fcG;A92 z>A(_ErjjCa@5hy2t0m&TYhKkY*p;lqHzTYkG`@=T?F8JygXh!ZZtBX=FSw4n1IExP za2mnJjuHCNJaSw{A`kfP=3XdI3^L#&w2Y2fRtgq7ojKSs|91|pOLY*HAFuq`G)9mJD zAb*+RnS9FjWqfH~AqCWgA`*Aw)I<0*G^J0}?3|N(8|U0(R$x0HGC1QXUeCAox$b>E zsUT4zyXeq87r{Oq^pI^;Gfr5)vK{<(?JW+4;*Y;!JXf8n@tE8tzCO{!i632AAkv)) zX$#qD-{pMA6T0&ja;=vQX}4qfx*TLL(Xp`7aN{g(@ye3%*xQFi{i^*+76!bYwy~Fc z8!}Zln!*@B=6T0SBK!w)U>aIDcUiz!D?@@041CpGh+Vi`bnRWABrw_`9c>1Y6;zp6&K6K&r1|7#F!Q&ZW8vL*W^TqD7#N;n-E&uB9P{lQ0;M6gb2prXe3 z8`kP?AWBMJ0=6agM+M%S_SS2+*zt-dc8j21&}+wW46egCo@o7~g@cvxLvw>hM%JhZ zC^T93Xw6FdWTrLX2$df|O?$Ac`#PXi?e>FddO=5htrrf7F_&SP0o+fM^e`+O$jR3N zt(5U`iS0CA>nZ^_1uc}vSU(2T=NskYYhSu{uLU}4+Ls~W^Dg3rv_pPYdql3Q_Zitd zp(Kehvpt{k2vbD7Y;H1O_Buz9c}>CiYbT_6#o2hTvy)gCuw+DZH~E`Bqa-=9I@24k zf2UoRVo!%~i1Oxk$024ckI8X=ER_&<1-4*e3!jw(y3q>vEAa3z={#ctaCedu*sEe~ zIC8BDMSgm}lE5hVd6}6s+$SeUew-B`q+Qu%Hz4`KnZbJbEQT5KaK2-=e$+m&i@j^d z9b}^Ayrocs`qq#X93x>w1tL;MAUwvcN@m98F;S~ZYh1eZG!}XOmOGSZBu3P$&YouF zi67Vr0(}x%C^U4{!V+6+?7@%J3Bp|$OBa7|l_&fOaYWyS;^(N*3NsmWM7|VtyB_BM zF#@+k=wF|hf~Py78U5TjfrugzUlk?qm}=cx8j;oo>zPxaIP*$IpbZ>LAwlZpS*O4{{LBz{Ahk;aBb!)viw%6uZ`g*Ecwp>-AS-xBo@l1wfArpa;ZZqt^vWexx$pL>x7iUPIIU{ZvIi6Q z#L{vr@j%0IM(kxIGm98d`o0)Z+JG!${$hj7*Ew6!BOUhKR%dnnIA z$L}foR)+A@g5s@}jyn`X@OplwwB8i&rqb>=hk?u)e8&&qFI5Tpzb>(1X!tC=7e+<8 zN>&$+iaRI`Hz-eQaeG41eI0oH^Wc*TTAUGezqROQNlkEA1rH^NR!jrsFklbsrpEwY zS;Yady}d}GiHqb5z{!sB_|}`_HxvJAw7e{Ls*|gujkaU`Q#(Gqmwq$6SG+)lM$Rbu zxpA1i@$SH;I51~MeLdjmvgcUx-f+52Tn$QYed-+Ir5h2D=a9@2T~^s#DflFnO?I zOvUDNy8?=K&#iALJ)SZ@?FFw!oOP4a0)MO)1+E3qe+7r4c2z&YNU0@TA;S^e2}ztk zqQ2d<88&f!UoKDAKE1=Ps`O2Do4xiji~nsd5^=3OxtJy@<>r7vPwE{)s5M@#edBjf z875&i4V1oT8X2t7yx>ZZm} zxLi|cHz^P;B^*#-Cg^NE?22l!_|EY^GtIBmBco8ebx;|Q0h+eTj8-1Q^Q3}x|6%(b)hcM>(KxjUX`HtWkeG$d(nHq z7iZy?x1rpF7G_6<)0#F00=~{*BKVV)V&bmd1+p!i?Leclh?H+h1%oZr?OibE4^Wjo zmSkY%W8JGbmEht2jppT3d+7<1$xPmV5P0A_Sa`EJcw*L}(mr&5fX^`kDSwtc-<+d~ zj$h@W6AC7W2e+8N1(CH9`kV7^t}bj*)nhZ&21yTA_a+HQIqYuI=(c+xyKQ>;%wOVW zI<_wT+Z;VR!lm-hCc~_?h4A1onCAx%dbJmwq~@Vx3{k8k+p3gB2-HFcd1UUu@V~);tQs`P=hz z04(bhi}$%h4CU3KBJfhmVMgbj;K{#A8AkEMIHsR-yG3Y~4NT=vC@$vyDHT*u64(_! zWDvBQn6>vupaC&_i8*?9HpZ_$f+}W_mZm?#_7Xc@(VScQ{<3iC5 zm#d68pHjd=+O4V#MXhyGy-tRw@z{SKN~ZXT2Ei2uk*p0WYzRO1RMP=-wO1me;M~w5 zr~G+eI-qK%1R7+ubk|RR_tVN>8z=ppAQFqCGtBIimPbkKOo1_4IvL^;l6^uilMJzs zBZvbNNe)p)$KuxMWV=CGyOCsjiCL?6O6IHC+qc)$986Di%l~RZIQ)(yYtL?XSfi-Q t-Cm2qE<}|sB%_6%TyJ&&@^epcgch5yi)HKZ=Lai*jD(_im8hZr{{iq8H*Wv{ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/art.png b/app/assets/images/emoji/art.png new file mode 100755 index 0000000000000000000000000000000000000000..d45212b0340418f08b4c2dc74bbcc9a837af917f GIT binary patch literal 6744 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 k<6{#~hgysHq)$ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/astonished.png b/app/assets/images/emoji/astonished.png new file mode 100755 index 0000000000000000000000000000000000000000..858a83484a8d7dcacf867dff9f7513f4b4a668af GIT binary patch literal 6043 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 V_SY1Np;!O_002ovPDHLkV1lkuqwfF! literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/atm.png b/app/assets/images/emoji/atm.png new file mode 100755 index 0000000000000000000000000000000000000000..c2846e792183b0957c0821eb27ae38c4dedf4c66 GIT binary patch literal 4072 zcmVP)Hu!Y-8g{?Kfj}^XMkOs6upxe6gIPZ?Hfyif_P%Fd^Sbw*(>q6_dRDXJ@k(jz zRr-y7jdt(ZJLmi7KmR%V5?X8in34Q(^ZyC3IZZ@J%@vOXp&1s&t!D*S>W;abkC6ahflnbUuxwbAMJ>wo9k$dNnStfv$I

    8N;;W%J@Zb!#0RLz*9K%QKjThz*VuL@dAt!I?n=XiyruMm2|0n%55J zS$mPqQ@7Q#_IbgsBVbSSakJ^`3U0tt6`P<~_GPDj#;UiYtqYghGiQ>hi}U;!>gi3x z`VV}fw!pPHtI7M2^)+{V(hjQvZrzY#bZ89!_;Ip__U%ZW*m9ZP{FoMAswXU;>!ry zaS+Os1yd5O(Ng0}iL`veCV zBvnw5XlCK3FJ&Y(O4s(S;AKI|lh>Q(aPi8;Bq9zbUEjo z(_Bm#Xv(q6?KKEZKI@?ag(|NAK0b7U#~%J7mtERQ-ctx5>N@=8Jx|ipKSWDooZj9M zu3dF85B=h9(uI2=s-D`8bd7T7!_P5)W+N}Z`6xcVaREWZ5&YMt5BcUV-r&Md%rx^7 z2o4=M&QHF37ndxWW#$4PC1_7@=Qn;yCY>Xf%NwVO){#v)NCBzQG|f#(f|6sPfKVon zi{`GsxuZ;C?X8{MzwUXO>&_vaPBVYOIkYXgl+$HFHb6YIfrh3!7OyD(y4Hn@`G=qW zH@UorC53s8MJ>McrCSk_GLm)wK{}HmHIgu==t#ijWSk7h&nr1vJ&f7#_`%sEP2q zcMtH$V=wUF_cw6Qw|>F*fAVWe*?X{yuYB{TJn+2@eB%et@jy5(Vp*n%R^p=b=a3p4 z0j)`ea?9Gzr4s3Ej;<4f#--?0hNKK-LP$-{%klBio>m1 z(PRA-VdbLp=;<3I7K^aw;1PcK(^q)>saIL|v)}OKuil`Pk2<M zFuvq1qO~!a3fJosBoi^T){N`B0^ZoR-z-0XRm&C-jHb!wd_Ztn_%XofSeC8tf5bRc zQ1uvZQ;Jfc^~pe+wIhMlNCy8%4>zoCqmgg}lq(j^Vc<{~BiS_RT+Vd$T;4}{KI2gY%AD2+3J>j*_sho( z4y4$!eJ@40xU~U#_Op0?3q`_ZvIk)a#vw2cV50gipo{Xw=aK-1$Cxp%iFvK96k+rB zJrIqA<=106auII1;ZhjrqGxb~-u@K5eS?hj_A@p-%sBEM^bXM7KS)n+$~4d6@Z+)6 z_;E7udG)Pb6k*kh3xR&F{F6l#VatwvL~W}q!9|Bsw`$vF_%Qv}Phc_~c5D=$CKuU^=|onO3(Qq~l9gZ{za$FI#zf?$kyc76!JteMle z{r2TVqcH&9HlNR8S(2($|7K|XHi(dr8s+>2GpKK#MiCs><;I(CqY|IH@k-V``b(77 z$ciOc_W23NnaV)$#@2RjS+fFZ*?je@cb#m2@3aF><@=ZVXsT6!9v8(n%uV47Pln5{ zSPHI7K9dI_DlY-_gi$`mW^v?3|GyG#1_x{t*c)$G+MTpiUS$@fU7#uPF2r8hdh5&G)?Aq61nq>)Q_vq|6 z2DZ!OslE%~r*q&&xTetAi;Rqn@s+#3!^8Kk%*yL~BJckVY^G*SReeix{k`oSSqE}f4ZNl=8{dk=#nvFFVo zI;)vT7&Oi1{XHL3%8fT%0c7!g4NxwIDwl)pI;2czWX- zcz!^{wORk-Ca8;#JJ{H+MS3(7_Ja+aH>bsP|3tio*$Wpiu=@ZwHUrrl&%UzR{D{hu zlAU`ypgumn3L=GZ`QkVa*R|Qx*#q$?*kJ;8>|w*pZ{mA_5qf`rhq;C&*z&h%6j&}v+`(~31OmQF2L4hT76uNG9G`q=9CsXlJ<*R+DbLwO?v znZ8}Yz`iAwe=nd_G4nnk0bNb#J3Bv_pSJ=L) z*-Rb;|2GI>LWF_kBSZx0Ih7L-y(zpsnz z;XS9U01rC~j*D>YVjo~?BP;|O?YI=&q~+!-CLqX-^=Lm2COpsr&`fOv1fFp!xCQxi zf5il-+|V9!x$E(LPyq-v^(#PY<6@k0IaDsyUbzC&{hNc_$UT;qLnt4l1;S!VqXV?^ zQK3`lW*jRfAm91UyOHS^wX6D;HW`g0qys`s`6j4yc~p9gV5qmf;8-yMWCln5!6Q%D z4RgOIYiiAQD1-oEPr+UwFz>$ap|Tl*;UNlc1;@$>fJ~f}4J}GQ_4nkl>V_-QTr$Q1mC?ijh z&4luU_}xd27Mv*hRZM^m5kd_3Cw4}%Zrxp4=*OHOn5&bG$XL{z4TNco;;ilXS_Np& zM`f}E!vlET9i6$3*Y66QjspWar0PFS2_a?!aeKzHS<%+3A9SY8yV^=NAY*Z)d-8xJ z&WclFL0W+ZQ}X$O{8%VIh}V1Mwd|qS9`a9YKL(72u3Z?aC%^{g0uDf|?T*z}bL(F_ z$?1yU;m#N@PN+H)vug@@+3rnS%8B9 z8JmC85*eSlT*m7cYAe#PCq#gsN0d4tF4F1%QNiJbp?N?iZA_P| z^}80QMO3EQMJ2m@z$}L*QDG^L}6f zt`uo&QEE%OQj59!s3!SZ5^cHtb~Idb4TLK5;qbbRD4l{ofT z)L(K5+U~m#`yP7?-FMu9SYID1DME!(%N4MNoPM_1nB8Rs5aMRX+0-twc%cYtNWO^= zXn+2BI89ARZ`p$MtFJ=u*#ncw0G#xTWu31h!74pFca4Etlux39u0Dmf)1lNgFv^dVzqeM<@ z(Hiws@B44O0k5kIsSO))u}tRwU4Bme~BGuIZ1+jwBW+My;dZm!;5Z7FH=be_r zC^xUxanJyq*hh{4UN09*r&Ma!(J_LDjT^QE`rlEs4j(x7sw9!D;ost;5 zhvg7yY_y!Bd5%Q|aEytI2n2xQBD|g+Kq(S(1CckGEXLk@52M3FP@aeIP|#waSY8Fx zAQEA-wHVPQOMqC^mff&r(qq+9c}|k&Sh5T%drU=EqC9IJ~m(7mtKnG;1FWREvLA_y^G#!x%hw- z6+q|BPFQp|t#zo(Z#)g1N#kIn{`~V%)v*h^j{E^sXBSj!3qWE)AX-~4ED9tqI`!5I7b8B>6$ zUcDO8AO8ed<_Ks0{6OI;RhL9zgP(a|)OCB}<_pHsL}Wl!K6i<&w_DXm(w2I4pcKV*!yVh4fBaqzhXOoDczBKdG3;JaIqkC?JyB~?je*urLM zQI^6&WzvWQUYAzNatV|KJ--YhJ2;3~Q=Xx+}qKC#K|WkO7RPT zUEvG1$zsI`Gz)m-KrWV(F(yO^(8f6l#-dSsqaclk*1BX4*w@*C9=6L7+GI@ZPVMQZ zKjqDs13>1Run?&rI)aqM{<&^@x!f9AFq^6p6>84Tneq} zaoTa<8I$8xP5^VDIgTAZ#_5(GLqV~8IrIoq=v` zKpn?gNhW>wFK`~o!3Vm(AMVhQ%_-#I^C>5Q{~`GCB4Sl#K7ip(c{&8eMF^9W960dU za^oHJQzN0^4Zpeqz5RXYo9- z2@x1mgbfQ&WxAPNoY0*qgcU{uGjd+o%&CxuPac09A760=T8y#Xq{p=w8oeYJo=WA2 z!$+RHUjageK#8+>OEWJ9M37YqX#j4CS-?xB>_QdAEZ9eofJ0)%uNc)z3w`+ z&>KCHorrsGP_a@NJ_JzUiV|W>G&vK=vl#xv_I7~na78RuSO5TtrAyIr(@ki;>M9h% zF+An{YV&4{y!|#RN!$cIEe;X_uJ0=L>e2+kp-~zcx@tD>ImIx*A2NEcz8cFoG_~Jz zPhn5E^;YcQuRl@Gvq`QL%w$eM`T*ZTAi#HQ&H!xACYI$F zRjUxm_Z=uFz$8Nu0rX4=5JFf{3NFbFZr_fkGta~%*dIil{I05iYto@+fhh{050U^7 zv99W7v&94oET-|T{4Ag+nOF-B55$xN@SmgdbHMo7JiS6<*lX(RR0R$2tya#~9 z2uOjQ)p<+PKBpaV@x_?OickpIfq~EhAW#U*a1Q7k8No*YVkN%sFzGF4sXLp8BE>Mo z5|{;0VVj;1IUw*jJY@k&W3j`FUTXB*M=E zZoZ|p0*HjK0y8MU&IcdFjvH>UM4~?V-~t$9xw&O?z%)F-&?=e44i?h8ccYswzjMO| z?BnnJF}v|3F9L)Wz~?tZt*{8906KW;)BoCQ_F!VF81L=HFlT~coM$bq-)Ac@%Mf@R7Resi zGAhh=gl~njBAKEBi~+rFfl@eUG0F8^8rknFD!{NYAB>5tbqmz=xh_C9x4}pm^L|kQ zQd++@;yAxa1E};9(Hw@q`{T3`+7LMw6<`PO&SEMwA6T9g$*D7E!@wVYGP#{cFS+gK zSSkmky0qTB&~g61+8En!%bfKB{|s=1T>1g*=eD0?sWLeBZ{Y9Ez=afGRTMxX?+G%8 zJi+A5Cr|4DUfs_P{)}(Q_iK$^#_ZlkF66Yw>Oqu!X-Y&E0;pOF zw5)KP-yH#*HZLCzu}L8@+gyH}d`9yz-wC|D&GYX34Cu~9gZVP(OH)0xw*6oH%=3P| z8aVR^rLJxSj!znc*hEOk?2tek^G&Hs(e@hiUZ>W7cnSC?a>!avVP2aP5%NTf_52*v zO5lWgrB>9692GaFSpgAs7;}U6%}tB+3>x!MpVr&90`CIQK6!ML=Xh`dd=Vl5nrT&- zn;4<>kfS@TH%CPz380=9$J{_VpYT#)-W&}gL?r-P?r>(75ve>Atr#b$l}Nuaa_PN4k&}msJJnRau7irK@c|v zX7Pw9j-mpi;~Zxkbiz1FzyTs4BqSkgC%xCczIxl-`@fDk96V%%fOyQyxv5w6-n;+( zzPtVZU)53+MfhVrU08puC41QrF3m+!ca9!*I?-?bVY?9 zhS*b@!S3AY3vEq% zM?PVWWh?_JQ%91-B=Ckt;E4cLQJ`rG3`56Uxq*8h*#OOGVPr6gdfP>*s-x(PqVD!E z*X(X?d*0W*j(5j>Pwbp}S=NBlMn}yvj$8VnOxk*IY2LYE)nI;XteD60p*}1nSwb>8 zT)?8?J`6AD!vd0lVwSv~!m1UcxZqFEff6w}0meohq*86@nvc~B2eE2Fer#zzeFN)0 zi^kxwURDI0wt94}RnXQi>PvrVWidapyhwl-8whTV4~5T!4e|vsNsH$4d$`3*f+vsSpC|19`j{E zz-x|O@`0RV|8)64ZrxZhhouC3gk+dxkRqT!pbL5ObS{IwYzDbZ3VFw&SCVv!#6gB$ zGpQt&EnWf%fN9CdWetR38%`$4Q6q>vf(RX3K+>OEm!~m#?B81#kR(Yxef8)U2hxd4 zmgLhI%n>jO=WI3!Ct)LDThMg_x?#XnHIeg*rb41uNs=MS3icn7Bq8Nw(DmA|Y{0S< z7`hC=hh z;t&BcdVT+GTwDs!!s?wQF(2 zvZX{MP;Zp5bN43f8GjVnjECco8)T1S_hbi8Z7t)pb*I3{{4s2>_pb(FizsdGYoAS?5a5c@F!&z7$ECz$cI*kR}0FO$*R*m2P^VUC;fN&;MNk$!7udJ2i-#ZC2ZU+7@eOZ5 zFYp0FCp|JWA}1k;;M9o_$sw47APhu=xxL<%WaGoXcxvj0hrA0Mzo@VvX&JXJ$~*Ex zBA}4VAfHXcAax_v5OMoeu;e`;kaEbbAWT zCh+w38h){10zdkX9VpG|xbowlMs~0tt{*^>HPWX6x=93cidmw_W>SvmB7J!WL*$5& zoFgYJ^Y7W#LmmN%gm(2nHZ?qyC9mg_qT0s=&k{2{O*a4%HdadgluiZ zMn^EhP=tO!Hu#|j-|eB@aZ&DchuYoV)d1de$Rc3vXnt)vVO}(xPEu7)B9}`cMc^$4 zZ*th1AO;|*stEZw{1p;$&O`|5`98dQ736YefgEh=CkNFs@xuh4q50?V%>bsorODsZU`Gvi6lLfLLr;La3+Op%DRYcK4cM~ zn%d?4nS|Cy1Y{iw`D6m7Ws;~+b)7>#2CtETM1;MzziR+70fO&Ai!r?P z2#7=`a{O)wex(G_2E<$;LKN|3mJo9Zc7oTBX_g z7=S;2!2}$?B)fVrlYZS`%0|ISz)2@ynFdS(t0|($k;rkyhXN=uShif^&*b9Pq_hU#QZlD&`rs;lZ;kq{+Tqy@?{dPFI?* zW7{|Gs66(9Qb3pG3o?#n^f|TwZ`;JWZotqqp5Vk`9s`~CS}b5;u&Tw2V;#IQx+i3E*Umz4wIEvdp=2Mko%QzXBMgl9}8 zpB478JTn@^i!3q80&tv82Xu-t6&aDr1jKs_x~aiRXh@Q+d2(9HGL|xi=UoGIRaxgG zEeZn@wrvT|D@tsL%m5L4Blh$>6#f?mF@QiO{9z1FL`K9S&Y$xTw}tV2K|ts85{ADS zNQ!tQt~G1}Pm4(uoor-V4Y18l(v);nTL<80zcT@2W7)+8Q#&th>0*kjo21;(po^6q zhkNXy5CMFTaWQaze;p8>Q`oSGYlS8vL$vXOuQd=xp%CBm2)~ce^O;mZio_(4$b61~ z^~Tw!%FsCqbOokqBE|K9Y}Rz?{1r>GcW&BI+5P_};H0(7&PrJJ?RFF{U?mAFUVSN? z_X0P!Ga%^o;7K05FcMWgJR&$$C~0M2Ni_ka)zX+v}ps zZIR9cA^;H)!Oscsf_v!np9Vk?#EDT!ze=Drv20FT1}~wH?I`ktgz4?~Ke+AQgA#Ds zX)9Jz9^K_6Q;ywe5qMoFRC!4&iVlG%BYL4L7Af5z67%&=x65;JM4YGdt;L#VT8%nd%@#z!$0P}7*rZ3};wP)HxCTg( zs0oVb3aW_KBs-5gRXS1h0_ASPcH({aZF=H43D6bo`a)mQ349k(y#-U>zlq7g_t(%?4&?r?F%AI8-YS)#=C6JICQuR4g7IgxoE`t50LmKtJ-?ECL!Y$w0yO zNy1jcV7r+ZAe%{&?PhAW)VLnNpFL+6uuSdD1%oMAmI{T~R@J!w%JY3a3?q2t>1MNu z&0DwN$;lSRUi)6;R-KFQ{CFc=YXK(f3U0e=Jx12N8Ou+32Oixvjjh`@lQ*mAl6M0l zFd{vOgoxr6_&&Pr*yCHD-b~L-(z6$0;hMMLtKVCX$(jt;7^E>C5o3*={nvP6l5E)W z6q>CDT+bJg2}r-ORa0XOmZj4sEMYSAGY{GZos?l%DY1nm_UILf6-oe$6niQNJnY`P z7r}xxxcHhouxia~@UaiS3szXe^`H4$eD>Na(VpIhzj^P4IPSzVaNY+$kEu=)<9l|& z^IQQ|!T|y#fOYaUanDpciSs`2dGYL}q=R&^PSX7u9)riCG0(uoSAPTk;2N@Jl63aC zAs}u}Q9M6T*z8C|gl+4{qz&Vs1ZWxoju`8KwkCuPCGZF(1icQz^dh|Wg3IApDsI2^ zMhvD@oPNS`T>Fs=@x^N|!&}ce6)DBVH@|W-iiIrBdh4Z_Y07A~YY5|t{tO9&kgnC~ z9)<7aXT-CP;<7H*$+~$A9*f5mW54#o%Md1qIXz-NL$*~|FW$#aiv$shdhjlQPRB>5 z?ZFE?g!6?dA_+N6S)&|^qUfl;*s6k)N4+$O*Q`4h*>n;gyzUn8@!c<6ic{CF#@yr{ z@G-h*5SvC;A@C>Xx3R)!jLVxGTz7JG58n%bpA|Za{ds)o(l3CIZ{BbTkHurg_O=^v zv;YP#$|S^uhB2YOABYa62R^#p9^AHn@R?w}UHKFhE3#q(~+L zEDUHaw*AjN2mq{Dc{K95B$f;pQS8fLWUvn-3;NKPv9V&s3h*&o?Lv<_aBK$>)MwQI zZk|rkp?g~5UI6?o>tJ21lXdeLJQj~B#@_bxdoZB8P<0cM&=nvEeV#+awv+C5w@XE} zg(_h?C;>gU_qoaG8XAoj+#sNbNs;TpXA;7Af+EQ(0q#Sg_BbB=_dBuV*i#{!8JN0+ z`@eN9?z`h^D3OO`rXR0*-T9ayKu>P?0TxdJ+1Guh_4ha)bYqT*rT@~04ngTyr zzv-V&Ub|#X&u?C25%@;OC1tLt{9X`nN{EG!tmzo+8$@mH5j46b6h~L%@tsd0mum9t zj6RDny6%k_-}VIB;}2ofbdfIsrc6Um37<%~ipKsXl zPX{F+qJy`Wk2)%~rP*;mUTJnRt(J=}k>QiF!156VL;y4>vW8r?2q$Qu-|nI^GK5;E zD>g(H7Bfh6w?c2VF`P|8vvbf44Nq=;8cssPKrRC)n6Fa6bg7DZ)5FormY|P_O||N1 z&TN1s*>FY|qgAhp;<=c-oz?5m;X%#yLkbCW#33KRX9D~l+%DIrE=sKqW*Y5!=;OLA zTV`%zYzHM^o`e9v4Mz@W8>`LEk83SgZj(Yc?TH@lt2$Rz!Mql!P;?U}k&#ZwkPBIk zXJJ?Trq^hDez?T8U8<}Ebi0>pmxyr~RKj-~9lN1h3Za-Zfcok&$gyE^^CvJqUXO2|h_k0xv?;BVmKQ z5by{z85s%uL<6OdN{qbq>{IZnl}Do0;4eS+u<$v3ww$h=3RRWkNlhr)?*ZK`0pj;P z5}(Iso+NsW5O_>L5AC*#Dy1FU+#uT-!wcFI>~w-}muiiV&eofWLamKdlDEPGXdV!0 zGQx-q=2aiPf<=^c5`jF5MP)-{&kazKJO7-sP%c-{Xf?q{Dv>}gn}crK1dxI9bBMz% z2;-;javBhoLM8@OTl$c~7a-A{$EtzFcdyTV(qS-W1(5)7`di)VX`S(tLX{ z(?r@yAz>w9C;=jgm%s{(QLF)Ch+5x1}gRD-E8|I*%t3~-Oo)` z>TjOOI*Gi~Leg%*P;E$(0TW?tD`M{}3|{1Y2vq^>OcK!fnimrzHcg}h8-9@I@0S20 z{<1W_t^;i!%}R$Ji2zTIA14+A8gRZO!1Y4Wrd!P}>eUve$~8<@>NNLpZ#-n*3p_gM zKDlPZ`Md3NwU6f$Nf802-i9Wb@MRxzYo`}i!@EI$HoJN;y|x;=zYINXHP!1KTQf%vG8G|dwhsUoVCtL%vhb7?1!#5x3>MP3_5J7J z{kMJ(830LW2yoyaNb{{odPZBCgC`8T;}h?M-*eF=i9%J>3NHTRRxw*D zW7kXxTc%6hYPzYl9xEym28d zVc$f(Ud3FsjNJtOiRn2?o!Vu;+ST6hyI@kTx#k-DF2_4Re8odw{_HiH3%uHv0hL6O z;=O`Mi8n8qk}&e%!xQ=W>Q^qqE0-_AqZ@Z&cc%`3$bt+70O9~g13i)eXC1u^-?-`B zICAL#fv><1eFT9J0o?UEq_cr4fiIOy*flkaM<=E+K3)3E1KX=Nyd=L8yZ`C(Cw5QH z-MDe@6n0EZVrpg@mFgTC^$MEpDmq>rZqR|(BTu;<>>(phIBqe1@U;)%v+sF5j$g7E zDpd3k2uZ0H&NyxiU%%=v@wG2rj7-MB#LOJ&=n5TfuLHN+ppdVk-YBD7nZwM?47Tr^ z!XsqEp2^aUY|~5rOVJaT^<6QPcRsyxpr9=5&!Ru?AdyUnJvh_Wpy-?;3JHe^K$QcT zl!*X9snkHZ+7#Cdg%qg6iY0fo&Y*n&h`&JP^?ffy$MxX0x@gv0nB{^uTcNO@4fmDm zpV+W%?)u-$?*w_^y|b0`{&#$G>eu5F*iPP ztDm&t>B{$CRzH?ryEOBrbi%%(m`%Q7D4jqdWy49Buq}f`ho*_2w}~BRS&<-%86QM@ z3q^Yi;CnuLUVv_=hc-z)UejY=t%a#db0bahuX}KN^`4jIA55@eTN{%nZ`(Wl7Z2^2 z_^&d{W~T+ z*2OwW_el)?5903ySk^7e9Iq+LIi{(do-njy5~h($Y8nhxfu_jMhyd>IT|Yq6^U&(L z<(BI`-tBqoJumpt1KX+_U*>->aq!<2zjBE)s>#Z7Syhgt@E@i$$V)&103x6j20_UW zqP?LXZ1uw6sbB7>??m~eH

    FaiGu2c{r}tl%wD00000NkvXXu0mjf D$EH4e literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/baby_bottle.png b/app/assets/images/emoji/baby_bottle.png new file mode 100755 index 0000000000000000000000000000000000000000..1b2cfe5e30142e5d17119050a1ea452a33130e7a GIT binary patch literal 4461 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/baby_chick.png b/app/assets/images/emoji/baby_chick.png new file mode 100755 index 0000000000000000000000000000000000000000..9be8d2930062b1e0c798fa553fb8818aa6615465 GIT binary patch literal 3961 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 TgT8U(00000NkvXXu0mjfnE9w= literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/baby_symbol.png b/app/assets/images/emoji/baby_symbol.png new file mode 100755 index 0000000000000000000000000000000000000000..2e58725cf56563837391f3e9e0f2203582095a1c GIT binary patch literal 2967 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/balloon.png b/app/assets/images/emoji/balloon.png new file mode 100755 index 0000000000000000000000000000000000000000..0344897025624a967bb3efcf1d2abfa469eb6f7a GIT binary patch literal 2300 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 TDJv=S00000NkvXXu0mjfZi93t literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/bamboo.png b/app/assets/images/emoji/bamboo.png new file mode 100755 index 0000000000000000000000000000000000000000..fc858d0fc2c2431826a012572b7c565585fe4ade GIT binary patch literal 4672 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/banana.png b/app/assets/images/emoji/banana.png new file mode 100755 index 0000000000000000000000000000000000000000..a0563afb9584524209bf7616ddfa7ecf751feb96 GIT binary patch literal 3915 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 Z_;2dELdAmhdVc@_002ovPDHLkV1hsUJ68Yz literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/bangbang.png b/app/assets/images/emoji/bangbang.png new file mode 100755 index 0000000000000000000000000000000000000000..7270f0afe6e66920a0cc4059ef29d04e50dc1eb5 GIT binary patch literal 1387 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 AwEzGB literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/bath.png b/app/assets/images/emoji/bath.png new file mode 100755 index 0000000000000000000000000000000000000000..8f75d1d2499e46ef31b25c735c76eae87f01c2ee GIT binary patch literal 3210 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/bathtub.png b/app/assets/images/emoji/bathtub.png new file mode 100755 index 0000000000000000000000000000000000000000..1c3f844ab262b2ad6c00b61bcafeea1cc13ab861 GIT binary patch literal 2784 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 Hu0mjfT4S&8 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/beer.png b/app/assets/images/emoji/beer.png new file mode 100755 index 0000000000000000000000000000000000000000..cd78bed7440fee98515a0748851cceddb4efae1b GIT binary patch literal 6097 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 N002ovPDHLkV1hXN92o!r literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/beginner.png b/app/assets/images/emoji/beginner.png new file mode 100755 index 0000000000000000000000000000000000000000..1f022d175dac777aacc371be6ea0b56ffd398ba8 GIT binary patch literal 2761 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 uu@q31L+v+0wbS@FI_}*9{&l1I*_@1m63`70000 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/bike.png b/app/assets/images/emoji/bike.png new file mode 100755 index 0000000000000000000000000000000000000000..65738602722677c81440b37a42db23c11624312a GIT binary patch literal 4722 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 A!vFvP literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/bikini.png b/app/assets/images/emoji/bikini.png new file mode 100755 index 0000000000000000000000000000000000000000..4ff63b40f8868b49a803bfcc642c229622f17f39 GIT binary patch literal 3890 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
    R9 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/black_joker.png b/app/assets/images/emoji/black_joker.png new file mode 100755 index 0000000000000000000000000000000000000000..4c78f3614d798dd3fd8a1c0331c2c340b85785e8 GIT binary patch literal 3877 zcmV+=58CjFP)Pmj3R0ud1kG6L3ROQ2`Z15o3&d>x^qmG@EV2&Pn1j8l%Q+CiWPkCbrR0Gd*c1 zV-l0NOq)rJNjt_ZN>nr;Vh}+E6%+wM_O+mv_s>25sXB+55tnp;%E^b{se`=t{{P

    {}R3L%`h58Ss45RnETAS^5_ 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 R7l;4=002ovPDHLkV1mHMVV3{^ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/blue_book.png b/app/assets/images/emoji/blue_book.png new file mode 100755 index 0000000000000000000000000000000000000000..e2b9e8c797ab05460602c8ce06abb2702412eadb GIT binary patch literal 5092 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 O00003$#!Q6_Hv> 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/bookmark.png b/app/assets/images/emoji/bookmark.png new file mode 100755 index 0000000000000000000000000000000000000000..dbee45c605b08bbe6d92075ae245b023db95c7d7 GIT binary patch literal 4696 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 A@&Et; literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/books.png b/app/assets/images/emoji/books.png new file mode 100755 index 0000000000000000000000000000000000000000..dca06a1ad99323ebebd02ee97a07c8e12a07e307 GIT binary patch literal 6539 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

    O}A0* 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ÖDhS}xPxzg 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 PUk2oU$lICg6qfl9-`Xc_ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/bust_in_silhouette.png b/app/assets/images/emoji/bust_in_silhouette.png new file mode 100755 index 0000000000000000000000000000000000000000..d13139869257fc6b7336d2af23b8ce339b3bcf01 GIT binary patch literal 2007 zcmV;|2PpW7P)J+@Z2@foZ2@>?B$MyFo@?H;7Us8_#f7bV#mn1&C@gHP()&zq zX6wwc6~I+0ucc>h6mzpT9_Qw6Vsd2%@9z8&*MIXTG&k>p{fs0a-`x6ZuDP|CX>6W7 zRsvG>^{=V6OA|BHj(d(z8@)o)??gWuzw zPrgRHx`tR~^}9fRMIuT8!{b-J3YD*6{?^whU%LxmX$|)HJgl*~eQ_if;Gft)`RXnL z#jEh;mmYE9${V5*V2jQfT&Z8fleq$K@jW5S*67@eL!alzuOimi#&C8C?$qM4s047) z+0R``mdSN0_a-dS*#l#vY8WZ6gHJEQmAw4So|u=2LIB5CPIAHNXO4Ii?(8xwk(ond zk1rrp-Gnna4=yx)M-&43yk$qfzY1%FWs$NUo@og_b5*DY8uMQ#IPM2WUVzp$?l}!(??!_j7y%< zIMXnVRB7UkmjaWibLY@InEbgYb^*0x?5WW=33Ffy=3u>LO#T{rT^T4j5mW#}WlKJ$ z#Sr~8@qUuf5;TUt7Z?ORx%HV`-e@pNc|&giF5O>&iW46Su^g zF#4)3!G&jqO3?E8$68PBmq%UzEmUu)Xu&cJvqezIUQ6@`8^WvFnPF`p6-5ikx!6;! zI}bfcFnA|gM#~qVv?d_u{67|j0GTQBXO$xjJzrv#&=UHgGBmC%m${3kO2&%%aB}fkf?D745k|hi+KX z-5;Vh7^jTp4+2ShE}&C4oDr>ni<+Syy=@FYVM{?p8CAP-FNQNKtR1wQpwr+}i27ux zvzPyev_Hfou&k1Z-1kAjXDItIbm@k1jwFg%04;|0nYYw#3Mk65$|_-hXuY^(NwCt# z1*KzG^k;+Y>a9!fTkSEALTOL40QZHmF9^7(_dS%z+^0k@fZZJRy0a;@o66fIl=r?o zZ<8z(_Vhi`pAH+mxie<}*+ zfiJGX9BonsjPz#d%S z!ZqF!sqNClzycqsZXz`E8ElDVs67QCn=(uC(6H9g`=-E`HV~+O0BfuPOSndYryf}& zwJPT;oqpv4xIj(9g=(uTBbMMK+?i#JF5HH%`XNl=Ioir{l))r=xWr2$No|xN5p}rp z>-1fB;IC|AAUGjNr+Mshp^Ag!DhIw}Jm9&1CC3G;4>$_i60Rdyza?bblDGnuyC`I= zdm#QlMMgsC=1N#whRQb)Ywo}~wg{RNQTZpa%#BpezBB<;Vlpl;ahoICtPj1VHAH52 zFqpj#t+$3tv}#KS;>74Hr^k|j+EoM>UxL5!2?A3eVjwUnR0hrW8!k|^9!dav5TSph z=ra4u_X${{4Fu{RV`%awjGnH|t0HMDz_!D8t5 zmmM!GfIWoJH(b1L^c8841^A~vf;F|mN}PgD;O+j{k*1qu$Op49$1YRCXwi(%fyL72 zE8aKo1;xGs*y$_%9qwVTCkt2pI!uuT$n6cR9gIT!ER zQvmhVZG}BWWj+n1vjC|uSX9(d3_{Bq0@ILLSp`S7_Y}}!7YtTR>YtTR>YtTR>X?@o%TsQZupGGhP4y002ovPDHLkV1ma>zJ34z literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/busts_in_silhouette.png b/app/assets/images/emoji/busts_in_silhouette.png new file mode 100755 index 0000000000000000000000000000000000000000..1f3aabcff60a29ea1da4a0816c282c25817d31d5 GIT binary patch literal 3021 zcmV;;3o`VHP)5*}e$wXWOyP7d3B8p4`QBhV+DB~-^l~uu=CE^Rn1~VF8 zBq|XnC=nuV;w~))C5nat2N{Lk*#NW7IO{OI%+k(^CYfvoqqPB1Z z|M$e>&`Lo_?v5k+%*|iE;_yonfKOh3^K0{k!hPCPXE;k(yYXzy9+}46^s_KF0iL&x zRtlLQhu;1ntlzi^xtxcm{%0>(xMC9fj_-Z-Q;)Rr%!^B(ex2vb`vG-ZqizB6%h=q-GFSqA8ZrU=Z_$YYN=KMdmy+oW^?PV z(H-?w1Kq4X=hJMzd0ea|xh5fB#Q++_owJl(v22 z7rBgoN!T-h>cZTzr@o}WRSG@*Yha@qh=`o{x4rkuj|9H|BLK*Rz0iIZ zmGUf1+<*wb0MFFK@;!a%8(fFV?9*^20ug`l!JmEaOI?ivN*~=m0>^JBX2eMoOqAMt zo5IYfSLYG-^g+O$OYF5rpK;#XOM}+fn~ZhnS#u^#Vo{!c21!(f2mz4eM1*0ICKhHV zF>&|+pt7)z!OS ztPS5;c-1ff2#SVFnAq zk%Vu!@Pp?wi?Vwgj4aEik98k>{7_SaWW|&O6HcQ7GBg_yc zFBz=&buAeZ=86apccpkD0wDqu!yt+hEBk^VJwdHiXGC=#D9+ly~l%-$M}bAky&zWYJA_wH_d%CLrjF`lqJ^K&!EIZ6N`b!AFS_ zD;JhUf@OeAy=wsYey~sbK0MFs*b68qXy1qLWuB`Qu$tndr`8F4A$!o&@b@Xli<2HvNc z-Y8lC>40NcAmqR-2f7*v?f%srzq2;JDrq*xToOZ=+V=lx?4KZN)+@%ucU7N??s{IR zy~kMtA_HMcO`%;5UY)taQq}hP8X32`}62=d57A9%Hnt119_uf8p;Nd`Qi|0 zk=T}Pxd|Z%i%_0^Q=s&XtJ56)1T)x@N)xeC5Hp7yxd0d>3yM8KsT@D1B=Ch=zYT zlw2;%XN&UShrO7enS_m3RgIxrOo)X|TW6W*; z{oB#QCj?;YWmo?($Yx(VxNaln=ci#B^%Y%)X!qiTA7oMN8^plc4anuPn4dZf8`t5S z!`$pF=I3T%t!WDg-_IfJ9Y9#@2ipc3l^L*zVdJjbyZf$hEeXI|-t!5`1R?w&3zNk7 za}Q5@2=WE=4~}49cr9$yKzZs(cv_)atzqWK6q@z+t^#>}20>UrzA%XD+|w}D(x3k0 z9)HP-5IKVO2uKp(FK~yNh!EAPh-x*=PCkXOrw;>b&q6*d027B$C>GIdHZe0biAJs3 zV(elN)eMrT4t5r7jd#M5SX%QJ&?>8aD+#_yVwfaGtvrKlSU~@p5%jGagf~5oFc+fP zY~skX&meBLMwo0Zj&`_D90)B|Zce4a%!nE_OpX69#-G>^@$=|kzX^UOz`8SD2|viR z*ONS1Q8dk|0fkfV8v+qR9MzFL{Uj=39ziY(8^y?mJ+R4KYilSRccF6$6F5GFJr#$5 z5I1UIA~@&LhHa|{wuBP+FZzQBy3qYv_2Ha>9IGC;y8q|3kx$eY5TqrhQ+)`##lWnM zOBKs;z|qdkOW`}B^cA1GRMF}rIhh6=ZGQnTjSs1m(qMM5ajU_RdQp4-H~`|t0$h^3 zBupUPj)EWL5I5#qo}sL-##6dft{xPE P00000NkvXXu0mjfIRUxz literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/cactus.png b/app/assets/images/emoji/cactus.png new file mode 100755 index 0000000000000000000000000000000000000000..5a2c3cc725e393a3a9836280a8efd8fe414906a6 GIT binary patch literal 4509 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/cake.png b/app/assets/images/emoji/cake.png new file mode 100755 index 0000000000000000000000000000000000000000..efeb9b4b2145398db357367573993a03da9c30e3 GIT binary patch literal 6129 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 Szc&p40000=S+nFAciwsD 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 X%^GA7sNl0300000NkvXXu0mjfI7n*& literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/camera.png b/app/assets/images/emoji/camera.png new file mode 100755 index 0000000000000000000000000000000000000000..397d03b39351adf90023aa3ed00cee36a4ff1d61 GIT binary patch literal 4661 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/cancer.png b/app/assets/images/emoji/cancer.png new file mode 100755 index 0000000000000000000000000000000000000000..ea43a4a2a048ab575c02240833133f1456652898 GIT binary patch literal 5384 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/capital_abcd.png b/app/assets/images/emoji/capital_abcd.png new file mode 100755 index 0000000000000000000000000000000000000000..ffc0cba4b4362c1c3a11affb2d6534cb211525bb GIT binary patch literal 5136 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 Y1rl@nE(@(IKmY&$07*qoM6N<$f=uQ5EC2ui literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/card_index.png b/app/assets/images/emoji/card_index.png new file mode 100755 index 0000000000000000000000000000000000000000..374e94e9e8466c0891b05f22af3929a016960034 GIT binary patch literal 3749 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 N002ovPDHLkV1gIyzCQo} literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/cd.png b/app/assets/images/emoji/cd.png new file mode 100755 index 0000000000000000000000000000000000000000..baff835c489475511ac4e189a8d25ec52687735a GIT binary patch literal 6718 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 UP;JnL^Z)<=07*qoM6N<$f-NfCM*si- literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/chart.png b/app/assets/images/emoji/chart.png new file mode 100755 index 0000000000000000000000000000000000000000..ac2c4bb093e395db35ce002e96aebf82ea362a0b GIT binary patch literal 4331 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 Z`9Jr$w~gsRZWI6j002ovPDHLkV1jX6^IiY| literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/chart_with_downwards_trend.png b/app/assets/images/emoji/chart_with_downwards_trend.png new file mode 100755 index 0000000000000000000000000000000000000000..65b82f04413831335404787f55d68ca342b67543 GIT binary patch literal 2910 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 IM6N<$f`Va*R{#J2 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/chart_with_upwards_trend.png b/app/assets/images/emoji/chart_with_upwards_trend.png new file mode 100755 index 0000000000000000000000000000000000000000..de3e9ba7b576a9867391421c378f8882c8e01f37 GIT binary patch literal 2939 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/checkered_flag.png b/app/assets/images/emoji/checkered_flag.png new file mode 100755 index 0000000000000000000000000000000000000000..ead4a68dd37d2d8d817e8452f2430e85b9ab6211 GIT binary patch literal 1675 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 IM6N<$f=Vcy%m4rY literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/chestnut.png b/app/assets/images/emoji/chestnut.png new file mode 100755 index 0000000000000000000000000000000000000000..066fb6bf6df4880c20715dc3809f1c367ff9a4d3 GIT binary patch literal 5875 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/church.png b/app/assets/images/emoji/church.png new file mode 100755 index 0000000000000000000000000000000000000000..4c07c6b9ea5beb5b036c498ef4516bc4de7dacbc GIT binary patch literal 4653 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 j5czpFho5ize*pgr{PJzNs))a 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/circus_tent.png b/app/assets/images/emoji/circus_tent.png new file mode 100755 index 0000000000000000000000000000000000000000..4af8719aa0313843fa3393e5f224d980efa9fb99 GIT binary patch literal 4683 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 N002ovPDHLkV1i>@(}Ms2 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/city_sunrise.png b/app/assets/images/emoji/city_sunrise.png new file mode 100755 index 0000000000000000000000000000000000000000..91ca2a40b69fa81434a2f48447eb193bec5a1637 GIT binary patch literal 4312 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 TAhG?z00000NkvXXu0mjff@6JX literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/clap.png b/app/assets/images/emoji/clap.png new file mode 100755 index 0000000000000000000000000000000000000000..d01c982a75acf2968d07cbaccd4d601e9660eadb GIT binary patch literal 7110 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/clapper.png b/app/assets/images/emoji/clapper.png new file mode 100755 index 0000000000000000000000000000000000000000..4e1dc111d76018cfd2c1986f039d930bf3a7818a GIT binary patch literal 4192 zcmV-m5TEafP)zclFS+#6OFx)8b?Ox4feYse8XFs{ z%gf9EHV_E>rn!sDz)xk7PY~Q{eAAb1ZJOID@e{BGzR3(5}Y`>|fsJM2?k|mRCYiluj^k|Sc zYHDggLtx~{k>GV{$z&3PgM-+*b?Y4D!8w}-N!SPA8nzqQ7P3u-4LtG06L|5(7m>+i z;P?AM*N5Bfh7E`ZeEs#;c=z3Rv0=l8OO72ocI2G(0M2F^XKZGFfB($@7O-800$8zP z1zvjTCGdOs72e?h^*}tNtgP%;0FIn9SwJb}nlx$BwT$Ig8Nd4$ELad-ym;{!0RB

    a{PD-HeB_Zw@W2BP;Ep@)z`}(KF>BT= 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/clock1.png b/app/assets/images/emoji/clock1.png new file mode 100755 index 0000000000000000000000000000000000000000..9174d4e0bc027c423e65853819207b256b63a334 GIT binary patch literal 2590 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/clock1130.png b/app/assets/images/emoji/clock1130.png new file mode 100755 index 0000000000000000000000000000000000000000..415999ec838cd611aa6d68a71f53684a3ffba11c GIT binary patch literal 2854 zcmV+>3)%FEP)p+$l&gwj+{+K12+?H?_o@YE-vw1~E- zDy2~MMLb%B)J@PzrKJmvD5WV)pg;-A>fjK^o_P1zaWweCp1p?l^e+L$}<0^G!E( z-CXnkOyI`WPyWa4Pc=sjG9nBxMw}*=QzKR_BRM9pv4l1z=qF2&I+md^z<_#TsOS5q9y_c4O9Z-CG=6*S zbv!!jo5qi^c;@3Qy3)W7H`xVEeH>5Vt8tz1W# z*Rk2lZkkCFao}xd?Oq>bA|zSC9`<7K8ZzrxlkWO>>(8&dYLOb)wY}qi*R;2Wnt6vD zTUbfVQMbQH<=;4zO7!sx)wFP)UgOm1^LIS|%7O`WZ|L}GXKSaN;UsZ(Q-Ol%tlSEy z&vJTJ;90_Cnm<#dlR-{fC(rckfAP%)5!lkw_RRXOPI(E(X<{o0Oc&BdV*cWdu?aED zQL8lQRuiMNNQFdXJPfVC8eomfi*g^?A=o!AgXx(oW z6#j%xnpZjU#+jYRX39-K?I)J6Z6d}b>k(=f;#b#OWJ&S@6GZTpIgH|&&SC?T#AssK zl@-^QYXB+y;X~K#+D3s&b~x(`N}OJvU>Req;Zu~bSa?y0@G^N)9O0!yzrW750vhPN zx@l8Aai;kI#vFmB(#%>0spL)05oIyOM5lv1aq3yRebbsU6U1()OJpceO*O`xyPd>G z#QrbyYb2CKQmCbx88Xx*!`BB0NTKRIwNx|3a+oL4Xw?sT-VMnEx6rUi5=Wzws+xfg20aa+T$zwks8k?hp;JP2UY65P z*+d7UBzT@tVsot4pKMi1=)#9mA}u8(eVz9fNmkkt#3+)+z`_Yi7-)d)GoX&RRrq{B4p$2hB3Oa^UP416ftd60?34r>pTJ=g_1V1nAq@9a3;hM016>dWlU1+=TT~TgC07>iY;_8 z(sVa*iSnWd6p&Ls0=5L8c)Pu~rGWd5iHhx5Hp(_0XAqMj(?S;(1Ym7%b8_a9Tofc< z80wlStZ!gpx`#}hU=)4#*#azNG}d8a2!(5i--znKiavoOt3VJKhUyUjTbtI<0o~Dn z3E+K#@7Z*w3bTSNngePE#+&88LO~Zj4Qerw{M2jXt8>&cPRhS#|4LkV!|`SjRsziS5w?&-_2}3rjFDiRF$za)&3_`& zihmrmhlr3z2dvAAEm~8E=r2HYrin1bpl$rR>`+>@y7PsdD|Z7amY{RF5=P}aR5QwF zX=8@Vmk^^AfIoA%cW^_mFAo4ygSp>l|MLP@Fh=bH;#$Ojvwr3sFS$`LK^?~#ApeYj z_Y(N9YtnuB6FQSBHZC;`Jr^i#(OZ*%_Q_#?I%AmHg>_=i1TtzidIhFw>5Z+Sr< zaJ)c7gzrWe@BpFyC?+T9VdA?3=jOZ}QyBPRvb(xF%@&53AdTssaV_xq08S>f%JQHU zxHT)}C{oXBoT2~F(Brl>Cjr}*`Y(PX^`m4%1#8Iyl^AoV-*ol>K>;iH-UASszljr^ z;OxM}e~ss1P6A--(#x?2!{3Uf6gtRaQ8i~yFwul!jd`}?Fq7nI;ta<)IX!f5-&-&* z0iZDP%Sc1$UMU==jf<$%zpI<+#E3CKluGn>Cm?KZvVya`!CU(91KO|bGKDG!@RtMp z_e|+5N^zs6D6B$boESr?6Ss&Fd5Tn#;R44v%{$q_15;1u@{9bpT#{3@Ro%5; zY1-OO8=cgUV-lGJG33CZQ*ph&NKrU$4WpdmEIkbVCI7YJ(d;ZNk^o2&$*R^RpRc>6 zvA&g6v{H-CB(s1_n2-x>I!6;okS4+eXE{eN*^%6nxr0MlTZaV_5U}9YaIB$fW6l1$ zJ(1(;i(rdfBiVL zbp#m+1%+h1sb)iJZ`HQiC3R$|6_O-Igb-k$QKCSOF~%8Xgo)wF!-Z!j|4|r2#l#Xq zFlpMhL%@S~3CMtgjN(vGNX6@uEvZe34V7&b^(i??k|+^p`&H4HVTOX0ADQkc{(a_e zg}&JdN|-{Nqk~HUr$y*P^vX%d$ROZF6-Ez7Dx)>wOtL-F5?&Fh4_C&Yadp)JawRA>dshoRwQa@Hw1Nl3Xg~CXrD{MB|}&C@M#l5E8azo4R?4gfUwx z3YFXLO1)1!*m573UpzuVKf!73fMUHC7izvJcz?@30mNT^EQ~zWtpET307*qoM6N<$ Ef@CIS2LJ#7 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/clock12.png b/app/assets/images/emoji/clock12.png new file mode 100755 index 0000000000000000000000000000000000000000..87b132878b701dfe1bc24596fce80766f8dbda9a GIT binary patch literal 2504 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 S2Z{m!0000Q;rS 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/clock130.png b/app/assets/images/emoji/clock130.png new file mode 100755 index 0000000000000000000000000000000000000000..df939201900046dad0404d17487d32d067707c3f GIT binary patch literal 2842 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/clock2.png b/app/assets/images/emoji/clock2.png new file mode 100755 index 0000000000000000000000000000000000000000..65b3b3af0e1a2833dde63772070f1f26438374c2 GIT binary patch literal 2595 zcmV+;3f%RHP)>!6C7L zxPOiN0sp`x0s_1j#YZq?K6=+W{9|s;RV6A;zeM zL55CFJa_nYiiV3K(b3xZPU~wM+c$GN&0OOHj&PL_+jy9L?6ua6wbhO@}1NZN*`)#DWiDooDXPjo*xdnx}BgZ99a+zw@;^s1a^u&jsJbdu~ z6wqE;`@+gcBdj3AX@=Rz7D_1|(|pXQ)Ul2z7wDn;4+XGJez+1QOSi@@0)5TtP33@Y+ z=m78W0!f&GJ;uW>_R__9RlEO9arHedG;xfjbOMGTa6%@B3mKfxF_G}_ z1OCP_wxE)|r|U)bU6+8nejM4`!U|3hW*49qXcW_ipqul#j)zX(58|W5{0s_D!C%WMk&JrQc#Isxfef-S)0%ZU5kwAnfarTP| zM70YD&{5GbL1ZBb3g6=(Q6fwQrkOYy0kxUM{!{+sgb;g=yw1*3m$w=w4-@p%&le$k4z#zM`2h{-@f?3OW$# zT+$N8Ak8*%7&d*O`ht$?>;dOEQHX8)5rZ&STH>9&G`9nC=?|CCKrb8cqEb9mGz-#o zjr6jCUK&_}Z$I*!4&1T6Vq=}CY#V97bTpu|2{lxQ11@BAjJ!@r)5d8G>Zsgw$NK+# z=5zqhcNe>A7$ZUn2F1fJL0;8Mk%{9)cJxaL5yq%tu}j$nP62N3j%tET5g`l3fn=9p zhTLbNn}a;Zn<$QBCQF1Vf>h(}!0ixl+cIBEB`OL*RA>JeUIn(r3O*+IGk+n&Vm>B? zlsAh?5CxS=N>*)Zb_npSFZYH>P=iDk9SOOZ19k}{pcI3@^Ba1pBE>~E%{riDF*b`t z4GBV&mndr;O(?Go;3r8P8oC8Hij@*ZL3#-d6O{mP!lF;G7?mFC*-sleOeDaCiAD|$ z(5T`fegd$DLwN#R5g!T}LZYuFVXlHA)SH+EN&p_d;xoFa!cQM1bg~1;ia8{kJZI0L z5+Xw-KIE184#;wif=BeKZqq@A95M3V8cxeg=@sn&*lrzQ|B`Jgxt)SXcX71`~8j4W78XGBv`}*8GZVUL%`^T z@Ze}zMI(vg@Ze_ren_IBGD@m{=sb4F*r9tX*80BDK!6MtXh<^?+?4w3xEVku#%YEQ z_a8#f>j5&cqtRXcY-E_Fm^Z}(o7{%ZICY#OO6oAG!vUn}TxEwZ)C8FLF&rM;NdFti zjFH3Szw}+c@GH%^50FzQC*K|XQ7`RWp$c(|&2m6m82K!E6Nv#DImsaLL+MFy3Q$Q5 zzFob$yK*^x2C27CGXW5g7DPW|zk!EA{KV*Ha$@K;GTKF27N}qq`|gBfYd>f}<6sg_th@61_BXiEhR&U4DrK z6mS5;P|TS3PSw?nmvJi5=4`3L4BYe)K<6Va>3z?{J|$lGC6$Xh!Yh8dtaBar zF@&2X=t#J12a0=O&Jto^A~T3aJ^$o1eSbawORkVDEqGdX+|w(#623o~MmL5>VIykfBN45H630A%WD2(DT2>-w7Y>|lx^n&vzmq7Ok#o)a>46f z2GeBn%WS{iI2pV^oJN-8X3|2694250QVpFf38EGZYFUQLG5$rjWqtqe`d>9h3eXo_ z)FmvoP@ybp*jagRMW}-1tf3hn)1*i+%}kUMpo~(|T;>aUnPMtBd3fN>+z4Z$9ZXob z0Ps-BA}jr+b+z||z8R?V6J#l2>ImVZ1R2oDkS5A7{ahtRlEiTI!_oIs1H>5T8tEJP zmyLvSCf#jgcWqoGGHD^Y*BDXq>e6 z_HQ2rUi<_prwkun6l4o7dz6V`L9?KeW|{;s;-t~BZzC44(;>w@n>vryg@7Q_h@q0f zj}HYeZe%e+kO=ZD8Ky~EnMKAYWa$_JwiJgWj?G=N;hG^Auw__qqX@Wh3y}yKot%JX z)7ptXON0*>{{f{!ttQn&%7Fj?002ovPDHLk FV1m#o#Bl%s literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/clock230.png b/app/assets/images/emoji/clock230.png new file mode 100755 index 0000000000000000000000000000000000000000..f12c6912af7f530416329acf7e3022ff31ecf4ce GIT binary patch literal 2853 zcmV+=3)=LFP){ys)8s;{efC4 z)S@GLJ4Yg_pivN2C7@D6xwNDz3X~*J2pDWa3=Xj~6W?d-@z`_Ow^pCFW^0e8jzfCH zpYtv4y+4n?wb#4W`sV%C_l;!o$u^lwZvPKpe`Ig(zI_MozU86Y4u1Ra?T2qWc*{cv z?%uz5Z}0xd|1p3)ZD0P@Er%P9c0Jqs$maX|?zrL`ef#?M{p)_m=KFgOc0Jp0^qYtF z-nyraOK5JE)pq%+uB+PDwmnu|<*V>k$RWHaC`f>bib|e&=Ib(Db9<&zH~&5T^xV;x zax9}s=EaS>t8R?l*3efQih66LY7`d9vOpFS9guM2BZ!{>Dk)~n>D)|a^v&5vXO6t2 zT{eLKx-xpts;e6+>y;Jwm}80z5&^0R5X23r0?ZtXn1qN?MUHXC3*+gJ{xq*|L24J z#{#gUrRl#rKfkha6%pc0u!1$zq2NZQd^6Bcnc_Vrh|x@n5k}^Qo=~}c~_HRm>3(W#%q~20jYQwQ2;=)VB|^hCR41z&oJk5@1IKC@#p?a;(@ESwLY=F zuhZK}oR8SbwbbKBwgT=1VM#F^5`OCWEZZ0+PA8qd^_y2dv3tuU0NByjeyFRn%iY2N za3k&bG0=;~4NFY0J{Nz9Cx8z4Y3ED804;R8JG)yB?dn-(3bwSiKee%Utz63hjcmn_ zhQxB49UU2oEGI~?j!6cM{x{CXH?fi?rJ^#f;Nh=*ME*FbDOA~qC;?=(neo+upxy7jAYi-+`i7?1^LKK|76#E8} zxXYHe4iNVE;uz2fv4!Jw)6D9f$$dOgHUg`wHoUTP{btg*xdv5WxBak&J3cM_4-QhY z^$^tk5*n4f&WTfJcJ?on;enc)R&_VxCqjU8O0&_oZlH1sSS|pk0QaeoWrx0)C`Y2t=qRLmknea(xK^$z8RphA?xi z#Qd24OZf5fF2ChD9%mFU&ZcA1!Ymck5ZYY=plxNOyAn4ABIJ>{^ya}wg2NmkLltA3 zM=k{@-mc;!Oy#F{);oB>+g%l|q#)|LJTeNhBMwW`jT?mp{=z$epG7XPigl>=7$gh| z7zFTBpptMTzJ@V70=PC*NR{NNK*m5NM}FyWI|A?FWgg}@CI$&|+`#RG(Cr|TCx9+JVM>HN!URbxjq@CnlZSjryUxN!kSiRUg9rg)OK1&}0pdf7`IepDnY zk{SgkU5OL~@uE29fUH!zkpT}{39skHr1apzZPmf1<-Nkw{0U8DeVjH9&`C&`HAKb> zA|S1H?#~0_(&CyNM`i40{=}HLW*cO=SbnFhq>BybS=%!n}$Os1{1y zzKVAoeFGH_EnE;FG@BnBnvORJXeywhQkZi9(57=_QOGTqh{ZTn7&p*uor`EoEaE~V zhc;;g09{RF$x%s$TC0))>_7sP^i69crlUDW+C8VHrL~BUG+Fc!2Y}q^dD28!6tA`Y z&};(2w5vg@TGXvsV_+6XN@xzUvWqy-kSzdnr~@_tOtWP$l}~xwnMcKhG9fKf7gfvLPqZd|o;A4tfG$$38 z&8mqe#923&iv3?VllaJxVCro4SP1}_8%w(ZjCl?Nt*_@ij z)WFn{k2p(+Sqef8kzuTFyvViHx5PGX(XU~R)*YJ?6Ud2j^eiJJe}8tk{N6A=x1<#{N9mw zE`C~`N&dl8uiPssZrT_lPps@_RmF>s^LVHb5X*Z%fldn_@+R-96F({Z(bSf4OeabH zrslhv?_95JWGyKch@qfU+Pr+gNxIlXz6<~tDpLfhW{^|7tB(D2{Nb7OvJNUuGn*Lw z)yU8L7f*1K01Zr&L_#W|-3PvC^@o_kV!I40|8EQg8qfXk1qT|m|yN$u_XH& zYWFwZ(^}t2kJ!`B;->-t!!ACNF@@OvNa!q(B}|wR`Z>ed#MqDKo)qSn4M0E$)r5D{ z{Gjp5b~@-HN{U%z0{D2vnLaaaESmwk_d*|YHy7m zXpF6vNhedArX-oB1At|eqESn% zy_$=lzcJDm+8y3nQyZg}8lqGaA|Rpw8U?W_n`N3ACYd5RG5bp9$n0C0Y4XLj3k>J6 zn`v4AZ1Y6`vURlQvLLt!`D4M>(566NMSEo|BnJuN#REbL6v(hZ#z;@j4`u(ca6B`z zm?VcT#9B;?5U}n7gq4C)5Xi_N%!>;d1;tb8jVN`&4o|Dn;)%H{Tz~*=3FeOu0^@5(&7IRq< zapL2#wGl*RiWxgIm{|v0c&VYvPK78F zHbxjdGyTUC$0!;uibPji_Zw|5@95aYw`k!8?{bpsRIrx^ILr|nhk1a#RB)Y>yvq$* z?8;s2=xBSn`;D%)6*_SDk-9&G%bRII=QE~gp@VOruyCkc z|EGYC(lyU){85+5z1&(F*)Tfptr{ukQzZ)790 zd_+43@BmPbA8KU-9}(gppcNPtD+@ul;B^BJ-Mq?2>>|V5A?@6$ zqeTVmX#QS)FOM;v|;2NFbmKF zr15bdFS3Vb#&6sA;QKEW+=lIC{>MYK@Fm-5B<-MgiqO%D-{nZt$Tq&Dg%JM7+sg_% zP|@Ac8p0&SUQ|p3eZl@BTHu@kXPt%0UjB+nh-i#w3JmZF_=nAB0V^Oo)Z`PAtE zp6{=A)iOz#5=@Flt_4dAlM=#AQp;+WauA#X+}`~)1eqmFhNXm*ZNX9_Lzr2D)Zp#H z?GSMDI$vuQ8VW%)$NU%H1;zJ*Mi2#!DoQr(Y;g$iY%lj#5T_Q23u&^TLbt>P=}6T!;NC6gjtYYLdQZc;+0F(sG?4%nk)DTz!r|@32=pd zD5R+nb1eyT6%?V~vO$5np^jAeSdk@HvukKnkfsVB^2U4zWVu$sBWBge(WOz5QScyx z<3J*zVxr;(ybH=pie{R)umlXTzdR_&wGIKUN?G*Xg()0Bq$Qk?@Cdk&v)_V@g+e`E zjv-?>$US_QO7yH03q*<)u(LW}fXng$c$|v?CTSaz5a1T+veTlRN)%$4&dxJ{%pp|3 z%B6u!_GDS=Z~#}93`5upBJ&OyTF!o%61=>FAFDv`??=a+Cm>e|QoaDm$mm#zp%SIi zB752rl@h<=l2Gmpohq7%JIHlRA%^u5Tyhm;99-_Gu;~{ z!fK*4Vjwx1urdJxxQU{0gD6H%z5pY6F>OrCEli3*am_p5uZTV;z(gm`DyB&ra~B)} zCN76YCPErI2^6OXEC2mK0v(MBl0&1H$c9Wd3~%LD-!~fxkfstHX~FC+v%}JsMW74G2ifqR-iniH8yVMCoN_dh}(|;A{a{nq1;{-|S`+!;~XC zthbg=F8~>aXy9WmGVd-;{j_3%V-%(3m@fbl{WNivUM8;& zJWm`7IDly?R@8f|=4!#q6jkU8j#OcCQ85oDZUzZp@IF_K!6&1i5G(wW%0(Ta4Zm2| zy^XsV#Z3bS60WQR#XYd*2{Eyd89}F>e{qh%zhC+-*T@ud04#Kr*cETPx<+Fg(Z#7koNMi;kX*${_Vr@-}A~ zow)ML*-yAm3W^B;FAdZO+rIIe`n8+*4gq>7rxwd`P$_)ykeDFGX5zfdMaG7%J{hr1 zAiA^{l^MpFi1ze7G4%O)j?qgeW%MxvfKdbhGxSkLC%qiwJl8JtJr+63II$(asAP^Y zq$C%gOg)^sXIkoKFP&WHDn5dgfaBOII*vt}C@E^`~yiANH*5hWzMiLbZFa@cOL54UH8zyU5hsFoIL$7W9(4U50GRF(h z7v0n)thQ09tZF<^b!TNoCF|Kj3qIyZ5@!x_C?!A{rKA|(bNZQOHZpT!_*HeBNihx< zEMEY4sA83!{?fWNcT{{kQ0FJeT0+!OfsYboz#vVE2xAO!ohS+7W0ChJ-cAk^Wr`c5 zR`QpPgr6F!D5q2|ufC~rr+;&4jY0_u_9qgE&a0^6b8afp6Zv@RtT9WRS*D4g7a=Hm zMZ!%`NbpmJ;t2$r%UZl4&nkDhr&RJtlBsHQdQ6+l3?;9`2el|^62zD#LMrbbwFr%q zRstje7ZP6l1SzKsA6^t>;I)e-gY&U^Dq+w zQUBq4bk4o^%(?UX{$A&vb2Pzw3!P=-uLSN(93D7w>jfq@1HEG$fNnV_p3jH zKwogvr#5|j&C2dz7eP|Y5~hnD5>jg&O}Rke;^L5Dlrf65(M_2YDf8Oo@V75Kd&&Hh z2<%_o{ngF)tZiCDf)rD9u$6WU{7Xizi;cw;7n!7kZZeE8vM~IE(I|jfL=RfxT&prLiByjt_buaY~ zZVqlF#bs{cZ%GnHQ-U>wYN@EG{xC`IVjq`Dv6;=G9edWkbmz^>aKZk;E&sKxcZ=S^ zdBWVm3Vb++c7kh~y zaFyoEgO38I8D~4woO92fxq9UFYYiu&?XkXZZQHp?ieJkfg4lQv0Lu7y_tj8TZ6e&p zuNh)HmTvAUd}H?q&lDP1;Lb1Xd!j$Ek@FdLyNPo1h1-^51$Aeq-m83X;fy?qyKUIa&w3W9=Vv}v3ed~d9 zHCdn;?>l+t?R&}7#I2MN{AHmL;umCzahji={NX*qt#ZM(on1Gz6CulHYy^L42y8a9 zNSJn3?Yn79O$>zozAdtf90?NG+z8ktXdy=jZBgUzst9QQ_`w9t%(EJS;6^|o=wY4~ zT8SO1BG9`gv9$$1770u=ZUi(;TCwocOjG}XWW~22xV5>ti85g#nCKYjxMQ}$4IvNH=UL!$a ziRrh@+iWFRGpYHN>o7Sl{)VByvwVA87`s(CKLlY&-} zhE~~;y4$i{63UY{piyQ6E(`3Wy;@HxwjV*c;ypk~aIj5}0EqIUg#%a!L`@!h+3tA# zI0Q&C!L4kdKs5xe_esM+^9N z%r1M{BLI#yR-{0a3@O($o2r19oU-*|qKu7$O$BOp3G%84gve6F8L1#py0A!A#UN3m%IgnWLdx(@(3Wr>T`4ET(FNtEZo|iU)`&a zzO)q)g?ej857K2Z=9o8~^A%Yzda);!*-%0!N7M^7Z#P);S2B{ZQFKwdSG^^`>yiJi zQzFB{l?%g_3zF=@nKW}mNTXFQvsH1SYEPiyP{zVlqdc93?7>^0sxcaABFvE{cUqJy z36zUJnh=u&$YKHRbrwe!ah;4AHBwQW@$yx2m(i006@?fE*aVwB1QHUDZY{b zrP=SKJ}?qrOPFa^s^x>M75R_KZ~@p@Y8DWfFH3G$C?~FqX-`P-kZ(+?k=7 zS4X%k)5HYS{zqwx7a8(d#emwtIVvxNDk$5aVgyX)SixmR$o%)!EA`I@vJ)qo4|Q~O z(Z(q2(CW+s9$a-m=~PWc_2&SMQQDa1D({S^zagBu1ca*%O+A0-u2LXt~8AKl-wzlB}QkRgskEtIz<1q(;r$=P=*eC*ul2%82mU+53#}JoNna`xNup|Kx zmiCL#)5e#BF+ZC~;nKXMBOJ;EDP!X<87T&HEYig=XF0z(`S{42jZe#SnePRX{>L># zV>9EJwAZzQO^^^{7&NI&sD;544r{o;?|9RidaC?=Vb@sbIF&fg=kldX_=>wNpO5vF zNfXA8TjPcR-RRuKM#^;v_^_EEL_0&A;jA_BrKx8p^VfA!DnxPY+BZj@Ia@f*8-(a& zmJE8$iKxkXjSB+4zd3WMy+rf^e9=hov zNfQnZ1x#sfWE&)cj*mqqxkidnrn2cDWuMEO&1Wh?1R*p{hzbHqC@7(*A|2|(M>O1( z7>pfizNK|#8yzHQr-c|H0{8)&G9~h)Wtm}`%+&nrxmV|Zmz%}(R<5{}N2)?70$N2( zDbe7QDoG0Xh=tpu>tZ)W23Pbowa4@*5lKLTGA4QQc`vZ$p4 ziUO!sl29(FA)%{fyiZjf10&EBOc))}je&K>>Oi}(LJ#``V3(buowaAIcgk1tZ<{~cdeG-bLukUWoOemsg;Ehyic^|;S7mnU t#y}$|LbY*%YDJY{y%tYYgDiOO@COH)P&DrbMMD4p002ovPDHLkV1l0bFD?K8 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/clock4.png b/app/assets/images/emoji/clock4.png new file mode 100755 index 0000000000000000000000000000000000000000..948ed1a380cc8523f6cdbd6ae16d5b58f9198c9a GIT binary patch literal 2619 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 ix^tJR#$ND;mEQmuV@zK=-E<280000w3R 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/clock7.png b/app/assets/images/emoji/clock7.png new file mode 100755 index 0000000000000000000000000000000000000000..d48f645d8350f54f0e83dc24184599c363df32b6 GIT binary patch literal 2615 zcmV-73dr?|P)dzmOVOxcy--ML(p#D~Y0_M5$9JFGj$R$f;@FPe!AJg& z{#N4ip7(jq^Z&njUpssg-{9JDSNpd9dmkOx{ovk*4n1_l!l4KE4(z`7(QW;AwR6oO zLFKr+$9<3g&brlsT0b>-a3cdc8Y)Q=#ADG<6K`t&IPlrmE}+k|=({yL7u~WzX`O`fp5{pRo>wsm#AYi_p_5-7Itz!o2lax2YH99 zbnz`Vu)eSRm4W^J-CxmxyLYwxJ{;_%3yn{iri(tVL!o%&IL}co(8OxoTwsLZxhsz! zc;WvP&{w_a+2ub8vy3{9bA|P6q?+=P;zK^Bg*8Mu!!SdCp7{CE)HMsZt0N0uoB^)NmV|WC$(>jwR zVMd7JcU(0Ai4c$R5+AY&8FS;YJzMU3FHxZY?{lkeUqL7DvzP(Ez@%8n&zl zT~@%R-bGI@CCng=Y{x`}lJo|;1*3!jFv*E-c$q=M%rW!yrVkFEoL_+KePcbX~4`sf5|4)P|G-AUn5N~$1!N3;ij9{{^ye- z4tTz|(ACToVX82wAnX!U76w&>nWCA6E@gYM61crvo2Vs1m@JiqWS5}Q$Py+(Elqg) zaTf@mur7?VQ-G#WXFp8)i**WrLG z>_Z_#9V&*nDM=a)30KMK4b;-h(7sb6O;SiTP^lw>f)9DQ(*ap-R`7^k)iFUJLk<}Q z4>A-SNF;K?SQC&O-T>(2#0UcyrhqQimj?y8xj=xcUKVwCVOWqrq$%1=!Xw~9w%yT2?1`AE<8lIo(`&zZCV2j zU8EosPMDBSbY$$4Wp#lAxNI_X+eDF$1BQxSU4rbzLjus4LbXlKw^hDig4|I+B&PsL z&x%Gt6S_^LdDgT^6@v`Z#wa(_NZfIiJRIbj-Qaq*P{5pq1+plDKJP*yWOUx9hA2KZ zki-NhwNrqAL=H{Bh&lzJ&L+v?5otJz;6#wajMK^(Kfq0zQsFFs%VtQT&Nu~_*)dB1 zRmAXPGG8b}_%}f&>7a)=X2k*^MioN9MW+BGGZZ7rLSnR|Bb6+Igpd71SwNirvb&*8 zZo^Fsg{#ES2b}`+$tg$OpN1<9~j+>?&twBu|v`Aqpar&i!qCO;3ml)yv)$b zCSiXi4QKj?jK4w#3QGW{ zDp&d4H@aELWrE1g3fo(4HQCDP1t7~PZ5-hgV}Ba|CkZHY05ZfbycXO#)ET0Kv#h{` zf>t!ppi=V%K;kSNoM(us^A}zu4kaAGFcdT9y+w6(;boczw4yClnmkXOx8KbO0d(Hu zygu?&>|^Fie@W${h0wBJEE!nCU5w+V4c%@=Y#%_X=r133^T~{%(aOI#&dA?R|AvcX zOE~~08p_-`Z*Ojq${J=!Qj396xUvhW9nWu|+w>|O9O49*j}1R*j1h;@4uC`hp_-K| zo^B7V<2FXoSu6-0z2H18IR)BxTtX(qK|bN~#oCzE4@R_b|+V~kIp`(@-~E|G?E0>Dcft+n0P{knDWO70-QAVHcj9S4>9 z4jvMd%(03%?{JDMqvxNBS|$*y?2F1Q6HLYiho2n%>;$he#5!siW)=Xw3;<>sriOJ4 z@hT^{cyjph=rJaktN4pbQd~hwa_Xt{L+N{Fq_b>h9hW$dk6Nn0d2F>SZjvEJnr7B< zmDd<#%A9y(i-3 z7%XB5D(~|)LzeZU&yVggCQ8tkUDQ=9v{0`sXy4XwXMJ5gOX;BtA1RW=Ns*6g0@P4V znhSi!St3NDvj;A}o||Aww1WxPE&x0%JXm@l(rULbOna&;C@TlOau% zD~xi97zyH6qVG<=mAp)hX|9s~D*v*P@Y6&CL8|3o;|=vU`BzmpDO90gy&{3Ae2$!W zO-&~TqerHX=@H^Ym?4T*hM?>f2{*Muf}a``Pax1))8!3$7Py0+YRMx>Movv>bLv!f zGTUWDz&mu0vq7tW1NCri$@-#JFm*uX(0NDIIH Z{U7=Px^;&7@j?Iq002ovPDHLkV1jf}&yWBB literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/clock730.png b/app/assets/images/emoji/clock730.png new file mode 100755 index 0000000000000000000000000000000000000000..18aab22fd8ca24e0ef9e7743aad298c90f930ac9 GIT binary patch literal 2820 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/clock930.png b/app/assets/images/emoji/clock930.png new file mode 100755 index 0000000000000000000000000000000000000000..fd35221428f989a438afbf433275d118ae79cc16 GIT binary patch literal 2746 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 Aa{vGU literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/closed_book.png b/app/assets/images/emoji/closed_book.png new file mode 100755 index 0000000000000000000000000000000000000000..484029c5ebcfa44e922172b5d908631fc469cde4 GIT binary patch literal 4847 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/closed_umbrella.png b/app/assets/images/emoji/closed_umbrella.png new file mode 100755 index 0000000000000000000000000000000000000000..0b719f086b152fd4d7f619038bf47ec404cc66ac GIT binary patch literal 3868 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/cn.png b/app/assets/images/emoji/cn.png new file mode 100755 index 0000000000000000000000000000000000000000..b30dcc53df9fc194f69e1e058b079ce69e08ccdc GIT binary patch literal 3634 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 Ef+Xyz+W-In literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/cocktail.png b/app/assets/images/emoji/cocktail.png new file mode 100755 index 0000000000000000000000000000000000000000..28b45ea51455841835cae67032bfbfa687739190 GIT binary patch literal 2949 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/computer.png b/app/assets/images/emoji/computer.png new file mode 100755 index 0000000000000000000000000000000000000000..d4d2687627e06cfbf8aaf405ccd239d397053106 GIT binary patch literal 1705 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/congratulations.png b/app/assets/images/emoji/congratulations.png new file mode 100755 index 0000000000000000000000000000000000000000..dcbb1d229ed4f80e4a60d9228e81f3f3a5c7b647 GIT binary patch literal 4883 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 P00000NkvXXu0mjfj-~n9 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/convenience_store.png b/app/assets/images/emoji/convenience_store.png new file mode 100755 index 0000000000000000000000000000000000000000..671696c2dfdbd8970c72696f49a35bbc178ee3a9 GIT binary patch literal 4073 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 bX8`^e-7bFVRbapf00000NkvXXu0mjfEIrW6 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/cookie.png b/app/assets/images/emoji/cookie.png new file mode 100755 index 0000000000000000000000000000000000000000..653edb258c62caa52e7f05b199b0974099e14eec GIT binary patch literal 8149 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/cool.png b/app/assets/images/emoji/cool.png new file mode 100755 index 0000000000000000000000000000000000000000..937dcd792105b847e41b6f8a1146d73d31ea3236 GIT binary patch literal 4182 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/cop.png b/app/assets/images/emoji/cop.png new file mode 100755 index 0000000000000000000000000000000000000000..43a5a84f821473f9a2b3eb5700e2a503a080d339 GIT binary patch literal 7141 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/couple.png b/app/assets/images/emoji/couple.png new file mode 100755 index 0000000000000000000000000000000000000000..9e51f40e16ecfaa96b25c2fa4854d6e9935fb1b8 GIT binary patch literal 7615 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/couple_with_heart.png b/app/assets/images/emoji/couple_with_heart.png new file mode 100755 index 0000000000000000000000000000000000000000..c503f40a931aa79cad2f9f5f72d768fe2ed53561 GIT binary patch literal 7370 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/couplekiss.png b/app/assets/images/emoji/couplekiss.png new file mode 100755 index 0000000000000000000000000000000000000000..d02790822ea0c8ac8903eb525364778e95debbb4 GIT binary patch literal 7219 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 ByHfxF literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/cow.png b/app/assets/images/emoji/cow.png new file mode 100755 index 0000000000000000000000000000000000000000..12e1ab6c0bd8d6923b028e2a5336ac388b977d60 GIT binary patch literal 5745 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/cow2.png b/app/assets/images/emoji/cow2.png new file mode 100755 index 0000000000000000000000000000000000000000..594c92155bc52116674fb8dbd94738fd2e0a32b1 GIT binary patch literal 5303 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 JPDHLkV1l@IAA|q^ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/credit_card.png b/app/assets/images/emoji/credit_card.png new file mode 100755 index 0000000000000000000000000000000000000000..be1c1dd3063120ab9b0844346731b7e2cdf88671 GIT binary patch literal 2648 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/crossed_flags.png b/app/assets/images/emoji/crossed_flags.png new file mode 100755 index 0000000000000000000000000000000000000000..2397bcd0fc9892531b3c714cd34d65a58dfa3d89 GIT binary patch literal 4015 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/cry.png b/app/assets/images/emoji/cry.png new file mode 100755 index 0000000000000000000000000000000000000000..6d0d9afd284b9a22107defc3979c9384c192af74 GIT binary patch literal 5699 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/crystal_ball.png b/app/assets/images/emoji/crystal_ball.png new file mode 100755 index 0000000000000000000000000000000000000000..6d2c6c42d448ff1e77ef23906f4048649ccbbf1d GIT binary patch literal 6236 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 P00000NkvXXu0mjfL%}CM literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/curly_loop.png b/app/assets/images/emoji/curly_loop.png new file mode 100755 index 0000000000000000000000000000000000000000..8f051aca43e5c12bc059db4bd7d156b825f14e68 GIT binary patch literal 1264 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/curry.png b/app/assets/images/emoji/curry.png new file mode 100755 index 0000000000000000000000000000000000000000..7983c706a40ebd81c1d6431c52dc7fdbd75d6ba1 GIT binary patch literal 5336 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 w`}e_rdjWvMdB=a>IolG@8Np1BYi*fPJW zQ(ZN?b?f~8^PR8H>7Fa9${#X@KWzR#fPgNMldjAMa~kK-=6o^5m7;bofi+-xc5x6p zuj0nkH=ZQNeeq=RC%WykExKUF9v~N99fak*mx(K^BRBUnDfA8y8sD6(DQ>c12ii|D%*vyheJ4`lL__Fg=3J zA^9A+LVyhg5lLq?D=2ilU8J;|G1_W_Ya_nitIhcfs2_e=IJ*0iBMu+X`#-hgDOW)5 ztiL)3H*lTlU;Yy5AIY1b1o>VTESbYgSM~A2B_&o2h4d9IxxgU8tfC6-*i&gZb{vj) zYY_awBc__&5n9BlcCo&SX`|6Ti+U;J6u6;L?)eJ2x-++c>5pJDok1IZ0C zu&|%ET(E#QzIcE|{UOa*DK|8^ItBI2Dq_G2ES)Qydy-H%ZH#dKN{ni-+kkwb`0^xc)v}}zXTx1Ccc-{+!x%N$qS-q&pgL@+G z+E(Xa)zfGzv4dE7RtN+F3∨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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/dancer.png b/app/assets/images/emoji/dancer.png new file mode 100755 index 0000000000000000000000000000000000000000..6885a0bc3d5f23fa4be974ab6ca0356b8d35812e GIT binary patch literal 3737 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 Ye~r7(DU}M)8~^|S07*qoM6N<$f_PRQ>;M1& literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/dango.png b/app/assets/images/emoji/dango.png new file mode 100755 index 0000000000000000000000000000000000000000..2d042aebeb589162683b4eb8976acc2e4a3c21e7 GIT binary patch literal 4449 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 M07*qoM6N<$f|`0pd;kCd literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/dash.png b/app/assets/images/emoji/dash.png new file mode 100755 index 0000000000000000000000000000000000000000..dc2c0a8f4684186167596b0cbd7ca1fda70744a3 GIT binary patch literal 5448 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 Xordu&U$H`e00000NkvXXu0mjf2$hf) literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/de.png b/app/assets/images/emoji/de.png new file mode 100755 index 0000000000000000000000000000000000000000..16a28548c9e5b2007a7d5443b58696c9bdf93509 GIT binary patch literal 2640 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/disappointed.png b/app/assets/images/emoji/disappointed.png new file mode 100755 index 0000000000000000000000000000000000000000..82552008719d2841dbab81f34008db4ef830e6a1 GIT binary patch literal 4764 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/do_not_litter.png b/app/assets/images/emoji/do_not_litter.png new file mode 100755 index 0000000000000000000000000000000000000000..38c7ae7af239c5ba902718a37c1d9afeb2c0169c GIT binary patch literal 5277 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 N002ovPDHLkV1i*;GFkut literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/dollar.png b/app/assets/images/emoji/dollar.png new file mode 100755 index 0000000000000000000000000000000000000000..63de884951966d1e0b09c3ce71542d1d59cf43d7 GIT binary patch literal 4622 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 Ef>q7k6#xJL literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/dolls.png b/app/assets/images/emoji/dolls.png new file mode 100755 index 0000000000000000000000000000000000000000..47ce33900ca53b7372c0b6028aed797f8fa8f0b7 GIT binary patch literal 7138 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/door.png b/app/assets/images/emoji/door.png new file mode 100755 index 0000000000000000000000000000000000000000..83c819ae4669c093912601820f7f147bd37fc7e7 GIT binary patch literal 3310 zcmVT3t>wS@OtJMo<0f`up?2$grOi#~ux~krKtGeoZVVh6# z(fDK^pDJME$2k7@cVF>ue)Y5Twy{6mp*6Ov;J7na_Zwpu5Nwx5w1$;H0ANFFfeq0B z0?R}TB0z=!H0NPPvMdIqjAbB@;e#Ix{^6hB<1ha1^*BWV4g6vp=}${ z8hMC*)yaKenall4E!0y1KtKc$t;WHIh=2eL25i$>!#1{Iy$=?$!Hpc|?xUSI-+p`^ z0>%(Gj}t=ZNZQuG2B2l4!)PSZg>knNy#qmuvTSceBu*18uz=P9*MuMiy$4`&Lcl-- zOrslUQphNUdVANfhuZMlPh?;4w z1Hye;Uf>`tbR2;3v<7jW0$@VWVCa_%fBu*M#4r8qPqSTuyIZquK`XzOiohaJn(e9) zVKM>L+5_a8V`GAC3-%$H9AS{e8*e}6kN)7-(Y|9PRuK3^7ZAnV6P&@TUwn?Q{PK$s z#-d0Lq6e0-7UA`+K^P1c?c*f*9gq%bKVZ+sh255-h8)F~P8uSK3&;T0L$thy%^nT&B*WbaY zU}XRzf_5ecgcsb5rzLp$(O`_7{q_ckX9915_5_>g4Q%4rX}u$feI!u%LRqsQ1bz7i zz~#X;PoEx>P7q)hakdjP!7!9V67HZN1b0sd&VsrUY`i!Fr!n9ZM%cz;U0V=dd?rA~ z7Lw61*zXb?gn(ffCNMtJ1*Va3U>QjmP#TW`GL&F#7ziw3l19S>PD2(6WIz+h5CSMt z05I5u10MpzLJE^t7|Ih7FqzuMGP#RmfblaZW5%9HWpOl>h5=hB%jzZ2`o6$sjsuW| zg4h~FU{mi4Q^@j(E2-wr!v}H7;W2V_X20l37~@%xCl-OmT;}w7SK7Be{6O=PCdj z5963Fp;CYe0?D)nnP#i~zGl531PXBA0oVjV=Hvq-VqRC+6Bs0eT`uODLtXns1cud?cgg#($A9%37a|nh(!kkKi3!++niH9L5$O~gc-6u;h zK*vBB?fO_nCuX*1fsLmk3Vth08fBs7Tm=Y8ngthh|7NpMH4o}_9#Z1C7m!G;vZ^78BU?OOjKIah#s|qDyw#!VD z4FcL^e?wc9;s|J$hP|>y$%R5_?aU|uXe3w!#qtupHU9o@-{1#N4!rUOysA93fMdY6 zO{kmH64F3x6-gGdNx_Q`HooxL>qW#e0O;h+kj!FdOzz2R|M8T!-g(T2H=`a^O`}6f z*o72;m@Z*V3E$Q`;K`A|8h^YGzWeS+y#Bq9$P}v>13EVmG9$&~58mhIgSRp8dtduG ze&(gm5el4w288K-W4{@+OPM#o3DFkNm-KeF-5F4 z+I&}n*0FqUW90oOgLgj=@4xmA(Jy@Ok$L#!;QIMaP<}1gu7c>`Vd&r?h^T^30D)DJ zWNXjPeZk&TKEX_g0Os|oA)bnWC??R)hdp-L@sX1PW-ec8rCXfO8S>+;!(mFMWnL{_`F|@Z~Q(fkkF*fB-7`5z7TwO#@^=LQ1lf+S=(HV6Lw^Uw-)kFMsBW z-mmzZZ@q;c-Ozet-*aYXq>Tk7E5r(SJpu!nu0|+Gu1>LOtUN&WBu)PH`?vhzZ~r1K zL?(zhc{_~h0ncAIUU+by%e`xU_4C)f`t#2bTO)UYJuQm$ql*^3H-yo#{C)}XqpEW_p zE{MP~`%{Pj362)DiuX5<&HV>~Ol6A!u@K|Q7cw8+3?z_LXVUp%6oGo&wh1KaECW$0}xKmQsYJRotA` zQr!;&sxH!cwkkj+b)gFtF&dmeJ$D-Nx7>*N9vt$VgAENBL+5UWa{8U2_aKK+<^N7WD{@MzFJQ83xd4DoYXX9; z7wlO)Kmf%ZQ7tqpSG7q(S!gon?gcE9!^HG;3niq$hk=GAglSt}om`uQWog$L%Hs1o zg9vDy>iabU&@NQSkYXtmpPLCvv634brAf>f;y4C51cufDRJB5b0a)4HSej6-uJi1U zD+3zzP=TRCx)fS1cLi{IBDB~Sj0I5^RtY=#z+oKV!HVtE^66P00Knn(7tE{!&Jf8M zT5U11j9`pUt_r71`-vnpgjK>ZPEf9B;nbW51|5?CO`i>s z`kQkdBMs8I2mmk38HB+w4lxeli3mSic&5Q-U>Y%*oalgqMS=lg)F2$Ih5}>?OpUod zz&O1x03(akWaLsw106;Kg4N!h*3Ghd$c*`{B8YOPxAT5k*$GVKAX4C!Ti^hlN`f|$ z2^-JFs{D2sTZPCVIt-ab|B!9cgu#ozFc5Q~;2sdQ71j^{Dio$!Y4F**K^xKlQD_YI zA;yuczJ_Oi4+9~V0G@MJgVYr{CILp&yDBo3KK?&N4lGFf+_HFRrJ_+8pVG7qQbKkW zL%bF}$GwZx&4p8*p4 zouCE1m|VlOEeZk4vQ(8AOl}RUq+T_CTGVx0KH~X209bAI6#Q?xKtxQ#G@$+duf2p3 z&?eM5BveARN?A3n)))LonysqAM9=`Svc`aFdj$r285!TUrAbI^%E*2p=f&f^hvDGya z#SMWCy9Dq#;7LT>0>id{as+?@0SVjzmv6oG=r`)!#{cahU;wwk)4JCGq(&Z7N&kIU sShxKDISk+*BNl%8<7qzG$EOPTFMMN`K} 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 Tl?O(}00000NkvXXu0mjf{PVS3 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/dragon.png b/app/assets/images/emoji/dragon.png new file mode 100755 index 0000000000000000000000000000000000000000..e399d60e1d859dc26b3ef2a4f75e9ed7414c9bd9 GIT binary patch literal 7828 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�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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/dress.png b/app/assets/images/emoji/dress.png new file mode 100755 index 0000000000000000000000000000000000000000..6434e2e2f3982266931f943f41e2640eb0ca7c91 GIT binary patch literal 3631 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 B*c1Q& literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/dromedary_camel.png b/app/assets/images/emoji/dromedary_camel.png new file mode 100755 index 0000000000000000000000000000000000000000..c8c7b9ffa0fa6d78ce7f1e53ff9a6a20cd0bd217 GIT binary patch literal 5139 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/ear_of_rice.png b/app/assets/images/emoji/ear_of_rice.png new file mode 100755 index 0000000000000000000000000000000000000000..a9bba5c2c14682fef7ce33e17a968e2dd4a4ea18 GIT binary patch literal 4758 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/earth_africa.png b/app/assets/images/emoji/earth_africa.png new file mode 100755 index 0000000000000000000000000000000000000000..44ce5ecb621c885ae92e8567b1e819b16c4bca1d GIT binary patch literal 7164 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

    fiaDgZGT8n_l(Bkl?-; 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/earth_asia.png b/app/assets/images/emoji/earth_asia.png new file mode 100755 index 0000000000000000000000000000000000000000..95ec357ca87f342ca738361cd71be741cc0e350c GIT binary patch literal 7303 zcmV;29C+i2P)X}B7|BkK zUFW>#y>a{N2CU<4L%l@Gfxqf4}bR zxYqrNn%uMRoXv+fJ(#^@;`qw>H7d?}jSNO3MR>)|FVjq>`KyDkpi*hE+-}faY2rf& z>Q$|Gk}oZ!p|vz?mS>LFnw75(kbi9dAN|UG|4$Nd**m_tX?SqzXE%-9`hxSebari= zu=Sn}MBkdd#N5BKnU){Gnm{XSBEhh6>?p6?{BgcKeJM*>Laox~+Xwd&d_V$7@JQ|n z-CR{dkh$5OpP4?`Xsmpx8hXF?&|m(>@qcOp%H00sNMp43Gn374y!1I|b)LF;ZKzjc zA5|koBa71ty-*?7D%B|EQ^#M*eKXrxKYD`aPu@<&&hp^OS==_WjiYlLalHz`E8;+$ zC*%Q5A-I$++pZ5Y4-WNK?hp4g2K=X!#^MJL|M7d4{>cb<;k&QDdZc#8YcJSx{HYh5 znKY|a7gs7V7$vb55R5e#0yY9`a!&WwlX)1e%~G{p)btR6Mc3d|XOxBR5P2}{Z*Smq zx5?DpC^fsp>C+n-8@-3qCpXeNvBAsf{cYQxx~Dd5K0Ni&cYf#}m4JP}_t9n}musHB zlS(%=|F9F*1dhFhl)p+TXG&{dK^O4_eKj{Qqc+Fo7jSnvW zuk+75cJcGhUK(gNs@57IGD#n_u@HaH8w(bU3TlK1L2SSnhmZpf)T0_udO#pZKr|=x z%@fG+qImE6dn;MY^iq?hH0Fa}do9Zco`(2EkyH0~D%pu!%%FYs{Ab_SdeYk971w-j zX#Lpn>wfC8Qx^|6G-=kWL^j5d5G97##C_n_T8vQ)im`%;0;r;-C=eN;_^To&pb~*9 zrcZ)Fjlmc&AqL}6V@V>zsrDeBJ@tIf8oe2B1`#Y8RV`yX2YtTb`Apw>-Pjdxd&Lhz zg8f0jHzw}7{->Wi{hYNU-vb{L*@Vc{sKixbTPKPt#8I_xk*yIWF;P^*ni|GNeU(Hu z!kQRsBO(j28e&XAn1#qHQ3M8y(<%|rtfs^^&g z1{0ll)^qaN?E1eZVd#ldKq>pR!>2y=hD&EJT03mxBu@GOZDdJo1#4p>Q^i^e1w>%f zV5opqAVU!_0VOWIM-{M&VuJB|<90v0eMji==h^r^YV4>gDs_`195et$=;k-dI~R(!2Ie&pmqa z#IVLm9QDD+QA}cML{Y8pZCt}fHR5=HNWZsV#o8(si!o8(TN4u*u*P5!tSKUGP!6qJ z&c{#vJim76SNYhQi7qo_g@)k$oEjT*$J zN^EL7g0&42TgTW&*#WBknouB%iA-`gw1HtvJ1*a%~75nXFB z{lt$kSRyPUO++fhrj0?7zU8Q9D2l2>G~iVjh)?piZNJXjxBMllifUkHX`J6W^h?Cg25o ztFO6W$DQY|8N%9#0$87fnAk>OD_9-@U&WddIx!GXn=(*40&z-E2c#GkKnn19gbXDI zYGLa=;e>O5}yYg2Wof|gUIgoLcOhStnBW)ANqTU<}JbOsm;not>; zW9W>#S(?7cYFKmr&_(fUejoyNzU}?h*dBQMrF-nKjSaC8OkD3vJ+_LCiqd6`MH#>< z7zGe8Ickc5$CwmU0FP>hkfNHSxDtF1K@f4|L22cKG?NzMAdXv9Ds8%*K~Mn+Ab z5Jj*ANkBo>5ZBw();&nlT%bLDE@|rwbl@q&ZlU{jv-67T-@6TN*?h*;=WqSYp5{O> zu~Ck-&ts^nY#u(!RC+#xv0kZpB?;5B^o-7RU<q%@2 zg9lQyAN?LmhH7sWyr!iBvi_c-i_tc!jw~p*%)W|WKk#+fW4c0I0J zK}Ddz3xQG%28=-YHw=IhvMR1Sg8B+dgfRlDL?b%}LOXkd+5L*a$0Z>3qc5Et>zsMK zw}YM^V4$+d+FF;}m(Ik?0BahDXjErV0z!^49>`Ifqb3C$LEC+xLZ=U2O8E-~In&+k z%%q#BnFX$&zKVB#`;9z&dIw$ue}3{c+%t6+S+9af02S0LNI-)JRn&Vlrz9bOct8MC zbegC{WmvR870Sr>Er=%%!jDZ}%if^_ zyyJnZkkDoAnj^e^*B^7~*k@R34ECMzg(9T%UO*I#V2p#HU;q=q zXyI#BBdI&f?ER5--2Yj!XB$+e$8@ls~ft;9BfSk}}Y=5<>>!bt59B8tI*WCS{> zEu;>G7cH!~Ps`|M1j&k8Ac3*!A-2@-W3JugH}88hSFQUv^=N@#y8RuTT9^bf)Cu@d z$lYr}NFEA8TwxldBqyM%SmTIm^B7yC3R0#?d5KgfYCYNgeN!Nc!@kK$H>%Vau1+B+ zMg?OG9jn1lkn2DDU!_%i=hfg(LZZm}^8t-Y7li7iO^NUjvWvz5V7(Zzkh zjejcv!7c55-P1p3Cx)9el7N^B_1JM}`5bB$%bBC!#ApMI$6yd+07c0`av-3%0ywS@ zI%oBfm)C<>b@+3xfC*Y1$gxV%IIrwpaSZEfX^Cq zdYe$8AP501NHDdAm2__J-u%rkv<*Ar&y?YpUVeQ9eI=4i79{$buU~ zOdt&grGv79N{_P05y(Kh7;Tl{J%Jo4!CMW)c7>_VL=i=G1bUP*FQV)OK z@fb!c$9UnyjSN<%nCork_m8}eUwhzZxqJ2{RO~_tyjKG5lKO~;+vk<<_#7bwyyQfh zvz#Veck)O0pNC(=X#FIX9$HAb0GK}l*rA!C{t<8<@=!$FDe4^rR{)eUJyZ*zS}I4S zT!*qiDtHoh4URk}1=7?E4UH~G9%ZaC#r~z|ux@aMdgM`K*gUYGYMirZ7rAZz`E>IE z{>&(&wP&$$;5J0H0Aq6AefXF8?%X!s|MYtqj8;$uG;rhG^SEK=Dcp1D*>oM4*yHmU zqgB-B5C9Ej+bd-+1#r9|;=ybATS2`qxK9ks2`c!Y>>m0S-lflfm)!&RFkYX-+Af+2w$kPg?*B;wFfs96 z=H@ox^9pzYafQ@_M`e{1G?XNj;C&I3;|J^rJY_y z)CWRr@EWmg;31aXBx`E(?2SCP&zy@!0Tn|qAl{PD=DUky+);Zj%T7UaL<7NtHJ%fl zA-uH603Sd4Vy35d(rHA5E*R@j5j1xoiiXuF7lm(i`co~HQrxe$N-aBt22fvE*(H!1 zOmL(FD~};yaj`ZR;?W?%qiP9iiO7hJ=V)gGUpw?PT<$1`3WzLT74Hp#p_exK)Pt9h z^(-QSI!J0uy!EX2v9)=GL3^6t`{FfV92cMWVV*I%pFjNe>*-8S;D(fB@HF|{8Za41 z+3USvG($Cq5Er1mN7WU?sIHE}Qh?Tw7hc?|D%2Gw83q&R&MZ8p2u}U})jhPiG}rP3 z@u&tOO}T%01HX0K&#}}RLd#Fq8ie2k%|Lunq||w47sk-kpm{)CAoP^Gm)Ehqd6M8W ztV!9k^E3SPnV;b3$|xH~?%}1+{2z=B9iUp7VPtYY)sbTu(?Z(`S`In5P^cpJsAN#4 z06t$Wc;Z);Anwt=1nfVJa`4abMLEIUz?&iet;xeVJL2MXnBm6tp742 zwG%APPZDXHpM2^c^0IUOgp1DoFkAL~8eER#isYt@at=;QaAj(gYt*A!`f_T70Gb#3 zlA(DIjcfO+sy>E*^5(YvhiYA)iBlN_6WHUGLWhnIqnP**x_Tn< z$6@Egtp|^tIos`dLI})t8~79?EuIKQAASHi<1P9KOI{4<@ zKSmxrFWzz;8yg3yB~yIo;H69*JDbo+m_NFk69>=d8()4CUwCL2u}Rsx=}tyA-ibQE z6~GJd<+_~mDDxf73()FTYXFbPKL>O+)Xc5l_i^~42iga>ZQU_FJ%87hk)fQ4<^g8) zY=XDo5=cNyz*tZM3WyrevS+KH!4#1|%IU7~S*yZbx4xQtlND+sQw*+o2=U`=Soa;e zttR!_0@KsGN#{rT_FXSy>f~lzR%PwvJuIKvL~Ivv=^*L_2p|d+QZET9JOQ*+ie?aU z2pJkO;!1tie>)ufJI@E~eDiPq$~im!;u>za^-9Lqf0NS( zFCmILh{;H*v$&NZeAWO}&~hdaDF7DoFV{H)hx%SYK)!-onep-HMb@8&TwMcFh22Ze*D~<__O&nEFC|WxZb5Xa*U3jz^7+` zYFYh#NrH#IIZBU8Uas?k2os&~v3%@tUy455`R2o$Dm%XNrJHYg~ zaS70md?ajp?KSVZGl0K0v@7*05uAj(zJXgmtrle`43VM z;XE1=niKc2XX`EO7&%7Ww#YI|2ucWGB~XvLw6ch&Po8A|+IyIJ_(Jk9h=~l9+BB{^ zgm_!_e*tkN$vNe40#cIVI$)w>!N%`W)$q6k037l6KDZ%1^CQ{Z(SKXZ55=E5JW1!o zdW0SXAOfZEXz7Jg0ioO!Q~;6HM_mEUJ!fzI3a{At9oo4ecZT2Od)B~bKhhvpr8Z^g&M;~(({i|9Z8x4}{cxi{~v zG&)BQ-SiZ``q@_!S^;q>(o2ynLo<(N>mi^7-pO*LPw13m@cC5n@y zJ|B3ms)irvh|Jvoe&_Vsm;L)cZB2FlL)3{IjC7%A!A1}OTciTkf|u2(8wHhBGJ_N- zRY4)-5i{L7XEc`(4=PI41iV1%BM6EJ_y7o0jK`WzpFm?hqM*J)FWXoYVxNL!W#r3# zuMW-H_^jKF2RHmF4}D?!2R`y)1kZV(=M| z{mr6>N3#`t-XX3Jf8FPE?^jj*2cHuhx#Dd*!d&kQKA0U0?Znh3AU2pt!I(k?kp&}w z0i%F|PE;*H zTUm>e7m@Zc1A`BO{xd(n zGSmJgF?O>Z-ic|913+Sc7-IpmS`<+QQ%-9Dcu*}B;Tae>MaXNobbufV0U&4N=C85u z?7J}{ScRMJ-_GF!&qwJ2zHD=bO6?@)Y`>G)xgk!TJPYvw#Fw&P0hMERaN@V+!J9sy zs`^76lT%e)_oCPTQGK*t>&>SeqyQZX4+ROG zg$Y2)9xjwGEtop=48GhmRFV!pkC>j`g=&xTixW6SRjDSk7ox2k_sfPaFH%C6n_bIn}RpHJsoKPM_@*ukxs`Z|arum)qa?^mw?hSmHxQmVkC zVRcq0XZNy*8KSt$p0mEd$&*`IoH-k82Xz4zh;5tkv3qG$+MJr&LE5XMnik;G7GO`r z%{9O4tMLbP|5w{j_*r4|oHq>)8hMMGZ~a1$-c}lC5H;38QU@pqFo4mLUP_Rqt*#$E zGnB=x*fXL`o^czC^BYN*$AKIbsMV&~x$!=XW*j-Wg_XrgG;~o{6g;p;Y;)}W66qi4 zfty#Jw8PS7-<8cqC+v|_u63=}E<4bSO??ZdHdvk%D+*$n2VejKpoOV`D5|U9`O!x! zL5XmP4=80PafWpp?qsC0!o$b*^wT5cy&~VUu8-@32Yn@ZBlUs%i^xC8$K{Q=GOF(B zZI7$9cVz9A=YpFswKbU9T1?z5RbT*0=?lfC2LLU-mh%DS2<-!~`bCGn`Tl;jK7$QP zcclhy1@C(xGMhBk-00f+pP0S<;d0pFNhhG}4wmy@GByxb-Vj>ZTU^%JVj@#D)nTYk zVB$KM2#jD*FuMB11}K37r6SY;3bOho2PwUJOz5Cl59fQ}eHK>+j!Lch2hvNgW$La4 zRTY3InSc^F#6UCwQG0CHuy58Ta zTa;D|HtM?Ix_I#rd=^EO)3#ds1fABkiKa8%x#P<~$r?db^@%5-1YUx!ri0WHU#}&q zNk}vi)!0==hOx<57#ROiuhq*$WgKfqPz7tjR*D17w&c%5t2F^B-{?5#TaNcxsR$uf zSu!@7i>%yO>CJyqjVxC3_M)}Md1v$3_Hx%DU4j(ws_LIW0#>6w0hJPbJr=2iL@T1i zirQF7REeb4TmyE@$BjKMX*@%1ZC4N-QfxgK8Zib;04!bwR12dtRU*}{A@nS?tjYs% z=zc44>3xQL-ne|x7+f&M8$+snZ&GheZj1?rRE$9)gYOwa)WKE2&4B|vWjZ{O1Q?+7M636O4S`iK z0*MxDTdfiIRRM7nCpFb1k|?Sc#8;EQNpj`@wIO8Ic;|hdTkyuvk z`@H-6{dlEP318;n!y#WHOmE5{X1(GMTI; zp-?EGSS%tK45F&43gK|Lk8^h*5crV4t;ywbZ$J3pga3ukX`C=8c=z3RpFw7pkm)PC zy1FLs+qVyU_UyrtBS#RA$3Y-a`78ni&+|}SU5#ioiq_Uvj2=B2BSwtK@$-7F^IR+z z`|0D4KYr{B4ZwZ(-8VTD3f)NQ{@Lcun`<|1+JwW04}%PdK{4v2Z47JJEI>>nH0!ef z89R0?&N$-?0kW6BJ<{9T`)|)Y^US~(3IM4(H@K9N{fD({*VeCDvj*I#W0Ziv@Ao@K zD@kMUY$OmgXabHnqzyRt+;cHz%$V)`?)FC?ee|U-1OWHnfB!Vv?IYW^ZJYhtYp;PS zFNS5$gPArh_)HDZuxpz|0)*f?%@{v^JZ8?EiQ3v)X~TD4c;SWk|CZzv!yLaz)s&4jejGN7Ch#^rXlO-cLU6&o8AAx`L-ov#4T?46@lQ&N=5COq(|C0Qa%@`RAYi;PV1N%>O05`J)_?hMbi#JXqpxqx9fT zdNvgDB9U6hR3eeoT=}~Lpsuc-YF;Bi%pZt(Blnph6_X}S!u09WyZGJLpL_1PEhpOq z#QYUR{Ku8dOM1q%HZR5{rGbF~ZI)(Hi}~|rW7e#%;PeUO(A+YdpoKxa2@vm##nIJy z1Uq)@!S?Mtv31)H96j1Y0va0|(a_K!({fB35avs$eVSXT4X<2r#TCEz$}6wzKUo@} zFn1;yUCVe}&j-s9*+xu-og|aV6r~f_l3222F&16^2N*YQ6z?H8B@cyC5k3GVXZJo5 z2%Zn6VhK5FOlMa&KG?V!%is7V*00|Lpoq4%HV1}AI-NExkcPS3;_S1}#^lM9-`%oh z%f%mm{Bib#18~<}cZHdhtRlj*R!mh ze9j4?B!)}iY)(*nqy=1%~0SI*6qmb*aDS4URjf)m7 z`s#@UK+>Pc?Cz%J%a@zP4FEk@k`VJw3X>*Iz`gg}idNcrmY|e?a#RR7^7;K`67yy9 z3y^Z2P{x754}^_t7s+G@i?3XWA3c08rcRwe5M0y~<8r8CUVw;srQAV9=nF5rFmR%r zpdNA?)xJ(ij&k)%wbzh07W4J>b-3e>@6ujdDET5hsj|YHF)e9Z9zb)`KMh^OgZzWL z^pT3x0(YCs3KbXb>AFj?x1&dyGZ969o91ZOdTpB%3S zsIZwr=B{41ZkVuq{`Nc9V*lINH6GqO5ddd)aF_w<-Ti1RA_x-uCQ}R`{$fFV2_SaF`cMYLfAB6V$u*0mzqI1&x@wP;Aai0q-KkjV)E zKRnw<`JZFop-@7YlAba19OWB|K-!-HA)lpcR2uO|bLY;D9uEK)?cKXq4;Y-{%IPT_ z={u_bJZHNlIDlyTl!WX(REu0Oiu9q!5FK~~jdcOkM4M49tq6FI!c{?3SA|ebFCM9H zLnO5ViLP}hc-3xgKnw#YX(E}=B#j#*lL<28j9L9)&RM1@4IRzzrVkYWsnYEI`}d1U zBU3REfyuI2F&U?gAB_S(LlIrJuT6x)$a{529eM`!@qb6Op0-*$991>L;R`ju7gR_r zk$@n92nC(wT>kIxdmZsa(&VmT+*{mmA+k0aK_pUxWGZRQo2kktC^S1Bh6;cXoGOQ6 z=vw%b>RZ!d+SyaN=`bMq%X51IiN3&#BHqcQsqa}-N170>8--Bw#qhOW1K+TV;DtsC zbBR-IIw1T$kHAGxRXBk3(VYY}s8w|fK+>!W%|&I5Br>g}Nqe$t)IgAy3W%X=fEt*r z&#_bqx?EaQ;x))W{ym zD|(y(XZe{9WP|`L(J9Y*KBGXIzo}?Sr!#WORv}iBKoK>cb=FxmLp6cH9UB9{g`)a~ zI@awq?z&_d9ehZ#3@-J)!!Q`8NdyUk5}w9E4kis0vJl5^Jx2u;ptUH`TnyPi*cka@&C3OK{W@^GRKUN>+7!m;1kgNnj!=x6Cs2p}q5pI(J3MD_1{rf1v z12l)Q+jueC3uKSL2J-zV#WoSRIHy}Sc zqzM51ZhNc*KpId*Q}7>GEikx`XA}wr$$W)+N;-KU6+4Jvp7vR!B*|1Zz8Asn6$muW z<~@{Z@7pN#eL%)?{Olu9`ns=>N3Os%lw%YLEZ|JTBoAI^sPeJc0N&rQ5k1HHSa-DA z{%kff^C|KB(og^pvbIPC^A*0JAhpe-WIel50YV^~QYR>ff^3j#oQ`$C>sXFp?|OKp z43O(WsgMSsaFs82eaU<}k8~zS`_3U-YCxSQp0&290Ab>EGd&AgJeFHz(6JfFFYOrPw`!A7LiP)(bpTp>NW3U=gxgB zf|{%xxAVnHe<8By)ye8GH53g{X4VynL?-n0^`UY|?NsH(VhJ4W?nP^J3jrbX&hexX z2oFPlX%cEU*Tg6m1yqu6my!bYs}CCWT&;zL-@z%=Tsgm=n))ygyV8P%ix@ z&-V-T1Aa?2ZE-ao1j3#@2hsj%yNVch!b8JF(DS1{T0*kzD>!r*Nc672@R}ZEs(6oT zeZL-M8lYZ(67hHeUH(hZ)HW9lk^jjyQE3Pc3d{{WOf!EiBw-m>j6UDo$mDX9L2^>AL~rt0T8Y+^YPHq7=YiK zj;b-5K4fP}BE5P%qn1O463=~Ep5uS(UQRks`Sdb=CvST##^~JDu^#<1y zj7DoJ?cOnK?Rk6Q!iWMAP_J;mxgnbXPhJZgPwDu{T26+tq)=b)j<2x!qwUm$eNxd{zL3eejPj03vt-L1o`G`F=oPajBKq| zbkX0sPE&$R?ca9*yZ0QR^cyN|UX$%Xnkolqr2C{P8UFtK@%99@_)mB$a~n;eOf*2k4BimSoRIY`7f?%rX3GlbDpQN(| zmE1lhQ_eA_T-fW!haYXFBP?>gDwDpQIVu{MMpgn~&C#Fj*s){#aRcz=lTRMK?z-## zb;^_}KhTMgIYE&gEC7W1!GoXTt+&=LUf%^`Y~0CqgCo zTx+W`DN>Q6+@B0lqP_hwp8M_PVaHC?MIy$$NDM1SkpQIn`fMNw5CI^~U55YT@ZWjo zopwFg6gHF5#ngadrUfPmU27vUkHepKAf8B|sgar>2WOcXJh-Ar43oh!@8DIr8l=iA zPtf`O_=Fvd=$#zC zh;WlmV7t4!^&l%fb?pG4iMSZOecLX?=nF2m;Czf4)#iLeEge-=I3y=&f9EuyoDj)>3%+MrnC&bb~om=E+0@w2`lFpOyet=qJ zH}Yku8B9y3@7lG?q*-}@iVP(gw7wXuh&Z)&5?rbF=8IgV$h|e4)Hg&HFJ3%}OuxyK*s%u> z9u(?wI+ZUwx)`hqw6CvU%()X|EiJ}FI=~32b*(hD=)zqln*mCS9M#G#w3hW9wVs%> zh@>u+sl9=rXyCMh=4s{oQZ{oRIw=5%7A{mIu{xZMy8T z%PwVt^dgy@c;LVRlb97uA^}h-LHphkDQja@_VfjwuJyYZ6eGs8W|6%zXCc^W1#=a! zaC4t2eQ?~$EOsofuO}#}lk%S6C6`=s8aMm|A2MG)K@XSHGA0DT;1e5>NqO+=astKx z8hmX4Se`Fw3mhGOC=DMsZk$X(z$k^6IcU~BZ*g8k-eM>GJ;9YLSMH-0TrzRu#5)-x zm-4mP5Y^5+w!Ok)(*3pX3|5RvEi&ef%o%E3Q9G~ynth6TuJvREcv@57R93JHNUzhJ zt|1uhC+%I~1q&9;A!GMYBJ-6RTNB03?JEHItmdU{+5oUO!mPB_I(Yz3&>#HMVGaP2 z`rp;n)jcHjr^<_Yx4yllro@dvNmKT5t#9(X)h7c0Q)U0WdGi)?{toT(cUZ@36VeE? zbvs`BEaq*lY;;0*T^x7 z2#CF}sH8~%I7)KxyFcgj)06feCQ2Lt-WE-rIyFiaokrE1!%dyXpT-b?QDm%|6qWgM zPLTNl&WHH>LH@pu^eakxD?bv?BW)?Oq z%yK@T+E{h_?YF<_!>KV8dETR>FQ{dph%TBfbHYcWkNv6L=buS43 z&Q?K+tgbN4__;-aQ)*BHUZl4lCvR^jMI2UKnF*}m{Ey}YaS9Fk$*^Ua zD|!9L|7p;LB9?Qft79Hj%C58yqieI@gz0r)bH{|0uB Vu>tQ>6(Ils002ovPDHLkV1oPT@fiRB literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/eggplant.png b/app/assets/images/emoji/eggplant.png new file mode 100755 index 0000000000000000000000000000000000000000..66f25fce447f20aaa4770ecdf722ac416a0c6ca6 GIT binary patch literal 4672 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 P$O4$3JbR)N?i%?&#n(&! literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/eight_spoked_asterisk.png b/app/assets/images/emoji/eight_spoked_asterisk.png new file mode 100755 index 0000000000000000000000000000000000000000..946a20333a2aa283469ed8937f1d2916e4e1a365 GIT binary patch literal 4012 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/electric_plug.png b/app/assets/images/emoji/electric_plug.png new file mode 100755 index 0000000000000000000000000000000000000000..7a3d6cee68365bf33fb4725d5c4c3ef1cfa765d1 GIT binary patch literal 2819 zcmV+e3;gtnP)NJzKfd3;d3_eC9m zzK;Ca+XG%XesG2S^z7!h2_dQg;Pt7#cJ~tx^_LnDE}z|W<>h03Z`1&w`Fs;T+t=Yf z{Lm&qU?dD}dg~-0L=6C1TbuiH288}HIsRm;0pZ1`I*XzP0Ij-u!oSVXHf80B9rxTJw)QxV{7smdK^ky?;0{xWpAT0CaT#guw^adgYk|EpqWEtA78Z z!_E0o13)8T^|IU}yViK**ms)b!YTh7#}BmR-R{2R&_P5n#pW7KId1iN@xb>5W1bxj$B$~g_M%kt&RrL(hB7A~xn!ootCIdkURF#+Il zTH7nU$?hr{tfVq&5-YycEODI%e%DqX%5@XEklfFUA(?2dcL3eIKcd^Sh zQa{fjTe=Hm(@OW=k1HPGd;!ZE*7j1VoL5N*6laLVc}Yk}AOIR+(DSSZ288_l{1K!^ zAiMw+LQX<&alUo9t|Cn~uXM}C&Rau(M-w6Pb>=q(vCtJ47Ykveq@=*(hUW=@#t6_< zAOuDT@1cz#Z92!rEa1wCU+vAajMmOclTGO8)_3HGgaBblcwMBIS=^Y@G{T@jidEr+ zU=~j!AYRXvV%f4~vUKUvf8q1oaWM?#XT-1ZI4vXh&rX#M?fJ5<)wws=^AK?fCIrAD zN8uXs6dWHPPw{-`zm4NqA{79yH6mc~;>EIY!v^W@?v}Z8=bpy$_~~&m4LSh`>8d8A*Dby@pJBVlJs zvK`(`q-Zq?qK8%dEj`aPVXeS!kkr=J8iP?;S(!FT8W}VmdvM$UfS?ql{gBg&Uz}&l}<`H$YQhJkL5n z01Dx6m?tX69Kh76Q|%D?wnD(?5!jOu{3z@#m|47nGJBtuow?2#!AJoWA0MJt=n|=o z73zRO;OD=f(JCKH0NU|YLG)GFDE{CsJwAEzpg)y@NFn2ux?k_(=m$2*vn=7X%-lHf@>}$1mV~FaX$pJxZ?= zh>F+NI9R+HKyV~5g1EoHuCc$r|2^0hfH;r+#lEmU7$F1*ITxx{Xf4pa0JHeu&{y%n z#^Y?9xO({ge%ZEdn+yyL$m-RrWznKV>?7DX?O-&71ArOAYe5jSLDIp97OFuC9RVqZ zcy6XJh1fW8SfX$aPuy(LJw^^;@6VVqBR*UJ6oL(6&%p#{7Jt(o!R&prsppwGtO4`q z&u7cbZFLH#Xhwx$#suncY~hc&!U}*kefo3@UO#|cH-|imrHT*f{a^^@fvKXRg2EZ@ zOam5Gg5i0+cY7FXKxo4p!=m{Jg#Q{w2siV7NC=wuC~(|Wrm>IUG4pVB4c{{`R>RPp zc9N3;palTVA|f;bZVQ21WjZi5G&E2=Jkp@5`;p-ox88YuVFytwo#`{#XkXUH$b!lRvCMNNCBV_4uvX;{A}K4W6n>S zG>OK~>;pJr697%0HV@-_4gtc%hyj3Ht}^!ry5(jrdK8SYoZe^n6NuIej@s-MxMJu^ z@c}#1NCMyqo)7qL77s!6JOQu>DlB@O<1sr$t{4Qu9fMy6HzsQ`3j*&P3wQ#M{I^OEEy0!1SIA@iy!lztAIX}pm6RQ@wwtCc8s3J zk1*F&S6Amn0sxJKX()8wQ0FF2oLB`I!@6ZouhSR_JVwuRw}{UbxnaT`qxSZ8K6H6c zpEN6gNHp#}J__%1c{D$P)``$a2Y8&nK;v(b_?d-~(IAL|Z$>--6hBUrCjj6D2)?4r zBp@&nxLLv{%uE3;i-e@VLn45aW&jay$oC=u7(vdn`m+$S9_a6k%*!Yvg>Ww3Qve`v zExN!_6hJP4+$yK1H6>^YfqM#!fO`i3(jW~5?_IRL+ze&zv-{H@Wds9YI&eef#d`(- zLO&g0{Vs%S$m_rq3IMNRVcdUDr2xXe6cB!fkiQC{Ar1L|6|k;iC+Y843On`Q{{V9| Vxqv7BKx_a2002ovPDHLkV1l4BH~atq literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/elephant.png b/app/assets/images/emoji/elephant.png new file mode 100755 index 0000000000000000000000000000000000000000..5ca04570e2425a77b566a17767864394f7657e93 GIT binary patch literal 5086 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/envelope.png b/app/assets/images/emoji/envelope.png new file mode 100755 index 0000000000000000000000000000000000000000..3631861bbfdcd90101dd9a2b3a2299c63e983af9 GIT binary patch literal 1655 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/european_post_office.png b/app/assets/images/emoji/european_post_office.png new file mode 100755 index 0000000000000000000000000000000000000000..0f65b1453056ac5c346693892dae0766c8617373 GIT binary patch literal 4816 zcmV;>5-;tEP)anmHz%?&O_2jGb70wNtSI{wroq54{T#E244ic2_alzLl!3?P(TP^C*ceRiU13- zAqyBM982OX%VH{|QiS`)m|(yr#>N-6Z0kHm8cB1{f9?PJAO0GZW>gHgU^!k@*WZ74 zzt`V;{rdImeY-+ zBXl^KtaGAe#awaLx8_=gf>vzrJshV#8bf1=hj_oV2B`N``cG+`^`}ME4KGdgS2oZ@ z`$O$=t39qvTGC`c?Ti&zc>FA!xM&{EId>%{Ep2jA-~PUKiN+ES@sbRZ^`$bv{Mv>K z=TDw|U}kyE550CLdWHwFJJu6*&J2qGde(B`BHYJ;e%3ZS8W0!~@J2uoHj z670>DmR+%~2=Ndv$sk!I6UUx#Of$jyvdYH#K;?sVC1neWZB8U*3GLBv%s$cQn18}t zzIl2Bg276-T~63+mQnn@y#wg#?#1@^cVXL`JJi&nfq2ke;b4ZMl2e`p8bdL&bzy?d+W|{aZK};IXxh(J+a~Rk#K1JTkRj+tiLC|@Ga2j53W3Q za?|d{K;_kbhs!#gieukkPrqea1(tnpY4P{ZIu�Oh<{g7{wmXn938C6c?eqGJvLO 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/eyes.png b/app/assets/images/emoji/eyes.png new file mode 100755 index 0000000000000000000000000000000000000000..dc2216f63d638e743a339f0887b03c4b0885d365 GIT binary patch literal 4398 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 Ao&W#< literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/facepunch.png b/app/assets/images/emoji/facepunch.png new file mode 100755 index 0000000000000000000000000000000000000000..2d41fd37e8d42a282ce48d3fb13ead7605725fa1 GIT binary patch literal 4873 zcmV+k6ZY(hP)>{mYd%Jr{k0Dj@am;dGE z_kZ0_oxSu`6H-6xk{@~?5{Bi&we*QzxJS%j3T1d0$ysvFI8` z@uL@?ea{ECpSeuFxr)vVQYo~OC?x@iF%m)~gn;*f2*gE$ubSZ^#z1NaN)ctmyMXH~ z?X+U&)z^68v;XVG>9w72`lV03zJJ^s*YDKwkAC};A6nl!@rxU$PJQFb`kG2og8*FH zV%r*tAk8y2PM+Yzg$tw`tEfbwl}2lINPmGK5{V%aW5kDm4-vJlpez6gN)V(V#z>3| z-$^tkF^Cvw7qd$*EEYct{F5&U1AgXPFZ|HeQLt-J9P5{MNe$z)xNx z-9CTn-+cAger<8;{5I)Yfi@$h752#9NGi3pJ1YFWv=!B}h?8 zWRRHDkQW8(TN`MpzUN&5;G@r-+nj7nwl_C6f8nWT-}C-67oMQlSV1QmZEn;0(361H z0#F3Nh_@PdoE7g8s{_yyBPCHQOqx)X6N)_f&L6oz_G_=uz9RsB>|4)oY^<()#H87G zyAwWurQVL@XS)MbQ6ql0I z+t2aJ8~^=n1MoB7_0-?nJaO`4r_VipVe8Z>CaWuyWkH%Iq$>s4N{Q6+fyT$TnQ_Hv z90)>;_x-Mv0<9!QE7CNh$TN%-KM1@%0Dk&go_u<9YwOo9KKq{J#JO`!Hde`s6q9I- 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/factory.png b/app/assets/images/emoji/factory.png new file mode 100755 index 0000000000000000000000000000000000000000..6404634793e288a6c77d19918f71bf3b3b7e3b22 GIT binary patch literal 5558 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 Ef>MNVApigX literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/fallen_leaf.png b/app/assets/images/emoji/fallen_leaf.png new file mode 100755 index 0000000000000000000000000000000000000000..d49f9c1757d3ae2325089fc6e60fbcece999d181 GIT binary patch literal 4890 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 M07*qoM6N<$g2;p`&Hw-a literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/family.png b/app/assets/images/emoji/family.png new file mode 100755 index 0000000000000000000000000000000000000000..b4b365f3a5c033af7e6cad6c67b5c5f5135a7340 GIT binary patch literal 7211 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/fast_forward.png b/app/assets/images/emoji/fast_forward.png new file mode 100755 index 0000000000000000000000000000000000000000..8830e146e598f29e6b05e00cb08301dccd2ed348 GIT binary patch literal 3105 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/fax.png b/app/assets/images/emoji/fax.png new file mode 100755 index 0000000000000000000000000000000000000000..62be2c958f416e04a4533187fc929a123595a10d GIT binary patch literal 4650 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/fearful.png b/app/assets/images/emoji/fearful.png new file mode 100755 index 0000000000000000000000000000000000000000..513fce47b685b10757d425ec63bfd8b69258ca08 GIT binary patch literal 5600 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 Q+yDRo07*qoM6N<$f}f5ViU0rr literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/feet.png b/app/assets/images/emoji/feet.png new file mode 100755 index 0000000000000000000000000000000000000000..1b0147b1d234c4043f8a07294c64888461324883 GIT binary patch literal 1529 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/file_folder.png b/app/assets/images/emoji/file_folder.png new file mode 100755 index 0000000000000000000000000000000000000000..4d8bebf8a90354c38612398a95b9c23a6109af5e GIT binary patch literal 4013 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 TGWwiZ00000NkvXXu0mjf_F!Zg literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/finnadie.png b/app/assets/images/emoji/finnadie.png new file mode 100755 index 0000000000000000000000000000000000000000..bfc5a0d93de6a433bb15d1b994ade85cefe1ce67 GIT binary patch literal 1186 zcmV;T1YP@yP)MbZEODjo&C za6bR7d4~W1v@kGS008D|Yt~j)tz$O-$fw@`0E-Y1`v3sugiinf0ROy_y*N1kq;dF& zh#U|E|Bx_;3k#J10DT4qc?1O7TU&Vm0ODg~5(WeAbae64tXKd502OpnPE!EWzr)A3 z&zrBSyT`NJquamF!?&ld9?YTu00TxzL_t(o!@bs9Pa8)R0N`(ZUBeOxfe<@QpmLiO zHB}y>N>%^=OI4wYs#Qwb+-NXKFt@V4uxoq!K;%Nq#cgrUFq)dy zK`1?yE9#=6H5RaN0t`;&awkCZN}!}Cs2?a{WtiPimeV!&JX4Td3M}-@xe#!m(7XgF z>DRjkR&1DY3!AvFY(pePPS8xxtl=!M5V;bNHZK8+`oqUJ&4b9U8n&cz0*h9R(%|?D)n{;E|s_@X|m|qH4>c8+K(5RVD%1yd^e zYSvB5v`h=c?%CA$l^607y|{DjKv?Z6X{+ifX((9sUW%Ta#9eP?9(XE{7jAd29hh3^ zB2(A3g`!A|RL++Ot>dwE0m5ec+JSui0GV4dZAB+tNm;BYlu8vH31lKIbIOcOmfGfhz$D%Y5z^RX$v+U6CV! z{_uBlIl%I{K-@PLKw-J1W>07pPf_(+JC4tpdp;nHMu6tP*ucpe!jtWoLagvn{jUOq zN;ihUR;uM+0WfpFB*uV|>W>G=%h1Aq0>+EK0ViKiUo*zrGXMYp07*qoM6N<$f_uyf A`v3p{ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/fire.png b/app/assets/images/emoji/fire.png new file mode 100755 index 0000000000000000000000000000000000000000..f2a3149bbfdaccae39985a6e0f37b1630a49a351 GIT binary patch literal 3886 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/fire_engine.png b/app/assets/images/emoji/fire_engine.png new file mode 100755 index 0000000000000000000000000000000000000000..9e6c59c99763489eb36b9641f515fbed096244b2 GIT binary patch literal 4862 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/fireworks.png b/app/assets/images/emoji/fireworks.png new file mode 100755 index 0000000000000000000000000000000000000000..b4eccd5775b319e38e4a9fb94661aa51cffbcb2c GIT binary patch literal 6269 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/first_quarter_moon.png b/app/assets/images/emoji/first_quarter_moon.png new file mode 100755 index 0000000000000000000000000000000000000000..f38c236937fa9e9dd0346392a72dd01d937a3cbe GIT binary patch literal 5967 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/first_quarter_moon_with_face.png b/app/assets/images/emoji/first_quarter_moon_with_face.png new file mode 100755 index 0000000000000000000000000000000000000000..85ae2ce72dc273d392eb8b2270c1c5f81b93e7ab GIT binary patch literal 4280 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/fish_cake.png b/app/assets/images/emoji/fish_cake.png new file mode 100755 index 0000000000000000000000000000000000000000..a8f22614d62a0398d77e51ae64f1e8e0031f32b8 GIT binary patch literal 5818 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 IM6N<$f*rJB=>Px# literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/fist.png b/app/assets/images/emoji/fist.png new file mode 100755 index 0000000000000000000000000000000000000000..ecc8874c2fdb9dac387bd6765ac8081034a75c85 GIT binary patch literal 5880 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 P00000NkvXXu0mjf60x{q literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/flags.png b/app/assets/images/emoji/flags.png new file mode 100755 index 0000000000000000000000000000000000000000..540164e84e438ae269178f83a7d2a0cfb080a5c5 GIT binary patch literal 6124 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 B?Mnav literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/flower_playing_cards.png b/app/assets/images/emoji/flower_playing_cards.png new file mode 100755 index 0000000000000000000000000000000000000000..cc46a6a1fa2e54b59f48a5896c1c6eec18ceff10 GIT binary patch literal 3434 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 Aa{vGU literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/foggy.png b/app/assets/images/emoji/foggy.png new file mode 100755 index 0000000000000000000000000000000000000000..3c7b8b04b9575a750a51567b444fcd09354c240c GIT binary patch literal 4623 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

    FtwVq|TItBdYp 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/hotsprings.png b/app/assets/images/emoji/hotsprings.png new file mode 100755 index 0000000000000000000000000000000000000000..a0bc9d75f21878b0d9a663dc72b129c345215e55 GIT binary patch literal 3538 zcmV;@4K4DCP)E7!)dT-|c3 ztt<<*(tLB}AqprdZ$Us11>b^#im0izHT&Q1t8-_F?&Tgz^X@Fn{D%AZfB)b2edqUo zodY@{#Q$~l8qjON_2}4c_q#fHa9Dv(_Y2LKxVYfU{{H=SI^EASV`5_mT?`5F^C|5!1r6FQwy6XxNE=GE)W!FHQ%Zewup{+?huY_^Tn0Rd}!go%l1EK-!GylNFVZL>{nj))K_ zVMQzEY<&E}gTcXVJv6zn(%(PRtCqov;9%34=xDKBl76ohb38I~RP)U@i)_7qs8&o% zOibFLfdhrt?E_kd4qdlDB&0{gT89sBtLWFSq$ef=BMKE|fma!DK$861a3za;eBRND zITRQ;p%ud=SC)UH6>}^!bl%B9gG8nzMS7J1hy4AYZyhp3VIs?7 ziPBtUVPWSR)hhEU0~-4Et34AQE-))=8vj{3o&HF0us9hSDt1{c(ONK7R_n+Xv~LOu z65Q!|jR6%pU7uQie}S#8*lV@^T??kvY8}zoub(&xF_nsPj}}asukRm^1qO=4h;l_4 z>@@}y7>%Koetx1A1{@3sXwrfy^zoUz52m%^iZ=NBuhxRuUudg_TtJ#7HsxCD2E>D;|AD^jZK0e|M3^>vDGSCV08Pi zVWMuxkOf{d2|BFS1A9QO8RV|qa*L=RK72!W?Xgp|qA;Q5zLCw>!*w zSx(GD`#Qv>!GpzVVD=3gHqk2#_*j+~7l2qT;v9Bq=i=f-ZES3}2b(pDQdETY^(gC0 z*bkht*+gwjOt;JEI;-{b3ba3nYP*UJ(NW|9CgFw~@Gpy{-^Yp~NPze)`VPgCuAwkr~#htB;hzR(eY1l_V(0?e%i8)Q<>~>K-VnnH{9Iu(p6IaQy zC|9d(FQNm+wF6TX9lh*^8t}4SAF&+diXn)VP=VLDWhE|rJJTO^wT=CU#d6PT2(O?Z z6>|a`o_3UX)v#d>S9$&^NsBgeK47&G1N<56Lt22@6A|&kPisJOvj6%1{RcYVFSc0H z)^k2k$(4iX5mdrCjPZ)_@N`#wylJtl&g9iZdq%lh3C)-sD+UaB%+2s=$XACPb5(He z!Cs^hdy75c;fW{4j4_hibv5A2)YJ#+`}e<%XM!%1RZTv}wMwpx`vmO#4q)e3?&A~l zy`g{u(ub0Cg+qY`?4cmMZbkc=kdUv~zl)&|izQf;IjeyAxGhH|lm!J;$1oCpkn7w!gc4d``K;tdgXw#c1ag#Di8fFxWb~ya)KcBn@3hqgB%?hy|t! zm>shGoU=a0cfz3Zi22^WV71A# zoEoU5M+OuI1qC$WptA#G3*=3j4@!#C&Ly#2jRFJ+SGzqZ$#Mh@C`CI4F}ZjTW8QU# z!CZ4M=YcY{J%4jUwnCDA*R|~uJfGZ&d8G-ZfCMctxj^T(zf$W6)9_ z9$uo!fWm-)d+M@^Voy4k$gU3+RMg%)bs6%=%zM+0{I`|m%1HGCV$tdXQ&X%(L%%f6qf z%OEET`8z$__(X^WD53R@|-e`e~8)y%o4NtSaR$jd4@;Bu$;1-9l*S7Hh=w`$rR@aLk-kIO~uegjcyIdlI5Htby+FH z>{*~FRT^)WDup2R2E;#OHb1G!FspSu#V>;RXH2F^S}?o){GP?K%1UXSgM*kB3^h;- zHBlQix-|e}s-}?37f)*_nX=$uJ^>oxu`CrOlUII@!7xE<#pEi=Im{8Kp3?T$AsjAN z2gMtW1+z8&`3<>K1GP{SwNay613tx}h7;Hh1RL+i2`w))w5;1%S(Ybbk6t=grwi07 z9wg>0wOD$z#BPw~l^F92dx9Z%YM>TsqBdxBZ@>zaM-H6Y$;Mb-IB_)bp=Nlv%L$F= z{ZG_!s5RcfNiV&J82$~yGK*z+PcY<6?$kgn)I@F6=+*!vna`!A0FCnyxp;jT4(`KU z*__D8Kd9}zKFF1v$(T3mdO;)T@_0uAF+*r_s97V1b1I@qND%f?c&Li zT*;Z-x2amFiQ1^K+l>&$W&@qdQ$chv2S7fnKQ(HU*gj&!#!sW8E#4-aoXCwF$(5YR zof@cxnyAg=PH>^ca^Jg{(Q{QG9o!1=7JOEZ-Bbr}MkXd+af}@4HA8}2$cfy@kzC1n zo2r3YsEOJ%9flT|Or@(h6r2Viau5!5Qi!#*jkl)9j~B&BNljUCaWig|aONflav>*j zBgY(aR=HCHwNR7h)8I2YUBCitGgqr7Dav>*jbMnkp#Zv>dP?Kf@7|$AwNdSs9>R4h)Wvh{epwpZ2 z{ch~Cj^Vt0F(pN`-gTF#nlPbxM^e(tOuPNT4E!5*cba`-^{^W%*ov3KrUIG z_>n6)lRGs~%MZFGhVAB^^U%QxB*<1f&F&PLhzxwU(P$Le*wR+uCg=%Vkv3eJOH-zZ zBh#jdrpc4rD^gObwKF6LzJ%r2aq9Lbs7so_W66n(O9-x%!G+ulOb&8&t_Rgl>!wx|`c9>g3b zli1GNRXBq;;`zX#q$JUP#~tDluim6dqWSK-#nI{0#c?%`A@~`;yEJhk+Y&=8`(R(} zlYKJ>bA2awRwwb~NUr2OyKmoHuE}ljM{!&138QfX%W0*WJjZE*i*Trwu}LMpUauFM z4F<6Z_)V-PuFW`|6{x}2{EXkR4cih!Ec;+z4mY{7$VGikZsbU=-KDKnZ>U>WwBCX{+?1x*KQ>#huX`RO@X%9y07C1yOwtgi84SF4 zsFC3zob8Blie~UT_RSp3#hlDd4&-t}|6yWQ-@dW4^!it48w?F|F=k%^xuqbv9Pu#- zuLto>6zCL2gSv$C^9;2uF~qVD_QgKgH*+u-b9&`JP5s$m7>IKGb(+Dj>SDxe6s87WFXne@8@45eSoXob*eCn`pZmADS-4R$vrnJInV6hr8Vr9; zGaBE7pq2Q&4!?65>g$#Kj&0bM7-D<>Z?M;ZUITg!=ry3%fa@3k1$pGaPYQw;ZvX%Q M07*qoM6N<$f+Kal03X(Ol*Z}EeE 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/hurtrealbad.png b/app/assets/images/emoji/hurtrealbad.png new file mode 100755 index 0000000000000000000000000000000000000000..146ef1a6a87c299c712aaba364f513a1f06203ff GIT binary patch literal 1456 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 TrpmK)00000NkvXXu0mjfGYD7B literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/icecream.png b/app/assets/images/emoji/icecream.png new file mode 100755 index 0000000000000000000000000000000000000000..871ce097689eb1fc452fcd8b2a0fc00833849ce6 GIT binary patch literal 4603 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≥O5qMxn}k3B>>YjNZ7a*I%}SrIwRGATS$834IT9@*${=L3$inYhg`>PuI|= zzKzkYm=&zbzzRIzvNI$}vUu0`vkjmE_)-pVLWuGn0RM8q1TWuosgdcRypDhnr~*?z zd#?NR?n5)JMsprjRfKVXk^+1OPf9RxE+PsL-XJG0z-0+SDAcaQU=-GRL@y^@Kf&>1 z{ilIBpbq4vOetH+0RXN{n)`VwCHOgw1ISU9QKf>?bX=-dYUZm?<`15`=fvfq%aOY# zQPh#Op(@h^QHTrzR1hKXc$*>PNqp|mX%9WFvBFn=)V;q1Py-SmEtLa$ z1Oqp!1Z27Tk*^ZO%V+^{R`%scqpX)}wNxF5A3JFlul`c!#t$rH@A$1tR}RhZYeu#4 z7}u!c$La(@00Af!V7**6x4w?G4MXSINT3CYp# z5P*LfEl?7A=}PdW7zsC`j2#IL43-A0eDwb88$&&E{_Muwe+fC{4SU z^;Gy3Y>Hw82nA3Yje)QP5R_7YJS$VKG^9r&1M(4|muP_zK>oK(zXAZScqZT_0I9RG lFU|ts&NBLc3|+50{s*~7;Mf-9E&>1m002ovPDHLkV1gpYo-qIb literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/id.png b/app/assets/images/emoji/id.png new file mode 100755 index 0000000000000000000000000000000000000000..47437a76d39258a854a52ce98d7b2839b7f4f9a5 GIT binary patch literal 3905 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/imp.png b/app/assets/images/emoji/imp.png new file mode 100755 index 0000000000000000000000000000000000000000..5acca3373b9148282131e383b0cdeeecdd52a1e0 GIT binary patch literal 6631 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/inbox_tray.png b/app/assets/images/emoji/inbox_tray.png new file mode 100755 index 0000000000000000000000000000000000000000..e2df0f8970524c92f3ed147c889fe5e66a3acf5c GIT binary patch literal 3700 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/information_desk_person.png b/app/assets/images/emoji/information_desk_person.png new file mode 100755 index 0000000000000000000000000000000000000000..52c0a50a3f61ada64000b53eac14887f228aebc8 GIT binary patch literal 6605 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 LNkvXXu0mjfn*6fV literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/information_source.png b/app/assets/images/emoji/information_source.png new file mode 100755 index 0000000000000000000000000000000000000000..9cb8b09b249492037ebcec0b0c319f728c6641f6 GIT binary patch literal 3670 zcmV-c4yo~pP)u(&_dB&e}W@cxvB$pH~5+%|SZCV%0x)JgPRoo&@+$1$(C$8H94bY%Pilkp!x6PLV zK|j<$>wmy7kj6>+!EipraS<1=%#9I%wd|NJ0V7O8LH5o)n(4wRR5K@nqVx z<1xcBO~wtz0BGD9(PxtZQcGV5;Z{7iQZ5E-9S+v~(%IvO-b4dM7Qy@We!Vl1u%2)0 z-uP5Hn{A0FGqz#H0d9bs7HrFeX>c%B4ct~~T@3{x6d_O67LNW+N5(7mo5_w{vRQ+F2aElDKf zHcZaQ0LE@7JRp=tx#D8BP{vqp4(CUwkei-GEZJ%&Qf-}fGWDl3*Tx0{mhYcE@z%&q z8?bfnS2v_OdVb!uY0KWg1gi?)(cXpwdj_$8doR)n8$v0R9SKh=Xsw}dZ|YN6jG;A^ z!obE(Jo3P16df1G&RoUe4@WRFYs0YYglWbPUz2WuIX%q!Sjp+7ftd z?-p#|+=*8XeS|CH6X1qnNu~DrmGTP#+IMuINCWO4`u!){d++&nwyWE;lNoI6?ZKaY zV+cY4hfhzS;P?d1msg@YCJ&(&93PYO4ld^wv7^78*8K7t!x+Chi7Ja%DSta)`vri1 zuUiD!(2%veW$>;3tq*>wwX++k)-3+~4<3SPTKMo{9=;^rCiePmtPKDx1K2ar1tEO= zfEiB=*@+|o3*FfkIIfSG z#R?40pru@+wAGYdCD+Hb=`t1^4@v>10d%(|DPkt0HQc-;J!T3OtZRuAOL3uyDw`Eg z?yFk_t$2K+Wm;ecLndh>KUW5zpf!hHqdn^@iTR?7>4J;Lc5lMA-Yk-F6Ej5@N6t>* z^0hf^?8v}24X|4-J}O`+RauBBU?ax51{j7F=cZA0n@lKH!Wyfz!dggb1;>@}l)~RU zy$2gQ(ukQHoH6vR)7ZM94X+)!5M;(83P0UI&aH2}bLPJUg zy+-g#f!bKllX&*PAU5~35cp>@t67+^@Z|n2cefw`AQot9Rf(~_0nnNr z4Df}3)DlW*tcA1+GizOY91rxZBlsIBo3_E3CIeJ68h^}#usUWd{lOQ?nh zNNA-9UP=We)tYzt`RM`*Wfv_;8#mJNb2(a5vr=Hhq7|_bV_gHN;1RH-bWvo;+8R)- zDE#LK7xCr21ItXPcml^qCNVrR2BjpL72}LpLU2ut5e85!?KuS%?wvK3#`&>1%q*Nn zUsoGa2^*z~i;0;<%*>bJ`4TG;Q<_+yYkbi~Fl>Ej|0|^-SJ?rjHHGghR9qj95L9TB zGbYBT3P{8(GDXPny_L#fj96-$Il=%10VqLf?|T9=p`f5vt?d&+!xa+wxgsWJim>e% zdOFhRY)ir9Mqt1~kO@U>>CGZ-$G{DS6-)Dgg_wwq80#58tU6q*>-msE0AMQ~fTYrt z$}@`&E>Fy3>*j9!;Hd|&``&J9Q>o8qVX+!McMY!`JOSRykcgS!oULd&ln}%c=07n; z7(g#6Fle~0hl=OJwyYJUqEHI1C+V*X&hfY3IS`Dg8<2{}5TpJc%k+D@`!Qd1@ZQPG z5Sqcz9LM8iQz@T2df95hYsDL%yV|YpvL%?#K3y3g)UQ`56FAL8{p-@I59)lG#$h}+n z%R3c;(OdzK?YkF$@r}Lo+3$XI3EkN=b`JEQp5nFz%iuIHDApXk?@Blo55o6}rN*YB zGJxton3e!J21+3z1!A5B+v4CxIF{-NGo)0g_!8s!c|7{y0KWI+5M~M`y!Os1%q^7B z+ntRvfKGRnlDFdb^))Fe;ra@mAD&&Zu%=a+hz%4Cw*Z2WL2v*ZQYbjmh3j#cG*_E2 z3=Yn2crHo>Z+gCn-GdwPgQp+DLa~BZ-~5m&e909!ux9`fBIBfxh|sdnRGLhup-0Ht z_dduJwZwvkTYy9^DteJx$IwC|q_h@-!Sw_xyw0%BK@BlRa>K^mR%FP3Nw}fS?zTYIf$v2wT-?7pcI+F zX#VCmT!aK@Yp}52q$g+Wx)Dzu*bdt=@UO2Q!Pw*sEwEU2v2(B=nS_mcnw%-%!gwCS zb7}qI!a<=zaC(NUik=K?ImR+3Vj-r+-vS7WU-+MbCU}J?k*AbmOK-~1q<4b;{x>H- z#iwIaVR|Zs*@A<=dw390I(Bvpv-67tT%*wlk!zqe<_44Ebr#Bi=o+AvqCnMk5rnC4 z@eZKo{+01O*(k|*z;QhEWHT7t)QNf$QsVgOOH{}RY#Hqh(z~$;S_?{_8ee1$UlHQYt)> z;@rd&`=itU=;=%J?yBlKi>82%9ESYbOByRSK!-g6^%8q_Y(Z-#fqE)cJe)W;y84H( z%Xl;~)~^8o7*$;Xt>n@HF-Mak7~hj{$}XPy-QAH^o*Ws+{Ct7->S~Hn2Plb&*cxsD z`u-0?5xYXOQc}a00_(f7*s-MtQF`yxr;t*v&4sDbVGv-0GeLw6Lv8PXH+|*h34xO1 z;n}b4j4Xcn*#gd79ES?mM_r)Q8U_y=Ee5ut3rC{D-6B#4EH~SMl+%eQj+F} zuRXd0Q95?!63UK4pXF41q9n^jLekxPhO<{-Sq{o=I4;fr19ckJ%bk7Fnya8u}~13mWa*(lCC|W zn%j7i4nhRJ{^-ug1Rfd9d-N| z7+JMWP%SZO+)OL107!ajNI>%@3{U`5xNlQe!!!FI|LD8aaCNk$@ykQ+XetuTfvGs6UVpLQEc}X&z$!4&)e|? zxM{+mGQjb<6zzQp>HBaNXHlHX|E$Vbe;CqQrBa+F@3;_GQ zkcTZW9msfaN(-3Hj~|;EpZIB&F|rdZm#44I=f{4ONF-n8mbIQC10!aIKa2TXm{2>@ zl%5aQS;Ty9l$fe)K%-VTPyl*3X2&cLu@;GB~Yq1atxg|7Xdz?D*v zzK2S25wnw{6SI>SewZJ-a99V5HlSugnX&8}O6!v6IX}#HZh9oyl7(g4;HCw}S!lpr z;y{SCbc`o__^yj`VGeUsV@C=zS6`U8n18#)!CqOl#L4rCZi* zw-YIF$_9hFJur4Be>O+-sv1f{`5s)SgkoX(%;G}+)%o1S>+|`m7Xrpoqo2)1nP3Ek zu``~r`%-P)55*GkU6vUiFzxs{#<;<0ODNnKaj39kmBOt|`=WBub1EN|=5t3Yi|%Nt zG&QBEp#hpTfW!g;Ffy4;E9c1;9*?C0a$9SY<1P?mLP@1vRq;wnl?#iDiwgjxj)03c oAlis9?oR1yM1V&a@CDWX0$m#_x@q9`+W-In07*qoM6N<$f|iou{{R30 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/innocent.png b/app/assets/images/emoji/innocent.png new file mode 100755 index 0000000000000000000000000000000000000000..503b614f8dcc32bad7a6f17f49d12602792215b0 GIT binary patch literal 7000 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 Z{|7G0f_59Z%cKAR002ovPDHLkV1i$UTXX;b literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/iphone.png b/app/assets/images/emoji/iphone.png new file mode 100755 index 0000000000000000000000000000000000000000..df007103b0bd410bfd23be425d6654b0aa3eeb16 GIT binary patch literal 3499 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 Z{{RoDXu<&)Kt%um002ovPDHLkV1iqGe_#Lr literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/it.png b/app/assets/images/emoji/it.png new file mode 100755 index 0000000000000000000000000000000000000000..70bc9f32463c11f26cf129ab031795a271f15b35 GIT binary patch literal 3495 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 VC;vgm-WUJ?002ovPDHLkV1k}jVZ8tV literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/izakaya_lantern.png b/app/assets/images/emoji/izakaya_lantern.png new file mode 100755 index 0000000000000000000000000000000000000000..18730ad559737ba68461687736483c1cb9bedb23 GIT binary patch literal 4064 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/japan.png b/app/assets/images/emoji/japan.png new file mode 100755 index 0000000000000000000000000000000000000000..45932803597c1ce7e8d073cc5fce00aeaecd01db GIT binary patch literal 4085 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 JPDHLkV1nD)Oz;2z literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/japanese_goblin.png b/app/assets/images/emoji/japanese_goblin.png new file mode 100755 index 0000000000000000000000000000000000000000..bd21b187570ae2263db7e1d50cc1aaee27358c4f GIT binary patch literal 5159 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 VUn5-48>0XK002ovPDHLkV1j8pspp$6 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/joy.png b/app/assets/images/emoji/joy.png new file mode 100755 index 0000000000000000000000000000000000000000..47df693d424f94fc2db1a0392148ca8f2cdb4923 GIT binary patch literal 6339 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/key.png b/app/assets/images/emoji/key.png new file mode 100755 index 0000000000000000000000000000000000000000..34673213f64990f557e373c5736693b94e47dce1 GIT binary patch literal 3452 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 eEr-u9qP)>4&Um^?Z<`_+E0K_cb%UduBmW+k43s zU|15|zc5+?+?_kWGv}N+bHHUvDSVp6@#)t88^A=HVxhM0|JqKe)R)XeVyBfz4=~Ox zZ9xO~MgkImlG69R+En0qXE|f( zX)sXw4+}(B7vDsg(7@uKwZg zbma57WIAgbRubR_xM{(*Oqd1-V~v4NR7y35L?9$wKY$E;Kne)ofm18Hm1429I6d+6 zdfor)OYgrrd)FSY{n5jt*`C5b_6%-(JlEZqvQix|5()J8cH^N<1#IlkqdS*II%&h? zj10ioCkYP(QlaL!SSZynK3&A6o3ognTR1v{Pjo%!42+d`H&@;4o zUuWNdX{9n48Qy^3{OWEL@>z_}mT_);36;7JAryoR2Ncvjh<^@7-e(vL9VrWaT`4@d zcPn;mDd4BCpTdoaNpQokgp~Vyr}jdK_I(v_;GhV`nB&s`~`ZTQbqTk_WA&x{s;FI<8Nbv2&!G)_nApF-+W=LW9L~YR`mhKLhYD zu}P5a-)}vd8+~Ksk0DHFeAqaf@ z=wDBuvQ)&<>@;p%_~`8qOBWBTu`xf=10FW|cjxj0U&!S0fRV!f?IW-g37q(!DfklL z3{dwYe2X_a0WfxH8jn3PfPEpuTkkq(Fg4g7t}g8cFcxV5?z2Pbu6)8wCee{iV{}tL zPG6gY7f5i<>DYn7eJ=)1YYx{QGW6lS3*)Fr7Y#Oc4Tob5U?x-h?Nl0oh5mdFb=Svy z*@3|sln{7uq}MuMa?qPg5=&*Nf(DzFOz(?Lf>ts)Y?&6A!H`Ycm?_o(NGQdj@E}Tt z4Alk;F@e)rDJl|Ke>7<}>K&NWwBXIA@3y zSHyy4>~#tuDr*%ei;93My|#8g2qYG(E`ICKXED^1!D>xRmoev6^;~ilkks%Kb7hPS z=JEZfwxcJPf^F$Aj1X0OJ2rOX$sNNu`o@{ia5ePiQrZX+1&YBni&Dha&RswQD=7#} zL9GujwflBwlNjmCwl1DZRn{_-RNC$5N>%LKR={(i;j*d3dPNr9KC>x~U0VzI!LyIy z?|=RtN;LA7BX^ET zL36GupdkW*TEl1^Dg6H7T~y28jZDrk(4E1berpf@?q?^EG(2$I0ykL8IlzcTNzDd` zcmq(vBVa-9BFP|R0D28%6FQLagg~Y4VP>(0Y{tf)eCGhR4s;?)QYw15#PVF^mQ~lo z?>)UI4xW-}v0SJ4?$2kCNhZ*$;odBc9N3E2$1V}Pt@s^{KE@fbXmF(&;|-t(6dodoygc0ILhk#%SWUZ-r7pDM9h5ln$Y6G7;`(H(EsH_wm!?sC!=P z6j-VX`rY@wyc4ZD@W>F3e{`KT%Ch*%v8Q;*LQKR)jBy4aR;6RX^?ZmR0L`R8gM-5| zIPOxk1HxA@7$B6Q(AqTA6FJxATSd$-R%yXeC)AaRITXtd^4TO-YpA;e`Aia3#|8JH zk3g`HXu2GW12?Ep|4}tF!%WAfG577A^ObLK226CZ51W0%m zY>UHjeM*8+Wu+I$m=KT}_yPL4g$g@8Xl44j0i8v_0aHug)xv=^K6%hUO1g4RFeuw1&U41I3h#< zA`r1Bj8yuf79q+5rE;CtM&PtjvdMzz5QuU^S}b(+Ml)&KP|Y6%jEWe}7(K`^7&td* zhanItDyb>{IV}c^=8bM@QofL2h%%6(x%?PUqgq2Y)<#&Gm7q0~Hb5Jv0HoeA#wB^c z|Me1LrO;ry-lWVOm%XJg;CVhw-YiNC6AUa8(Dy|+e8N{ibK#&Nn>9qO?jTb7O;CIl zs3I0(YU32p$xr{2Py{crmb8)S@)XxQpqjttxa2kDnFc4AR)I0pT!)g^vVn+2uLxj} zD*ic)ui`*c%PiypYv%wZB@MD-5DrtdRqd(f1t(5)_WKerK=M5i^?pKjDS=5Cy!AI4 zMff_YMu|E<0^|W~C8UXkm^9xyIe_W%S1o%(n+AZ0eXmk_KB;)q03PZgXeO0tx$7IS z!r@34j2Q%>rIuj?1QH1z?P+xf;4MvDVjw1BTPFvAp!JY60M>>9h%!E0R_0v34Hio^ z^tRLjjDb2kQb_u_wZo$?Xc8UCB%-uXs)Ds%c{R&27u1@UA%Epf3U_4yDqd79e{&HU zNC{wOv4n><_M%mt*)(p?EP!(pir?V_1n)Jf$U+WLnxQJSCEMS@qlhs+2LND{bpz_4 z=ms%ITarYHNCgs*;*Jw#yirl^+KN_f+gQM<^H*VU24?bAu`H<`sa5OPxw#)vnwl*F zEiulh0u;nVZ0m*qo&S1BVwY_uL5Wz=oVX(fuZ+(iN>4tz4M$&k3nmAWNKl=j0BX?I zTn`D`#^~k&w21nGlhgB1N=BUQO(p_drzZ$qFs#H5c$*=h51S|nnrk@;lCDqAVzyYO zzd2Z~k-;A9938?3XRe~Vs{_e|MGJQvAGcG!GIUip&SG`upi4gLe2Y0u$u^ImAxu@~$^Z$U;=dU4^vB?RS zN>v>B@_zir;k}5`@l%%p6+~n#Vp+`=Zve_;x(cMh=;nsDq-%XdNEHe#Ui`)JaAzm!di%uQQGD;n=aG(Rj9#6X#Yg9_M;A!MLW9_p zz}g-_QmbAi+CBzj)eNiFV|Z$&h*#e^jb{$+YdH=XwrnWiFMjt3JfC)zuH+H$^w^jG z<6YEUH+ln93)6a+Au09kNvZ%`nQa||l15zH5zF^*rtX|e2#Htza}1jXyYcxQTUv|& zT6tNJKLOZ3f1R&^D>6-=G z6z!yKTWHnv>>|y#)+UuIHN5ri8H}B|jFF)NMg|M$>&?;qfH9z2^DsG6q~mjHb^*1z zOC6;3C08@8?E#7ftE)Qw$|c&>^xQ&}zqB1nuIJGxRjT3cj>F^}L{D=l-E#;8-3HrH zD+@6qSi=B;6iP@axzZX#`}`lY3c4NQx7=5gbW1SdL5P0!o>z-tN~D& zo~so5U#xcz{?JaQz)cedr2+n+(o>^G_&)081yqVNFE$wCPXVQ5CR6xvD%r zh5=?L^ev9D2Ph$`W(h2H|FOD+g_((y^AnRlZZNJ{3D#^dE)i!>yOGIDM0t8f?INrEsVa^jN}9{G|eap?hG{hGa(;hLr&4oD8AG z?i*96)&DDff(hS)Qz>I%>gMFa)aB=A#xEaJp&|_sVT2lE`B$V;RnMzGpD%2DJe|wK zvTbnF0^>{@;6AZ{#%i|l0w2EXqE;%RI6MBU()_I#Ca=uA*-M%dUx2V3^;j%q1)Ds-OI1d5xs7g3rOFCTd$&0nmbosn)&C&>B(O#&fK~j zGFI3B+FZO5j4&}4l39CGrmO$4L@K%4GLzd(JK4(^H#mia#Jv%R)D^1;TxZS?oGV`4 zIaOVpKH-$zo7L* xDwoSk07O*Gw{L)WL(sUNEB_eqcmsTz^}j=|GY*odz!v}j002ovPDHLkV1h-?uJ8Z= literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/kimono.png b/app/assets/images/emoji/kimono.png new file mode 100755 index 0000000000000000000000000000000000000000..34ffe137dcd21b83bdd62ea8e0f1ef247d181a27 GIT binary patch literal 4938 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 FV1mUErFH-S literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/koala.png b/app/assets/images/emoji/koala.png new file mode 100755 index 0000000000000000000000000000000000000000..e17bd3cf531f0a752a4214ef1d272c51184826ad GIT binary patch literal 5687 zcmV-77Rc#|P){&UQA`w2Q4yyeP)~gZ-ho43gtzD;AoWx(y>RBhsY?3_ zxwHb~^jnE5QctLetn}#{&uDjMe)5~mW<#&}bm;Y-Er2b6Er2b6Er9NGG^wiU?QXyS z5zRjJyS)!Pz3!yj>9EdDhc>8h+LoG!cHP|H|F~^ETTdh`qUi2TZ9M4Y< z>-vikVx2|NWtr#a)u=d{76qG*3W7s9P4j{#$W=vtG|Jq$HRdwmeC_Yf$K#V12VgOs zF5m6%U+Gv}m(HDyo$F1qj4ErXGzqylrZkGkYE7wzBX&_tMPjH*y;7=N)*EHnnbGzZp4qTBepNW3X6Eu~HN%NlFTev_$+UDM>2H-i=~MN3GC3AX{miYc0e~_UVQEeZ z3v+nD83in$;SdS}8Vm=t_o&?fKG=f>$U~?zC}dE`00i#rFZ14SBwBpRcM5EBxkZ}Q-S2^b@$ zF+zzqB7$O!5)+=R#1|q;RE#kqRVuWl2mvo`!A?t=X*%t6I=An7IcJ~a`meLP=|qC* z*DUtA?92MCwf5S3pTQl5TnJB3k9n2K2AiffG-llR{uqVklYt5L`a~COUYsP4<~=H2 z4LlRtqKIp?+WnKP;3PcCFb#lkS*cVgh$0GukW666_=Y^+Bj5ALL-vOhgo!lT?~ zl(FP#M#C(nL4QcSexG{1KD9bsYIWPRyw;+{r6qpXd&n4XkXf4+s&$61P_@l5Z38wyz~Dal5WuSeNDTnteksojvOd=} zKIMkX6m1OoJazyh8k9!#iMij!m6iLeG3yq^VnB52dp`G zA2S<$orvDu0Bc!xYFlmM;Csi%ZXc`FDNG^?j3^~aTWRD`kKxZ=xX9tjiH+xNtx~0W ztwI$plS)jHcs_u#0&W0rN&}D>K@E_r0rJua#^#jemNEt@EAhBeA0?H2g$6o_F;<&x zx@vNQDr}&P3NoaTWpjz7lp|=R)24IFD+f=v7f!v?MhF9#n|AKJgFF1f`?g&3=`G_N z&OGlhFT*5;<)vG%kpGflkYgv`|ST+N;P5lgpxR6_>e+K5TLD!2O~HTjRDFD z22k%?F1?(53t(H;h)AXlesYiY5=p-FZwrrB+g+Oezz)hXZi9#_E0VRA4KSd3hjUF7 zKg2pcbjuCb|AFg0{_@eIPqX2z7~uM?TN|D+yBqb!ZP#v^q%nr7)f*DVfqD?3$bE}P z=gywx!7@%rn>n#Dbi$rbVu26W!6W<`J^=js9H2jVi{VQH_`W6UK|CrfQxsWQqc9kl z3UvUpv6POuipJ^e!U8RGBy8KVg$BbRze1l@`psCcFpemQ0*YCWlLg(j+G-tR=D!lr zs;mO9oj$#~-06IKtX4ZytJm3^Rf-e9#B6{_#4u2lL}Jym=g;x_%|_yokE4X*IN~w} zxXk%L;e*hW63BBWFe(fgKmvU(_3%y;Cg!_}Or1;fpCt-0Uc_Zg$WvG@&#+UFG@&DO zRlUIg7GVM#7{Ll=w+!yyx$~wi8zK6M3CiY{@ay!tw6Ji2HjIvz9`r>~ z^;oH-ff$8{_@eAO2~C7j6Bz`a4$G(!NbL{e8szJfZXoydJC9+3BL zDI^0U`y%3HNo)jg1r%MJF>x>AY2VJ!0U7PTnp7n7pJxYA;q(RrSimG~qylDL1;Ccs zp|x*idA`-E)iRs2Qj(%X@xofVxOkE3)v6{qRZcRyD9GjI>wH-jau0<8DZp+C1U05XP8@r3h7LhWC6Isldp#GjRQ2!SPG+p zYrR+P6dD5%>2fUNI0G1s!dfMv9#4T5>k99K0}NonHQ2xiRxmpQ+;H7>pJRaA1s;ON z86-m~OVmoU36IGdZwvuKL={$8a>)ncsW6gzj}k}MpAVF#98s;u6(dfn}Gu-vVi%c`aT>14t9&QthD z2x}hH=aN+LFGDH!TI$cWqg;C=?Ngf*#BGZ-nq&$}K8ll=+U+*LRd>fCY+wW{n4JOs z@%rn}*xc5#G$qRo(-f9NMU=SDs6QA`97Y=Qpw!S-?@2+bodWqN6eaTt+4Wf# zOwBu%rBFgwN<}pigL0wlo(c+$GT&z%LmZx?SI%q+pW9r*-=p>6?&+j26x<{ApUgFYiAZ~5DRKp6!Q6xtmP>tyx_IYSA`;PQ zfTB=-9UJ1N8evZ&p^igPZZj}|1x&&QMzDg}tpd5V+ftjYrCBzbD!7DtL0IDvIsz9+ zVloO2L#RR;iV_i*Ime3kGF(dCR4tCYm}?lzGLR#zGkuA`^G4EF-BQ$WFWy19Kose_if6zehzO?v$v za|pPy2%B7k70fOIc1%rekCJ#tr_<4o7Xl`s7ZxG)dwq)I7#kk|yCq8ocFUoUXpwtQ zH!``-U-_{S3bZAzgV6WL0g}%DOp}yuz{>Wz+!^?)2*`Te5BdDgkU>2!$9v}#`F6q5 zVV!;7!0Q0VH0EbLVn!Ha2bgE(=1z$La4|hSJsvb$yP_!CFCQ=ffF&`s)awnXF;OMs zysrj;p^S0oehxp~&FS<2AmA*Ffp)Aq1C~@SwY$?`E}qY|EHtnf9B=?OSfVxRWJ008 zoQySC3EU15dzHoIC7dmg3;`?*-CmcP&DJN{gW;>Qb8{;$0wA;esp$RNw(ais2NVT8 zm*ikMY-h`J!exgN{Yn$V;z=a$13kq7zR2B24!I^kF_9%ro{k@NG!For+_FfX0_i>j z&m~8saFFI3YY{mT`ej{>0&KLJtqwM94Buzz5wjsV?q=4%D7G^I1~42Jd)nQO05YkY zhxPGs_c_Z*xTyhH;y9G)kyI0kxMVI(XjpnuDpCMim)Vt?`*6#c)XfB5*HK;9p?n~b z6#x+9!$^Pts2aplAW2T9qHBx&Ky!InqO{i^Qk%WcY|w2Fvp&LXcAWw6U}9oo`*=}& zj9v9Kl*!VBY77POF)8xWDCvkxkSiF ztp;|<&=TrVLQKXUYh$M-4)9C~9mR;SgsRmljgB^Gz@cpAT(U$LmzK&kewfN8C}R;F ziI4{*np*8H^#*-vHQUtfcJJVC0SCbPj-SPsmX?~F4}Rb5c0Sc=HGkRdcX8y^y^S6# zeGj4^C;}QE-9VO6@7i-8U3c?G>6_pGA&rcVP@~b1_cDjoQ}9eRis;YJAEd8+_j~mD zuk4{a@7Y85KKL;0KX{lb3<|I3xkLfC7X!%W@zD*V^qn94m_GQCkJFd${f11fG5%z3 zG->3cpb0Es0vj0r?;l4`&&@qEH8r&q1@UKagq977CN*~|!;2`CDRAeP zzDmd5I6>QY?4W(WctYmfqYpp89$kYM#H%tGLp|{5PwBZsFUozTR+I9~{5d-E+H3Uu zEjQD>cYTo=%6$QNkY^?)#_68>zC};`>NhgR{sS-2{QPQGDEjYX z$Egx0y4L4Z&6@D!@G7ta4paNcK8TA{^V0suT-4jk|d^M$KL=v z`ohkS<-@bjS5YYh+X+tE5Fz|`qoSmiL{%Jp5Gc|?3G|{!&x6^hNzQ!|tH%-5Lc0Zls zy4cR7gQ4{C+zW@n1z3zBW8ruB@2_yJ-0dXwwB(jnahgwC!E(h0xccg=8_XQ&GA7U> zdcw+)c?ScUU${W^`Ut&v_%J>8*kd#^Gedq5(doC&$aZwtAIdkx=U#kCR+ee@^u~=F z@wY%EHVCfqjNe@&TkQi}Hz>oG+YjjU>>T<;-xx#2s*jBDC$L2}QmUs`1;!=|WdV_A z!RF1IN3QsPkciS$;bCEjo~`*hNHc-!_Ifh+;z}%QZ%2;IF+|!mn@xeRT>t1BCm3>) zjaA1oiU^Xn_~9DQ@NVPeBpvu;@ zg3G!SQX|ncizG?ff#30(-cy2$^Bfn?#^QOdu9aX-9^8X_RjV~^uSZcG!cd&Z1Z$ca zdjJgnNj~4WW(E|C#R}3%XjdasG39KQ(8ORs2*RIyWVOVw$x^8#)6>&hpD)0btzNNQ zoU)^YO@esd&)C5d&jgFoB=ECkg1ILKF;|?jepjAyWYzM1eBZ&fxrgo*)v))_DydZ? zLwtk6$+Up@wisss(q>^|qH?V!KrSYj%D4iFFVR8*8NqWN>e|o>rg-AZ0Bm~8)5G%f zZzm-?_U(QF9-v!X-`8`%3XP`JLZT>Xl~nsdQ{gqHlyUbK~47ZxmGKh&5#rcK8f^kcdA|B1e`|9-$;>x zi79+USH%G%UfDGwi($KG&YzdzCmxrl);ucHkbaBmn9K8JnK4kM-L$4eMp$NNnqi2* zwYZ*0GsS&rs%vdszmBdH1>93I*xxT(hS!N71dIYnq*Z_2gKHTrO%tVIwo_tM{U0JQ zAZ}RX$OM+eZF^h$`B7b&vt|8Sc@~<$ja}ElHO*$!eI|+&Au%sSn*>vl~j9`a9F8O>b8HO>d)r@soAFiGm8_YVb%;tgW#L`f(4&2i%PnC zj2-6^_;p)?YIQQhQv}LhU{f1gA8E1qVM^EyTaUBqPmjTzpq&93Q+SWHWoU?MAqZpz z2o~eTp>^CHcCf-`oQz9sPLNn2&a4fRhFOoujQhS*jiT?_ZmK7MI94Vkl%}n^W?k4; z23fDaEv+RNaFNnyT1sGy-VWLKdXKdEa^(?;C14%nma(_3CTS)~<^tk0C60QyYL9JM)hY*dwMN+e7)W_yWQM5fXw_RQ3>7hM|@{tel6(L^Rg&8(#? zCD8@ zyADs*6PFc3WkH0kXysTL@*q*Wy_&FP~l^3^flg;baO4;>U!Y0t%%-WPRiH5X+3nNhq zM1v*|I5~bmq3k8DH)K-u{H04@qVu|^?0MpNpr_sp<{&>R*R2|oyjrd{_mH|5Zx=Tr44g;3m}f-@OXBeD!w6mb{VSo!&D zbX0~0R><+UkIH8s9+OYse@~9Rc|?W~?~k25C&h^?;_6Eb&yvteji76K0f`QA#(vz( z4M4mr#KjN8p$o;!C+1~V_|nwW>Cy4=As})H_4o1=8Q~FpFoa-i(NzffS+A8{S0<;+ zGB!GfGW)MOz@kUH$-BZYEvqYf)FVS7dYu}&;pyPBsX0j~bm8Y}R2rgpnK8a`S zKH=H6w$d!wF+Sfx(DN(Y;1?H5rLV3R_c{OJWM5xjZ+B=j_Io% z%nHc>LZKUw*J&~{E6}h$T?3j#B0{QB=Z_%vC$zTDzy%iLW)rTxG&z^}&dV=H`xh;` zyXUTj2QkxoH#_0$3Ao%D4t06b|nD?K~u6$_80Zf@6 z#*E*?461nO>`t1FB9c6Qc4Fe=);uD0(|$X=thaX%ouswU0Y-Lzj89IUxfyue`th{< dzmHoC_!}71hWnvEDnkGO002ovPDHLkV1nfc%<2FD literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/koko.png b/app/assets/images/emoji/koko.png new file mode 100755 index 0000000000000000000000000000000000000000..3bef28c9fdbdb466221b47929c92869add843558 GIT binary patch literal 2854 zcmV+>3)%FEP)(WXfgrL;7G5IafjICj?FkNYt*hdVR6y4q#;u3dYREO2g) zcD0d@?(cukoHKK@%ZLd7%Vyz!+x{6EE`|| zh~b(TBY*&s0#a~lbOYNJRLE8?BpMxoa-w9i|me1ee>~cQ!~5ArY1G~%^#@Z zOZUv8oX_I)#TqUwH&FLEgd~u1eO+B+%GG5t*pZjA4t9(earovb+%hwcU%zk)@BC{4 zV^cOrirpgMk4I<^P-LkB9Qybp4~=f0y1z2H4VhdKd!{Gx@O}HR((v)>-xksEL$&6$ z`b-OEZseMoB=E?W10PGP9?o1`#l9QI^*ulF>ur4 zNB%Um_ojnm)k#z;qj>Z)2hj8dj{jrHsLdD%*QYT6f=pK4wtE{2SsOq7!!guqSFp0M zh>NG+J=&UEz4P_g9}Bx?fS91eh06HB!blm+&EO-myTAqEjWd^E>q5sMas3*ZB@9^5 z_k73ARn741YfUI7#a3_D4g+|#s{oFjy}M8;!_DO|S}tJs)F@7#T{0D(2*Y%4P&%B5 z?)|16qnhP%;6t(53z;K51#sQmZEiNJH#j$pm9g3ku-XcBo0CI$Xj*H9s6`A@5zF$* zDim8Lli%O72s)0t({WwcmW@)*#Zs-MlpH?zBnvb{F>ja@n_}!K0AqH}vMpG)4Q5$r zcpM;Ln2*d&kApG8q}UW=PXWM`+xj)+0vX4~u#XEQNyXB}mLdQ#m@^gvE|8Z58Tl|9 z1Jf*~M@Y@sTL1z`GX2VhfRGZRBL!?rr4crr8B$8nRfr486iXXhiU1Tlq=?+KzBV-% zm#(1R@{!MF-q$IRKswIoNJ)1W0u3sz;a4uGjjg8uQil;B((qbMNl8U*1so3JpkNhe zFEz~a0Nd~rs*a7obsdxoc|gYvw>)kv09gDW4Vy%Y0F=BMDI|3W5Jo4iTd;pm6`L_X z6!_UQ#}En$%Nk7FIEjd9mV_<+G$;U)N=~zuC~}!7#z^YAuu0P~bdpK|qQS&PEP%x{ z3zRE1h!g=dGyoV-DXDD}B(`oltYZ_SfyK3wb#26jVl#~CU4Tr&@KD4xpe^{;oP0_5 zXCel$fyFh(3=6@C3__n8K!&*KhbVJtfRlOx3zptkhz;xyGOpcT*$EJWK#(9dxVVU1 zkYRyg>sJGkRP+L_MaXB}crygYvGC`&FW@ilT+juFp}&Qk;|oVVjH!uoXR4a6!v+`E zvKU%^s9BU5HcDFpLaW5c>;`L%7Hpfru~?iKSXpaATYr4h;=Dj-Os5f2ADz^Ig^Ail(<}LVx*AKgV1&(tjDNJ+7V!itZ7qQ8rKv-iIy+)ah`L- zLZ%a>XMn*{0bnXABc-w)JLfVE@|k1=PP7gg3~1N=EmuOTD|Oem@wgu6dQ={Sro~ze zkjyY?$@=XBh^WmO6fMkJ@;O|`Le{ml5VjSMLs`$cFiF|tbJ~;uAlWr5YIP4>5^QFH z0i8VQ`v5^Os>--!B<(2<7K9vrDllq8MWb*)O%uKHRM&j3kX z*}00{Rai!*Woe7SrQs22ZP0+XdpC>42)T?4kp_>)xqAdrTh1{)Wkgok9xMyPWr z1hh|s7}Fi#{QPA-F?L;d9jk-%j*Sa}PD^UdK;pL507|%wr4K|TD00?O0~i?UEf3RU zSuWTtPLbCLvjy>$*}dE2|_!`c0Nu5rECU2{?&X#EsoBB%cF)YXBvVWG(5i z#IQBiUSnwM<0cQ9rElz<9txUQne-YhoK0Kyg(!*-GhhG>ATF`?q6oQ;d4Lp&S{+4@ zK*+gzIHJ;3y{`L-6myx5Nsa^C0zwX8Fmc^kQDYb0n&{D@2gc2u|dV%>hB7hG)dNs)YzN0F8l;sow!5^ z3-vh+Ng~!c4;X%H=jlYU+6CaDZhaE}eWnwDz-1Wp%z)7M79|fMB!`p|OqlXN)JCLO zG?QlYz017?@S1P&(0@RL95N@t)I~$T03abD!VnP~0^d8;QvknSf5rD2-{xTmDI_dr z1J;lWAfZ`!$PuwcjH|Eo6yWUHlW&afm^oD*ot(`U^U&WIBOAkPk_0&S5i}d9*Djq> zj6DTFt5vTrU3juNKJ~+Fp{RFN%w;gwa2aVQz3ziX3(d7oN(r;k4xFuDv^U?%DUf z(dx|I#gQ>&3I*uz5n9Da=V% z2p$IhLf|#t_8LpCojvu}V*q3Vj|)WPZ|rx2NhVYQ6fvCE0I-le`E&u&geUKp&%Xu1%20Lrrfoa?9+5C9Iq2hbv-7S?J11`=6tVi}PR@&Et;07*qoM6N<$ Eg8L>qZU6uP literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/kr.png b/app/assets/images/emoji/kr.png new file mode 100755 index 0000000000000000000000000000000000000000..b4c0c1b673d7c490888041a189d14e833730c7c6 GIT binary patch literal 5105 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 T(l07y00000NkvXXu0mjfd2e0t literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/large_blue_circle.png b/app/assets/images/emoji/large_blue_circle.png new file mode 100755 index 0000000000000000000000000000000000000000..a5b4ad4aaa2cc405cc6ea52c6b30728feca77af8 GIT binary patch literal 4637 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 T#Cf5x00000NkvXXu0mjfW<;ym literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/large_blue_diamond.png b/app/assets/images/emoji/large_blue_diamond.png new file mode 100755 index 0000000000000000000000000000000000000000..f4598ec0f20cadcdda6f1b9edfce8cfe1ece80f8 GIT binary patch literal 3790 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/large_orange_diamond.png b/app/assets/images/emoji/large_orange_diamond.png new file mode 100755 index 0000000000000000000000000000000000000000..46d52e5cb6d8c53c21db0391ef4ea1592c1e2d24 GIT binary patch literal 3899 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/last_quarter_moon.png b/app/assets/images/emoji/last_quarter_moon.png new file mode 100755 index 0000000000000000000000000000000000000000..355e3c3f79f588ee1c8f2c1380ea55f00408a271 GIT binary patch literal 6176 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 N002ovPDHLkV1gva9^?Q3 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/leaves.png b/app/assets/images/emoji/leaves.png new file mode 100755 index 0000000000000000000000000000000000000000..5229e06bdd097f639b4860f386e138ea072b4ec8 GIT binary patch literal 5571 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 RgJ=K%002ovPDHLkV1k`Em>~cF literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/ledger.png b/app/assets/images/emoji/ledger.png new file mode 100755 index 0000000000000000000000000000000000000000..e4f72aceacfc3b715a504edcf14dd1b3e30e6bcd GIT binary patch literal 5921 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 DSf@Vh literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/left_luggage.png b/app/assets/images/emoji/left_luggage.png new file mode 100755 index 0000000000000000000000000000000000000000..1c08b464db124bbad7c8f8b52f72f51d6c1b3683 GIT binary patch literal 4025 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/left_right_arrow.png b/app/assets/images/emoji/left_right_arrow.png new file mode 100755 index 0000000000000000000000000000000000000000..b9fd11c5158ba6e8d51e22a15ffaef865a6ef642 GIT binary patch literal 3413 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/leopard.png b/app/assets/images/emoji/leopard.png new file mode 100755 index 0000000000000000000000000000000000000000..8abfc4a27291589330221ae83c48e395c0f60e91 GIT binary patch literal 5384 zcmV+j75D0iP)|S$Z!^@4a`?1QG~= zdbK4*iepK3WVyzP@9ar(&e_lXU?v_ru@lQi|0L|pHv`}I?pvPU^Lu{J`+oZ^0Dsok zApnN}90G6%z##yK02~5v2*4o#hX5P`a0tL50EYk^0`U8n(An5l$TBzm>^)oCXa4TU zkt2WeX8}N2jQ!74a>o15KKtz7+S(faOPZXi(pxilT&xWLUEyxj zR3F8FHpmDGBE1{6aSrd+gqxuul7ad-hoApRGJrncPLwfJvl{L%&eV9|T%!mxIo4RM zaK~tt3krRYqa(!;Dj(x_#EyCjCiB?8{z(B)9AYuET_?cf1qEIn^24ao7L&P-xYh5E zOD#U=RdP`nU3=-gVt?>m zHpA!zUsq!fh0sJ3FVJ7k^wfKOwU~=~g*h4`%y6MujJZ5#G(CJL_D_wm2RHV>2 z%ZaJ~+!F)f%{BEJ&9HeqmSu;XHW}_s1>?>{5O&+V(38f*a+MpFOW3F<4JZvYLuZl= zmNjgQWZGj!Wry)hTaZ3rCf5l~aaI^ix5Jf2cg(6C(3fh1s!-EkD%_9vM!Fv_iWC@U z%iYZ4{rQaeNKcD2g}Z?^QeaRK!amv?F47#8 zQC7IrD#3iABZibtI6(k)Cs?9A)d3TEES##~VMOJKCAwb`VvLm{7B+}+BS{Q JX> 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 NP}NoWsATi}{{XcZFE#)G literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/light_rail.png b/app/assets/images/emoji/light_rail.png new file mode 100755 index 0000000000000000000000000000000000000000..bcfe801eec6f4165b37c3907527918ba6aae98c3 GIT binary patch literal 3792 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 Ef+L&!`2YX_ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/lipstick.png b/app/assets/images/emoji/lipstick.png new file mode 100755 index 0000000000000000000000000000000000000000..82f990c5679533d838d93215512229cb13f8043f GIT binary patch literal 3384 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 JPDHLkV1gf@{!jn_ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/loop.png b/app/assets/images/emoji/loop.png new file mode 100755 index 0000000000000000000000000000000000000000..ef34df3a404ab5ce6597c202d695665ea7c2870d GIT binary patch literal 3417 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/loudspeaker.png b/app/assets/images/emoji/loudspeaker.png new file mode 100755 index 0000000000000000000000000000000000000000..752385e523d44d308bbb86aaf2484c09cd6797ae GIT binary patch literal 6001 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/love_hotel.png b/app/assets/images/emoji/love_hotel.png new file mode 100755 index 0000000000000000000000000000000000000000..44d7db828ad1c6ffa0a782a83c506d99ea91c33f GIT binary patch literal 5941 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/m.png b/app/assets/images/emoji/m.png new file mode 100755 index 0000000000000000000000000000000000000000..7424665e2bb49a431aa123905a6ecdfa08b6a54c GIT binary patch literal 4737 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 U`EM^=jg|n4vdS_gQfR;b17S?g5&!@I literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/mag.png b/app/assets/images/emoji/mag.png new file mode 100755 index 0000000000000000000000000000000000000000..aa5b1d7c46fbfb27876d4e5facd5d0dfa5436d44 GIT binary patch literal 3040 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/mahjong.png b/app/assets/images/emoji/mahjong.png new file mode 100755 index 0000000000000000000000000000000000000000..f51ce65fdde8e3c2c0f69fbc1beb78ad7f83fa10 GIT binary patch literal 3309 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/mailbox.png b/app/assets/images/emoji/mailbox.png new file mode 100755 index 0000000000000000000000000000000000000000..8351e70760cc342e4ece73aac4eafa921e3f90f0 GIT binary patch literal 4196 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 P00000NkvXXu0mjfzKw6u literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/mailbox_with_no_mail.png b/app/assets/images/emoji/mailbox_with_no_mail.png new file mode 100755 index 0000000000000000000000000000000000000000..59f15c5d7da88d816a9ed2f5a33cc23faa8633a7 GIT binary patch literal 3101 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/man.png b/app/assets/images/emoji/man.png new file mode 100755 index 0000000000000000000000000000000000000000..d9bfa26a67451b5c24e2b5f4c8e1fd2653e7404a GIT binary patch literal 6023 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 Bi$bp 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 b=eYeB!{1W8c$9R&00000NkvXXu0mjfN(}M3 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/maple_leaf.png b/app/assets/images/emoji/maple_leaf.png new file mode 100755 index 0000000000000000000000000000000000000000..4e9b47207de601d11c1a76fdbcdfe63f978bb432 GIT binary patch literal 4450 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/mask.png b/app/assets/images/emoji/mask.png new file mode 100755 index 0000000000000000000000000000000000000000..05887e99c6bb601fc395d9180efc7db2e684d86e GIT binary patch literal 5235 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

    5}YwdD|A^-)J@*M=(|Je3Yy z^7!cJCb`##Pgy=JkXc6euz&3S@Bx(X)9caLCF9bgw5m<#`#JI40kP6Ou|MlG*rF7c zs_V)%S1YS&X1iD8FkyW{zkIJ>@ZVE%?qiKOrQNJ*X6MV4Q5dc{8CN4pVAEL&%ZfSM znT-`}?AdD_xX%~rMN6qeMg>4;w)~eCA!qK}*(0uo?Cu)SxPMGIx2>Z3Q%zvbJY}Ui pFh051<*%*GH)COa1?6V|jpo{ds!y}^zsy9yZFN1hauvJK{{i9-88H9= literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/massage.png b/app/assets/images/emoji/massage.png new file mode 100755 index 0000000000000000000000000000000000000000..dd30d15975564504dd4fae61923675bfbeaa679b GIT binary patch literal 6036 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 O0000!M41DKG?82=0|pdhHD z42z(E5JOOKfq;g@XaP|v1ZDtP9A@2@xAb=JJ1Q6k@5Tq8eB?Vn`}x1$@#A~%_~I3}E?+YL zRZYO+#f#M~*Ic~pm_^4va{LJ={o_H0FF1Lhx%(e?;NkP%^d~2te91A#EPD8+YySSi zS1kc=Id;}H$GqIUyD)d&p*ZN^LoQo--r~}$f`A)7eZl^B zUjP5@T5$AH7mVzCAcD9I9mEhifKUoj2(a)VA+*Bi>^b{JmGUCI0z_kqEEPibU;2R) zhGvZ%GdMJQ)N9}H`qPI-_USDY%Ftm1p)`b)5Rd=?o+xKhXecE>ju3|dv{w7R;t05C z@uI>JpFi)mg~u&Cv)ng~VyO?Mo?!?X0Yb37IFkY7L9p%HJph7KF(4$I&0t&#Yi;z3 zbAi6m(f1y9=mBST_x2--itOXYCNQQ3o7EtNL{zLm7b*}k0ALtAgn|e{5P5i8$CgbS zQLok3;mY<`sequidxK!o zD!c`hRFIH>CsqLm1qs*`jp{gl_4KoAlZlB3(Gk1^@}lF07GJzz;I{6e{>S^m@bSKa z`ek2{o|x5*$N%B=19x4xaPR{knLje`_vQjosOJio!I~z>`&`Kbq?iD51|Y*EINJn~ z;Nu_x@{WnxuyGwWZ{Bk4mA5`nM_Vpz;rKncJ*IFmrfT@WhZ^an^tp_l|Nf|P>r z8b;I+6??GXq4Tk$={|empB^??BDZWPj?iBYF+5a6*GK_DIe-i$wAO4vCNKy>g)q_x z1Bsw+03vutsHMr5KXi2E7dJdU`P^P10J?PTlTWWcyWCai>y`jn3!62d>mlcVDLF85 z)Q1irTdJZWqNoH2pr|$aMvp}EyZ0=Jwrsw&w-BPg5@Ob@5_ zmawUTuz-&(3ZCGNhjSjoNzj*!)Afsmc=Me^ZpI0?eEHq0|Mss=_|Sj-_sW|OI$+<* z=&T_`#SEoF0gwXTfr08kBTEh9sDMmFh{^-#?;pgPt()-Z53a*gH+~s&O92M^yD%_R zK>usXDD)PfA`PkXYEklo2rjU&Qb2h?WR3%@4IR1)8kM3$U&EbfkL+0j;Ih3^3V-po zpL~1!Sas3Q9$k6W13!9XNmaFS~-EVIr9+T^K0@ za>)^g?0eeKNIxdC2y1@w5YiQoVYD1$sJDpT-U!_z1(Zih2+BnSg%D8a^bQUnA`k)I zIhbY&S4)x9GnkfUO@}14*tR3VhHWjK%+^m@ee!irZ+(7-TwuCT&dw@Kmlsbu>7=)- zaLfH`)@?mSzPJi{(1XcP*MPn zfFdD8E<_nf5PEweIPYP--^VxX-RCaoJ$?Bv$5vwxiMsUCOYytN```b5|Gm$DVzyYf z=9K=VhM}GU`YRDCl>p@y@UR>ph&2QR2R%vP5ybEyqyhv0=OMfYNI+=?9V&JcFFaqT zgn(8OaUdZ*4P^;Vz5AKmD^Ux00db(vQ;JY1 z2T%o#Fx1e59Iz)|d1*bbJQM(H;01v^AVbZ{U8WNtDbUqYtu&NMK_Dmvs8Ax%&4V^h zm>*uaaQMU5Ji6tcy-vXU4k!;*0`Z-Jf;xUyUyT0l5S6X~k`#hi@oEKugi9@iSCAS& z0LVzfgE;yV2?iw~z~Vi~wv@o>ksLuq0hi1|?IIEA_JAA$f=~``9ZSD+@xr0cuiLV1 z>7DDSxmO5y&%u>}lBDlflss;@9AKcVQ7HrnltLgRo2&8wH7p<{oFPDa_&{=s(*+HL z8j^?sF$n^I1-v&L2UwH8+1_&OMZmig)_@^f60yz8DDu3mlWIe+)mj1h3pwV%7O zTZy;#78UxtGxp zTk1UVq7xC%$>co%H7$fCQ05`Yx1$lkHVi0pP+kDe!Y2m4;enLE;UZ%K*_xylD0N5Z zABZv76JelBi7>U-{pGgSQUH@AUd zC|7OoL?gQlz}Q(yo};hhZuhBw)Jk!l2kR|Yqf}o-J z#Ub*QCq;SaNF84b31}|>t#TJIfSE9GiGwc+xTb>=5?SJqH1eRSl`N98uLZDrj}VYr zTTCtBNW$^EIlux*(}SFavp@lW4kbtOKrmKT?+J!{zMxicJFGzPByu;g9>#Hb0BHf| zW!@vS;|9FoQ78c!Dg>!S6bN`oSO=tW0H+DI3P>q_^EbUiyvNeutyg~b1O-1o;6IRS zASEO85OD1}KtLd~9+~l66aio$Ldv}Op*(wdv{U1*R0#rEU#DZpuyB=Tnqz*~Yd z4l33t4#m)20h4cP785%&Ox6uD?@==zb?afZ{KA903pMKsuyjKbrX(5zqs^Lw?|yy-p%QX(`OaW9#5OMN?~HbfOF6S z4qj0^f)fWq2?;Io?Jg0tnF<&yhy-6l1Sp+Xi)N=KiJgx*VAUlv|2Ak7S0hvMKTIYkyCLL75z0MDkaVADJ`hC)Jdpv$dAORx)(%?VX9&j7Fv&4xwR zP|SQbnR4{6O&W|>6QqieFn9wI#Sh*7T=lkZ&O|eG?}p?@XUs0XagxNVeE%N-V(Ozld z5DqQ#cGi006@(|=^bpcBAqeyS!JGVjZIZ_Xt--$T1R-l=++uqNq^SqBw2?W~Qj47p zgSz+FHko01*l86Id%{%O@IqXOb zvLO8AEi1?WV{dJVvApwROP>AKmoMM!ZTdDPR1RLX)1;EQdsxpe-VS!0B1z?i5fM1L zyQXE+QA)C@6L~&I@LVG$sbee2G6zc@wT8i1!(t*c*wGq|R@Z*x`PwDFm!HY~%j)LM zH6MO+tl7k5Vo^(SzpQ2!sr4Yv_kaO`0FL&#|2r7t0CKU871J1*`ioP@MK>|`wtcZRN??(C=qLkKq{n`pde7tlHDLpdAp1Q zCL|z4y8t4Bfk)%vpFe4xHVCN+{86BxBWTW0ekMPfvGo z|0s;1!jQ?&(u~HoZ(sZDueYD~w@bfq?@STE^5?UQmz2@GVyGDM*WsKQLWNRGjRz$0 z%JZscmfatQ@@mflTo?&SNWDj+-BVb~tzhS53R8?QbjryXJ@^0|FxrFJBRz=Y0)IIx zgAhu_kU9pWhSDJeAeW)Oa}8EKx6(iH^p>|>^r>5ZFk``wWM-EdBU<2KI0e?8trV z8|&XX8s9vbr5_91wLqu{O65h7cX`KXJh!(DHd5T})h)_nn3Q zBM-ssp)w90Euwdz%!QP3hM(7LfowK*0zxoxBzNsc3a&4t(jezB)L-m-;l;@_0Ngwi z1h61{gj-OEi?%PD$-a4!B*E zBJn^$dnkZ=1}P;kTzfkJNtSP7G@L;~dcp;z5B&40>Rr1!x;yTEXxYVQol^bP3tPWF zJlxBGlt+6n9v$IBhC#Cfc+b~JGF*bENrGmrk?Nj&dpvnKmPxj^VC8wGB zht86uBB zGAY$-8ObQ-Rkzl_nH1J#@PfFVhS0D+gEbCo*6hG|GWI40KNH=cXvzQlo1)HnYRRr~ z%02nmne+MG9XsZj(M==UC%0xvHeBkP1Lrab;rUmrIxIo!5E6v?#71o2wjIBIal`Vj z-MMn7Xi4YYcHa!`9^mws{%v47nu}!Z9FrY|>KvPPUQ8i_{`#%+|L)|4bI(0;!2;;6 z0pxX%=52Gyd9{H}>sI4GfBLw+`=M1sD^{$n1MtX&I@%#b?-uNIpdIaiQd0nNy5BWU znFsALYL6iwYmZY@c9aS5-~F%WpDSp;wNNY$?SBvCz!4hFD%P)EkH?=_MNj{F z^F=N2ar<7&niJu6Jxd5dXh)CTfS;xec8Ug5fKLSybwDC&YuuTmFy&at^A33eEDXR5 z_Lif!96S2v1&7TY9UAIG9EGUXYS^-M9BVi3T)kq|j;kMjV*QT+BmmO(Xxd7h5q_5o zyc`RV)6BH9!m=}G4W_L6R8qnzBa_71CUuHyxHbqIMS(eNPTzr}!(H==v8otDo3@SD ze(~5dJATqMrVgM9AY<)-cT=o@l?m8gVB5W~caC=mnNHM{&(mF|qhcEH>Hh0FU|^@{ zu48TrV9}maM>|1qk3|1Y)ECnt{B*)P=cW)!yE)JE&NUq%Q?7HJ^V8mq$7xw$Z%O9` g{&0i|_+ys;4?x#mzkDs&=DNAF^1KMf{GOoj7CL;#Hf_1SV|;{Rst?5E1J?& zibzaiVntLciUJxHjf#q8xebdML}r*_X5M!9+so;5^4a%Rc=hOKmCEjXuYT{G?sMO( z`~Uv`)Bo zPP#X29}>yt3ha&=?D_)iY)RU`xNzv(AA0lH7Cb?c_|-a@%#(XpX^VeG7Rkpl))OKw zJ-#@x&~d+}pr#VvH{-HOIp7dlhV2o@eKO{P1{SO8$ z@$XhyH@i0!t4BKV=UthcG&`cOwk8-nP$>d6pYs~f3=DpJub$pKTlvBV{$%L*CzAoY zNKEd^SgVm&lH18W$d;|S=A*8p52Fso%K}41!N4U-If0T7l=8rM3HaK#8knA{Ow6t? z-}?T`$2UFU1}y8{|4TX<>n|pGay?ejOLtXX=UQ{&`e6rSWra#f!p}<-^8&utr{IdT z8jiMO96ape#FNKorl)iN^}fqSr=Ms8Hj)bYQO4Q`c@g;nX(B_HJ*PUGgz>dgEc>yV zgK|-#z~FO^gvX#=*~fE$LJm+C_|A_tMmJ4k*Us9`iRs*@uX%N?_Cy+R9BGh)8EY>f zF8LHzQ5cK&jaHOD#q3wg5_w<3aTOE|kdkvL2%uDdECAShR}+4525UEr;2ArIPFpik z_|I!zjXWM>sf>jJIfvX$_N`belDCp?lCL8}m!Ca)rZ4P!XU1JIRB=$u0a78AHGocl zh@-VOorhYW-Lr_Shu6P$7aW8rRIz!ZMjR&> zN3pHnh$B}#o?BouX^}%2cZKJX`^W>x&>LPjdgfHkJ7acD0h41shDUNJmp$%(#UK@2 zS3oKW#}QBp5CV{dONcskEV(a(7`p_@v{9-0*g9Lq@!PAHfAEbH*F9baIAkN)Pjp6Q z>>#%giwqS!_sR`3zL=i!F*csZ&~Ogbiicv+MK0&SO-+!H>fvhv2OcA>j<7QaRQ?Eh z>~c7WFjRA}ZF2?3Z7RS01AjX9w#Q=&jF3vk-X}PnSn`d`y??>T_BA8^d26P9j85es z9KgmgGcVIjCy9kI7GVVBLIa}*TVP;p zeEaqD*FTm9OcP5UT*ZL9S8IK~=U%*SI`557`lyV15K6!%4wNeZ0|-m_D~uB)T0(0J zDFxJE8@LLo8P;}yXbxfV_hHxi$Q^hWCTn#>TPid!`G@OXE9zH$Z0^R#%7AsGl@a6^ z*+l*k8M^2+_-jY=25pL@s4YiIqh;mP?Sik@SmNSM?1rF(8QbAc{b)qEVfQA)*AGW{gTf zBc~Er3(RiY3g|=7y~Chs#36kXgp?3T6UNCyt$i6v!pC&{d4z#K8z%PVt1c>?b={5a zx!=}+andAV#)A>a&yb;FL7h4^=6jxBh0GUWWgd_M5X36ZJ;38Rn?U+Ya7%gkrKo>% zz6h%FEcg-}Q& zQbH#ZL1dv_VBO|z2%2}pL`^{CAW{QV-w2`lCMbt4d z$v2(1^oM_c3&P*T0FRW&FYrjMC5t4$3S9$8UeHd@yAG7A0BIPj?tfvCx&W9i5G|tD zSU|I#An0heKcsX*pw+c-he}vK^;0bF`z~~09FA8Ql>Y!p(ov>!<2XPpkuQy6c;|Cz z!vD|&bAG66*8}xe0kFTW0l5K78S87wp{#!zT{=Ei^xav<5s-)g6T)i4xdem(Y!3+Q zXf~RdpYI{;1PB`m+I54)rbUCn&$VK#*|82)@l!l-&)ra!L-5Kqs1osu^dUF64!CIr zNX|hNO)yfz^K%&A@hn98hvsrU4qwjzPNz z%(oIe@1zlgN9yPWE?l9ZJ9AL(0uAsX3q?4E5}aHPRyYujf>bWF401IznRC zGs~E}{{VC>UfY&GA@5DvxILx1Nw59Az-EX$oO4LZfl` z(o)gIhBbNQeFZNkkt41r5d;Z-@n8@4?YFN4aJ7TJ^2CrR96ngQ0Bt=0lz40IS2 z5)I{8L@>;5h`GZZbeAHuTQP&z&|!jJTch4GXfpGQEe(IFh}kiN{oii^4udorN&!-) zkIsbiUI?LL$X3`7-t#yr;y|P$&B^f`5)4mQFnMr^UB+c=9fOz85f@&eKm&Y)S|BMm z@KEp2DZmm|RzQ&Pa#WDa_F^n169a^Fpxb5GG2priTwv+<&^Q{9kr0ALD3#8o=W-NqaxR3Y zfH-2t1!`-`7@nQxnh(b-a=i@Y79q7nzVi@rmCn%eF5r@wn2ftXLjq(-S}~~;%fJj; z?HDo#SWh8hrkjfaIt(-jG{VTh=mcR`vog5WF)8)fV9zNh>&=)tcR z;g!3{<$E+*q1$M2E4JrX-U-GTtu7{pILMH-vXp2`HyOBNAZ-G}F=jfG80hhQ$iSts z=~n0kN%}O{i3}cUY3$ikMeo5bIy~nI2Z{4=$w^C$O-&Hi{=Wg1C>|JTA#L9nop7!- ztTkw~x@k3z4!LM81i(TUUcL>#oI_!#h)6hS%=OT2_71MN6U>I-+YS1wxAUQY2q#a;sv4<#hAY6$~Xy9@O^8sB#%l0*o6j0LP)hQb2_k z^>&1#hdZ{{h`+tk0FhA%O;RUg$Pk0?hLKG#a<*vbGDj(37;vNwTan~B1`Uem5}MUb zlC=L{yk{H%d%Raw5K5-OQ&3{y01?K*+9a(cBtW7gn51ujiA;Ll=maqdIsxj<7zdUV zw$C_-jZLEyLcp3dFX_0@V*72H2U=lw?{Wje!Ca99535HGk{M(u;{OVwWbj2StTn0A zjaCGj4$lQzG{CW-Xo|I1>}afCU%`%zF6JLxM6Rd+n`S&6t+fC##?r7P4cKUtZYv#< zgm4~3rhl=enVqz=B-nchFp#J{6vEF*l*?|~8H7@)5v@pLu|)$q$ro?D1HI)2bcrI~ zikl%z?jh%Atby(CV6UeUr=7q+SfJZumIH%oUZmZ@#wHCUH2sTTtDE5E7mTE>2ui@1 z1XA<^H=3lW63~%O1CFD9z#)SSx`f9J8Z934;t3l3i*|soE_QI^z6CsUqN1<4?_iL( z#$v2Ltn$xe(n5KnoniVC`W^f$#Gu>st-7XCb z3bC+ZNjR!QMHv(bug7$9`k~Li}MN@a)7G%+Rc%k$hVIhZi*F8v3iB zy|a5~mH`Q=kU6qk2guLKb5|H3>h*YUcSKwEdf~Ym9R^?a6_n}s|28w$Y{!^uYaDLI zhyncGZVyX`8>lbv^9`CtlM*AK8JtcM7=yHOLc)O2CC#2`bz*!cjBs-ZeC5vlX;LgQ zbg+dxqP#s*Eb4dB$hY)DqlT9>;7J@_j5Yt!Td+)G*^SVpgKU2fkJPitACnK0edw#W zeiW5+c8~mMX0k9QATeI{Fi~}3Vw?8-1_M9Z(KynGad1Auwn>c{pV@C2*u*m17DfWv z05Jm&NRJ1-{`>%g{ze?*i`L-wZymrP{F>S|jdLqS=OblbY_YH=PQ(>o-W&f@mH`AW z930=g%G={tkumadvP3GRd+v#)8%ArnOV&;muy!nuyZ|%<=rH^9%q{Fd6e2E)FR?@-Eo`@28KXF#oH zz=>oB`SdFH{v~oD86ihVog`B=HF4U`(m$`CDX4PEg(DThsDF`aw>0Kj2|OKOQ=x|_ z2D%z)hC5-J0lvho9UIXgrP*D_)DgfP9DCi)=Y$H<=>y3m)+GuilRb@B~V%n4d#javMqT zNYzM@)JX>qOP=$r;Jza9QHh)`P_T^PThTJpc`aphk%F{Mx)Wt6;#wz5sX@B1R0{3?he6-p#&im zB^ZK|P=-zkNel)g(!mz7p_`sAx9@P~v!}D?HP0)T^}#yTC3+jXO{L6p&QtGRyVm~j z{NMjGu6GGpmhpF4ME-8e{|7+k|C0RieeYb0W9yD-|IrtOe)L@1@|S0pUrNJ7Pst(~ zAyiet^L^$*N&Dp6-}`4D{(lMp;kp21$AZjf?t4!ouy$TG>FxaB&eel&*&QqjNAqZG zyWydvYTMOPX%c5iD5hB`Nn)f4QbEjwwPI6npG5{d`-cCI|NO6S@y3^a?Al{nKd`em ztM?c2qsZC^Q`Co$q}|@p+|m?37E?K~Ofi#1F@uzHH5ST}DyvTH^DIf81)eFRpKAC= zKlH}igxT&-?OodY{+&Z-idy-7wV-|WiAS#PEcDdX_08a+haO5^{pwc>JVh>CxRBj* z&pjDWksR1(7=UNo_}~4&o6fo8%WoL%4S#5V5OhVg{_j0+_}PWS*i=@$m%XelHX6$U z09W&W&H`Exqz?hBt5-6Bix=D3F(94|5OM&XF~i^gZ+@<=C3`_?55xi6jUDxl(a5$EjqdX=WEMUQB@mpkA+wtE;O5Kw~lyrp;#7>-Dnh-+leQ zXA6iNfWNWvcinZD^up7@KaLlZw{?%adMuQFJ4^hJ?>T<=hky8oGQ%ti+Yde%-E-f4 z5g`29uf4TgD2S?tR7q05D2iE}_~O)>h@Q}Bq;Gl4TddOI| z_ZV5jJgaKTox1AXqN?dRAED0n32U(dmRi;;s^hw1wJZywBntv6qLidb z7?Gw<+HB}|+6yPD)|J4v?d{+E_18X7&^w=khaddJCq5q^XW`$X3*-(0`+*8QEs z*N>-Ou~yWzPNQ0UT6C_#3^&GC>&&K*HmT4nMB8FiQ1|Fl)0>lV1C3fAw_kzI568TRmwdLR4J}mv= z-FM#|KQ-+>D*zm){>R?+>bG2Z;_#Pu$Ke+RMf)$;uI~N7_q}N2`!RG^UAgt8Z@%Y) zkN^5RUjNFq73pmm?(LF9d1GTk$`TRXP?$_+XsU`N%Q&9N+R7$Tnj#S)iVBLN(C_!q z6cte^AWJEShkX=P!uLX4#|_4lg(=GV=N^4>{+l29$Y=iiZwi8ZqsIUKhkoIX*yK@P&R#eo0zd%wOqzWjyzu01(=VLz^X&wse@kM4i> zyWd=V^PArt{OGG*^2U?Qeoe0wqe;0KUAX#ce2GlBL zbWJBtB3#EK&N7;fCf(iviln3I0+wmAva*RRCiDkK%q^2|~W-pj}0)D4StJ-7aqKHq!z!#{jH`bdhcUqX{oRyUm6bmX*Xdx@m9rkE7muXb%98HGQuCJv^ z9T5@7GHJEfs5ct`7 zYk&Othqs@xcKG)`@VZyjM*s7ZU;E-CAKW_hjDfGc7T^8I%{PCC3=`RKwe0L!SXi^y zX(yM|bKh|r7oM}p>iP<4=FwSd;do5J)k$ zGb8p*WJO{;pR&Aq8m&-aVa+kE5%o@oYPHCCdW1Qj(5w}Z9s%j zO}oG!eCQt(f-t$&_2WAy1NY_Kee;eW(zfM-@u@h8|KOTgJ$&(tmju@pl`yPG-EP;q zJYBu2k@SmrM*Qe)XO!BS_x58F>MP;kqIN8 z!`@X)XNo|KQ7WJtB@Vh*n9hcT`1rA%Gf37|3QCb?Yw5bKpePc0$v~2zS}7BFE|q!{ z%bqbh8gTmb%?P-xc9tj>3=}P0lco6mKlM|uIQ_I3u(%d{<`1u3i?b|C@{|I+>}4;L z+U>Tmyu2((k|q|yPM45qYIh5)h;y9vJt|AB- z2mLK-l@)@(N3P1GVvHzC)Jkmv-y!rY(kvv7V_e@ShyvQJCF0N{3VjNNGHzy~$vX4d zf;0)Qt3lOh5GWp*E#iANS&~t!m8g~^$+6?_zU`K?KM%a?n<|7ZUVOE1?%cMZX}1ac z+FX`|g80_Ae#CnBJ74!2iQrrm`?#*p`sQgCiwR*IVH8SvB(Lf%biK&d?h`DvmQe~C zzHea^3Y3iszU{EEhqOc)Ap$d)QY|%*6pc(%DQW^$wZwQ9P$-v~j*n>YUKdhsh(4kzfK_+1+GL>o_-}lI}1ifA$6=h@! z#6m!l`lMlsq>41!E4c20xzj^cH8fSnw5B-b6v>DFU=QD0KoTJpWg^dIuX_#C9x?20 z5ho&>C(j_u2@7XT5_v#M=sPr;%PcRqDVB|PM*J%|t8WB=zwE|l(-K_Q7rNa8-=2+c zUQGKhRy76Ba|yx_%kfD3h$IQ|g85oz60`=A^imXwuFH?{z z?Cf3Spnr)}PVuq@1*uLP#rUDmmA!|tojIxD;rJ$-OXu-ymu_#DqNGx(R#9sr{r*)d zl{&htqw6I!MaQz{_^v}iQ*~9B-+0$ug7mbTq2*;;s5%=0RV};s-n&%K@xQfRD^e`! zdGrr_pV4H%O{Z=_6ce@%F0gp<%Jz;QQQYh7tmNeYZ&t0ZkE#u1>qv0G`BLA%} zm#8*$CKDe)%4oI9f6qI-^IL&0+)xbo`qTvgz^-@#Bxw+os+Ed%A&tFl3_e?UA}2vQrzn<45M1KGhD=3m;x9rx1{8`qYwc4MjWXp@ z2N9J@xs0yLnqzyfz0n|;kEHnvSz>qBjpa1$_@2M48xn$~pz9jCrXq?FTD43VMJ&}$ zQ_@OI=ZARif@W)j@u*L=zRbiOFrQD5!y3h`O|7s-r*;#SQW>qRAxSEu-XU?|Fg_ZP z*Zqw$8_Q=<#3EIFg=v3Inu3zZ!w>ZNQ5X4 zl9h_i$x}<;_o5e_T7KF=5QdyQ`Oz>=g%eqpl!k*5SpxmR0N)Sjw3bjZiG?}G93L^Y zx@1yFkOugsm+#1c$aiQII{X{yaC&1yaGM^a)) zf{vI8-}ba!0G7D>?krVQsi{heP%hU<(}WYJ&QdHE7!41}fX($YD27has8iNEq=AG{ zG*A>7H<}aLDH=LwPF`ST^CrB|W9`%?VoAWaU2M~*pj0q}31SwY6%>w=s~lMeG^#7; zT7hwU^y$;>ji-4&;1B>+ zDJ2;aNg@!10b%6j>25X|GII`@1YJtSMqaS=hdV^Gghpi*TNn_>DaCYycKsAWnz0Dx z3+xDpXl6-b$moge(YLy80k$ zxWppt6UPoS>yS#lN=048oR2wo<{YwYFgO}w6e<8k-_Oq9Ko+8>e93Z6{*1{#r1Wup3z--Z{ z*;ye;1p;YI97T-g+oW2C=Q^m0OtsRcUa91Woa`_o(`0vR z3pchoGWVGt9r5_JKV|=Lhv9IKvQg&3nQtSAJtQGxbM-8WBC_6oK7+#p4iBy%q#|40 zCpbLX;imQr5CjoTu42zkl1OHK?G#7mHma&}IJm@Uw$IwqExC)x=r{~8*&%W~_7ATz zpG~Q?mhuc!EjQ5g0tfKZe)jvn5{2HKk}Ojw z)+kkU27`SX%{nLsq7Wj<5`rqQe(E&UQimi_^S1fPov(0u^HvT9*BFfUXjVFTt7}DF zXjCU{Y#A8C$X&wJA<#{dQFTe!@Q zW?b5Ngv8TWX>Cxi)lk(6Q3Oc>s#e4glhF;kK+b}D$iAKtgzGYM!Y|DhRxe5v(nRLs zrHd@J*J(7H$g<3n7ayg!dx&hPAc2@F+;Z+tG_6AH#uSShlYvQQRatAFAaGI|+F4F6 z-I_o3=^t)$`QlfJ6NsXiNS)JKsv>4Ojp|L5j3%zwqqyQSx91!kEU1d-7# zb!NeoC<$1poTpN*P;RtQie(JFOeRJY$`u4bU^2B1Zg3#-R3_ZR-JkeGdhf6N1X}u}&tW?C)RW%!%hvG>p8f z`#e#Lq6>kP94V!SUK)_fYtP zB_j&|`RTkk1<`%{C7|{3T9oo@DjZ3jN(K z>8z2b!N;C>5Hf|%dYc3o&m9z1CXOVMRLF}qH%Kn`X0!e`bwJ`cFzQsGYk}2 zCyWv-D^7G>{qNuOY4I$VEYAja-~C%|9Hj4@E$rBHJUlPLu>vv@ltiN-7ZD{HCDk~$ z{vxv6JucGg9^{X*bVcKV2k%ES3Y zt!vwu<2gs89)1|JHModTC?b_oJlkh|R4zn)}DLrGNBjYQ3&nQjnD@-R>A!mJqXy-cc7nv^aa}Jo6-^QCkJUpjZ`{m?PTD zON4evt6IiM1uF6hBybY>v7@y9e9~dkcRm|3eps#S|E)@jBJHM zvxtx-xNeLnWK3sf9{2=N#q(^UF!1fPRY*m~GmALz+1a~>Ar)y?H?T$_Tm2{4+TJBhQiw%n<0+04psH2s>dkm= zjILLx*4y+C``9B9--hXU%9X2IEEjH}JKV?eY#hsCYwLg{6R;c?NmQ86tz5kz-pXX< zs!|9 z^pB<_qR4DEVKlw2qd8%i5d;Zwn7rq+pM7lfOaqX+!_}+){f_CsJxg_l{YgIksnk08 zu9&8s_wcP|2g_Vglq-zJGekk9U2HHL+awXp7GtjUE+Qc^H%%^YU!qZ~)99>{Njia- zaB}TAbbI?`f{cWM5NA0Ui|K;LpL~SSha?aQ(-c7#NCgqovFY_^pC8TbkL9lWOalP$ z#1l`1RuF$^Gvg$#)5shqJnL@^m|hlb3YjLt$+ULqlXXwt-Lh#=}%uZQ!~BiXl%XXush9c zDG{8NBgO;BH+oe5 zuPcv_A6S0uv7wtJt^d8g?!TrSxBgkrpZ(Kvty+l_k%C@eHZ}1BACL*cgPakWsN=dB zqGXU|3SkIG=9nbRa<_>|(6tid$R&v*!pKFFWu|i*%Sj*;zB*Y1Z(qp@_doEJC*7xW zQ1TlYdHh;D_FV=DPf_vMeff2+Ae~-s*E*|}+uBR@pOD1lm9iKWI_(aMrr_9PG+oY1 zS5;NX(){ogwqqg78kJfV+i_7u5!1AgBpJtvkYt&;X_F=yN2A#=48@Nn@Y~()<-Ofq zLLj@*Gs8lz-}v)WRRYAPtZKf3d`#8jDoGT}1-;d7)oy9D%P(m)iWdsHTGw?ENd{Gs zQ8fiYh)I$hKcXJ?{k^&q1JoK!#yFV2Pt|X_58I32!G-N?+qQoM*nkfNKm;T} z2BgQ>@J%s5I{x|CP9In4*lsI-2^hv-w#uSdloUzVbxBoarJ`zTQxMVW)q+|qYI=qs z3P~1Njz6C-+=(D5J>U0sJA>uK{C{MXZk|ZRM1Wl6!Rgwe{l2jm0k~9bcKM(}`D8f6o(;*N8QNBWU-1r-z bKfwP1Bc+2*)QwL#00000NkvXXu0mjf6p!Qd literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/memo.png b/app/assets/images/emoji/memo.png new file mode 100755 index 0000000000000000000000000000000000000000..fc97ddbc92b0af4590d3d552bd771fd8d011828c GIT binary patch literal 4945 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 P00000NkvXXu0mjf=vHwo literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/mens.png b/app/assets/images/emoji/mens.png new file mode 100755 index 0000000000000000000000000000000000000000..abccfc9f2c6f8f965d2234fc5f96146adea9f821 GIT binary patch literal 3368 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 rY# literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/milky_way.png b/app/assets/images/emoji/milky_way.png new file mode 100755 index 0000000000000000000000000000000000000000..901090a126598a9801c2c41296ae56416cd4ec47 GIT binary patch literal 5878 zcmVX0@uFto$q|}ITpqo0x>3Xm|yk#eN2OJdCQ{e+18 z45I~WEOC0m17Z;86c8AK6@9iC^B6>-fSvOoLX446RSf-r$q55kYcXOdiokqlhsFK@ z_11#dUpwI4ci!T=|LNcJgjIljmIDOvJZVzmT|+2qF4jHH&%jKC;MB9$I^q<;8N`5C zM?WR5-FS^|7&&}+NMYSa(IICfXHv*uAR9|r)y$fPM#ymNTx@kM}a zNF*{)6%8U_#UTcK2zc+<+S{YqzsA)!Ug7V2^$VPyUGS87K%V6Q1BgaK4TuI;Ixv}O z7}e8~At88QFvW<$;JrtkkrGu1937vM4eamlvpQd5QdV$ah&dvUf19%*lqI|SdmJAh zlaj$1r|-cS#0csS5ymm9GjcSf6gA>vJR%M&;H}45kHO)@<4xelZ{KI=BTr%ih%iVx54sIP0`T^3Y?3miA)AnZ(E0 z$2&k0IYG=x7Z~HHz+S!a3P(prwCgpbsJvjsk#a&3Sanq5*3Dbw7||L<^xlZ3F;zXo zU|6o!IA>9~VzC&UF^F{vvMMVjGYKWeSZrg-2yy60W6u;PlqY-v&OuIy$#iE+7#%+4 z%g+KPfe4U6M94`O$!fV|><4v*bq<43@XiO6wKE!xtf?wsL_f1wFbWpI0-~9eQzplR zpoFN;^w!~nCzO?PP%~c;7F)dbxzF*{Z+wl}?iFlNXZ6U*(&B>nr?|yN4VOEq3gcpXRfgaZD^P zmJB(vZhMB~$i=!-OqVGEZCAtCLjtWiGGK5bOw*`7ks2+oK=uw zJ!Ms}UiWO)of4)fpTKOfgLZ(UW5%H)_PvsA5egRDd+c91P|oPuo^m!vyyM>O``mo* zE@>L@E+8q=+X1GG$=Yw(+FB?XF55M$)$;NVP|^_xc>?VQ5Q5X1HKH$L8b{>?0Ox|T zv>4Ioi!DG2&C+)*${|E@vKXhFK-&&{`Ac8q-o5)A9e&8HS+JPTspoTEdG$I`EH`g| zz~l;bPUSLHNVMxnS(Q}PF84lofaFLX2dpn~UOV5SLMIm%FQ=k`66k7CErwjav@ z@+=2DzBJ8qihA#hK&Wce8Aj;)9-kv&2#NmCR&nn6q zt?{bnGoStxFI~Ng#SnbK_VzBjyH}Xc7u02;QhJy&I|qCGqks5KUjN)@skV2?2nM)+ z|B&DRgFnTYOjVcKW@Ac}E--5<>QEsmJ&Ea)wLvQ?Ry4vx-zn=G3|Ob%gCIqT3x$H8 z%@$Z!&@8sNdT@;o?mwcQ?dWp=tPOzCD~QmpI_kPoP0*AT^Vy81swj&BD}og$>zZlI z+&Mg9vtDxJU>lqzA=>+kdO<&otXE6MY2xJQA=V3dj7(#PvF7q6FeL~^^gDwfHjuF@ zQa~`?lMpbFFzjEs$}nbaMg69yscT#abf8(|tGViX5n*S04}D%rEEd~%o3JM9G$%%I z-XUeph*9GGt>69uo3mqr$=c^bQEaA_& z+cQX!P|a`{gpp~OD9b=OpD|{G8(OaJZSl@~_m~x)&GLd_=y?6ppXTuVf-ijGbz+=& z`zLSFZZ0%S`@Ti2Fr{8Q)1`Gl)6D3HL^4@xYwzkVZP&9oJ!cZb8=rZDdbZ%rH{aD4 zH>IKL2Lwx~8bqvilKEl}D^^)sCpzazzM$H@!lLp#dT@fSF-BF8Rnuq*WYzqE^W#%W zLA63vsNiC`ykJc5_kZ(mvRSWn4K@^bgGyv0LL4*kd8F`qy+OPOBY@~EUsMhA#Wt0% z_{pEWMcURhR)df~JSfC#hzHC^YUr;wC+uL(a&wJ`wO^O3m zT{G_*<)}aW!5?yQ@(@QN2gj!C6ns@yN`f&xM+q=S44E_x+WtaO={!EHT7s`2N3xBo z7UMLMF**qXbek6PMiz|U8m$%)&;{bTs{NvmW+S^+N%S7 zJJL-PWl>=eATy2wCJPb*byKrGTahN!52Pd%MTHTsEiyPysgm{~4-YR0fO7@2S;aIQ zEBhxL=jSVYsOZ{AcmG4Grcx)Dl_xmE(Zil;vu5hnm^c!gQ#svrEn^(DTyqcEn9FB? z5r>G;=o1ao6cICFC1A43WGxTDF}M;DxN-eDZ!K?OY+yFuQeE%M8Zc-J4GWw&O6Tw) zkRyy^%kk-kelu}&`~mw{t~2&g+iA1dWqtOL!H)DptK?TV1w%LJT#=I?;=u}OjLdho z*{n7UeXE2VjlFyZ1dD2GK^UiqGag%%2p$oqUUs3x%M3GgY`Qgf?i^9pJ2Yj(VzB_C zc7*xP7Soh)wqUWX<$&PmQ)ad5bZ@Yzx0Lx)g7dR8C9v7z0OKl#A+lNboSmOwtq>%V zgGa~penW~Q?PkON?lxnLjKHuyWz6Z)Iza1PFibHr+gcFnE!uSt7}Ww40f)9aFdpyc z99+M~YCTX|r}b|v*m|3kzONQ#+ueTF4sy{FwQX*X-ev1gbjZoYq;3{+J`MiAuk4j6OPy0f-s zYq3W$-=^C<(slz5lBP98gEa*v7+!w)RqozCr0aTyi0b;XnQ?K^k&LGZHE+H1P|G3# zZ@j+GX5A`jKKSqhe9$d#e9_?iNL30C505D43&s(;^@b^ptok)MO*m_G(o6zbqYXY3 zT-o2{e0f0{`pa`b5Qh`1cE%?^_boUA*}mWenDX-LF0u)DX%@}#HjMiN0! zq$G_B65}*W>cx!HhdtvofG;3TZ0&5*4nj=bM+BYYbZHXQXz11!qJkpEsM%0fbDG5t zW0y#!kg+t)jyj^ODyBGKu-Fh722=n!Yqc(8KVr&l2B~=Cl?Lw@{Er96Op_(&iOp)w z{@xb52M64}b4a^dlMtq^MKwu=P&QnD`5I?OCpux~4Ay2|zVR~e+$Y?8%lE4X^`{NV}AVOpCVFH7KLU-T{H@O_sYJGuffUVnZ8CSRKki4 z;5>vHS2mm;ule$4_xZ|~u99p}ei$bRMZ?|u=iI)1iVHPJP~vl82DX6g*t8Sxy>|y! zEU;1o!Zg9{yQhqO%dlDU;DckFs|c>Xdt9ZfT* zECSwJj@q7P))1!%VoBLjRRLdmhS73*zJV-Z5O9 zld_}l2ePvyS76Bu!vcG~k@F((NA_5~@_n6kmxLff54(8Cc-p_lFkjVpu#@iWa1vLQZ& z=@XG)S#D!(sV_)2^NYXm2EXx*FY-_S*#V4Q@DRgaX0)fR4OdTXRm^3-T06 zRxnbiSTYh2SCiAA_bCmCtwBnx`Gh+{PaY(CDX7X_T)mBC&xiNd{P2(NVg(E-N=N7OyY%XP^?D$Zi3*nN$Z@S1BQCIiu+O814>5Sfbg4FIL&bb+ zm!dwP&xZT=dT!nPDM7rd#8HfTxok>){nuXQ`#(HpbJ0_JLo>4+9Yy+>8BNx6#4b(@ z(?Hkvm|#@TI~-OFBBEqV?r!k@Cccj}jQmt(y zgHtlIW=7lgw5t_Pcb!KVIxVvw|H)ragoceNF7E(a%xSjvxpw_3ckiw!{fu(%IXhkv zF{p+j)g*YarzSro-e$Y}7 z1V9PWg<4y(cNHlob*%TLDnus%F#@(E*#yS$;NB5F7>xMKw?S7gkYa`lfwG>Hh`j#B zHh;E?w3`utX-Kf1boZukmQaW;K8|`wO23*Ea8cE|TkEV*L6waGD}W(pOUjVOj?sHn zpG*_Rmk@ibhzc@2o(nY&Ll$A(M`E=2at=lyNAi>~&LcodD~ziyKMc(lGd4ZE{niDG z*^F_R`17A0(GL-0E$wE)dyg}QaZ0rPq~c>5CZ=Q<8A%o@@ml0;x}+i!mgG>>O4i!xWh^>Vyp7JpcxSSVPQUvSDw(;_$;s zvqOR*r>xI1I?N=*I863PN*E2UU_(uof;jbf7U~$L$GV>C5}C$ z9w|$hdd&u1PBMrsps=K2gGixWfov(N9nce@p4<;0AkLEd5s?XF!*i5Cb{LJQ*F#Fp zC>M0gIvK;TKF8oNIe>tO5Hp(28D)7gS(Tf029ia5qY5!)qk?GYmfXI3jv^bKcHwnk1e+`R2p?L7FX!`pE`cr9I`t4znnk(9_#a; z((HVZo$G%OUu@|-;-ta4=JHDL?Bstl-`>MF6WyxE`iay;R!2YKgLnP|?dlPykG{{| zOW&ZZUeOx1uBL2mP%gdz6c{`pFpMnE|ALbbewQ>}sAyTA-K1|1$>W3pEfKMnaXjMi z?SGB0c5vktnw?)}>)Jfr$CPH|98lc0W=FL>cwZ7@B9@)^ExqIu(^1X z<%2(<-#h}b7>uT>4-2G_rx&H!l*SER|1SN-yL1;nWw!S#%I@v?JFHHA#5Aq3zQM@? zHEJc$oFePf_vqLEmWf^9A79P^m;j90y3pQ=rnfD&zzC3m0#Is3E$af5lOI`cAYlLzhjI0DbOG^*3s`X^Kz@e$DddKqkL9QC zGXN=r=*^@UE_Amc=^&oc}qBg6z^)Vt5xHUBwg zL4NY~nU=C*xO@rx^}qHDx&{96;0!-s%OCr9l&_BxoEpY$qU;p~Q1U>~Uc(LpPcptbA zw9j%t2OI%6fekR{#j+*vKrur1EC-Ch32+NI1xj8l>wq)G_yh<1KP^Hb2W6@WfdBvi M07*qoM6N<$f-#6JP5=M^ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/minibus.png b/app/assets/images/emoji/minibus.png new file mode 100755 index 0000000000000000000000000000000000000000..c52cef23407809763b67a356783b9645bf949456 GIT binary patch literal 3113 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 Dco@5U literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/minidisc.png b/app/assets/images/emoji/minidisc.png new file mode 100755 index 0000000000000000000000000000000000000000..e19cc5d01507966a1112cdf0a4456499cc7141cc GIT binary patch literal 5594 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/money_with_wings.png b/app/assets/images/emoji/money_with_wings.png new file mode 100755 index 0000000000000000000000000000000000000000..135e3981ed1307b19b7c20b00e56d38c5baa8d94 GIT binary patch literal 7586 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 Ef*r9~i~s-t literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/moneybag.png b/app/assets/images/emoji/moneybag.png new file mode 100755 index 0000000000000000000000000000000000000000..5546c04bad46b89e58906261f1d70a88a57832f1 GIT binary patch literal 5500 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/monkey.png b/app/assets/images/emoji/monkey.png new file mode 100755 index 0000000000000000000000000000000000000000..64070359776727df50caf08cb59df7845a46c53a GIT binary patch literal 4973 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/monkey_face.png b/app/assets/images/emoji/monkey_face.png new file mode 100755 index 0000000000000000000000000000000000000000..6964cf4d51ac3f2a67f2162e7a52807993c19b7b GIT binary patch literal 5348 zcmVZ|q5lSBKTE(_0?ra}mVmPan7;}DTQ$wK$E#Q9hW-Xa zH(qC1+IBv<}$0srDM(Fs}Dq z^BT`JEzdS#**Yvkhe7a~mJ^^%h|>gd420bnK{r7sjH7lCf2Erwe>Zh_<$+%-0?yf7 zdAV&`U#OOx%PYQ(l54?rbl8?j;D9Lv0Av99>=}|6NE8VP5Jn^+jL`~WG}{qYTiqW< zN%Wy-4mBQs$>)HbTlzlRS1COO1JGdHn2RkkVIn z(XY-`J@i!^xpt`T%h-)WWsD7$F0YsU$98V6efA|wz?PxXhF5GGd}5^EzhUEG2_t_i(V5i_tEfvC1qE@RS2{!Vxi>O6jQ|a`I#c;N+z#U#Mnw?TtNhN zj`X`29rSnA>fXVvqqPfP61%|miR$b6%ii9hx<}A10a&OgK&}bTF=1IcOx=KKYI)+L z=$clHS2-vHV5Dp_9jTciPE?{yV4G|yrfKlA5~ag{u4|UA2ls6st6n-evwHW7M!@Eg z`u5>|Z!bkWUL|nxv}?g3c-s;HdD1iTtWW#^+cgR@DB!XcN}I6NwG8BdKy``&oq}rE zLUd@o@7UeDY1lpY@O<#hi$Xwu-MWk58S0*RzUnj7JqxaD5V-QXE)ige*D1YLp)Ux? zlw?SC3c(Ywkf0?BY}O+y<~UROaunl9RGQueVC)4a;KFUyOD)Uz9d2biOOEL*h1sr= z0e?(^FZ*U5_MWN03uxQQ!`>{sm=mBC-Y+5m$TR_;5O7K|a*lLLDi-RRA&4^x6%&~d zC#OgNHeRxO_+kaC`#_Ue`fU_+KkPu#<1Aw0A37oC!L!)G=IRL|y&@K!YkhB)vFQKFg8K27r>XAhw4S+EIOU)$HExIy75O$h`9@VYkWe?7|EBIxji2o_CS5p1U<)d(IYi+V3)Dr?p5M$%mC`LC- zFzNIYxP?rXMM|J4jc*}rEu+&~L>7n8O{?caeqYqX36dxPQJ`8MgU=`O*X3B=LbeMVSLLGJo3;(IC^ZAp0$f)>sdCM zomDJ18k{;20*FO05!H{6F=i-54=6)cVG8>E(Uc zd)FN}d}JAhT5`zqKsyXr4maeklwbslV4|Ed35HSpvu-yb_%>Q$6WuVvvE>ECX&_}R z!;Fk3a2*pDTzC;|r^;(O0{&D-Dv{OYGTA^+Zblq+XjB{3;d4-~jVs`iJWqXObU>S+ z9bEj{%TTY{1egFCq)LpFKy0S%3WH!FCc$<}0-`AXX1mknzz$a1D+n3pN0w(*0ucf7 zFyDRNd8pKesrY1X(X&!08El`+_$2PauWvwQa4REX8%p(2o(l!oNlCe87F!{LPKc#oo@=Rz8E%1|W6}FM*^SXx zD`C@?ZDe$v(bDrh2epcaAdI8{sgyiq+DWk>+huiNGi5^hz`6*MF&ry8s7rKG_em6m zVTg^JwqfH?zigM>4#n2lg=fWfVh}9EB-l<#z=Kn(`y0(*-)cKVJ6Oil{3L>?3D>fP z;gkey*th|f>my6nn^PwERy)A8*M9*QUj0d2_5RP$kR?=o@3|tOs285g^Bf~%sY7&8 zr|9M!>$PP0mbhtRoJ7X_tSMV1^e1V%!l1AyObXj+-3&!x@@K~z9VU_{4lW#kW383G z83h;|9N=WxiH1vpb6gW2{KTzzVBZ0}^=;Q+|KuFrd&3uzW~tmWoaQ0da*T|n4$(!O zqMLKbT*U!RGWJVMjDY`j_%mu8kKD}~{1Xv(*AP2H#w}LKai9umen9k_2c(BrW$NXY5ld4b4!OBw2 z*2>WJLmf_d?<14aZ#5gZ@x~i5J9|Vv|M-z9d7^u|2d|Ye07M6MiB14A2j?mV6h!D* z5uwUxodRf37!;N>elPIAO#5)Fn|_PorkpJT4H9mhFg&poE^b}t7FS?86--V};?`Sl z#iNft3cuXP^Q&UzX&;&niHP?zYWZkdB~od{kk&!D*?g&A`|kxwm4gTkP&Jg*lc zDYV@xs}i$RW>Ro!2IlAHU>HB2(lYptCH1@KdBmVeD^G7617~>17>-@1i@IfwY<<#{ z`hWh|aXLpLATO>`z|b_o@Vwp(5r9qX5%f!LMvj|!Zf-~1ukUO`JqSIQr7^Wp; zAw!QOiiXWR=bkYEV--}S4i;@iB`1~Oa-)qWe)bq#*DZ2^+M=$w_+|8ziOH!$SXem5 z8IoX)i6KE0W4OPHzy8SE z5qH~|nVF`?R`Bub-hv(5M$ic(MD*OkQUje%m+LjgN;42)U(WG6xrW!u7>*Sk)FnEp zTg@SJ0Sdg2+386<_{ih1X_Ev|VP}yFV7sY##st_wE8<#`aLiPj3agY%)>fjKxO4Bl zm_G0%N~My7;^ImZZ@uyYeC3PR|r4bW*p>q3fp1IX69p+rNJ|f>_F5QI`sE@58sh^)1}Mnc8Dy$tCLc7d~^UGlwQToxH-^D%mKZ4_o9M|<_?ku-O+B^zUu~Tf062Slf&yRo<-wvrn6h&03 z7!`JNrh#5W@SJAQaLdO6x31--;{>s8@0aV!zAIV&Jy&0fKe_hxXmz?G?8`agR@aEm z6ApXfHHw&SbM1?XPL7akXhQvpxg1;g`yIofG_t>c=vgk6&0|$!ctkUjrRJ8Tv}-s<#c{%;+a?m<;%hMJXs#}D2TTx&eDPe zML-TbqO+9E9g4#6ya_nGk{zEIt$wo|#BcU!xNRDefMmZ$M*If*K&k^!%+u1onvYt2 z5NQ%gR(Clr(*W18INt0%8kfW>0<69EQiKvnoYDA5p77`d6vZ(T>Z(#Fw_GN|K+Rhu zW&y9f&vEk9r<)=O6VPS^LHtdH;TL*6o_5oZw}a@-zGL>@_XE0t{JkC$WNYE5YqFpF zt|ND40s9r-#a;J3fe-)Xt=P0-0K2x1VdHQg2Gnae&xPY!(2&W~8s4vC;dldwW*70Z zr=}&c{_`I`gnG415)zoUEn{Ynwc%JgimgtOBoA<7f{&$!XooRqv)KL%|32XG@#bR_ zBbBcoEJIWW6Z6fQu3*T zdZSve3I$&oFvf_gelrx@j9CAF52zrtIGCYlmL-K^UZe~rtwD0)Jr-E z(6!!Hr4*zZ%q)`-rlI2fD3&!zueNdi`4hPDx@+*6FMb_Wc(7si%Aa&yF4h2%CIUDx zar4dZgIBVd{F-uo6lJ2DbBKQC2MK-lW!-l|dY|AMorpV9)KWJ8(taYN_R)>Q-Wyk2 z+K=e}V#`tM&arjaQWIn}63Q4##J=PT*6}O&{dZjqy`AC9w|*ZcOt`R5o&yd%;-T7=F(N6$Qu9X60UsjYw(dz`~l9ZjiLe& zrjCA?A~p7_&~VAQyYT0?ya(rAFpjy|Wdva)Iz(3(Qg;i1@;1RzIDbr`9X*?rZ7tfU zY<)p~C^@sx{*QJieCJXll*t;cE+-DT<|0n45>SSj*#)dFFQL`ypv5K7?sU*(dvtmc z6Blj7AN}*yc-seFj|=wf!j7?V?Ao#km;Cnmc=spYfpYHPL?Q_iWJtpRx7~R^z0L14 zAW9M`x$_@YNBg6wd)3TBu>V*3Yw=CPRD1EjX?X*Ht7~QqF3< z2c?;munECO5&>b*MW;>aM7<0j;Nks~Xz*N;WyeX@y>Y7j`^ER+TDM${(nznidu0@<&yr327DOk5+`@K*E|ee(lcA&hy@T9zEaDy&8>n z% zetmw=JgSpbI{1lg2avD){n^0ZR~{dSTbMvobA(`UT@RgZgl-p5%0(zOqIwH+nG6nIKMy~X z2KRgnqO5t1K|w_lgNVZF{L&J3&dp(Nb_PPNf1d_$Rg++DYR_S0^8er$E4#+0W-vXy z4cdSXCBQuoU31ath9C-~2rZ$o`tBmW_V{n$k%#U@eXWT>RLp1bumAP~{L$B6#!|fv z_ygwA;fOB(7>*Kf#!7%z0}P;RSIq;)CU+fi$4amGh0096GKJ}>X)rH^Aks9eMhdh$ z0T^=-iU^U?Si4-q4ZF7C)O|mX+Ugp`?|SfsEdJ@Azk|;{^&(oS47@@PELi_O=DG-0 zo6u1QZs=UW006%_Gr#?imn;9HTd2;Am8+PZnSo;l+l|3TN}?5m7eYV^iDn?+Hk)|v z*@wWmgRs?Ir`Pv9oH?_I-+Jz^(J7TttrX#6Fge^uV>t&UeWZ#7U|>SkTW^4Lb#`Am zSNXP^ug+zQ6PVsMgH&b=?NGtt9;61EtpLy(LMucE_g%dDFaLq|`xoFjF1px&C z#&)L*I||?8#p+QnH;#(Q_T%LVbcKYb2FLZ#XtohaX1cU>$kzJqKwhvN8zMQe#A=(o@SD5-C>Rr-@G zV8|C!=tu|eoLfdHlmYLc+X)faa;G7p2wEuUNC537o_Y9weDT!XSXpa=bKV2sI5rf* zFhsZ8rDSQqI5=?Q9D&)W#kGBaj|PgxA|@xRP)c5%9B}mGpLqPp{sUhaD^Hw940y`7 zpaBOx>L0jP5gN@-G8md=3pfaZ1T+C6PQrmWd2Qf=C&5GOi?`l-3*+PCs8*{36RXxE zHbQsadFO3=_wN160|yQqG^;vf^95+e(GDWWwH6w!?glP8c;Gb1#CaOe3KrMhxP#?Gicygae zrPMIsiTc3PxTKW-_cD0TJ@-6!toV8ssR%4&l~W+y>H(>Oixc!Y+3NxY&MyB;&m2YcfA3S{@F%fybqJF z2pn;8twwKz>@Loq96EF;0Z%iZfF~DA+&&rX@H;vEK>OU4o{d7uc!*;fEeG6j#~r_W z`0(K`&(F_Oyi;AZF`r7Ml2|9}CKg^dTcZFO9eBS%siKfEg|KCCXai8GJ7F^YAMf0` z)6RGNLq@mabU? z&^S+@K8>lVsi8xF;`>X}(~}G76bE-D92P>$7L$;uAek8@lOhk0;02j?C*-P;b(?XB2`pljU#NjJ9JG!maPo!>8+)!u%y z;4v+M56^SqSwnDZ0M}t)#EckVpnv|q8=&71B>;zg-~YLCW!o2X#hrT{o`ZHWpi;@X z5659}?0e%KA7aFE5HXDnDfw*ApjXt_dpal==qstW1{k(S&*#fGzA(A{7auH6@8`MF zEYjHu7|TF}fQSS{AR$Q#0WBr88Z-orpAG3g1Mt^gd+i|reZ@WL@!Rb-R#sN9w6sL5 z>7@1Mn{STJpFjV@pz-~aVWBwdS0|CpbNHz|l<*LCHSDf$7(tRD;)Te7RJ+jthiEGk zZ7kN%)4_VKGk7_?W5;H+hl@h#6 z1}^sv7r=c7N&?z3k{TFA5EP)C5j{W;J-cj(&+`{weDNm+q_32so!Dv4d6U@OlL4j; z@MaK(%~rFCwY9bBAPAaK6d4ZCt)HK~tP7r>&O>V-sVoC@CN6>GMG{g9s7OIW#Bi=5 z(f~KE{a41Ve;~SDynOofOV`cMzxuITZh56E1YUpr^_TYS+4HK|33`RR!Gz08)0300 zZr`)#6$*{zOaJ|+tqb3u;_2C{h&(5qli>b1wDciD4H1Nhg2?6rt<|-KKG}qMrZV;#s_X<_zBb$vf)(OXE(abPQvq zd3dP_faPreFGFQGf)Ek3pfI}TEKuWSXIB&8L77R@y;4x|o|=-9g;9jHMg!xear-<7 zI!-&dfB@%_E6gHO(BM7?Lk3a+B8U)nBgilW+1DE38ZrdmFta)i-1w{wo(FE2u0<4~ zUawP?pxl6W&z(Vixd`UaqNW3vX90NetVdAVuq}z#jsa{Hpwc!hNvR;Dz*shGH%Q0F z%P6ia;^NX92)nDuXQaPyRkvz?Tb6tS{% zC#JS-L$y-D;^bLex_AL=jWq;84H^zym&5n%);SnUc9L}L05-RffK;;Y5XGfM7PZ$# zI*j$TwOaQx=r6&`66y4QduacX7wlDXSOWI-7haHz-n{`4fPU&7Xi^SXsnt+hS+RMc z8wAiw*_C6;_hHsh@xsX=c(DYORMi;34ghpAM$PGCzIqy;BC*?L1bjV(|3R?%lh;3V>Q?TP~v@ zpoB*#l7mSaPy(D1=k4abr#z1nSZge4I10n|WVQN?pH8m8mno6TK~wY8_{ zdx%tQpfC*S^y;g{V)3Vg&IL)e)=seL#n5fH-S!RB0zXEFBc!mg*1&~}7jgFN+3%Tt z;24IWqeqXPnwp&a+nJde>!Qt8%l@kKy~V|qH{X1-s%_VVO^)l9{rOz^&7C`T!1Fyj z3AI`ci;HI|FCBRM?YDn~4Eco9R;!otD)Cr{pm#~ynW&p!1u z9((jr+<)JFIDF_3rYn^^h_=E2UdpqlEaiy_R4P>z3nipeDO=`-rL^bS*CW&kL}-JmUhHpaD9BUNi@lbN(}FN7dT zx<_o4BiMv!dy{wpHiRyY&63kQbBE(3Wd@^=8<#03))&hW^?6oDkDWeUTjc?i-D$au zcKqX|PPc;~3~fJ<&~Ul}v`J53WZUR6Qbf@Ry4nZ>tBb}*Nzlqj2!MF24B)z+t>xS` z?0InQnt+43!{-27-wj(mob++n#>eFto~#bI9=Ccu&j;sJdflzg0ZG%L!E}#DrbG`E zdM%0`U6%q}7GGPTw>AW%mI#GFBqGZqGAt#ahYtZtph8H5QHUray`f!PDIrHnf`Z0n zbr~5(HpFa;jV%lTB@~1OE+OfQWMqLzsW2>2mX<<5L?Rx%fD{r^s}XVltT7|Qq${47 zxWa6)2iPx)tOr<23nid5M)ZILxScV3uavfHiQ!1t&eZCNgq1S(fGrIH5lPC_l)a4% z?Sdx?34j=W)>MR$DnZaeXmkbLfbQ+A4NF20lddj;Fo2b@LATTZVHDUB(`vU2chG9K ztP#WraT|3bw7VTNo2094WD{L;FN7GWq_#Uk5*v(=`ONY9D4t`TyX3zt*rN=g`& zE?TlWqm@DX%TV4cgD!_NYGdUZUEBe8TqE6N<+;U;kc_OWcG_JdJJbwO79TAHWJIn{ z4G_63>9XM^^*U{WP;Rlh)d;!-v50Iw`Cw_u z{x-1F4WN|V+QpC*!X;O|c=3`gU8}2g3xa|1p$Dy$LoUCvyaF&7U8`h(k^UE(Qi{>+ z*XwKK{#IAJ)wU&-Yt6RG00g$NY^I+)!OmKzV-HU?P{VLUU_14-wc6tQXCZ|o51_*q z0<-G6uEyqx7Cup<(X1_^jaCzldV`)L0yd0+{{_=!so3=F7yJMK002ovPDHLk FV1i;>F=+q* literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/moon.png b/app/assets/images/emoji/moon.png new file mode 100755 index 0000000000000000000000000000000000000000..afdb450d1dff9e742955efbb03bef606e1aaba16 GIT binary patch literal 3541 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 FV1igfSDgR= literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/mountain_cableway.png b/app/assets/images/emoji/mountain_cableway.png new file mode 100755 index 0000000000000000000000000000000000000000..5688bb239a7411950c9cf0a06c6f7efe3374f2dd GIT binary patch literal 4405 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/mountain_railway.png b/app/assets/images/emoji/mountain_railway.png new file mode 100755 index 0000000000000000000000000000000000000000..1f3d1aab56c9af7ffe317c068161571dd28c1458 GIT binary patch literal 7448 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 W-+&#wEpAT$0000GgYGPHz<3 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/mouse2.png b/app/assets/images/emoji/mouse2.png new file mode 100755 index 0000000000000000000000000000000000000000..2d777e5e1ac5c9cdf8cb01f53a26112e19d2315a GIT binary patch literal 4087 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/movie_camera.png b/app/assets/images/emoji/movie_camera.png new file mode 100755 index 0000000000000000000000000000000000000000..9c1438409255b3f5211e6c14bf09af71e59743b0 GIT binary patch literal 4081 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/moyai.png b/app/assets/images/emoji/moyai.png new file mode 100755 index 0000000000000000000000000000000000000000..61a1a9c21a4246898e00359ff05123f2ad9f0ebe GIT binary patch literal 2166 zcmV-+2#NQJP)z0SKe=~TiF=9{z~X1ePERt42?+s9jG=?U3LPqR1apdF1?*@{e13!}rkS8bL_mO{t6hV^!zUmjcJI7> z1*f3;(c1PhhIKkvx@4pnYHXpQ{ik?j7<^ZlW~xvDCRq5$OPmMo*a*2k#WcB*d2%-J zR24>xTA@BrYF^xPg|ulr0+{ruX z(W1=;9a1iHhF_CQQV8T&u!Rb+?cUdWY~XVfCF;DF!=$PNpBhcJ6O-T(k&%(pUunTs zyz$lE3tbl34s=;%Kf9Tr$xaUN4vw;yAv_?}(?YM{F0d=Z56?Y#6IKG+lsUo*F(qo0 zXb_;>i(b!8!2*mqeq@m3RpTm|L_#!l*w6V4UZBr z86If&o-02K*L+~LFae88(~mUEBSeI(ipHl*EUHlM2R=EF$&wWXXcg3k`{pMen;V&C zjF>f9kEelyeBXD*n=AhrNI-_gTqz_1ho8h%I8_-Z@`9%DwESU*v}qv0z#|;4FQ=u8D3$W zEvzY7-L;kV0R*%^+5K3!9Qlx{tP+uqQ3Vo8qIQQe*>0pRc$^kH8A5O0Km`89-LQF( zQ^6^AsQ8#<8?%fusu2W%5)e8Oxgzu|Pw}$SRKk1qPY10X$cSD(%USb4^GN+WGviyC zrJ-gF@kwR8*P2oD55rb&<}a)$YMU)<3vfc)z4hD-;|x^o8e^(Qb39 zY~ujaDmh<-s6o+u(2OL<3Sd_X5%Aj6+*+BaFv@OrF-lqO2atpFKClj=2UHuyq+sbq^a2qFBV1!sCGGLWj?xLW^BSDi;@K*{EV4~{$P7X0jSAkA2x|Yj|ukK5Lj0QeEF7OKHX;Wbv`xqsb zF=rU1A=9Ur4I*Mj^cYlBTz&>C%*6xmfT%|^x8sltd z7gN;a1PHnVY2|M3F|H5Fg-VM1Uv*3_}VBFz6At5CrFQNwgTt!DlqVRhnR2o#0;3GLA2Lt#{07axAd!_r= z&fZPh_;4)>5`ZKmjyA<7laLOZbVx{|0t7tQJ@8QLD-q}nR3>zerzqfz$O*{xH*H$1 zu}+876w(F1``Up+-klj;>Z*j8fD8y-6d>1!>5jqOPJ@ zEY!+d$}_=msqV)?WIWG!Cd;ig)@E5R*-Y26R&uHL_s)yyW!6|_oeeho=#scIy+(u+ zVXb|A1e^%T@CbyEh*&7O6%!HZoqWk{J*6io^|+^KQ=BOvase%z0IshC1A^lG&jDHj sR?F3*06C6I;JW+^{{vrM|Gx|P2g@mU0MU|}JOBUy07*qoM6N<$f@v_}Q2+n{ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/muscle.png b/app/assets/images/emoji/muscle.png new file mode 100755 index 0000000000000000000000000000000000000000..19f92efb66e8220e0d461e670898203084ef0c89 GIT binary patch literal 4672 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 JPDHLkV1mN(J6He! literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/musical_keyboard.png b/app/assets/images/emoji/musical_keyboard.png new file mode 100755 index 0000000000000000000000000000000000000000..93647a4a32d9f967020c63e11c80380311c825e4 GIT binary patch literal 1944 zcmV;J2WR++P)TnkR-5= z?5k?>4m4bVgroqHLi8kv7fZ0Oir~as1tE%3DA9|sAoQgUz*dy@44@Yg2D-Ep13*N8 zw2+0i-`+GU@jM~mI!5}DtxoVf zMFY`QY9rd%XeStG!4g)Q2N9Qu4Eb&6cob4r1`rs7UKMu2Npgc+TUiDWn(TvRIT#)u zMH1H5m}?GzB*NHxlSsn)`U?=XV1nNcFg893VcCi4U$3tNpo|g#aOTVmrlzKhC%L@5 zjGH$XaQN_tXtlI4maqYmc=F^=eEG$BB;m@Hd7La9^WVtHt($FaSey%{`*oY@prtAxUbR{Ay&=!Gi}`44En6 z`vDla0^oU7jE|2S)9K~QmjD5Q?{_4K)xT}C*q9ifKnj@0vSp8v#^wJz3UAPl>j;?}3xImf zwwd@+3ic^~09cU_(P zU_G2}X&_SE_#TjtOOj%IwuLCN&B&KBI@Dr4fSq@?&H{Rm5Fbb^0+GHa-3emZyqA;9 z%O<|o%VH|IVm-jN9Ue;!#^@R)kg`U-R;R$+Y$u2ejvB0FcfA zb2N2|vVJl+z{>KRA|Zxc*`w;%tXtcikkyKmISF>_*kMv)1{hpm$*f~D7e%-x-O4s2 zpM7DUsMs7Jl1o5GK7O6E2dE6zD9mLs+Gge#=>fWyQkx)k|HN&}*#iIrH)jvf+BFxt zfhP9=yU-w{#AJjy6UlH-(JIL1rs+oRvjy@VGpTX)~(N; z;#{peX%H$p3JWHh`a@bT${J^Ph6`f`B-%_w#RH&La{$aXkmeWkzc`o7%{z&oxGzj9 zdKYBMfZ|Yt9D$OiyX;XIv}G?R*{GYaJqWzp*#2XXpi%fyw!>V)4nGDN#XE69J_~l2 z-!Fjz?*)_;8pcS^5ZfIDvj-uQ?livkXJ<2@TCH|uP>bhvRu6el>2N(ybNQP0^6B+h zS6p|6xw}{b9L5&<8?rOU@1jfYKg=`Wsw<5PM2- zq7a&!mOU0ilw8EXdugMrevbk;4#f;-TP$T;+GCLT#lOseLx&FG+_`gj_UsuH_&dV; z_wVE6$&d+P`aY;1Qljx zPO)wOeF?Ck?8MtxT3W){vu80sKac(U_ahA#FJ6qKUa#Zo)vI94&CNwkH4CRtpT@Cc z$5M3l=YXBc0CO#;+`B!_?(6Djz|IGtAAo)U`b|&>q1GaeiDkER^)sL!fPMh_0q6&y z=vQMbMaR=3oZ`IVx-y>_ajk5We$4Pv*r=RP#_y&s_Kk^&0U(e?j$=pf)uoik3*Yzo z{z9BE3}ccLN)PKS#9^P9vFA;-sK<7&BfynQ&`uvYu7M4JDV$e_#-s-Y0w+OtMx`h z{{p4{#Yq>yf$@o{@1~~S|IBsm>c&QkHKHeAS<$CQfsfkLrKfkEFFpMlz+Xh;_;Nz#0(+Isp0+BLM8_(O;e>06u`0 ea$X1E9mYRNhJc_dsMl!#0000Y literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/musical_note.png b/app/assets/images/emoji/musical_note.png new file mode 100755 index 0000000000000000000000000000000000000000..68b261bcba6db5a4f20de1ba33f1d8dd95b3ab33 GIT binary patch literal 3188 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¬PqV-m8;bWT+uuR@JIw`vBPW9nFS!AST1m}dgZ3qXr6kg z0_@8@w|!s#@Mi9Vo^aRNwp1&)9@pI&F4aokpDLa!JQM-m9em;S1Iu12FKX@kYEgUN z(f3#E9NpdZpE&o(j)9G>3!>f2W3d>j)L^_e#hj=g!Q^mxG-{x%So! zVJkwdUV);qxEL$E1?=MYk!2f$+?D*)hUFVi{ zKfY&ZXf^3<7AG3Tibl}dqgI;1^F1`inSVSh_x#iEEZKVK?Il}({$Ky_F76@~YI~+5 z-2qjP@yaCE8nq+*4g3Cm`H@XM9i7MfGefs79*#N~fDd@(3YB~TAqB#3P!a0uyPq@M zYvX*LP4xUX8EwO`OlE4cU+f*&-1Xt;v5)_<|Hg{&@cM15Vl6S6Q#CHSSEQ@F6AwJV z{-Ke**<|*>AHAD-j3sAv_J38k?%w;p-QL$(yAOsDzA+{ODW6$F5>ArjId%bT`RdQ=E|ILj3 zNN?AFrT2NxInOz#T6bk}hmq-N3MCa36-9x>baC7LY$tak7d;9e{ABaqCcg;YzxnES zP1Y7ZIy=6|@W=!j8ouunMIlYG|5o5~0Vr=xt<2OW*K36`t!|Siyz@W)_U?Z@`kV^z zfz4NcVR>}@x0jbU7#y3RP*kCyKtUzYZQO$%Q54}tKK;n!Hi~=m*q~|-|`PkmKzV&l$a{ZMrTo_pT=HldP zadLi%O6nIt630ZYi>3DnMTkKBJI}ySY4qmF>1m`J@uYJRGYqr(e@+DWz{ab8v^u$c zLt}Y^`rrVnrXW-Wr2u}UH#1YGk0+rKDhlGf3i5T^!}xVO-81s zD3ppw1was+9&V>cl!SPRPavW%@eGutax+3;nkHx5^XEihKJ=Uj@TZMe{bXZ)^Y~n2 zjY_SSr+i8t1;1nCcWs17h~gN>iD=nf9x0xF^F8vBkR1HY@i%;VaeU)7i;Ei!j1Hp~ z6=d!k_-zxXotkEV6FL~7^V5&--G7?P@a}~>PtMi`k3aD3uOhVqKe6}z?VATbcAixM z{^B*qO5)7?skxzz&8PAXODbg4Z?Ela+uMdUX9Rdf>mE%kZAT+orasXTP|!bZb2c zL(UvLgreI&1$fp3_}m}dd31Gb@qs7xq0!0ZIm(q9DhZ0zkV4{i3}V|yAc?~W#|h}^ zCg$ePn4Fg=oyH2l+;zWyVQyw_VPc^{xmrb0mCQF#z;7A&9fL3}o6w`@c4>L$J%6`< z@BNqW{(s$g=_ghfZag}*yoSEJ&p>628L>C>tO@Xici#1D%bSb;PzV$*X$q>MfshEP zLM-vxeS{Z+0#TgcS^<5_AUyFT)5i*Q%{qm1h3h|i@_lFL7grXh=4Vh#C8R1rRRM|L zH1YZtiAV?oAKSI)Smw_@bn#z*^XH;JamTMLjxN7)YI>2#@(6sJAa)59*?U$5_|n~X zy>ESI{R55VHDuA_%;GLa(`IaP3=t>zT?-M!NK(T~aEu5u>A~&0Ol%bKeGRAMvfMs- z!_2}Aqq9>e#UiRAQPctgiPtoV3uHM6o zTsmHlAP9eO%?0@K-7o#*+RpZy7Z%qT7#Sxih8+99Hb4A`L1(u|tx`mZ5~QjS1_Img z@rT>g?&wjUtK*t6mSHmS*d{Xr%M8tpQ_u=XDG;&%semmjFC8gU5}1ZZ({8gje+FCY ztN|Cv!3&iaYOmXzy0KmzA_{yw-$D1<9607f4_oqw*HnP7zWe20+&q5dw`LZWsSOUJ zY9-V{m6e-UaNqC*k9~fhN>Zm>FA_%(sUGTfkMY|gD)kY19UrwQSSZcW?hi3=vW_NI zWE`WY8VNB$+aUHLKp_l6EW@Mac2RD)z_Fo0x=rO4;IRI08&{`?s*__{sf_R1m|l-v z{V6)W`=L|vRCLV*_{aDDpRcVR-G0?QHjyY3M=GWn(QLMv92?^3(Jh8X zM=0(b@YCT-82bjLl@e+g6Z9QK6eCp#!w948IAq7oy0`M>LUOjKJt5S zn|c1bJ~kxK%C!Mp&!A~M#o69ov*`qHx?jrpss;G`J6`hI#m&VpEv&CGHa3M;tD|Z~ zBpN7WH7XGhDkO?Ph!VxZIF)jR&~`EO9tW)sjhRU{H`f>%8KqRNpw3RP_KGf#eY%BK z(I|=p5{U$SFT&7$SZ%TJ;*iOiIb;C6po@{{6!j_VQ`f!spVyYxUs0)62oLrNqZq?% za;~?_MW^?sd)x;v0$h~TTz076 zZqm5D!eDKlI7qO)K0UXC*qw>iqmy5oIkuoNsL*}nG=(5WclLR_zspZTL)fNuAHWq0 z@Ts@_^7Q0n?YrA2j;v42%u%inQz&K^&&f-WLS)ah?qVTG!YEr&9oNM$Et;(!hGDS2 z+F)~Sh3eoCTKW#DAVrdiP_IsN{p$on%e!2Bz#{6a)RsfWu9u7~Oj4pw;QAO|kAAO5 z^l*b^>u7Q6#3Y8_ zi8SR0QPm=-YG!yy5KN$BuK~W?C zA`uh{Md|~yY~5aE{`x+?=YmoIQ6%&Qj%{N2UAmWS3a8eXFK;n%!zhU=a9bwY+!(Hm zY4^HR%EPRCMLJRc(*Rc_z~|n6*WHWDQy*@uZZJ4HL9vq7yMhFS1Y}NH2#`ran51bR z;&?uu?b6i^TAdC<^$Od^HyEFo%EsD4YL*3wA|+CiLrUUA0HCP@)GH+lc$o;c>tdM( zUB82QKBD^Y5$2~>8Cf4jML~@c8ta>k88+6%CbQK69BFVqK8NKwAHO02KL7R?|G(9> zxwptWgs z%~luR57=62&{$reRv*mBlcqc%A$tlbbMm=qW@JJ?zz=*}*UrcrhDFC|V*N~I;`A}* zx0V=~9YD!SkL(#)F7{rZAn*xXo37dBe1GrZKfiF#^;{ve$+?+sxi&a1RSgvdndJPX z6y)RuB961+#Lw#8MK^QuMHQ|)y213!G?nTAnx>_Gk*B-@?pHa3slFd$RI%|3Mdem9>IY@9E3zcfMt7Jw40m~XI{ZoK&zCh zP*4DI7%7<~8TtIeg79glw;g(hMXS|id}NTVjWtHcN3&J9P$-Z=2qb_cgOn1HB;?)^ z5vA{PyxcfVGb^8_-X+lmLqFbRdS#00NEs2v2o)5iKxlb{ZId{TiQ)*`a%npq&QG64 zDxFPW?}`OLQIUy2C=yAQ>j;#bd=wExF`n;big)`uecfbnW`gzA)H8-Cmn)#;^8u3l zC^>N?dCI33&y3T@bNr0FX_~YJ`!tBDP>(K6W@w|ZTl?IK) z2DSPCTDh2~JTfnx9EY<4S-nf5B+gRa^HZ~P(G7!kw@a(tV|{s%qbHYm^h^gmju2sz zcOan>Sq_omAr-Rdo4QZeZBw}U0-Nh~%w6bUSGfvku@DsE7%6kbV-b@GiJ#V}?_yal z`|Vz~ub093qRn6o>wiMJ>$8d)T&xX;@rpcF;|OV_WO&9ND2d zpfUe^mrLI^u=Ozphw6luPh`8Pz?pz%-^Wzi)L(SK-1ZRCOgM1*_>nlcIst+R6pchG zNC~MRevoA3`?^K5(_^?^|4grZw2*QXc$lF{Vd6WHv z7MA03!-*Z%*4Fb(Dr(Ffn_%j;KD*!BXL5doLK0`>LtkL%9?4vbxw~v8=EqT7LCb8> zv)nXGe|U8QBoT2`APEEll^~YcfYZ}Wx;=yW=?S*iSE-MTP%f8H(t1ZA#bL+~MG!JG z&n#UgNtE-i9PQKpaRJh0P_g#u=1yzN( z>`}W}XZiLbqrO0q`ec(|5@-Z5ymO$xCs8Zo zVXWW=l8$bH3P(3qnVXxGegK{(F3BSwX3@|6!^1Xh+I^j7yUWnx%aJ#Y{2gIv;0HEw6ho+FTcPJ#xVnzs>9K#l#iLKPS|9n3N2j?;Xs&JJ zCkb|_(6MYrh6XrsWQ*~v-pdqJ6(u7ILW)BHI81qgOhjg$VHo3i9dD$0!yn`Bxt#Bu__OHtZW}7%l zvZ${tFHx;lvu^^RA~VAk&nTaKUPz)S+czTLC-7Z-*Ur-3HBI!k&hCNErM~r^&;H=- zkGKXXTt7emhh`Ynj<3#g{KOW6BV+k+gUpUd#Nh=+l8>|biL<94=3}knc$lV5S2x++ zJD^-Fa?6b;X*3on*J>GgRZ(-&2)HcjBFTx1Firn}(95?&-$|oyVVNdo*I;kI&)IhO zUq1Q$v+v{@LF@ZIcb?o}b7!5}z#v+w2yhtjlyvqKhbL=saTsUEk9=Gw6~LjRo7rSH zKRwBf*B@m#6|<6Vh6PB;!eu2SNiyn)XSQr+prIFN?gFroL%o^ews_owF^Swr*Z`&m%4SnhQ{?4P;Rl zNtlnd3YkfXY$MEx$5BdN5Qjc~5MX-|uH|J8zuWFnDrnq(({Yv-8)%gxnyO^NiG;(M zA#->sL8K9n^OKSf0>U6CpGV%yYTxWxbov(OTRKh0y7``mchB%FKvR&!iI0>Cq*)-z zPZDLd8O8Yzje_9msQdXwrrTWT_L&_S;m+HRGC4JcR#Z_Dh{z{*cyj;9SK|DLm?(;f zQ^QMBJ|iFCyD4!GFZ-nK(AF(3bPbx8bHmpk-g}5=30fj4%fLqxX0vx9Kx9#h$jRrQ ztvolvv;z#oXJ5D3GfZ}7r@7@P)(k2RsXHM_c`~yc{AmI>>zX)8!atlA|Oz;rc}{bG_|n^iP03qwjr3>@TY{Pc4h(y zQRG8w^qc)ajj{TniLo@=L}OyZ7yZ<#)mGEdwwhEC3h&)>_TFoG*E)A)c5dd)dvBN- zNMuh|_TRPl`u+A=>zsS<8xj%xe=gxnlwK#`bpl=|;B^B2kK+tW z`M?cF%RM(7J7fKOu6sP+bKP@l%Xuf@vUJfg9_r1t)O%mPvULKNM9z0Y1 zIf9pGWEDx3~24}t~a{VCoSR(2NIhPF{%SOcB_4Q0W+iV!? z18UQGA>iBZ`QClC@F(-Yq2_|TwUD`d=)1RGaS3)=Ui|4RFD`?8D8E#pQn&W5uV?11 ziZT}DL4w+(wqcJY?Ny=s?%G2m>X86|C_sq8z~#jKT?c^Q*;VY8?rzEDauTt=5M55x z--TW3kHe&IHb_7v27n_SuRR3d_&M`{|GeqYHF>NLmyy94AO!FxP=<<9>V02*$7Khw zL(w(k$oJ_UbrjS=Okc-#t6z%TSBL600Gk!%r3$s}zkc*h*Pb&1GV^13;B_7uLJ2v} z017B`M&88X^U=&zeTAFgwO$kGP%C`B+VY#ZkM z#5p10>qid0d(8E{H8ZFZB=rCYl>(4~u`tRYANlLUw1#bp&W!_qBxiwCLG5SY6d_qK zstmlNzMhc_LkhqtnGM_}knWcmx$w_^{mA#c_pB1|weP1{F7@$J04VsbN2vid2MBcl z5o%@RTCYAhyYzk7rs&+5`Dz6$A)-h^l@36JjEtf1j`}&*g+4=~>PB#hD3pNEfeMrW zl#Js_)>$K9t6X$f9&nu$L8Lg{eg!x)SO^jlFbeXZH;McIj;O;*(J`GXMJCUQJy>%9 zYdZl&IQ_Go=Z5h1tT0kiG{-LSdjR zY*yP}F#%owhP$NV`$Pmt5!6K+XO>Bs4IYpZNP>-X!2`#Md~axbSd8f$fgrOUQ3AX~ zU79-A$8ZY$aYY|QfJ`>92#5&Occ6~IMZgQ2)%I6Jz+Vt;%5o)8?9Ejnu)@nm z08IpdP_iIb`LTChym6}o&~{mj+3m$(gozjc6NS<0ms9BHMxP}iFrBnPpkf44?93xd z1=M!MaK;352lm}LGTsabWR^hD4PV;MQ_T>YqZDn!Qh)+_zyWAm$A|$+JwVeia245|9gS z{rrU+KlJAt8#id%qC`RV2@Ha$h?sz=)dz2ZqOX5)71}ygx5ZM_~)53=qAA03;&BSqJnTLL^rM`xbs1X=i;3tNP;oB@+ZOFNnY{3DzKf6Bx}@He5YsT}E2iBL z@Vi8Z_aogz04OC$Bv{0g04j1y{5Ht6Y!J|5wBh9(D+m$D+17VAA~9Qurq|^VgTZIi z8x`BHiTv9R9uRK{pnahuq+U0O02v*2xCnMAigt!%uca&ipP!w&|X0eVJ?}g5`}66H);p$glzU^tJ>XC+gpb z?#8GSX-Yg3^d)d%y!HzqCStZz7trksh?~G1xKS}46&X)SKmiVIL9V(40UMpzvAsbj1UZv zindL(Ff+QYv+)?C_N{K8)6DET)+ZtxYx|{?c2BK*&d02ub5=b)!*p=)a%`50rJ~tx z#4JC$Pn7WCZF4|GxGHKL34;J5GkO4w;2vNHdFlJ!!K*O_w$|#P-1wFpC&UR{1#S8O z9GstNdLm-;uBW9v$L5G2OPg6L=D9)wfz}e@d_+Pxv@HRE91I|E3=k0Jm4UHh|5}7_ z@I%xf1GBlg>4v$n4$gr(Ae}c*?OG!8wJji@)3(*F>m;ob+j>x8nFy>En?pe+fyCuw zafxwT0tmPOAZv&!Dgdr{IS-h19l97W41Mtg0`zuUyQGwSKcBO{ zmvJ1ecCYib491WPa;er9zyygrw_b2M0+J+xkOBvU1x!;Y%{gPFfb~+`J^gUMZ8h4# zw6|~G;=tTPS`TpX826A^)p6iXh_7?6)Ur7rm-_)M69zC0)AUT>bUFeCAXqDqn6gBM zuvvwQYT${ey;W@+c=w7n9NJKDk8t2^?I0b9lj2_E=eeGbd1Cck!Ie+ygC`8+&&e=h zY)V+^JTGx_nan_z$rFmW*bOLfXWfm^&`@zBecW$N+ghu*uC}!{Js< zc?V|ed=C-vFj{@&x!9bKw|Z?(@Ep*7QCmq+AYfr@bDZ)(Ep*~EAs}C4089Za3RVz0 zK`r9G0&bGqO3W%aCr9JHeY}~trx20v;bG$ho$8%INp0QUbXzi7LWGwDumyl&&>;aEmVO7ZBHDyF%HnBeOXB+mnW^;@%DBNYzx%G!~3ll z^g8BV!~(GkC94&iV%(O1{{gC5is5e5ExLsLA`0M9fX1Mn?e&RO&Ita zq7&FY)7yk-vF-iUFlfEP^MRA&I+?6(VVsxlZ+VQ2m~SdZG$kH8b_`yA>e#XTrQ?s? z9Q$yse-aElWk*_q9e&~`{Z{-@ew#3@PJj6Y z2!NtGRV;^<0A!sX>a#~{{-e`=A5b!XuB&oqO+XZ&LO=z8FanX^;3?hK3`o-k!r-I0JNMP7Jnw*E}5{BTX0sR=Nwf+*9WZn%4b1NGvs%AWn38*?&N#euYmvjyx# zIZ&%tNw9gH!$KmV5>0L0x5zV!ZCAex)p7oNrSSh2VPlX*rWg`)Wq$#2*Y=knZF^j* z`1tCawpBFY`C4zgD{EiFLdEobKi72~W_Fu&-fS!ingAxCR6)-51;w=MpT-^*IZj7_G1%HjYNytci+YJA&Q0N!uOXo0lk_<%~}% zrak>Mwl$wW6+*Z@#PHVGMOY~esTE@>{vy*p>U6Bl5&ovwj{76bYX#7bdk!$2)#L}D z4GF8;yg^zAGO0n&F33aqN5!(|-v*D0y!d3-eK-dC0tJd)43HFX@l#JCfIwuxO@HESM#l{yVZ8rJEIVAx#ifg@rxh-_@70Dn~3NzQUIk00Zgg@fu}aC zrgH1QtvK-GjdWWD*%E<#pseiH!BDgiEc z5XI~Jwd37-dZb(HgT3pTz||WKXo7&@znB1_izYxo6*lmB zK62hFPyGEjKl)h_+vc1R;POOTyDjZYPp2-uCG`muBLV?nf#d>VF@f;PyS}xz&FY3z zn%}z2%g91b$>u;h3eE*(lCPG{a{nV`{&{#g4+MBfTsrG#AMMuTy|M52$E4n{Bto$Z zgDXQ80=5C{be{hqMu-7O!D^uZEQyg)QB}tArMy*te;9|~Ix6xV066aixI9X9O}Dmo zf11TRV@w;dO9){CKl3u-Mdm!bY~p3k5D4Uw(Lm<$j{|OH+D#=;FIW3_n6KUK>KVfb4cBL0BPx1tLpf0W-fKwSJi^ ze~EK__B*9K_q50syu6kPSe4%-I>;$q6Db`M!l4jwB?a0qpf{KikQasJC1(6P3BFOK rd?S?dm5+&h8|S#Z{=diZ|GfMkwEGaXBb9G(00000NkvXXu0mjfE1+eL literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/neckbeard.png b/app/assets/images/emoji/neckbeard.png new file mode 100755 index 0000000000000000000000000000000000000000..15108fc97da211162df37b5361f153a6701a1440 GIT binary patch literal 6421 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�eVHv6`OLEOPwj+uzFAe?c=oA8#8!BZmTMUet4DrRVw<7-OAiBcc@ z`(Av45adV_XmGNDHOcCCY<@I9m7@Zf9~=yyeAVV$s3Oj@wLZQX!d1kh3y6GOCiI&& zjvNyH^~gIZ&B_i#%(I>N0IUJ2fZT)tS_zy_kfUG28BY3;1vDelHgs$N^f&?fU)j?? z_`Vlowh;2gh>+e1$W@szr;JqypZk0Z_kN>;VgN`ID_!@eUKZ?_EV>c!+ElhL5P`O^nt&W21Px_&k6947>D8<7z55#|6$p7nsQ`SYaNDEe^$pI-Zl-g1R-fC`~}Xaum#|N7)-!KAp(vxlh9<5J_%Bi0EJ~3&EP(R zJHSGN_c$iUHuhB5uZ_-Ai)jDkh`H~k8MB#t1TGU`gunlLXpu1slop#P6%`;UWgZqx z62Pak-bZ(NFr0?`3GHw%)qR-^1S!7R0vf-a%IewSBx(w4~ zG#AYw$Ksd(bWi7tkqAKRfrDoL2ebBzubeRNp(;V-4Uktr5gv$!;XE*n?hzWAbbmD}axJCV<8r4>Z4d&CKL0XR30G zC@`pJA(Q|_hEQ=D?nD`IPOnozPF|QYUZsL0z^T}&2$}c53A|=-XkmH-TVl-3nH`S7 zu>feU7SmZ0ILBUU$p@-k`UjL+86=@B)OV{bOlnwg8p^%-{Kw_KqLU_P-D`af5Jd77?_rYbs~gm)=g((h=hGTYQw~7n?_H)VJR_J*k5b^Ws`$% znHW5pGjP5-pPlcH!LyA2g~*s(u&}#fihuRp*1vqBP+dKv=rWRkB#0F#QC1C{S^w}MTm%~0U-B3 zd!wg55VY_7+uy0&K25mD-w7aXvJ(U|kjs3FBr{Ia3U`Gj)3!smLF=Fy&_3*!EzE*} zo-;UcNI&_3Z?*4qz5_yJxW4e`>kTer1E4QK6M)Ej zAqtrd4|xEQjet=>((7^H03r|GaZ3>3rjEnj95*<0AlkWYd+!qiANOeBn4kU5so><+ zty{;^yZ5(k+tvrb+Jg5kME$)>dgoP>vOXbbBQro?z>4%t#AM;f!(@!c{m@~kHVpKU zgnO85aBOp6iyC^~A{xN|{6Mt*z29nm>i)gq-k!#h%x&Q0>Zkh_M*$r7@P5QI6(ALXy$IR@_DGwfA0N<%Lyg@R1Xx`(Si^<^XG~xZPwYX4 z!y4qlGtf4Z;37ZcJx<`=T6eSV*85R|BL|}={`sNsQy(bSrrhI0y54C0#qO%@L#vNnh3~zBTilj z2B**P{p28nyEZn{Osp|)4u1b>eg7wa(t7Z*Bj(s*h}t$B3NtGl~84$4u00NQhBptW}$UiwIk&}pE`xb~SxChvt z1-AjyGJJf=?tbWy{_fq6^&WogV0dDG3x0=(MF2}4o`0$TFae+lpz6h_x%NPa`i8o! z-grsz!k2ASS8lAUD<{ihy(%Iv0s-V5I6x}18@i2^zh5R-95YiFfm>Thf;Fz87tQFn4GD~%DRduT)H-Q-qq7`W<#CU zO_#))VjycdfwGdE2LNp->|3j7)#I zi*8#d_W%#x0nm2lulwn&p9=xT3z2u=-ipa<-qOb=HMAAdnN$9LYB6ljTR04UZUq=G zgz&&YY#!d%lo0|MaQ4u~*O4>dw&(62C(m3AF9?*c#qfS`Xw$2G&3u*}{9mIf``Kvb Rd_w>L002ovPDHLkV1gsiC$#_o literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/new.png b/app/assets/images/emoji/new.png new file mode 100755 index 0000000000000000000000000000000000000000..28d1570e0a6fdbdb2b9138ff01009a6d193e1f89 GIT binary patch literal 3927 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

    @19p1nL$?^BidQeKfJ2UX7{hA}cNAY05L;(& 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 AN&o-= literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/newspaper.png b/app/assets/images/emoji/newspaper.png new file mode 100755 index 0000000000000000000000000000000000000000..d171394e6a81cd3dcaf1e34fc6f571e53f17ff07 GIT binary patch literal 5198 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 IM6N<$f-#&h(EtDd literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/ng.png b/app/assets/images/emoji/ng.png new file mode 100755 index 0000000000000000000000000000000000000000..2ca180ae397ac5c12d5be7d481957e5a3834a7e8 GIT binary patch literal 4201 zcmV-v5SH(WP)fgQQO z=|5ZShv}OBeqYyjRL_tprSNGM$ERGMIp8w~e7g0S15A8GZQAt3h)VMvCbMqfhOx;o z?QR&R2{8J*DpKJ;!uN&mPD&xp_{w{S<>c`*XI^mrUmU>L?dFy}se2;bEe}QGE&J?v zyv?*Mn;E77#TY&b3W~YVKJYx(EtRsB=-j(o_uluzQ~mjaO1 zWJ}Ne@s_rfok&Eu5n=4*~-PgBAQXNmGI(u$Qc6P+ASOQT!R`zw`n$?|H-PMZrbQH0O zMNYU1BKWf7A(N}%($p*lFHK`)bedHX#b_jzidxacqxtEH^_u0|CyxI3#7B0()|-BF zt(i`Lw{^wp8`GVgwi!!eMQ;}l?Ad^QTl&zFj6z6-lH-vElD(rbh;j{N%zF9l&<%u(zdleW$Ib z@21wC9*b-EZ5vnN!8>+hWoH^AnIZ;9Cy}do@I3)vN+_uSDExB8z&L}+IZVqyI%=V> zBZ0g2uE*9jop|cyV>o&CGFlD8hV*Zmx$J*OvpuGcA9tHNU~6LAmy#Xb52U(!EHj?M z=C!NvJNN7cHx0b{;V5PbWe6d`7#RW5Rl%>8LS_~^4D#qm#&GS%PHpoZ{Oj`!r!QPa zz~YoE4{Vj&o(1reh7MSL^Zl{bNaC?%dsoa(q|w>lj;|cp3P&iscVYx3*Mq@10(zyY z4Y|sdFf7GFD2!zbnESxN^;>$#_J4V{gh?R~FqLw%k7>q(mkvK&UeW;(U+s>yw(XC% zreWDp?Ax{qiAV(R42+@d3K#~b3o-?$1p}_Ws%+w%qv&{K^9@^85W}G(c?3+cWZVAo zbYVAu!%I5ARD6G|C7Cen7&Bc7#&=lJ7+@OcX-mWLB_?J|;0z%4nrUaWF6x z%PvU1#Bx=!;*mG#CUQ=U4ILnvVvKPx#^C!xb1TaB%N1V%#GqM-NwX1SlRkiHDS!d4 z@byHWnjD4YE8kbdLUddaW79^6>bsKgJP9ckq>{_l0SthYoLCTWs4MIR7_E0bd{D^~ zN`mm0aR_JzVu250BgV!#KmtlY1uvx_^-#XVa+WkXvFI1E5o6;JpwkFmKv5a-c0dW+@aL z4LX)7A)~?9>Mrhv?JKdqCymaQ7&*M?_?XD#adsq&qh}{^X?zxIds~o-*|5U$T`dVl zEKngEL=y)PJgosTMo0>Vnuhz<>(=19_1!gb)}f6%^wt>|tqIr>1H9^1D5dDh(Ko-a zo$gd9JpI}!oVhp!B@|%L!wu>?h9+`Y-P@{nbGxu>LpM3iG7T7<&3~RRyW#l)*?a|u zesKZ+^VT4`f)$mF!M1C!FC;mZn21d^3jyL+be^CU5ICWB0%r<|sD)~MdEZ9#4~(Hu zagk(zW$@~ZXm%c+o{#*)WZ&u;QFph@FyrlPaLX0VtF!9^AM`%>zwjAnz%GdQtp8aOXDs z-7{~&;sEUVPzWz92((60LIy(tt|u^_E#QELf8_3Kk&IcWm*e@A8zK=CMo6a*z}x)1;G(|2H-4AJ2FloJ?)@Q7tTzcv3}K!p(yBrb>UN>~kOHTa$+kfpS1eYcMD zm6*v_P;mvtzMexv_zH{o0r*0})9{6&i@xsGCE+jXkU04ESv>X9as1%L5ApQRPvXe& z%Vb+9T5)?f^+PZ21N$uixs+)reQ#-M(`wBb`R=R zaC~SKPQ?L-4U@LefLvlTC1o%K-BnK?AG&L2Jv@QF{=pCm6$e5P5ZQBjcpT?OW^msv zTaZph=C6P6jT>?7>=>;qfCsCF7$iVUAz#xn7Ur5L8;%t!TrJwVkMvcH|^pIC6^0;o?gQoEVxwTRM&} z-Lz@p`W*@EzNQB!&rhOMaZxNg@LUfpWFmN|<_@6q!WUzJ>w1{=eMBM_41?E)0D0Nu z1`LDI`FHPGkJpY4VQg|1tw{yTFd!8}9Rq!ir-Ys_v3qkL-N8__gx~n^0ty>tTEOvVBRR>dQm?**h1AZi)L3W6gC3%y5=!9}eDrgLSy{{A`L zAhn?*9VdV-t2=SmzD+oEWB}bdETm;E<_~LnDiK9*M+(&%o|vWZ3!{yWo-Z+zFJf#u zkFx7QcnVAbk}D`daNq_nkQQ1u9*Pb2>+epidC6 zZ40+uznL~SsNbeD7T%B|#wW8dO#{r3ic;XZ6-Yu)J zWla}Bw56kX-5SSn2F^EO^p;|J`u7ye&&mBIAb$z!WVv%2Q$93!Q zm1?C^QMir= zU#hB#q`;wQlT#Pl_#@# zgu?c9UHH~lKet4COLH)nuV7-fh-z(J(?ylV_dH0kV8iiqqj>T^URoGGdGS>v-P$xrI^%!(-X`aqQeUb%u-W2}?K)xxhmpO*_GGl@Pd~1_n^gasY`k zwGvCS z!KNJ^CmTE=kkzF(o$Ip)7gua{Ax^346{K-RKz~poeM|EB~IXI5N^W*wBhW?`$P{_IX_QQ8l zpK&F7h(*owH46biBJ2c1I8{9$8?n@!C-oROKZaL+aR!a0Aj2A6ELHH+*N>9JsuHN~ zEB4~w|MFpckN@sH_~*xeTSGrW z$3K1e4(!y92t%vJafDfI4>8D^@NK>uq)8!&tn(O?;B_818ToL@pU6yQ=J2!EKfv#O z?ej}qn1j#98mN!|`P(NTq`+5hy%wFVNrXw1ev;EjFTOQEPolndVAs4oY{8y|t~O)? znp6R)MBSZ~HC51H4C#0T)k+1sG0y1y`XPkEo9_?ey@6rWD-pNBP&0?x-}ez4!AV`it94#~hFW4?#c?q(G>!|SGkB?|4eM8Rp|>NA)>NF9{9K`oOXFFb zzA%B&$t>;rhsP%IZ_m92&d8p+&#mtXnuP!-;JSVQHTvM>MI1L+&87x=G?oflVcMWn z%kxFUc|!Uqcs|aS99+0GMPa}>gMN{-^;{Y<4AD%sh(m{uEo~30uK$u4ulzf~MmLlU z_w~TX5gA%>BtEW$l=Q^d`S_pToTvF0BNQuDUnVjvYlSQeEq;?6Kz#y};R8^BD~07R z6|fK!u{Ey(zLZs)pkEn@80gjlHjHZ zm=^dlb%TV0^gTG`GMs!C<=o^m0b{d9sFax)`dKvDb+;8w+-#U8>^O(w;dkz88U09- zHgkgD%ef44nTf*zTfo?CJ6tZ!&CSeB5B+U!X7pkyHw&j!f)xI;`L$U15HzrvY%gnu zx#`i10aL&hFg7lON=e4p?9}k^Nz07>6~G@?LadXb1(8?`EC>h2$-__#V4omrrszmF zDqQxJ+?<9V8On_fJrOVgm<<@Ov=_($ZesNE;5(4w&xKe1{iM6{)@Y(tJ0S|gwqXRx zk#l^KJfNh65CXz=HGBn?;w%a?Bd-;vFa6`_*tz3?J4b9E<$sMa#-adv0XyE--PzXC zweIeCy5qiRqJ6s+iCa8k!vqJo9_*8_<|TYcNXLcel)OqYbE1@+d3J7U=*8^hbQW++ z0LC?IrI`cjosa;~MUUqaiC7}l+m>qW++#%I+oD$N*SKl7gE7vyarKfT10^~rC8h6X zDqeY5IHi;M+3Egbemv_Hi)8=~fGN#c#1i^H9d77d?)DC000000NkvXXu0mjf$>812 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/nine.png b/app/assets/images/emoji/nine.png new file mode 100755 index 0000000000000000000000000000000000000000..8006cc909f35f5fc9ecd5722cb197d03f1e9f1c7 GIT binary patch literal 3776 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 q!zy$P+YLXdm6gI}#*bd-~ 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/no_entry.png b/app/assets/images/emoji/no_entry.png new file mode 100755 index 0000000000000000000000000000000000000000..cf2086a8e7470f33d323705e9ec3e54f8b3350ca GIT binary patch literal 3514 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/no_good.png b/app/assets/images/emoji/no_good.png new file mode 100755 index 0000000000000000000000000000000000000000..d459a35bc1f462c1d830f993abda44b1bb584a9e GIT binary patch literal 7034 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 Y2fTrYv;1^@!vFvP07*qoM6N<$f`dMU!~g&Q literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/no_mobile_phones.png b/app/assets/images/emoji/no_mobile_phones.png new file mode 100755 index 0000000000000000000000000000000000000000..41df57cf827e44fda8123082612713ce8cf573bb GIT binary patch literal 5083 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/no_pedestrians.png b/app/assets/images/emoji/no_pedestrians.png new file mode 100755 index 0000000000000000000000000000000000000000..c35f530b22095e0ae4387dec8a1d7aef549077a3 GIT binary patch literal 5487 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/no_smoking.png b/app/assets/images/emoji/no_smoking.png new file mode 100755 index 0000000000000000000000000000000000000000..5880ddfd18897946a5da38910eb2325c90acffce GIT binary patch literal 4212 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 XWRZ579LzUfAwWY#N4e&aUDSU7K=SW2 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/nose.png b/app/assets/images/emoji/nose.png new file mode 100755 index 0000000000000000000000000000000000000000..ad17c16c29eb60604aefac1705e4a23a542826b9 GIT binary patch literal 3703 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/notes.png b/app/assets/images/emoji/notes.png new file mode 100755 index 0000000000000000000000000000000000000000..0956d6ab2a83d1e8b30478102148dc22c5dab9e3 GIT binary patch literal 1536 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/o.png b/app/assets/images/emoji/o.png new file mode 100755 index 0000000000000000000000000000000000000000..0ededebe31284207489693cf0e781f9e4c402a6c GIT binary patch literal 2542 zcmY*bc{mhWA0{;tQ(2NITx)9V8OhSviaXi2!C>s%G`3`Cl4UT7Ff;ZoLo@aMVaoPW-FfA4wT_q^wqXli^Hct-FH3kwU-&_K`pXoVb) z(}1Iy=SB!&vi4b7=IN!meVMF_HTEu{si0 zmyzEUw$16q3;Cr3TWT{CduG!I8^#41L(ILXHm!oi@FC5qzYu1>9ynd6qx9H#fCe{2 z=_uHek9PZ9J56NhwiB#rH^PjbViMWvaJc^c8u#StX8~7%y{BFf#B2wqT{=Hx_EXXY zAg&;E!O12mnL$yxKS~K&8Kp2tjIFW)YxIL{e~co={cPaI&V)+g8vQP=z=`^8=l#3P z5*q4lU zdbQL4KHY>!ii=wwK46mC)xVlX8CgW0P1szaE}IxzA2?R)u%RF5{yfXO_Hlo|l(&lY z;N0z8!K+uxFI~H4J|+@=FVcTVGf8>!`XUY+U|~`IS5Eykp2GBY>^j^DAS3+&uN*J{!)9#FfBBA_}#A+O7J{ zuDiNmM-EqAkAzTs(~UxDd0*!Ie#F+AE!naf#K_O!V@M+!dE&kaLH92oU9-D(azixv zUY#>ak^o%F*9>QtCJ3A3Jo-(ig@=HmteldEXcw7!`$4yaa^R)O)fEw8T5e9*b3-s! z%^SXSz_+oC#fiW&C20KSiG{c*vx)+mX=i4YGy}+TAmH~{=^R_waX+& zdcB&wEl4IrtYMs{*sXw7>+kA(=7|OgARcpo1xkid&yna1Wr=&h0VpTo?z1sG^Qu_jM3k5d} zgQmP7sTg+|Xrp#Yn+$Z>dQ)Hg)`Rv;0&HFop5Uo z3VmHN>bgI#{AyrUV9Jf+p{UB!!D;d;fqaJ(Ea3cLsOKsM#&&CDFgRnf8^gygb z&03blw+Vh_Gt1b;Q6g?}Mb2i-xpzrI`6MR|@#Xvi`o>KCSW5(A;zkg1*^(jESK)Bt z&T_QE(-RFN^Jn<%LDmcUx*_S>So$|J4TX*~%B!D|Z=@a95+PyKT@t8Ke>JO1_nyy|!V*QErsQO$BD+S5iPQRmS zZ=?r#8oL&Fvz50Rkm?}GRi>lR@ed4f`s=|xE%%5a_GA{0#l72VNMH?YO5u%5_i1$% zQ|Jd^`NI~{PImjg+i5Fk(^PR(^2P=aSJ4il4Dj0#*?FpCkfoICs82EfXZDm3RhD?{ zc}$H38zpuc#fA*-<<7#;Ie2T^j8kwS8u=knCzp}!2LJG9Y+a!!eUDvgN?ZynDHl^y zLtfOb%fT?b{;T}qb3o;yF=u)k9&Jj6^U|u@e{(qeg{uay_%HV#FIJMzuD9gkF+8kr z@A->(abc4wWNc47E7ml36e8=aiYS{p(^k1+Bg9og5LHRi%CH}Bb@ZJ=#`VS*(PPgY z3H{iv1Ie;mQq_1FEBP=Z=82{JZ?o1G`AhE{T>EbW+@1qf;#20vPLQdLVj`(TaSb~-^IVT2(4!ifE|8JS1!M;FtZeSaVx408yy_26iFo- zLihYDlBAEL=k&sV7K2RY4gUUwN5|$FzT7$`Z=lCib`wnmYicS_bfq5|*DXh}{n+9^ zjMi0+J=5U&jJ^0!ht#vs^99Y?p-O=g*RR(M?dae9Hv!f0?01e#894=nZ01B1_AfoE zOe9LI#=#t~l5h`lO`70=P1(|K?zfbtIBt2+g9$_ALJ2^Wh7Ks1}!Bj6uF>4|~&*|{g{GWw1 U9kk_(qdtzsP~TXuN(T}1Ki?hVg#Z8m literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/o2.png b/app/assets/images/emoji/o2.png new file mode 100755 index 0000000000000000000000000000000000000000..d85f9fb98c7763d87db79971db65d49d39ae8806 GIT binary patch literal 3498 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/ocean.png b/app/assets/images/emoji/ocean.png new file mode 100755 index 0000000000000000000000000000000000000000..f8d520cd49018adb042f879aba0466ca50843960 GIT binary patch literal 5777 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

    st2gv4>_tCXRV--@ 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/octopus.png b/app/assets/images/emoji/octopus.png new file mode 100755 index 0000000000000000000000000000000000000000..52ce64b46879ac282918695007cbf8b3f2bb3783 GIT binary patch literal 5779 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/oden.png b/app/assets/images/emoji/oden.png new file mode 100755 index 0000000000000000000000000000000000000000..73add1c73cfa766f29e2314d4ebd61c4ca051f31 GIT binary patch literal 5543 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/office.png b/app/assets/images/emoji/office.png new file mode 100755 index 0000000000000000000000000000000000000000..ea9281a413d754cbed8ed20d4815bc7f08bb0f59 GIT binary patch literal 5162 zcmZ`-cRZW>7d9GNvn$+EwAU?Ktx`23loqWOBZ(UlL5&KvSB-G1Eoy|?TeYYp!li1D z+B;nl)GDHOQG5P^+u!HTKi>EK=Y8MvJ?A{lVoI1#uc8bVcyo>y zON{|}-&OmrNymsndIrkfWPDd=(Xol4eTj=t+3!(Fs6yicGd_9eOcsux7Q#+SOYuva zxiAh^c(CgwN~(U$h3u(6J$N@!-ob9V@0B2ttcqDA zd}t)6gLRebn>EAFx~`C&Y8{CoGgEh*ep+Za!oN{i&jFGGbvtx=Hvz&0K(b{{!^$u? z{L*Q*^Tp+gG~nrbyQ9`7Wy{R@pQG@nT4qkmN>V7W&5<#RmXFtCo*n;eCBagRJ>Fw! z+{Jo+=mj8bShIIMB>E(lCdSA0 zGtDJK+^0qrs?)Zk+x%|y^^x!|8rif?4;&t?@e0>1yixD&WN; z#i|R0ufZ4@=L(7RJnCWv-v$_1l*MtcmTWaBr(U^=eJ-6ly;6(Lct6snt?O{?AZCcQ z^;AKU?q}XYZ}_x(Z-B!gSkKugA{cQxNsY3=&@W~JIS zYza)*0=$l}D<0o@%};P6^ueWd5VqzL8-V%KIR`&a&hjN+@zZ6OXOHgVu9AfggqJKf zy~5}lo}RLRr47H^=rnMiwUGa%nK!J~GQLpUa)6#Kq{pqG{j0}}$~Rv%ct?8C{8Pj3 z8s-763g`LoljyYbGm&DCB5*$`jJIQ`nsR$y=tlxBVDJe}WTdQlXQ$bOC5tOC8Bg{pR=FHsb`aH1f)?l!>MiZ(gE$cIu4(7GwonLt_8 zeH1}%#OQV_BlhCX5y&TBs2?CL`BlMl*6K-m?U?^|O!g;>$7fbsc?*5l9NETKe4-y% zC6*aY$@V-dJRLr+L*@+ zJNSvf@4K$1AdRHOU_B#Ue;DHa81xsY?SnbAFBw^vD0TNC0)aT)I<|NYu&oS(mc_>S z>TG@QfaxRg?SUE0z-3>LSDCk1m(mo?N3j{EoV%ImY-?J7g6UH_AcR}S<0r$Ia=8TW zAD68;I*ofDGbA|@eCUm*FPF{9VyU~g*qtl8PBJM|f`e{U?aOp(bQM93|Dx)z^oyqPZhV#tg&xb@OdzgXlLrn*mS!ZUKXwhB?zp6bP;{KF+ZAH(*2|M7F21LM`I1vN=&>5scT znu=ao8pT7V;xjenMLvF6m0RRbZT*>QzXhJPZm|M8+}QGyAnZW1t!E8T9@!G9c!SQy z3nKC12T9`C$szuh5-v+GA1V@Z)#n30%dh4SIW>N@crutCl$028CIwkXLRE@IbVYQzg3E6gfu9vf@*l20dmkV{uf%V0JO{4^yd>tVebz|V{V-CS{L*NaF@ zi9AFD$+*5!fiGr&Zt27)xj(bp56In6Q&W=^77k)kNYnczxS@?uD3Qv+4@=TD?sqXu zbYGR{QZzE+=ZeDZ|5)=Y~f+x=LrNs69Y{tL}vm#zB>1r`}jE#_;XYeLJKnN_}Ykz*}!7k45z6X zdG`IA*Vhlp0<#sF#v;aSp=knv_%txE>lD5{D&AQ*yw0T8L!C^^?$EViMU;9PeJ0(6 zqE9^={tA0w7fPHMv>Mz^B&N*E8ADh;QmTtb5IcO=Zta|weG*b^aq^~Id}o-6~!X7Lo9(9LRM zKBx!^o1*q@YJp{3o`+WNlen;EkAKcY9wZ!o{y*T5-v(%GX(?u4gTmoYyjNgLqAAwk z4KKt^>eTzMyadHM&Jja|U9<^Da&Ag+%K9nx5^<2GYKCb`1NK6VHN#fGA?n7vsR50S zALm@`j`E|Atg!E^gda@zgBxPldu#kbfJ;}dsQ0=W%hOh%tuq=D3IY@QrwGo9>maFL zN;@o;v}uwq1$kdKZtWLMgM#w7$NtexoYsN>`#=V0SW50$aoL1->b!nQ(=}OF zHu6g`Aal+uc5kG`@yOEM2!2!m7}Lp=G8cSiIN~b9=dUh=oJ*M|FWNI9G=?+B6F%lm zM`b|V8fl*8t;XdBbzfyRu!mW8EtNC;lNe~Uh};I5FHgRIyS(hq=04jiWyQ5JGq#5y z#HVfIyBe5fesRoF%Q+Fzp@qAM|K?ocZ&lcTt4Yk4Y{p0EXV6JfK<5jEXwZGJ!?m4X zOK;iDTE%hS+;6ER>4M`Q=oDJVbjm@po=tjo^=xM&T}@E{`uc{34|`wRTsFB#*f@$1 z5Xn==NwKklm!M@(zt=ZgOmZT+(t9TEgHA6!aL*EXxl4w`P*wp4PD~J=7ggxR zQRWK%g=tE^n&-@z-q39&oY5|4`PwnPk(AuhsUJsfbIZwkh(s8$)O=(4=v^V3Z7nw9 zkyq1BNIVv%<8bCs(ad!@GaE(7(t8ipemHl z$d@+Ll3%!1qSg<-9vM^5kN%ky{Fp9enCoqd>$bmN4y^Q8n|IL7NO_s$#%oW*Q(P4U zl$b8b(8X=ikdJMsO_yobzyOkg=Bn`8!U%8Ec}Hy@(KksGm%WXhL@x->-agRMKdNM3 z4_J5bY!L#Xz$HvS=v#7Uu=U`Ork96cR%WSMcP)P*cwHjP5G?cv`O`RJT zgbzo@SPgEA9poqGGXmc6RwL-3K?~*lO#|NP>=|bo9UXm`mzQ_?Rbk=rMI}3v4=Pq* zNlo~-fJyG1y`0R-ScpZtitDfN1UaiFVw}ew^!{z#gcev%f2QdU8hMUjdW~*L=b}i< z^g<5t?aW3s13h)Uu$d{<|L8RnT`3nwC_HU*mnoX|rPJwUFwCAM{s{ziv9v*Huc=AV z#Q7EuXPU!xHJdOtNo&83W0O>-O6j7O^5!4xx*e9~^mD2wzGH^7KC9Byk}lj39m-@@?SDz+)@We_13=Mlz3>X{D-HizY*-AU z{`kQgbh$`DBf}TbblauXZ^H!wQ&Uf;mqLgsj_~4mn-HFSk2N6^0wN6F>=ol!J?AOo zw4yoY^mxAk2O}}BXdDM24DO<*+(EF{fhTdX&r;-Iz+}KSRFtj1+BQpI63j(LUaP#A zl0c5RgMl(*naw6D5Ht@2A76RpvnG`FRaCd>Kr{s- zw?Db=yLNdw^UtIi6EMa;g6c^oQ^hxvjx=%b6B33~vp+nubYvr)kI?c{XMTeFSa%|{ zKdmIi*4V7T^lozmHPhhka?dkv8IQNubRj0Byzj$CYsyl5vOcLc7YeTJt{qm8HfKrd zTSRJG-(M{@V8_@O;Ia1YsTYc{RAV^dM8)@LTbKd-WmdhPfKnkE-hnOZkBIj$b;?JS zs#>=^-B`yzk_w$((;*IdgAfHZaWAR1S9`>zdGYpSWj>{!%>vTal>cbYqq*_Y|Aun< zM5v|pbSED-?h<>ieVg0bBl#*}4KoM?>yqwnD4Im&Uge&R0j}f_cUkab?*0|nVl8bp z8tIijvi`eI)t-KY96GMiIM;4qMml!A{kq5eYFQSm3L!KgE$oj;V?FPWJpQ#54%H3H zgOOj>;a(L3Fr|T-JO8e@SQfJmI+Gk@Y*&@=m7milcWom3`h3^D z+f{7D9NnubmP6pF57IRw(ulphXenIBFN4G71Rr&k?Dd49y1(Z4@6h!f1BB4GKp5%> zj{OEJH@+7Mj!QoYD-WYd$dM_}gA~1^N>hVrZnEn@qL_gyRszdB)8po{IKA9@ccM>_ zkek8(!q&0{6Y?M(uZz(_H_@&Jyvbs X7P)pE$XkXnXjw+5Y4Kgh_q^OGBz|oIY`W)(hi`fCnP)?hnk}J7 zMDqpwP*e>}Q2_=(FkBTd0SG{F3*0hc==slQQz=vW+97>@{_yS>cVHe=OoHp~eX^;_ zr+z24Xz@eQ+Ij?|VMz9XB=7V25D2KyNqth(+;b+XDfX{^5Pr;A#aEw62=hZd|tV|@+o-_(vxE1Tf=X~^YGq;dvy(?ZTP@iFhFB)Fn5 zghPHb)rN7?ip6+fYda2ik7DQHUW{oz_=0|@ntv^Z@Ked@t`om{X<%Lfn8eMW`SJ@5 z&27tTn;VJz4c9f{v3u4c8VaCiIEjmiG*Y?=iwg*8_Uq#XBa<(ML6sH>XjoDg#+DnJ zvAV4e-{0MZ4=;?OwpoSX)^aOvz96Z6T1ZqBVDo)XeZFQ<^Y&O{1N^}-+Lt!s@%z_f zGOc6Z=`o~r0}5lLJ~_c`N3I&UfGI7J*D*ewL+|i3)-S6gpTGC!ar6$1p}ix|tR&J_oYD6qngQtJ{CS-IAN6(GhYBL6bYZDBBCG4o&xV!;X z0TuuHMkkWVDNK%zVYsLJaCTt&mP3cWW0Z^lt6prWiq&nZs*ZyB{J3>(D@;q^NN*e} zB{~LgXhzoFO3mFWIxKJpA6UXubP-n&H-Lx!NoWol1A;5@>n_C3|#3kdFG-vBu z$lw5Rad9gz0H>PXBGSBIoa0JX00XEVR~U1PM*oI1&K)sP5maR|=3c)A6CY)acO1Jk zk;ILof&jwxPM4G8mA4s9VMyyH`X@3NOlF~5bB|B}L<1VyYOByv6N08GR9Ti1(6Bg0 zr*kxZmQO6`LtP|L?%5>lz*H7F8Z(EmUqyX1098?F!rjf9sN4-&fZzbPFj9_(hwJop^ZsDo5 zPMHE}gM%?fjw_0VD&0WPPefeg84Oe4NPhzUP|!^Z3K$w=0pdWjt}x;PX~Ydy1p#Of zeV_#Bgszvo$}p15V&C}$Zd==euiv=}ZS@gU!oi*~eE01$*m-Igx36r3UsGm9pl+@v z9Kc^bx{=7u;>O zj+J)-VF!$9SWXV`&iqg!gJZ)p_^Z!u#$9WgaV7ZFibk>*cAdr>2YYeHszr94;dE~* zqZ1xUR)qulPJw$XX5{3)?l`t>Xe&wnt;6SWq-PX}U$#_`OeI!*%ueh>%X-h>%~!e;??^)@2QVJ)<;B!qeRe62+2c=Tk=H z*R5ELFKzz>Tp)74Jai66x^42@vVFIN&4o}R5i6cYIs)YKCJhtF<| z$qcHi{DrWh=ID!CmluzaGu?~h=f)5UxNgTNUr_kIb@&`&;Q&6dtPu_<>D{)b6$efY zU{Neox=x_U5R!Zx)zx7<|JbdRJl%LpM%jVWLkRj+nt8@R$mdO3uBJ&`h!YCttpmL4 zPB2IlP?(@bVsa)+;aFE)h1IQfaAROBDc9Ywbd1pwDF!1RTxRAztdimDcO|)7*R)_? zS3eBXgvC9s(7EFgxvXNb2)^~i9g?I5H+CO6C!?z$KA-B$yq!q1d6S}&wo(Rg=5QkN zmFoanCvIaz0d)3$?q-?!FQR8;3M-ppFgd4hyl}XPSz+c80N~C5E{zcbL7koVaD)L)ks{~_trSQ@ zM=X{o{`QA^kxb{{#)`HEeD&e2=;#?E zAxrw;NrZg9LWl$I?nwwT!8yh+4`JHUs-q!tjN(L;G*Wpoouglri;+mCX$h5!|6d(F zhu7XYAuGyh?AUt}#rVQ+ZNP0SnsK}@4po822QMG1f&g>lJ<2f#neoR_jN8{N#rgOQ zWn&Vm$P}m5&Ez?5S=|a3sJEDVhRJ1yp96Pi4pp zj<=8W;j>#-q9IlVH@eP`U@Da%aZ3phPo|N{>Gr7)I7Qj3dybKCZq(I=@i&ieqiR$) zOuEkPJ8^;25?2twHT8D1z-3G@Os8|$D?`!+s>1%^>Fw}O=y?4XCvf`w1cnl649KYH z=o-R~|2m4#v@gXUKXNl%psMkm&U0X3&ND>mDv}Gw0F5b#Pp0wXJx5WDySA*r7j9jH zLuW_8gmXWKgOdXttJDm^BBh)&0Y|Yp^?aIwJ)PaS7*E2DrET@t`QlUfvj;YT_f4Vu zKp*-#`q7dTcv-QApZ2r+p&AcpX1Pu zui(%dU&X7hJc9=x{3METb|5Yj+i|F>J8!@XRxLz>Q$ghrfU30h}M4 zLQ?w27`)@J;5=Y13b?%%+!oMO^bE%Ft=IO-e2_vZ1i}Gm0Ut`?MDIoX%TL}zPS4ZY zp4(}7=^BD_j}JbDVSI81Ki=JmV%#Wqgl8YV1s|Lmf@xVKteaEi^8oH{hPd;NA``Ut zpY9vQH^0A2Cb(|sc@y)1lIIV19l<}nx)(E<94)80`}4v*rClysB;<#xDkXgg$ZHSC zWw8IGcPTva$SwHYyVqli>IOF#K^!Zd38JVNDg`0zB4~0ZgO}xU*wyhNHm+>Niq-}+ z#KJ^`3xRYlkKyqoiFNYaFeYTk27KD3QycdwZ$@7G%FjP=cbgRAv*(7zVAN|U_>qhP z8IhjvmMw~6ES>=8F7kp`J`;2j#-)xBinP)i&~+*pR8_^$SQ7oi33AA%sfF1jr?a|2 zothA^|6dxdd8;T48IVrr@YcaI5SJgolF;B~p3i{knJnJif4bDMJ&6tGaB(GeH#Gbj z;8PVc37dG%aERGX%nM=9TBuas5EaJ}(JC7Ezk^mH>$uj8r^A{bbS7~5OkGvDdjK)d zkr)?(dA5xOkK(Pg!Zyf-X$ZT5`o9MX00EO5`LYpU=(#a&8nC!Y*^^nIcwW%3f8{1l z#7)mlloueEIb|C9r!B(-4|4lpQ7rfc01ghzFd(@hujjhT3ZSP_@9VkrS4_hIw>T80 z0?GmxfP=W0h6%|{a-4p@tN?v|CyvxCY3qvCG_DPVL!iGH6Dk%mxUgWFI`Ww`QptE% zfn!+#kj7b)HVNIpehVa)xdlV_G@85kO^A%`E(YUnFI>l3LGmHLfM{U`+gRR zHU5r27`z}J>YTFjBu7$s<3iP+cntE;R5Zq37mTAG1V^?i|&u zl4Jef>pk}FPS`L23`nkKc>%m41OO}{5o{>euibi6Fx;@k9}KVd`2$T%RW-YPS8;V< z*`2OsnMPh8&F9i*a_RAozOD~C0dN=ji;|}f!h8aFBcTaE7z-0=0HdCnpH~2{5D@@% z0D@Q;$TK+q-4j?NzWpRc0AD^vyHO(YB*8l(j07*qo IM6N<$g8yK~o&W#< literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/ok_hand.png b/app/assets/images/emoji/ok_hand.png new file mode 100755 index 0000000000000000000000000000000000000000..80c5aebb68091298f8995abba5e81e095938be25 GIT binary patch literal 4598 zcmVzP)RA1mchZNmv|$0U=q^?n<+u-JRK)>9e}Kx~l6uoRwV@6QLmtKQy~qg(~KW ztWs+x_IrmjL!m zi@)XNyAKxYwNKUNc3e5NYtNqP-Ftt(I6Zs+U;V}lUiF+e;7u1pkVNU7rHKhtYbg~> z&P-$bIeT)Isj2@s^vd%OJf{s{g~=I768Gq;h@2uKuPMmqR8*>EY~8u5P$(7t^{T7D zKW7aHeLl}4;l(6|%rQ_U9=a?cr>Q7UR4}t+#}zLtUG&E1tO1WU2g{-7b>WS`1}=mo zhA41QWD&ZqVq$6v)#;gA4_$Mhj!nAwGcxxto8GI4@>?Y)IWO>C+3s}_R!c|TkdN$XCz$DWLKEwVIxrEmf;1)+SJ^Pk>_?G*7L- z?z9k&MnD*XXBjAx2u)K^pWTAm%=CxebDtg6TmMF9c>1g?V- zF(H@JAnQ7KNe0XF0MF4lF)WKDNiKXrh5O%cKhb#NtTo_pbL5{>kz|%~yZ5vD+L(k`E7O;W{j$r^n0Fs1!F$nzN{PWBF!w(#5K6w@zK;dJ6 zJKV4yjXm#hNy3X{NmK<<1mXzR(1N1Kko7!7GO`>GhU1X%gfK!J#~5^tse2z^`sCTz z33>#R&?i{`bE5x)2NoK4HakY-1`z~RLl`A!F0WwJGZ45gm?Q?z06fn_QY7g40*cl0 zW$*aaeY?)qR@fr+2nJzz|4)qv4llMpZuAEThiEd-W@Ad65` z8KjSpWLf_8vw1II6O4@Er+>2g(c>$fdu?kpUjD$qXt&{7LqtJ9vw&lObef2=1ies% zp4YB_)*Eo^4g1AgZ@6gJ?FX-T*`2R_>2KZk>Ps$7|6BI4OXz1c{A}8+VWbsl_5MQWh z>II^tObe2vgJBT3UgFx;;rG9>_BG$~zVtA@KY!O<7y#fpR>*zfk)?Otc!}__f+kHm zK>%lH(k4mL^I*6HTsjRT5t6K+T&`*>^2uKV@R2iWz%8%XSt}MN-k|35*XQzuJ$kV) zp=df}O{GJ$Iv$4+6L{_c*Rl`T{r;cV`t?Vyx@q{Om8S9Ex8MDf)8UISH+p zgG@y8l8^~!z;Y~-%&a6%h?pFrpoFqlPsLr}4Xq1ihyB0&?15eLOUtdhJFBZk2gl!IC zcH7V=YT#uR49n8xP>=-3s)};GrYehzuK{q!X*b};E2=q3Q?Jbz@=#OZibTcJu8v_r zzET4SEPw<^M~2>ICM1ZXn105jA43NhSHRBB$n2iI*m1sr-tr>cK@a`qQ{V&%N~ugc zLtYfKX;4C?QhmeCm(70Q0}q~ZPOAZVR?``d)%i5qX|v)6;J|3x&{et^Il!5Q>nk46X?0jA^OsiQ~YpB{Pq()Zl6@S{!5fWNqQ z=Prg3u8G2UG7N*x;l;)yBWv`*9aH7sWSOWsw4B%+xsATvxws)llH5~W%Vda(p0uS3)|u(Ci)MUrF=0JK&l+18C!MDQXHRg#c&JLt7L z;1V`%jagOA-vr=Co0b9Zyk^haiuL;66snbiCW(kf76$E>x3JXs{5Oua?lS$z=Xjp! zn4TR1(bLkASsP!qxAJ@Yr%P|1s+akRdL7lN)QCysOC`vK9C%%((*jxavz%TV$Jr4B zvE^W}+C;n2fEzJbIC|80>Sqh*{=>b;o12mWN>2a#^7J%4ug~c!xHyDkbfjXrcrdR> z7kv7mQ#UUSygq<9BN?+Up1^(OiSDNxruW3Yfqmn4qkrL)VPJC5M}6xyl;S!xwhT^_ zG0uDXg#_zkk`U56MS@Z+Ks8PH<`CsdwcK7hbv=NOZpvOD1_DVOpVa2^c@!rmP}??# zEql+!{sVi@J@~?Hx0OVUvJFm`(8*|LV>jCc4u8C2&HwvDt8e|*(dMCtjvW8t6OSMD zSB@Qn+3mu&ZMyFVLu3-Q8?Vd=jsdUAQ1W>yL?QQLPJ7K}ZH8FevhPFSLSPw4vIM!9 zhgL44JT;9evTpC%yX!>``AawP@!TCJ$dvQy9%P0@4XcLE$sfA)sRZ+xc0 z6NW(?Cm;cWJ023-m}m?27q~{4M+&#VB|h* z_WKxF7QB&**bV3>Gz%mivZ|mmS;w|ryYG0<4KIErHeMh_a^mgR?0oy|?#ldu^Y~rBtmTUo6p=Ad0Ti?-djgEYE_WQa8$2>xPn;;Q9zgBiNROL8pt=mT~-nlihCv z@Cor|7!ck6RPXUUlll3{M)T4_sSHKaz)K=TT^XO(i9nLq#?wOF%@U!1YW9pj@g1iD zp0BD}PEd0?6iuZsKSVi2fK=HMgK<;EqX;4!MMK@tUU91BiWz>|@Y1+ZLN%_UmUO7$8O#qkvFgSqi} z0G}d>>ug7dW}+8?ay z@6#$PB6yCYtAR)au-sZ1XTUKV zqscI9BeOx|)2?hol+e~V4nu@)TKOHM%dtH)(KGFEWia|)CO+8gx5G&Wcgpm8RhgBF zGJBDf&Sx=2pwTC~2;*q8H0o4X7XAN6D1-GmkM*=qq8LdkKJei=4qb*#!$3DJe#@;B zcR$wrKm_yw1gGOn(9PzV^wlSuAD=8LFI7}!w;%}VoThy|c?K_JW)P_O4F!E;)RU~} ztqEUC`y|S`J>P?C+ZYXp1PeoRh_>bazyn4A{L^_TY7;~!fbhtY@xg*7{j(?tW06sW zq*#EgshJ=A>p*3{w&8B8} zI)6bT$(jv*ap1M5bZ$ywqP-kV_w}kyRE$Z+V?tTKr_rVNL}<7!HVS;&YKOjuz#(`J z8D02}1KT3Pdp&eJ29{dJ(l>wBd#~e1#%auejZ@+7!>#ub?NJ;hzY`GwF%b}YF7!ek zk|fdE!1DZft!LLxf7h*y6B_MxGop+zt@;7QcYTcLFHf52_XaTfLp1vCJ%;5E00d|1 z^|(zioe;gd9&Nqv!Kd2qJ+ZtRt)5yzr_n&a-KKr|$TZ=l*cLtU@$GdyYY0DuJ`dpz z)Bk6fVbXNBO>3O;{T>X1M4uSY><#V58s_KLs{fgKI~)-#f=J-LxzPP$lq3O(*K(&3@~2$*XKI{gfNQebDBvZ!S@5Wu8VXVZkjfX0g1d};)G#; zY@zF($mV~1rVKz9fx+5V<-TLa-68`mPH=M&g!CVu&+FsfU!*2vOXb>@2ieO~BASYi zkbYlC_xL`XwB>bNShj=yaD-;xPL6l&Pkw#D__y`e_ssu>h)w8a4DVSmKJ)Nm?;lUB zc9NCV78ZmUDr_g1ToMze!Pqk~h8E>5f( zIJ(+9`s2m^Ekyi30T^Xd&_Ck_WQ+*?%mnKj$Ba+SpX?u6STUAPu5>`&{bQ9FvC?Rv znL$jULYoOC~SXuSKs9&i5f{POTS*|ZxHM$g7ymzN2} zY~!StCBA&|w0_-0QF=v55q2q}z)L(gZk<^MOai)j3Zoc)N)W>K!v4?=j<@Y#e%18m zkF-a})^?*=)CU>Pv(NyFLMUWt1c|`!smMDjnz*AR3v)cjlsFbT14fAA*o~89V0rO! z&kdex4&B97D{2FXGvPs2YewtQhxcs%g9(X{%TTk-;IjsdS!csOBPK){K_=AAqCLvS z=xq6m5ssi{D48k3MibV=uM5xcGTdy8&elJf;R)h8^qI}T(;`n({%K${U~pzGmcV5r g^Yham2~NZHe}_=ujOR~tg8%>k07*qoM6N<$f_ER+x&QzG literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/ok_woman.png b/app/assets/images/emoji/ok_woman.png new file mode 100755 index 0000000000000000000000000000000000000000..e8b98194edbf33071c1e0a445ba16b0243e8f65f GIT binary patch literal 7527 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 Hu0mjfP~>gp literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/on.png b/app/assets/images/emoji/on.png new file mode 100755 index 0000000000000000000000000000000000000000..3595387fb63292d20f0b515fe20de16d4f1400bc GIT binary patch literal 1806 zcmV+p2l4ocP)gp;VhmN)*U~zHr#rgU9cV}m3K~!DnKo>gOf`H4*%dT85_hxTzFWBAPjZ6SK(1lKP zCz=3(Ts}QLeY?HA9jvUZ1REP0kqJNty3mPkY$TF^i;Igdj*pMuWwY5}X=y1~SXcqDYinzf2|$PGGg7gI&1WazXn8`#1ow!!cm1Tfi6DII@dY?7Yle6tBK60nJFFo30{ z1bnLB;o;!}6BKC)sF|6W|H$(4a(M<U;$Gr2*CN*0``H(FfI*H z2uLDD$~GeOHF84*3}68h*qTNF8xck22OIAOEC~V@n-{sLU(t)F+qx;RxP13Gx zbb5L^Q358gff1}=j)MSFep}1VA1pr=&L@@xu!0%vQ3$~KFO^pBE#)yXH8quJ0iz8G zu;W8R1Za)D+S%D*A}TALoSbYc0W;X~LBrv*hB81)&}*^!A(P1j?I>W!he&gPHXY|u z^w5URKY%@sRe&XMN@?|5yErebzk)gLeZWhx`ZES5CMFUoU;`sqo3azs?_*6a-(o0< z&Vvn%O+O3B&{s0}*ZBB&kN|;z_h4%2X;7PvZ5jS^Y-}tD5uy_LG>DE`HoyRuM)gMp zH!1-4A>c^K$ONFHhV%Dec-9-C;o;#=1meeP0NIg6)sK#9y0MAv#M}uA(ANMP9UV1c zZyuQdbhtXPfvrT|3Tp}aTp-_#jEn?GTm+atbYmmQ-v!8oWdZ$N=^5J`AYDZMExOy{ z%a8zf3Gkb^G5}rZY^!gB`n}Lz{QIbS(1EV>>u^dyNiF9Qj`AVE~+f%kW^)0v>@x_M=OoaA);P4;$Nb1=~SDuuuPVWjX2Fgt#KvB)(xb4q}hK7Q{!NFi) zV4y6oUcI8sx(yina#Pf`RA-e<6YUT-IOsH|!tNtHPJXoKN!i&e6buJX%CQq5N3t@C zag5-s>vRFp-@cKdvh4;T;jU7j^w7?Pwh&fg=!7hX9?sL2C*_tBpeXu89f$k-`^|Ar z(fe0)^)9EnqB*84F%t4_J9ME3F@2CCJ9o7Rpsf+$WRr*E)bXSoD*+nMd5tY|-lC8X zYY!=qKwF7L*RMfvI?n`T0sY7r9J_T0;5}l_7cIN6r&Yq7aHC9n zC(0ppF%ys@Dk$&m?JYB0r*bAb52xq{aZFB5hVUN2X$Z*aNf{@YH%gFSInJ$~ay@lO z)DI)393e#uPdLe$Q#eTG1Xc&Byf@Ii6S=pPAzK8IF?X($kZ5F5cI@QcI?AyTKsuq+ zoKWgMi2#Q@oT^Fy!^0*|5mqu=eB)z6e2f6s4o}Ll5r840*wfQPWQgLE37{{6qt5&g z_TFRbZc zHXeOx;|h8qz&Tpqa5T675n{&~CjmAw-C(@4v(uI?h60s`ijp zBBB+}QHO*QfXG>&HYR4DO_uFcwOpdZw!&<<{MZR#jg})t17S;!fM5_IDiC9lryWlw zrhJuo#T=qOlmJeb5E({*ErC{NlWOb)ARQeYkWj#oIcGaJgug4mmJ}6pz99k->9`9c zfWWBU>P%m;sds`RAus2BjD?BX+zObbeIx=HKGIi}0E7&4GLGSvZON@L4nl^a?m3bp wQ>bsHfJIWaonDKl1f&F{1f&F{1k@*g0|h>U*yF|i(*OVf07*qoM6N<$f)htRMgRZ+ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/oncoming_automobile.png b/app/assets/images/emoji/oncoming_automobile.png new file mode 100755 index 0000000000000000000000000000000000000000..cb46de22cbbf544055f4fae8ff90624488420aef GIT binary patch literal 7469 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/oncoming_bus.png b/app/assets/images/emoji/oncoming_bus.png new file mode 100755 index 0000000000000000000000000000000000000000..3695f762353f05c80466f41673a45239196cc4e8 GIT binary patch literal 5305 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 Z{{bMdmC$e@z`Ote002ovPDHLkV1n%e-OvC4 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/oncoming_taxi.png b/app/assets/images/emoji/oncoming_taxi.png new file mode 100755 index 0000000000000000000000000000000000000000..f78cf3103b8e3b6937a2e47430bd216880843d2e GIT binary patch literal 6287 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 b#Wm``JRhYwtg$mC00000NkvXXu0mjf#;ijj literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/open_file_folder.png b/app/assets/images/emoji/open_file_folder.png new file mode 100755 index 0000000000000000000000000000000000000000..2bbbbf5e7cd63e53726d1acd25c07eaa1a6b0803 GIT binary patch literal 4292 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 P%m6T`hElnLY4CplYXOH+ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/ophiuchus.png b/app/assets/images/emoji/ophiuchus.png new file mode 100755 index 0000000000000000000000000000000000000000..4eef715bc28ef474baac0025f704e330112651ca GIT binary patch literal 4434 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 B+1~&F literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/ox.png b/app/assets/images/emoji/ox.png new file mode 100755 index 0000000000000000000000000000000000000000..f7669802480b39883c1c405ea757b91daa538e80 GIT binary patch literal 6079 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 AuK)l5 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/page_with_curl.png b/app/assets/images/emoji/page_with_curl.png new file mode 100755 index 0000000000000000000000000000000000000000..bf8f979d31c2751549f4ba5a6fa8cd9efd428653 GIT binary patch literal 3729 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 U-O$LZ`v3p{07*qoM6N<$f)GZC)&Kwi literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/parking.png b/app/assets/images/emoji/parking.png new file mode 100755 index 0000000000000000000000000000000000000000..c24af81ccf6b07f74ae25a2a77f80cb161c46cfa GIT binary patch literal 3083 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 Z@_!jh5j@&=`m_K5002ovPDHLkV1k;5%jEz7 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/part_alternation_mark.png b/app/assets/images/emoji/part_alternation_mark.png new file mode 100755 index 0000000000000000000000000000000000000000..45dc9b851a123ea90fe39f4c7219c9205ea07326 GIT binary patch literal 2685 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/partly_sunny.png b/app/assets/images/emoji/partly_sunny.png new file mode 100755 index 0000000000000000000000000000000000000000..020dd5ff69886f4fbbd5bbb4f2bb907f51760437 GIT binary patch literal 5181 zcmV-D6vFF?P)g=;|NZygbMN`i ze*ZX(h+b)W4Zu)sq{=fg1--HWXbVi&f?i1g+}(%$iiOVy;rW#VASY+o8-4j^T_8Na zasX&@O)a#!W(3k?n_B+A0-!8r*sq_*Y;)X)z0rHptX6ZN4HJ=%OT zFZC(I-#v+I$U}@W6v0NM*dq}?+A3`qz+Gs@VtFoUzOb$lfl-3XK$Kmm?pzaj=-tk z7nX>#{32PPH_v2pUxBGgMDk1yW-08?NhZ`CW8BFm?WYJD`=Ner;`m|jC7TVmE1WhW z_wv^xspM+|D)~=A;u-G>zZj8+IhdX-ITOBW`w;p*~TCL zVrftmGx?^unk)t&#Z&|{)e-jRaAQ*JHKH#6@jW+JkKLI)(O`GcwBbGF3k;~nbrdyv z7*gw=4@h=!3JA}5C&n-bbF)7(*nQJwjCZH6VUHqs0^JTXB2|T=yd7eG>RECnaKA!rT zQ>nk@6bR3FhcV2-T(PF)&%AcQXzJKuNb$y-=y-n2Gr_5fqJfZP=DP4(ltg9HAgZXehfuo zF4kZzcnDsl-@HjOk8vaq0tgfO6;Vcid}#nc6qfHbith9?q-%3W(bYK+{$1+1Kl!>m1(cmU)hu_|i2)C#DP=d1k6XP0gy2q>TTF`pX?j zSK&gsD%a;C@BlCH1n+aa2ljgD061Tkytel@)BmiJrS+D;_hg>OiA@liD6q12K;pRyA+Qba^J z?F&z#u)`59H&`Zq!1`P?+po&6)}&U{X~)1NVY%Jd283hq#M&QwZ|cBJ6_ zu|nu0i3OC9T13g|mnk*#Dy8L=QCjv@O3C<|H5HCZN~^(31*DdUVTqU4najHgPA(NwYIH>8L(qP}bfpkN9MD+yZg&!o%ySfW2X zK()#LPW$)zQAk)4gc5?Mvanfas;Hp2p3apt()r6xbiSmC&R%Sw{K7gOs}`Un^4!BQ z*%Wf%7)69`E^bKtWE#%+LIFUI@5p%jEp5KZdhWhDwAp5&7FWe`*?Z8Kx^|7Hiut4H zx&!CvXib= z3*u)PUHPeTIuXj=$cS=&i9^>V7asi68M1=TUtG{~u{ri;oLjEh%VVG-;eWfXJl zH0@<8iV1V2-u&MY&Wy9a5Ep=1_2!xVl`lQwxbv&wMnrcv02St=sLE~x-|Vmpr2hly zvOW@2ne=ChIk=e*7Ej^P>ChC+mVLRDGEY}hL18_ez0g1zd1VwClgU<)0iPEpf9-lF z)w1ACx0H0NT}f>nYHF3KsJTr^jV;|&+n}Hdo&zg6%{<@|(ee2dxHq1{g4Z2?9#?o| z$&1U&?i0ozE8~n)^f91n(P;X~%7ElyV@Z4ReNv}?NNI1co&{RN-W}f&XgK4#_2`Hzf8{K&XEe!A{GJX4yFhr6 z!V*)8DLuCw2V}o)q086c*D^kMC(Ic_3az%WcICIVR8`wfxeO9ayqUERfxDGjQmOk$ z-P^~1wftK{U2+Z9i1n2W0^9+CGw%3#5fry=4^11gIw0x8VQ-%Qa=5&4$8RZomo@G5 zkD&b#sUoPQ=Usz|iUXEc%jia(@M)Ma1Q%xAAy<ImZ`**X<$zri1xvcRd-@wBnDrc|@Ag5Q}=%V^&0RSIZEdrTB z0s(?Z+SdyRVF3)r^Z?ugf=03etVf2ZZIE+(LHrN^2n%p_^SEVYwZiac1K{iL{`Pw- z>y@_lPVNUbZQ0ee-S;5*^2XkN2bsbtFf;*i09JsA&meT-pzwc0aS`EVk}E(E)qUEA zkO+SGJ2(JZ@IhQbfaN-(lKX~C+O}gKEwf+SH-C}+q!$jr9P?!pS?I`}0g>HNae0)Q z^`j_TOUh(aRxM{idU<_FTVBTOCD7@5!xFdjfTeqDSSlH3@Z@>TSg#xhLaotjHze9?Mm@JXv zP9eo{=~~EUUMi(H2v=1j2XRFwW529s5H5)#CzCaVGzU6+puf9SD-b zx7EEnMV4U;OJ|bknEL{NRNF;I@9prd`2Dk>3&E zP_`n)K>$u$C~6?Q(5@(Di&^6U=TweVsvbA{#X{pCT8I`^Gjh+5*eHno?E~cbqzqkk`OOo4Q%EbeVV+701nK*f&qv2kFip+ zPhX|WTLk&4jG!Q8X*%Xv;6)i-u>p`+$QvrlV?dYLp@!f&C)rj{-$DZNf7 zPM+tUAe*h?EM=dmVqUF?6T%w07&Rr9SP3106SVQ%lzM#EBt?vs^H6op2Uy)wBRT>6aBj(&{ zQ=(767%D_jAPJ>p|0o)={fAO%hhLc5*3Rv##{#hGhwXpA#Vc496q*1(MqcM=+YA%M z2B_x&0DdC~LL(4P%Ha)zizNwMw`==+YL+4k)hlIKB=e=SQv#I(<6RA}9#}RacD1ZcL&@vPOlZVjv zfPi>_ECIKKq5u{ev&_>{+Z=X`wr<}`u4_Hr1_i)*wMWsm9ieD%*>o--07@1hd{K(L z119*?BsDYe=kuIaQ5O_mtmGz$%V5qDiU-#~cnAw?liFffj|u|gSpt9wuE6gA4ysL9 z0csY240qngZVlO7e(;JN6adFnn={xP4zIcldj+D@Xv;BP)p8BLRT8eGWZ%LRf&4o5#690kCseAGFrp zm;Cn}5z#X(r(E3Gm5D+{)bJ7r0)0sXPfS<`6GfCqB?*l_c8vtUpko81ruMrmpn|JZ zadRYG;4B4k0k&~lAgy%Sa%NBfY?iH_@4R{&d3f(fCO{R)MM||OJu9V)OX*4rn*nhN z3<1dF2)Uej2>;~Y(B$LSz~b7w9>yPg3&J?gq>ljz+DM}af+&hmaB<5VO;E1A!-m0K z0R1#KKr&23DUA9Z!4NrBN{9Lu7eF8;=)u4tK>9;HOc0d101+ABNrb;A%?$`EQ3rfp zFE}zlw>}NRV$rangoi8RJA&|kDA#8B>cN8`XtB*IABR<&IAsLlrUmG619J(N4=6B@ z6{Jf}1vW(K3NUa82@r|&2Lw10L2#+cgD?*e-Ve~g`qly7_=~-;C(<4=6F`OFXuZ*b zqoPFf#ui+NlrHWq*KF{?oq=YNjq{{O0_$vR)@d)2Sp?0@kOaO**mT$t0m6r1(tSSJ@t){x%u*c zv0Us}wbXtsty<$j?pp!`5V$D8M))#=G82IYg%i3*l%4pIQTklh(xq^blFTc%iQ?l)}dzJ z!exJY_B+8jR)*%5_Is?BIH{JeSVvqf(z=cQVk2CPqGkx%pMXjW)&cXw!BFLiLnd-6 z#et8r>m+k`mLd_X2fhlzv;IBiU@q2REqH(zc!D>A8a|9-PwefzE1b0*D*T+AIdWiM zhv1f04vj4M_IdNHC%lkb;kk2{Pd2x(^S88eY_MIvnpQY%pj8Y8M_0Ct-7q;=2fqHo z1krrp_6Pqj05pWY96bg;qTu5x?i=nVyu%pgU@q2REqH(zc!D>+0s(v$co(f%?+wdj zp*PV|yESBG?bKkgXhqQcg-d75nq~3s&+=Vh)~rQi=9w>_X>Ms3#_mzc!9~X|!hmcf z1WlKnP)Q-XB)zQGXyYZjhHuY$;WdSEVDFUWEa5br&?OCyw0E~VTRBO7gl7? z)`DOPzg+3MMF`>Sw(TCmJB(ot=3))jf(LkkCwMPhv?2|AVNdKmV}|v}m+Bu);XvPi zZ~Ok7`LKUxbZ8h(HvifC-2QBj_OG=qMFb>WozA*s35*tQ}F%N=F1N z0t!-S3sev+LKST-gc2*Ls2GYE67$V2Np?4T@80iw&ig*yoXO6aBztcTnFh$%-^`ue zoxOYJ{r%^CpZ7WM*(<8bA2SYr-28t49x0I{Kb7&iYp2rWG;wl^Mcr9=t^+QwE(RiF zRm`~B+6DrC8cpVYrt7}ZAO-ua0dmIGo?jUGu$b)m1hbBnY-cZC;DPTVA}D}>^2#Cr z3IfCup&@EUS}zx9j{i>G`h8*V{D0BMzZf0x43OoQE%M9FuS$N=JEWt(OR{+nr$cZ9 zBoh#1JzQT9kz`b_2nxHsO{g^M5!z^iX(G1Tsr5N?sqQ@4AA9kfDTmMMQ(xcovS&c> zCm&yi>AlYB89GsV1~ZPAhfF7P59{WnBf2=|usnbSnZ*qDDJPG>f zo!7&MPM^zpC-gGE$EO}Cg__1+je=TUQN#gPVBsv`lp}@gsRN7@Lmv1|f$u!AjlxSs z)bTSo!CUOk&9_WBT~PnU^=tPVfGoW_@PzB#{=<)R`{uj&y}a%X16=#33s^co$1}qr zE7w)oQMS~YN@O5XUKKn6&xKqd40bvkJul#sXAE-2k}g)uDcMpg9O~GuDXh8 z^uO+KH$Onf?0&v<{sIEW=dNE=*jg~C2m*-knn8#m0=Abd&yPebnUmqoi*r2wLW8Jj zQMH~<7Uq57u4nJL>Z0Y*j58o(hTmqhhriLu^@5k@%#-_>)!}o`(-jJJOW+D>K>?K4 z9tw^KV^tfE`6DNF#123FNsV1jHaqu?8MEbWz<DVwVluvczsSyR>By6el-JoD8@DJsmz<#w~RNfd|%dXdzHH#16e3 ze(bc%O`KqM%K%U>5Z6U~!BJtnVo+6@5&vgcg;LeMieKADlM6;8j2OAQZblN0dRdGmviaP3;C?zyL)zt z0%U!cbIT6HOb1ms`IQHr>LIYVPZ2+-DGa_~(c0*bRU?r9Zp&nX{fyhFuyw`6G zDc|=z){dh%Kn}r2q?_!rdCWgK&+HzH?>T#_2)tBL9vQZL>aIbU|lI9-{IrTkYFQ(AFOVW z4_q#KOO7=3c6kV3EU8dphu8(x#Ia=ni7FZ?R>3MQ>Fo0u8p?6UeFbiKsK~;%=HvCb zaF)lnzA>M3?ku1RMwyXvL;23rRetzvEwzx*mtAvWmjrDW0HA<^wMrCO)X%>LLM z2K!wCPe@Bd>;js&w+%oweqj}ifzZ$r6A{zh>2UVjyZG^{qqua%dVaCi!F50YQQ7Aj zYM~iHWv5}qrw6&{1B+=nLIe<=|6P?2{BxPk4j0Lh8Ud^(UO>tjpkTE9{;wnifpGNF z4(|DpIQ2;E0QNXeffhU}?EKfM#vf!{Bo=aPLdNXwXxQXiu){+|IfYrn+bpUF> zMC}6DHyjZdoD*Opov!vk>kzk$M+{FGJ~3%n*w;RRosnhstaxU zMu{vf$@s!dET~wvOc-1N)23=g20;1onkE-7&(V%Y*M>lHy>uiliCfzM6tJL5y=G~4 zf&i+3%oG4rno2$p65y`Coy+x)l~YgEyZ^hyJC^t??)R99_2W_e9&1RCf(SGXu}k8X zW)}d$nx#~Y=<0CWid=Z-IG3H>&1s7Rrn&rkMJ8$%Ym_wXD8Q$_Q{eJ;h?b0b;NQDka5rA>-4sA$o4B;qrTnoPAt|74PVxJ1Yzq zP1}7r3YBWj5SA?3RJ6uwlDl^Jqk|s#sO(4W-$zcs^u&2iKF9 zmEUoo+K3%u7XT$q4X{82xX`RAMHA7{>5|C^B7lObCPFBqP0NE%S$?&y!KLr&#zxw@ zH?J8=!x8nz#!!6@v;+>6T>yvwapvN?c_2e*e2nd*>jT|HHB0peB~*97-1&5z(m~%W z7uR(XaS;%(3e~DoEgQn7g6?**Eowj;;tP}}A{tqVL-73M=Ehj4RSk`8A&u2FHV*}C z-4S8T%<{E{p}HlczH)?jo;t}z7oWySC(kB902i2+67GJY#x)O5P6bxs*twgy=DOp# z^pdr_xOEY=yh}$msZXj(6j~Z}rP)xd0UX-m?X$0`g6!EjSObl+(x`wRSlmGHJRypd z+Hi=h+{#DJQ}Bd`ZYfieA+l%Z${Z8T_5K+Vd4Iz9f02ivYfCU^91W;meEZ7h*;PwT4=+EcS-=78GybBidhNHV!am7lWST#=F z8$$XVbgaY)M-;f_*5%BfpQjy-Q2F>BJ6W@)&cye&^R+L};+^LV#_|9`MzCdz$tyOP zu6l_)0w@U<(3FqIlhkJJ5M!KVxk}#Q)+ZbBpaF6@j}uOs%iZ^#%f~+yk}W@s9e#vk zhknUzcfOgU-q4K*F)wTlnTbnp8|R51mDzd!cK+9G%@2o^+V7PQHZmV}b>ZV(G< z6+{s$%=jJv5kRTcl^;A_o|20A%7s0gx+DWYUtb3wzVJlCFru?FJ3WOd*Obe@J;5)Z zt?$|NJX7PEf0$rmTa%&gE!=bO>Gbz!TFzY&-Th56Cb4__Ocy`UwD$t4iYUp2+ua5t z0MwhxZ=SF57dJ&*ab6D}Jv|RVM~4siB*2&NE%4}*6`IO4{9z>I(>IJUUNm&C+sHkS zp2VWXU9?6}9AvNY?CY2~p@6nq0v6B|FJ|}|A&OxA){xKNzLTrJHyPK3y}9|3N$&i9 zF%C=}VyboJqhA|i(@2DUdJ{K&`$(3ZI*3SHe?a!KPBC_y=62Y&TQ}_oq*fU#T5i6- z$i{6EU;bb>3kN&^zW?(Y*WOd0T(f)3y^q~A#_HeKsXw`c&wjF(^Uhxs*O9g)vipS4 z(kaan(4?S%n{EKAB#3|#OFq1^#D?J}7o3@=R9EhNXp+$hgGwUzr3Z@q`x8|vPn3Dj znRPz*`4i$}_5ETJF&x@siBU~+D5{ED5Vc^HR4DtR({-W2+6_%qp;WdgNw6r~bYFqu zsxnI#j_}Rf-bzo8Pa0IG?FB4tP*987B!Lvi;?vz@x`+Rg6iZ0{1XM5)6iUemkwo5> zEMu!m4AeJp_kX>O`3v%-MP#>-3hmLvoAxt+2=Hw(#Z*a$>=R&uwkTGi5|#|vdYL;O zTt3z2_8~%AlGc_K*yL-JW*fwUx*$qA+H95DDlH!}a|6C|0oH<1)Kx$^CggY85exM`YV9foc&G zB71aA!og(8`CB+(l+*=4tfD3aQ!lm*K((|*Y=nju@e~{mI-6gLIOteKLjyL79a{&$ zqV%&@Y`K(K&4F))S8HlYW}HfDbKpjI+^)` zi})FEJPdDDo7Q%<#wqq`jU*9uRVvB#fv2D-0tCgpS19J#>BbRj_p zI1V_;{}R5oP?$c%u@-Gsv5gX1SvPE(tNzYTIRO)C?gffa?zW>pS|zihk~O7IYwqY1 z+)OWcS;X}~yrekFtM3gOi=z>0B8cjkMggt;{x=%_@rDMDe` znw_g{?S&_4JU2l&QUyX_o2pg;(gl!&kOc;S93c3ES?JB+^}5jE@|vP*hzbS@4Zc~K)|6v6PN(Xs%ijI1kg4F0bC#pvKqpvs3 zpBwVpV%P+X0rvoZd-Xv7Fl8#o3A&?Y;XI+aX&PUAVrbvso!9{1n7?3F7PS#^l~DtL zaI+)3zE(N+(N7eH;

    if8Ej+5c3`UQJWP&zu^1M^wdWW?0NO>1&bDet_OY_5C8`3 zPhp+AP#)L- zR51bRTX0J9{CsZ5=%YJlk-01T9nEGAjnfON6pUcm^G1!985tF{XOk1SqN z;Sj1Y(UeA!vQ53c(<4Adl0;x1@xPeP61>nM)}8C%=Q5v zs!;O#NbQIcYX*_jbKrmM7qoP3V$SJLlzc%8rcdg0!E$1p0&e0rDIkOlzNKn~OLDhx$bR>f)U{ zo@By6$Lh*VUS-jaTmTP{X`rDuIWVNOS7=bs#srHIN45dQvR#H==v=i%a4TpdASM-J z^mPQ^xwvb`k-f`S)(C9?T?3ql{0i{zHvew;f$&Q~x*T*FPzMZx?<)@bx_=u^$39GV zc?Q_ixpI-=TF@3CFctn5@Q1~sp3mofj^GPO8~NY%MtiIA-UMwDT4i|LN^d35fBN%X zF54MU%EtCPRNN1`Sg3hwFxv|Z^-;8>=3vfc)} zJKD%p*?@JK%?(Jifdnw{K#cwZuw2qtCFXK$7>b7P7=Ljr&33$V&(1h4*5U0Pogtd~ zXfBBGtCHSjc$pYKAI;Mt3BN125(vBr!x7uxjWK=-=sj!C&hifc@Q({mrzxMS6>5?+ z2Rn^1>r0iKFL8t5OpcRbFxp!;^mc!4+FyzNu&v`WNY}#&t-BHY!vg7MVD$X*-Ug5D zftI$Kg53&KgE;{u*~0`f#!b%v#lYNXHweHSg*l2;@FPXvy?JkMaaso`;o8iu7Url- zzt9ee7X>Nf4%<93G+2D_uGtIujaT|OmfM~N3n%RajKr~hHB{{YorP2d6oC=JkJ2o=eXLa4zGe7e#tHhX zg$wf0;r&=Q80rxPNX|U7uI_jKrm=DVhx_-&znnk6+2|V3<%mY$p%B9Lz*8qJfMB$c zW_J)mH&T0qLB;rFMUp%x$f|NV^A;qiIj68jlk0OO=xh`|1Z@3QbK4lfR|@_5l$)t{ z82!pg4Y1|F5Vy~3?GxN%2!IV~A4({Wvs#4M<)Bs|N8pHd5yHmx+ypjumW+v4c zmYmcf2=MX2{qgNyXDg&!KsgXoZ>VhUkb z<5)$|GNe5$}?gicj1e++hL-|?poTtgVQjpV_mG{5Fiq!BVs0%2T?XSSjWh?W*d%%ANY6Aoq^T#p9+okY9iBBLJfP_h-;3sU~ z7-Q^BlH~V5A7fkuAGCF~t$*&^wf#uBo&cgrjUPAu4E8m^TF@i5p93xvz7jJR^G4Oc zdZXVm$<1W`w&kUurHFqO@!n`2EvCsRZ$gxTXO=9lO+<%GeP$m{;TI)cEokQ0FdVjh zTZq0bA40POvyFy`g?)v>?j!5=@uozXdAxnu=0y6e;B1bAVOunxU*FsH;I!Wb9%);; zD1%>%c#SzuW`*IxhZZi`c3xl4p=lkUWS^7abutwkzgok(O#B@1&~y)Q2GGihG7F5) zo%R8W_F7#5DRqH22%S#c*dd zKPZ;m_j<87@Zay@THxG57B>}QysGHzV`)r3Vz`U{PrlsHoP51ye$Ah@wAS3#RG)An lX3Ur|W5$dbGiJ<~@tDw$?|sh9e2@F^#V^2MV`ARn=^%qjLQ|+(L@TNmMWI5akRYc`DuGZ%p~Y=V zq9W3#P@9wnN>QtXrnGq=RRqNef~F({ng#)e8r%4B;rjaC?=>^$?7h~iJxil+WN`tz z38kW2cWIwH-1^e%P;b<^~66Vr^}4%5uQ>qH+bT55q1Q6DeR#f z34Ga%&#UoAU;2oj`(pv%if78s^dz6{CR{HW2nWCkC)bvb6~qJ-P=jWm4hlH2B*m#> zEBoMb;HNHr+%G))FKzv^>@WXz6>dU!1(^u~NuVU?`wmH9I9?jk zLGGZRz_dVDKmZ)9K^yoTH{S925Bsf;8i2<>U!K-&@u||Yv(9rVfjR}M!`uS>Gx-$P zcUSPt$>X_pas^jTPjIr^Vk$kU38Pl_+MEaG``oj<$Q|Q3{_yB5w~gn{Uw;iJ@Az`f zqb0dK?Q-R0m+Q7qbJgS&kLh>W>3X)LCkrfWq6(ZL&j0Q&)rc8P6$;b2Z$2^@IPd%9{x6aV@ z6Fdu&Gnx`4!vJt}bhM7t<-oWYsq+P&xaW&}=zo2RnNNB3GhV>c&Rosu*)H95Ne>G|#acDs$Q@rRN`~j_E?dTH&V4p2&}0{Q{nQ`IG2(c1hC-QVOLnq|{L+9g=&M9~A%q@BZ^Qz49rKx$2jmcJ&ixWoL_iXPeT^D7(8bosuR!ln%+EO0rQdB!L?b zM;)&tvWn<{&gUFHXp_l=$<`K{1aFFnAYD&NDb%hcM8Pp!9Um9?e2E?&G8|lFJpTa0 z`9uEO;TQSfna{948z~jWgT`>kTR!(o{_aQI3I67*UiRvjTy@R+PF!|+mbW^lTQl-x zLY~c#?HSSqI{GXe9$ln#ncVfLB-|U~in}8% zkVFI#!G!>Pdy7&M=^+y^Z@k#9WBa`Go~_SvjyYw)kqzwf4OYJ8mRq>g`p{o^$q$~` z+4+wrFFU!lwY|e+Hl=KDleTw|tr@BBkyYdcN(dGnG=(s{9oJ4a%sr@`A-PksGaN0b z!;;z76iW$lM?~XX6vPoX90vh0M+iW37Lo+c&cK;@&*}47&t4qfdH3PsjbHwVfA|s2 z0w4O}7d`IO6+0h1b!vOIHS6goi8AR|LM45HD36fAiy-14MgU*{AOHfc5xty_UyFYc z%~=PYIk7Y4?APyO+9$fLZ9HYr1lchcQmwcEWeON>iVy%=24+3eQ`<=0p$>Cy9Ii;$ z&bt#Y``GW^{)mU6?cMZqr?;n%-=1drE|Dia@}SXmAWq7HCrCK~4z!58N0eL@5W;B* zb0soCjx7netkNJ)GSkv=;o^C&>=NEjaL)(;36MxJ8fbi{nUioZg}$t=v79==_OPHG z9!bCG|JJX)__@FJ%1?aezkJ&%@Zpy~?*~uqY`y#BiEXBnp7IdgXFDrZmadSx33)~T z5_u2cihBdqI5vx@y9aeyFOR5i_ShnT!myyAJg|3>SxMvsp1~~`pVF9n-S>4rnPB3#(t;|i}>ovz9&xqvC2Gm-2W zunW2YCscJYulBT}uOKuS13YltVL#H=pXVdEHSXNDs%j@Z~%eoS_@==b)S|5oZ}_oT~q;r(q2Opa|6;w-3LdA>Oe$TEEtud zvn*olEk{n*5mS(yk9&&*RKv^=5iA#I4Ig86XwAsYF>@$|+)qg95YzV5OKN~Ly(&Ra z6aiJxhOf#>2f3haB-@9WR03cG{NJaHkul} zI!CIs`2f?jx{lQMpbcvVs`z3=Qo>6K=4k{*8rV?r>cIkYk|c8Ot^>FP1JX&64DMJn zl7^_PFG|`7sbE@TkkJYTjz=WiA+>dcAt(|K>JUHyuu;Er4oXV~S0H1xk;cX}3lHoM z*zQ(FtAoJRd9AM3BY=k^`>}L*r2G%fS5&jOc`G;k=ZOF zA%a`fU~-PXw_pOM#ENdvkMFTZqY@2NFeqg(gJxh#X^y$0%MtGe=nSj_3{pmLe5k>Q zs+bzy3?Ccjim2ck{;(YJ<$zV|FRcNj!J49D!JqwGLJF}< zDg-?%DO*fwZow9!4YoQE!Ba3taz_%u01#X%GDMSw2X^hSGW0!NADSa-0FZ#?TJ#KG zL|OJ`!Ga;Gk*a}$sbda?%OwG5tsS^}bHHa2O;d+S2d!dF zach`lC>d=7RNcH=6iiD-OA_T2S-0IdP8t-{L7-MgO2J9s9_I}s)DTk zWljJ1yk@kqqT0@1^6_}9cCWgjqvE6C%Mq)FHz$;K#P%2X;Q%=G+#Y(c1T$O}T?|+Y zQF3=|8Rf@n!_-#)*ZE>Kqq}-Uu_-=ZVgh=s$1^l<}i7KE8sbQrO!D?ohpSuOOT zHK<^NW6S6gX%>JPYX;DoGdlNNk^$prch*rEWh9$ZrUglY3(#e92htU680bpEx2Cun zIv>F!=jaL?EMjhVr%8=A*Q05P<8TmnTq}_9+5o^i+Su@>G znE|}VZ2$uiVlXNl(ig%RJ)Q+pS~0|%MtLd~s(~0@V|tX{K@9*uTn0g!Q6I9=@QE=V zj+C4c2iI^csiQiA7ido8zTxJ$Mi5OE9hIuavbB4TE-XHMNe0|}=baZuvyTm}Qfs3v zm#c})#)^%h2kyiTkgDK@Thw0Mu~G3F=3~RPVRcx&*Uh2pvDVP}as>v7)vgx~qho6Z z5;K2tXn?jx26CS<93ASa{CZWiHfZ20ZD^>r06+~@#Vkr+HDl3~QT;c5^8ESzO9B9} z9LM*~$HrI)|kdd_Ig+jcLu*(dvxzIkp(EqY)bvTPn5!#PCt0(`tqug<4zn0A*>| zVnmNBMx=!=E#8ZuOAU}yii%UgM&)ohf`;hnVCX`F>Z8&Y{2aisohZ@lZ?-~ZM(McwuNPkHRy4u^c}B&U?TP`Zqy7*kD!gkv6gEGUHXEl0^sIhEkqMt=f4rD z1n$nzl!ID_MQd;Wwx0_;=O^EM*YE$+pL=Y{`2__b10XS{yW>QUE)ZoWau=_*P6eVA zMStMtAO%;V?yG|k7dfMQW9 z0~8B@%p+yo9VFoOs+hGHq{fjtR_>WMPP?#`1Ow0(Ajc?-8o>zPxEW;u$e?goEBmee z?s&(&fBpHl++vUD(b((1y7$2QuDj;7`>EcVoM|d0N?yr`cnm!wNY{ZG(nVCG^9x!_ zSAcLFi-rgscfcLOD}duWNQ;r|aJXzMb)WSeYEE)N5u_wMB92>wlJV#?aU2jvhh-Z% z)OvVi`kI^F>!bRi1gcd2%)4F;%!2`LM> zU~VJ!&k_uz8aLazcoODU=LGI0`s`8k7(` zCz!Lob6niH{b)fO8`sPxl#;=TqNy2aN`7nmH`hMy4O^0b{?xQj6Z2J$B2gX*kpuU5O;SWF z7H+{1Nf}&$HBQ7aP8PU-Ss5M9D>w`U?05ri-RVI$H}4guSE3bbx)aK7iZ3#m`$g@y(>ItJ0-f55fM@V8n@L;BA5W) zET%;>Kte3n4idRtvaqbqzBW#ljLb(6NZV6fJ-`Ii4NbyQ;Lw!0)|dXx`_A18@Erqy zc$%E9xbn(hIFa+~wUR)0KtX_Q{rTo|NYF< zD<%fLLrEDt9!a5wM#~(m5FwLL3=jlI0SB^sFofeSS230XbE{TG{@R=GzyIG6i|+~m z*7mbkocYV0$_J({v#dhNg0yhjhl(yLWoJU@L5#%GWgNj1ND`I~ep#fcj<{*T#&bpV6KEF%22%4M$JuvmZ z@%Q#F97p}T8GyCDb$k0pQhrx2`G+zBN{D1i$a=bzh`O0W768l*6EI<{$^Yg4#fxu$ zkNY9OcN73wCn5;2d7^{?kT&-)^2T}TukP%;{4yzTD)@_%3lAB9tAYCQ1J5LwIEF1- z;y>Rf?cE>Rn}2~=N-Se@G6-A0E`UF@*4H1$-zESeaw*61hV>hJ2TV6?3)tS+XK@_o z+%TKm@U&E(bA`(jilmH4h+=3WOE|b&+n4^Q)=%Fz)VqKMa1=Z9IA*!Aj~jafY8VRG zhWW!lBY@eAWSBh6QaDKoqXQ;DAC55#N7(^R0w*^1)3LJ~#!j5i>{KbUD@&eTopU!a z(gS$=n(E@5j)x272v&9w#@>cqjMvx?FM;uJx&YqL|Dj-ZfnF{4 z`gt`XuWZK`ZcBSw>Ap^0{x;y^dO1sn1A`an2F5fYiF3el2-xIN0E$p&G=OH$9=#5k z@N`oqFK$*pNxo3?3@)M)=PqJL-!LWP2b zB2s#hA~uGaj1;XEMQg-{R)T2iWm*eGEK($w+L~5FidvI)CX<=T%$#%f^>=wM>%R0X zayW+#$vLMae=Od2|Mq5YzR!A|=X+Ue-wE(9ylb(q$Ldc%b#3+wZ#r7+C81yW%*z+= zS8pA@`7Li(KfKtgo{>sUkB;U|6>}xEfLbFZ^qnF26cMbCl9mXiAY~E(>oX~4%;*`1fzc)U&JHiV zbozy4CLj2jpMK*v0RdzH;C?{z!-DY*1>gfebLFSErs{9J_^G_xu4+sIzYW_@2!7yw zQ>Hsp+Q$wN&LXuUPaDXY;1WU|Fph5!L&W)rb&loIUj}$|L-0g=pVasw6`@bGoSjGX9O?ltHe+I6&I&{fAeoC2;7|9zqZ^w0K&fj>=emtzw zbHDXl%icVFj|qn-BmjWRpcF7348)@Y@HapB#5)eIhu^$)}VWcJKA9el@Io|*o;zxgKwa+=!Ubec z42h5&B2NgxF}eZgA~^?)jo2|W+K$ylu$i!V^_Ar<=lGPh^{>6~x!eD3yn=Y`HW}bq z0N~YoQYj{S9|)HLK!44=O8mYU5>>4bS&_0r)e|b&pw$$_6v-Asw4}5qCr1J*c?e>O zpdpJ9;s#_y%9^Iy1v+w02(gXQf#5et=@BF*VnJ1PZFHI6R>z!Si$Pg7XIG3mX)C*jdN;LrV-XtsAJPfdzO zB?3W7Wv(KpiiCpH0+JXFwSF9}cacm9$pV6yMno1sM#&bUAjETGatI_+_QdR|^fppX zXsbIhS2Pr?%d6<#75Bcb^oW{?_X| zf88D;HVfqI5q&sA0<4aZC8ZWmxaS8C1mJOXuor!7toMK*XAme5u>@LGhe&yq92V5| z5#$9aRy6euNSTyD%NdCtlp^H`h=jlsV@8PDh5d-%>T?%^C7=eh-9V zkoQ1%Fay>mG~?h=D58%P0E8kYi8Y241zKy6f}(u{h&dtjOEjf_P{N#4~Xb667o}E@LA=i*tdLbup%# zDx};ddPxi*X$W2bGg6Ac4lcZbbr*!tp@c-r8RQuikCSnbC&XZAsvVSWKuMI2R80-6 zQI(|9TWIOfS~6)Wr1H!s4Le&?CKJuk(Jr%@V0*i*j*jZbpSaQd+ zg!`mWWbicsc>ei|wYTEt#f8PWgdaVdVM9hDbsz@^M3l_b^_y_{7SX{(znK_s0XK;80&)dnMu;1v*dq9duJ_4t134k2 zr>V9P#ZR`FG=jhgvg2TXtEBD2D>H69zSwGX_$S}`^!zD+$F3mm%HZJukn3MLJ|5P~ zrKLBXu^+HQAO}f`3FlTMvBB8a@zJ1UBj1WU98`Gz^w(|$iYZNcv>n`v5fco%Sx03f)~m2%%Z72aXY)$ zFJ^E8ng2@$kPn)$3}gCvYeMWgM>lxJ!Q$GQ0(1#PX^+x} zkR#TfBSl28Kp^mLO)0?Cf{X4YX3bOhcuGu>ls!4e!oa4Ql9Ryr4bDZpO=z{idHcjf zHNX5?*pd$PyDy zaOqa*2|`Se&wxORFxt}s5L92OCa>e{ZKC%eEk0O`dxMlmgtqv2j`1rd^$sC zQ&rcf<+WmnMeo^_cjHHlJ1=R~yA>gtqWksu3T^!~34;47jV(w z{2wx@zLgXkVhl{`Z=%(2BS(P{6_fg{#p(NDO^%cvVj|y)^`1(}(rNm*#Mw1cY?WYJ zeU)YRg_3cGu_tGR6p2~g(ljlN(kKb_B)|F1?`HNj0r+auli~FIS1*?Ki=(x8=NQM# z=o~3UoKKA72_oGfrZcSV5gZW0h|~=#*Hq#LLJqW($Ej;g&Z@M=eSfp0J?l^KzM_(v z_3$E96^X1%3UuiLaJ2gED4EDP5%8oWNLhm%kXe_%n?)+L-;5ia_q4Jh3K z_B$Ve0i|dt<>PBxbi)w-_32rM87f>jCnt@w0&7oE@&M~!A%qpZ`5cYDQc|7sCxp~d z=^e7)!8?y}FC)cBOcq@WG>;*2O-vVb?(@{mE-8Z&bCkG7&K4gnqx}*#8batw;5i0{ za_Eu~)TKD{Av2hfTD2%uu^u*5szT|ERFGYIXaEGj-6q0zh~&qA6Rff!8N5+A<4_V@ z7)hxjF`<&r(l*;T-&1M;w~gc~tIZ3za6+Sxkoka^D!`G`0_R^ws6;tS5DF0^l{#YM zUT4++A%lILN&V(hvqQN?kt~4(C;z`zJ)FdDB zJo%v*aCi6bj;6mn*qi<6K4;B9h=NEeI}p^9V7J)0?F!*ai$4bc*fwdJ|Iw(L9CQ4COb^(d7*ty z0-rJ&g&7l4i}8W?11>MyA)b5^HfJD6FATOvrt8#Vmwr5EA+`x6*E&?F%dRV>K3^5Q!mTO~9o< zMi3pu1UZ7z>GJ@OBf_!X^&ps4Cy2D`zU6-qS>!-_sE$+4zwua?PKuA%t)-VK862JSf02BrQ%nnHa4JdCB!SY2?O;yhcQ8THx zS#Dlu-7i^nFBLa7_7p8Dd*1I z1nnWhLaZ8cJE{Kn@?uR&5uF=W{cS)nZ?B=nK21HRHy&9}38_bD@G%hF1}Ov~CbAIa zb6E?doMPhzLV$DYVqPgHn);|1VN9M_iYQSa*)? zt$q6bjJDbO%AEj5-8PT{Qb}?S_?SpJ7xT;1jNt-F15%X=u5^BKj>!c8GT@`e`H_@T z*#KzBGL%f9Rb4(`b{63k-b;dyj6)=Pn9rJD&)Gk87P$WhX->#hLk3u%pZ$*WX&Gb0 zh0JVvg@`0($Iy?3&RuVbK`;yk8w}pB@gcA_Cm3VPdx#P51Kn_|$RZ~RLeP(I01#3l zric=t)r>4Obu}xa@swj3#`rKW7V1kz>yb)R>x$l$zh8n6L9ki|t8)K~mnU9dTLRBh zPF61u5k?rRT77nTF_h~quf6dqn~i5M9Z1QlKPA)An;t0x-VNw_it!dwL(F3-RfBh= z6iQ`hlR*lNPo?)Kk@3-&EYsU1$Oh*J)|*pehS7Lj98h{jjGAJx)ND3}ESk~=Uu-O+ zO`M%rwzjHI|ErJWv&$jMhrMm}+JwB=kY?MY^A(vWKek*2Mw1Ak!kCfudV{eYN@_aS z;hn>Vo+LA??!46dflz{WLE&>?V^48mK;{|~$C3#`_MEL>LCOjtYD!&T){Nd!*V`aO z8P0|ja4sMONHr?}Hqo z*4q-?YIA`Q3ZE#!kFG0OM(MU>fshTowWR3D5jL9+GkUsBpzl1lZjW3!oc_iOBK(g> z0^l+Tiv{@(3+y4{4hx)N5L*1R^(t|Eyv7-c^BYo7Ww*T-tkxGqpIEI=SZ|8XQF@Mb z9YU7*K0aAu&Qwa5q9`*%DK;u%H`#7R7}C2DmLxsUu-MjI z^k?iX4mdu4y`1GK<;bFj7*Mi-?8u2?YEdYB@q>{>qOP_`f?|q7fpMmkxc$&mX@``m z?EWxzMeAA#Y&1A07`nhPB#cQcPXk9+=l|%JKhnMW@n3>RVZdcC$e;Wq>5ddmPDpo{ z0C4JAsa*ZUIQq3jV@AdC@fprQbeiR+2QdQ@AqL15N=(=k8H^-BVL>Rf!m-r(Nq}){ zmYZXgUQou~DSzdfoyWxy;|=3DK-M_t8AngwJA#ckn;E;v>MT%I{I(L^Kfdf~4}C5G zaOeBaJ@=dd;F}TO42TOj198QXdu2}-^XkjT$KCs?N-66srCXF0!_cFYLW&Aq&k(@I zE&)lc+G2*rcI9VdwgsfouE|0mrG}Il-AE>4>_}D37zT$@72bPdj0Bfh_ZBn2rjJ+) z7b^=4w{A)zaI6Y1I-ESlbs6U9<>U zm*7K4WUuMQq2&6$3z$t}z4o+~{$dE@`+nsY@(W+@f11ko%i*z+cxV0o5;N%WV~ct9 zlVcx;*I(;cuOeqBYtAn&7>C5k@ddpx7~@&4*NkH~b2mNgk`Ago1Z`#|R(@Yh!Y0YGzkkV7vlQQxa66&TU=fHG2D+irbGr`#bRn^4k zY3mki4LM6(h*;|&3ycY*04WGgPX>lfrtgBgaeelSec%1efB5J5*4Op6_=ADC$E3%; zhw7O(apl_n;zzr|{BZDMF>0)o*D zfX2H(Oc`%WZBMB)GKB$({DM-|kJh{W?|$qP?fx@wUHs6xAKqV8d2e@rg3_6-?Us-o?W9EjM9*Y4AtXiSfG*FnXn?9b zVFI*TGhOVcD?-Ji>yJ&oXK|3evzf(flP%fgoS82qN=e$OCOF4r+7ypaT2QXgHL3(G zq~i40BXV+X6zkQAeDT(o(KnBuR142Jwr!TJzsQbVW z0D!s-3Q&bWb#WRkuv{<4->Yk0l!~pzw!S`Fs5ecw#KCkPwo##;PLmQM(vMI{>4q+4 z(~B-AqV40!(C5=`9dG5#CU}-+;3lvF5>VZ@5%Ll<^WEn|dB9~rE(3Fk4fo#f0i%KH zJ|G%E1NB{&Xw6jBG*wGeN$M=oQlbG;L;yK@Qc8q7E4q^M#~APKF19Qf0aF%uzyYx= eNM$`h0{;(PvMQfTY>?{!0000_XrAZFKRT4QKLqqA}R>DI-ML_v@i}g>{shR1S>FIO&_Pu?3rWAnx*Z5O` zZ2u$pU%}r6r3Kc4vTqTr1QvpK1@9C`0Fo~ws3B+~Xens*7QtRnS5TfJ6i0v$1Yevw zb!zW#vfa6JC-3&{+iwk|y|C+cqzI=&SZAFxGPZW4fZ^gJ?)HQuhBE1Baiz7fqL5~wBPF!I{Zz)K`NAPKJ1gI?V z%E`&O{^G@pKUAvE3jnWcnBH%CT-dWjVRf07zv>!^1PZDbM}Ut7{f-_zYG6fgDM(}l zBbiwOJb(WD50&ck|K?4%@o%L{EtE-tzc{q2W(lBSOn%RvJ&-7YXV0ENLJ!WJJBJ4k z9>8EQfZN868*%BeZ{@cI?Ce*M(FzP`Tb)Tt9Xbm#zaw(#@wLysOk zFm~)%3>!8K{rmTar>7?Z0s_>1-+c28X3d(V>KHzJI2;`vF>~fjczAfI`w|ioFk{9H zC1{&Zs==qshgk4Q6{OUuiKC6`3+f@Ub`1PgQSaW@ak<^wUqQLy_9HZJV+Tu{Kqno12Rr zJ9a2S>FMbTlP6E6C9wC^JAeN9XLZl5Tem14>r{fZY1?Cjyx&KZ7U zA>&G0U~#1i*!JZYIPi5H{L;(@=-3)?Ziz?DZSixH2AEg1O3rHuK+-1QaNz#6ke{E= zeThTY%b`@ORxKG8BV@>hBPeVl19`keP`Kf-d;XEnGP`yE}E@jc6yErX4X z4Hhk03~%p#YQK2#62v6##Ic<_k@iJ39Qm?3Znw0@Bf*P-eSy%Cc-htgSHvn3#3#sH z`TYU~`0l&!4D`mvU_r#K5y(JQfO(`KCi?H(SU%tcP!n#dEAN9T5U+SU>IUE1Th427$9jd7^q zR|vGS^m}aq9zTApL!k2HVPRp)(=T1R6c;XB!1U?Uv2fu+8Iu!~$BvJW=QZWT=Fgwc zNTA^F?@w>9?pd*7g^CiBCQU+caIgxWDJdz8EXvDIn>I~Fhz%PyAUZl)-Pf{JE7;mL z!PKeK;O5p7fq_G@A}U(yibA6Fepc22Ny7o zCv{RYl8WKNKS6B1FlJrxlyHmrm5U)2%^*bs*r z)J2*^2Rg|CR+j4u6@bJ|z_IvBlVvYaB-4!|awAdB5sWt0_u5hAOwK-Zv9ApK)~<+O zyB;&dx{^auwFDT_Tvry6FLiT{a!rQV%@;t@k|kLAQF+X%R2~DZEK%hz zf7x7U6p)FEfzIn+2@*Hn6C`YW&x!9-5kJ%l+eTSoS4e53j(rcy$9p0=HW|yKRv~$3 zGL9ZODnlSersa3Qjecdf42fsbAvrn6k)Dx>@pI?HUuLQv@BJ13ELCb#k@J8fRBnA4H`E=t5&Tl7AZh>cD53Lpa7iXGyE|L;tZ^1%a%-l=;0L!CnqPK zGZc!qc7U_9vzp)c?Aep|(#vyCkIy8C(Sgq}*`a{+{!Fe^{lolvk-X~p#9+bbGT0&H zZ|$uKzzKNa2;?^gp4Vky7C`Dq#o2S`Br`oPp>RJVf+SWW(5H_##>;fMolKRRJ37d| z-4OD8EdlP`y9WWSfN3v#i5VA@AA*w_S^(2f_P(f}K@Y4_*z@PlGl}6dG*3>Pn9$J4 z@fwfWYfP-vJ5HWFsVw18`WCDXFeYz>9lGa9{+R>tq`3${*aA<#1dsx5+1ZEHn2#36 zxM=Yb&JacPR%q_vz|5572a)4z3qUd&^aXlqsuxIT8QP;8hdo}?vqtXqIim!x>oOez zS;lK;bFx&=ZyhPb$68~D?s-MtLC6Xo+Y=@t)B%u&OP8Nwbxb_wFIXsZ3||C?gv$KH z4mE4m%|LIwg4LJ)mN3j>AiYUL*v*tyAi8;z6><^gdj`gWzy^&p~yb66HovJ zRi^N~34n$;vTp)>{KsQVa0rGD4U%4O%VEc%<@&}eLSpI$5-S{u^tg~u93=t-YVtIBA^Xsdpa6dqfmVSQczLNVvZuU{QJ!{a zWZwbZy7iDW*-p&9gIBSZ#10%dU|=t4kPOXTFHf=YG+~Atp7S1U+H`7SK|E)<&fxew zeFjaQ<6fN~%TCrkFXUysb3atbXK3<5`av_2|Fa1B0yyEtrLU1O-Wpp2EszoRA^LZ! zfy$rNL8C^E$B>g*0+1lVMstA0rU*2}1r>MhyUJypuffXAx)>aKwuXUn6~dIcyZ) z!J(5JS_bpm=->SHz9cqEr5XJ z1tJj5K26MCljrc+J=YO=H*e_om@mM-eftbtn|}jPj3VzDJKP&H`c}Y(pnnL&`H2-M z^3Uy|$p22fLWBn-?*K(UOnN>*!le-3E@q!9Jx{YYdQZs+K#$MLjQ0e4oE~1MvplAc zFpdOzy^woCmvw4U1O9Gxv1&+p?2yFfRw~KcLG|!mk~bBBsBT*{4&Frb8(U%Iv4@?HAgLz zwP?{og+5nTS5?-uX;U<}t&RZq`j|1?0Sm`DW80z*$iHj@+;0T@rUft(;l6<6&(=dq zm^Ib~SkmMb`Q?Gt;NIJfYlf2W^npxunW@rIvz_J(AmPivg#}a4yr?u&S!ReVV|vS% zvRr@DV~FH2lO#Gw9=kc$La48ekZ+B+nVqqIwi_~Iy5Y$c5#WKq*b43mp4sW1*W^{y z*fZM^r%&ZF>0+p5-AuRXgLFI17eGFH8A!sIJkJSDQqL23%rbgk?g^4Mju08CN$}}b z2eZdGVfn;1SR2s^35&ZUWra5muJ4H_*KL4D0*XNLPlfy$>3Jja+ev;-3wnE0_ShKN6SbN0-kZL=Vc%CZrB~=j^q`+6jE09#_r{Pkg=vaUUKYTtb-JpFMxP>1IIYQmvRwuM!{^7Z)Z-Tqa|JqrUo#9zB|k;g=t-zrm&L*N6;mEndGH_QrV$+>sgU zfj!Z^)KG|z=#02oov?CRM?{9UM|e;REDflFIDZSw9{33+PaF?7H#ZeYWPU==&v&a2 zEnT{FQBkK?uU=eJq*b!bB_jYUVsDeo{{38MTaWGAxAUuyda2yQ1cwO^dxdE*e{j%$ zkjQ%dT9r5r@@Ry$b6k-b?~UvY{l)2div@TfX_*@~&F_k+DIE|o(gERt_6Q!>82!7~ zg|pM=2=jHo&ZGp$aO6J$D$L4atxBdOTUGUkhKA~6Mg$Ink`sU=h+lvGRcD08ypXn{J5mMP7Pw%|^!8X7+CqriVR&B~xHx?b z&u$Kw8!=fzYYv~+(2FSA?+`3!=kUEeR_3qUY_iv|*Z6^w<^dkxd`4sD&VdA zH~Anfx+fBsbj9XK7sSr$g6Sij;O$Zao?V+_W_Sp)_GO@ecNX+6!t|IZQ2}UL+`lns z{$|@UrC8RE6TQphiplSBHjU_7p zD>Vnzt5-*Z1`YAv2UciQuPQ=@w8!LeLy(@fTbnQ&&t-FlOyfmTV^e3C)7N>d*CuHG zj7I$E%4-xvzuSBP#Gz3DuIn2^zu=YU#^f0d_!C3fvSm@RVnu%MXHLM+;tY*+qWlWP z4z^@L z7e$~j{DQ=_M$S99B*!qwoP@)P?>Aq7UAuM}NX87XL0S-oCY>kfFG_k2&xk?u)n-rg zX4us$PTcbzeXM7stWysWUgx=fxA_9d2TB7otb)jyTr27xErc%D=Y;Wf4O&fM7N?z^ zsTG#I04C4`%)q~;&XN~^xq!*JX?aoCd0b#UMZC+TtjPP#7a%Dq$-s(CU`*^^2lL-+ zz5t1diCO@ab?M_m%5-^=_h=MR|EtRXy#g3Ff_n|qMi+3OE-UPL?u!FHTUc4i3Gg2R z*A~op-aG*+3*05ey;Deocuo{nu3>tuu=-3H8lrJ1S1yze9fR(^r5F&^dqzKaAB5W1R5ID0lizC241hoZJaFSrL zV7Xw~TL89mreKhuk)TX*1bA0aNnj^%6ATdez9sMzcnDexJ`sFSlmPz+&5+xrv4nK2 P00000NkvXXu0mjf=vHwo literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/pencil2.png b/app/assets/images/emoji/pencil2.png new file mode 100755 index 0000000000000000000000000000000000000000..e624373b4913017959d0711bb14633077403cec5 GIT binary patch literal 4450 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/penguin.png b/app/assets/images/emoji/penguin.png new file mode 100755 index 0000000000000000000000000000000000000000..d8edbcb8fa9115a6f3e8c544c3ba5050c1d9b170 GIT binary patch literal 4746 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/person_with_pouting_face.png b/app/assets/images/emoji/person_with_pouting_face.png new file mode 100755 index 0000000000000000000000000000000000000000..c4a95c3b2a2b10e60c565d173eb7cee4921b859f GIT binary patch literal 5428 zcmV-470c?0P)dH?U6bMKw!&d$s}y!P4~{7UTDPMpNCv4Mm{<)uJMc(@WGrKLO)L4=^<|Bs*& zP5KB@TGUEarM8q-MQI}gLaiDgsVH?yn&7k~I8K~({EF9JuXnw(Gqdx$k8@7XeD};; z6xYH?vndii*0~zu)&b-#zCttu=m`8^0;|0UujizC$qF z35L5kBTxVsdVe*;L8dXu7~2GfOPdBXbbLrkLo2xjv5{>_{DU}eQjFwVCat)?9 zz!V?>2!88us`SMEa`{~cDwW#nM!a_;8TS9i%zp9i@!?G??g83M z{UPJXS*u!rKW$~6B)ga;kRqWUv5tR}aI5X*q#n@rJe1J_fJ(+8Y^ZdF=`LxWcJ)^P z+__>Nu-{a64En=FgpFOrlDSOxgdv``NaBG?tx2M;R=R&q(fQ4hIu;!%tQ2e~$~Z7p$wR9^gb1 zIh=qe?+{5_M`k{z(=nkl^Rqx+F7 zl`*_3jn6#%0G@f`-|+m?hj8-c6Y&5nc-ALC*<*G|eW0~Xl*%SjBN1sLDV8{AZXak4 zFyO>pqxo@3R_F?Y)(Tw4g^cROJOI~qu=$#G*!Py**m(Umc=;hXo(JK$VCLGsJKu?Y z@4W-9W(%i|yo6V$kKx?$(>VX?3~IGH1Q-~RlH>z+nJO`|o*=a)Bniv0?TmRxvomvLtL6`VV98YiYtpdAGLfZ~03wjY}`j#2V1YZ3RiEOLb*JQ%upU8lP1e^#{q-@YZ6+qIlAO6PkXlU$ zEub0V8Ngz21rQ33;*bHK$s(Qhzyw1eBSb+9LPcOAga{)zGD0e);HJ{#qk=mLcH%`6 zNny}|-{~MSS_VFJ6hO)VBI{z$EjMCv{c1e+PyddE3roEP6A}fL(Cu&%;omfDw}yMv7(R@&&-LFEPDxIFe{K zm$6u_;Nr!LXe`$e`aYPFln67NA;UEFv+LID@Z=Ak$I|&qQhsaLZ~y=z!5JI@T1jcE zG|K{9&Ztv2<06}O;R=psJHSkbLyvC2?8OF-9i688%Oj)Mvu`72Uzx!*SA|&X2xN0P zfC(E35^cYU+4=LBJ~Iz7ybe!2cM`Q)Y~`)nuEj(t3tl;i67%6X9P2huV1BU%bRq(8 zr^!AU(x}0O0HB>@wU*pA(u{Q4bC5E^9gano!^T_poB4kW_TRP_qgQP}YG@dbJ^FS0 z#>YR2NbSV*vyY>Y%^~A?fNQIUD8h2Bj_Gq%Y}xax;86ITPv3`KZ@&YL#RYut(MRy; z_n$I^zKG*beiK>Ig5x^yN*Q!!>jbz@f*qw&DjFC8k%ErLn#3%(Q=)6Y3rE0V44q67 ztJkhWsWgJg48xO8`~U%f>nE}(6$=?xec3`6*f@LUJ3E6}0wS?IAM9Rh4{A;6e#3AUvc;*t{p zw+j|&*MSqv#()2QL>(Wuef(3Hn4F^6Zq_UC#$5otnm!iKbJ1F; zpxJC<%~k7h&u2f2gJ1g#IGGGS@P!AkxVVUyp8pZb!9@tiqY6?8PUD~|KwlEJ(Ew)w zT~CY!Fe|D*n<;oH4->?urH&U*oI@d##?-_rnjta{gACJ9GJpzwsFp-WNvap5 zl!%P>{SeXuR$$;-Cu;+WwFkE*s8vN$1x{sVvSba7PA5bsFcJo_WmH_bQ4W%l2!U2c zhmcVK=m;;LoG~OkhkyM3GbI1=)N?p?Y6cE;e7}mQ9M;-CgFpw6VTeFR)K|+7;2ZK4 zlCfwj5fmaWD+BX@K(b0&00Mxv5;4HhAj`Kp0ZGRX5cwf=Dx~D6cnBUbS|5Z9FmMd# zGPwQ5t$5<;=P^4UducA6!rS)l?A8=Sl!hkoI*P~xAVX*aItYE!hmTe}K)d533M7=x zMbc=VgaEV>m4SHx7hx?*z+2XJ+>+GsZ0=nVM?0uQcmz#Sh58GvM& z+!F$0r4sU)3|5&DiMTUT5Zbbn94CPD!9Y8y+nCaR4l%B`HSWQwXZ7H~LVcE(VYq?p6u zIRb7j10bEO=`v03ucRXIGK>hk3_9fcJa{jmTH9o7J%I=aAMe*78Lj-;YGW4MXKelWXzv8NHcqkuQMnXOijiRgmt3K2rrtb}wezQ=$Md;)Kh9)Yhn8d$6?^N+$Ix}zrp!F%gpJX%?Y3iJGs}tdsQx|ZdQbVQIM6KCGJ2U_SpJG>b zNeDZ!SVI2fk;ie*Lw`rdBw?G9r<6VwK{5D_1>eNnVhzVm&Y|r`h-}{p32{E?KtU>; z8u-qTRQx3f1qluwv!5)F8^y>A8aOdBPZeIujknEpzPHD(Xo1w>5)kn>1%LL9AHZ)J z(D%KE9;mfK6d92rf-pjxEZ@R{@v6CnC7hU9z=in+fld;i?t5VXdyeVpffEoh{Swp6 zt_^X3LLhE*T2qaKqsJDI&!pjS2b{6~M^2G+;kgoy!y%-gUF6?-$1WT(77hIl0ixPo zN&+8*p#k4UrM_%JtBT`i=W+Cv3kV~ffKG}so0k-wmy*9Qa01YYUeH;W80I$f3fnP9 zvSQq7OZ?Z7v+>3!B*HEr8KRKQAmydtxdOuO^WS^d?)cGu2&EMf5QGwb5Ma60!cx6~ z^9u(2%z}C5IkY>r-s^)$0zUBw>4(uv1J407T33|9w5CpyjukX%+0{DM^+t%NpPRvp z$Is*R`320)FJfVF36)w6wMK*7y3sV!XdB(8#Sn9jt}WH-m^b&%&R1~q+yagqpT*NZ zIfLb9n5;^JwC&r1Pxc32>Q37$vOTUe4npG^#+0oCxYauO6b_){dMm(>4xhzBt%+?L zS7W@?MrkOETqcEd%7g0&aJxUC6uCWlf+=%p7MZU$apaX*oSLb^4^{H6pX?JRvk+9@ zC|aq50I)&?sDlRdC$vS$do_3ue3yv$BK>X$3NOC0h;tVj*fdqb8z##r<}*|%rCkBe zh`>1Rr83}sDs)brUBvM-Rn(UKOTHbn%>uW_U9pTr8Y@RYBaq+ArOWP zHLEQVwk_5=z=;ahj~B7r@KJ601Vu_|H%JBjb{GQ-6;7P2qSERhX$e@JOgvUpvNxc0 zV=j=7tr!6{tt*o$_c5(;XAg7|4n6SPo@Xez1(cm4CPWcC+5*{k+6h4A5*eaPh)LoIN{-_xso4g}lU^G(<#IEQR&H+rt7*2qCdQ*f+J-?G^n z^7)*R466AKcJm3~4R3xS2Q1{l5BIl`f=9RwZJrVp#!jSPi+j^~E*$mDX!WYXYH zOn~bM(%DX@dk=D3sw(y4CWcF6JndyDpG=Oe#*O|BXm{F}t)CAMEj;I*YMepEuUk*h z56%br`4uOCNbtk|_rbOMp1omo`{!2`#%~_V8Bpo0m-f;Ij00hWfkUbY9W&sD;A+Ut zI>Uv04A6i#OwoM+AR`ecRCBFu?lJdrCRkL=7kQUZ!5xZq8AS+IM_;#3Wgpsp??dm}_$&99hDyli^0XuDxgH$HC3hB_1K@~cgp`{? zxa&4&>Dhk;yTL))0Qb!Ou9t$amZ#}ZYr4jk9i*P+DBtu}XLzWHR4M~USfW&9*8?MZ zMJ@#aMv5cb$BSeC@bHd%Z+Z5};(Z770lA_C{Lyuveq_U%sSlNlqZWLcl9?+U0>T7s zdRog$xQ+|9b|YA$iRxDmW8!z$K#T}DjsWAfj&J}a1%gFs?wLn<>mH0wZALDWBLXc^ zaoH;sl#+I3I7B|1M=qU5CY8I_5vi&DZ2$WV3BigGU|7C)YW38ICdOBzFf@#8HVe=3 zAP9W#3sK(REYYrl<2mFN{MwzUMjB^+ZyMQ$b8yzW{W4TZiRN63t_^M6fugzB03(ku z#1c`-bCul!SMhdw7{>Q`ZkPBw_Nd@~01vJR0p;P5&ySVIQ7n{D$QP`83JaX!HH`-9 zDg{@#lfz>-0r=rS z3CKF`L?)dhtH+7Vi0fUMn>m{1d?8!{mfH6gRI?e(JrKXNWwsi(H{OxSWa*93^*jh` z`73C2Us_7|sZMt`LdMHX3_JuJ$Dw%lT(TqyW#=nwLTd^a*L4VFcHgb27YcN(u>FQE znRLw|w-?}72;O=bjmtcPc9|XSc!MVZ4gnA}&v&ia)jtOTG*CgLd9Ff6rBQg}Eqx0T zX!?ZCCcK}sg^ojB=5Rqtcg3bb{u&*B+@#25ITJs_Rl5K|Ahi~kxG{jA0siuRQX(eJ zSE>+-=(RNrji$v;0ar=1!Vapahszcvz)7bo=4H*Oj zCxEK1M30oCMP)<^g z726s`v6I+?!In!&IVF`6BP0S^5Ea6p)r8>@1Tgq#cKJBCpj@ zIoS|9KAoj6H{SG*vu<&Ijt zO>MeCX>x|rOr4<7!OuGcI7~q>#U}GM5Da~Q;?Q}e18h-B!3={nAxS*TTAAiRh33d0 z^^q#|IHZxKt?4v*?o_k6#fp2hN&3W}J^uLA85{7q>p!|SwC-bzOQl;zqw-|~#-q~7 zC{N8WaD0l|@kzqz20jTs4iAHeUz7&vNuCd(01g54HTEi|Te_YxibCHM6pOPM!VJlb`t0`~UW@d!xW_Y}~kX_2QL(eqMEe>bAYez5_5- zN3)y*lCxhexj?K?LV6WTkBXafw2E>LS%3iwczxj*C@4s;bO?%)0SRyl<$x%G8dj09 zd}0#UsACQvWoY$TtXX#+?JWD+r*6FQ{(B#MaMA||Ot5M7iWO83pTNF4j!AO_#}3!w zB~7V_Q0WO*+CYLspnE<-ieeEQO5TkVAnTUe7l*#K;C@{HeXlnOx}}E@p!i5Z(~Y(m zT;DjR#BoS-E)iudJ}ynsgX2`kmT=yRl^i^N?90Hf`!`*4O>O=1Rlm04+*Nd*-G<9k zY?6>?If*(3Ff?$5v$4Ra3KbmI^O%f$GNWjc5M&m`VNp_`1GLCUaTq)lgUpvd&lH*W zi6bXOC=(I`LC*+}Ebx#hB6KjESUhWKB20+V0eqkar0Qs8IewBr;34Bj8M|gZWBd1i z@|QPk_>5o8tPczV22cS6d|(JbArY8S5P%3|G%7U) zg6Pmp2*anT9syEl@$(#; zrkI%q)ws;);2{1%ZuUdpTwhWpG6BX~oOOtEpxsP?ScO3hh?3$sK+3uAdiP(hxN7|e zCmwq2+~uj`J*zHaeDx(fIdOz7uiSR)f4S$LV=Nqe;WvMC$pf1=?^?6+ zEY^>m!-mmijHSxa1N%8ynq={NFFU;b*!W`y_U`)FpvF|iFsO#|oX%1TO`=+83_Xvs zD!!48rW(Z;no~2-Y7-6(VDcPsAPW9z0)iB!ui!KzLwA4W*~dSXHQLAayu6hydwje+PdS8n{NBer$6dzqgScieGD>9e=re%|MA zzU|Y^r+&Qi^l$y%x((b!WwwqNXX|>fsB_=8?Mxg!KJk@3TmOYARd-qvJcSVO3JQVJ z6%UeTgu_G7Y{T>n)wp!2{PxBVA6^%f#x7p7mY~_<Xh%yxj4I{^FrF2M#Ylp1TaV{72 z{AmEO`JgerdSYUknqKKQ+bb(hmkwvjhyqj7oH%lXMpj1vA0GueSQfqKayrAcr?+k0 zae3?H(P)^AF=|ClF+wat*?5$EAFY&Gbn^`)v*nK6JK2_Z#(jj6i2|m!?<8urkSHoz zgHc5Q(`B0`@4oIMtopz;)L+~l9N)9&mQy=+Q^MfmAwYnK0(sWr;K4oEgNl)uuu@{Q zR9;HpFV!%(LVXWaz!M5sMFb?b#Ze;5(RPb^v(2=2x;?+4M1WxCbeheVcQJJF1y}vz zKl=dHcVEiB$DZK8!{4LK06tp8iznB6 z6Z%ZpoFL1nTc4B7X6qZzKl^|WaO~9dpVZpvT`SaMv|7eEM`m-f+>jb2cY;?gVH+(1 zW3US1KR6fP8$F(ikaEElao(Biy;EQkubRCd=_7KHMZT4t8d-GiKn;p;w%Xx zt7qeG*nn*(fMTMU#`ayDc=8zx@tpagLGZ+2lMHWkm<9n(9EpM02%!g{q`t>QvqSs% zp+D>yu;uXK)<;*L|GQO@KTg%)*_@_kOwY2Ob*6`ghW{#$!%vgvVW35IXhDU7014-Q zawF&7`3JxW3NXY=U;l4RJpDKUB>*zojNW(!>;CH|;3NeY=Fo#*=fsDe=*0;gO4nS# zx<0xwnRPP?2IrZ_uC>R)2pR&!!(>BL4 z$B|a^&IcwYW_ktyeCHo`fB6^3&iQ!53)Yz|r=GM=PGqe=dPtj_?!4^kb*A+FlRhFUJg|EgM>l@~nQnFUmkGbWgR3avAvhqW%v0NU@XdRF7c9(h=TE z8NVA>qQvtr?cqE3+=Vw;#NjFtgX48BqeR$^13|PP1|f4wE6)RO?W(`Hcgx}5x-lB~ z;;66xrq*G=HU-NVxpU!@CKGQ6RarVKg3N3aNr zhhm{OO^rDCH~+v(4?aPdIY7t);qtminGzWW0V2xGJh_t>UVgb72bphJ+Yllm=*MAS ze3h+teVrh)0Axm3o(Ss+@w#yUf`@cpjf2y~(+Vht0ysS2V;5bH3w+2efn z=m|U`05Uo(zwctZ`5EgR8DhXXw8CejLg5`@ve)nI4`U>2r#GuDu@_x3J3;adZ@(xPdtINGsttq zGjwV(di(_E6Om&85JH|he30lz{}b(=+cHohd2v5u1VtSV@Co?GsXE_!YOwh~+=I0_#)2Afq0g`GnIk`yYP$37&i5S)wEdAPaoXoy_?(<=$i` zAR?G-@mGKNH8Q72?m!?b2Ym9#3}eK!F>{APElBKyN*tFsd+kc#l{aNTka=g9q8Q(4 zulE-f(7pjV!m_l($G^W1hXX)?0H1THkrE*kKnb{h*CdziYGD9+16+h*5PDNt8W?>-(YJqCn;J$gq`HKKGw7R1rY2cnBZ) z>;FjklJlV11_1_Y9NByyNACV69)ojQ01D!?$TdbVLjxOuAG|38Y9m97OAdT7&_DWJ zL5>1gqU$b#cV7rhQh*YZ$Akn3Fi;Q_CH>&J@Se3modQ%zWvVv?rr!-Rv0*9YwQGPT z1sEd!g$wcS?ym^LoZO0BW8+cwyk&2?6RbwzrM^=<1)PFa=v@Q}0AeqhFwd@~cyW+%#n|{dpb{20L$2rG;|qM2U^Wy;ujt__$&N5YU3C7CB-7 zNpi~N!OCe3cW>E}Ey#e<;<5LI#zWE!wGQhP=YZZ~2tbBcuJUuczltf9A?wyPGQg2d zf6I|CZble_UUY{`AN~^6t1pI`76k^%G@seY&TIc|x8WNAQtGVu_n+XsU;Jg5ngIoZ z0GD>ye(`T(r%nMuZ&3sX>J-nqBInR}g$Ce>1sUKE51!>Y#dR`rYjIYK3RE3kpycFh zMlmZE0k-ccG5e^aDCOS5mlmHSt4dT$B`7Ift7)GVF^w_;Sik@YmRF+=V?hi{y2j#R zsL)zHjQ`vTgn$C-5T~d;Oa8J_YhTFZ&oY%gA%vJq5IXx34?azpO3pzh^Tt z(LzuF+;EBN(|h;;5f*TOAan@%?|*Y2*}(tBBsl;s_6bfUT#1jvU;zaT5sy9n0^hy+ ztH@NlTdUwk%UqZ=xP*Xg&eE77&f#(kd5$lJtktP3*nrp%H+Y$Y+))@{y9V?t#UrG- z`xv{wGAqa`LILss)*V(n%H&9I*5KhW{*PdIx&IAU`8C=9R;$t{{$OlpbCci9+Rz`46-2wY zz^pBDrqw>JVcmjTKxts8^ZMO4OkOIHd~=h8kt&!=Yp-^AS;^G(Q%|aLk8C zK#h?3u(*EnR|O-8I4Yl zia01*fOUldfksOfWWaB1ylLrse(s9pS))a6EvD!Mb5sGe;M)rd3gU7kw>WD#oxAUi zEc?W@A71vgN56OUj12IWRtLm6@^+{AG3PQ=K~-N@yYT-P`g%K5k-~%wtSxdE=ZMCJ zYQUKpkWDrWtCT!R$ZU?}4(BYWLvesZ=Sf#U=ba9E#un-8ME9pZpz~u81)Rm?4z+oa zJ7}Thj8B1?LkE}J3ogd^0ZCfN^dU@+V#fjQ{#sjsg!9a$Ec?*I=1`N4?6crusO2L zYf4wn2ygJ1W#5jz2~seyIdLk~k`iI1%=FAbef2Pi0SF9;wG0gSVVOR;Inw4u;)#s(y(>YK)$-rhl|*^EdW zo(Kg*`}$S+CxuAAKu{4faU?cprqg1o(;%5?Zd%YECax+CpW}u8=TzEx|H-qLIyS&#vJljRabwqp#4@V163I0vfh zRQ08|>_0=5N@a^N<_gdAcss)u^A`79v)Nq#mi}w3)oNW+tJVHMM1H{-6X+~>8$o8_ toXbSyk=b1D}V+h2q1s}0tg_0fU6;|I)D3C9&J}u-hXF4 zcfN1To05=(2nCf{!&JnD)`|>@3Ir9z1=Z@3qFq)H3l2!JU2UOtsuN&EgHQq%utrf( z0W%N+A!dMt5Hj#y-gKvP?-~2s-?^9DEYy}5^pARzFZ)b;@9+1`d!G}>*59D%+KHB7 zzQWMW0o_0b0OBz5qBxug!f106MZai8{)#IfyzlYf2VV!I6#kT^>BqkH-G{-{=OfXw zhOU`*Vm5bsGuYh>kIy*HyK}khkeeyMc3c>?3DdR!Xn>{zL5MI25cvUGtp+@=2Cw1m z@fyu<4Huk;hx29lap*>I5|ZNv!g%}YJHNHz>LiK(paS^81s{5|Zs_l~E$4N%Z59+T z+p9_W z^3Z@BmqvJv_j|@h&^Lb!a~93V(4vDeI)5QF3i0X5N$jc2$Q)`eHK&?e@t}B7JiY7! z_})9;X|K5SV|Vq=AG^DM!Mw%gkr9;o2w<=uv94p?maUj*HZd@FE=CtE!~lWx2-toU z`g&39??JAo2Zf$8@}(kjr4n+~YQ9)Pp;YEGB@_or$n&}4oB{NW41#lEWWhoVj*Vix z;$hu}&4>*R<-q}&Tk)WHQ9LQ$6pt^90KR|G#}DrxdgZRZc?X?Y8X7{Ow+y$GL#CL; z3^l%b{jU(&Hi0jownqti0Quft1zf=9%O$!(fq-+!=JLqob14-RWq2u~e8uZ~27A`` z&mHY6^!1S8JS^9RYn#~n{9Ziv_(r${IJ{sU%F3L{P=So4U{jFUET7M2;bcfzm*k|B zabah&BnKIFFQ0{*p+NGg4~4?>Lb*tgJt)yCh7OvG3mQuxyyBgQc^t0kFSDN`Hw^66&NFTEtd25E&s1!yxGh*lIeDbv3UJjkFiQlaD64Mykn z>o&rsx%N@(dHS+TtuftEBMxi@-nC(v7IbP!w+KQLAZ!yr@M}Plq{M595krq7#J(;9 z(hZVop+WwQV#ypTb0zU0_69N5(;bdJ`8Wzb&mjyXu8S;;)U=~`1u-0b=FQiw{Y@B+ zYp%KGHw3(o^p*z7o5~||j7%{vrfL~FCys$Qzy?ac5r(4qd|#RVTtFu4rY7yC7GPQ? zOqXPu1a3k%jTDq6S|k}H4bUL~Q_Fy~Mk=8cx+a2>W1^I+3Ba)oRAwruO-*CY*c>F# zVJd6kJnRI`vJmF-qeBCka#8ZP#er4bK@ni*w(Z!l zbC;yHB7HMQ>&WKZ)VCc)4s-=xX`bL=SkM%3gP=(eAd1iit;=Z}eWx@?Pm>g`fwrN5 z#8#{TiS(V={X87gLWzoq+k#0*O2~#`8c`U&?cmc-`IrB*0Peo{iko^y247FjN`JkL$h}kc$?aHY#7S#*~f6qRLh1iC0a>;owj=_)Yh`x z<$N8PAa37F((9c9FlNg$sURnJk7JOoNW3C0o#1r}2NXPe^sT*R`GP~vI&Jy?ngwn@ z@A9{m2Kp|{^^{<`83jNlfvQ5I5IeR#i;&FZ8R?yD1{Sq#6Rc&VrmmYZxuPyMqDaBZ zi7>?uY)P6t*9nZ>V`VLAZ-OE5S(40Q5u|0Ca2;_u;l&Rl?AZDYv^Wx830m1GMeGG*d8N)Qoz62+L<^*mZpgsiITT?dXWS|=GWQmsp$ zgd}*nz`EM+X1*8wy7#*`wT=)H36nC12tiqasl&1y;U!ndBZwm5F^R=3gm+>PEDDpt zrZE0m0o-=(2hL%!@kWQzG;CY$a3E433zewV!o;2l$@8|#2v+LnrsU_2&uNOfX0M?O zD3MltnC**?!A8!z0_(a)cT66MZ*xYOo55Llu?di|h{e$!M9rq~Ox^_pbOVVgjV^iQ|G>4H{P z5sP1U0q^^h^eWd$i8_~Kb-g|{T%${-7XDd=I#;pXfAaRD6 z1RF65RseT&ECB!h){8&nl=4N>wIzpYif5_L)DkrUD1@2mS%N@X510h6EI`bW;Gyjk zy)BFPvpL=~p&{;STR@^qTDy(n_Wh2)(sND5BDic8wi+vuIfOdaX6S5%A6tSldtqjB z3J3$?T`)j0h+tC~6;_40BLLp8KVsM!K!Fi{sjZ-`{T9us<)cceGU%n+Hwj)Q*SnRP zOp?GZmOxeG>5UtKRscO;f}RKsj@ZUh66+kx;8=+t;;GG> zB$zt+f&kG$Vk-jBlq+ayuv5G_4tcGL%aV7&KrDiZ*aRc73g(UrD4$xOYpIk%GNJp5 z!4Qdx{=Sc(QHSSwu*rY~JVWbh9uVM2blABfp4++=CtY+twvX>Yk@4c^x89Cd9rqe& z)oCQ%l-Ko>cGJ;%5~Z5g3I6fbD{=CB&PTPbp!g!0 za9sypqb_8*kb4@(j&ze#q!@`+Fn0uiFlwot7*a#sluj`<6Nf&crpMG$;WG*Hj%Ys( zdI?Bs@>Kh-p8EG`A9$~T|HM^S;kxUu$4N`i!R)HXp|fA;x4QK}m!uyEykq_ngr}!* z;)Um-5e72WwV(YgPP^<9Y+QCPY|bCCkJJaCMw3o@)Md-9R;iLI$i{#{@VaRu=KYw* zzUK*6V(tb(uT@9AG7VEGDTQ&6N{@TDyPkDgm?Wx#w`@ zl~-cJh7EFl|H_B4^xSueOC|f3!QH?JbOpfi?x*4Z@%#wS@7)W#ki%0?J%w%CwjreOkZ~~1bd1E1ep<(;kr2Elz)jtPYgu?^_lyFG zLM8)?*P%lMP;WI*^_mm)R&rrS0J!>*dn=z>aOym7(EEa+&%DQBg`*@EgaLL|XE9iw z(`4Q43V1y=e*+Q&+6xp2z)~h7YyNyb&sGz#d>Cb>M6^Pn8KkH+Y4)x9q!Bkr$I9j< zSmr3e&RE)n&N*^YniITqYOkhKzEps=4N29UuDM~?v+ii21k1EUu&pQzqd2)G9#1}a z^|qfh_bG(h7v6XIQAd5$@Xg~R4GZg0t4@hNJ-0mgpSq>HrqNA%9FW8|j@6k8Bsk#} zuSDYAf)*_%%iP_f2K-8m*AD~gO~hUkzx5|eT=7Yqu=r2#?G^WcmI=xp4aS3{?&0`@ z4+S_b)29eu2r4B@ERe!TH#N-b8StNZq6xcodu6>b_<^*0wO(i-O4P^IA#fk`ueej0c&7zkS?(ohGk*t39kpH zr|1GfSKD3GFTR${u+ORZ@KqF#TVz~ z^1OI(|Jv4!h($+0$6YiKf|koX`-Nen;s;grg_`>#KPldk%ZFbn|8 zKYlIBrGB&+A4FYAXOWa1?`r_DTxvFblzaNI{PJsX#^*mF;B9L5u8)2iuxZ}2GvY;3 zG$rU*rDOu5T@dNEiP*&T0QO%1e{;m2zI}9Hj;qQ{!!pv+7wrX4r*uVXwy_qWNsz}K zb|iLv<#s&uEAG`TSd7updGIGDgxOBij|h}a*Z6$chTd8b;K-JeYJ|LH84Io&OE*o6BJH8@)0X-yAE{6P6gfKwPs8F zIA>b)`96${&BY+&NjBe*0!%keg4czCMAtj&Pc49i?rIcJb%6v!ofwQ0_UpySJLjH| zVQw9!>8B;9*4f$VuIz-8_L4P<((BY};I%MI0c_g589)5-5Aon*YcM-h!l9R(kJE4X z3@*CktGIOeO}O-quM6>5uAP44r})fym>ntO!N*tQzwTdwO12tprIGt*f2#5!!7 znZ%J7oQ31gIa6MZb$)32i2OiWw0*b0yk9utl{kpBu0y4!3DZ`&n1d_f~`fbb0Ums(U<0C+Fi1tJly!WK#3O4!OSk<1m##8TVy znB}m#CYoQf_EAh1EWGb4Uq*4DA4$Cd)SAM0#7eI2HKFaB0>qPZ85c&mEaT-Y3#Y#C zT{z~oi`CmNRgaJydDG6x^bkvWEb#iMk9#B zMAg%A7$OQHp;#h#Bohinu}F%HNa3@6#}4dHnz-PLpGPs5M`hDiM0;m&&+T{M?>~1f z*9p7eP!M4&*oSyc?(rFUmVH!T8RLR4T#r4mhwaZki&oGQ(2%)FNeVuebAk^Eo^3+D zLmmfFnCz~h@sb5_+m44kKMMEw1m6mL4(7||Xh`A&U8#p63=x7y0c?GCI}U%#8;~_E zOz>5BGJX$44p+*ostR`$yLtcxii{L2`*?kQO zJR)dHUMM0XEdr^w>hf-|$=%t|Ye6SdyZIKW^V_oR83c7t?nPcxh{x)h-0S?DMA9$$l&C}Bu+l!C@g*RnK*R8Lfm-8Rqz`GLJBEdk{t7z z+~YIyEc-}bjv-^M`OyQ&7YdS!qcBu%Aae()WeQI|$qRgl(!2(0p2us+ZTl^NTQ;w{ zZMNA6tBo4!YMZH97s;mNcdbDMoFtN^^4OdaY+Jh?cYkLY@@@ut$omxH*RT34)_rF= z{`@s3VrqOMHUBQjHQtkF_^k9{Um4@>Ww&A5V;e9sXIS!kth62~@S*U~422&lvKn5> z>ujCmdEqUaAGvM6OW}mS3lCj#-E^(?$&Bm5u`@6YtGyZoV8noFf@(^)N61`Xsf<^1 z#rA{m-HGko9XjW&=U|YTpjw#~pA5ouum0ElrhH$PuC{H%;ke`66ZqQKzJ_0|T8mR( zbu`EBl_hVG#1ia$wyiiywchejr;Ahxyi%!PrdmVI_dcgE{7#FZn>Rl4x0k%?#1Cd1 zx7W2SnDX)`P6Lq@0kI>MnMneH`ML&*GOWSL5-=)}mlIIQj4+v3O*@SVJ5GexzJ45ub0w5y3Z6 zqjgqmHB_q=OjoNIuU4jRdUEB}2joM^YO{Iz_{{XfmMprB^dp5lDRdB7kwkoppgM1D zdU6FEI&u(7OkrDh@5GjM>#_2oN8sji=pXDwA4}byQn~%DASAO)vp$%doW$OVDKu%q zec3#Y99x8i!($lb%CJ<(tD;7kz68NQ0S^P3zc0RCWuIwU*#6<^law_B&f1{lt zC#GMoVef2(nxDZ$wf6q+ZeI1xm+ec@rH3B#rh=2bcd%H}da0qJdf}+7KrLsL6%c^D z!%rX)Ta$H5TC~I@=IyrT)9SJN7Fk|%rNS^e-x7(pAy#^CzqFAI6t>_seY$216D4Y+WqLAxUaqZ1_2d5esF--FAsoJL7n;|GYO zyp?Dl`e=m_h0sJj2xNn_;(3_zYF?w|fArfMSAOXa_Oa5Rz?c-RSszSN}qZ9E6FO zy_h>w9l?iEely~GUJ(4S<%c&ddusLa1O5L64k!_v{`NzUTVf~L$vi&6v5Z4Z=!=-g zO{4P_iBMYr>FQ2`rC2~56L$P`D~dKHQSwl%B|rP_##N7y*Z6?*`p5q}{Qvs*M*;j% a0RIhv*jPGS>2Wat0000xJHm-CU2ZEw3) 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/pill.png b/app/assets/images/emoji/pill.png new file mode 100755 index 0000000000000000000000000000000000000000..cd84a78ff75b02b4811b09704e6eeea41f1981a5 GIT binary patch literal 5022 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/pineapple.png b/app/assets/images/emoji/pineapple.png new file mode 100755 index 0000000000000000000000000000000000000000..d6f8e28769287d169cf8a8640c4af9a575039d77 GIT binary patch literal 5634 zcmV+d7X9goP)tCWg&%)HS3n$}veMkV=Y>f*ag!<WnS8eS50xG1f#t@{b$in{ z0>-}x08tn`kVsk|z5YKAf9uLW=*zM!+sf`Ul5$+d>ZiqB?vQDlUji7tCjW<07-g+> z1hDz0Vs2z#?$>{10lfCj`U$1PcifD9XR(xfV&8qE+W~A>UT!8N%2NvoVSUc9M0f1Q zzP-W_za6xj4+D(f+LtvPerO1BKd;jpaxAG~}3;I*$U zKGKb%iJp$JGO}za@f|B={JN7A7>2k^n!>iz^23%Zhg4quZ-7hxP32xgiuYJazI*(~ zjibL30In*pv-&r#yW`Tkhd;mPcZPrC$l=EOKKSL$k6e6L=>vrNScoE$8kv;1Md?Tr zRH!qCBea{7V~K+N_V8|T(-rrX-)kl0XE3!Anm^fmZE@%LO_klNd1pB9IY0;@S8idj z`?pJb>`dY@GiBs@HC3}r3f*dm6tMpKG(t)06J3(yn%e1@rB?%z35(pQp=CP$n;;G@ z(+jqj9x-=?o_b;7fPO?NuJb+rj+0N;>a3DX&ZA2|kttsFvC0j0!i=QU`=udN?U-jL z`z#7u+(OXS7+q+b_Bi!aOONbMs@RAOZAgTpv2p_20U>o9c=2z>p5Z8^r60tE^Tv20 zD?S%?_030qSgWtVUPDXZkwf$X!A`iZ5PreE3Vev0jw0Ag9I zyadkGEuSh6#-{x-)sr6r2D>#Sy=JVFWn0)eTeqh}Q9JI_YX-O*71?bDts^lh+a%R* zl2|V|@lcoSkc}Y?%406ao~s}4EQK4T#h0dEY=5k>J^L>0$KA!_-TnG)tqA~w*JR3x ztaW4m2J14XVB|$t2m*aux2KEkrI^-K07CYRq;L&OAf=#J3qWX`vLt02^zC-Q(wum> zOSWV&v?E2W8ZdLHgMma#{Udx9{hH3tRa0Ln2`KMLY)$0df14S!?kTNz)8&4L z!GQ#M7ml55aQH}<&S_29jWH_<(-IH~bfo?%!4t9}<~oS~cCD!wbL&2PN*Q{4u*`1dMzg}(ZIt@VJLvrIRiAm{`%qgWR$ zSD2xoG1p`2l{Oo8Whm!tI&&Z_1AI-?)%2vsuPL;z2&KuuSO&U+b{Jr!CE*g!0Akev zXsvx<8bG{X82c`*{Be4dyhm$MjUxSoG_)Dk;;nuw9_$~?goVLWB3ZN;G(#p&R5^X1 zNi*SM^(7DsK0zl!*alub!geHPUQ*hUq)Wk9l#h)?q$9dsOl7l6anvGc z#&jk_bOfbsHZoyiCk*C~_2_s$VMn1np;Kkg~;D?e5l zcM|qv(lkbNARtos#Hdgcv?D@4qJE}_bzBi8p{qkI2}666RHsAgZ~Bbx%@C`YupQDo z<_zgwm>4UAMXu&kZ zrOAFLn<`~+vK9jH{4BEvTC|pYlKlpy?G}z{;$|#n4~O`Tm`*Lg&KPu?kl&a<+1m5! z(f!9CX}-0lz6$_c^!t759LqQncZAhhh`;YQct{vBqXpMFS@W9ofKyEMJ2Kzzk}g^Z zG&6^qEFP_s+$w0i8IVl5s1VvSKA9nd{#{9?e%>XPU^q~p3Uy(~oz3X$$#o)3d@S^%4-**unXE&3a|*X)Q9aS)#8WlgyhYU0WQPP{ z0Nuq1tw9M;p~4xmNjJksH|yvlF1>1@g!sx2ba#~jyt6L-c}IoN|(P#!8^hz_lGL^_Uxt4Bop;z4`X ziHsu))A8R2s{2&qv^W1hUe%p7^+@c(kLJd;mLD)p`Fq7d_tyUPxgCzQ*Qc_!?%$lj z$=LXHP27{jo+4E?*sw2!?FyPxifrB`l}h3i3v4N+d2e1Yl1tdVtXVWm>cZ^0=(j4n z)Yr4?tXD3-rF7s={#D@{|LNw$_?iLW>*oCaKdar{Wa$y@8xJ<;T6c67Thu0MYUxCs z+L|1HT6-Y zH?WWtO@r!EgxBRe)mIvKf97S~UDc<;*WO>e)pFx6=$@c6W7hm>=ONup-q)B9pYKJ{ z2`6oQFO|2*7LqI;)+C40jJcBCwud^pK;v|Sz1t+Wk87^pkfdxDxO`Uvf)pCSAYH^|L5{OwR!J$v+X~Stq0fjNjanyY~LUmFKb$ZDZ++@ z$ay@w??K{*i+)AhhgW= zn8{)f?Px|)f?XAx#VDXKkRTED)0~bmMr-tXK110ob5)O}nI2~*6@A$xZea4tq1ME! z2Wl68^*LSrB`tw>R-+L%6#9v%z4+pevJS73nbc}MuD{XYvMbXVk>cug z4(p0Zjq_Yd|8SSH zbIkzo+WLj;VB&MnJ*RtJ6)$Yc2sUILHo6IVuHEzfnYA`-zQV$JId5UJixFJ36{@wkzZ@7 zx1Zd<04!X8y)Z9Mrn-k~ntf%>o*{>*7LcUwi4Rv!mGy~-1?qNkohrCm$E z*;dSXK7~v~HjKHflEAW3v~o68AEst{OdB13KG$ZhrWwea7`-Gjj|s}DGNp<@>KMD( zW@%}O*L#u!zGCc>n7w-pwp0YWMqT;_touH9Q*q~-0id;3Mj&f>8xBu~y!cw1mZwRi zZ8|4y)?u)t4?cQPg7;qF;B{k;Rblq+bn*dv-ZwxlpF*@EZ0Ug4&)8^%fi%=SpEv3? z>N3PmK-CwdO*bb>>Wgaz0D$TQhlUac>)-ZUEzQ$ac=&LKt1bx`%*V(;Au}0{PG#7) zDZ|bI$@3>dmh1*$JcT-OhPbMkm{uHm(Wg40*qqnAdt-{tLw%GtCGa9h<|4+nn3M<1 z>ppX5_7iIcKz%-ZJPy!{HIs^AP__U+=9!5OubmFaI+CMHF^8Y`Sqjr6%O-=i#`Izi zoT~HPpEr5rxMa2!A$No%%K<8gaqJ{>Zzi#NCDx7DH0+43)ghCJ$)@DzKfW*j{xtz$ zcHXZpbfPdT6-i&SUc%nA&87V&4JB#U6pjpe--mOQavJI}7v>GhGS7x=k>QeqSu_~6 zV_d(%8>gC7dj{<|WOOWzUn}Gf}X1u7_cVUL@#WY(A z2CAVrd8|gZZ;r}(pOp3}_PGeJz`CSKGOMuDYES=m<2|bm;EP9fGa2*xbS!wi6%z-r z*wfTzK`WbV61J8lwu<=S36DqS4IVxd)3(~&dW$BTgs`DGS$BB!?+v_0h5jLzI+`Oh zRnD9|!F(&Cr(pdMY^X?fj+pFNZ<8KL+_CBa08E3atZ6c@4UR0u$RObM+Z`?(6}X@p=7-Kzus6HUUdL{k{7F0Ma3}a3c(9gKCir5qiu3J0N9B77jWj<}+*_5?s)4vaxIu#1XMp zXe61mQPH{Z6RQqj?o{{rd{Vzva3v)JHY6m+W;K6#B<7h}c;axIckNSLwHu63lTAB3 z`LxALPdkkF*-Qv{=naqW{&1Exo%Yf{Oych(4FYsuKY4 zg_mltBqRCQTu1ZLj88rjGvEL{n66qpzu#fhN#G_0|8O|u;TNks^rLB>-rweAPZBzc z+pclhl!CYwu|8w6eW<|rNS+hQLB6Ct&_&2ZLWtSET*wiIsBW`AJtLPPMEFSl6?swDCO1))g* zKY6H!Xr#G)cbc(`=GgHr&%WMd|M8gSLV(dyB(;co&2Vi1_|_?Xc%y0ju`MJUvJRDu z!Bit=aOB^h6bp4RF~1O;UgbStMJjH8J&cq0%xd$J;eySg_Bq*8G^RWb zE&BKdEM^2389m0bHZ)>JEyax&6gakMk#>9z9c%K~(TI&3yKFXMdb1Hp0hN4;PSj;A z9Z;)j78YW>rvAoXzp6WH2EbQd*4_JW&fhz$q92tUtJsSKmMO_v77d}8jukWW3ZEWV zRD7&Zv((ds0v4+VPd%f#{MVB7FSXg67Q8mu<4{$DA^F{%A@fH9622gxO)z<~HC=DE z|NI>vimrw}yf<~PZHq5Qks`Jv72C#Zz`EgxX-n~eF^72xRX=3^yyAv&o69z(abyBJ z;qmB!Iu{J(IC(s#S_pV;G2-$x=vvI_x};OHSeo@d`L!3?|DE#-$tr2gvA^wm;^}%I zIo?#f(G1W|L{4kMjz&w1g~b%nl*_&$n}-hteDm2VFC3X?`f!s@2kNbWM91a=Bp2s3 zBPomHOMaO74q!NomwxD7{A_-Fw%yl&1I@lu$LVPSn zb1C{Q*ilKKk_o;u50A|YesIdi9PW_ngn07`uVXWmb+98HwR-x_M~~{}ngsyxSI@T& z_u1kj2~<-9wzR;v*p#$*WiI64T#LD=$${e?@IcjI>NSJDy2D69Fsfj-rFd>K;@Bz0 zOGi9jIT$hBO8)6LUuwMgOL;0R-WF#`zb#mKU%##8)aU*U58bvq^;-o?es8`PW*rQ+ zrYw4?nBh>fK?^1p15Wwyddp|M4%vhxlZ+5a7|JAh&X+WoIW zR+_?CuH|xV0b)6gv(f@gz*(+sz}_(6ZrL_q+?{sywlEYz8j2_ZIm=)`K-G_l1PtdL zG!icgnXiV^OKtP9*Cyh>o33|H10LWnX9z^gj+dRv@6yHv#8@I6n-|GaW4F3YZmh*2FB=m}ljRL7cmWiB@vi z5T4!WvK7E`>J_hSg1@lcAK*M2Bxj{QKV0-V^~&`t&77M6dgTtZlB;?YUilEK_rF&G cz}nUS1H%owfl}+y6#xJL07*qoM6N<$f;U+9E&u=k literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/pisces.png b/app/assets/images/emoji/pisces.png new file mode 100755 index 0000000000000000000000000000000000000000..5a2da0a0599cdce96337ab16486002154461edef GIT binary patch literal 4458 zcmZu#cQhOB8dhpnQ^bg(_9z-+gs57zLMg31S`uQb*jj3oTA{Tnp|y7@YVT5`c8M8E zZB=^(4Q_w;o_p>;_mA)W{`ubVJ?A~od7n4hKws-R-Ay_&GP3J%ZS_ZgZ7Z+{EC38*Y`Jn|G3`iNUdXK!0-6E^30tAtGAB)!a z#;&gmV0qc)S3xW}OBgr^aw{rHW1)!CKpo9In`QqCHR5ibR!gjT{xRtMvVnLW>}NXu z)Y6YrQuuLK{)Tsp-wyEyaW071O6)HwS(GrhBSo}b%wIW$Ca?Ph^bWF}`}CIG0E;#) zMU?AVoL$tg%+L4*bx9>Q4ZRhg=>dVRArY>agvyr%fcnpe9Ccvu<#9%Ft@$5R<7#=C z=N&Vtex*yXDy}u~d#9%=Qakj$VG)?nN=c#aZV4(;Tgy&?w0(eygGiZl4@}{{hI8(w zbfgc9p_5zg;gv4m>GVuvg@#p}{FznZZ}w!Fa=rK<>$n)IPNH+wKw&pOuNQxI zsuEYhic3wkC0m_m(#=Tzf=<_#RN4Fw|9?I^5C=nfhkPvE7)9t#cXbsYuwPBA>Z|E0 zvtsz$wnA|9*it4V4VDha0jX^E#GmfbJhPNi%i-ffvGbaQAd?OSbHD6O^-`@48(rqn zx23k)6+QoSM?593yd>Ld=PVYfN&PL+Eg|+ML4caB-wNxaL3tDEli;WK_Q4}2o+P;D z8l&>9vmZNqC)r0Qy%SFt=Q9GY{GcXzOm8yOEAj6uZh)J(f_!*OFNlNwyDLu-TcL$} z-@V$j*lcaY;ajv~NcX9++y6;s*Sj~40aWDtRO1MkVyd#)Z$_LD)OL^5o%-Mg+UOj0 ze)LtUS5qGQe~Msx%yWB6nDk47xXi8jC_kudhwbP6QJF)I@(Ms<*XtWlS=%G(;l;)^ z(aM=W49C!W5%cd)s81rp$aS5S|J}U;iyiN==`2Inq!hj&q%!SON+sbac^x;8%)`(C z5vP(Ovj?hhK{wT^g6LLCk&gYH*%<5Xlqu9)oS$4~*w>DJx5bp3#2U*xMFEwxmdSN{ z1%Fg$i7hjR0;x3VYXi9WM0P-^V2uP4wK>oZx55Iwkny-wva(xA>MqucAws-k+`vp{ zE7>R}W1HJD1&m2sk9RfkZz{x0BD;yR6$Ty;CY8AtTJLZlF3IkwHWLmdu-j?w6%M!G zQoi#(2f{GBhZ~n0Pii6YT0}gK&N@aVxCJTB*)`b5Ao%-^08Z*)s~^IH-i=5 z(rPxFw!b@%+?&d1(`d*avnf1kx$+HV2WUK-$HkiI4(KIFKYLY@r-Sgyz0AE3VNSD% zNql1Du9Yd#O4ni3(w9$P1rLyy9kwUO^<}PS-?214Szs> z58gE`D>9!cWsFEOXG7b7!<6foIi-cvN@~kTFAdX7(6U+~ISDnXI1lGS4(i|^&SVXN zM|_9OFCgDRd5kIhfWTSbbv%#4o%<*4xuzV46NzO>cb`YNb-&eP`%4tjvz~1C5!d*m z?K2Db4GD&*_C3?4ky_yZn3?vu&y5d}XE*MyrzfLf`TCYmsxmi!caDnX?<#j>z=(FW2WU$ra-nNY=J@2A0Pt z!_WBEP0#Cp%^h4n1GqT?Uo>Nn0~Uc+*rbv?Oz=BTY)gSh^{}qvAi;?MJ#~T|3jV5m zeAUe3k4$xtqDYuA*qW*47s(&w5F8{$R|dbrq4%s2q79vTrwLXLL{Kf80(yX`4sDxW zX{UvtN#3Osu^&|Yrs5wppSH0%8;u;H5#T zLXk4y2PI1PfekBDl$|D_{*HF%7=E|>;1L^6w-?lpkfNdzVqa|>LelK!t{V}u6|Get zG!-SQWy0Xpf87b&cjMVrII-8fM!&61QL6Jha~^9j49k5Jh_ZV$VkqZ|ZLKO7iG0RW zL^+LV*9onY3+a>KNXh_@_BQs!M#3c7FbZVT4rJF%pC+i#+dfOy?L-H>?;p8Xdh#lJ zqhE-ZIfwGrpwugEwQQP_Rx9`Qc`XHVVm(U0)&Ve}k=T7=|APwHg$JsMGfy7RB!BB; z`~YOdc}^H+e;#v{=KUGZBhR2GW%TG**fiYd%4x`q;1T|h+Q_DUhUNP)IYkhQf_YtK zd9tsc?EvNjEN{P0kz%Z#M!jT8!imlh2OHZEmgw$&1lQ;f)vnF)(Ahth`_9bzmrb3Yc7HLeey-A^8H^af zSkv~@{45lG?#niuLcJdPwyl?tcHn)skpGjJR=pipokDIj*iJ<%I({-6yxt_B+q1m; zsC510O1v)=M81IPukz30%@4{6JmezjpRsTbEpP7R4k6Wqf9r1_Schh>s!;Gs(Yhws zFnKJz2hM9CP~IY$E%FD0&NV<@ZG_=zEw@l8|*`^Gi9gLKL4cwOPPK4F%a zP{wi8sx9-Zr|TKXV6l~ zwh;aqOL~>elSM%3TRGd5--4tuocKrWm*UU5`Hjm#XIw(oVgtiVYxvql#?O0>g0$0C z(l0n}3Da+DzLC!W-j@rLrJ!bk`Gw9(D1BmLOg)|kjnANU+!q-sAz)vTE$^=s_Me?W zRuAi*2I56!1mVm<*A5P^im>Yp@fwYGDKMfeV}uwLu!2pDF>s8=qSrvQ2m3ISwv}aK zeO$IKO=IcLt38`JE>fxDU_r!ThJ|%v9!wI%_T!J=HOR(4^aIymG13xs&TaATM~bCk{$1A_|E=RVKkw75|H;gAUSA+a@fPbwF};9 zyv3j~`1_(A6prVNDgpu_l1z<|kcL<>`V9ACbZo*qP5rr*%2~Cj(sQB5t@E}XWClm$ zp4sUSvAlxMb~oxPR^=IbWsmS(6o#s!6Cx3U)mb-8=b-Z{Sq%j@CipVeEG*ag1YeFm ztK|a{0LScS5@)LoYI5IRf71unu5A8R`twLKgQmEom3hCpV|3mMcU1d=XE=T_C%`KS z<1I&@o%zVP@x|nJT|i$yvdY%m~2B9_t#&Tj=xig90UFDg&n}opnJ$b^72B$MiVBO(nPTOXLiTA{fh4ag^&MZG7$BaRsJ->-B zNsQ{Y4@w*u)C;^GlI7hpgb#_FoR6kxa-I@|$F#Jlx<2(`81no*wf;uBqOs4-|9rth zA%QNhk-KJx>&u2u-NF~i4~iNqwA5-a*gTUQmex{hwfJVdreu#Sh1kvo+G5z9v}#FX zxZ&c96(WVxtepksG%du};R$9nq{1TK3=K0i^V+uM9didVYd+5pDSISwSsR5xD3VK6 zxwI`nIPEs>wn*LDqoi|&~wzlxX zX8{!3C~i8TyXq!#?Ij)l@edo#3ey3|%!{+%W?sc8ufcpv24Q+~-Pf%*sf|4l?zXZ9 znIl(P>-`=Y?D6J&UxF+{j0c}^;?|w?J{_bJi8fL3+14z+@*)cfdBZVh*b4oLt@n04 zHXMT1f1WdBeS{|Y8$rF4SHCO`zsGWT4XlUMs@(q|M=<3!AVqcN5-6jeXcn-<_xMV0 zYM7XPSj8U~iO+n-PxRGl#WUh#ebrf`@%WX_=mtm+20+8N?xocPJwu$+bW+H;<A_XoRrb*L)t?dB!yRnx?!;tYT|mW z{2!n5-PyVi@g*O;DwuezxOH$ks`VtAW^>^0yF$j7IBC_b)3MNPGcVJs%WulQ5&AU^ z{P%XdTWI12sAQEY6HmP{Fk2)BlLC?UT~)E#{;Q?**02q%S@Wmrqw~xcC+aPAC?}WQ zq#r*P0Eb#<3(?OV?@=-qWOalJYKHC~@L(b!5NP)|Gj?gD1E6z7z-zQ&#hCucBV&Zi zWph@Vw0|$I{hU}!^@i(LOm&vrXhf^yjWcABN6#!M>!+ts1VoaxyK@S}kF@`15>YV% zhXMCJ$pT{VO$qTQ--s9KO_3KBd2@BdnI4LoOSI_j-tRl1OFnl(ky`1mgolbG|EE<0 z1Z?fV3c|~GDW+&i;S|cJ>)i0mhg8JLi2%RSdFkfU3+wxrL2EPjhksm5{Cq7f`rkzW z#Fu(tYQ`H3N~O?5k;5aEIMjlvEL9fWyL0CfoR$wfRl@iK1$f3xYOY$srM&X05;_<&b6f(GmzWOIMo3MWY`LV6g literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/pizza.png b/app/assets/images/emoji/pizza.png new file mode 100755 index 0000000000000000000000000000000000000000..460367d02cd70cca7f4ab509bcf4a145d7e895e6 GIT binary patch literal 5273 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/plus1.png b/app/assets/images/emoji/plus1.png new file mode 100755 index 0000000000000000000000000000000000000000..81786c1d8f5ed810fd8351f74996f9b64dbf5ffb GIT binary patch literal 5075 zcmV;^6D;hBP)1wkT1;vFZL6nfhq`Rl5ySgsNZn{^3xN@MIdEud|PMyv7*881PRqSh@efHT)UO9QB zeDTcDuReMHv1^~5e=_~z^=JUWlu;XPfKY z_JOT~W^?Nx2M%wsdH7IseRK2aauoyS4&99| z-8(nf*gRz;GS~1LZw=!T%8^}4dQl<%6gM}vq8Jlq}}bZ zR;^ur_w;>7`JZLjLs`?kBMic76o*7%L{N#)fnD6xXj28}n2aZkc7}GRKX@BBw=xOH zoLUb&8(Pm|jai^E#-OdnhK8sd6PIF2)iQA$oqFr3yEj)R0fMV(V?-;3GE=ky0Rcb( z4ii{{z$c7D)=F!!cU>O`uC7D^a!o8sp_N970tAO3G6NhAZ4I99;aMLq@DbzRzcL9( z)7;ZaKomHKhywuyAd7M3P)cEpV2#1$`PQne0U|~2iOAyOUnU_anW8jWDJY6EpjN^F zL^J?6{!`B3a1<08(5qko&bfkx5CH_7`=?EdxdnMLAx+YJWfI_=ihPJRX4Dztzz)-!=0pp8WYB+W4? z=y48%FDXytID1lRAAO-Xw_ z#{Jt2Z{MOnEq-S@HW($>e)wbX6HqLD3!HeMbG}xu9}B_|&lp5$oPr|H$@7fKc*JPX zW4AXoVK87cO6cvT-~QfD20*dY33z||!9(p<^Sx5FLKsDOzK78otrbcel+l2q$O|UP zgmlVioD6@tF}wn#K)%!oh~l-6YK=yIkLRa<+5J@lchD_ zwe4eJwNblVZ?%}kKZ-*F;~`2R+8_YVQ8;j-aI-OOK@;0q$OqTX*a3hXiZg#r& zmTFbvIKsCc+V|#9KhK!g?~o}l15gSPC<=FVQM_Bq1bq11!*{hht#|6p2BozUVH{(s zB_#Cb(Vtg812-ctkfMMh16Qz{X5RtXQvMUXc;?Y+qusdD+UWjWtd+#bah>PC_UgT7 zr6`d@QVdB^mL*%+0KtLm01{$23J@bc#mdEi0B1o0IJyKr*vZXDE66#3jyVL05GnRW zfD_v>EITnJ%VtbT6lcVl>7HI|UtU$d_rHhfLBj(!WdZ5okE$kKz4x!*zf|`Cd~AKY z(^69)Y2m6~)c>`VSCA+RCMruF;YVJl9L zt&N}zUVQo6(f_*w@Z!VUeyH>E*>mSU+3T-SyWJwE>G6QW)HT2E0+~czNr9;X@>fYr zMI2EXC6nK}*uDJxXCD3d`RgBl((=5ggs3i|S?Zal;c#1B)%>p#LewI!^KKsf!(aa4 zAd8cmd6s>vn1!!=^$ype6iQ>QwJ%p(QcE|ZGdlBzcv-(R1id38-F|n1mh(b&%=m< z(Gk`WJ^9RM$y?u`5+)XoO~O#~gPPRUP~gQ^c7r&h3i}j!PI;123*|Q24xCzlskoXx z^o3jW`~O5FR#yPO#CW{5w%&fR(eD0ntJ}NaH$BHPEsj@cI^PI_!QXwp|Kq*AgMW>J z^wr<_^l$$8&h?Mp9T4;oVzADF{hEEhFROU8iw#_&rglwrJn$M=cci}S^e}i7X z{ex8%z;AHY*E|2b_P_(rY;JGCjXUId9&cRN>~?Nhf3U!_Dc>-yu7FPK{9pCAHlI0z_jPDsxPo(i zpCHR|%n4ADG^pR}P`lUPG+mE8d7wo6wx>#6wiKu$f|Oc#gC{;U2&m8TUxWdBKoo@} z;0@3OTii-5C=SSBSz2nfUyZA(o@%~UMShGE7M9ty;PVV2Nl+$gXJrid(@%e_?YCPm ztZ#17`o=o-*Vf2i?;xg}G_>TUR^&cK$0k5;B-g3riw#-k84?h zN|o@c3REiKJ4XIFMPbNFeD3+@Y3KT5RFow*Mq9sjg)SkVN8=+3#}i7UfO3RP2A9qd z8X{K~2N;vk{X`{dDoBuJyL9GE3!!Atg*1QRq0R2bH^1}lAFZMQ1MYSa?J71gweY8o z_>?BR6IRe`Sz@gaL&m#i5CBc05?u9(B4FX z;srW`XBDDAi8^~2AR!f6sQoHYFffC7s1k+|9SujcySq#C^u5ooiUF2m+Yj*TYQs_} z&ZI?N>Ymu!PiwI%y+D5|Mnl!`AQbpnQ47X}^{q|W{}Z%MM z14T&8AqzbEtZ5UVY@{itKqH4T?1U_V6<$m>@B=a#_n`o@Z}RMZ;r0t!e3Uo~d6!S% z1wyFUmx2r8j!y_33U$SxW?Lp>41-z4>-cQJ3gb>mZwC@YLheP%C`PRmWMDrM%KDY| zf`Yw5eb>F011j#N0ED~knx;NLDuM4$ink1<8WWa<=VnJJ>j_d}K(%6;p~mLPkmom0 ztxc%TbESkZCewFVDP)~cyK!<~O|pdsRb|dz#dSrVbLuNofUK-9qL9)w6)P*ivJ7V- zurh#U{qhdV)>v2bLPZN^Rp|@C^#Y+QKW3iOrHfqO-PoY<2fH-6yG#8C9wd<`WR$rM zJ#!(sY3f2sXA|WyTF)id0VTjOk5fwGh{DmBLI7wmnNk?%H>7v31cE%KG)OaWYRjlQ zS}Z7PWhpimOR6(KsXRd1y=F$0ixZgD7PJt{ZFGzAY))@{``_u@wd=IKvx8E)gIIK# z2MEqygY~+Oz+M_hsFHiZ17LNL7od#N1j5flnm_@2cL&w(VE*GD?N0t?RSb~&H5GPg z)7GbV(p=;u3D@f6g7i;bIOs|iRC{fuViZ>)nP=tj=A2Gl)EtB1F8$=Y|3T+&pXHtd zZYLGMLYG1nTZJs3K$YC9Qo)#|1;r2?c!_m_=1ER5j4}r>4x_BRd6a(R?P2mRFJ7$| z(8Z>e{%ed<@8N2{&j;oX)SYWkI=#dv`mlX?d;PO=n2$7QGyY%$uzQB!C zi2R=g0b+Q@9bKLkRNyQ_*Aa~T5?aB7<2lrEY?-lm-*#6}nh7XD&_X= ze-#DPFdH)}1?PArO-sLZ$Q9a_x!}}f!UR^4gF#cpC-0>)07+rR(hN|=Fz4_jN~pKC zL0cCemU)PJI}elTx$00nh^-e{0>nnqJpgm=bwSc5^Gwx#3cYzyh5pw}s+~w6X=KLS_9p2$2C~BQ&Hrz%|M8UCH&z3Mi3G zQ9LNHp-O4lb@?DF1g<5Qp}M~3mNmzEORh20Yp&X0l*ZSE%P(3Dlh<*}Y}#D6H<}(D z><{U^H{Yb4YmZQpMr67^X9=W2NsG**gx5HtJfJK}PJxLWtIeh~IT+9w9p-czRPPVt z*Z9d*6_Don6tUDNQL=y}1dp-!L`HAoaTT|qs1-tT#JynL;P|E_ z0iU?01@3b}Q6^}HYg*IvwVR_?@AY0y7*_0w&r)L|zM) zYqq(<1HyC1XE5@!CNy~R9z4)M=f-X=pp+6qWvKv|&8Pvz6tx9q;(6>*^K4V7w%L*U zkQ%ES@WdR?WChJac;sY8^DvfxKGPvUtA>DiFwd$h>)tijsIRLD4i3mvipipwf4Y`{ zLNFLiMl>IffwprR&q5kbLdv-whho4$EIToTNQQgV=(tZPjqyFkcTEY_<`PH~`8}l! zXN`l1$6`JNjd=|SdnF+#3MdW&ie>?YbMOHC3Bbc-IH1wNAq`;tgMHiwLGaTL!mr;A z@}v7vKn?Peyt=*BFrF>5w3EgO9~{mh^mN8)W;PmewKY8&1GSNMW)V#RMu+p1?hHdZ zoQ5~DG;T&g=!HOK@WRi>p}b-*{tm*v5iFKKNl}zSP#}3;GMMclEd~&_O7Z_v(8+{m z;}On0qUmsm>wu;Mq`Sib9Ubn|aBrUu@9xw7U_^si82(}qf91P(W<~JtI(@7QhjUIt?Fy>>-qRL>H;h ztvw-XIYX=gh*^>sL6DaFqcHogpBx6S+?ixD{S83l`&EDk+5oMC+92n_j=QnZa@Jao z(+9S-0c~xdy;C8W!RTz3lm~}Fu|LVgRHvN!#H_@U&+qj8OPekCddo2{_^!3%+U7PC z0iY(|;A%%@7|6tUkO_e#Q>SrROv1E!Z=Q;`Cu#9Nm0^y2cjj#Ak^0!ZFoRSyz(&e8fMHI6VYb peAZg>0P_?+>Qg*G-G79i{{z9j_XC#@`x*cM002ovPDHLkV1iG1tP21D literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/point_down.png b/app/assets/images/emoji/point_down.png new file mode 100755 index 0000000000000000000000000000000000000000..658c6d91875c8d13a3be0a9785238586133c436f GIT binary patch literal 3225 zcmV;K3}*9*P)$hiy&_YB5 zKP2KM8SD>dhRc08zxlpzzH_(~M1&vZ!(o0b;76Dr3-Er>0zUTe^v8VH`=v1OeliS$ zS>JWxx&n^l0t7$+#u$sz8cAvv<3zruNxz^6(O3WajrP?Y83Dg?dis|?{hos~-E4gI z*r5X-Id$^H?3ptsapv4<<}6O1JA>2bd3@wyoO$Fd&hYh_v;5wv2WC$_aO4B`&rJVe zt=U}o)cKij?l=J-J|@CyDg64(-boxidI(1!JkC6bLnn^o(D7rq|L9S?>lkx%#F1<~ zb_|CfIDsQ4AHwldCvp6t2XW-^K{OlnpZ&!7*>CKq6lm6G-dEpK!~XmBWBe0KqExLRC=>wKLz1eWd*Xm7{_S;&c7y=mb02Ls zC(xMMi{@k#6O9R!D;4;@2jRN_!v+{@Aj23C@t_psAcp68&;&%W#9F(J_~89#0lc^) z1USMuSFV&%t(H+LS5Pd32uekGryjcp@hMU0_TBW!Gfjcmhrs!u4GEfzJepjHaDZ1U({C z&L*k>V;Dfl6i@~ru}K=`L4{ zY{y{)kh`GqS}2geC-_Bh0mQu?{`Jk<^Ma2ZAs|k5SH>}996=>9l$20ffwTsqn2{Mq z*gNhCfEZ_Eeo@NA+3%Ca+Y8sfW<~L_6N;dSrMxoi^&cO0x`-w^s8-6LavAWQtOlei zb4{s@1acg>06+#LCCpHQjJ6#kv_>^>ssQv(Nda2wr~lCHbus9)ZO%Ks56AVgJM6kZ z5CC5OC?o(%11Y1)MuZ!92>cL15Te>>;^9Zme(>q{pZMZVX@uy-h4t?|*etX>-=A{4 zAe*SsAQ1qb&p25NAjYia=K?Is7`TN11(sAbgqb5pu)4Z>@iXr|y!K}=TzO`@3(!pJ z2jREFa`l22gm63;!Ve&-1(>|%D*%E3vms#Y(P$X*SyHWtqU)fk4Y$z8(QB_i{nVoe z=(+#7{yW<_1r#G^rW+Ru+ztnv`>tPrs1%S2f+m6@fEYdg_{-1D*l5oRK1!2yZmHje zLq`vzQ3;>9`0fM$yln*#A0IzA^J(tjP^#78`2pO(wZ%>tvWD+s+*C| zv%HC!DPAz~V(JjDEz02sK6!3tb-P9Ys^!9GE44i+6pQeE7Y+eJWcf9o`eF>^nqhj4%wSyL00##8UU|1Y+kfL}a6TdGyc2g{WbT+f5!x|vlC zP~Q8vn?-=I`Ph))vjq4KO3ga<&fJITebd;tw}CM5er?+cr~!`^O9d1PMFfElH=nc+ zch&$jCV@7ahu9>68968gs5cszm~5cgoJ6Bu!RJ1B`d7D=06}!V7>4jdKU@1V06{3a z^Q^NjHb;Z_eh&6YGN0O30yykX_@NKi^=ttH0P7%;d9#yG zl>oe>R2Y}wzz;lxg#g83fdz1#@!g-=HUb16z9VM*tm|W7Avh3ZfH=<3luH<|{@*_p zfV_ryJ_3&=1isy5sa8w)tq+}jY`a8&3)k_GFZMtLB4hh{0(dllQh<~|YOI9ubg*N_ zX1TclFYw@b0YV-tl``rR69`@U%JvapAjWzE2x9;O3~4|(Rs_-%kc_5{nZtP}_6fG8 zc%BQ-aZxN3(43sYo?`LH=Rf}b3)?|}AOeB1yG@!g#ApUEqmhUKpwmo*5dbzv!8l-O zLy!PG-(vv|3kXn~sA1oMS%`l7E89YVCL@h8&_=L~t$ctqT zzE2uB5O7=pkUcA-6^26enQ0w1d(mE%hfWP(|a+|sN)My{>*P~r2tA&x)I9+ zaVilfDPox-WmK9%ld;hNB8w2rMkG+4@iw{{H4-86C}8YovVK5m1to_NJo>I{dxA=> z%5Cxt93%f|D+QQVKYgt~j4|vFF^FO$ae~1xLc&rMi!dfj4a3+-A%ciwK&p+q3rGzN zGdPD*SqNT z2I%&NOc(v`0K-9qA$%Y!6{yj(zJJ%x@UL{TzS zDzTr3F?R2;PzX^fk5XYDbg%a(TPA=}E9>1qUB1=AEoNoqHf}AgptZV&cBjWO1{jQ@ zgGKZQqj6xRBr=7R5;{#F2YtkG3==0dD2ei3LMkX0wzk&3F&xAs`P?WC0RoBvf^reH zW`k2A*#GQDA3u4|1rU)H@OS@v>r1V6=UWT&S1~`ofGd}-;M)9kv{qWUy|!*?x4USs zuG_!+b$WetM+_oFEMm~@W7z8;WeGY}00?9VI#Dbp;>hZ%VUi}p;n0dorG^2)xDMPP zK(SgwnySxk)rN>1@mDWh{oQ|jW#PiVy)yr~zx>u4Pt0AOzj2vGT%Es$#l>YT-dx7@ ztJiV!+D)`tYgl6`>+2o#y2EVjtlQ#gl!hT;n<^P6hzI;W8|?I>{(7f_{xHHIP7n@zxnz{zw_qR=jYyfd+E~LC0v?& z3$M>zp1b_kWh`8o$Mx%rSYBMhN{gdpX$hUxHsUyeN+h&487!pV>tb!axBS{t@A=!e zIf59rf$sVUPN`9yiDEdOZv-Frd{>x=ln|nq%S@S&@tELmUb^yS0MCz$o~niA3-5X0 znMS4X6XkNr4{8(t*w2sF=lH7Y?hG%NLfS#z#oeMC%+DvVB=@Y5odp@ zAyo>cH5@~h)D}Vs;}v26{al>>_IKxB1@Kxv;f?nOL?pLZz~=e@K;6BIbXNrUQlc!C zfzk$s5kw$MCLvMkHh>{R`Gm{)=T#mV-8>4gbpqbG6ap}wE-nB^Yi)CyK(Mb7ChrC{ zZ9Hw_yw3D<0h&pODEfi@ZEy>OXqKQ15sV>Zekczu*xdx$6ZOL&GfnX;W4x zL*3mjfcS_Rn7jajF=VU+0f>9>4Uw%yk&cYrNX_rOMS!dja&~~;Z=Y1+}Y_-XJ9HX4X*AK(`X?cM$uBu!3BD+8spMH|XSB6N5wY1gMfqSBj5 z5+g|@q$RaW;Zz$8+U*tq+Ra6f29aDC#t9f;kbq>0e!igheDjsvUIWalZ{K`lu)dB~YZa}P5x1EZI4v#%FqT~$0s2Na=`Akb zdd~6Or=ngD&BopPt z%rGZnl3m{l=M(KQ!~|p8UtJj<4v%)Or+_s_rLp=Tu@(LfwqmL?M00000 LNkvXXu0mjfAYS$) literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/point_left.png b/app/assets/images/emoji/point_left.png new file mode 100755 index 0000000000000000000000000000000000000000..38a99b43f7f3fb2bae43bca0ea80abbae1485d79 GIT binary patch literal 3085 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 VV|nRLE*Jm+002ovPDHLkV1m6C<*fh! literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/point_up.png b/app/assets/images/emoji/point_up.png new file mode 100755 index 0000000000000000000000000000000000000000..01896e214aaa68dc307a2f9bea3fc3142f593494 GIT binary patch literal 3431 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 JPDHLkV1jXWdW`@8 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/point_up_2.png b/app/assets/images/emoji/point_up_2.png new file mode 100755 index 0000000000000000000000000000000000000000..1cfe73672c0c48159a60bc287c5705f19ac4d873 GIT binary patch literal 3181 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%0ALvtR3uZUPLTtxo# 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/poop.png b/app/assets/images/emoji/poop.png new file mode 100755 index 0000000000000000000000000000000000000000..73a4dc840085c7f42c7464d827751348b58acfba GIT binary patch literal 4754 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/postbox.png b/app/assets/images/emoji/postbox.png new file mode 100755 index 0000000000000000000000000000000000000000..ce04b7008ba911ec11299d8e1504a6872a606b24 GIT binary patch literal 3388 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 VOGe=4;2Zz|002ovPDHLkV1nA7sY3t& literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/poultry_leg.png b/app/assets/images/emoji/poultry_leg.png new file mode 100755 index 0000000000000000000000000000000000000000..43ad8596518e8102620b4ed8bf6a22250b1170fe GIT binary patch literal 4200 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 Z{{eQld7;T9W;Or-002ovPDHLkV1maY`JDg& literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/princess.png b/app/assets/images/emoji/princess.png new file mode 100755 index 0000000000000000000000000000000000000000..1ebb2ce9b13e9ec415872e9a123d4471cd17e5bd GIT binary patch literal 7920 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 Hu0mjfWmpsk literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/purple_heart.png b/app/assets/images/emoji/purple_heart.png new file mode 100755 index 0000000000000000000000000000000000000000..d5f875043f00db01084fb1df635120e286bcab83 GIT binary patch literal 4295 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/purse.png b/app/assets/images/emoji/purse.png new file mode 100755 index 0000000000000000000000000000000000000000..8f06a2b932c55f7bf77168af46dba3c2baa3ba8e GIT binary patch literal 5033 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/pushpin.png b/app/assets/images/emoji/pushpin.png new file mode 100755 index 0000000000000000000000000000000000000000..540c4ecb885c4c28c9f67a98d6bfea6d33affc01 GIT binary patch literal 3793 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 Hu0mjfl_4q) literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/put_litter_in_its_place.png b/app/assets/images/emoji/put_litter_in_its_place.png new file mode 100755 index 0000000000000000000000000000000000000000..c2e350c2dc6b7ce3fa277ad51b11426643c13405 GIT binary patch literal 4091 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 FV1hsPGUEUM literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/rabbit.png b/app/assets/images/emoji/rabbit.png new file mode 100755 index 0000000000000000000000000000000000000000..5cb3ef6f0c6a49c648661eebd66ba2b02fe6fd1f GIT binary patch literal 5677 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 M07*qoM6N<$g6uXvumAu6 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/rage1.png b/app/assets/images/emoji/rage1.png new file mode 100755 index 0000000000000000000000000000000000000000..1506ba4032a549e9cb95ecb0b8767be3454d40bc GIT binary patch literal 1086 zcmV-E1i|}>P)VDU66SmC|jZ!H8ypk#&1*xg2Gbag5FdhH2dH=M5D=RCfCnx{dyKe&n;($x4 zgkimHJ^#R)l@t_ibKx)m000qmQchCQ(0{6XH6owl@fYRRKJ+c>bbl&m)Pj>xdsCrdKDm9-3LLQ%O&Pk4MJ~Ew#dnS|M zjmZQp)9FnYrZU}QEq%jUw8-m%(I^b>3rr>?&lyt=#*7hy(ljmZ!*DdZEZDeVX9eil zj4rRAQc8#rdH(vUl-7)iJ;XsBMIoo7(WUjT3*_dKfKtxAf-%mGAw+9>07uw3R)f9- zgTePCO)(GxazIK#TmU6LZZa4QPAdkhq>BKY7f4wY5EO+F)tNq++A z@WFxtsq7_yJG@BBJ_SXAAVQ(F|Lv1WYp;Q#UjZUu3}f2CSe8|eEWBO2Ja zwMl{$t7}TP+kONQ!4zzJ(_lCr z>NqY6D4Ryg^|~l9CQa?+>jk$Q0+iA;Egee5F$!!|5faBrp)E}jR0#O(*9#(odfdTpF@~_B(42}w6m}PckrR9X0&F>UESGH?$62=9JwIm|TJSK%aaH9x z1Q_3oz=2n%-zY9NzZ^ms;}2&HruQk(dg0I-p+ibh${mymNv2YxJWBsmzAR=aePyOTY zwKo~N?A|*1E!<&Q+uJ6_5c6?07*qoM6N<$ Ef?L|#Qvd(} literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/rage2.png b/app/assets/images/emoji/rage2.png new file mode 100755 index 0000000000000000000000000000000000000000..f792e063b49c70f2e3bdf2bc3ed3ab233c205190 GIT binary patch literal 1098 zcmV-Q1hxB#P)62zDfHVHa3U zQVAxLKT2yckPxL1j9hSDhE~q;3&CJAIj@+k%6kOhvVe1>N(Hpu?aFesa*lKSpjoYU zJG7<~@Bs3l6gJ^pd}z)I5j996CP^t!3Q6obrM$;BAd8Ba6DZOOtVKAANC<>M<9!eW zP*_l;6)=V(22eB&322QC#5S$1O)rpg9NSh(?}dN>8o(B|-jppWrb+ zFF-9IPzYn3!*Qmy3w-;AgT*;xgg`H9AeCSqmX9q+$rw^+j{NvhRX9wgM6dUo`DMZU z@wVX4IRuwCvDx67skJd($BumYf@3|l;t?Vso#3I_Y?=lFN?%@vVI3HTmlsMQXwdtR zR*-zI&2=Eu%A_M{iq!nZguMmo6 z7!HSj1Bb&fpt$f_vFx@W%PtGD?6x3g0>=s=r!>Z^-`fn_%EWmAGH@RmLkJX`!0CU? zf3F}bNJoun+rIpfqh5!Hn literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/rage3.png b/app/assets/images/emoji/rage3.png new file mode 100755 index 0000000000000000000000000000000000000000..58764cbcb3bcbfc88fab9ae50e5a47679494f79e GIT binary patch literal 1119 zcmV-l1fctgP)JEl@NPcSRtzYdTpy7IQ=&flMO>0|L~1MqNG^tz$Osj98yv zF@#PecSRtVRxQVLLbYo;Sv?lid`9MkPeLmW|E+mYG!m_2HvXJxGbahYa6a~wU;qFB zXh9qQypmg6Ta8jEDjo&)e0<48MZrBi|D{`?Qd@bLfu12joQK~#8NwU&i$BS{oR(``zIi=mlJVH$?r z{r`{JcUAVtqnM&eAIX+g)$d3Ts$C~fnM`8h_3JlpqTigJVr?=xIfhBr5>ko{q{Lcw zSWuR6{K|%K&hr(V2ZenV$7OjyK#%PdU+pdF;e86= z&N7tIS|lN5D4LYU1dX*B(Wd~}qlr~zt#e2NvYq)^u=RFXhb*F}MFO?yd#;?}hg_xDovAsBM}bs)#4IX_=4k^~9WwR7P>W36d8 zhnSukzP#X6wgd+E{2XP%B|eou3^|TbXj)Kp9b?|#-ZIv82tzp9%JJluE)3)21@VvsPk;b9r$pCX zT%;*ux3`}^GlrFmi>^!4qHqoZ1oR>xaG?m9;$rcO$n&ZS$yF7?`xF>6BaA`oFj7J& zLWs*tyylByy}wHkpB*PSi?<6f3kWoZF)6iXEYBseTz>h21I?H**u@O=B^XhDNWps{ zv_>1jr%#WMS_|PlcAcAzb_+&lhXwCO5bRE3Hp2xg&#$kSOR=J=7z?W?Ap-gnjMZ$W zlyleDmzOs;)9Js&bb526H3SN~<9-E^2%`i+vjN807(u%t+AoMk`vs$DzW}o!1djE? zL(_cy3IV>67UvKkpkF~GaD*^4)9KaKcjD@5I>m6|Sc&McAc}SiqICrhb^@;z&ev@W zm!8cI9O}e&0XlFTkw6F(Gh+Q4`5!BYhP={@6~%u^002ovPDHLkV1j3^@s$7o literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/rage4.png b/app/assets/images/emoji/rage4.png new file mode 100755 index 0000000000000000000000000000000000000000..c726c94a295f57a22d7af38b53e68a31a15b0176 GIT binary patch literal 1270 zcmV*`{`sr^zq9`S{{H^{{{H^{{{H^r{{8-HAW)?M z00VkSL_t(|UbU8mj^juWhBL|BKn7uX51P&F;4m!0F}?qjT>a|gv?q`4L??feWvScs zwW_Py>Ry$doj&p6#j|JM{L9G+#&&jktKc{V;rr$*d>>0?Jm$73OfTqL-_CQg5RL16-ep(nh-=t1Oa1V2nFXh703Dif?pa0jEH zkb;y@*!Ho3s1MEpg1ZyIjSr=C9JCYXI2jN)4g^_N6bSE90Jq~HpePWI17s5r!uO#i zInkw{C~O7LQuZ+>NuWYABQYtv6xhF^)?vulG7Op^AOT?;t6PB~(8M4~5TXg!MFJS( z+;wXN!{Ni~f`{R-BG_b6gx`rzaPE0;-^Q_05P4o4=eZD4Vh$-p5!>uSfL1Xk&#_Ti z22GyFF~S+mWf`iI=f-^g?E8-h&ejv0RRr4_jf)(k==S#VGRu%qo(BQ4&N7Tek=78? zSKAfAoAm^5DguP#2uXQ+i*3T^QVNl#QbLIuU0zDb2`p3*JXufhq$1cSFUrSQQA`NW zOH-|bAda<8Q_sU#QJ|<0@coM5bUnf8BUQjLvPHA1@mML(ySPwlJVqG8QC5vFt5w+B zTSu_B*Q){na!!fycs@^4r7kW$eNqY|^Z9t3rg0nu5Fnrv0f7qzGQGaW#o}keb;I!b z8p(wr!n+g*F(ZUP=|-dbdt*3Z%+1Ycq;(uG=W7H92gj=kjt>rckF$+y3>QKv-)HQ@ zhnpLp_>sVYR!RuWq6cbtzM9~9tze7tLkgZ}3}Yig5qL9ZjOSrC2xeQgg2Th(cER_D zhrN2X^=yU1y36V17lkWZ5(|C+F1xgvu4mJ*x1-=7Hn;7Gz!oQxL_dP>GY2U(<#!@8iHOM zN6mtxR>8pF2%%}p@>gO?lqH%A$I9+N%PtJ+1%u@dv{nMY6|I+Lw3nVr1?nqt^tj*% z>#xMX;MevS@e_eJV_H|%Z`y}f`rUs8@ARw6`pvcYqW>fqfw%rrS--6o-`>4^xx2eb g>=Ji(Sickg0X5dB4wf$f0RR9107*qoM6N<$f&v~yY5)KL literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/railway_car.png b/app/assets/images/emoji/railway_car.png new file mode 100755 index 0000000000000000000000000000000000000000..22361158fb3a6749ff3bd6d33cc9fa2ff0a48cd7 GIT binary patch literal 3648 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 SM`@7&0000RhL=XxnkwIWZ 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 U)u!m#v;Y7A07*qoM6N<$f{}g2n*aa+ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/raised_hand.png b/app/assets/images/emoji/raised_hand.png new file mode 100755 index 0000000000000000000000000000000000000000..e1741a40e7431a704247b0e3d00480889113b6fe GIT binary patch literal 6177 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/raised_hands.png b/app/assets/images/emoji/raised_hands.png new file mode 100755 index 0000000000000000000000000000000000000000..e03142bdce92e3088e5a521f4ca6ec2b2ed33cfa GIT binary patch literal 5375 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/ram.png b/app/assets/images/emoji/ram.png new file mode 100755 index 0000000000000000000000000000000000000000..5ea7bfbc0d845c6ddc1850cb1957c83b22254060 GIT binary patch literal 6531 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/rat.png b/app/assets/images/emoji/rat.png new file mode 100755 index 0000000000000000000000000000000000000000..1c463dfde641fc9877cbd360f9dc10e027e15044 GIT binary patch literal 5441 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/recycle.png b/app/assets/images/emoji/recycle.png new file mode 100755 index 0000000000000000000000000000000000000000..99104c0e9cd55f67d2099f1da6ba7f7e9eddd9b6 GIT binary patch literal 3704 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/red_car.png b/app/assets/images/emoji/red_car.png new file mode 100755 index 0000000000000000000000000000000000000000..d70a2f06263fa99a8553765a6bfbb8a9a86a5597 GIT binary patch literal 4278 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 Y1rl@nE(@(IKmY&$07*qoM6N<$f=uQ5EC2ui literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/red_circle.png b/app/assets/images/emoji/red_circle.png new file mode 100755 index 0000000000000000000000000000000000000000..b391289b203d6a802ee488582ae05534afcbcafe GIT binary patch literal 3946 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 LNkvXXu0mjfS@i;G literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/relaxed.png b/app/assets/images/emoji/relaxed.png new file mode 100755 index 0000000000000000000000000000000000000000..bbab82d3bb5a809afa49e5781e28aae2ff435eb2 GIT binary patch literal 5455 zcmV-V6|m}wP)2bFkAu_gox;ft(BrFRX)JhYTL24qt#KdT9J{d zwkm_DoxvHj3Jl+%Rsfoh`@Ev6{5ChkZ*}`W1OCr|n4{dT6ERm^#mZP&gW)t0RtXH5 zNEV=U03g(Ct`iD-RoRN=7n$(XZMU)gT2;$YY)7RCiikXSHRq~uX%g{9lgO!2VmeI8 zU`m1*fk*%f<%(Lxwwx?^YHK#tU#2MPoS$1atQg$wv26Y-~|ig`^` zHO6#An6d*`#8@QKwglt=160x6NlJrLlzmv-EyqD_v z?{{*??sx8Q?i_cndyRW7ZVWe;8`F*L-ow3@d(T%y25h-f&aEW;eWfdUecT%p_e4lJ z$5dkC1X0w=%n0Rmv(Q$9YEIt>i z{Q)imECj<5&p-EA00R<(0QE8K{*C0%-$yq56tx5IX#Q3e7VvcU6m{<5%)$!)tq=>HPNc|n1SDcxB}V&%@HyDDoxdfY$-w3!0!7A z`PT1{?b||LkH{u-(vcR8>HN0+b^dDYx0rH9932A!{NtChq`#lrJ9^`blED&jw-9%= z`x7p~tXPkf7l3UbFt^aj;gU1AKmwQw+MK}dXq&L@-^pfLWYbDI+@dy_-9I+Qm1ljA z7mvh*_(bHcVRBA+aha$a;=VrOQ?9@aUI>~Z*(8X}2X^Gr;9b^)C?Z;QCDMH? zvgr=QjAKj%;^sw$^saV{mx;(>n-Cu^{JodZ*M`5t!Iy^|ypZ%QBtGrkNZ%<)J_*R& zwav>H1qz}7HO#=dBuO{&i(4QXr5u$3&RIlyM?2QHipcokm=GThJYY^9;-*SpyskV@ zCh9S5_yxqLT#e~j0qHo1Dd0J31{4{Q*O8tT#HU^jo4x@uLD`nU>bjFPy9xMX5wV9d zAwC@VEm!fuYEN`!GEgF35D|B``;~7-x|TyW;oW0wjEXU_eoTK{m_QU`7Op{S z`-w6k?#rpp=IcKGhWzcf-p;Ln0*5l7nEj8POHXH6KH}h`?zSp|=~{$z3_(7FpgzE| zA7XaA#-6>CjE>IGN^>gZn4!U5mLJoHRAOjk98s&pXd`3ij&b%5Pts^+l#+;r3%gi4 z)Jtby2LLoP#43s)9fK}LqI5sDJ8>q^Ib%Qav2*qA&unB;MAWrIWq<*qD^{_-+!LJ? z_r#cLTV;cEEdx;`uYrTgmB%)0<$)h>Ve>ODGBY(xmS$M1h!LVVVaYLz_`}Q2@$`_B1j`cC3Z1l zYNIY@T$SR17aX zx1XLDi|bi+Vn4KU=53{jt=2-spo#$}uihiV#f{U?SCQ6&wPJeUOJ(a)v z)&2VaH;j=>NQ1%v=KBBHb(~f0khM`)jHyJJl0iyU#KaIa`Q^{{as3w_V0N^@KtC*M zN4aFhG6s)Z#^R*|^e*h9(oq40sp&fPX2!sh7Bpr+g?U>;+voQ2@z4Jy)pATvcNGL0 zwFZ-;PeBY*`CYJdTv!7g)Y(iOQ6Gl)tN5*vuiKu%Vl<;%DHlr$6G^!8V?_JY${wR#DC z-3dqvX${gQ*hv7062QRtG^8z%Ll~e+Phz=v?P5S75962wk^x9ofF|wXQnqe+kw+i= zIX}Gj=Po90y8a?!<70I(yV&zKgJT)&;!?01fgG@f0S6Snm3<`DioQ2`Q_7F0c)1kgZU^cp~H=!>5VDgjLKdI>)xK@?`7kfo3| zV0sKhSlZdi(qj^stcO!_#JJeiG2mDn)3s;o%0K=OHU-v~G$2~u&6>Dms;=srSil4* z+kmVN3hbK&@ZbQUL)06EQ|6ET&jGxEE_x0ytjHFKK!S*ipH+Y&kr{7QkX?}Kih;n4Y?B-V!<&vHn874m;uJA9P0^^7!NPuP1Shl zYzAn6H37Z=#t0aoWWp7pk3Y?nBoQbZ$Q3eW-WCf)0!>SrDv3KT0T%z-RtDCo0a|1U z2p9`wVFC=OMFh{17|L;W0)exDE()Miln4VvK79lO>c=D%Xel&WZ8f0Ygl6V{*OCy7 zVb|`I@Be6;8@@KeHDBDzhi~w@`L+@E4yTX^2W^SCbKJRv*SRs=SZ+)=Heft>OQ5OH z$b2k~hL5eKKGqCSJcIG3IyN8*$nsK4z!|oN{^>XPnmyX+C!s zNY(v~C$_eb=@wC0NJ@q%5we!0K9f@s%d%c!>%NR1ZLYJb&p=JV^LqG1AQ!L-Mm>Xi zCIJrEU)38>;Fvt4;dd|xo};NC>es)v3KOtJ?wxl*m1mk6JrSI7emAF{)lJ`m*cpLU z$U_`G6+?BZ29qh6xz7eqI>vDAXO3m6VTlZ(6gdXV_(aApAD`yQho@OJm~j4UsxXs5 zLj#tCv=8-21T~80xnqG099u9zgXZ1~WR@v^&z&QwKm@8FnF9w}HW(1nE>lihl~S-K~j0T zh3-v3#gho(*c4l^aX^`4!7(|u`5uoeo^QlChIP&r*EeJexdXOEK@{}{?aZi5HlX5N zrvh|{hqpi))}?^>{-v9QowWvJKpsqQs!#PDP_+VeMW@3gVp0j8Sr{L)lCs1-1|2M5F|sFQUasD>>VvatQAr1jUalN9!czhjGr%Z8dpaf)nsSL=TpS0UnXA#yas$L?5 zGODhp5PrrD9y$U{k$!|n;Y2viZ-5EFN-!hHYB8Qsh$xhU7y%9Ehz-2};=RZf>y&|G z1M-924qG65WDnafKEXCfO~t*?L>^RJA1l}podrzzT_TXUV<;4$gAtfR7@&o~1BRKL zGp;5eSpXLanW`ZU6U+`AqR{$-;&+zy@MJcrl|uFdu`5FM%Wy&XX|f2P_HEc?%#KWTc455>h_YmP9<5 z53NXO0rdtH8(pqA25l(&X5=Tcsir`4?h+^pVG7jm+i4#>amc(YZeeV-xEnR%doqGC zp-9Ev0Lrdce;gmMUW+9F=)qkG#kDX5umMb+B$yAH0anlu3n5O$|IJ!ooU^7{#{|@Y zbiU67El|7RF*d*BBz<~GpPp{J)Q=qr6jxe62+|ZO>fy!p;as3YDJs0zVLd%A1?XDX zMYJ#o3BSvW3m=g1QGxih&qDEQDWg;Rv||Elfsy$Ps86NTf4)!e8dz*kk5WSvwi!*r zt)<$cau?216hq%<3cvWdu<|&idx)^Nb8vVmQh4_^n4T6+URlgMQoxgf`1CIfHU=zC zsQR^^*DQ|3F@e)O283l$2c|yuFb|xw-0tY_u`5icc-F{39JU-SQah~qA`^@^K@EK2 ztI(<&u2`>J_*$iZKp`rE4o3Rcf}PI`_uePm`CZ}luUD@5fP$59o_J+=lk;GV^-={* zU2h5SOitMyj>Rzn^}~5Ek^$4(CYgR@r+)KIz4nt)kHK~bMhUPKG66m!^uWILCcah9lWJ6mN#7NZH6hw5|}u&0Yw%}0i!oQ!M2N5$SvzS^Y=v+!Ilh? zSYPb{5eao5z?))I$0)Rf?hfV8uQlBHWq57_bXD7`6q`Y=P_IGD!bMlY@4rKlDfO@h z-{V99uU?wt)w0-zVka&6c+Q3wMb?xm(d3089mj)(96|2B(~^Fs6_d z&}h*k#nz{p0|(mxJENo%mexqdwq5qV%f73310#W<1#kog6ty4>P`&!!^s9HRw*!N5 zeg*J;+Xqn$i!ia*U$Q(kiuBQMGpHOQPY~5m~m2}*a z4mt0|VFyRDWES*p+DHhV;2vyphxrsQBVc39!ONsP^m=^m{9^4 z2ayI@6QIS0d`i=DN8n~uFMa22y6yZE(sxyBQN=Edh?+vwWsr&@WkE_Hc_@;_UE$oPV_NiRamlQfQ0NqG zDq4qp){;*t*;r0}G;ch-O}@VVU-bJSzF}a0I40=jXF$jT+F8&np08u>+@!nGCXcSJ z>R^Y}B^v(X`jEEaY(aCOnBgMLu}%c&a8c880&OT-13LrxwDsveYRQIkm-3I__^^KN zLqF7wz-WLU0VY*dkLrJm1Kq&FpuTEE_gCJ;`4=58Z(Fd)9PjEv)NL>wf>ed51e7Gy z29S^qMFs#?(O{UrYgh6XzRK5>e8w9vF=C&)|2h4a_ub3G^_=NY?MH*A3;3h|eSt2Z z7w7{P06ojP=(_$Q)}FUqE?L+oYvL{=&V;DL6iXs0?j?)?02{zje5$v6pVzE|C!4W4 zI;KxOvP=K{6ZiAz?ipqvT;aiZnDv=o`!_~Jq#UxL2Urk}yMXuuYdQYSCz`d#_vzZM zZdR14rfkA90*S%IMFyZ?GYwmuVw*~HvCBO(T<2KXR4fKH$sfqBbn2G%WS*+~n{@Cv#q=H)Aq$0y49d^ejudr;F_3_mEj}F`3oBP4=A6 zl3V*9s;WM&{$KTP)nls1R?n%OTOFf1R&~tk*wxplzE<@$-xV3KeS@sYrubU6U@r(- z1A-QdWMWJ!yc2=We-4+y$fV&`9k znY9LT9Ud+M9C*VK&p+d_00txg0j7p<1DlCo|2fgY7jeaisAz~sLMp@IWT~iMS#%fQ zR#koH4e;R4Tt&;Q9REGrY_Camr3qRsHWw4jUV>eGC1&XGr`5REJ0!3xFE=+U7e zHk|Pj-h3-21aB3-tAqQpovE`jvohFb2-@2Te(e*O?(;xHBpL;gV}PB2)O#0|!CLI% z4M_7mA(d)Iw%!VMkc`a$oYh76z3Es#A|k`bV?uB|@PJv?!*{an z!Me=s47SBg!?zLq+O?RL1rQE{m;|18%zz{#;whwM0m1TX;g#D#M##7fI9<0)qwfHp z6cP7NnGhTg{Pt`3e6GcANX3-3rNTCm+kvhDdFz|^R5|yek)M8=#j}R(2 zmnIkKhV9qH&o8-?Zzm?ar6QQXKXDbS7qrVSvc1`+^sEd)3j}@d!}NX-h(H7Z5Pr2y zy$`BDfZO*lQUBvaV^A3=Q`%RW+%v2nSo=es1&(S$a4h(1yUF%8b5o`>)s$*a5fluz zy$92^3fv^1h^L=nfDupy=!uitTy z($O*@IL6DGFMp8V$`$OoU>e>QQka~U^-W##Q|(21nn`o$#~tDKN$bk9d~gDpuo`$Xq^2U*3ih=MlEe9D5ry+7E(5AT1TZ~oy&nbX?>vEzhVU^sAaj4%9`d${WI z)A`6p&j10!cxEOzLGsVU;Dk55K|5OGTz)T*F`D9FE#_+MnU-kjCl*InP8)DLpg`PcK;!Jo z*&Sq>vvOU~VlhntHfxYf2FbP}ZVGT9fHn1WA1m?D{X2N@!50`Fm|$*Cmd{=PVX~Pb zOq4)Q&;V7kg;Z^Mvwk2C%7P0f05JI-K7OM@*xTgB% zta&WH?(7cz{-z;f@o8{G1MpaXvW_!yc{$S-0!-Fo(gsQAkRSkChCsk6gNG)0;_1Eo z;?bQP*f&g5N}1h}=Hu6I;PmAI4D1K7ysb7`oE~c)pZU@TzJK!_REiV)-QPaR#*MG? zf%S`7d)8b!XE%Wnh!hD@wOCC$ti@hs$mPQ`|74w>@&5aG5^%s#4KRT1E|@D)1#3*+ zV$&801e4BCDOY&2f0&(nMtEWC0589Kh>6ij3K^k2qqNVN#c%$*kFaWa0S@c{3~0#P zZijZT?%YK*w|gKJA77PrISon5#~i!@RFw%|mx@;)RVbkQpsfDNgeAle>BB zvE7s+m^-h7uU|ih_Kd}qwa$>Y8zFP@wmMF1TbarLt0q98K8(8%@HVmryZa zU5%m2Qf2CEb}NDHo|PkJKwHi%w;4fFf>?tXsfnlzySHJ}d0GMs&OsP~i$EhFf&|t} z8X=EkIjA3xq<;9ZNKAp@F&H@nCLo)dRxL&cl_JDtAGc>n300;l8@PLqW`L|KObfPn_=Ayj>iOrv{cWj zo?9Ek0T@5F&Kw36RFhs+lSAsbh!v`AKc|3E! z>_bNkRM`MC(}0A-h=8J?i36&Rp@}rV|KsI+=Da>fYYPwKZVKhxOQxlRTj*(R3d6){r%Dm7oA^#vIA`Z*O`Hk#P6Rf zB7ir*OM`~@BojMI#MGeC7*#>k@@E@Y@Ym0-XV2)X{PcJ4#~7a#4GcKPmRCxg)N1H% z5dtIRQo^3WnC<-~R;|oHS&usV+qadO7>`-dX(?oc$SGlHYGYn>Ubc=RGvMoSCK=%~ zIIhb%h@r;j7n9e_y+Gs`Q|Hh)npU0g@I;2&Ub+yvPv#egdU)#fr&zmSpZ8Jy>?N~U zE=M$Hg?vf~ET}@pK(P`+0E9=$fIw=;WDGQ=A)kgQ7Mip5F)ul5E`2YgOtWx z{Ta*mZxs%1Q-UUHW35~sqXQ0%fb#|*hytk()Xp?3R&{dMBbV@n;{Rq=^SEFCTJKR9j=5l+ zVb!_9c#zGzo*Kz4-?esKR21?MC6)s!Z%GWk8;m$2< z`26~Z0rg>NQWy_9I;z2^fdL0G3H-4PFhCJ(DW)%LpacwQ0_GH7@BOO+a)kGPUj#K& zTv?fzVpo;zSOzFio(u^Oj>%J<(+2$IYZoDXUHrzfW+o#cbTC|2J~%(e-z;h8ub=-7 z{_T7Jfu>9u5x@&0APQxL&_DNCa?~a>pHS4q6er2)>gAit%&~|8zfaRCrOGrJY6z5P zE`g*FhQQRr{qAws(fjG2h8LSNPVL~dS!sq!ii$863f)=Dg)7>*>($e__r>>c?V3%= z5}469$P*mX1<_;!sLZ5OJ@O~d3Zmc?h?O`3Eh$k+U6l!#0>We66LdiF+fVcAruL7F zMoUj>zi4Rzhfs2Y6>tipAzZj9&x4D)_|`A4;;PkK$fiRu^}v$e!!+!fj^oqg1YTvP zL5P?CyFX4u{N4y$q-fa@PdSE0^`$BkQ1px(%Ydn|*_Y4zS?-dSdGp&?)|p`}1m`&% zFcHG6rhrrC6?k^{nS5`{8GL%}CNK$nk^urVTr8yl3%G=Z3J`i|p#cssNr6ieB`JtF zKz$$k)GsSK?s#s$-ZvI91vR;&eo4xw#uPp8yD&GW+s^IGp<)P~Ac^V33ZV);ZCToS z+qmud3+nJzl0bc5la;!%0s*}Ayzt#yg>U?^;alG@-2Hu_{|z7yWM-_F1YVNYz@WxKK?KWF8z&J<;pbAet26z8RS+`!oDzx}BpE((jfAfFKe&lkloUQ!-?2zKpo{N5Lpo?f4@ z$r?}Uha~U&hzGAK0>AEwMq>^hc3VFC2pfSBVB)wx92FdCqvQhxU|fN;xq3>hahr-V2J4ItGHO>?I;2Z9#QQ-N6p z80Z)N>Msn=c~j*`x6SKP2O5Hw9Bxu^qmFnmX47uD_2y^T1q=dXZ|VC1jPHGHI4>0l2UGkyY6tjz5|vog_UcC<>v@< z7Amc+inV?TgfMtm=-&=6JPyUDVdEppS!clqE-_F96g+gY-lMu{ZVKGE5{@`30};FW z-OoRKul^V~3=9Dkfa5n{|HgX;b}sv!*XOl$bu_0*Tft=mQdWqZGFgc^I6B4N10x*R z@g`qB>k)_qAgR`(l*i!BLE*AbS}y;DFlVkp#le*N^{oJ;MaXw4eSN~(3k|QlB>doi zIkxR_e845Ck0VL@3Q!TWsJJmlI6SRGF^BfK=dOJ~{|XrP@Dp$OD>5Q7m(#ERSlfFp z{?=({&*zlB4!T;hWCBa*93zuucI_YKg)Muzgj={_-2*IMWFVzT02r-F4V3eiY_r06 zTm^5qic=ETNdDGrAY&viS zK+=k&00UTs0Ej)fNq9jU_yt_z3;22x0kMEz>lz7FBrQ6kaU~wD!bj}ycfb7IhxD6| z?`1ErA2_J0;{YdOKmg1KET{bD61rDkoo$=5HppgM;__4&9e!=^XWQ;eU%PPYilD>L zx6snkDM*uGvH}@F0uXNilI#+X{h<&uuk0ew*w1`LaV143l*qr&hXXM?-*Eru>ihL? zb`Eg>IN)b~_-%bvRz#YClSrBXEkHdxpzyWx&G}cX(2vgTvzegNVp{}TFh~|8BS;!= z1Yi=)*c&wN@*@0x9$)DEW$hHila6>yiH2gP2IJBbyX3Yj?{Pl`Mu3CB05EdA-xRf9 z{pwdaQk(w&%8fVP7yxxPbywhcd`V8b^G;7v|Ceg-)7Bp?{sya;!^284 z+dkEa1g%sBT2izKZUW+QS5NmrM|3c*ru>$hpU|6r?-#lm81(Rmfzbs1#4?~U6EZ-n zH^TbR1Ft;Lp0hOn`G;7$exZD{t;;O5tp?j{FnK|8f=vTyK~jJPG09#5{D@9bZ&-cT zuEZ74Da93)c%p8=$YHnp(cOB_zki4)reel@wIB2v_wc`x-wPDHG3`Jb(9&C=@JH)8 z^V~kUxU*eW1_dKk6KvijOClv;smT}sa2_1>sqRxgF1i|gG~sk`NMC$%um0>09_5*R z6HI`=!h>Ny>l457UyS(dX!f{qfSiZ-A`dhH z84Kp}CCpyeNAJ>3)7O>PIr$VFnSesdk^u-~%H@cOV#v_pqU_%`==%SmpMCdl=THm| zCBq9b}1AN89m%Pdi;O{yE8ozXzYEa;NZ$MH75(5ZG}6)B{ja^&zt&#&93>)rlA-y8L z%qT<+`=AsG5M~An zkTEYr*4V&CVa7(mPHWW@|MTyUz3_n?aNE6)Hk+EnUwO&Yoqn>aUi*G(l(*pF`98^{ z#@9Yd=^5I5OJpO0z+$2Zg+XkDjiN#nKHB|``p1R*r{DH|Ki$ z5fdUofkKeYMTPvIf~ts{|LC#D)9Jd_RCT>iBE`iE=kW(${1o#V>p0at%z=~r4Cg~aE7-^& z2r>iduTW^;BcT;_=>+qeYPk8jrChzVnIHdpFDE-XNhv=e(3(@jk1M6VCPh?qz%AeS z%iB|l)P_`5wXYLt7G5-$jbCbY;kM6F8*WNf*HK+l&x0GT$I~9W zk983m3n%~-A1#zv2nkPf?PYT@*6_n$yhV0oh(dOld}i?F?%k(u-MRCLaKZ>^x@O_; z_{rqDWHJq2lIvG2A(c$9?VWQ(#-d7958@tra4I@X>`Z2Dj#YZC#GTjzg!&NWdt! zAfLObtONX{cdh3qQ25N7J&SBUqI)op=V|Ors60&na~1Rq=4ooEp{2;>cqYpzH!qRA zrmP4myoFkOh|<*8r0DD)L6l%FV9;wE=p4);R&h~d6-ETh)FDdfE^?@=NjXlV+!ShI zSqEs(ODnDMl)}@ROfCcqSj&Zi1qzX2>AYF&Z|~#4yM0`7Q3G107Y)O?5YKa*5Um}@ zvJMcX01a9>(Tk!85s(WkWF`_Wo?FYUtxNdF=MJ#@SPxe(o=q~LF;=EjgG>~;rVZ`5 zIgXW2gUSLzA&jU>Ca_kf%s|CC3~G8prUX$ie|8Oz+;a{8_M3Ouez1d;iyEn`N@AuE zkrw5+fH-cIJ3$dd6bOXI5Lt^6IUmlhN@xX<5pqF9Aut41n9j&8UkJ(MA`~#ICdnUv z;VN1htNE{24{>QrJqsGE+~)|B1FIYtgqWL9UIdLDOEeoR<(QAbi@H|EDaDjI^`tTA7R$Vcl)tAmG=5GUaX`f`$M=^DX2sP;hB|ufuWBu|L z<~5}G-p_Zl^LQ7l7B`_Zh?TP0X5;?Fal$%|0uN~pgiB6Kf0?I~! z@rySO zajJWW#dB(jIigVH3!&oz#G5OXQveZX0t}60@%$P*1x6qYLT+Doxl{QG;6m}G-EHhV zbec>yhy_$JRpf$zbjly+fP*Kxd4AhrdIm=b0>fKJ&vNOK7QTD`dgeFPv8bsij8DEq zE+4r50|k+F9FP*P$|-;a5R@?}-x3re`UXa*t4_P|bIY81u3R*mGAJ(a2(Rru0ir<( z(?w_^qR@=($Cjc~Un$yXMD`8m*?YX3+ty#n!y8(eT~~!tuxvpipIvncTlbw{VR4;> zLd0;kKo~?Qv5pf6*h&t-fCyHDASfjSLC8Q9k&7%hEn84__m6e-^7_6ur?^Ugz!Q|k z)%I*Y;OW=iX7`aZSYr{f4CDeHyn8kGeC8?|YLes1<85n}@y4DudIv@bqsZmEQXnxW zL;zD+1FQ%#W;j?8vbh5D8*3J9XFi$mUBz9|7Ku-LzNaaNvjZb8^crf@ZnyNPY3;5tP#U28w@4xYf>Fvw#zX#g+@=Yt52#cC#p%n-g0Vr{C+^AFrLE@0HfFLE&Km#MW0_D)s+`!ho$K6+D z#>&`^L?VP?bAI zAhE|#V>)oQcaUvy_;mpW6z-uqTU>T`_LWS`uVGQ^1pYW;+;@T9oh|PJ&vF0 zB^n9Yux>f!(9zWgj6e0od`c=``7l&6!~%LO{6?|?zutD3Z{D$n7#wcz;>W*yi<8C0 z<*jA!u9GaTZ{Y7A|2oUBT;OuwSW93HzVVq7TrR^%Hpi(GU4%mgzW?p7Fu%+>WGGwU zSbLXCweeMe*qCf4IMxlI#9&1MGVWyc`ko`KS-F_2FTIFY_Z;ItU);q&CP&X;mP7ka z@x|3w@!dcB5_9G>;KfzrY)3!)UO7lAm7H2~58t}) zbKHO5dS=fW-!OgS_gcB}iiNI}P7!W5mn?3kX>L8U8mjSqkBJb35ie{#h_wnV;~d+czW2!8 zTypVT5=pMeKfLn> znj7o5kjNDRe)-yde);--hDLI(Oi$G5F~%q6hMlAeh#)1S5(Iebz%jZ9hWO@PpJ911 z&p&MR4Q1JLxScIK4s-O>S)xdsxLRB88|)GnWU?xNMQ}G#GAck&D2}&x@pn(XzZ{WLqoXO8r^Z->sY9ulbm{N&-y@L{ z7qOEbhn2)(Zw0gnQ-!gXm$x6Jr+nDH3!Q-dh<2D+FFf$m>M}i7{faw%tv3Ar9+NxY5&i~? zjn6q2W!PWV0V*=DS{pfUX)A~Vv@mT5C{!u$W*`Z~0#>ljBE&?mly$)1u-@KS9Uky) zw9;Zg6k7OL!-~OT9QnwG2Sz!Tb-;m_|0%Qn?uUM0{NP`F?L$%{O5uL^ctM;w0e~RH zgaH!TAB=LW*a!{uo%`wRxeLCk{ltw4iX4+w%=t2J)zqZ~%LjB*;~c3y9dZB3lszc!lx00B=5 zve@^NXwP$z;OhKG_ z>5ba+uW@gQ>G%kw;iK{1Ab>@z5ZMT8qCM8wC!&C-xB91gM>q5Xy*JqUrH$1|(T%Cv znzc&2)#7m_TD2(AzE)soC>nI!=ZhL;E$5Ws9Z_a`Av3ZqP_}>PvrlBF_}*Y;EW7QY zR6}hcUG1I*Onb(JifSOs%pm@3&r66QZ?Y7E!AvTD^!e`>I8S`yU!VU!APqOpLa>Kg P00000NkvXXu0mjf833l1 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/repeat_one.png b/app/assets/images/emoji/repeat_one.png new file mode 100755 index 0000000000000000000000000000000000000000..3c47bcc1f3346c771a77ae3bda866be04b6c62c7 GIT binary patch literal 4287 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 bB?0~)yPH!Q{&{Z300000NkvXXu0mjf^m~jh literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/rice.png b/app/assets/images/emoji/rice.png new file mode 100755 index 0000000000000000000000000000000000000000..1fd22027bc5672bd967d014253192c195ccccc7f GIT binary patch literal 4645 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

    }>$`A{2yjBHE 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/rice_scene.png b/app/assets/images/emoji/rice_scene.png new file mode 100755 index 0000000000000000000000000000000000000000..14361988db7781e2103db212c5c21a8aec6a9669 GIT binary patch literal 6261 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/ring.png b/app/assets/images/emoji/ring.png new file mode 100755 index 0000000000000000000000000000000000000000..8a57fd68bac147d622d3eceb13d9812b6977cd89 GIT binary patch literal 5232 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 KMNUMnLSTaPZ{WQE literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/rooster.png b/app/assets/images/emoji/rooster.png new file mode 100755 index 0000000000000000000000000000000000000000..fab23ad3625ef60563c93b96bedaf044332628d3 GIT binary patch literal 6168 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

    CYqRjASe z5?}&00Gwz6LIbfQA3;C$4NquJ1eY!D-+%%*F;oP6zrR(w*Zd$rx?M2%CW>VUc~v|J zPq+XX%%pu!>;%X#xSy?b4N-BCclLOyyE@0g1nj|GBdYz+GNP#BiC~SkpFLrS#0ep= zGRf=-7ohT7()fq4f`hBgoJA+KCg-_TH#48OD65e{1k9@w!Teg%kDnQFoB*yL^tMHf zq8_p+CPw>x;8eDsZ~+RZaBuPVgq2&A|>PqV(9wrG{;B=J`ZO9S&0rqgBk3X-c0}Lbs0Pg;ZUjLh~mp2#7GFB&_xQdr4wO?E8Uo!TWP5;2Pyql*AXMl+Pl(=@p+`X8 z<1umu34W19GAOIOi2jV(37vbnp<;Xs$AJIR$|2ujgz(7mDfiqt$FD;MA*T<*8 zz{n_+%8<(mVF(_8fToZET7!kpDXnkArcVjM68Hk10YjQWl0w{trM9wg9F87>nS;=n z(f98AzJ3s3@EPE+_cr~;mgmTs^%*`hdr;0Dn}XUnRBKALA{27q1qMI_{1)WTfHa02 zpaArV#|f;gK&z!3pM&`sXv{->LHDh+c*}v?_1|$efDCwIY}_rc%~$wfbyT(tt%Kn) zsE$HDF9ackh9C#pRnAbK}7u>-YFIS-`K+ zLXV#Y!l_1*=3@pQf|8-^${>VfNz)_}A0Tc6+J`3KC2V*S@p^k{*bG-pcRJfLs9zL*~oSji7N%@453P-Tk!t@ABurN?tuWB^%bCB8;pTid8*` z=yQXT{>{V|VaGG!%<~NA!}fDv+|GisUZ=iZQW(~y(G9}-jl%GxoNJ$T-qWrG@+Gb; zRv}YZI<6eu&t*UPs@@Cy=%v?6wK(EkGd2#I!R!po9LYX#`{(sWfD5jW*GZr^S876e z7+Uk}0q%O*WWbI~C2s;;n#53_Rb~$8HywEZ7VCVewG7=9IteT_p+3(KadyYQ=q)pk z=`ZSYN}58U!fT$g8SspkNv)9MjVT=Ulm&$?wGw}wCX!p4hvkOev(V;Boc+d&Wpud4 zXW|5!OOT|{=_o-!ku|om!b^@H((e_kvN_9S`n*@kBU#2@A{;~6;6Y`+!N(u{u6710 zK(0%sc`opj3&kTtsgv=8rMmu5h40<-6}^Ks_Ve3x;W<~x*L+Xjy4=k$QiOp3%3Axc zuj+na%XzPm-xlE_fs1_MPZ36eM1_AV&yfva3OspSxJO=m+B0+Cq#Of6)(Uv=zUYN_ zd|AJ9QvA_Wno<B;q%qY58SQ%JH569NQO zSvhG05G9Bc;drw_mVpB1&Od1cFw$NWc|3CT5soa(5GNkM*(Z$vo{!(GCsa9|&f+kQ z`3!|mpFB-4rM)ONh@AP#sKVp0758Fs2tRlp#T5?07*qoM6N<$f)Z4~ ANdN!< literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/rotating_light.png b/app/assets/images/emoji/rotating_light.png new file mode 100755 index 0000000000000000000000000000000000000000..6cf4a775e0a42a07c796d135920fa4e3f9bdbcc1 GIT binary patch literal 6620 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/ru.png b/app/assets/images/emoji/ru.png new file mode 100755 index 0000000000000000000000000000000000000000..55fcf3549e239bad99eb3469bc6c87a6f67a7379 GIT binary patch literal 3920 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 bRj%@12`P)D)n;UkHv*iPKUO|8NSqQH#< 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 r0Qm?3)3$#!Q6_Hv> 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/santa.png b/app/assets/images/emoji/santa.png new file mode 100755 index 0000000000000000000000000000000000000000..a2240c07e7af2be38a5b9d27eca65b9a5c9222c3 GIT binary patch literal 6271 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�*4^bMkM}Xp#s)mb3>nAS--!}lL?tUlpox{n` z)~#FJ+O=zgGrbinR_M2PAL-xIJ`8Bdk|lQUmM&cyl(8#UuB4{ty8tPRIM7?sIjmHb p`aOsNKTN^`{tCbknEndD{{bcoLUt_*n9%?L002ovPDHLkV1lw@Htqlb literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/satisfied.png b/app/assets/images/emoji/satisfied.png new file mode 100755 index 0000000000000000000000000000000000000000..fe5629f431e411f6870f9afe7662fe0b8022ecf4 GIT binary patch literal 5364 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 S_CSFE0000 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/scissors.png b/app/assets/images/emoji/scissors.png new file mode 100755 index 0000000000000000000000000000000000000000..be916043d2b45c7aa2940fabb847def27fc389a4 GIT binary patch literal 3839 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 BQt1Ey literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/scorpius.png b/app/assets/images/emoji/scorpius.png new file mode 100755 index 0000000000000000000000000000000000000000..67fcea1658acdede6fd5d1b0cb211278274fb0ea GIT binary patch literal 4566 zcmV;{5h?D8P)aa+PIOV{De0Z)s#Kpa!jlLgooc@Uf>yf3(5W@COrMb;l)_p4WB7-?gaDQ*%y>_1W5-zwqSn4<29|Oj!h1wOrhrNoQ{Bc8|Jvj@v_vYQqcCNMGS9 z7dPwRx(cZzM*NX^8_=P~_e1<*fFJs3H>B#6$%kW%_^&bO@Bd+`T>8k<`5z9<+5u;@ zzGKClOxJzAsYNTgyc&7kic?9^yR?&I&zi@A6FX@?I!mVAMWq!&@<)Zy5SBwqqdud% zi|pMn#EvHpFtB}yRJ5hS-*{=kDtf7yH_#%YLREYu$$6wfa6J2 zEgVl^AvioRaXRGpRN3~*L3TYh#Bo>JIdkv2r`f#~y4`?MSh}Fj4fuA`B6x~8#hu%I z%5N9vmY;l-n$H}sgDbvwI>iB>P2b#)N-3PQM;Am zee5i3d+y-i`qS5&^?uR;K(2GisqJp($?d8gr{ZzK)k|!yZ~WR`yqtq{1x6c=WGGJ{ zgtT)$^<#@U;i@G(^1!T-y{V9q)45eQ|+WghSts;i~h2kE%)xnR(TbZ zKhk0ALR!`4zK>%sn#;y-=cp9R)VWEKIj5-r9xW%NWEMAYnY*l=e1DnzfKRGLp(FAF z5OPxD8$&Z~?0EYE7%=sqIfST3oZJ6b$(1AObGICNYFtL29iz_8BfGL`5p|wQP`5;$@&{N>r=itd%f;@~|AT9VyGn!?PTl3LtUPN=WJni73Sn~ zoYZm(@4V=AoUQ=B5>8k)=cU-Sew@3XypLVEoj6s8V}oV9_x!igxy++nu3~1l-E81s zc_A&wrUIZPAOS&G(HO^IV$Tw45Up_2cQ5AaXTF<2YY>9pZ-1GOzU3a?^T^vd;erJS zso3_!Yy9iRyLj8*FXYZ^KFl$T7V^T@?R@!*5A!cy?dST-E<^STn_4X@#jn4=gFE)# z&nLcpHdm~@hM}P`zVWS}a^uJEpv7t|~sC_X2t=(PR@VD3SwhK3L%krnV zYSC(Br$7gq*+2xAOH_l5<=ET-7z_Z$=4@yTTARe~s}h9#{D#e}`N|vdS``5E(p{|k zob6p78C}mZ2j(jR(_z52(0|81#I|-emYLg zaPC>lnF{Z`{sbOh`y!9(7x-HLhb;MKIOjb}x#!Mj2&-Y7k~2fZp|NQ-PXRz1U5gN{ zYY}Q2Nr1{o_C7b#Ai(@L%wew{Va*3u5P`x##TL12w?_r- zLcXue>1&SxU|{1IkA7kcM#DM(w44R2<`97pL+cWctFJu+3k?rlyNQDv$2k7V1)TOb zONaq2^HKz*0O2{a6u>%QrYAyS>;#+tddi$Dj#ep+2IQjEEth@X_PICE*`7lO@XMQD zLbw85(ft0NJq-ek6pFm#GjE#MOFa3{+d1@df!u-=o9^4kl5@J~d1D(9NOw3?1_P8f zvlBpT%f-YTr$_;NY3ysLZT~k-QUDD$Cv|*3op!n6{ci?f)7|~#2P(A8^N?D=VcDpK2k*%P9adIgbcD^QBjDaxMr127-#lFNBFLGEqum zm^ngixfo%YP2UCVAYrKFtAt%?OgM!Ap+*Q2*zxE=yMirqQ&{zl#;*iX4_Cy1E%)zd zWOtF)UON^H7(cYT#6}*PAPjIrIlC@^uw0lBfGHhdLkOrA11jS_UW;od-pm0>zzg^7 z#YstY)Uu3*(AOA~9KZQ{dvUYzScD+Z#unEYL>ATUgH|g9x&ki&A(iqvE^u$;oB1$8av~#fI z^i0SLf^uj%H1L}8mmw2^v6jW4(bceK&jOY403rpA*61ig%c_yq^IzX(`z``Lv2hrkbc?|L9o;y0j1H9An#-6sSL&tF`A|ZXmm6zzL0={^0;4%D#}xMIfnNlE0Wu;jq?|Z=B4qnx(i2LXO9R8|qs_AW6bHQ-V<-h-~VD3Sp0iyIz-q%84b6Lh`a8iL#fSKeJDX^hpb%cUs0)XpDbZq&UxG@Nb^FAp+%*Sdm z?SY7Ch-NU-b_9|LLB&;B7|?Qxk5Yh)-HRl$P4bLCDt-yJhNejHnf5@0DZ6G;UD4!D z+?qf}?+Fp4u}-n?6P3|4B@*R(E#mJrf+^9+CCSMlX%{d|n*!08CPfDf#P<}58X)5p zM@TFpwGdI&j{yN8CiXC9ishdTCnw2E&)5MW$)`axQ5$0Uv^|&%6T5D0bZqO`t|$b$ z(#TA@!XA}j1O^>H1R)bY-b~d6rf-9BOzQwoDN=17F(93B$je6YjL|r0MW!W11ac{l zR7y4OEUhR8C*@Kctk8g5H5fe+#Ni`@gB}s^A zZ08Kd0&Z3@@X{zl{dqbUwg7O_vK5^7!FF!A^B;NN$hCClS_$)p)yvLe_tqD={F-&# zaNBjff9NxuaLgj|GEb;O5}4irjn{M#llHCV4=`3JVb2|&xb+1tyJZy-xciQ;(=+#@ z+;;1ysg71iljTd{U*jp4d%toYmtOQuuDImmY}oNG-nHNYWL6XC22N8uK!705m&ibe z2ieXvzxnD`j$6~m@^kx$z^$ME&szLDJ{7_su;e4K?!v1$=g_&F|E_gB@@PA27OsMn z#^{KTNwSfXjE{}mkepAmC5L7Tfl~&J;iw|Pom_P z5n98<+J|TzRGT^=FqMO$2?z<$Xe1gC94@#y1tr5b-uH8!z4vI&ylw?c-!k8(NHYxY z%5&G1PvGwla9gCMtKZF1$?bHI?w4%K)XMgs(>jRJT z{Qa-cepJr7A+B}C3Q*Nmin_qK|Jvp{$EE_5DCGzJ{r}zJ&c7umTX2P23xPm#q(Qg> z1>ADR_c^$IjE=q>LQZ~6)&$0<7#7I~hp2O_b8IRAP}*Gh%|q>O&m|evy4sZ=KRZy}wPz$4 zqNs}mx*DIS9YK&%*i;~Su1R2RU!=~V&ZW+Yh#xUfH{N(75vc$Brkifkc|C&A=4nTy zRtw>@OQ8^g*ad6lU)lw{W{jy!`=6$S5DS3Z zJm+=ukIk*TVXn9M>^7%^tjyub6i$>9@(58vV)d31uaah$Dc!CNv?wu2RzDjQWEc z2ZLRAY|20RGc53deq&6~T!5qqDPVpi0)SkaIqk$&r~A~J2+LC<-764|5Q@VIV?qoj zsF?CVjr_LpVDQ=PrDrw(IwsG)*!t56kaR*XkmFAi1z;dv`I!ok6ru&_1k(IzpbQKd zWAY?08v&9+WPp040Ottm2L=d$3Q#h}l$as@2Nf4Y;S;S2SpWb407*qoM6N<$f>48y A;L-gk;_5Et!>nNMZEklPrI1pAGiNl%3nh+*QU>!ef&PJ7% zp7uGdbl6mGZbZ}`37M5Jw@w1=SA&cy&m|AH_U!KQ+v9Hi;idaGiDeCra=eTctn<-& z*WK@lhpg)?yUt0-%eBuh1K5icz!N3F=fFqfrXfZVDbs!5BOyV^)57#>8=+sd>t62b z)t4_J#h%YN6djA~ovH*$>csQU^{B#6b1~yF3SGa~FXlWJ+iRVgf)kvw85Z>JZk2W@ zo5j;{8NxYpnpqb3Ux*AQbV@DUOW5eFk7~ZTURj(aRSCraBHJlR(me-Jr^^hqPd`l< z*ikcgP%neF+%A>(#VMldF{^UIg-;I=7ZkRfk*gCT@9$K{_>#ivDvnCOvAA6dC~OlG z=BswsXt$Z|D6#?aX3yF_66O3^F&uXjLgdtKVOi%NjOLiyN)HR2iyBN-g>0Ur6*z$X z&2?RFX;z>9P_4S#7GSRV*iX}3E0{^vR~)6b&0*RJ4kB~vb||%(i8cK(g;f%|3~<6y zJ<}v9<-0?uEq-9Ugb*OkV|ILJD3&7%xYJz@Y`3!-@M@;M+>Kc@zLc_ZSov*rvE@Q# zzh>5T@Mqy}A=QPhpsu{2ZRVri4DFioax5b>@$_XDFhI3-iT<#(JE;@3sH?|rm2TOn zxrRTMF(0U?Z(x`C(B2(wvZbXQX^TcdgpzjxA4?CV2wyLY94U`J`Wyn1DFI1YiZz+C zleV7(Efw+!-43Gn1X`OkCY-x+E8RuENOLrQI!Z^>U`Mu4s2n^cEjN*cI2>lOSQ(4_ z+||XTQTc3!zH3s*(YHbOgSVWXc!n}-hLNz2G9zqH>r&XUw>v^Y&LR;dbAZ6*2b?YhR` z{JO|dNV}yhFzU4U5+fpY;1>d_@M(*VWZti_5)=9Tjvpe7u@!@~CRPqR?ba85vL>Mt zKe;zcIipP0F{kUd9BrsN_MR`=kl*LXG}{a%+l(~f50F#MO=z0qzhJ=Nv+rdgwR=A) zVxi8iD{ssNitC|LWybfQzDeVv7y#X>t~wC$-e}Wi(tS%7-K{jS#g{A z;e*|0;5IoFUcTphFBhQ}EWN}x5|wV>_uz1*dLkn<`oCMG#jY8{b&BLZ8&0Bd|C?;p zCNLQ;YnXhb!cHWDf)yaWWaDP|>s1Behl~%ga**j%l%0{cteL#al3kj?`^hnHHbWB? z>riGH{}VWMU_lrn?f5GM?5P6FVm9Ir%}Y-+u>5KxE`T~mC7Q~`9$tnmO7q?m1Fo11 z1$+O~s5R(|KN)=OSOx*R4XPDcUAWeX9Ty;3hwqdyN`5>H5{!RjC7Q|&41}r{6szl2 zn`-ZHR=!BZmg~i!7^gYAzbT1hl##4`eQj_>snZBRHP&@0R{NOj0tAXH8Q_U~G1~9_ z#1It;fpD&-EFnu6jJ*FdPN2pVGfkHPqP-1P zA2Uutx1$AMQ!#{scP=M^oc8u*s-}!+z@7ui41k*`Qm)~ED1niJVludwb~fZjiEE^Y zq3aE^slydf_+Es+X^17^j@Yg~rQ6N!Brpu}$JDjDJBh%!g92QGJOcJ_%08{(RCV z6!z*XXeq7UBIKG>8|!cSjQCc!qs5$u#OuIm>2bz!PEt0N)t216In&Rfzg8v$lD*u`MYD5E$-8tEhks>4qFm< zJO1yO1}IZ>!+%tD!Lt`DLh2R0@DP@p)4WF-w+X{XK(()Z@t>T2{(nHJ1@{SBXQd7^ zk^YSEbf1L@4G}%Jt3X}3MT$@^WRvU!YKRX_P~_qwCtqgZ$WBc^^65If&FZ=!AIlaX zWH%q{X|SA)l*91bINFyKr2T(v`N;SOgUe}Kv-!(>czCP_q=1iA)}N zo0&oxB5rCTN^EL{fw?kOhjq7oCwn4cmoN0>ez5*Fhg(>sy0;2uY8uXJUwEVE>Him2 zR1nuv!&LA;`;506MD2NcxTanJ_tzh_rUT2~GpcG~){^P0Gm+(-L4t3s9nM;>9TuP# zggvz;gZZtk1oFBuTpS#^*?gRgk~ebaKZi<-&2NZoq(Y;$Coq&q_{oz4CvW}h!t|w-A@bv`UJQ>xw60qH1f269k^> z0NK+UQ~6w~EKz$Anc}3$u)@gRBNI#ul#nqgCg6iP-LDU(hYEiyPY?$uocpPAYmayq z|Cc))D)j%>FK&S5z$YMUaOzuQ+;${buYV&VB8=1@8RJsy*$))OOZOJ4%}v-t4#C+? z&)iOXa@bytlJfFVes#8$aMAjpLoF73agGlX9JuVW8XSr2`5L_1Py59vqkm~-P+3-W zd5Znt%9VSCN?^rnpx3&+lIbGm0>rTtFGxWjF&n+Z$|eDCp2-S-qZep4Exi(fg0l{JM=3KUb49`*Hi)g+W66h*4@8yP91Bk*HEkK8sIdoWi!N zKe+XHK9zCv5Y;`pl&P^T_V$X{K-;iqse)PQ;`X#fVTiT*JYRLuEC2H8E=qp~31!Me z8qxa%@?l-Hi>@+}lh8=Sq`-U+%!s6EfixfR<53yGi$p|_;n9rW@)t7f#u>S5^oH~I z%{#ZK<y0*Rlcl@8;W8hB#M)qo@Nd0I>HO*s}VD~7vKH9b1~jM z;?(5c=nGsH;{XOqhaM7ab7PnrMA;kROeZF>{s$tj*eq|7tW#~IEN*ip!T!*S@94Q# z1Evr7Xz(*(7xyt*fYf!IfhBRgNqhBd87-v}q|HcrHDms*vJt_4ON&V#dc!v>b^Y*! zSwkn+xXZ`;Yv*vc8&Zgba8czJKvUdGk77xgww0X)gI3f!e!8#k4Y*8wVHmO4vR_Di zm8Y*A|3fxXziqe(gK^uY4IZZ{N`9Z*FEX#1Q7z3ew1@AjmKVb3J)`<%i0z3YxtTy@ z(J_CF{RKy+AXy6wma10N$qLQ!QWvr;1wwp3#Jcu&1VXNF;2lN5s9A_@uY5%CW}!AF zifK#PNUqw!;EvFmAG7CoxU)hTWT{?cyIHk^hf} zUU3YGKdjR-9VIUSe;YqK z9D1H+|JKNf zjt1>MGczrW0&T9}z^3=pv%&3Vur=4mY*#GX(-@=kuEC|&XmUP>=?VU+6|@Vx_&NDFrMm=Th>-5pT?PR}T@@=5-RM>MZ(YFt0>R>b}sOb$BCuYi+}Mr)Vwp)1J_= zj6@ST-M5d2LC+EYK}=#Sw|=KZ(QXge7-sNDY2qrBHz7LOg3(k(*!PaPkh|K62>G5| zZ>IHP?)$2v`j1-5j5@~Pn{2cSs)VI3G06GzB1u2Pcj}Z7&)2qHxxI62;fvfkx7X2- z$M_s^qJ$aqe8Qr^blg|kFUFm)|1C;S%=KY7;Qkx|E!WnAbXAP@{T+#9Sp4~cM3==> z<}6e<=q*Q(Bih;7u<;6nh$?!U6^FQL3rUY-o0X+Y+|^*vVw``9NY&bC?VT9Eg9ZdA za!EHu+M>$^d)@_*Pzy?cGkFO;_B7Vy1lBWVNJnmwUne5?Bn2$hbk zWp(cey0&05bKAZe=zspY)-OoNjM?y$&j1G=t^=3HOX6Xg`@=ju{H7uRKed2T8i^g? zP&E&W%caPFqJ~RcRK4w)S|U(csl|W!?A>oKNK7g)vAyq@Ayoa*Vg{00__lTw;lYs{ zX3EM^nnEdi&_-j*A8!jnVMH<2bIJ&ZX+%d&5L#ah{VLVLzsW;K#%@pH2H>RATqXq2pm0QrVP8fQS$g%^GX_x(V1i-{it4iiCg6A?Lmix zMojN3y%{~DUCgJv5f3CdrAq4?%`PUso@x=I{^UO`zN)U&E6xS2L3TAL z2}`h!*{}KaNEaMR30Jgx)YOHO=(5I8JRx*McdoaR(OG9fWkH0=ZV3L$Fc!Laz4LRG z-DcvLWTD!G^Eo(z)`sI)yEP@ij;0^h2%-F)#$-x4(~*Anx`b6qNb9WEN}Qw+J-85l zn+|b|CsgYs>n3lz!y`WjG7Pr?10H?7AklN7L09$Ky1mgBR)*_58<^$M_D%^}nJNU3(W zKc%8$#A2G1q|sTA>o$PT>A*IGn(}}VHlEXmTUnf6jNa)g4LE^@Swh?jTcx9Bf(zBk zvRd6C)UjrPzWis%fd*3d6KJ2G>ZFLOkMaVJ7u_NMcER50+KrIs00P!mwW8}$Ss~|D z)QknNZMg0fTbkoMxJ5M+NVUt^+M<8 zhW&*pu_fbUebjqw*!5A+$$jhwKCO53vICDYJTtyWO_Jdrnm6wog#$q(0}Q`DKl0h# zUb}uw65AJ^I41hZU5?(E-Oo{P17}_~zr-d|^^^P!Z<4BV-eCXwTGF>%4l4EdvJan1 z^AI1?F49?r>!XOw9=N{*A;B-Wnm)7@s{VB}{tmFY0EcxJnSa4>}g&aod z=zUA#x6!X;430!oCqGlsM$UR}-Z@@`u@Un;Qt^;o&hj_eT|IHc!BJLGKpZm-yNT&s zy)kSywuB`>)yXN#c^x6NjNU!mm1_QmM!(I`QFSRk9ee3CwHeVE;-kD94X>1Y9YR~T zJr7Uc2zP*WkwP5RPH-8;4qG3m4qrg>&-2L3#iUYDx&j``Q#-TV85{)Njo}Eqw^NhJ zTlwRW(&bem>iNcMlf;B2LQEmdZGFF{>0vI|aCz@sC0!CNNkeINe}vRF87Ut}jDIvq z9vRR*e3@8zj#3KS84*_QcC#NlC-r1e^WS`snghaNl53iDCfAY7(BAiMD{~(7@HjDM z-er^Vy6fJcxer~r^)(B9YO>VEpC!-*h;3$w&adB_p`jO4xhn!v zHi$%$*`-&E@J>T?PYOVVx^LV*Jo)kUaeFiwX!u>Ka^_1Gi`p7Jpp3q<y;v-cyy^*$`A7Ey2hNPax7=h$PlABv6LewRr%STZ z!%&~w?>s}b&Jk-*jTS;#TMXNEoSjT~wOwoz_~%(_%pnmuyB;RIY?ar~0`ub9|3Qo1P#RXg_+ z9#t=6k&hQrCs^H@HfuW#&Zk==7XUaBgwLI0@Mw-zup$To-(h0T`Qb-)_)^v+{>~gu zW62$DLA8~A9wOYpx2oGh19IY<9juljLR|Z} z75Bx&%IFu(l+8~yq5bi@1G*^7-_JdJ330$5E+pj*jWj;DV=boT4kCkWo(U{Jb zTF;BkA7(da{MxT$@oPTSrJRez+8)cCe4%VZHgSyE(FH?6Nw|W>alJOny?}=SI`i7@ zQvm2!?yVtYrMYntyv|g`k;3a5QR@S;T!AZlpizA9nUH)lcj3Y4zh za(5kXP?=o(vb93$wc37qR+7d14C<^mUZb*T7r%26IQ3NiX8|QDT$Fk___oCwCQQRIPa_xq7Qw3Ikw<%zMR`G$2F{Tjj*#6 zTkzylQJ^bZ@wyBe(nhFA^t%tK0OV9=+ zxuk^`(od=+v8^TXJ}0^G944Oa5>aGBH3rxlTDOxJlH;~y*!Y>K>ME%UG{K&A-b~fE zAU}k6EBfmZlieNYE>&y0>&@=%*9RlE6RO=%W&Oq@b&JzfqH;m?MxT*T2 zBu%#^5$hM0eKd5Zy1P^hfuy=1qYb*xuQqkvN1e&eql$;|rmN*7zD$FP^~0x7IRoqr ze6V(z0Y3o@joOS#{GNsHcsu%L8RPGZ9@+NGC}+NlR%gE2)VsU0rI?WR$C}nU1m;c! z7K9KUuTt`PLzFHw&@j=o@~cC&kWPGG(#ThH-^_QpJMLls!t{E4@vQ3WeV3WP4d&)9 WO3QUv#$NxG0AwT-#H&ON{r?B=uiYL1 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/scream_cat.png b/app/assets/images/emoji/scream_cat.png new file mode 100755 index 0000000000000000000000000000000000000000..d94cd34ff5dafe1082a3e7627ac87453ca1da853 GIT binary patch literal 6844 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

    Qxy?z&w^ANCj&jGMaYuPl6nf?7eieZjsIpmqZ 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 l-kuQJ-)*=nr9)L%sZ$oN-Ul*!?gKuiY<*wYux; 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 U1A(NsY9>HkMO(Q>(JJi!0B-R)R{#J2 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/see_no_evil.png b/app/assets/images/emoji/see_no_evil.png new file mode 100755 index 0000000000000000000000000000000000000000..0890a622279c4b6b379984640e7f6b15b5f011a6 GIT binary patch literal 6828 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 iAiDVRG_B1=0lx?8rZb(><^d!C0000g+5 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 KMNUMnLSTY2*T9ni literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/shell.png b/app/assets/images/emoji/shell.png new file mode 100755 index 0000000000000000000000000000000000000000..3145b5649631a38f82ffb6326a709334137a3fa1 GIT binary patch literal 5115 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 deSJv4{{cHKCVm4Y=Dj?RHmp)!TB;x!a?vp+nWb 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/shipit.png b/app/assets/images/emoji/shipit.png new file mode 100755 index 0000000000000000000000000000000000000000..a58a47f62f9ec4d8dba2ec2ff443ab984597d9ef GIT binary patch literal 9351 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%0A~O!11tyR017~9 zz?}e=3o6M86DF|Wx-xrwMC~%>Id6mm$Xcg1Wz>uovHvc$VNtQt zkV%J#dopFKW^$yV0La2!T62|8r>tTOOOi2%ElWJ8F_x|A)|C6S$u@g63UlXiq+vT1 zRNfky?i4ydu2GN{(WRWeN~&ADTKn?02UBqD*n^*&uGK#ymq8PxL*zq1He;l5^#xJ4 ziXY?v4FFRIBQgpl%n&hLdnuCOzYT!Z`5c(!zAzdcBAUcQ(fQF$f*|J>aZoe}nG<^R z@-;&B8i;xdy+yimE>|2}rqZY7D)a|^Iu&JOnWE+KJVipShT0L=E-&&i7e z#=_YF+agM11OizfI{^`zE;lntwY3tZ82?k@PvH(+%~lC>GnV~h`@nA|0L_;Pl?N&za)KTYY z9LbKP+dqGM2{uFJr%scV*&E25xpQ$DihBZVmB{?40k9)*U{+{AwfNzOAD+Q&&>IUO zYvhYT;2;3Db#=W*+~c@9v?v4I8+l%v6`HB%G{$9fTBY$GklJ1hVQhj}HRq_F+L9pD z?4h&e*%Mfzg=@vyv`Q6K9>5f3dA3S6kAERt8rvzKb6jWI72K(;q_@jTeV+2MZBETo z=~tv^jo;Il(p~f5HLE0=q$<7X@)(}F%C|+bwnAmvx#7XnlPhY^ne$+N$jsSDf&m1S z#;6u?If5DhZTj@-t+;XS*|XDDn%xG52x@O~O9Z>`RF6S_oMv_LyOO|Fe8(HhQsfjIJMmS&YH zP5V{}Rk>rD1nB`yori0m{L-Bdb3+33|IqLV+!I4v`o=JUpJl;mZ&G`t@`E zBk7N3{bh+hrvIQDkNS;h;k%A(7I_9d6FMB$82q=%G?8u$$y_(4ByKuWG^|L21Fp&jzc z=zOBuc$3yD--XVvlN%Q9*6B};;VLRH@*Cy4T`TyS4dWX`%g1yoDvs#QHH)6H1Cmdl zzqxwHPBI_VB05}OUyoZQ%mf4hMbT?G3AzV|E5p$FH_8A6z~+B3`wnXnI@s0;?1MX` z!w(x?`e*Xgb3IyBAax}n{tTht9xWA{E7ceIaFy%4KnsMio#}WC5T*B1{wyc1B6ZEKy>ZE@sr*^9XCnv*0G0y+fKnOT zqySEmdjHXL$luZ*owsAjMhvTG502%j2c6MsJ%br)KSzdSs&k8UMl4U}R|RFTPORJL z#*wFZx65NfSdxWT^v0s4?UD>1t~AxHS-3HvRXn>yWlF8moA>**%Qm~Whzce)c1MQu z)sqhEsGZ9+hU=a!($8Xn16GT*(d8Qb32!7tmUu&sLQ}p|tuLC!7AMd;6x;KahBK?> zhM0-ifx2V`?)Tb!ar8c`P)v)Ciz^&Gdb9zCBm@CvGj;*g2V6K3>-mRg9E|+nJB&WI zEP>6yTb%yOp!Zj+R8F&7L|!9VvI&l0;my)OJoUsXJyjAe*I)8#m6f7Q-mKIm z)o4veecAG@MFcA%4~Orq`)6|BaEl^JFGL7#i$GyyzSQ2Dun=&^?pchuvK(S;J_*y9E&c2b8j8bnaAH-jIzM`KK`RGHHJpYy|D z#g$5X#*dxXDw=p4cwkkxx`@t_t#OA*a3)hcCA>>E;UIK?7=_`YXN#mD7B~P1FLs~S zuzy0UG-nK3njOzm79G%0J8(7tUf2*N(i}OUr3%q`*G9ogmwJBsoGz(tv4(O#^Xk<~ zT*SQ1?-}$!#}U!+IzewBKbzsrf>CsaWLSla@+ej5f}EJrnWLK}(RVFmsW9_cZ(=I3b+BYAx)^sb#IlXx|sePzx9n0pLN#&F;*7!TL$|gF(PJb#y__EHpBwwJ6 z_Gs#!M^?$y{mdkM(mFZI-CSt4~7W`j$UD05c3%r6$w{;a`V87bG-dNM?rksX@J z`H=Q|Ri@ojn}w^rIP&apwk+?A&b&98qX@-bKfYU2aS{Lv=}?aKs^^6`!9vCBQKxSp zr2ZGLUuV})#0vxUKLLQgyfFYc?I8&w0S3Tk_kct&*)xRnk+ATX#}tgerl+Eo zgG_a46ijyp`3nP#?_z<<_o9x<4`GRy(z&uE_osriNS?wgj1Qb)GFJwP^#?JfBRj;C z^Av{oLprL$uSvArnQVn)r<8;?TgKG`dMV zXKJI^u~=iAddXnQn9CGJxV6g?T%U9;jA)m-rAbxePwGsSAyUn5*!HZ5f@tQ-4RKXa zBGX=o7kIWR(t`ki&kg3?3p=G@s14|#B+In=nlzCrFa!W}VM@~-f9Z-3V9V{w42CJE z%&%7=F~j=(okSnaB7o788ikPKeU3e90ed*;@Q3bDsWnbNr#CN~ z&XxzcaMkfHPkGT%T`H$Uk=7HWahab`{TUsIFrrI3zC>+Ye8NZ-PiAyS(m2xeNgUa# z^9HJXlah*_3j9G6YH~8=y2>IIwIE2Kad&>gj{}esrnkvQrosN^w2rS>ZfI75j@cc^<$I0l*pCpytm|FN=aeK6|ny%W+<)(HcuKB>E6o zh>Z8>lC54ZH&mU}n^FV$8dukc9rK-esulhWo^v4f`&Z_~9k7eQ;p~4CA9;rWTw;8L zJm7qT{qbHN=>=k_U%#7-L3SL8%g}qBj?QrZ92{})kgI~6f9V+O2y?yDUFMW9sL@R- z{rF>QeeqO*ay_)b_;4tj0);;GsP1LXtQPTPFSdBeI9QtOmg|d(p&UTv`O!c|$H_Eh zC!wW+vU7I3-!ao!s$b!Fn==8OKSxmuYm6@g@T~FOI&TG_`o_nYX0e1=zR)n}2D_iF zKw&@l4tLlTAjSVM82k@tG*g{`{6=@Ff*kI!Ck3^MhU6%;o@aEX4P&}B%Wz5zWD9Bg zv{cMxAjd#hnbBYoiWyNM)8!u28558sJ=$bTXG`>3E*Z=j!1#{i9<_Uq7OI!J-fj0o z=WC3{S*Y~ZvdPC5)+g`Q`QK&%{2*+Hw$KfRv4w*NUaISl8F7Q6Xo;-?4=<3$qu6r) zQD3)u_=6tbt2X#uG@I9q?E)TXk%j?KZrc_5kjn=1+7Py6tVgq8KCN99nGLSI_7hP@k;*|$`xajR1561`xvi=82aFSjc<8mE6@HZPmq zDt7dE);-6qQx&sSs!cm@G$uv~l@2aX`C;QF>NT|hP^?7lj4jTwL$$yjhALke!crB) z{yg<6wpgnjVy*i>4FJnjg?$!~2U+|PO5?9ps)36eI|mNA-9B^#kd)1rb;EH*w%??2 zJ*K20ojQ~=M*=B%w3xZtWgeX_6Uiy`hT8!X0KjF>rkf{@^ z4W_KcVwGb6S2Ao=UB}FkF9gAE_nEeVeEz3bUy3aOc?oJBZYP+B*Y!z+<&aqr-8PF^~@0A4HP(w0hy-y+DHJOr|hcZrV84!+8OS zn*^>h3RdY+fjCt@ZXe^(tzA^9He_yB>U^fL*@Nxwviy)sM&E84IuW|g(U*qFyD7>Y z`3HH(>inMzfMvEOmW?oG07_$s{HGw2dLua1TJ7NN3Z3_;R+-1}p9LPi98UlJS}pzh z%a?(^97TWo`kMt;}qX|FQP zw!huz=-trpNvX-?RBbko@rB600qMQ{60qK}a)Ax7KXwNMwaUI-1 zFr5Ix`s(G&$#e#6kAGykje_Ydv`s$wAv`KJg*y|6?_GP-mq91Fp?viuna`c6}^5uh^SBSFKr?^(Tmcn|oF z0E(rd!1}YAx}0uNlotvpl+(5i-EMPb`Uw{(;(>tSuF;m+?Ka}M)D_(vFfr2o&)*w}odli7_dyVgxuoZNNc%TD9k!MO z0)Z;=*WQed4F=*vv4qaxYtT?Wqk=4!%ljc1mQHf%PM={y?O^OA__8JH*9}5E&W(pd1kO8>A1E4U~Ek@oz;Jj}D{=3Jl(YERa z>->NUk`AEYeKdUD7HS-x`z_Vqpx)mL0RLaxe*#q{ow4zh!-4<+002ovPDHLkV1gX8 Bux|hW literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/signal_strength.png b/app/assets/images/emoji/signal_strength.png new file mode 100755 index 0000000000000000000000000000000000000000..a4bd23ebf70f3ec3168425a277596edfe1efe2cd GIT binary patch literal 3231 zcmV;Q3}Ew#P)xt4g3MAR#IwBq*RNAl|sVK#>q{sE-AD zp&<1E@qj3;3Q?67q25&5G&kHrn^eY0>^O03uf3O0HinlL=V117_I(13(Nb zau@*wkl+wJMBvx&tCh=P!`9auHvi(t^S}8Mx*TH?yzY)~7c;K?NMZekd-HwkkjiJ# zKo8gsT-QZ1X~VG{SZrko5JU)h2;b)jf&kzl!oY{OP{G3NC6q3n|8q6q51c&w*wkfv z!1cF%eWcLS|A+peO(TVM>yXH0VJDKfY*a)GKJ zVrHR+@u?Et8o!9M7w3@5<&nwfk;>-potZqhqk-is$6ol|=&}j8?$h^gDXi;%di|!W zhx>}_;G{AbT-S@c_HD<$okb*E2VOly*$d!@99|gW3RhD_xMeY9(+L#&ve>(013r7> zb{u(k3eO!mjSG$oHIAb6nN_IDW?t7083~e3m8yZyLcWo=; zYqyUepHAY`WC;^96_ouDTo6c#dR^JWq{x@WU^gU}bg;2Mi~YNXaP8K9Jo)@6{{5dR z^bOe{!H0Q0e3UVEfQZOQzzugka9{8Gp}Px%14yK@*uG^D_usV}vlSn&ynO)`Kaepm z+1ExeZODopK?oZ%Q};1F@8R_1Ja%8*uWWw&&tsfY!bZTh6mjA zmY!FKcI@2OR~$s4(2Ilj>_ye*IQHJOW}7h(R_9>=IBBoEes}W!aa}=f09A>93 zVDi+vM`~y0Z+_#AM}m$Xz}M0KOrd{YrY8^PCh*CT%?LT+&C?fQt3<~juzC;a5C$wL zn{V1xR2UAuUWLRYv6ZW({QzF+NPuG}Z_O0)a8oJt<}(-`>cz>iX`SJTu!iOaW%G%K z?K?O2DlC`kJ|s4KDsfvZ0j`_6-c2S|gR`M8kNIjH^R+;gIk5(ZriEI7QUk+K1Ix_p zJS4V6BE2Uz2|A9u$#GrSmW^D>#dN7AnOwEtwPO;fQ-xrxAy62yX^lx@lNe(OV9ZWg zwgt;bJ#R04xSvJD9`fzO-tT7}J;}HiLEv35QJEr z3=k04PltbsMlKx~Js z?B^o-A|*Bf0|6AhD=PHGE7QchGc}K~OBE1Un}x+(3L~2eN{1P|Q?%?CqHS0s^EAi- z5|TQ7AvHwM6$fATIJOlFxMtfRs2xARIp$^;kWV=fh@VSHVc-yCDJ+m8v4I;1P@pw` zT#-Omya{5YOYnh_A$_62y|S*Pl%y;aDKS-q zLk3Muq%JmkfKG%BVS*3@0+&iv^kfop5gM`h0o;4CRKvUHEAWF5jIqUgCS3GRkQ*=U8*8!+X@TmN?`DSC2qloqN8g#Z~sAY29kWj{bY;7Cf3VogjMytxk`qBdbrSEA+zidEOK zkaTTDgl)BAnY9~isLiewYqa`|h@@V;r>V~g=#m2%QA@oIkFgKnv{*p3vJ}={p6WrU z+}CQhs;(qLie&Ce_ed7Kq&Z>oSORp};#>jbF+>GiV0OVnHfe(x>pCzI+VMb8w=x)& z3j!@O$eV;&7DB~#d)b2ks5zHs)5-X_t<^DK@lf%lmvI9y4#3iWNe1wOgUE^OQ@ULU z(AJZl1Bd}&%c|{uDDcveam<~c2eVk4A)AK>uzy!kxi}ZGz|?142&D%@4iGIs+SV8~ z0b0b-(lb|qrZPpc%skJ)FjuYPhhM%4!-ZU1T*}<=>i86njZLaQUlAGm_sC_J<=U4Y z0z}4HAesi1SR(R(E(RqS;no|sW7}Y1i9&eX!Lj$wg2)EU(3&i0FEs0DZ#A~={)eW=^MlTbE8vLYlFVBiQeud0M0y6A+R9&q%iIT0)J20CazISXnO(89Uw}am zT1V@W=~-I9y5EbMSRk6%y6ps`@)ppeQvzvzZ94HhwAeG9hRTmh;nm$Bo z)8u&-l%~#O;`H&qo_O(@106je@TzZxfq#GpAw)`m$rr70{5tc12LT$`Q1`vj*bwl` z<(GZ0^8GLfAh>|VY`|LM1PCZBVGyE$4Ssq4N@lWfYzNF`(66<1sOA1)fO@5d>cR{p zHi^+R4c1N_f92V9VekuyRQ?vragfT{uq<0QCWN(dSnIa|9A34CN@)%=Q)gb3*d#_% zC+JC;eCOCt<}Qq%l^1%I3V0Z_ermEdlAaLKW@)no}2f!8pE&y!bbIVmu=w}H z5TPHy_sS@jrjM5{j6Z(*_>0d$p8&uaA_~m}w3Cnouu+kqk9F0^jeAqsf&Gb8_F6ZQ zEHc}6bcefArIPDOm-8^F`%`tV@-MG4{rcGGKaK(r5qL}xk>BnA2ID-T2q25Kc`5*= zqHo?zfQg74fPMfetc~L}6JGi9|8vw#L>hpUWV3>>Rn+%{0DJ&7BC27T=f8S?Vd4su Rdo=(6002ovPDHLkV1l1S0wVwb literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/six.png b/app/assets/images/emoji/six.png new file mode 100755 index 0000000000000000000000000000000000000000..56880556577fae986257256cc11bb2d2d323a67d GIT binary patch literal 3791 zcmV;=4lwbFP)45Ab;tkrE%V-NoZ*lnMRActQju+1lxQuE>%_4o)wPubPT&CXmlUqu!g15|Q`-+M z;sX5|(3MVvGV8Wcg$0F9ltapJA6YRR@NQKC#qmZ*s0zEeZa_U0|ONB2H@Kx!7w zNRULNf8sy{NDA-wpL5SS_i)HK=lETgg5PcZzX2N7DMso&_(y%3svK5Ty-(HkHm0xu zW9l7q(WBtp1^0N~we2z2wfh~{dt>0OAN6z6Ei+*6q36H+&=gl(BJh*NHc75)-_EYy_(1UTjN=%QQedmXx6%AmdPk;WKFE_Sybk?^t3HY5` zoAI?nJ%|Pk3{566v5-cJoOeAAP9Z;Tub2q>P#9E-h@oLiB8>ezTX0WD0zY|k5FcNi zMtzG4?zx?A-g%kOj&M?01NQy?3(v$iwLB4PYDB;cqpQ6M&pqCY#k7TE=Vy?%Y;oqv zefbbfKFA%D$Kg;cf&)7glSq2ix@*^gxM8WyK# zFgbMTWOj7vp$|X&o?SEp+y=fs6ie(4)kVSd0DiBh4UWrk>hdg9QRo;v+`Z!R2m=bl zGkujk^azB7$MGeqY`M-3zqr31!99b9XMFh09`lt=!PK%oXz!7EM@Xo%G#pMc^mN3w4Ak(B!(7ZSy)^G zu^|u$?k-sbHBE2TbR8-g5HWSkC9}fGTLsSmzkmXs2e@9Le=vw@F2BYp#Mf>*3j{+r zD4B>&FqSlcG1XL51&XSIDGJg#2jI9RsZZP#4D-u5jLc_{v>ezRaD7UZ0Xl%Fsi8d) zL}Szduf+zM?KmS zVFYv)B;;)u;|m#lG`fiXD|5Ioxr|+HF~owp$P|Fp*d;v>%PO`q25{!zv5+SNf*u#C zcoPz7J(spHK=225wc*PLwjyF`D5lm#2nV_wk^4+1etl*fzdSLF&c+b7#6$2ruf}7? z1dHquo?t9#fV^2TK+M@LIq!+SS~ENY=9X=IJd?uL|KL76*u4qsk*TYAYF`I-QI`C} ze|-c^$)Yi0)b=dILoBP<${4^u3D2dFt*>V1GkFJB=F<4HC+|n^)�mXHyh^e&l}q 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 FV1lpHA8!Bv literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/six_pointed_star.png b/app/assets/images/emoji/six_pointed_star.png new file mode 100755 index 0000000000000000000000000000000000000000..010f8f5f95f48fbad932cf135b1522868fb4d547 GIT binary patch literal 4859 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 H%wGQo-u_mU literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/ski.png b/app/assets/images/emoji/ski.png new file mode 100755 index 0000000000000000000000000000000000000000..98f5cb0f4608827c08cc12568735ffe623dbeb97 GIT binary patch literal 4167 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 X{>1NPjX2Pf00000NkvXXu0mjf#6th& literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/slot_machine.png b/app/assets/images/emoji/slot_machine.png new file mode 100755 index 0000000000000000000000000000000000000000..26f114830b8ce5fcf5264d88e1b00e16ae5c7e6c GIT binary patch literal 4605 zcmVvku(bzR3Zb6fHKGxlv4O@{<-)q{(U5Xj|A|M06r2xl!V^i-d6x1lgWG_!2jnN z!*QJ7eAHbRV`F2euCBgW1aS1|(Ur~3&4|b2NT<`%QQ!A%O2HWVuxDG3`7n+x17My_ zKHLdQWYVNUkw_#f{Q#P%p5R5JQRySguwuoEKm%G^Td{rnc3gGURRoW~&-n1u>=@Iu z&(zN_O|vsn9;AHcyK&zIsmf$*Jz|hlkSZl**#aQJdA|T6WLg-H3bWCubc|_C=c9Ux{{kX>USbB=wDX0n#?X?Lfq+HGCHBnZIC>^wl~+4QT8` zUZzqhrun#Z?)XyN9{UOC0mu@7QPFr_9`X`NY~H*Xg{4JEwWLrN zsYP0)fpIgXBjlnVgBX}{9^3wB8|Kr&Oqnu88llv&Zr!seBF>n`@s$s#iE#!%oT>dd zfBrn?%$bd;6_w~d+f6%a%p}oCb z`e+<(*aWl&n3s@w^7pU59(A*);pdNT!xym{9!8)-oJR;W0L8Qr|AmdnTczL+rZF(k zZ#5*9@~~vd63m!WD>$q1x1uS z$d55qH(LWZ{b{Kvkswn{q10|#{)c#R<11)9bp)%h0{!R<8kNR8K1Z4B#@^^|Ja*H! zv3={Ww2v_3p+p;UzzI*2Vw&aUx`u5QH4m(~negsSRls`F*|`ZpiK zv&kp10h{4tI#QU0(A);X(yN8(JD zpA~`=Ou1mHKrJWPafh4j1eMhUhKgc4x8HgPUVL=}4qd+mUy0p`?_mvo!v8n2p&j#| z!Z)7zd;G&g-;@zz9l(JNdIYDYCKnu|{?_Z))J&G2vH-_Mpzp>x3j<$aQ_`l&Ot3?uA z<%(mcNNTr<2q&Bd&2(ZNSYctId8f-O(L@n8cYpKhy-^klmD9S6QDtzlZ-;prb zcv(k>rK71_aBPT-j0%J>nj1gX0YVuk7|GTEN=68FK|;pUY1A_W{XV6*<>HI6E|tR9 z`up+lkt6sI1{FVIr1u!ppR&W%=g#4sqepF^p_GlyG3w`v0~;xla^Xj`7#fLv(oQg% zwHA=Vj1Rb40LB@PvC#+viDIsxHULPFE+>^y-9`b-VFN#<+8to@w`1*E?B2OkI?u+e zFzLW@!I5=HfFQF-s`m+qm#qOnU?WPe z_*_czS81ZLNfqPdxb~es6FPpX}{L8yo8e&`hv-mtKlqmJJRLl7^&y#yG)@ znluiV(WF6Pn9-p1Bg4bF;0$R&2D3`^1APF=3C#io5TJfacmMwVvYfoOs0bZ&IKu#X zNEv$NfQULQFvR31iuD0K-NTBb%^MMu8xr z*82}0L=E%Kv11qkFh&x0M?gADQ8%Lj0nd&QpmM??+1bPqL5Kiy!U2@_YqIObzGj<% z*-p068=0r{Mg%}4-_wI#d-vjDO7`0TzD4>j=@gk6;;2y4R&}Albqr2B%mGKMu3c4T za>E(aI3}o)o#qLgplE<>8EIQ_M0G`lr2KNut5Y9%0DgFrlz{mZnv=;0W5keDL4~I; zmgR<%NaWcqI)&VDhM0!VOr-O%3j{)<0e-N{OM-w<>asgTFwB`XOYijhP%@{wc7(_1 zp&55;iNi{qloJl?$V!giX(u>&93J!t4i|McGNqZ5CSD8)(N3(ySlKixw7=;fo?E{G zPyg%p@bvc|!?QnLkA|I%qH46uKs~kX`mz^bZFjOb)&#_itRN?aBPr|X&O1UM6bTBs zPQ)s3A4AS_oL+i*&f%q(evX%)e;R762@C2Av1nc#MFqRjuysAw|N92Cw6@9jq_7i| zJUw!bI0}H(rd;@8+rp3b1E!y`i6cST5mLTggL8Q)(@taKK6H0AVd)K5Ad$Qh>CAZo z9L9{Pd8nINf~MWau=$lCEM2}->HtbeyF$U39L}be!$ zPbdJz1k66pDlSzhEK=fetEwwS6F8%wqOt<@_4O1$51ite6s80S$f!DdA_Qe{6e4jT z8BshCnTn#KLT$suO%|Y%SiMx~f@B56(vaf2sQ?U)&B@P=DA`1f$D+cIBPQTVUoSKb zik*ydA@ZLuZo(b6f7UEYG{J7(=4cNNnzeQasacq6<7g)9OCJc`Z z1AsnS*YQ2`#4{L@W-?MHXNgU3zo|oO;6T$pTz}o~V%RQj%n7t)Cs{U zW|+)APG|zg2iPs6{cpd8eS7y<)p5+BrhbNIoPff#J_HHdndFZgK1ezwf(2A4Dl_>| zIpkhI$ZHFhq^C~4hvri!0o#iCCd`}CDXiVw_tL&&c+1iNy-0{iUfhZHmK;^7tk)9y zDB2!+1jpj~2s^Y7V0Lr#!b9nQ?4Ul^2cQLKJ7U)$^dWXSR*HGo&fWT*J&u?65xx(Z zf!+gzguP1F(Wl1dvc$wbfQ?&bX4hYe88a^u;ItmChyuJo@8PiFG>931OFp8t!ed!f z0iM`8>*=dAeZA+<+0kl`%8QE2P+3(Y8<(DZ7hw4$id-Dw$nYTR_1Ha~WMK*Gl|Zo$ zO-R~LgF@B9@)ej5Fhno;jqjx}JVYNL+Uc5s&ei}*Mm8R*t80*-EXEK2?HR-il9-ZV zLkj3%#X2vI0oNrtlJ8`h0#MC*EyO6|wY53)9TanLtmHf7i-%$jJYYiSrdsx0~DWl7N@hyc##qd=WuQxPe2HPJbAN`~m z9{CUlu8^-3`dF5yK%UZQA?{_1t`z6YLC|JCQ6#9(0f=G`6!N*&o|VYMUl8Q;?AQu| z-%Tms$^6X#{tODAW!bHydsu!WrMn=Jko~$pW!YCe4_7m;FD))YNogrZ+7Xiq%*2r^ zD}^PcxP#As1z-h*nc#Q-L`U~=3Mg4#E;me!vx5Sn9FR})-Mz%PoBV!;eE%iey^VFR z%g@Ie3cQRMUnY-#lo!X$@-k!qSwKOq*N6sO;B1f}t`0onu{a9I+(M4d>EdD><8*Sz z7(IMtB`6)NAmGnxYA~Ommy=#({^J1NuBwu6BV?wR!kDQPYMC!8DV7c!FHgIaHmf)? zvzW3z7Ld6m#BwRL0@f*JyRo(Ar zUvU#2&orM#5lzVN=&*cb$VWRd4ie*PKA&uB!wvv%aqh3<^L}b^T~R`&OA`)f`+$h6 zy{VEv&i~@9b^@3|@<|Vq?jpzm02@hnGQUYrfHyM#Jb)!kGXQ2Wy#zoX>6bx$i7yKB z^6iwFqDFaaV>5tH5$neQT1i*y_%7}Ha>0UXYok*|^LUlzUjT53^fS=hSodWB#dq`X8q_0mzLr(SQqIk>R{7QB&>AIas`SF+4VQK!04%bh|$Cs$#mC6wyGh zGA&`Y5qvM@K$FZ43bXZ2%*>fH(Q~#HO5Z>$&5L2~+H!A1(s1;qP5L;R@D|4<*6yrCn30=7Gsr$|EsJ-VOng-?gw zNZ^5yF?n&~#JgB{fmhtsA5x-)dlBwwCA=6!h%lPMqn-WR{q(9jS}uk5oGKvPo__Uze%j6O~pcTYDo z4cSq>P(ECig%iG9nSBjk(lAYUKRKJMM*PNQFTC)AJ$!Wt{J-tnK@k7|0Ky>8{-F&b ni@<-5k;ec40000000006d?H3?yhfOV00000NkvXXu0mjfMDEE| literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/small_blue_diamond.png b/app/assets/images/emoji/small_blue_diamond.png new file mode 100755 index 0000000000000000000000000000000000000000..5a7b5d555a528c173c968a759aa56a6be053bc6a GIT binary patch literal 1898 zcmV-w2bK7VP)*qLZMxewZFhEN&dfRIeVlz`G8ertCTzCd zJ-_5X&zs4)d4A9PPUf7+h^jJ|ahR(l0uljWoa@y5f$cieHy>hFJjGXeE1TinbKdbZKtvHFqu-F+|2Y60`s9zJ=~hOTAb z_`-Sy$32eqM;v)CBwgFUp2s$kUE1+r!x}4Lb_tLQwW|*euexb%`@yf?OkmQy`9XvN zg%bSfA2Ho4TX^crTWN0Xc(Atf;0v=#05?26va)OKvVBi%Af0aDXn#Z;LllA<$Op>n ze~;L(riCXT+sML-1ZnU4Inxi*`czotQ!Z^Ak8QjCmJMHfxC_^-<6nbPsY*HxDObQi z*(ikoJQr^1gn^+89RA5$4E*!>5B2ok$F4~MQi0Y(!(CgtmhS(`MlMaHc=t4GA0hRv&mv9a^?Jo5(UM^3z`qkDE=Q%68V9IiVw+`4Af(ua3*e| zu>k`HObkKERH6iB8@n!7sv4yfDX+h6NYyp+nTOWVxMalxviQJ@*Ngy>9Ue=b9?o`l zE`9jHF7WGlyWfC9WDH@1O*vG`5tOQH8;uR6N{${E)^sl7lMk$;{<<6Pmu%mQ*MtC? z?;dKoVb%4YzOM^E)5u%>AQ)mb*ha&cQrS?7rmBrym#5wfD>YIuh9ES&@o!kUViEUz ztc%Q|_WPyj!1GtF0Ff{G(){hewywLeb=SwcQFk8i48(-7AvO?(SOKLn1XHzy-TtLY zs%xyI(C!4dJgL0d57)P5`NTclG`4koP8RNa_No(LKkXN^4bJaavt`F^t0+;=z-h(A zpbB9)HQ`F8rXCvXw98au8#mb4Yo^4-I0D7MaC``wnw!~v`&zt3D;|{v-})6F65fZ? z{HEc$_RiLuH?1Lv8o7AMA)OX*96NmxPy;TYBB+AnRP7r>H43p&Vq5KXL~1xW3JV(+ zv3~PSymQpQSLPl3wNC80cLoL6ZQo4e=Hqp3t6SD@TFZj@O-uwnH8tS5f&d}{fDy1F zuz-SK!6+CY0uUQyDlRypcme`k4$`!>d6bRIdw-LAL=L>Hx_9S{34kR(;_}iKufB~- z#Y*$1Yna#IlBp5I6=1)4W~vTGIfTDf`jLR>$->-T)z^>K^zclNco_G1qB4+ z$VxyJuo9+XFri>j;z$WYCCJAV^AQmq;6FE`0#px;12;?iD@PD_TdJ-Fp%%yWz>Bb- z0k#<+0>whU3@B9ugen5y7+dibi52l;h+-m>C&-NxT^Rk2>LX9ipnxhmc-MC6c=?Fy z>oz}?#qnzJ#KRRuJOMF?IRA%QgDNPXu@b2ghlU_1P`G%O=)%xJJ+*5umYEk|(Se=Y zWz{Q3+_b;Vaheey#P#t!5D`QS;DG!un+C-?gUApmgmFl*SR{XOoYL9B13Gg5Qvg?! z0E@m~*$LgRO^PRVcnipggZQqMfFp<+5G&zIv^sf9sM8eG>02OLkZXIrg=DI_w_IhxV^o-Ob5M>cRaVJ@69{a^_P2o8t^~_2T%lys*M6_KqEs`hEg%4kSmfq zbB5yR;65GP^-ZP;k7-2T-+7y?{M}y!e``aNgGMPx`*M2M5w+U105YH%AJ0{A1!4eun@m_V6!QOVesti~O7lI} z@H4?GBG1>be97-K+4fr-7PgRS$l#}390!Yu4W%F?KT#leVT|zX$?xfzT~7ea0s&QI z@k_6zmn{EieN&d&+6=DepeRvfn9NOZd29^EPW0-9-TMG$n*fVsUwSo_ZM&mxVGF5r z8dbI5@Fvckg)=95^z!cg0JBm+Rl+Op(7b$ICNmFJ2nrWq^hBRd?AkLoejOfv_f|#* zCyVFC2*yWYaNrMDG(U@XfJNlTwc!00v|sh}Uu1?z{x86sBN31YNCYGT5&?;TL_i`S k5s(N-1SA3y0f~VB00a$#z2T~NfB*mh07*qoM6N<$g6oxl+5i9m literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/small_orange_diamond.png b/app/assets/images/emoji/small_orange_diamond.png new file mode 100755 index 0000000000000000000000000000000000000000..04941d37b631baed5ff3af98070a5b6aded63962 GIT binary patch literal 1944 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/small_red_triangle_down.png b/app/assets/images/emoji/small_red_triangle_down.png new file mode 100755 index 0000000000000000000000000000000000000000..94832f060c453e5ffa2d190cff0616f034324df9 GIT binary patch literal 2157 zcmV-z2$J`SP)`r5vWm&`&o$Oe;T5(1$~0gT+BCX;3xFkxo!%y{B;?CX2a>EBKowN^&+P|7UvU;6Z& zd+w2?@8|zLy4IXg#uzT;vbe;{=Cdz#alfFBmYegw>F`C<0jB#1TwH2lKLYa)LH&0J zbvHq^*Z>$7QCaiQ-fEV)&U>9>b*Vi9rei!CT(wv>L3P3BUS~QsL)8IcVRyjA+PP!i z>X@@S=Vk%7X!ig!%eqc+5ufw3=M}*J6n5@$Ck(StJ3!4H`hu)kq&l409|!oXfY_hM zCO5}7Psb)_b#8)7;ys{qe$IBETV^5u7O>`g{%3D>bADdW6?&ln=xo!d1BB|hp6xNv zfcX#U&bis&8Rj1VKYRG$%;4_bs=vQq^~Pe#62)xWvg&n9Syt=Xs*75#q!3wB7t%*j zWTeD(%ahG!q#Z{atxXh$TIS6}5a=+UH+DR(>b08QeakK7dG7$p;okzkS^;00xO^SH z?_r~m%pw~>&LO4z!C_&2SdUeehtHjrpbk+2kT)pCm@5?*8*tL@SwDAa`>)zEQGQ`Y*0vwG)fjumIZ2V*bFBQl0lB9fx zl;`029=_|~x5l0;?ut9&NxW?0oX5q9<6?^hAQl#e{&)%vjn@e87I@*j12D$uSE)Xb z%=ppz)vE}JaERkN4$d+O)+1s2Gx&X3{GJS6?=n1br#Fk+lf_$>Zp#nv-PrNTB zYdwJ{knAJ|ja;#!Kg-+H|1@dL!3FasIA+WnFHPoO9^5=YDxPMBCa#~v_gx8>!R_nC z>F+(~Jpw?&dp+m1EQ^zsHR4`Y?)CNH_qNyIW(0!oqAW!KY~H+-7`A9sT%mKa*i#_2o>Li&(~BTNbfcj95}& z_&)J;iny$4E1ee463@1-(Oo%3eR$$Mcyz)37*MKB6BKcfi@ydvs9*9t8w-9*Rt=}vEWUu?=eyf{!e3h zV=6Zf4BUS3*s(VUc5IFxK5!U+_!O+{hvijNUoWK7SOS1p45KwsBOol73C^CS_UWW( ziqWwGsh&*x{x64zpUnl;gNx>Tz`m0w-#(eJpU3yeZdlEy6BQ^{(B&#&rAjn2LpW0> ztch1^L^V-sTxzdlrZPjrv)OpfAa4x+bNm~7AGv?g9gz6yqkHfD$C*zi2e%C}nu$>^ zwZe;nfMysHX-yPG=tvWa%X}M3z20C#?yp_DiZg`**{^@)N4MQ|S7Ffsxay{x@?3x2 zqtnvXmu+0n`w~7VlxR#B30mVugJ#gA5i|&@HR`1@LAlCwrH17t=wGp%LsJv)9ldhh zV~h5D!1nLm@%a9aa%Z+*xq*ouhtctA>iGgQg#wMLKxl=p*Qu8)G>Szk0_dYgz`85f zGL*}i!8>ld^Pz_x(u)?rzzsK)yqj;l=hV)B5H`0)YBt ziQIG_ls3e}G$D2HN5!p>+EdK;NTNq znFXb2j+Hse43}NAi7kGLrw;7j`*YKLV9A^idB&JS`$k5dw5N-*A+F&F5fv&-jpvyj z%afx_zSn2_^5y*Xz~Nkp@P|w8h)jjX!>_#YPGysq;$zom0!@tuW$K*9X2-x)oIZAv z5lRm}YfN>?0eI4wvEvl?Oq|ZKVf6}zP-x&3hG0d8)sbfZnGX*=Va#(&_L$t`@Y5rO zPmf&D)J!EE4q-Ts&8{of@cz(=<|NJUFX?lF#u#0o`CvXb!L_Sb@&SsqYgUn*I?D(3 z=@*|e=Itd70N^or^)%&IGNl@~ZrjRs*XPiOxl)zrUOwlVx6|UcE48*C=WpxM*)>=8^#b@Li>@k7Iu;A{_pOG0!j$)%||~F1hLg=mO{h=mO{h=mO{h=mO{h j=mO{h=mO{h=mPi`0eOwY4JqBd00000NkvXXu0mjf>~Avb literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/smile.png b/app/assets/images/emoji/smile.png new file mode 100755 index 0000000000000000000000000000000000000000..81a8396899617698e6d4459d78bed8d2b968a2a9 GIT binary patch literal 5890 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 Y1)&A3%>RFL*#H0l07*qoM6N<$g1qYdlmGw# literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/smile_cat.png b/app/assets/images/emoji/smile_cat.png new file mode 100755 index 0000000000000000000000000000000000000000..ad333ba3b6bbbbf6525061dbea98aa32733f9ab3 GIT binary patch literal 6117 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 z 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/smiley_cat.png b/app/assets/images/emoji/smiley_cat.png new file mode 100755 index 0000000000000000000000000000000000000000..dbf1b0276ab6648e9de49ba0d6ce0b5fcc7bf888 GIT binary patch literal 6083 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 JPDHLkV1m8Yj{5)r literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/smiling_imp.png b/app/assets/images/emoji/smiling_imp.png new file mode 100755 index 0000000000000000000000000000000000000000..d904049309c60ff5cd4772f8aa55389847d8cad3 GIT binary patch literal 7189 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 CGL9ht literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/smirk.png b/app/assets/images/emoji/smirk.png new file mode 100755 index 0000000000000000000000000000000000000000..bc6e5082c8c62adbc3620c2c72c0fc28ee8ba3b9 GIT binary patch literal 5307 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 N002ovPDHLkV1he4^bY_4 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/smirk_cat.png b/app/assets/images/emoji/smirk_cat.png new file mode 100755 index 0000000000000000000000000000000000000000..351565e2461bfe0bfbb826a6344f28118f821d08 GIT binary patch literal 6062 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/smoking.png b/app/assets/images/emoji/smoking.png new file mode 100755 index 0000000000000000000000000000000000000000..4aad6cbd7c4064b69a83c718f7d4a891b8115404 GIT binary patch literal 2875 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 XuyBixx1lbn00000NkvXXu0mjfTE@_` literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/snowboarder.png b/app/assets/images/emoji/snowboarder.png new file mode 100755 index 0000000000000000000000000000000000000000..aeda5c8d872734428cf6f88af5e3db3441ce3407 GIT binary patch literal 5356 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 KMNUMnLSTZEO-bAU literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/snowflake.png b/app/assets/images/emoji/snowflake.png new file mode 100755 index 0000000000000000000000000000000000000000..54b68ff4f136bda881912c379c2d77837bfcc965 GIT binary patch literal 5637 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 Mip{XS} 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 AMF0Q* literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/soon.png b/app/assets/images/emoji/soon.png new file mode 100755 index 0000000000000000000000000000000000000000..9386615a32435ce2a8c1d8c55e7425213c4d22bd GIT binary patch literal 1911 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/spades.png b/app/assets/images/emoji/spades.png new file mode 100755 index 0000000000000000000000000000000000000000..133a1aba8a3d58bea8956a8ad670075e508889fc GIT binary patch literal 1719 zcmV;o21xmdP)R^QH!4bOP>{Btto_nbXhEuw+KSQ&L6UAhv@{y4 zw2;R3OVQT!#kQD0s$vM*FOi}p7!x8PX{QaPV*`AqaUwQDP!OLXEKl(N5r9ROz7`AEy9;fLW%g zF+-r5U4ar+u3J3v`};@Nb@z8wA|*$ZBy3LCK03E|?~`wGo=It_W>P>LstiAS-@{w^ zl;X^hl@D=_2@SFlD6?qeSAYGSfGQ}NLlG2OwEzkth`^!O)<4RBw4RMXFDp;)UVfvh zQYaD{;0QQ(@}7=!ML1kNd;&cz(x&1uiA#yt65r6sxf|*=ZRG=h zm8ZF%jq20vXi?2az_g|9iQsdA$7B}{kMp)Xr8m$-5j*oa73eti9DLrAO&sF}uIB=O z=a~GGuW3j$*APCP6bK5qxI8aEWro|hi6JhrfD>$BOg5`S6OcAQ$vO+{uvdByWvgri zZf6}sz#zBrMHaA)A4rWdiniG{E@nd0iYZfPv%J9djIxSKlJ_!esBoMY_*kCN#mpea zJ;hUCWb~==ul%&fg1%$tB^LyrcJ$Uasv$`CP)wmdIn zEhP@}efhHvq)){xX+;%q`LVprO4cw)fTq@xbZRbOH4$&HMSiO#!W15~=rn{X&&zWx zVHJHet+gTfOb;uV0aGcM0knmcw(Zqnl384|7=efizHKv8o3PeK zzXh+wOc>)Z#BsCSW{!{{x{?IsIFQ7U5P)?=8Q`@IC}5Owx^U+_mMcoYJuD!+>NPY3 zVqzPB7>}<5F`7>SP5-7?tM?isreFafD^PlIXe2YkkeuWmzM>PwE+(4Tu+Er%v*qbH z(V)o`J#6D{##zo247Hv{3GoJ(xr=QY5kg)9YW~y2=V|>JYk*lA2+Q~$dw4*P;&GBY z^cCI2C?1U#$z_c3J6%XU)uZrvph1ZT^;?{h3zX^CVHV+WNZz5Fi@YLZ`Xhaavy4lf zL0!qh78ML|@grG84WC=oNsL*i%5Em9Qf3$5U>KJ#;HVH2P{Tx_%}A000z}NFjGDB?iGX;qAroaIE z_$WfmhrA>^nWl`U`~M$!SANJk?M*yiFPZ{vJM;J)l;c#H;3S9nfG&KKS%fMFd54?j z7M2j;@Evtb3UUyzn3vhdPCR13$0H!HwxR|Hcms!!wcKaaL!tQ9EM$cBbf=m~hgY>t zK5xdII|Xfip5_645G7kE0aADxrge-YCnD*1DbcIC2te|s!04cDx}?AzZotwujC`As z_2nI2MOx%zfTDYWTCSKot6~(hN#%c0i9L=vR8XrouL%{k0kE=fd}0cK*nXI&0x=Q5 zd=_f8a&9T1#90*xX?!rgbO2G!Lc@d__qUT(8bnzY2$=rOKS7xHPnNcG1aSoZa)@b~ zSruq9vFFIr6_4C3fQT8H8a~!bI6&>51F7b9|C9T{h$8gA{E>Mza6*y)cUrwT*{t;kjtE*M4d(S zQpU+mASPg%3!LRN69ica#LRG>hzUMNFI|*!6NqRs#U(!G6Q=E1@PCs8k;S=?@d^L{ N002ovPDHLkV1jSWAb literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/spaghetti.png b/app/assets/images/emoji/spaghetti.png new file mode 100755 index 0000000000000000000000000000000000000000..08de243f554582f3ec082531844c5ab63504a143 GIT binary patch literal 6955 zcmV+`8`R{9P)! zRqP&AKnYot&9+$7rl6qMidv|3d9U8S`QZN*U6rB`3td)K%B=Zf!%Db~L$1KxL0dBd;nUjM|` z|Hlc>-h12HA6|M^e%arCZu!@4`me{`bNWgBmuRZVq0u@!_NnS%U&r-VU)=L&iZtHB zcHMQ?^<8`IwP&jT20fqo#D`Ygv3f<{J8Cs!iLRyJcljSJ`^Cwtdp_p4D(PgBiJ3WG z*xqF4=#uDHJ645@R=n#gpa1;lU%dI|oA3R~SHAMO+i$=9;@fV!t;p}#uDa@~%=_Q} z{u8gi{`wEzaKjD%@X1epa?{}8;0vo)uYU3^FNFT+KNa5j!*8DXi|xDY=&qlS9?loL zd&`wh&R;i8B8eD~V0667&iyKnys(Uxr{T72l1UxY&=3R3X0v26nc-wI`Lw2KPlsW+ z+4ucJb8~Z3yLa!d-hKDo0l-H;`cWeYf~=@hxR#ivxgn8AtWBrWCyKgrxtyL#rI7Ez zvMdb4;4L@c6CdpV?|*&M`oHem$i2Me*ukz39vX*|u2ZeI z80srvw_MVen>y+E;?z)IsejLb=N|di54L_|{rdIY0(Fk`*rn2gXICnfZV_o|@?N?P z6HD%6$hKloi3VD&RxE)=jEV&y*SE%i#fujw1_lOhzT(RFethN9U6HD}43A80+xXb# zul(#E*ZkBCbWBaf3j!2HBbzbVd$7Us#g%t-lvAyajtuKoRZanT=9ywo}k@JtMjNhP{tKQde!cZP0x$Uw4e0HPhVkHflwu_-BL@G@uKvVUObi$l6 z4V`2n(a(bR;)^ei1NR_WwrrUtc_0NKCPed^nVA8gSS;c=PRQ$;L_i2otJUJGm>9_r ziQaSrr02i9VZ(->JpAy(w>azbdddMkU>yE>rJX#C}8Kl|Cg-nen253qf2 ztE#9Fg?O2awoKPGMM59B(r5)}nobmjh)E2VV&qn&Jm;$Y5_G zwWwb=r)HhF_a#FKrzZC*%~lY@cN8rG-*1Fbh)jz~J&MwQ@CGw&-Tio=wp!8J$5h|ijTsL4# zkCIO5#Vy;b;}1PC_TXvj`mdwD$65)4se~t04u}ekp{Wtk>&5 zk!kR8F{9BoBK$WsK-g74lY*yL+6TJ2y8cUdSNDoysYp7NK2onEz0OF`#Ptqh85${e zP)Y5FsEq6Q^jNZwJe&~L=qt?Dyc+3SI-c>*T8cfq?lRMY&Nf*nVq>- z>Wv+%R;{{oczE~+V#Gnf|6PpGe}`Vzk3II-iuC#og9C#f76bZZfkV8?O2n%ytb|3v zN}-!+-1@F~y31q|l#DHy0<56m1s>^SNXncB-6v9WsD^=VEutyFiV~4fcGH!94L@-P zuIJ!5HjZ7TP$(d#ub7>ky;+{&WAY5&J+R}zH^qqYwh_^rISa(#A`P(4J@?#ePe1+i z-<-DLv@ghdx^HmNAl=>FNCd>!o}M0hd;2L@x+(D}9f_A{IzF1F5MrT4V?+Yiaso6n zM}$UbEdx9(Wte>UAZk)3GW zhR?1)YyEF7IQQJ^frJ>LiIg|RfFr#w;nsWUrI+8a{*?9KIbrPyL;d~zbaZwg3z8UK zdITB&luBiC#X<7gv*^K2Lah(G>7uDB)!GzZph5&;q?7MmNxJ)V`UXl=dY0oS*U+Gg zxLDE@lwg{u>vJTvLl~w;TCSz=2XrM~kbE*Af4f`MNnd{-YuBtDJmu64x4-LM@4Dmo zq`q9Ta`bj69bfOq=$I2BeSC%Vf^0_?OT$Wrm7jG^kQz@)O2HnVDm}w$+ zjG*xdzP*EFjPoJDkV#!Y$y~INB~hi05>EG!Qb0t+b6d2>}Phe|6emy z3L4ev=V?~A5i~Xv9=w6p#Qo@2l1kU2csR&2##+64O-W{{J5M;_gwuZ8a8Ta}Ub6fm z8B71X>iAWKa=9Y#os=qrWR#ak&)ouzCz&0-7k~7NII~YMUhT#X`$;rQI1kP6>R-H! z_uaiDU$B{d#U>&o+mS}oRH6t9-Dy%8i&R172O@&;-vh$CiDdcKIl%#K-J z{Ng62?w_QR%abUa%uK5vOR2Fu{Uglr8*#;yLTTuT0dYQ>e|G7>?+eS&>r6Om1ZY5F z`SRsom&7tuE|)2nOB9Ozq=R2zI8R^~Z=|MOh#qXiQPz;?|1?8gD=;?h=g^H?82;97 z3ez6tLW*o9joAX<4@e3ytx)bm@{6+6QU->uq7b11DY=)BCi00*3KWG*O3X2!hkyhB zu!}=~{~F2tzofrX!w;H_%>;3BOjo}^bMogTGyRmyU7|9QuMh(Ur82!0NC4VzHQ>m& zU$<`El>&dcWOhpP@TDG7>Q40LbC5h4y>>79#7)#%9Ta;`rlM?N-?x9v%ir3CI_^;^ zW+|2hK5ddom{cN-R?{O>uyE%*>UD>5Z$m$AK zQXwJthacX}V>kSYJwK~r>*q6}yqDeMi>X${ROg#GBe!8C3l!%~D3<8z>_UdZMWU+! zqs>TLs0%`012T&iE&9yB;6S_`oy+A(rP3tbr|_*+=;1+Tr*`7nbENW1$rnrPd3==3 zKR$$kLb70DCNvTWOW-ULmPs)(m>O%6&6&*A0;Wdl7>15s(c_u`0rf*@creG{q;9IZL6A{VP^sGvQ=U&lgSo)t;qU*Nfp;IKuvn#0Uqk)yj~SaT;5F}MR*Nul z>uJ=ckzFdJXj&=5;yqJSQ+ELXJ}{*(hz3(K>E%+*#q+z&rI=OG+lf0r)^G2ysLQc50N}_t8AGh0vK5P?O1>4IHOP zGVxRNN;j&i;<|3UMv+SOA~E1!0DusfQWqFt%oh>4d@io-P1C|Kvb0*0_|;z$);FU@ z4!cJ?nfBJ>R86)%FiQleT3ozeWL8BVWRETr{J= z!HEbhRiUdgNUb`DH}z{mz*oT31VYpCqd-h^34(yMrjZjUP1Dg8AI*=@1u%-h3ZPSr zRunLGBkpbd5L4Aa0R;%e06&U|f{0}7uNVeQhd#+vnx%a{eq|4?ks-`OE9@fbya0xO zF0ZrXx|UO&9brN3xo)i1kU7-2N8qIqak8eu?0h>8OTI zD1eP1#PxhJ+$92{2wLs$3IrfjHG&B2hR>iFubyr&9qhzz+KfzB2-IGp)@H(yFH;Ln zCRbVpkp~d-Xu6Kf2I}j0(H9nik}v}49Tgx1fh>|SXE8LNR5HcB^q-RAPAd9gJimdn zM&r6aKY@F0-^$)vD~7k`!BNq4GX|^s0kfe;%MA$oEOMo!fCl)pp1^77ih?Kbjvt^1 zb?8MgeIT;Kkc6tEBk+EJZ3nTjOE2r9R?cHk!S@w<3R4(bjrzEM2tgR2Dc~nI5Y~T1W8{aRr6`sMnMr;e*IbX5K9OeU z8AR(1uKf71oVm8lM5D#;@g z7d`OE>jJB307MEj0;tE|<11x3*WE&; zqldt^FKHQ@$nfTT4+E7gg`JhHnz9fYT|o7L12>?z`0-@{^2h$xof`4 zDw4_+P>5(58)#%c!my!XuQOTokwsi~%>cFr!wr`i*QYuU=ZD0-plGZ-w-bekZO@F- znz5N|*vzyXW|}V5mWLytkq)W~x~0(!VXPG}Yf=0U--IOpVE zF8Pa9bY9U%a%mpJl+VwlIUN2ee&<)Eqt;N$HPKW@z&*ksAP`B<({fr&PD~&MJOy}d zR)F>aiS}tNASe56tFO4?iu*6T@WO1RT#1*y$y9|}b)4G%|3%V!gk+{n-Cs=0o~2yS zn4VQgXF^!?J$7x|$fEk+(>)uq;q2{IR8WKY8PYHxkO&S1XP9FTbKkxz?Bc|-?C-PeQQ>)`D3Y`un14|({ZTTdp^T*F+|UonJq=+uSjzC`5n|oeUzF;vL!ts5%BU} zjgT4ari1N;xPTHfDZfo_Xei&aTdm z_OTKaMU6}2#4#6Pcb!9h_IcBoc9j=(DuD{*Q)y;qRc7i%GFCl4Gc;=_=;}%kss^qf;<+ALRKqk}!obCD2F$t3 zA%79eE6)*RF2ihY#Bpl)<kz{3wcw4#vDe`x8FrHDBI0uzcN48tPVe z1|`XOy^Dd;2#2REB5N)A#5B4xjiE=>T^q$x7%Db_fRS;RVzx!g4T%DuAk^{0EHx(; z&-1nLbg-7t-=ol<-iRBRc-5z|^|ffFGX-9y=~S^BHnnPvYOTuNeS49E8s8WA`+*wZ zv>90#0k4k&4M+fapmNsPXMO3)E3SN3UteE*N-JI{B~wQ>AVmpO%>u=sUav7Ven7O9 zPW54CoPNsYMlz`kO8N|{b&uNQQzR@EMS+yzGSw(DJ5!^a_wcmkI8hOgPJDF`mwx*7 z@8g(fV0By)|JGo5+tDWfj%MjbtVAzS*dPiTI8KX(U60{w^;!&n-%s!R*;7wF^;f_I zFbA}RH#pj^aM*UL4rot2{=}D}FtRVZ?6Pa*R~X{CHRs2}Aqax_wP83&u84Pl^2=7z zzjzJxsipKazRmLoucfR01GMIE@U>-VdJ$6{B~(l7uAYzY*>qK2qhVf(mOGWS0lJmL zP!u}+Tk+L31m!=WkT+0f@1r$&C$-c^NvFyJK0(WIa6}UJ)M_>Aa^3mbP9C`b{vU1H zwCU@>beqL#v#~G&-f&kKNCE|*DBEP$Tzv7xf4*|%%9J#+nJno{nuHaf!NV{N;)JPd zm_~w@r^4{(aWYpkI$I!|{NGsa(>Ug7*!}=nn2j<5;ub zBD7XQ@dKFdzv55di|hK>sq3(^$3RdcKK?e}^Yum?`qg@s=bn46`PgHRee0E1UirUm z_&LB{_>%yC1WGRfVL3^ik6}^_X?@T zKNFb)%rz{i{R-8pkV^$*w7tyfmk@Q{L?*4Fsv&_hNjUQhl(`>b2SY^GAetl5;Uoyt z?;uRBL)Rig-=;Ya-)tS3>Nqrfh{qp){MBclefHKvhYmdr%mP)Qxd8sC1}rq8ofF6a zd4a5)amE=}pLY7`?~|>wj$AH_Wm@qLlITb@#Meko;IwQMXAc@x6eCYS9@RUD>A#2? z91@@;ifR&uI-z_{rGcw15-lZAdkFPqkmy1qifen-&0pm-O`XcII+9(&>16n)XHunyMl9B1K-S0v|6~1v(^*L~@lCDfN1tYPE_Sf*2nj z9@#xQdic4Kk&#UY4jgz5u-nkhww$B%`tNAK(T9Zyt8GN0ElZMPL3Uvm%TQU8FBBGM z(wXjjKGz}dXJi)1N-j~P8S&v|A}e6H$ug+C#6SdmhxKwkyWDUPZR&jeJ>}T7M ztp)Oq0)A8j-i*UhdRu1O5Ocx3-j)WaZ7FR5L~Vs_1%Tg{+Xi$O-1}{X3&7t(1CD-{ zK!nzo{s#Bz5iKmh78oGHe}ns@9E^Ia4LEvKu%MSUKv@93FalT*1rZP|hz=I?_V1qo xN1sUm;Pv+lOkhCsVb>DxdyYGG5yxB1WV6YH71d`wi?h-dqfFe?s6_GL>nt^0TWkoKfB3p5&q%64{ zSFu7fB`2ipNOtU4azrh$EsLZ=iWEpt+-VRZO#lQi*fBe1=FQBT_ugH)GkN#Dy1`62 zEa&Az3ht^?efr)zb^Cvof1kenMx1l}LvD(H;LS7@5z#;fC;&cSxUgCT1V9<6Ip<;) zfy@BQfVGW2&xO_IfpOquqn}@FfC8}AIrlsla1)W66Yxt7kOh`s_@u~k;P_G!1Rv<+ z!f%~`zk~z<56F==lrkWGYA1nINp*05EV{R7=$gG{)tc3Oc;^SeIlzG^e)QB{&YU_0 zN&}1jX6c2cW8Bi)Sa1Q>Mx>2gf_13@RBD-qNCw)Lfl`11Nf9mS1ycS0V3a5%+q0Yv z>n_4J@F;;y&k>jm!Smh=TsmI*Tq4ahwlU0&v8bgUU1R_O^m!a0l6b^3;8gSCB3wcO zR~8uvkfjE|2~PVIi|yx`2HS4v zuLP`6$U!kDj7%etW)l4~gtN%|#Tm*ybtk<=QvWX|u^ z%zL0uMF1xh3qlkLl`0^R@e~{S6(i>?hyn{eokD3IqF6uyqy|7iT@QbQm~ey3h`iwq%)(ngw?T8IEiEr}8;72(XJ z@R<)P{^JiEzEN!M*ANIB*9$u@S3L40U`YQ~8oC3NB6L#sx)PN}fK{LjC`rA!Gy+m# zkwM&ILs*cOBOn2wm4GPXAQ>Mx0yl3HKL7KY$M->BJ9PCZ9=u2R;&+9hD&Pqi!SjUB zHo+%=;@Dx+_tf>+I#7C1-r58tkTSbHpY0_D4mLGJ>bMpnKoa0u6zi88*7ia*hLdB$ z*Pl^*^PekrtbDpJoxyHKn$f>I5h?T z=nBXFQ^KADn!g>=)FMEojEoXOmn==9(i{z)N)3QJ@BIl_n_7!RU)neC37|l=ngWte z$|=QIN%-Ll3-Y?+p7#s?dAEfah@hhrwk#Ju_brd3#|>y8FQ6B(u~Ik@qS!XC)OCk| zGNeT20M!JQ>MHSWA>$}l1f+4#NfUf(2vHy!=UfXMASw~3=}pi~l$O=y1S=VSinwBxx$emw%JQIiB!Gn}!gg!PkF*DX2$ql7e!6EQ}JqNb-E zo)NaJh}n0n;pNyO;!ui&OPUx&y(b5#_e=p4+Gw^8D6U+m2(994&w703PdsX&@SPV8 zFC5goa743r(6IZD@;rAW!}4ypc7tPihah4=Y0ydU(1fu?E2+zZj!U8~6-oQHtY+%~ z5S#kAkX5W(CUqUBF`nj<)s6R{(|Q60NGlwmK%_25CNzhJ6rw0pS=Z;l8IYK}uZ?+aP!q*~A|=S=eXVdnWBGFmoCZ%IRBYSq$Y+FyAJ4LO zg=1_sW@6gsfxlARb8X01pUx5>poGXJJt7Gvk-CJjQ1Hq)2Vty13}}l0NMjyO0~U;B z&%qoIetd?~yrxt&tnaBosQ8s#0b#5d9MWJMSOHv`cA{G0fP_TS3QdvA3u}5~zP2X| zS`#=pe9l2map-Io<9S?ik!9bB45$RO)Ilo%B;hbZ3wb?{0Ff=$?~77MBLFfwrnfBy z2SYQ4YDxJ0=Zidg&oqxbpQXD^xaXFLTermglSd06mV7p*yWptQ9Ft|iiEgzHP^qYd z2>pz(_lThqXfTQ(hQV<_X)wacX`wBn(7wi!hQ5+ScTkt85di>U+zw)rR{>y&tYEEh z*+9U(JLXYX-Wf8yGvf1Kch6y+d-;ieIXRV{4D*$y}8;uf4S95C_ zp3@8;$gp=X&u4F*X6Lq$UE6B(c37|psAG7-dQ`~oDi60(l zl8zu52i)$3=eSw|cSkL)edoi|Lmp`yT84hd#_k9$~!qevaQVh-{=D!Q!Ipa;>>0(^P$4F z&H-ueBZ;0yKxzz88fg%vD249{Cnno?_=SGHzxxzB|9A_B&lM=<9T_87968^SH4!+- zXB<849!i8Da!i$ltJjwKy}O3_%_mlJY@$fMJK&4AP4T5CmNPal?0VlEf3~-W_N?Q+ zTju!I3vJ8>FgvcnS&*PP=T<7g6nJU`lSY6ti8P*(dL$^6G8Ec`Z|?8sjWb2QxBD2| zmRqvf3_Tq_%Q`Z&=Sd>MsJhp z{>gft{>(f4;oT?sH_vQE>rB0f>Mc67mj$4&2y2(+s05Z}#gN~=?KC|F_@(F8<7W*0 z#TujYIbJ=PMdxG6kF+e)wI>GX^jXud2&0f++&aY8)iu8Q z&}y9N;-Cd-|inP0|4)Q`(7qf8$)F=R5` z_md9S*%=h2!=FOoj<(fm; z2tOMU#|bz`1GLp3fH>0mwj2Rc?^9hjm%WCb^jZm7PssVg>DeNG^s_FW8?xN7rONG_ z0@n9uF~)$&fGL0}CV~PnU~6bo0^<<{Sx%i>#!mzo(!d)Z;Hm(mdgibc=>cMh(@WH z)g3in88TeG@*MYVKf^!0^c3wKAvP#-YO0sBqkU9WKRVyBV2~08?UG1Pc@P0tgQ!HU zGRxZ|ZA9}uWa5Z^6R^E!jLUC7#&2Bd^ZkP>_|v!6@YT$dQ#Pa&8J&ZR45aU5u9UOq5n(!#TRVX)f&T!NvMQdrK90&D8}tEYO|x$zti-?g7#S^(c)2zdDQ ztvq+KmrwrnP5j1BuIDe0Zd@=zH#0TGbOn4{Vn^2@2*)@v7O?-cg~|!2oaF7HkW=Fo z2u9i7aR?QcI5!7V6~*DncAhwX5ntMS4YxhEi<`c62M@inh4!rFQYgg?nJS}|9J4`=hhEyuH$M6nKN{@g=yZWw){b&;vV%QGH?X2- zmJQu=bY)}aY>|oiHtrmFhnzpc;o)_B_hcVy+N)gGISL{R*E-oV*UQJ(oMB_nX+E^V z@{_?G%vB+XEy`Ik8mbmXD{Y*eY2&%0Yd}@$%9iQ$=gIn(AQqfe=hrVti={9^E!GUr z__Xx~{M?o?HuqLJGn41tb9o-R{QyC%xP9$7zw^pAzPf7({)?k)hQ*^s{Y50#OhXteOH5j!ndznsGclwuN86bewAj-epJcG9Ej$32cqPIzlH{ zVw704jv;HYR+y^hnJQ<100`4lVkJQ99MIekP>wwI4;R=!w1W0x#4jum-6!5R0^;zM zrMFP!t_?$c<)y26d2|hk#`j@edzmj?{VJy>+V~gG-N;OsrHN$+h0s@C83{&$k z8|3-I^Vjp}El={rD_^Zwm8VL1#Ki>G5<9^WV}ZPh==3X`EoDIiR*@)ix(XmIo(-nC z1Zczv8~UfY=aQ3Lzj~U%seGd_vCIdCAlBTob&xyP9c5X*LN&_pZ?Aa~PY3LNY8P*x z>tQw!#>$4{r7UyRh`CD0@yTrc+H95jGoN~DCmCJifvaDl9QjmZLw7bnYlty83|+Z^ z)$L_)UK23OiZxXF@wOqf`c+t=L|D^Z;o|;zRH=r2^k8gOnQ#fBN1GmOt<(;ru~ zz8Mk_P)eAp`uzArJ3%cEQGwep86@XhKKgMW>v{(n$g0Ew~d-y7rWoP;P6|eB+=Xde!@r(KQw?4_wZQDmR zGIV4^Hm@A!b5{-W>A$`KoQBwfit#jrqW)i=4GJiY5x8d6IFIhTgxP8v#e9h)Q$@%` zJUMtNAGm0cPhIg-j?Z-P^|x<9`61S69D-PgMGzpe9wU`JH1r^j0o~Z%I;?}7AMlei zoA}DL&o9&)FZ0attvvYZ4gC48$C;`bx-vCBbkP{Ux#v=}2-mGUTTiodWy66{pRlU_ z{&m1oNw>hDDCPrRAL(awt_wU{_w3QB?&Q99yg9L&^&Qjv@uBO$I1q&uL7W28(_*a8 zXu|+l533^_NfZDej;d80Dh=>!d+y|Om%YFTZ+)7es>yi~yEdKzCmf$Fa{pz=$eD;& zPj&J9$zG04=7@s;qz1H@0x6psP{MRIha=Mfr>Vt0gEPz0<8vMJ?W0!{#~vtf=<|NM z>V#yBVsyTksAw!2aJck$K_Cw2V#epY_{z(7(wCp$?oIo+|Kh_CYp}w)?pd-Y`*`5l zYneD#1T_y{B|RgAR#Kp`wIl`?gOg-}Dg+DYkaB3K%=kb67{=yvAd)=eG+2jg9;iA2 z2OvO=v$F-j)pcj%bfV5Bk>HZ|uPlypP46*oS#=VPWzWfecCJ1P4h~MVGg}iLy!mBb zJl)MpXL=Z%ED$As+u|}9hY$szD_|`suXz%b^wwZSW5qk~qbVvaMO||#N_UmiRi`;S zm5d3da1!I-ykCBLDqus~D9iIxjFk+(dtwKXbv$(AQ~amlRdi%(I2?cW<_eBZbhEi< zl$E)20Ar|ey7hmYBnGNn_^p~?T^a!aFm>Vo*BDa?)};n0149D? z178N#1MOT`Z3Z|73?*2X8lVP@0fRv00yV%;17q#)N`c9Sl}bR43#(OtbHL=^l>%V{ mIE@EAF02+dj8JOm0Q^rb!sX7`8x(c`00009xn literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/sparkles.png b/app/assets/images/emoji/sparkles.png new file mode 100755 index 0000000000000000000000000000000000000000..92138828df08bce37374e0351988fda0a8006892 GIT binary patch literal 2212 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/speech_balloon.png b/app/assets/images/emoji/speech_balloon.png new file mode 100755 index 0000000000000000000000000000000000000000..2896c278886cd6782383f19a58ca7e477d09ac57 GIT binary patch literal 2130 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 IM6N<$f_@GPr~m)} literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/speedboat.png b/app/assets/images/emoji/speedboat.png new file mode 100755 index 0000000000000000000000000000000000000000..da6689b3be7e17acfd71ecb71a2a00e43fdedfd1 GIT binary patch literal 3512 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 KMNUMnLSTYWku7Eb literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/statue_of_liberty.png b/app/assets/images/emoji/statue_of_liberty.png new file mode 100755 index 0000000000000000000000000000000000000000..9ad902806895b5340313afccecafc6083fc6fe41 GIT binary patch literal 6075 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 BRqFr% literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/steam_locomotive.png b/app/assets/images/emoji/steam_locomotive.png new file mode 100755 index 0000000000000000000000000000000000000000..5495077667beb605feaf8caf77184295448968dd GIT binary patch literal 5159 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/stew.png b/app/assets/images/emoji/stew.png new file mode 100755 index 0000000000000000000000000000000000000000..e9687f9ec26ecf5399896cd142e578741423dbc8 GIT binary patch literal 5365 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/sun_with_face.png b/app/assets/images/emoji/sun_with_face.png new file mode 100755 index 0000000000000000000000000000000000000000..ee276636fa405736a56a0e320d6e52bbc7d53481 GIT binary patch literal 7958 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 M07*qoM6N<$f~&rV9smFU literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/sunflower.png b/app/assets/images/emoji/sunflower.png new file mode 100755 index 0000000000000000000000000000000000000000..d9bad194a210204ff2596feaca1da3e6308fc05e GIT binary patch literal 6567 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 Z{x^i?E>QDaw}k)z002ovPDHLkV1jM~W+DIp literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/sunglasses.png b/app/assets/images/emoji/sunglasses.png new file mode 100755 index 0000000000000000000000000000000000000000..1c468a1c91e677987140a9bfd70439be6541c60d GIT binary patch literal 5749 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/sunny.png b/app/assets/images/emoji/sunny.png new file mode 100755 index 0000000000000000000000000000000000000000..d23c095e0804a23bc911a027530e12e86bdd7eda GIT binary patch literal 3802 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 Q0000007*qoM6N<$f@!7Xy8r+H literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/sunrise.png b/app/assets/images/emoji/sunrise.png new file mode 100755 index 0000000000000000000000000000000000000000..ec58dcc94ffb3be7451064ca34daa35e83bd2ffc GIT binary patch literal 3914 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 AC;$Ke literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/surfer.png b/app/assets/images/emoji/surfer.png new file mode 100755 index 0000000000000000000000000000000000000000..b067e8cb32353197a5cd57e713f28638799bc1cc GIT binary patch literal 6259 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/sushi.png b/app/assets/images/emoji/sushi.png new file mode 100755 index 0000000000000000000000000000000000000000..0d179bd975689446130a87bec6a2ff0da0089fed GIT binary patch literal 5257 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 P00000NkvXXu0mjfrM(2y literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/suspect.png b/app/assets/images/emoji/suspect.png new file mode 100755 index 0000000000000000000000000000000000000000..58e8921c0a72566c7ef109e5c3619b623f06bf28 GIT binary patch literal 1016 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/sweat.png b/app/assets/images/emoji/sweat.png new file mode 100755 index 0000000000000000000000000000000000000000..e894b7699606b17f68ec6059fc697c31416d8b83 GIT binary patch literal 5576 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 W3f4mP))}XdndA1;=qQ%Qj}NjGZjN@VLSF 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�lW& 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 a_P+r<4%*_F@?$~(0000N`Rz_ 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/tangerine.png b/app/assets/images/emoji/tangerine.png new file mode 100755 index 0000000000000000000000000000000000000000..fc9d4f82ad9a116cabf5dbe690272a01ae62cdd7 GIT binary patch literal 6645 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/taurus.png b/app/assets/images/emoji/taurus.png new file mode 100755 index 0000000000000000000000000000000000000000..6af582f69d27a33c8015e0b4a8d682fdf2a6f8b6 GIT binary patch literal 4733 zcmV-@5`yiCP)h6A6xqU}1Q^zYB?}}ZWHDrc5V9`4rPsILd#mQXI)-;%ce-CUi2}#@-2R<@e{@&< zzTc`}Ro&{-LTk-GGm?L9{@(zbK_c>;7(e$I2WzG!1IIX4@Gzl8Kq3H(_Xi(^Mhl&D z{p>DZcXM$Z)%-}IaSVZVpb&qFNAb09LvFp*f@@b zv?N;a4@GEDzQT2V+?0pwyC}yeXJ<(G-E_LGw7Gldr!(m*mL=vl54i+Rt@zZGs&LJ` zx?tm!nm}H>s=&?$she2M_%rGmbxbw!!y|;_4pzuQNdBQ{1%AdS-R07?BgO93?QD6e ziRR7iR0Jxi2*-(7@j1<6`-Hrf3zzgfzJAaKoF17wx-vHW@sYvtsXg?o{_XQzASOUuyghx2kA6v=M7ma4Z*>(K+D=XQ)x(N}MDAc%}+WoB% z;vAi4Km$%6cELrp&gfaSP8|`qlEaU#=fe9=q+@G}*M7Q#bccr>kXZS!0|JBK{XrMY zA+amRrgvJ{zM!2WFEu&y;DyWBu@Pz=kF=kjRnP`J(C;ERT}*dI)J}hOOmxz*4c17i z0>ilY(UV9uyR5rsFILdP4oN=9co~JC^*Q+fM(a?|TAZ7WY& zsaLuOEP-hC*yG|(^|5g)j-3rK?JHwVt*^a%H-VUKM%+w0DF9GPqt*Ld0#YFJ0hnBz zkU&Ujaz5^wF--fySeE>El6WvqL0dAf5qRZ*21pS+Git>NiZB(`Q5sLFWy8F^1R^%k ziU3YJNTS^(-IGPy7Lm#j;Yte?_DH!|JXe9{?~4H2kwlyjR@NfX>5}PjQJx}P86Z~W zkc(weihS;S7(aUiYafV`O=T!(lOp`Fehml^n--K29M56IN8%)QW=OWUROE&J^_eCf z{_6|ukh_o(mrPC*%SEZ9hEqp+A~ z7Jk`5SemXqDVF?j3ymMEre;EfNL`Qv5hTi^E3RYKxSvruKf>{IMw9R|Xw7>K;ya!Uuy~v zj-YvM4|`U2n&W4r)}i6}I8#2`fD^MQ0%4-uv-+#d8F@Pu&wq+ZXVsEOr&0b;7d(hM z5mr34izn?RJhS#XL|^e_I$YMz+e`DRZqgm5WU&JlR#c+3#@9wmiMH}DLjtq{?P-+K z0N4?Mt!$KnRBMin`A)YkXyfGT$5J;fUOENiBl*L+OZn{h+qs5InR;eDU8L|mzx*~S zFmIR@GRpF&w(;xT5ApQw?@(=3)01m?{QT}ZZ z4JfVh;iFVOd}X2p0Wt`ophGU{@xpiC;?x_*Gy3Gx1gDKVl6&5`jL%K`8MC&};r!XB z;SBT0lEL*9N|m;2Nr`RSgb0vn75x5*g)E6Y%bz#j$ixw2=*_kl_VLP(x8OuALeyNqcyl?Z= zqmM8%IE$$hj-tN4ns_XN9kc;OF0JTJrfJ&S%Bsz4dER@Lqh?pI{NZ0v6B^l9{EKZY z`B7ecg@p_VGf4d+20p3Ul;BgG3EGU3QksE~L4i_&7r*}|XZ>_CBaW)12pm>5o~187 z%EIN(aOWNO^791`q1OvE;1U7AA%!Icx=u0U3uAcX>gzaV>X{sf-77j-e9PNr`X& zJbm38{OeDSq;_%z{V_atn2DjVcXcNVzPkybzzU1OAGdvFv}j?JmEQ%7Lqd~Hk8^3>ITW#)}j7@2+fL9Y04p`AgsbX_S`boPFTn{ul+9$mYLt1$nDSHLHjdjF?aTf zBz0;~Whrfem+_5;5?urSWk~y=6}k{8RL-Y!N0Mxh2LeE&l|uCm(29U%vuwc@){I`n z^3A_y>|rD653Mxm_8jSbIrISLjvY0M6`SwOxA}6RZPN$(fH|1lK!c!=v&mg$eKbZB znDF~GpmZSwv^2W`-FuSs>`jwPxhT^Cm?ZpSNGaL(R+1+&&oY1A%>=3DKx}@xi6_3X znm?Yils|pSME>()=3lv*O^@&8Km-|;77QlWDP^kSsTnwo}Vs2f!cBkpunI^R_gPS#0fB-D8vXUp?T)|a;_yl9(*tx8Yr>|ejpXM&1WqmijFl}D@hjR*jn7**Uhz65O zJ|{Eco%#H7-C3|OxtBghBLln+_fsqygtfmjk6cP4MAp=q9kvNZ9h$f7Lrn0w^0K)H zIJ|W5=)bK1C5Y99K$f;|Spq903C0~dwxyYO$#OpV^QnwGa|A`;ip%EkEfk5{G3S`VM&vd5E3*X0NpDT}QM8l@!Mmk^z@Ym)lsgEi0e&3JfdW8)v_W8z>v6G!=KKpzqBr+lu#{~Z_E8xP zgTRCk#Q}oiXJdlKn43stc<_>CT(jnEiol$UPU8McR^X;x>>3MY#1;Y&r32sB099@q z^ihRJn?PV5O3_AIEX|(9u4nr@2QXA;UfIf?+(8l|UiZH!tZ|gBvXxJJQNDW$-mXat< z+Kjxx0xKZt=tz?FU4oXwekv=%rcW)3;sxgOkhR!->f3}iQO*D~D6O%vP-#tXy1fj; zyeQJ5SeIIqZm+#(K(Q21z92!`%%Bp|f9q4L{cRN6?`uF&kLkbcg@`VRvM6xE7Kx?| zy~&KulG<$%u8ZM$e@j+VTKh#1P~0hONv0=7@*`;i*rmocWlWza4dt>d)l>FDq<7T} zYBh91g0?q%=*`%3t9W(UcFqu!@vIyu0Nuxg(ozs0At-ECs}?4nQ$;UKU->?Z`~3iv zYU!)VKG1Ywe;F{?%Mi)#HEs0fk}FQ&SKoV#6Iv$W)LXco4_biv(tX!01PHKgiPt7s z#%uihRX5U$LSLp&jV?3%L`)5x6b4&$EN9^;$w zi%EsMjS2muacql7rjp;ZKg5hLRdQ70WQxE$i<(Sdl_MklvJyS}Tpm52uJ^&Fbel>GYX=d(pS}qID&c zM~yL8>KYFKfrX!wytQXL_vC)V;U7)2=G7O007WouZ+L14v6>KC55WLk48?#iLw#R| z2aN?*Q1Z~%mva5exfB717%N|1#*cn^Gq>DuBe@;5G%}GY#vp($cCnMqsK9Qnzx8r% z{?3o-3#M%=Ai)C7dzk_BDFewNBpeUWw6T->E?>-nxZ&#W)05cAeNWxM>DN|MIcF2m zb2o6xH5J_P;MeF(ZtYLJX*1up>Eoa%KLbjiAt9imF2u?Q-o_3{F8uW=^u^&bpSak> zV43%|rKZhzL%4kHQ*KpL{Tm=aP^=dix&mS<0Z(UJeC^@mp-@N^Ab3v*hz<{%i`02nE#;+Ou4me3$8q%R zM(QWUal$2CXJScHH;%r>DEWK%Bb&7CM; z10XGdbOf>5Fj5v%KNM(f#-D!(EhD3)}LgCICm2myA` zhG2gQa|qGKfSk&aQb~H;*7XIA{Th%aooI9S-Zjh_d0SM*aDGs=cad#{(Xamv% zodh$5cqg&;#^&7iU7cP#DV4%gx#E4=heEn4?dh!YC^?pBvmS+n4EdmXgo zw!OF|x%TEJ@9jN6Qfs{%LwN&iU^L(W937i+cCFp`mAF$oH7qM|WB^N8#sZ1>0Ek!k z+Q(Hn(yE6pw{2~kxBYkP5{sY1fD7!@T6^UUD4GxiMgk57dR%}kcwi-}H@$4y1{c;BMoe6b7ln*CKpt(5mWega= zh!{`}g!pif0ot|JiJ|@HXn7;TKp}#F{Q=q!G~fYQAg#4dGf4gq#^U0v8@nnA00000 LNkvXXu0mjfd;bL% literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/taxi.png b/app/assets/images/emoji/taxi.png new file mode 100755 index 0000000000000000000000000000000000000000..60a50d365a41e99778338bc28198b0a654f69aa5 GIT binary patch literal 3744 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/telephone.png b/app/assets/images/emoji/telephone.png new file mode 100755 index 0000000000000000000000000000000000000000..87d2559b55256935f097f9be4aea134a0800e099 GIT binary patch literal 5495 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/telescope.png b/app/assets/images/emoji/telescope.png new file mode 100755 index 0000000000000000000000000000000000000000..51fd8a07fae664cbf1d3467c6f9deda1efc1fae8 GIT binary patch literal 3322 zcmV+j6$H!W8jp!SgD-?!iXyPV$?0BW~MdPuB%`HEJhQnZDHl;T9i-wFUTBsr~Grr477 zLpE*FX8Y))byl%rMNUTE(g3JEB{`dz*uoagI&VV;WLo2gk}cs z*4nrsX36z4t$s{fYm<^_4?g&yRjpdpCQO)Mw71@R%Sx0e(f5`CKyAFlUKlvpRJ z|ND?F79L*7+IL7106nc&uU^)%V@GS+w5i>D@4XuPfNkHt-Dr?X+d5&HlUJtXf1ZYZw!4&6_7#t5&V7bLY<1y?b}-(xr>FY}wMHqM{Tc%iD|@ zGwi$XzOz?feRYNI^ZQ@~ptZz$^&emx%xqYeS(Bc9ExckmH`}qXvGf9>xuvG2IuM?C z;t7r&2q`HkMmu`+sJ;8{yXS`wA6`4y0GM97bQxQG__U44IB#)-##&hUa#p`yU2D*w z0e(;DQxs@y4?p}cvyU}65E2s;ZO)uIcIM0(qn$s0-nqrtv15aR9KHGHwrJbg7Moe( z3!|)ZSS71jHQZ{|s*RsJ_ODm3p4G2kA26InG;7w(xkdl}{cYX4b+&o)X4|)KpIy3i z$!NI5tXZ>m1d9dOKhoD)&#CjQMQS^%6;;z})Tkk;hKUP^T2{MuZHtbMwwRb0XBBnp z*0qF$1e-m3w(Z`%+ji{OVOzIuwJ*N-!cLz)ZM5UZkK23iy=PB9{dBov4S>imEi9^@ zoAu9I8X)*7~m8?bm)-n-MiPm{PIg@{-1vO zsU10T#ArD=Iks)vHk&(l?%-md2guyNkBW?R{@%WQdu!Xatwrj0<;s;^0#vhRO@1ph zhFj~_t!@7N`F8N&L1+5=_wT328k`k;^2sOe_`-z?;J`Ve#ld2q32LU>E3r9x|NZwn zKkwA3lf}iwIi)LAs$_THeYZ7f(!^eQN49q-(^6PIunapJ@Y zqn$c+%7OOs%P-d`_Nzg0z;MhS;v>v4&mI79Kz#l6*SG}d z8S5;ChDB`Hu)zim8q}{i1K_QpjLd$QECRQH%xv7aaVW>4h}lI!1TX*rtKhu122YUi z0Dw47pdC1Hz($Q4wXj$N;6*inrpd|4X|KKZ8p@&gWd%i1GOsmwmjDESBRbHC77G_H z%;?dhN6BIhK%gvLx^y4PddANy-X**>1QH~F^DdE*k>Op!MU9tUdg=C{005abZCYEB zAJ6zmKGuK*>m^WczONx*SDgKC%eL0gLjEz$By~L34;A8XaGP) zj~?A|?b@{$P>5O2ha2*S%fJj0QuK)vQ38T&7z_Xea>G27WybTd27t&LE79@)s&U$Oe4+O>pgiC(o4hYL?Uu_~v>?2A91po+aE+FPGqbU1p1ewx0{|I3cyPpu6)OPXvOu7GNJxm? zbI(0gm|1UN4X&udb(G>*g!Sv!&s1*P9drO7Dx-~vkB`3~W_PpeL3sZ8=TY7%$O@E_ z8!J#aAuB7(`t<3;(%db`-g)O8mn$d{vuB=pCNii1NJ>f?Oj!+?IddiexN=(Q(xt6T znKBe!D6+V6+Xo+f;FKRRVg#U2i)5_h0W}gQim%qUZ{I;d13-%wEkd=NzNEqmb;Z5% z>;EzHC{Mu!MOkq!S+c|>ODk8dWSpx)J@UvS_VLFbLxz;tTmkl%Uw(1FM~)o%c2EGo zcDocgNO2`BEX+bfL#=GtvM7&|6j@N3P)Gs<7+3{WC`b_k!~!5iKp<-Pgo)zo3As{@ zVhweW|i<}=dM z)0ur{n+1}ebri?{i6-=bL_QH%d?UAwxzG9Z(Vh1O!m9 z2CM{YfFrat_v;9EJap*L^~He$kUQn`yVz?GC`Dr%6?xx$9NG6`qzG4Q

    6uy=KAc)o^CN5!v2X`D+ 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/three.png b/app/assets/images/emoji/three.png new file mode 100755 index 0000000000000000000000000000000000000000..55644c9900c5a61a86309ec7a3764896891faf82 GIT binary patch literal 3758 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 Y0wleh8Gj(emjD0&07*qoM6N<$f~9E|MF0Q* literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/thumbsdown.png b/app/assets/images/emoji/thumbsdown.png new file mode 100755 index 0000000000000000000000000000000000000000..41c6b825d6a6abf736a1b882c951c1eb942afabf GIT binary patch literal 5070 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/thumbsup.png b/app/assets/images/emoji/thumbsup.png new file mode 100755 index 0000000000000000000000000000000000000000..81786c1d8f5ed810fd8351f74996f9b64dbf5ffb GIT binary patch literal 5075 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/ticket.png b/app/assets/images/emoji/ticket.png new file mode 100755 index 0000000000000000000000000000000000000000..cdacf1a70be4f6952922b7e07755072582f711ea GIT binary patch literal 3091 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/tiger.png b/app/assets/images/emoji/tiger.png new file mode 100755 index 0000000000000000000000000000000000000000..d6cc84a3ba980695dd5e2430a174572d8ea4c955 GIT binary patch literal 6051 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/tiger2.png b/app/assets/images/emoji/tiger2.png new file mode 100755 index 0000000000000000000000000000000000000000..b0c7d8dc3ec2326be0b6bd349ce4bf91d06980ec GIT binary patch literal 5744 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 U{itF41poj507*qoM6N<$f?BzKM*si- literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/toilet.png b/app/assets/images/emoji/toilet.png new file mode 100755 index 0000000000000000000000000000000000000000..e5cc4119a15d3346474b666ed1fd1bb8f3de7e79 GIT binary patch literal 1733 zcmV;$20HnPP)$DoMgSu`V#MYcV~BYXXbG9X=Q6A*V#C` zbtTYW-|Vh!&G$Rs<(&D}O2e+of^Mqs(bPB9*scL6$N8T7RO}RVE{CoX*kQzh)S0Q| zSO{C{>V@x4_YMGb#KFhz{C3iU$cPO^G^rWuU;fh656|}w0E^(BbvzUix(y(pj>qcg z(jj^Y;IPEYI4C2~az$VwLh7urqM(NW5osRe5U#jHq(Gck$a9t;>?r`a3^7ciEdfXZ zlK7-?=`ny7Yp(#%My*)%ZXale*jfsD4WQ6n+X;KG-3M@bQvsqaeg?Yt0QyYRKA;quNTgA3c@5~Gq0odPP^h;SKnHug>qLSO z0oE1~h{BV?Sg4Kw1eJ&okK*lxl^Nz(B#qsM zFU?7~eG%I4A93HwK6{u932dy6cYcdNCZFr{Q|BzNki{X{ssrf@nnnTPb^xW^71FGd zB1sGjb)$8QHb;*Jb*{69$Memkeaspsi4ACRUB@%>3EmuF@z=}8XCKVQTF%92+f2aP zC@IX%{o=mUx!}dMkNs-#EBz#8y-5OMZ7~Rmq^)HA z_%sBwOo|#8SmM15l9csVS!Cf`m!HEWa{} z1T*}LQTCG|CLMo`%TLap*}-V`>g!jYxkR2K>y(UDCB#M&ZfQGXH9S$3bsF@O=dbv@ zk3sr?2J6iKcIM0uXT$mLT>Seba;&uwDn?amR0W_e?>(`qQIi2myuj<+&+TM!(bUNM zt53rY0T#T~$6vcL%N15BQIuFzDT~wUrh5Sh$Wr2Y{>gDB=_iFH>(BlC;=gwc0Ml~| z51s$dMdm29Qc;pPlqD7-0Z}B$@f@%60LK}mUz)ecwR-WHTO7~NpIi9Ix!=ujfy)%c zy+>89=C##$8jqLw1qDts#eh))8%>?1Kh4bC@_2r6L4CURh3j8ix@!+3a`QMgAPp#O zmS=_)?&bkGbW$kk{fG*sKXhd-(3&3|_~qKkYflV*ARSNPVi8Fnl%+H^6FkP9g686E z?2|RreAfn(H%dIqvmg9v;)$|kSL0wY!eREXpCMv65_n78TSgF|!>&$7%6@oqLXMa$ zaU5)7Mi$6B%SfS(XaN|@bQNIoLwoKWlv6Gvb)bxaYPnWK00N=pw+@Ywt^y3498oE< zWaM;1oQgvbwLS@uje|>Ue-{CcWZv~~mOhfW8-dqGY7+sF&*DCYOJbsnU(=k!dBt#l4poy8@87$D>3N zO{slYX)D0jI6{s^Zj(p3WvXP3tM6-l%K-10I`rf?79Jt?HnUQUtAs|EjQMEx5q#Ev zoS)q?fOXn+eClXp_O@eMbz?wlQa7@&PIdvHvV4^_r2LHNK$?)i*gESk!HuQ#|N8$6 b{txh9{z54618siy00000NkvXXu0mjf$Gtk8 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/tokyo_tower.png b/app/assets/images/emoji/tokyo_tower.png new file mode 100755 index 0000000000000000000000000000000000000000..e1cbd7a3c5d7e8d7474bed03b17c762cf714a8f7 GIT binary patch literal 4802 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/tomato.png b/app/assets/images/emoji/tomato.png new file mode 100755 index 0000000000000000000000000000000000000000..a129700bbb5911fccd94b7d1546445d6dc1df6c3 GIT binary patch literal 5748 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/tongue2.png b/app/assets/images/emoji/tongue2.png new file mode 100755 index 0000000000000000000000000000000000000000..b0bab12078fb12f9f1d2425cd4419c060c87ad7c GIT binary patch literal 3662 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/top.png b/app/assets/images/emoji/top.png new file mode 100755 index 0000000000000000000000000000000000000000..5aa4dd442da574464fbde3f5978730e4e9cad5f1 GIT binary patch literal 3785 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 N002ovPDHLkV1g|LzDNK7 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/traffic_light.png b/app/assets/images/emoji/traffic_light.png new file mode 100755 index 0000000000000000000000000000000000000000..50c781016cc0b21be8449cf2f4d6f32c738626d2 GIT binary patch literal 3545 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 TP~es*00000NkvXXu0mjfk1Nx9 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/train.png b/app/assets/images/emoji/train.png new file mode 100755 index 0000000000000000000000000000000000000000..3202d80ea9f438edffcb382df6a4a1f34a59c2f6 GIT binary patch literal 3905 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/tram.png b/app/assets/images/emoji/tram.png new file mode 100755 index 0000000000000000000000000000000000000000..5eb29fb71cdcc8cf8b8b7f2f6d40003c7846d229 GIT binary patch literal 4869 zcmV+g6Z-6lP)pAz@2!cQ^<*|MH_FqdR5`PwnL@wE!p6AKP$jFv!uf6tn?@PH{{y5tocmR5Pd-uDptC-dYt;{ftX^l5clVc~fVNv^k8~~uE zHiPN^X1i1>r9uA;Ye)ltuV%B^fBE0W4-E}11%TgV8{=+|$K%~-(ghCxSO9SM-FJ`T zw2SRK@4PcQYu2nPgrH#i@4D+Q+<))m!3Q5KWilDn9vmFpea}7j?2*fOn3r?%=H}*T zQ&W?X%jFoz{OOE2efqTD+S)1@Cx|7sT;}7l{=n9)TQfJ`e6xu|wr$(?vCW$|r(&^K z9@kM&7O}wyff+=56zMDWa)JAbJ~Hmt{dVDnEOJ1tMV zI3N)_;5cTS-#c*Nz{7P5f)M^LMEF&x{3IHULQqES_F-Q`k%>7h&ZXu|CmnH|r~q(*)d_z4p+$=pt*J{8M5IpT^ZDD!47JZA z2Fd>6rD5SE{8b)*f!Z<@%0*b(-vz#`f+XFbcR>`~hoHTX{BgsRrKTaT`ab*8J=EAO zFZ4?Q;VZ7lKW-nEc+3>r0x_O2cDU|+0P8;j95V_)V`JkI1~@XJD>efHjtrLMYfq1e zkG5q7&?bZ1xVrZlAoMjT9LNLt)v9{73mv`}nxrj!hBls`JzJKCA1|V9N;HDt8H|3VwgKkxY_TF^zA-r%DNH5;V@6|gbnDmU%(G95Wjh34Ti?8y zjsetsBZViCPlNspL8?PVsg}kjYZO$51&rCI6v6a}g|WDefM?0r00b(Rryj)M1#%oiq5#4N2*p7H;EOSx-;9_5*JG zSpV3R04Nu+4G3Y1L;yn6ma+u^2Fl`k(+9vS2enEdv1!$RF~qvQBG71Ayz0~dcmx2# z2T=e}^`!zZO6XrD0LJvVMFBXWuMULu0l=8pbUg@G5&+;&DmIN!0Lvf0-Q2f4Q;#VtSCi5p+fCcTt0{o~6D{!Rj z7*akrBChYtd-;G)l43dH7Kg>IL5l?vPxY{XiKb`TVjOuvyq@QwB~Mj`fzK6PNcdxA zHxgEY7Bt7da;3^=QwUA}4#^DDonf+=;%`m*{kj7{GJIDgT+bT-fPxz!(WGhyQ;FxB zp>TdxWa>&#k?qS_7cZDegnNc#}f((_bB0T}7L z0G8f^2pugbqcn0ka`32p{`1n5Yf?T_8XA_reR7+Oc&!-v@ zaI)Ahv%;>{2Ppx&NR+ux6Ec~&0y{f+XqhrTMCAN{ttuJ&D> zIV_M(VrH0>PT3kAEy)9a^f#E}A^C$Z|Dim!^}hg=&5cm@rSNsN01BC*yuPlGT409q7Zl(Nld+G@m@06;L)L6D5cMQg!Vf|EfKpAiHyPKLFQ^VtLoAh91U zhSs0~((!=z^|u0gJgIi2sd=eK5KL)?^;wg)1PYkVX8Co86pO`L0Q8=|_H7dTajY7L zSLD<_$4tHOn)utPdbogBWA@sAd7k9^^j}>kP!OJnhlkmh!H?Gzjv%lf0pK+?TN^t# z_F{L^!PTwDj?l0+N$tNES;3TPl6@&~e}6weo6!PMSPHIPi2Wu}&AR{%xVET~nFfHG zGHJrPDx)T~uh-^jeQ4{@f)Io$jw#bzt>AhefUcthBYBx=0LbWT5a?IPNIIPso^j2H zjw)`H#G;76Op5HFDFxSOT~iQXomS~aj0@U|%H=Y%j1HLJn{fc%eDlq}TCrlq9T0Lc znP9Z$hfVG6?X(K5WdgzArUM}X(hyIK(yziPv~rvC=g;%3Ep8up zd8{55;9hmrRgd5``D0{OYn&i3{ZV7M&ua>x$LKVtE58XDfusS^ae*LmUV=9`G${S& z`w1TBW+3JBN61S(K9M2w&hq8UpTT!RYsnC`Oopk!Y-3hZNoBG$V+u807pVO_mPBwF zG&w)5gy1USdwP0y?Af#DXY2Zr6a@dRuC7^sF?a4fGDc02ISS6NNN5cj1TFlu%4-Tv z%@1QA;LO=Gs!fpTBK(abM~=wh!#zF4;@A!7f2baH0EJp<7{LQ%hC+9C&LRlPbWfc+ zCC85+7knuy`Fx(5qlr%k0FEaB{Af~+9XrNx1d{jQ|9x`u*HMWlF7u=IA4cx zqcdp%6r>5-c*U~JEBtU*7j0-rMQjE_Wx4|c0|FNzy)OVLk0BC&Ro~ zyNN;4?MY?lhK+x%)i8jH&O`SS#y#=^q5{>aL)%9WC= zRHY2cWEx;8#!3X`zZ8+%F6o9yzL4LP%QdgcWHU53ncX!@&LKY!4~@#4IUO=GJOm4A zl%*e9g5YO^nY3hB5vEuXrX&uZPNkFMbv@dMA(DtE=t9tLg3syq><>z)G3f>Xi+Py; zX>rZDCb{B@MfiB~Jko2M_`vnh!2{CX(JqN(T(SV5sj*qW=dFc8;qFUi0j%#gxooz@1Y1@!@-Z>y$U0pCsRBOeGT)%oXZChf90TD1RXNE3fnYMZlxOmB88AhDx?R{4kFJ2^Xzuk>=c?^8aMvc%9 zSB&z#1LuDbAawWk_I~I8V*xB;RzaJaTJtS5F{Qa&OOw35>vfo763??JNsr4l*DRO0 zbLT+&4z&oN;?Nv5n1Or18nQf7n{20<+g031!?)=|89Ym+($qRg^=H7vTxp)6;RGlS zP%K$}{q+EsYl@=!%^$t>HiIx?LlZNCDw<}^?sS@)v)|0+a*O}Z0JOBU6u`ujC}QGZ zh|w0N*C_|~zk{?lAWN1kkb{SM@WZWgxPh3E6eY?f}qphuA4Rt+?166c{sD3|&8Cq6;okq&8o)!`s(-P%{ShVpZds8%h@x1Oq*PbfQRZeuIq8R{Q37~0bO&t z{un-VV^dS3M8bXfbS5P`ckDnAOG`^@gY4aVP_DcFI?1=TAuSDsOIw>(z|=*vRW$*# z1}z~LjVR3~aF2nKbFz}Nod_+2rjK!sIJkCjj)yzOQJiDpTEbRuh7Bx@2V~tZt`!Mv zIen&AmMvR~J&L!b_v9(KXfwv!s`@Mx^0eB|&6(46@3aBv>gxDxA)o)V5VH{G-jb;v1z7ezcO$oB0!S%1*Y zI8MbJq;F}>w>|(@zUg9Ft&JNu)?Ndx{8i1(E&tTf*%760Qlq)%X88PBdFi`5VHvYU zq>5GAY5Bshe*tD4ASw^ToK@k%h|WM1mbMnHfpvfa!1KLvGY(5YAEfJj_TzoFO_N|o zXbs_4D416PXNJFFQFY8L41(Zo5Z2f&AO7%%R9qMw?3XLAT!z5NohRjH05@WkO64{8 z-+%u${M*K}Q(8bH!g4az_*7e4TLW`F9aEWP)Ryfp?NF$;7jj5F2W0h{)u{Md)bg|f zUw13vrl{H#)?4MS_^uM3f{sQJ9^- zhqAjUefa&gYd;0oh+}`?uv~rhPssjvdSq|+UJ6Y<)Ep^TLZQ&s+}N0TdhXoD>?8{S zBQ{LsDbUAQ$vKe-`Go1W$?LD}l0%1%0O4godM|*=$!9+M%UJWDKrKF^G|R&e&jf-M zAOj!Q1HR|84~U?6yymm8OcuQ|B%>h+uIlTD_X!%u>vb#dyRMpxftIeJ_8oTad1revp%QU2Dl5cYNs?$nNVb08^U10SK)@y6fjP^J)tUpPqw< zTDXDC^hXhHC6Av_C*b8KtQmr9G;OQt3rd5DH!{y97vS)}>{DXwC$R zVvfLde)V!(GH4ceXtz>(;H4 r;#d)5$tNu#1^2R7!!mwTL^k~o@Ok0eLXt+}00000NkvXXu0mjfN1Hip literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/triangular_flag_on_post.png b/app/assets/images/emoji/triangular_flag_on_post.png new file mode 100755 index 0000000000000000000000000000000000000000..f9a3f32d7118988613c63f944691f0f2ae39b88a GIT binary patch literal 1399 zcmV--1&I2IP)9)v8^)h=XNGnApfmTJ_kA_@+{sNQ&PoWK-uomoJ?Wjz z^LwA?&6$i65j;-q+`9Pm(A{yBkdtuJ@I*!F6La6PQT1)y?v zJ(6=$BnlKt073*JQZZHWD1-p41dvR;`rW-NR;&+S0w4g3Zmp@=wl>pv^-}lqCqHX% z?+yuoKyhHAAw4I)sS%@?k0 z?7n=mvt#QXrJNZIKmY|#EC4aU0BUDfVOeJWrnL*3&u-fI!VkTxS8w0j(vqBE07{F* zf~ZbaVtHo%hOQ-<6YG~e^V6x0RXxYs+UCp%0Ll?Nd{F>YNf5+>R7CqI6~H-i!&CH~C-8L%-RA|&Guo}F9W*4fnX;nL=LH_tCy`u@i)EzRYb z0I&Z7DExZ@m;fSx888GG1JMLB29-)-QF?Z!y`gr`n!1`Brx!2&;6PJTYgqv(J#`7p zd&Yw^$UqEP5L#mvfYww+NUot^3A^>d9)M~~Ic>zLjZPy$tCKA3b71Z&)yw?Moz z`w0;;Fq#k}Mq?tDT2qzW(NR_TjG&qi`k0-W_!rAg^vgVs>IrsHL@~Ho*15o}gkl}B6M}m#d z1;aMp_CjDIAHcDnwZ?6V!~@}1NdSihniyG4xdAd~Ck&2dF*PzR5}*{I90d`7dL%*Y zN&FfFhKtPy&#Yl#@c=l?o_W_WvScRya`hMYwBG-YJMjwuygfZC5Trne?N)ajJJAA! zU;%>dvfp2^8U_?q4T6a%U-O#{FQ;%@@OLL7h)hBDUpq#+Er`c|JdhX%&n&)<`= zEQ(YX31AVBA&3(Ha>K#0*4+0-69k4RgM4xlPFA^0XDW0 zOi;w$c}#2E$>*;P<;{UV#JZZ<44|_cE~;()dshx@|Oo(z3+_& z*{?)I;H%65uy-(CwCz5CXPiKW@gT3!HK!p?lj|$|za$ryf`Wxe|?{q@gQiK2i002ovPDHLk FV1gNde+~cu literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/triangular_ruler.png b/app/assets/images/emoji/triangular_ruler.png new file mode 100755 index 0000000000000000000000000000000000000000..383677cb74cb96f089804d8f488127707ccfb7e9 GIT binary patch literal 2706 zcmV;D3T^d?P)a{yumTz2^eWZhiZwZKkTQviq*gpe4#Vk2_-f@eEa zxo0msVXXiFv?f4EM4DjRcG=B|%H8aQH2^>pL1_i8Vhjy$z@{ym;O6pPAp>^8>d$~k zA=U~+1g!y*5`!BC4TNkGjK&F1>{!(RqBzDvErimPLQo2@1lF5i%;j=kF_-1;uxbH7 z06`Ejgji{iCg@o6h4q7jAdPa?qRQR(vlCWf2xl>e+T3HT&2JzQfi{}Iap^(dhq=1NH*p3Z1 zm%|a`gfI*%k4`){deik^oLpH;KrIH)-U$(ZzM~@xDFvd)K(K8L4PTC9M~{1RbMwXt z`;8O6G_{huz}X>?P9X@%4oGUiD;p;-EfBh4@~{#J^;d-ojI9g!uDm@1pv|-TFAxmM>-Mb zK%?;PftM#Xk9-!IXl(1JuFE9(U^!{7)`O7EQ!KcUg0qsx=l+2{9GN~=K6#>Ad35}l z(VK4k^5in=0@UaNdJzCk)DX_7g9gHofk43c)~h~arx2_Lgn*$H3OPurI7_9L=Ap%!B2!DC5a^rzFUJa$R5uer_{CX0M z3s7;)Z88WVK6&oz?SUecXOAx=nXu!M?*(+55KLzQ!s2T0ge$jRV=^ItZ8w6k9Q4t^*}bxbo^u6#5Jy zsk-m;?@h31@a@f^_D3=y>hpwKP_+e3I|VrcVqfS~cs zTduMV1RjT z?{0kOz#E~ovWUVs9k?3j3G>_?6q;kVQU*dNbkZHF3rQyIxF`-t*T06P+BiUKeg{4t zgv%2r0OOlBZL_1mhizLagnBwGm6A*l7RUl11v>IM96L7a38JPGF8HxHX(QPt1dYz8 z-eU-9CTtqs#+l$42oMPb&V+P1kN{-blKcC6l8sf_EQbry9qh&SCsx}K1eOE>K;y&1 z+w3rEKtMV%g22HD5FE$huF=z7!rX~@FWErtePrLxZ{PgYsSD=-J^&G|0f2xdgg_c& zL&IA$VbUEMPN?}lhO0d~eSqJAZoT%~MM}2j~<)I|q;kv;vkA z!qBzA7cjPQ=t`3b^>l0&4G2o1)L8&XFo-y{BH~z;yE+R^CoJ*P;WlD8Sn_)B-Pb0b z|HD(e{(bPRSlSuHDsDKCPz!vVJXwWG&lkB>x^4#DT}228ue+;MxqZ(=+n4l6EKPge zLX;vB&{*O+cIeHCe@y=QYqjd!yk$Af$M8U!2`3mr%peFz9DrOt%V&(e#jeB&JC^WB zj94EoVH5>1I$USy7r%Vw|F({7o~_mEIN!?W99TJ*cHe$S^}vCD`F?Gol*wk#$e}v7 zNJ6R9k=j;(ujkw>YW2YDE|r>@aNZ9_ND;_tV;4(+lpc8h{pn{99Xi6+JkMgVQc5_E z1+5)O$7&J6B5jdKxr9;DOP5e{$>Oxpe^|)(R+w01!HhMGi_5 zfQ~goSXl7Au65mKb%KpW1QZ9|N+=;1Lb@DEMOc#U!J(*0!In;WU3aPS9pi-mXD6Hm zfCfP+&00ydP^&{}&3gq)SgMSvqM*lq?^^M(mXOCswyaPwW?2XNTvkkK&%NuQAce|&Q9 z?EuO~C3eQ@DKc6xI`WZA;56A-T_ucSqrk{NeF=Q>&(m1j^$CFg0)SOKUCXd$YXATM M07*qoM6N<$g5b^K-~a#s literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/trident.png b/app/assets/images/emoji/trident.png new file mode 100755 index 0000000000000000000000000000000000000000..d79a7b4cce5aceb3efb24c0bde909646f3b5b140 GIT binary patch literal 4833 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%0DoD$4(0*;jj*Ay`5 zav{SwlfNrL0N_B>T%&3l;FMs~5ELJS8ekykU|c{^$<s9d&K3&{Q3$MT3O!A|nr%pQsu9C@_~8laX|68=MQ+P8L=r z1#$}BImPEWg8=)*l#cQQ3zH-ek=)f_1JG_1wYYO`D@AX~mTzCIH(%JzdTn9!j5pQdYs0^!|0f{06 znKH6OfWkBoqtWOQY7r$kGWrTs*Vgi!=O|UxYCm`}>jW zFC%vZ&lSqJWW{4NbgW;G%X!w{fP3m%*=50IAA+$u_`-@Dg+XqHX3F$d*A0NF00~J# z$hqDl4x7gNQ|2=ap?Rq{6SeR!~( zMYqgT-p}s?HhzhHSEoX~|St_HH9zkKaj9h{$l_XYQy@mee1N%VYCrj98^bqdy zN3k%_0Ql+we^`MY)WMZeLc};YxHn#q=Kw)~X9iZYF-g*jVu0Yf#j`(wWIj;K1K?N| zEVG14wus_L1*H_BIEY+DMaDjbfm;aKj^0BixXV#6#{VCDtP98gN)kd?#w zgoBN%e?`T==qECFEM?IE!)23k3xJi!cDsxRn1u(g*+wHDrf-DgJGkQ#35( zDyDD)aV>y4Uj%9(3Iro66x{%zfCPaU0|ew+!8R)>=iI(cD5qhYdF04KLfAOyn0QGD z{5tg{UR+Hij*E|^?pnnJO5g*4iVp}bp|$6-3jl1(bDRQZBN%Z2#$o0Jvi)$$zigRfkUu^hFp4|Bz?ywQ z{LqZ-?=*#wP-NBEbIw|150Pt{Qr200000NkvXX Hu0mjf^{xwu literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/triumph.png b/app/assets/images/emoji/triumph.png new file mode 100755 index 0000000000000000000000000000000000000000..92f93bd1025035241022d89eb701bf7920a1a636 GIT binary patch literal 6164 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 VsS~t-ny~-?002ovPDHLkV1m%tV?+P| literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/trollface.png b/app/assets/images/emoji/trollface.png new file mode 100755 index 0000000000000000000000000000000000000000..e234893cef05b0132924f61ce1705310d123ecc7 GIT binary patch literal 4905 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/trophy.png b/app/assets/images/emoji/trophy.png new file mode 100755 index 0000000000000000000000000000000000000000..95d3b63f524646adc51e00c3a6ca85b8a98e681f GIT binary patch literal 5520 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 SKs}5A0000@sa>Rp)`a7C4dB! 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/truck.png b/app/assets/images/emoji/truck.png new file mode 100755 index 0000000000000000000000000000000000000000..3f25ba1f92a16371f50ca9b38221ce00059fd531 GIT binary patch literal 3721 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/trumpet.png b/app/assets/images/emoji/trumpet.png new file mode 100755 index 0000000000000000000000000000000000000000..c84cfb13e10ef152b05978b6b14debd15cb4cc26 GIT binary patch literal 4373 zcmV+w5$f)VP)7WQGAfSk#A{bjV_JR#H&1mvW zqA@q##3Y)yOmbs-UUJiJV&VJFu=s<=OS0Zu>zRw?v({(fTKdo4XaDv-XA6146Q1yd zCp_WNLgwzyadVp^B9AH4qQio>#YKf*aCdVIC660YTT6%7n8;D3Qi-(Wr0-lE=P1bI z!~$nWm5K(hQmc`ZlS`8zzq822KAt=-1o?aRmX(!4qtVa=>x@hVXahiOWcWd;xw(Km>cn^vc5X2HM17tKs!P0R@M>gd zW*(BsZ1o?D;8imANL!T+hWZy`RgnNGGPiSbxs>@>1fNHPU)wkv`*!(bsLc+!L9F`= zEr>69*vW7gaI(YrkwLD+;g5nZh+>bdUoi*6`vdXJItSDz^L`7Lk~H$L<7P?>(*jvX z%hE-N^I(qrUhtYo&grq>4+LRfpA@axLTEw^zAcPmb%Z+WWP8meZ1S+;=RkZ4;yEbK z5Fu>7-dpjWMvl>LEX%RVkP%LC411)H27h>8Aoi?xK)X@|O^`k+5IdE{Xv!j)LXd+VQ!^EA3Bb7Nphg6Kz@kXspnI3HgS>eaEhnSCRLdJxvmOxtgEv^T`rqekN`3_-Ci=)$?+!!avviH ze`~@c69}>+!h!_On?1EN(XQg+_!bwuc0P*!bV8d_cqiRMe?#IzgIQ!84|Bpw_F*)1 zSIru2D>FrPHlJ1j>$bNg;ghL~yDj15gmVuU%7x#DxiDJDBno6KuVw}J-U%A~8yBPT z?9=H1Im*5=X)D$QIo|*emv)%hb?g>Q_fcB@1O`_cJ|cGqMrc|1&Lhv z+E3woLG&V>sEiQyjRbF_ufyl-{8T6xzn>j$us0_}e>M&N#Gdt1oPSP6%ibBCY7w%- z1T-)KdX|b%tq^<~y^#2kNu&qp?d+EtnB~mhlVJtEuLVu}Fk}`sYW(}V< zJQ12QIA0#5l|?jGqh)|7O}1OlDO{OT<6Pd(LEXv^i`_>eO$z8HyP zL$u+kg?Cl{h8jYV`x2+>Ou_qo%WTnFB%}!wpejS~d4f9$Ae5{S-PYD6BD7E|6#^vr z8Ehd_1#MSX#|U>Tqj}f->`6SC1RZ0=D`|Nj8+5|u3z0ap!v$S=Vq|&i7m^7idJxyL zWbUmE^fJ_0CPa5RO+>!(N!!)RjdKpG#oS+h>;w~T1}=Bv7WlC@?!ZvC3v$&Bixub3gV4N=-e(S^e0Bk zQn_cf51I=vMBwCBI_fmWP=*UonZc$fEI~nx(Xp{lX999};?}Gbyme%QBX+k-u(MTy zH6>z{MKMv9BpA`Y8OT&3OiBbEcEl;ziLp){rEPdZ)Mg8Rtxqw!x|g2(xwGLoI_QYb zeDU2BPv-XWOv$f1J7%M!gpbxG#!$o zRn7fH`|WRUk)X4XgVlxNJ9~SiG_fMoWb>eo<$fufN4&^XBP)n4T(01s+28MgSI>px z>~?3YD-#VXuX&MJ*=>mkgGS-rRCvtkD%ME2ml_iPxt}L|paci3$j&FCvOUHfi z!a+A2=$(zer54ByG`tqwmEpF%L-eY1Q?{rs7)|Ho05Zd73Nn< zG6Wn#Nmxuu$})^ct8zprNfC~QxRCh2K4?O8azZ$>)e-!n>I})Hu5!!KZS8g#-ZCE- zhP`m*g&rguS#lp0}e`A-d95WcG7E zy`Amsw#U&eu6X{S7hXLZjH?&I@!qRpc>k3^Ts`TE^G{jf`HeO>-RFebI76g*=pn+H z43IydAVC;kkuv?4byZ@luM(g+myKt-?eJ8KC2e?oRAq?~x0q2w9ux~qNyxkzEw;bubfEDcqj|?f&OuB{zbfwj|#0=jHe!~NZ^jrQ%@ofg2fhOrMvkwcv?+^k2OJn^)zV0 z_&EHOFD|{Djw`Rk;q6O_xbb!-KDwTTkFTfWAJ^sh?A;iA@lGUezY&P{PR+yB!&1C7 zNK1c%4bJpCp(>UIb&x(9QVr2TN8B=%@Y{6yUe5|ON-9j0q?M*g_7*1^-K|&h(5U8* zEi|h#C70AO(Bb~$fVPd zB}jKMz^>kCe0IAXUw%=7uRl`Yn~xRv`c^W&xfzddZ${zv6+hfK7^J5!UqC)7i{;!Ms5eJ5PjJHt*mH#8H&Yb3o8h?qx+iX&bi{`vPPjhef;SJ+ zX|T=|M|2dr^}27lwU z3*I|Hx4BQx!I3UA9H0}ThMs7I6R98*aJ3+&^cz;o<}>;ey!3Xa2O0IMV~jKN<))To zs*t#lL@PX}jaEeKqJ<`4t(u8G4HN5C^v_weGJFX%&IC8F=HT8p8F=rI4NZbG-lpaM z+<+AhbXs8xU0r7dFn{x%P3+0TNQxJuD?dmF^>RI|Rx;6F$izU2J_d{Qv5_WYMFc^W z55Yg)&BVWMC*s->JG^zs9>;0<@9(ljyT%kTt~!?qA&iIiSI;uMbw)~LI%v*hqPLKR zp`|SBs58XQYC~+VFhpk}L0gOt{*z9HFaI8lSGHNv@;AjEdS9qaxR5%+bZ5hKuj$NW65&5&Kt}V0-gyD1%uD zm_vfd!%nIfS)d7Le%hokM1Lg*d)q}gxxoa_Z!yCQLnb)YEka)=!GRV_e0Vt&hdQm% zS7`;ghu(MYGl_&e3Mc|}{mK#zKkqIT;OW(7I5}jEbGv8ZKla+-{5A^=xAD=LKxptb zcyW(AT5^pMJzw|bvGMn)P$*}6H))K&*xYK3Lj!a1>>epD?3;^oJ1lW(y)kxHO-Dx( z14sK^(3m4ZsFbmZJZjYD8hf_a%>3Y~uDLk4nO=9d*kEMP93ulJIJ(9d8;e-z&KIH~ z#{^!sq?|m8)E8UZwNzNW*xO)r7o=`cDN^;h!j= z@~OOWIaKzz)2W8z8c_Ae)f-n=>*NIfrAb+uBgkti5Pi^DAwg$_7)>e;O5<6`^wqORSZPzLPw?ckL2BmgP P00000NkvXXu0mjfm&I=; literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/tshirt.png b/app/assets/images/emoji/tshirt.png new file mode 100755 index 0000000000000000000000000000000000000000..297a6d63ed32a414f10aff5bd1e2856e606ef592 GIT binary patch literal 4676 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 r<&}IFalHd)Am7gnnf15$16nhk{zY=t0nv2f>RV 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/twisted_rightwards_arrows.png b/app/assets/images/emoji/twisted_rightwards_arrows.png new file mode 100755 index 0000000000000000000000000000000000000000..25cde18b250190797ff713f1dc3047d60e74712d GIT binary patch literal 4313 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/two.png b/app/assets/images/emoji/two.png new file mode 100755 index 0000000000000000000000000000000000000000..c191f8a3221b516b2e739a23c69a65fe1a261aaf GIT binary patch literal 3518 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/two_hearts.png b/app/assets/images/emoji/two_hearts.png new file mode 100755 index 0000000000000000000000000000000000000000..b189e9aea82ee62a9b483f480267b4ff2cab7bcb GIT binary patch literal 3565 zcmV})ldutD3chL zD2oCG%qSuXvI(PX>L`O+7-0lOb`nU^Nq4{X?%#K&yI-3$>C8AYWzpS%f7QRweXr`h zSO4EV{cgSU-A`1Nce4!dYP|>GJpevqSeHsyr;nK^x=acdnL27c!)4WJ%YgV(X&^ed4IY zj{fG^eDvDSGH2Ck9DVyTK61q;Cw1=BdD&N4a5W>vn7a(Flw43Px@U(o5Ty!GN6 z{Nlpf+0@gs=v=-3zA^nBP=M2RJ$%2mJ?4B6d1?c`dWaDKw3^|%1Ex)$$^lD0!i(Q{ zVznk|dHU=FT6RBZU%VH}co?>HyDGM4Gt*{FWuFB{5ZwBsbAYi8poQX`=?CtG|4Id~ zYB9!P01zCC08*>5)688cEIMLh)?1%AY4-m3Z$QVuCsW@c;n;X;c9`6hlJ-Z$DC{Aw^YDGKeEgYGlj<&_p*R>r4B()(%`|P&`Cr zOZaU-jFjq@swm)4V@WobvGq6@^8hUFvFb}3XHS_p1wU8BsfUpUgstIaWP0852b=;5 zYH{L7HKqE;^<+`@^q2>b<=hXe>#LVmpMJylXLRDVG+}aiFlH#c0bu(C030Z&T5M*? z!hm2y50%$?$clRJmwjpgznAUzb<-qsAZ@?JQ`c5Hn zxFkWV5m`MXtkkGQ{mvzC1tIs0c>n;3rk7Q6$=|km*5soUlNxdrP(OiO4#^wv49Kwd zcZwz!(hSWkS(cL6lu#_?d`#ey6{qN}rEvjZad7i5e%QA3<`#)h%jb*uMld-6<6}h7 zOdwG(Y?TAVpuUe4B^4zyj#`$|XQN-Q4cFZ`u6_-cYwp5gd+;|!ZJOyx5f2anF&?Jh zc=GlR@D!&OXB8_->^W*Kp^th{*W~oG^r3iM%>z!<>-(x2oZL$-teJ$+WTXb%fJMMJ zV7!KXgEI|hrg7%$no=U9B9GU^&r(mFl1x_W+T^-be?BGk3{s@pf)%Ef(Jqpl$l8L3*Ff}>%j5kAq3Kx4{o zAbjQSYR}qbJH$wAUiVio@5xH5`?4B!83su@-tP92%r!RG=OQL=S5XQiL6?|$o( z$Ln2ooQ}js>Zpw?&Us|oMUy=-CmFzbj)LX@1_1;%qGGFTPJ7pEtjEWltp8F6*kJ%@ zzrH6Q`xMjmYDaax)r^b+Vjy)XWf!tJ?fYXn4i7>tt-ab*Pn9n6Pwm(aS$#ggsK1 z%${HR`fmXKA^^V9yy(!Pj|}2H?i@F-?8?wXX)GA zYomgmeO`3$b!?+mO$(P7BJZ;HohLKn=nvBQk^O0%F?kSVQVH1n)XThn_fu?G^9qsg z*2np5;f3}4f6Y6mkpNaTb?xeB#i!b`T<5@4cILTV6el#HJrP710MeX8TYX9|ZsfVk z@8R`d{+_g;pFbSesR52nrRTOX@=(J|S zG~&1Cew&TIe}lLvr<@kvar;e8AOBQ7;+E-$@52FCoIt)}ky4Do;E4d>RB?do$l>7~#fxa~oPw#R7~>6%tU&-Bf{?k4tmu*M z*~*$P-pOnK{-1{YQJ6*gJA~?9_EI?GxMadSg5>7%YNAhP@9sd=w2M^i|kp{z3Ho>J?&F zp9j4201B~usAG>QOqe4eK_et1WT}fVv?N86*y01rN`R3IGqO6J^+X0@g=G zaUvM?KxA0^%C;Cld83Y6!)&XW~c$Do+hl(4%W;awV&SltoK>gK?1aDS}o9wz$82xNi z0Gy=Xs(inA>K##&{X+O=oqXSVWKtVuQY+Hhgyi#R4vd(QUvO%+GpBbWKsa@fIy6qm zY9VQ6#xK5*%J{gz0lgA;NDiAk8@_=AoE_ z;VU#^86gGS)+H;F6oLc|QnDZ>ixXl^NU%iBmcS;#z~=*u8h{hSTVDA=>t`;hO0ps^ zc|4ONX9Qman>f5A!+8!d3HUyE2JvMGg0MxZprDxpt7w*ibEtJ#`fVW1L*g8P%c$9e z$k^p41~q1z^DVbM4!m+ZTZX@RZX7EOOnr<9KJY26fs~7AO<`^ zFd&BiR_ajWP-{@NI3ROMDvp?xKvHVNVXE%4jWPBZ006M4e$&(UPguIVNW3Di1$?mx z77>3adn3Gh2BQXGyO%*{3~E7*B~$vXq*x*>0U1?d>XKY^Z0*Kp#@wy43o2h<`Ow6( z56zqWlAPu-_y`Vz15q#_YH%J62*V}d#KB;AunwF$QXC1Eh?E);HRA6sC|`H&n7vmx zq4Mdn&Ce>B;{F~vgbXA8mXN*xV!+7A7EpsT4y)j3w0%NGMC1Ry?80aI`rK(_dcVM; zzFSM7OaHO#0u6|XG$nD3^*O5!hoXQ3oB-0O4$wg>P94dBogI9AKukr0O`%JdoTRHO zV;TU!g1&2hR@3kc6&n(`0SE~xDH)Co-2wr?4gV>Gl3_`4q@;wzgRdWa9~+;)sI>a! zakF1w-lnUruDJRY6$0uS6ZSiC2^oJ{q*PSdVyD`;+^HpT384;zPpA-3*7~LMHm|yE z-0c^b+r4u6L+?AUTj5#-Q~)PnKt(a?F(e$8)TP9309HiJg;Z>fzO=S%0O}l8JP=R?izTu#feWc-bt+l?%k#QdT)D$+nVGwB#RU&f?S}wo;DPfp za>ID0WCU44MQfC@+SlfGulUjqw`pqbrWI$FZS_0VtVS&jsAnO8jRxxAH1d~2YPSwH1BS`2jIT|c95{Imq7G500000NkvXXu0mjfN7>+! literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/two_men_holding_hands.png b/app/assets/images/emoji/two_men_holding_hands.png new file mode 100755 index 0000000000000000000000000000000000000000..d1099f21ffe1046dbf70e62f101764cba29d35ac GIT binary patch literal 6994 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

    uvxCx;w3b1KI*imL{tT%I&mBmo(hNYjK!#YA!h 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/x.png b/app/assets/images/emoji/x.png new file mode 100755 index 0000000000000000000000000000000000000000..dff9efa8b43b02c432cec1624199a479576ce547 GIT binary patch literal 2044 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 Eg4FL&umAu6 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/yen.png b/app/assets/images/emoji/yen.png new file mode 100755 index 0000000000000000000000000000000000000000..139bc936e0f33bd6c546c1f50de941f901af13fe GIT binary patch literal 4989 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 Hu0mjfSlyl? literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/yum.png b/app/assets/images/emoji/yum.png new file mode 100755 index 0000000000000000000000000000000000000000..fc39637ecd81ba4da58e15352442be6929d0941c GIT binary patch literal 5886 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 U-*anIF8}}l07*qoM6N<$f~S{JzyJUM literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/zap.png b/app/assets/images/emoji/zap.png new file mode 100755 index 0000000000000000000000000000000000000000..260c531b9e23171ca25cd30971ba06e28a3d7c74 GIT binary patch literal 2233 zcmV;q2uAmbP)GFA|^+Tr zRA?(QH((6%K}%w+BE~?7B1Qy6O$3oTA_6m=na=aheVw!S@=o`Mo76=70E3+SPgd@^ z_vU=~t^eA4ubh3hs4Cqo!}~~!SI7;ESIWsKfUc;3+Ep@ygtA9LRlgV9&wd{e;E@VeK>$DGL7OOI3l?D-cUD_6rz9Tg67KYNp4aK0!bsAA9lDDm01 z(%AlSR66cwwE_ZsSt{fed)$%aF8vM3)3-wvl;D0=6AA0V{3aDKx!?LOkziJ5{qEGKY zj=TWf_g(xee+1td`&p}i;QW9cvHcDT5Pjly%EJRX}Y+8~$)x zv8yz|pE-oAy%Jip=$k*mkG_Ng+6eAvDFFd~&{oVKNXcVQ`7Cn$P0)A~{37n93Yvm% znBabP5)k0cfUVd;Fhz&?$T^r3?}Ww}m>8Y>IgG!GSV3cdGeKlx4yaux!)7oVk=26a z6U^EZ+VJ;4a)2=44LbS*5KwKqzb&1}#8ctmd^BVZk4DUD!ITornl+e{cYxL)odZ*V z1CPVpKFCERIrkNSOjJPaOH1%lkpYABwlIhHV@}$E*d9m^fHgn^KmJ3AKqIrI??#=< zL;`BpNA0qg5i@9zz7}Rh+=kx*Jp+(V0v=2s%sc`0QKZ-dUjNc~C|*yE9P@~4rqBS= z5I8!b^E(m$DUWz48lh2oK!3TM2?)-&;bqVwVQKaq z4e#{S-ip4wOhX_zFM~_)1}Q71;E)e}9tJLe))+{z2>>^THuph(5Htr)k=UcDB1_>x zQwN?9s^B%iIl-qMoIzUPr{^IBY6^g=PKoMCZTPWen*(Z_+VCr-V)_M2ibO5s*o%-y*6#4~x0_srj5T6pPPZ3SPrQtpwKGi3XI;>OFd;Dw9z|1sY0l@3u z>xrH+@SrX%*CZI=b5x{PkfI=_i5z_nvgRsCra_yiDBuuvK!{MU4pj$u@D3yd-T^5{ z3&K61Awl3!4Eom7=)|j#Sg3<<>5JPR(9`Zv^~<&j)NYK1u`)sok|UJ)st+S;u7LU& zXuSiBN9n+U2T{O>5Z}30AMQ0#NPtO0r3k1hI{xc+j6&0*Rl!%?6Q$k$Q+MoMzGX1L zi;Q3Z8yH9HPZNkrXyFX-4M-c{6%vQv|2zEn>*!*HKcM(=eW19@UA?T0(Be&Yvk|j}AW+Z* zWLCp+lq1ku5TPRjM8R$+}4qEe|3au1B{`+>kfiA@O2~Rqu zclPdbUt9K0Q1OqYP5-EaCWorde^sFX6u|)$fHGQlEcB8)KeF*2rHSO%fjtUZGj!me z!%w`0&PBLMkDqck^zPDc^A74geMczyap4tHa_gj6Mh4FXfHXZAe*X*Y7)R%0+{8in z%SyZTk<4t2G)HnfN&PyULh%Gh6_N(ps^iC=$Fiff=*1K&g^U&2jI z;}`4_d_A3Yrx6bfUK4P8ry#Z)Iv< zVD8Iunv~cekwf~Afv6W6Rs6)u=+q2;Ho}kTKNj9_9|-Un+Zl>-_Gc74($^39)%fN- zIz0-r3;3$VPx|M#ZF6V7U0?tHTLwc5eV?pgqgiP&#~ugPqBEoDToqlkxGDc+X={33 zCSR4E-z29?o{ba~S$PyV(20HMbQM1@_$j}q1E0YJSZnvv<1u|JAj;z>NAc4&{G3In zxWBkHy*RTkOV>6<_n90=Q0jsFVd&()(7Ad$3~pBMEZ&n|!+WUc-7ftojy4j36w3IS z{jk`8y1_U6^}YAFdo%sIyft>O#6V9TU8ur*6RJz_dRb|E2R?%p5E>qd0^!1sofC&3j1XKe&iPnAMK33k* zd0wB{3aH&0-3PJ}1pxIrg}M_fN2Q1tiugB=4eRrpOd7rE6kI(-b{God>HKxiN00000NkvXX Hu0mjfmVYiG literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/zero.png b/app/assets/images/emoji/zero.png new file mode 100755 index 0000000000000000000000000000000000000000..6e57b3343adae7fe290485ceb885e1ccb5381c21 GIT binary patch literal 3590 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 M07*qoM6N<$f)kpmN&o-= literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/zzz.png b/app/assets/images/emoji/zzz.png new file mode 100755 index 0000000000000000000000000000000000000000..30be04655af5ff06c524ef43ace5b4ab10bad850 GIT binary patch literal 2027 zcmVuz2xtt( z7$7N88hs$K5sO0NlR^ZwDqb5yF`y(60~N3qD7_zZJDoXSd)at)ay+@y5?^}noz6d5 zS=pIA5C8w(d+oK>>=9MvWQO4+#ZZ8u07C(W0t^Kh3NRF4C_umpg-qRfK4JI_K?6)3 zL;&MGfGNj#!xUbuA5(trfFuFsCVlzSKUnbs5Rec?P;WsHRmfIM41gzI3W1oa2zd_1 zLbnsIiXA|zjwpnnRv1zdp|TVFxZ;tj2*yC3fs(Hd0YWk4F=R0S)h%8jT5fwWg*Sc& zs4GQq&W|-%9Rj%Al6C;Vgk=oCd#S8^F~`<&!a7K3i}@6!k-}#w;JT|q0DbN5=Va<@ zr_;-0j5?N}RSry|r1V(3ehjhCVeB|+KmZhS2WbpRcSc{n{wJ$K007Rs7D3LsOrT|<5BW&$7d1aLXz2_%Q1H~%T!fBOpq zSq{rPzVsd%t%s?d0yYG|pZkJ*ckX_D^^S*Ec{$u4B9{f6G5yDad<{eZ=g)l?;)Ory zD|dZyS^5F8{v%sZ^B}g~K|%#nt;ex`Y|1fGm`m%3Jg@tId=1CLyDs=W_0dzY{es@Y z0{i}U>GCy19H$bt&Zag7CIT(X&}svNvSHzkya(~zsT>Eg@uqueuAe4|z*tZ~v*O&x zZRpMWOmDda5Hh4BiYco%pe$7-EC`78bJa7n3&#$6H*6zXcWXgD1OUw;k0Duvq`gh| z-}A!qw#1xVQMnM#&^_q|G-NcV9)q+i(F$3ND6x5%Tz3eKWn& zC-+brDa4}?ti11MXO5D;WkobaRiEtuPjei|0e$_E2dM%! zjy^%yT0_t%V+jsi0_ow`^_6?JteUQ{$Yl{5PJ0#!15|(nvcnJ``hy;L~i3_QZe*xR{0aMEU z9tsi&wUJ-RS+}nNwf#HB!P3TPmep|Xm-^~AuRWmx$oi{(NPY5rOaoAGT}b92ZeOJO z_k=1ybR80c1b_it;ne|v4eFT2CTs*yHbudEsrC?kiArMf$>2`DIl&SWGrCI6$bAsJE1CqYGKx%xTdJAz5M+&$A5%9 z1tciQXKhFh-glJzPdO%3(8S*mWf!=*s@{7$M#fnRqY5r9>_iA46BoCL#%Bmd!PI@h z^5390qi;O+WsVCOA)WVGVjYkrTe~zViB`O=ilYKq3@%%LOaVm1&^UJrLxO~kzQ~2V zUZ)$+`m3)$OzSCv(WWPlKlih|*?IeX-F0Wk+~>((j}cqVDKO{y0hhXVoe(br!;evAo0%JW6q4(S6K-}*VCiR&;;Pyvl0Z9}~9Nj>!27gzSr z<8d}i6g)-N>0$x}0}?1EI*5c@FyWct06^JK70B3!E~K$;2SF1|0Gj*ze&HTH^yH%} z{(XRUpWO#s(*G|1=)Z9mG==oYb2|6u`zz$-+z}==>@Fhy|5j|hoqF(zudM0^5;A_t zUTUKo&=|5KFqbYBX?)Edf>wm70~Qp}Tp`#ar(JmsdECSUEEQNWs2JY*=T6ms#4Abw zS^I(Q1Y;Kzk-P_K`zqDF?aG|y^b{k__hNjlj}|6Y2%-nDA!rWJ|NeF{WQ#Dq@iE|E zD@FhrJ^$m>#%{(0;1Wm{@6(07k5dJhEcdCZC+Yw|1tcg8sR|%cdKZ98Az4gT%n^{* zyC{HTvn0IAOM#?s&h}@dGb7z41--o z9pD=gCfqFRE`A1=MSy_#n2?4DztQ= Date: Wed, 5 Sep 2012 16:05:20 -0400 Subject: [PATCH 159/357] Add specs for parsing Emoji --- spec/helpers/gitlab_markdown_helper_spec.rb | 34 +++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/spec/helpers/gitlab_markdown_helper_spec.rb b/spec/helpers/gitlab_markdown_helper_spec.rb index 00164e0c..e2b38f0a 100644 --- a/spec/helpers/gitlab_markdown_helper_spec.rb +++ b/spec/helpers/gitlab_markdown_helper_spec.rb @@ -208,6 +208,40 @@ describe GitlabMarkdownHelper do gfm(actual).should match(expected) end end + + describe "emoji" do + it "matches at the start of a string" do + gfm(":+1:").should match(/ big time/) + end + + it "ignores invalid emoji" do + gfm(":invalid-emoji:").should_not match(/ Date: Wed, 5 Sep 2012 16:06:03 -0400 Subject: [PATCH 160/357] Move the entire `gfm` method to Gitlab::Markdown, which will be a module now --- app/helpers/gitlab_markdown_helper.rb | 35 +-------------------------- 1 file changed, 1 insertion(+), 34 deletions(-) diff --git a/app/helpers/gitlab_markdown_helper.rb b/app/helpers/gitlab_markdown_helper.rb index 9da695b5..ca2cb01f 100644 --- a/app/helpers/gitlab_markdown_helper.rb +++ b/app/helpers/gitlab_markdown_helper.rb @@ -1,38 +1,5 @@ module GitlabMarkdownHelper - # Replaces references (i.e. @abc, #123, !456, ...) in the text with links to - # the appropriate items in Gitlab. - # - # text - the source text - # html_options - extra options for the reference links as given to link_to - # - # note: reference links will only be generated if @project is set - # - # see Gitlab::Markdown for details on the supported syntax - def gfm(text, html_options = {}) - return text if text.nil? - return text if @project.nil? - - # Extract pre blocks so they are not altered - # from http://github.github.com/github-flavored-markdown/ - extractions = {} - text.gsub!(%r{

    .*?
    |.*?}m) do |match| - md5 = Digest::MD5.hexdigest(match) - extractions[md5] = match - "{gfm-extraction-#{md5}}" - end - - # TODO: add popups with additional information - - parser = Gitlab::Markdown.new(@project, html_options) - text = parser.parse(text) - - # Insert pre block extractions - text.gsub!(/\{gfm-extraction-(\h{32})\}/) do - extractions[$1] - end - - sanitize text.html_safe, attributes: ActionView::Base.sanitized_allowed_attributes + %w(id class ) - end + include Gitlab::Markdown # Use this in places where you would normally use link_to(gfm(...), ...). # From 67a6a0b29b1ca9563244f914bd0eaf0165389efd Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 5 Sep 2012 16:07:39 -0400 Subject: [PATCH 161/357] Change Gitlab::Markdown to a module; add emoji parsing --- lib/gitlab/markdown.rb | 82 +++++++++++++++++++++++++++++++++++------- 1 file changed, 69 insertions(+), 13 deletions(-) diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb index 9a07133d..f000ffb4 100644 --- a/lib/gitlab/markdown.rb +++ b/lib/gitlab/markdown.rb @@ -1,7 +1,8 @@ module Gitlab # Custom parser for Gitlab-flavored Markdown # - # It replaces references in the text with links to the appropriate items in Gitlab. + # It replaces references in the text with links to the appropriate items in + # Gitlab. # # Supported reference formats are: # * @foo for team members @@ -10,19 +11,20 @@ module Gitlab # * $123 for snippets # * 123456 for commits # + # It also parses Emoji codes to insert images. See + # http://www.emoji-cheat-sheet.com/ for a list of the supported icons. + # # Examples # - # >> m = Markdown.new(...) - # - # >> m.parse("Hey @david, can you fix this?") + # >> gfm("Hey @david, can you fix this?") # => "Hey @david, can you fix this?" # - # >> m.parse("Commit 35d5f7c closes #1234") + # >> gfm("Commit 35d5f7c closes #1234") # => "Commit 35d5f7c closes #1234" - class Markdown - include Rails.application.routes.url_helpers - include ActionView::Helpers - + # + # >> gfm(":trollface:") + # => "\":trollface:\" + module Markdown REFERENCE_PATTERN = %r{ ([^\w&;])? # Prefix (1) ( # Reference (2) @@ -33,15 +35,52 @@ module Gitlab ([^\w&;])? # Suffix (6) }x.freeze + EMOJI_PATTERN = %r{(:([\w\-\+]+):)}.freeze + attr_reader :html_options - def initialize(project, html_options = {}) - @project = project + # Public: Parse the provided text with GitLab-Flavored Markdown + # + # text - the source text + # html_options - extra options for the reference links as given to link_to + # + # Note: reference links will only be generated if @project is set + def gfm(text, html_options = {}) + return text if text.nil? + return text if @project.nil? + @html_options = html_options + + # Extract pre blocks so they are not altered + # from http://github.github.com/github-flavored-markdown/ + extractions = {} + text.gsub!(%r{
    .*?
    |.*?}m) do |match| + md5 = Digest::MD5.hexdigest(match) + extractions[md5] = match + "{gfm-extraction-#{md5}}" + end + + # TODO: add popups with additional information + + text = parse(text) + + # Insert pre block extractions + text.gsub!(/\{gfm-extraction-(\h{32})\}/) do + extractions[$1] + end + + sanitize text.html_safe, attributes: ActionView::Base.sanitized_allowed_attributes + %w(id class) end + private + + # Private: Parses text for references and emoji + # + # text - Text to parse + # + # Returns parsed text def parse(text) - text.gsub(REFERENCE_PATTERN) do |match| + text = text.gsub(REFERENCE_PATTERN) do |match| prefix = $1 || '' reference = $2 identifier = $3 || $4 || $5 @@ -53,9 +92,26 @@ module Gitlab match end end + + text = text.gsub(EMOJI_PATTERN) do |match| + if valid_emoji?($2) + helper.image_tag("#{$2}.png", class: 'emoji', title: $1, alt: $1) + else + match + end + end + + text end - private + # Private: Checks if an emoji icon exists in the image asset directory + # + # emoji - Identifier of the emoji as a string (e.g., "+1", "heart") + # + # Returns boolean + def valid_emoji?(emoji) + File.exists?(Rails.root.join('app', 'assets', 'images', 'emoji', "#{emoji}.png")) + end # Private: Dispatches to a dedicated processing method based on reference # From b3bbf53e9bd0d3eb4b947f0e1f01887120e7a2fb Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 5 Sep 2012 16:14:54 -0400 Subject: [PATCH 162/357] Set the size of emoji to be 20x20 Forgot they were so big! --- lib/gitlab/markdown.rb | 2 +- spec/helpers/gitlab_markdown_helper_spec.rb | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb index f000ffb4..5fa92123 100644 --- a/lib/gitlab/markdown.rb +++ b/lib/gitlab/markdown.rb @@ -95,7 +95,7 @@ module Gitlab text = text.gsub(EMOJI_PATTERN) do |match| if valid_emoji?($2) - helper.image_tag("#{$2}.png", class: 'emoji', title: $1, alt: $1) + helper.image_tag("#{$2}.png", size: "20x20", class: 'emoji', title: $1, alt: $1) else match end diff --git a/spec/helpers/gitlab_markdown_helper_spec.rb b/spec/helpers/gitlab_markdown_helper_spec.rb index e2b38f0a..3e7a02c6 100644 --- a/spec/helpers/gitlab_markdown_helper_spec.rb +++ b/spec/helpers/gitlab_markdown_helper_spec.rb @@ -234,6 +234,12 @@ describe GitlabMarkdownHelper do gfm(":+1:").should match('class="emoji"') end + it "sets height and width" do + actual = gfm(":+1:") + actual.should match(/width="20"/) + actual.should match(/height="20"/) + end + it "keeps whitespace intact" do gfm("This deserves a :+1: big time.").should match(/deserves a big time/) end From adb724f65e5f5056e9e4f489e0399cfa2dbce75a Mon Sep 17 00:00:00 2001 From: Sytse Sijbrandij Date: Wed, 5 Sep 2012 22:22:33 +0200 Subject: [PATCH 163/357] Ignore chef dir. --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 760487ca..d22760e7 100644 --- a/.gitignore +++ b/.gitignore @@ -22,4 +22,4 @@ config/unicorn.rb db/data.yml .idea .DS_Store - +.chef From e3b1f62c6b1fda0ea711f65c699d5025ab926c9d Mon Sep 17 00:00:00 2001 From: miks Date: Thu, 6 Sep 2012 00:13:25 +0300 Subject: [PATCH 164/357] convert params hash to array --- lib/api/projects.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 46e688e4..9cd86d0b 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -53,7 +53,7 @@ module Gitlab # Example Request: # PUT /projects/:id/add_users put ":id/add_users" do - user_project.add_users_ids_to_team(params[:user_ids], params[:project_access]) + user_project.add_users_ids_to_team(params[:user_ids].values, params[:project_access]) end # Get a project repository branches From 94c50545661c21816faf1e143739f60b1058b8e1 Mon Sep 17 00:00:00 2001 From: miks Date: Thu, 6 Sep 2012 01:06:02 +0300 Subject: [PATCH 165/357] count against last project --- spec/requests/api/projects_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index f8434654..1c723058 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -70,7 +70,7 @@ describe Gitlab::API do expect { put api("/projects/#{project.code}/add_users", user), user_ids: [@user2.id, @user3.id], project_access: UsersProject::DEVELOPER - }.to change {Project.users_projects.where(:project_access => UsersProject::DEVELOPER).count}.by(2) + }.to change {Project.last.users_projects.where(:project_access => UsersProject::DEVELOPER).count}.by(2) end end From e4447de23fa41fd67db31e3ca97dbee7349a026c Mon Sep 17 00:00:00 2001 From: randx Date: Thu, 6 Sep 2012 09:15:51 +0300 Subject: [PATCH 166/357] Cucumber refactoring --- features/projects/issues/issues.feature | 30 +++++- features/step_definitions/common_steps.rb | 21 +++++ features/step_definitions/dashboard_steps.rb | 20 +--- .../step_definitions/profile/profile_steps.rb | 12 --- .../project/browse_code_steps.rb | 12 --- .../project/project_commits_steps.rb | 26 +----- .../project/project_issues_steps.rb | 24 ++--- .../project/project_merge_requests_steps.rb | 15 +-- .../project/project_milestones_steps.rb | 5 - .../project/project_team_steps.rb | 12 +-- .../project/project_wiki_steps.rb | 4 - .../project/projects_steps.rb | 10 -- features/step_definitions/visit_steps.rb | 91 +++++++++++++++++++ 13 files changed, 163 insertions(+), 119 deletions(-) create mode 100644 features/step_definitions/common_steps.rb create mode 100644 features/step_definitions/visit_steps.rb diff --git a/features/projects/issues/issues.feature b/features/projects/issues/issues.feature index 180710cf..42a3d873 100644 --- a/features/projects/issues/issues.feature +++ b/features/projects/issues/issues.feature @@ -4,7 +4,7 @@ Feature: Issues And I own project "Shop" And project "Shop" have "Release 0.4" open issue And project "Shop" have "Release 0.3" closed issue - And I visit project "Shop" issues page + And I visit project "Shop" issues page Scenario: I should see open issues Given I should see "Release 0.4" in issues @@ -36,3 +36,31 @@ Feature: Issues Given I visit issue page "Release 0.4" And I leave a comment like "XML attached" Then I should see comment "XML attached" + + @javascript + Scenario: I search issue + Given I fill in issue search with "Release" + Then I should see "Release 0.4" in issues + And I should not see "Release 0.3" in issues + + @javascript + Scenario: I search issue that not exist + Given I fill in issue search with "Bug" + Then I should not see "Release 0.4" in issues + And I should not see "Release 0.3" in issues + + + @javascript + Scenario: I search all issues + Given I click link "All" + And I fill in issue search with "0.3" + Then I should see "Release 0.3" in issues + And I should not see "Release 0.4" in issues + + @javascript + Scenario: I clear search + Given I click link "All" + And I fill in issue search with "Something" + And I fill in issue search with "" + Then I should see "Release 0.4" in issues + And I should see "Release 0.3" in issues diff --git a/features/step_definitions/common_steps.rb b/features/step_definitions/common_steps.rb new file mode 100644 index 00000000..e9023f92 --- /dev/null +++ b/features/step_definitions/common_steps.rb @@ -0,0 +1,21 @@ +include LoginHelpers + +Given /^I signin as a user$/ do + login_as :user +end + +When /^I click link "(.*?)"$/ do |link| + click_link link +end + +When /^I click button "(.*?)"$/ do |button| + click_button button +end + +When /^I fill in "(.*?)" with "(.*?)"$/ do |field, value| + fill_in field, :with => value +end + +Given /^show me page$/ do + save_and_open_page +end diff --git a/features/step_definitions/dashboard_steps.rb b/features/step_definitions/dashboard_steps.rb index a4edd224..867233c8 100644 --- a/features/step_definitions/dashboard_steps.rb +++ b/features/step_definitions/dashboard_steps.rb @@ -1,7 +1,3 @@ -Given /^I visit dashboard page$/ do - visit dashboard_path -end - Then /^I should see "(.*?)" link$/ do |arg1| page.should have_link(arg1) end @@ -51,10 +47,10 @@ Then /^I click "(.*?)" link$/ do |arg1| end Then /^I see prefilled new Merge Request page$/ do - current_path.should == new_project_merge_request_path(@project) - find("#merge_request_source_branch").value.should == "new_design" - find("#merge_request_target_branch").value.should == "master" - find("#merge_request_title").value.should == "New Design" + current_path.should == new_project_merge_request_path(@project) + find("#merge_request_source_branch").value.should == "new_design" + find("#merge_request_target_branch").value.should == "master" + find("#merge_request_title").value.should == "New Design" end Given /^I visit dashboard search page$/ do @@ -66,10 +62,6 @@ Given /^I search for "(.*?)"$/ do |arg1| click_button "Search" end -Given /^I visit dashboard issues page$/ do - visit dashboard_issues_path -end - Then /^I should see issues assigned to me$/ do issues = @user.issues issues.each do |issue| @@ -78,10 +70,6 @@ Then /^I should see issues assigned to me$/ do end end -Given /^I visit dashboard merge requests page$/ do - visit dashboard_merge_requests_path -end - Then /^I should see my merge requests$/ do merge_requests = @user.merge_requests merge_requests.each do |mr| diff --git a/features/step_definitions/profile/profile_steps.rb b/features/step_definitions/profile/profile_steps.rb index 4661139c..525d43f5 100644 --- a/features/step_definitions/profile/profile_steps.rb +++ b/features/step_definitions/profile/profile_steps.rb @@ -1,17 +1,9 @@ -Given /^I visit profile page$/ do - visit profile_path -end - Then /^I should see my profile info$/ do page.should have_content "Profile" page.should have_content @user.name page.should have_content @user.email end -Given /^I visit profile password page$/ do - visit profile_password_path -end - Then /^I change my password$/ do fill_in "user_password", :with => "222333" fill_in "user_password_confirmation", :with => "222333" @@ -22,10 +14,6 @@ Then /^I should be redirected to sign in page$/ do current_path.should == new_user_session_path end -Given /^I visit profile token page$/ do - visit profile_token_path -end - Then /^I reset my token$/ do @old_token = @user.private_token click_button "Reset" diff --git a/features/step_definitions/project/browse_code_steps.rb b/features/step_definitions/project/browse_code_steps.rb index 7f9001bb..d2ed9a0a 100644 --- a/features/step_definitions/project/browse_code_steps.rb +++ b/features/step_definitions/project/browse_code_steps.rb @@ -1,17 +1,9 @@ -Given /^I visit project source page$/ do - visit tree_project_ref_path(@project, @project.root_ref) -end - Then /^I should see files from repository$/ do page.should have_content("app") page.should have_content("History") page.should have_content("Gemfile") end -Given /^I visit project source page for "(.*?)"$/ do |arg1| - visit tree_project_ref_path(@project, arg1) -end - Then /^I should see files from repository for "(.*?)"$/ do |arg1| current_path.should == tree_project_ref_path(@project, arg1) page.should have_content("app") @@ -31,10 +23,6 @@ Given /^I click on raw button$/ do click_link "raw" end -Given /^I visit blob file from repo$/ do - visit tree_project_ref_path(@project, ValidCommit::ID, :path => ValidCommit::BLOB_FILE_PATH) -end - Then /^I should see raw file content$/ do page.source.should == ValidCommit::BLOB_FILE end diff --git a/features/step_definitions/project/project_commits_steps.rb b/features/step_definitions/project/project_commits_steps.rb index 35fcb4d1..7f20ade4 100644 --- a/features/step_definitions/project/project_commits_steps.rb +++ b/features/step_definitions/project/project_commits_steps.rb @@ -1,7 +1,3 @@ -Given /^I visit project commits page$/ do - visit project_commits_path(@project) -end - Then /^I see project commits$/ do current_path.should == project_commits_path(@project) @@ -23,19 +19,11 @@ Then /^I see commits atom feed$/ do page.body.should have_selector("entry summary", :text => commit.description) end -Given /^I click on commit link$/ do - visit project_commit_path(@project, ValidCommit::ID) -end - Then /^I see commit info$/ do page.should have_content ValidCommit::MESSAGE page.should have_content "Showing 1 changed file" end -Given /^I visit compare refs page$/ do - visit compare_project_commits_path(@project) -end - Given /^I fill compare fields with refs$/ do fill_in "from", :with => "master" fill_in "to", :with => "stable" @@ -48,18 +36,6 @@ Given /^I see compared refs$/ do page.should have_content "Showing 73 changed files" end -Given /^I visit project branches page$/ do - visit branches_project_repository_path(@project) -end - -Given /^I visit project commit page$/ do - visit project_commit_path(@project, ValidCommit::ID) -end - -Given /^I visit project tags page$/ do - visit tags_project_repository_path(@project) -end - Then /^I should see "(.*?)" recent branches list$/ do |arg1| page.should have_content("Branches") page.should have_content("master") @@ -76,7 +52,7 @@ Then /^I should see "(.*?)" all tags list$/ do |arg1| end Then /^I should see "(.*?)" protected branches list$/ do |arg1| - within "table" do + within "table" do page.should have_content "stable" page.should_not have_content "master" end diff --git a/features/step_definitions/project/project_issues_steps.rb b/features/step_definitions/project/project_issues_steps.rb index 27de03d5..e46c1f42 100644 --- a/features/step_definitions/project/project_issues_steps.rb +++ b/features/step_definitions/project/project_issues_steps.rb @@ -8,16 +8,12 @@ Given /^project "(.*?)" have "(.*?)" closed issue$/ do |arg1, arg2| Factory.create(:issue, :title => arg2, :project => project, :author => project.users.first, :closed => true) end -Given /^I visit project "(.*?)" issues page$/ do |arg1| - visit project_issues_path(Project.find_by_name(arg1)) -end - Given /^I should see "(.*?)" in issues$/ do |arg1| - page.should have_content arg1 + page.should have_content arg1 end Given /^I should not see "(.*?)" in issues$/ do |arg1| - page.should_not have_content arg1 + page.should_not have_content arg1 end Then /^I should see issue "(.*?)"$/ do |arg1| @@ -27,11 +23,6 @@ Then /^I should see issue "(.*?)"$/ do |arg1| page.should have_content issue.project.name end -Given /^I visit issue page "(.*?)"$/ do |arg1| - issue = Issue.find_by_title(arg1) - visit project_issue_path(issue.project, issue) -end - Given /^I submit new issue "(.*?)"$/ do |arg1| fill_in "issue_title", with: arg1 click_button "Submit new issue" @@ -51,7 +42,16 @@ Given /^I visit project "(.*?)" labels page$/ do |arg1| end Then /^I should see label "(.*?)"$/ do |arg1| - within ".labels-table" do + within ".labels-table" do page.should have_content arg1 end end + +Given /^I fill in issue search with "(.*?)"$/ do |arg1| + # Because fill_in, with: "" triggers nothing + # we need to trigger a keyup event + if arg1 == '' + page.execute_script("$('.issue_search').val('').keyup();"); + end + fill_in 'issue_search', with: arg1 +end diff --git a/features/step_definitions/project/project_merge_requests_steps.rb b/features/step_definitions/project/project_merge_requests_steps.rb index 2bdb967d..fddb18ad 100644 --- a/features/step_definitions/project/project_merge_requests_steps.rb +++ b/features/step_definitions/project/project_merge_requests_steps.rb @@ -8,21 +8,17 @@ Given /^project "(.*?)" have "(.*?)" closed merge request$/ do |arg1, arg2| Factory.create(:merge_request, :title => arg2, :project => project, :author => project.users.first, :closed => true) end -Given /^I visit project "(.*?)" merge requests page$/ do |arg1| - visit project_merge_requests_path(Project.find_by_name(arg1)) -end - Then /^I should see "(.*?)" in merge requests$/ do |arg1| - page.should have_content arg1 + page.should have_content arg1 end Then /^I should not see "(.*?)" in merge requests$/ do |arg1| - page.should_not have_content arg1 + page.should_not have_content arg1 end Then /^I should see merge request "(.*?)"$/ do |arg1| merge_request = MergeRequest.find_by_title(arg1) - page.should have_content(merge_request.title[0..10]) + page.should have_content(merge_request.title[0..10]) page.should have_content(merge_request.target_branch) page.should have_content(merge_request.source_branch) end @@ -34,11 +30,6 @@ Given /^I submit new merge request "(.*?)"$/ do |arg1| click_button "Save" end -Given /^I visit merge request page "(.*?)"$/ do |arg1| - mr = MergeRequest.find_by_title(arg1) - visit project_merge_request_path(mr.project, mr) -end - Then /^I should see closed merge request "(.*?)"$/ do |arg1| mr = MergeRequest.find_by_title(arg1) mr.closed.should be_true diff --git a/features/step_definitions/project/project_milestones_steps.rb b/features/step_definitions/project/project_milestones_steps.rb index 6749773e..936c52df 100644 --- a/features/step_definitions/project/project_milestones_steps.rb +++ b/features/step_definitions/project/project_milestones_steps.rb @@ -12,11 +12,6 @@ Given /^project "(.*?)" has milestone "(.*?)"$/ do |arg1, arg2| end end -Given /^I visit project "(.*?)" milestones page$/ do |arg1| - @project = Project.find_by_name(arg1) - visit project_milestones_path(@project) -end - Then /^I should see active milestones$/ do milestone = @project.milestones.first page.should have_content(milestone.title[0..10]) diff --git a/features/step_definitions/project/project_team_steps.rb b/features/step_definitions/project/project_team_steps.rb index f0bab29a..0979a6ea 100644 --- a/features/step_definitions/project/project_team_steps.rb +++ b/features/step_definitions/project/project_team_steps.rb @@ -8,10 +8,6 @@ Given /^"(.*?)" is "(.*?)" developer$/ do |arg1, arg2| project.add_access(user, :write) end -Given /^I visit project "(.*?)" team page$/ do |arg1| - visit team_project_path(Project.find_by_name(arg1)) -end - Then /^I should be able to see myself in team$/ do page.should have_content(@user.name) page.should have_content(@user.email) @@ -23,13 +19,9 @@ Then /^I should see "(.*?)" in team list$/ do |arg1| page.should have_content(user.email) end -Given /^I click link "(.*?)"$/ do |arg1| - click_link arg1 -end - Given /^I select "(.*?)" as "(.*?)"$/ do |arg1, arg2| user = User.find_by_name(arg1) - within "#new_team_member" do + within "#new_team_member" do select user.name, :from => "team_member_user_id" select arg2, :from => "team_member_project_access" end @@ -44,7 +36,7 @@ end Given /^I change "(.*?)" role to "(.*?)"$/ do |arg1, arg2| user = User.find_by_name(arg1) - within ".user_#{user.id}" do + within ".user_#{user.id}" do select arg2, :from => "team_member_project_access" end end diff --git a/features/step_definitions/project/project_wiki_steps.rb b/features/step_definitions/project/project_wiki_steps.rb index 10de38d9..31fc050a 100644 --- a/features/step_definitions/project/project_wiki_steps.rb +++ b/features/step_definitions/project/project_wiki_steps.rb @@ -1,7 +1,3 @@ -Given /^I visit project wiki page$/ do - visit project_wiki_path(@project, :index) -end - Given /^I create Wiki page$/ do fill_in "Title", :with => 'Test title' fill_in "Content", :with => '[link test](test)' diff --git a/features/step_definitions/project/projects_steps.rb b/features/step_definitions/project/projects_steps.rb index d981e1f3..d22b805f 100644 --- a/features/step_definitions/project/projects_steps.rb +++ b/features/step_definitions/project/projects_steps.rb @@ -1,9 +1,3 @@ -include LoginHelpers - -Given /^I signin as a user$/ do - login_as :user -end - When /^I visit new project page$/ do visit new_project_path end @@ -65,10 +59,6 @@ Given /^I visit project "(.*?)" network page$/ do |arg1| visit graph_project_path(project) end -Given /^show me page$/ do - save_and_open_page -end - Given /^page should have network graph$/ do page.should have_content "Project Network Graph" within ".graph" do diff --git a/features/step_definitions/visit_steps.rb b/features/step_definitions/visit_steps.rb new file mode 100644 index 00000000..35fc6d44 --- /dev/null +++ b/features/step_definitions/visit_steps.rb @@ -0,0 +1,91 @@ +Given /^I visit project "(.*?)" issues page$/ do |arg1| + visit project_issues_path(Project.find_by_name(arg1)) +end + +Given /^I visit issue page "(.*?)"$/ do |arg1| + issue = Issue.find_by_title(arg1) + visit project_issue_path(issue.project, issue) +end + +Given /^I visit project "(.*?)" merge requests page$/ do |arg1| + visit project_merge_requests_path(Project.find_by_name(arg1)) +end + +Given /^I visit merge request page "(.*?)"$/ do |arg1| + mr = MergeRequest.find_by_title(arg1) + visit project_merge_request_path(mr.project, mr) +end + +Given /^I visit project "(.*?)" milestones page$/ do |arg1| + @project = Project.find_by_name(arg1) + visit project_milestones_path(@project) +end + +Given /^I visit project commits page$/ do + visit project_commits_path(@project) +end + +Given /^I visit compare refs page$/ do + visit compare_project_commits_path(@project) +end + +Given /^I visit project branches page$/ do + visit branches_project_repository_path(@project) +end + +Given /^I visit project commit page$/ do + visit project_commit_path(@project, ValidCommit::ID) +end + +Given /^I visit project tags page$/ do + visit tags_project_repository_path(@project) +end + +Given /^I click on commit link$/ do + visit project_commit_path(@project, ValidCommit::ID) +end + +Given /^I visit project source page$/ do + visit tree_project_ref_path(@project, @project.root_ref) +end + +Given /^I visit project source page for "(.*?)"$/ do |arg1| + visit tree_project_ref_path(@project, arg1) +end + +Given /^I visit blob file from repo$/ do + visit tree_project_ref_path(@project, ValidCommit::ID, :path => ValidCommit::BLOB_FILE_PATH) +end + +Given /^I visit project "(.*?)" team page$/ do |arg1| + visit team_project_path(Project.find_by_name(arg1)) +end + +Given /^I visit project wiki page$/ do + visit project_wiki_path(@project, :index) +end + +Given /^I visit profile page$/ do + visit profile_path +end + +Given /^I visit profile token page$/ do + visit profile_token_path +end + +Given /^I visit profile password page$/ do + visit profile_password_path +end + +Given /^I visit dashboard page$/ do + visit dashboard_path +end + +Given /^I visit dashboard issues page$/ do + visit dashboard_issues_path +end + +Given /^I visit dashboard merge requests page$/ do + visit dashboard_merge_requests_path +end + From cd846ba2b55cd1380febfa174d8cf82ad9e948f7 Mon Sep 17 00:00:00 2001 From: miks Date: Thu, 6 Sep 2012 09:52:27 +0300 Subject: [PATCH 167/357] Fix tests --- spec/requests/api/projects_spec.rb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index 1c723058..b1b5966c 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -4,6 +4,8 @@ describe Gitlab::API do include ApiHelpers let(:user) { Factory :user } + let(:user2) { Factory.create(:user) } + let(:user3) { Factory.create(:user) } let!(:project) { Factory :project, owner: user } let!(:snippet) { Factory :snippet, author: user, project: project, title: 'example' } before { project.add_access(user, :read) } @@ -63,13 +65,10 @@ describe Gitlab::API do end describe "PUT /projects/:id/add_users" do - @user2 = Factory :user - @user3 = Factory :user - it "should add users to existing project" do expect { put api("/projects/#{project.code}/add_users", user), - user_ids: [@user2.id, @user3.id], project_access: UsersProject::DEVELOPER + user_ids: [user2.id, user3.id], project_access: UsersProject::DEVELOPER }.to change {Project.last.users_projects.where(:project_access => UsersProject::DEVELOPER).count}.by(2) end end From b3c8688da33ac2fd79d733fc9992a526c18c2c40 Mon Sep 17 00:00:00 2001 From: Cornelio Date: Thu, 30 Aug 2012 16:51:09 +0200 Subject: [PATCH 168/357] fix bulk_import for #1309 --- lib/tasks/bulk_import.rake | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/lib/tasks/bulk_import.rake b/lib/tasks/bulk_import.rake index 5941eadb..edb4a599 100644 --- a/lib/tasks/bulk_import.rake +++ b/lib/tasks/bulk_import.rake @@ -1,12 +1,10 @@ -IMPORT_DIRECTORY = 'import_projects' - -desc "Imports existing Git repos into new projects from the import_projects folder" -task :import_projects, [:email] => :environment do |t, args| - REPOSITORY_DIRECTORY = Gitlab.config.git_base_path +desc "Imports existing Git repos from a directory into new projects in git_base_path" +task :import_projects, [:directory,:email] => :environment do |t, args| user_email = args.email - repos_to_import = Dir.glob("#{IMPORT_DIRECTORY}/*") - + import_directory = args.directory + repos_to_import = Dir.glob("#{import_directory}/*") + git_base_path = Gitlab.config.git_base_path puts "Found #{repos_to_import.length} repos to import" imported_count = 0 @@ -14,11 +12,9 @@ task :import_projects, [:email] => :environment do |t, args| failed_count = 0 repos_to_import.each do |repo_path| repo_name = File.basename repo_path - repo_full_path = File.join(Rails.root, repo_path) puts " Processing #{repo_name}" - - clone_path = "#{REPOSITORY_DIRECTORY}/#{repo_name}.git" + clone_path = "#{git_base_path}#{repo_name}.git" if Dir.exists? clone_path if Project.find_by_code(repo_name) @@ -30,7 +26,7 @@ task :import_projects, [:email] => :environment do |t, args| end else # Clone the repo - unless clone_bare_repo_as_git(repo_full_path, clone_path) + unless clone_bare_repo_as_git(repo_path, clone_path) failed_count += 1 next end @@ -48,14 +44,17 @@ task :import_projects, [:email] => :environment do |t, args| puts "Finished importing #{imported_count} projects (skipped #{skipped_count}, failed #{failed_count})." end -# Clones a repo as bare git repo using the git user +# Clones a repo as bare git repo using the git_user def clone_bare_repo_as_git(existing_path, new_path) + git_user = Gitlab.config.ssh_user begin - sh "sudo -u git -i git clone --bare '#{existing_path}' #{new_path}" + sh "sudo -u #{git_user} -i git clone --bare '#{existing_path}' #{new_path}" true - rescue + rescue Exception=> msg puts " ERROR: Faild to clone #{existing_path} to #{new_path}" - false + puts " Make sure #{git_user} can reach #{existing_path}" + puts " Exception-MSG: #{msg}" + false end end From ab057bb5dbf5806365d42371c968290235c555a8 Mon Sep 17 00:00:00 2001 From: miks Date: Thu, 6 Sep 2012 10:20:59 +0300 Subject: [PATCH 169/357] proper Grape params hash simulation --- spec/requests/api/projects_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index b1b5966c..125101ca 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -68,7 +68,7 @@ describe Gitlab::API do it "should add users to existing project" do expect { put api("/projects/#{project.code}/add_users", user), - user_ids: [user2.id, user3.id], project_access: UsersProject::DEVELOPER + user_ids: {"0" => user2.id, "1" => user3.id}, project_access: UsersProject::DEVELOPER }.to change {Project.last.users_projects.where(:project_access => UsersProject::DEVELOPER).count}.by(2) end end From 09a86bd4d6dcf89f5e5393145900593bb22f1080 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Thu, 6 Sep 2012 10:50:47 +0300 Subject: [PATCH 170/357] Capitlization of /gitlab/i normalized. #1367 --- app/assets/stylesheets/main.scss | 8 ++++---- app/helpers/gitlab_markdown_helper.rb | 2 +- app/mailers/notify.rb | 8 ++++---- app/views/errors/gitolite.html.haml | 2 +- app/views/help/index.html.haml | 2 +- app/views/help/markdown.html.haml | 6 +++--- app/views/help/ssh.html.haml | 4 ++-- app/views/help/system_hooks.html.haml | 2 +- app/views/help/web_hooks.html.haml | 4 ++-- app/views/help/workflow.html.haml | 2 +- app/views/hooks/_data_ex.html.erb | 2 +- app/views/issues/_form.html.haml | 2 +- app/views/keys/index.html.haml | 2 +- app/views/layouts/notify.html.haml | 4 ++-- app/views/milestones/_form.html.haml | 2 +- app/views/notes/_form.html.haml | 2 +- app/views/notify/new_user_email.html.haml | 2 +- app/views/wikis/_form.html.haml | 2 +- doc/api/README.md | 4 ++-- doc/installation.md | 2 +- lib/gitlab/backend/gitolite.rb | 2 +- lib/gitlab/markdown.rb | 2 +- lib/hooks/post-receive | 2 +- lib/tasks/gitlab/write_hook.rake | 2 +- 24 files changed, 36 insertions(+), 36 deletions(-) diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index be27d754..e99ab479 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -1,13 +1,13 @@ @import "bootstrap"; @import "bootstrap-responsive"; -/** GITLAB colors **/ +/** GitLab colors **/ $link_color:#3A89A3; $blue_link: #2fa0bb; $style_color: #474d57; $hover: #fdf5d9; -/** GITLAB Fonts **/ +/** GitLab Fonts **/ @font-face { font-family: Korolev; src: url('korolev-medium-compressed.otf'); } /** MIXINS **/ @@ -106,9 +106,9 @@ $hover: #fdf5d9; @import "themes/ui_modern.scss"; /** - * Gitlab bootstrap. + * GitLab bootstrap. * Overrides some styles of twitter bootstrap. - * Also give some common classes for gitlab app + * Also give some common classes for GitLab app */ @import "gitlab_bootstrap/common.scss"; @import "gitlab_bootstrap/typography.scss"; diff --git a/app/helpers/gitlab_markdown_helper.rb b/app/helpers/gitlab_markdown_helper.rb index 9da695b5..a7ab7c6c 100644 --- a/app/helpers/gitlab_markdown_helper.rb +++ b/app/helpers/gitlab_markdown_helper.rb @@ -1,6 +1,6 @@ module GitlabMarkdownHelper # Replaces references (i.e. @abc, #123, !456, ...) in the text with links to - # the appropriate items in Gitlab. + # the appropriate items in GitLab. # # text - the source text # html_options - extra options for the reference links as given to link_to diff --git a/app/mailers/notify.rb b/app/mailers/notify.rb index 91136fee..0afc1d31 100644 --- a/app/mailers/notify.rb +++ b/app/mailers/notify.rb @@ -111,18 +111,18 @@ class Notify < ActionMailer::Base # Examples # # >> subject('Lorem ipsum') - # => "gitlab | Lorem ipsum" + # => "GitLab | Lorem ipsum" # # # Automatically inserts Project name when @project is set # >> @project = Project.last # => # # >> subject('Lorem ipsum') - # => "gitlab | Lorem ipsum | Ruby on Rails" + # => "GitLab | Lorem ipsum | Ruby on Rails" # # # Accepts multiple arguments # >> subject('Lorem ipsum', 'Dolor sit amet') - # => "gitlab | Lorem ipsum | Dolor sit amet" + # => "GitLab | Lorem ipsum | Dolor sit amet" def subject(*extra) - "gitlab | " << extra.join(' | ') << (@project ? " | #{@project.name}" : "") + "GitLab | " << extra.join(' | ') << (@project ? " | #{@project.name}" : "") end end diff --git a/app/views/errors/gitolite.html.haml b/app/views/errors/gitolite.html.haml index d5f51951..699e6984 100644 --- a/app/views/errors/gitolite.html.haml +++ b/app/views/errors/gitolite.html.haml @@ -1,6 +1,6 @@ %h1 Git Error %hr -%h2 Gitlab was unable to access your Gitolite system. +%h2 GitLab was unable to access your Gitolite system. .git_error_tips %h4 Tips for Administrator: diff --git a/app/views/help/index.html.haml b/app/views/help/index.html.haml index 02549577..962f2175 100644 --- a/app/views/help/index.html.haml +++ b/app/views/help/index.html.haml @@ -30,7 +30,7 @@ %h5= link_to "API", help_api_path %li - %h5= link_to "Gitlab Markdown", help_markdown_path + %h5= link_to "GitLab Markdown", help_markdown_path %li %h5= link_to "SSH keys", help_ssh_path diff --git a/app/views/help/markdown.html.haml b/app/views/help/markdown.html.haml index 43d3d4b0..15ad4a5b 100644 --- a/app/views/help/markdown.html.haml +++ b/app/views/help/markdown.html.haml @@ -1,4 +1,4 @@ -%h3.page_title Gitlab Flavored Markdown +%h3.page_title GitLab Flavored Markdown .back_link = link_to help_path do ← to index @@ -7,7 +7,7 @@ .row .span8 %p - For Gitlab we developed something we call "Gitlab Flavored Markdown" (GFM). + For GitLab we developed something we call "GitLab Flavored Markdown" (GFM). It extends the standard Markdown in a few significant ways adds some useful functionality. %p You can use GFM in: @@ -62,7 +62,7 @@ %p becomes = markdown %Q{```ruby\nrequire 'redcarpet'\nmarkdown = Redcarpet.new("Hello World!")\nputs markdown.to_html\n```} - %h4 Special Gitlab references + %h4 Special GitLab references %p GFM recognizes special references. diff --git a/app/views/help/ssh.html.haml b/app/views/help/ssh.html.haml index 6a581204..3f082333 100644 --- a/app/views/help/ssh.html.haml +++ b/app/views/help/ssh.html.haml @@ -5,7 +5,7 @@ %hr %p.slead - SSH key allows you to establish a secure connection between your computer and Gitlab + SSH key allows you to establish a secure connection between your computer and GitLab %p.slead To generate a new SSH key just open your terminal and use code below. @@ -17,7 +17,7 @@ \# Generating public/private rsa key pair... %p.slead - Next just use code below to dump your public key and add to GITLAB SSH Keys + Next just use code below to dump your public key and add to GitLab SSH Keys %pre.dark cat ~/.ssh/id_rsa.pub diff --git a/app/views/help/system_hooks.html.haml b/app/views/help/system_hooks.html.haml index 9fc8cbab..736c818b 100644 --- a/app/views/help/system_hooks.html.haml +++ b/app/views/help/system_hooks.html.haml @@ -5,7 +5,7 @@ %hr %p.slead - Your Gitlab instance can perform HTTP POST request on next event: create_project, delete_project, create_user, delete_user, change_team_member. + Your GitLab instance can perform HTTP POST request on next event: create_project, delete_project, create_user, delete_user, change_team_member. %br System Hooks can be used for logging or change information in LDAP server. %br diff --git a/app/views/help/web_hooks.html.haml b/app/views/help/web_hooks.html.haml index 263eadf6..65036613 100644 --- a/app/views/help/web_hooks.html.haml +++ b/app/views/help/web_hooks.html.haml @@ -5,11 +5,11 @@ %hr %p.slead - Every Gitlab project can trigger a web server whenever the repo is pushed to. + Every GitLab project can trigger a web server whenever the repo is pushed to. %br Web Hooks can be used to update an external issue tracker, trigger CI builds, update a backup mirror, or even deploy to your production server. %br - GITLAB will send POST request with commits information on every push. + GitLab will send POST request with commits information on every push. %h5 Hooks request example: = render "hooks/data_ex" diff --git a/app/views/help/workflow.html.haml b/app/views/help/workflow.html.haml index a3fe3b01..6062ca09 100644 --- a/app/views/help/workflow.html.haml +++ b/app/views/help/workflow.html.haml @@ -24,7 +24,7 @@ git commit -am "My feature is ready" %li - %p Push your branch to gitlabhq + %p Push your branch to GitLab .bash %pre.dark git push origin $feature_name diff --git a/app/views/hooks/_data_ex.html.erb b/app/views/hooks/_data_ex.html.erb index e43714e9..7dd6b9e0 100644 --- a/app/views/hooks/_data_ex.html.erb +++ b/app/views/hooks/_data_ex.html.erb @@ -32,7 +32,7 @@ :timestamp => "2012-01-03T23:36:29+02:00", :url => "http://localhost/diaspora/commits/da1560886d...", :author => { - :name => "gitlab dev user", + :name => "GitLab dev user", :email => "gitlabdev@dv6700.(none)" } } diff --git a/app/views/issues/_form.html.haml b/app/views/issues/_form.html.haml index db7920b9..23de7e8e 100644 --- a/app/views/issues/_form.html.haml +++ b/app/views/issues/_form.html.haml @@ -38,7 +38,7 @@ = f.label :description, "Details" .input = f.text_area :description, maxlength: 2000, class: "xxlarge", rows: 14 - %p.hint Issues are parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}. + %p.hint Issues are parsed with #{link_to "GitLab Flavored Markdown", help_markdown_path, target: '_blank'}. .actions diff --git a/app/views/keys/index.html.haml b/app/views/keys/index.html.haml index 8f7e2bab..3e919c5c 100644 --- a/app/views/keys/index.html.haml +++ b/app/views/keys/index.html.haml @@ -4,7 +4,7 @@ %hr %p.slead - SSH key allows you to establish a secure connection between your computer and Gitlab + SSH key allows you to establish a secure connection between your computer and GitLab %table#keys-table diff --git a/app/views/layouts/notify.html.haml b/app/views/layouts/notify.html.haml index a1938df4..7b79897b 100644 --- a/app/views/layouts/notify.html.haml +++ b/app/views/layouts/notify.html.haml @@ -2,7 +2,7 @@ %head %meta{content: "text/html; charset=utf-8", "http-equiv" => "Content-Type"} %title - gitlabhq + GitLab :css .header h1 {color: #BBBBBB !important; font: bold 32px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 40px;} .header p {color: #c6c6c6; font: normal 12px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 18px;} @@ -21,7 +21,7 @@ \  %td{align: "left", style: "padding: 18px 0 10px;", width: "580"} %h1{style: "color: #BBBBBB; font: normal 32px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 40px;"} - gitlab + GITLAB - if @project | #{@project.name} %table{align: "center", bgcolor: "#fff", border: "0", cellpadding: "0", cellspacing: "0", style: "font-family: Helvetica, Arial, sans-serif; background: #fff;", width: "600"} diff --git a/app/views/milestones/_form.html.haml b/app/views/milestones/_form.html.haml index 41cbd6ab..ce4145ba 100644 --- a/app/views/milestones/_form.html.haml +++ b/app/views/milestones/_form.html.haml @@ -22,7 +22,7 @@ = f.label :description, "Description", class: "control-label" .controls = f.text_area :description, maxlength: 2000, class: "input-xlarge", rows: 10 - %p.hint Milestones are parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}. + %p.hint Milestones are parsed with #{link_to "GitLab Flavored Markdown", help_markdown_path, target: '_blank'}. .span6 .control-group = f.label :due_date, "Due Date", class: "control-label" diff --git a/app/views/notes/_form.html.haml b/app/views/notes/_form.html.haml index 7211a0ae..6d559cfc 100644 --- a/app/views/notes/_form.html.haml +++ b/app/views/notes/_form.html.haml @@ -11,7 +11,7 @@ = f.text_area :note, size: 255, class: 'note-text' #preview-note.preview_note.hide .hint - .right Comments are parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}. + .right Comments are parsed with #{link_to "GitLab Flavored Markdown", help_markdown_path, target: '_blank'}. .clearfix .row.note_advanced_opts.hide diff --git a/app/views/notify/new_user_email.html.haml b/app/views/notify/new_user_email.html.haml index d96afc92..93bf7c50 100644 --- a/app/views/notify/new_user_email.html.haml +++ b/app/views/notify/new_user_email.html.haml @@ -6,7 +6,7 @@ %h2{style: "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} Hi #{@user['name']}! %p{style: "color:#767676; font-weight: normal; margin: 0; padding: 0; line-height: 20px; font-size: 12px;font-family: Helvetica, Arial, sans-serif; "} - Administrator created account for you. Now you are a member of company gitlab application. + Administrator created account for you. Now you are a member of company GitLab application. %td{style: "font-size: 1px; line-height: 1px;", width: "21"} %tr %td{style: "font-size: 1px; line-height: 1px;", width: "21"} diff --git a/app/views/wikis/_form.html.haml b/app/views/wikis/_form.html.haml index 12b57e03..b05d0a78 100644 --- a/app/views/wikis/_form.html.haml +++ b/app/views/wikis/_form.html.haml @@ -14,7 +14,7 @@ .middle_box_content .input %span.cgray - Wiki content is parsed with #{link_to "Gitlab Flavored Markdown", help_markdown_path, target: '_blank'}. + Wiki content is parsed with #{link_to "GitLab Flavored Markdown", help_markdown_path, target: '_blank'}. To link to a (new) page you can just type %code [Link Title](page-slug) \. diff --git a/doc/api/README.md b/doc/api/README.md index dece3e23..93919b42 100644 --- a/doc/api/README.md +++ b/doc/api/README.md @@ -1,4 +1,4 @@ -# Gitlab API +# GitLab API All API requests require authentication. You need to pass a `private_token` parameter to authenticate. You can find or reset your private token in your profile. @@ -10,7 +10,7 @@ If no, or an invalid, `private_token` is provided then an error message will be } ``` -API requests should be prefixed with `api` and the API version. The API version is equal to the Gitlab major version number, which is defined in `lib/api.rb`. +API requests should be prefixed with `api` and the API version. The API version is equal to the GitLab major version number, which is defined in `lib/api.rb`. Example of a valid API request: diff --git a/doc/installation.md b/doc/installation.md index 327fc192..e14ec711 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -167,7 +167,7 @@ and ensure you have followed all of the above steps carefully. # Login to MySQL $ mysql -u root -p - # Create the gitlabhq production database + # Create the GitLab production database mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`; # Create the MySQL User change $password to a real password diff --git a/lib/gitlab/backend/gitolite.rb b/lib/gitlab/backend/gitolite.rb index b69f4663..3dfb574c 100644 --- a/lib/gitlab/backend/gitolite.rb +++ b/lib/gitlab/backend/gitolite.rb @@ -170,7 +170,7 @@ module Gitlab def push Dir.chdir(File.join(@local_dir, "gitolite")) `git add -A` - `git commit -am "Gitlab"` + `git commit -am "GitLab"` `git push` Dir.chdir(Rails.root) diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb index 9a07133d..a387b503 100644 --- a/lib/gitlab/markdown.rb +++ b/lib/gitlab/markdown.rb @@ -1,5 +1,5 @@ module Gitlab - # Custom parser for Gitlab-flavored Markdown + # Custom parser for GitLab-flavored Markdown # # It replaces references in the text with links to the appropriate items in Gitlab. # diff --git a/lib/hooks/post-receive b/lib/hooks/post-receive index d38bd13e..a4fa9f1c 100755 --- a/lib/hooks/post-receive +++ b/lib/hooks/post-receive @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# This file was placed here by Gitlab. It makes sure that your pushed commits +# This file was placed here by GitLab. It makes sure that your pushed commits # will be processed properly. while read oldrev newrev ref diff --git a/lib/tasks/gitlab/write_hook.rake b/lib/tasks/gitlab/write_hook.rake index 9ec9c838..5e9fc8eb 100644 --- a/lib/tasks/gitlab/write_hook.rake +++ b/lib/tasks/gitlab/write_hook.rake @@ -1,6 +1,6 @@ namespace :gitlab do namespace :gitolite do - desc "GITLAB | Write GITLAB hook for gitolite" + desc "GITLAB | Write GitLab hook for gitolite" task :write_hooks => :environment do gitolite_hooks_path = File.join(Gitlab.config.git_hooks_path, "common") gitlab_hooks_path = Rails.root.join("lib", "hooks") From a65ce748430d922ea2967f226eb40039040dc43d Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Thu, 6 Sep 2012 11:40:16 +0300 Subject: [PATCH 171/357] Spec fixed --- spec/mailers/notify_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/mailers/notify_spec.rb b/spec/mailers/notify_spec.rb index cf50b429..4a9f142e 100644 --- a/spec/mailers/notify_spec.rb +++ b/spec/mailers/notify_spec.rb @@ -24,7 +24,7 @@ describe Notify do end it 'has the correct subject' do - should have_subject /^gitlab \| Account was created for you$/ + should have_subject /^gitlab \| Account was created for you$/i end it 'contains the new user\'s login name' do From c106bb7096e3bb8bada454dcf7794877204f0e34 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Thu, 6 Sep 2012 04:03:46 -0700 Subject: [PATCH 172/357] minor refactoring of commits controller --- app/controllers/commits_controller.rb | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/app/controllers/commits_controller.rb b/app/controllers/commits_controller.rb index 5e10a1b6..4ab40c30 100644 --- a/app/controllers/commits_controller.rb +++ b/app/controllers/commits_controller.rb @@ -64,19 +64,14 @@ class CommitsController < ApplicationController @commit.to_patch, type: "text/plain", disposition: 'attachment', - filename: (@commit.id.to_s + ".patch") + filename: "#{@commit.id.patch}" ) end protected def load_refs - if params[:ref].blank? - @branch = params[:branch].blank? ? nil : params[:branch] - @tag = params[:tag].blank? ? nil : params[:tag] - @ref = @branch || @tag || @project.try(:default_branch) || 'master' - else - @ref = params[:ref] - end + @ref ||= params[:ref].presence || params[:branch].presence || params[:tag].presence + @ref ||= @ref || @project.try(:default_branch) || 'master' end end From 60e18e2636b8ca3e6f25c5a9adaa4118f5a2d3ad Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Thu, 6 Sep 2012 04:32:01 -0700 Subject: [PATCH 173/357] rewrite admin.js in coffeescript --- app/assets/javascripts/admin.js | 11 ----------- app/assets/javascripts/admin.js.coffee | 8 ++++++++ 2 files changed, 8 insertions(+), 11 deletions(-) delete mode 100644 app/assets/javascripts/admin.js create mode 100644 app/assets/javascripts/admin.js.coffee diff --git a/app/assets/javascripts/admin.js b/app/assets/javascripts/admin.js deleted file mode 100644 index bb0a499a..00000000 --- a/app/assets/javascripts/admin.js +++ /dev/null @@ -1,11 +0,0 @@ -$(document).ready(function(){ - $('input#user_force_random_password').on('change', function(elem) { - var elems = $('#user_password, #user_password_confirmation'); - - if ($(this).attr('checked')) { - elems.val('').attr('disabled', true); - } else { - elems.removeAttr('disabled'); - } - }); -}); diff --git a/app/assets/javascripts/admin.js.coffee b/app/assets/javascripts/admin.js.coffee new file mode 100644 index 00000000..269a7a76 --- /dev/null +++ b/app/assets/javascripts/admin.js.coffee @@ -0,0 +1,8 @@ +$ -> + $('input#user_force_random_password').on 'change', (elem) -> + elems = $('#user_password, #user_password_confirmation') + + if $(@).attr 'checked' + elems.val('').attr 'disabled', true + else + elems.removeAttr 'disabled' From 08d9421dd9c291def896c78f703fec933d1c540f Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Thu, 6 Sep 2012 04:32:31 -0700 Subject: [PATCH 174/357] rewrite graph.js in coffeescript --- app/assets/javascripts/graph.js | 10 ---------- app/assets/javascripts/graph.js.coffee | 10 ++++++++++ 2 files changed, 10 insertions(+), 10 deletions(-) delete mode 100644 app/assets/javascripts/graph.js create mode 100644 app/assets/javascripts/graph.js.coffee diff --git a/app/assets/javascripts/graph.js b/app/assets/javascripts/graph.js deleted file mode 100644 index 434cf70a..00000000 --- a/app/assets/javascripts/graph.js +++ /dev/null @@ -1,10 +0,0 @@ -function initGraphNav() { - $(".graph svg").css("position", "relative"); - $("body").bind("keyup", function(e) { - if(e.keyCode == 37) { // left - $(".graph svg").animate({ left: "+=400" }); - } else if(e.keyCode == 39) { // right - $(".graph svg").animate({ left: "-=400" }); - } - }); -} diff --git a/app/assets/javascripts/graph.js.coffee b/app/assets/javascripts/graph.js.coffee new file mode 100644 index 00000000..5fe8ae3f --- /dev/null +++ b/app/assets/javascripts/graph.js.coffee @@ -0,0 +1,10 @@ +initGraphNav = -> + $('.graph svg').css 'position', 'relative' + + $('body').bind 'keyup', (e) -> + if e.keyCode is 37 # left + $('.graph svg').animate left: '+=400' + else if e.keyCode is 39 # right + $('.graph svg').animate left: '-=400' + +window.initGraphNav = initGraphNav From f8b588808ec180c836402395afdc1303b7189abc Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Thu, 6 Sep 2012 04:37:14 -0700 Subject: [PATCH 175/357] rewrite loader.js in coffeescript --- app/assets/javascripts/loader.js | 11 ----------- app/assets/javascripts/loader.js.coffee | 5 +++++ 2 files changed, 5 insertions(+), 11 deletions(-) delete mode 100644 app/assets/javascripts/loader.js create mode 100644 app/assets/javascripts/loader.js.coffee diff --git a/app/assets/javascripts/loader.js b/app/assets/javascripts/loader.js deleted file mode 100644 index 6fa0b525..00000000 --- a/app/assets/javascripts/loader.js +++ /dev/null @@ -1,11 +0,0 @@ -var Loader = { - img_src: "/assets/ajax-loader.gif", - - html: - function(width) { - img = $(""); - img.attr("width", width); - img.attr("src", this.img_src); - return img; - } -} diff --git a/app/assets/javascripts/loader.js.coffee b/app/assets/javascripts/loader.js.coffee new file mode 100644 index 00000000..66f8e8b1 --- /dev/null +++ b/app/assets/javascripts/loader.js.coffee @@ -0,0 +1,5 @@ +Loader = + html: (width) -> + $('').attr src: '/assets/ajax-loader.gif', width: width + +window.Loader = Loader From 06acc115ed8e5641932f85568c6d03dcb30c9923 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Thu, 6 Sep 2012 04:51:42 -0700 Subject: [PATCH 176/357] rewrite snippets.js in coffeescript --- app/assets/javascripts/snippets.js | 9 --------- app/assets/javascripts/snippets.js.coffee | 6 ++++++ 2 files changed, 6 insertions(+), 9 deletions(-) delete mode 100644 app/assets/javascripts/snippets.js create mode 100644 app/assets/javascripts/snippets.js.coffee diff --git a/app/assets/javascripts/snippets.js b/app/assets/javascripts/snippets.js deleted file mode 100644 index 11e18eb7..00000000 --- a/app/assets/javascripts/snippets.js +++ /dev/null @@ -1,9 +0,0 @@ -$(document).ready(function(){ - $("#snippets-table .snippet").live('click', function(e){ - if(e.target.nodeName != "A" && e.target.nodeName != "INPUT") { - location.href = $(this).attr("url"); - e.stopPropagation(); - return false; - } - }); -}); diff --git a/app/assets/javascripts/snippets.js.coffee b/app/assets/javascripts/snippets.js.coffee new file mode 100644 index 00000000..af4385de --- /dev/null +++ b/app/assets/javascripts/snippets.js.coffee @@ -0,0 +1,6 @@ +$ -> + $('#snippets-table .snippet').live 'click', (e) -> + if e.target.nodeName isnt 'A' and e.target.nodeName isnt 'INPUT' + location.href = $(@).attr 'url' + e.stopPropagation() + false From e7c2ee57aa40e13aac987fb107794cdc3128ed8a Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Thu, 6 Sep 2012 05:06:01 -0700 Subject: [PATCH 177/357] delete unnecessary team.js --- app/assets/javascripts/team.js | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 app/assets/javascripts/team.js diff --git a/app/assets/javascripts/team.js b/app/assets/javascripts/team.js deleted file mode 100644 index f4b04354..00000000 --- a/app/assets/javascripts/team.js +++ /dev/null @@ -1,8 +0,0 @@ -function backToMembers(){ - $("#new_team_member").hide("slide", { direction: "right" }, 150, function(){ - $("#team-table").show("slide", { direction: "left" }, 150, function() { - $("#new_team_member").remove(); - $(".add_new").show(); - }); - }); -} From 88d394d396f09fe018317443105cd08bd69e1d3f Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Thu, 6 Sep 2012 05:44:44 -0700 Subject: [PATCH 178/357] cleanup projects.coffee --- app/assets/javascripts/projects.js.coffee | 25 +++++++++++------------ 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/app/assets/javascripts/projects.js.coffee b/app/assets/javascripts/projects.js.coffee index ca8f13f6..7700cf98 100644 --- a/app/assets/javascripts/projects.js.coffee +++ b/app/assets/javascripts/projects.js.coffee @@ -1,21 +1,20 @@ window.Projects = -> - $("#project_name").live "change", -> - slug = slugify($(this).val()) - $("#project_code").val(slug) - $("#project_path").val(slug) + $('#project_name').on 'change', -> + slug = slugify $(@).val() + $('#project_code').val slug - $(".new_project, .edit_project").live "ajax:before", -> - $(".project_new_holder, .project_edit_holder").hide() - $(".save-project-loader").show() + $('.new_project, .edit_project').on 'ajax:before', -> + $('.project_new_holder, .project_edit_holder').hide() + $('.save-project-loader').show() - $("form #project_default_branch").chosen() - disableButtonIfEmtpyField "#project_name", ".project-submit" + $('form #project_default_branch').chosen() + disableButtonIfEmtpyField '#project_name', '.project-submit' # Git clone panel switcher $ -> - scope = $('.project_clone_holder') + scope = $ '.project_clone_holder' if scope.length > 0 $('a, button', scope).click -> - $('a, button', scope).removeClass('active') - $(this).addClass('active') - $('#project_clone', scope).val($(this).data('clone')) + $('a, button', scope).removeClass 'active' + $(@).addClass 'active' + $('#project_clone', scope).val $(@).data 'clone' From 66684d6d50e9d8e0ae31db9df6b5bd7626db74ef Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Thu, 6 Sep 2012 05:47:13 -0700 Subject: [PATCH 179/357] move code from application.js to separate file --- app/assets/javascripts/application.js | 131 -------------------------- app/assets/javascripts/main.js | 130 +++++++++++++++++++++++++ 2 files changed, 130 insertions(+), 131 deletions(-) create mode 100644 app/assets/javascripts/main.js diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index f69fd6f9..4c487ec1 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -17,134 +17,3 @@ //= require raphael //= require branch-graph //= require_tree . - -$(document).ready(function(){ - - $(".one_click_select").live("click", function(){ - $(this).select(); - }); - - $('body').on('ajax:complete, ajax:beforeSend, submit', 'form', function(e){ - var buttons = $('[type="submit"]', this); - switch( e.type ){ - case 'ajax:beforeSend': - case 'submit': - buttons.attr('disabled', 'disabled'); - break; - case ' ajax:complete': - default: - buttons.removeAttr('disabled'); - break; - } - }) - - $(".account-box").mouseenter(showMenu); - $(".account-box").mouseleave(resetMenu); - - $("#projects-list .project").live('click', function(e){ - if(e.target.nodeName != "A" && e.target.nodeName != "INPUT") { - location.href = $(this).attr("url"); - e.stopPropagation(); - return false; - } - }); - - /** - * Focus search field by pressing 's' key - */ - $(document).keypress(function(e) { - if( $(e.target).is(":input") ) return; - switch(e.which) { - case 115: focusSearch(); - e.preventDefault(); - } - }); - - /** - * Commit show suppressed diff - * - */ - $(".supp_diff_link").bind("click", function() { - showDiff(this); - }); - - /** - * Note markdown preview - * - */ - $(document).on('click', '#preview-link', function(e) { - $('#preview-note').text('Loading...'); - - var previewLinkText = ($(this).text() == 'Preview' ? 'Edit' : 'Preview'); - $(this).text(previewLinkText); - - var note = $('#note_note').val(); - if (note.trim().length === 0) { note = 'Nothing to preview'; } - $.post($(this).attr('href'), {note: note}, function(data) { - $('#preview-note').html(data); - }); - - $('#preview-note, #note_note').toggle(); - e.preventDefault(); - }); -}); - -function focusSearch() { - $("#search").focus(); -} - -function updatePage(data){ - $.ajax({type: "GET", url: location.href, data: data, dataType: "script"}); -} - -function showMenu() { - $(this).toggleClass('hover'); -} - -function resetMenu() { - $(this).removeClass("hover"); -} - -function slugify(text) { - return text.replace(/[^-a-zA-Z0-9]+/g, '_').toLowerCase(); -} - -function showDiff(link) { - $(link).next('table').show(); - $(link).remove(); -} - -(function($){ - var _chosen = $.fn.chosen; - $.fn.extend({ - chosen: function(options) { - var default_options = {'search_contains' : 'true'}; - $.extend(default_options, options); - return _chosen.apply(this, [default_options]); - }}) -})(jQuery); - - -function ajaxGet(url) { - $.ajax({type: "GET", url: url, dataType: "script"}); -} - -/** - * Disable button if text field is empty - */ -function disableButtonIfEmtpyField(field_selector, button_selector) { - field = $(field_selector); - if(field.val() == "") { - field.closest("form").find(button_selector).attr("disabled", "disabled").addClass("disabled"); - } - - field.on('keyup', function(){ - var field = $(this); - var closest_submit = field.closest("form").find(button_selector); - if(field.val() == "") { - closest_submit.attr("disabled", "disabled").addClass("disabled"); - } else { - closest_submit.removeAttr("disabled").removeClass("disabled"); - } - }) -} diff --git a/app/assets/javascripts/main.js b/app/assets/javascripts/main.js new file mode 100644 index 00000000..61af1dc3 --- /dev/null +++ b/app/assets/javascripts/main.js @@ -0,0 +1,130 @@ +$(document).ready(function(){ + + $(".one_click_select").live("click", function(){ + $(this).select(); + }); + + $('body').on('ajax:complete, ajax:beforeSend, submit', 'form', function(e){ + var buttons = $('[type="submit"]', this); + switch( e.type ){ + case 'ajax:beforeSend': + case 'submit': + buttons.attr('disabled', 'disabled'); + break; + case ' ajax:complete': + default: + buttons.removeAttr('disabled'); + break; + } + }) + + $(".account-box").mouseenter(showMenu); + $(".account-box").mouseleave(resetMenu); + + $("#projects-list .project").live('click', function(e){ + if(e.target.nodeName != "A" && e.target.nodeName != "INPUT") { + location.href = $(this).attr("url"); + e.stopPropagation(); + return false; + } + }); + + /** + * Focus search field by pressing 's' key + */ + $(document).keypress(function(e) { + if( $(e.target).is(":input") ) return; + switch(e.which) { + case 115: focusSearch(); + e.preventDefault(); + } + }); + + /** + * Commit show suppressed diff + * + */ + $(".supp_diff_link").bind("click", function() { + showDiff(this); + }); + + /** + * Note markdown preview + * + */ + $(document).on('click', '#preview-link', function(e) { + $('#preview-note').text('Loading...'); + + var previewLinkText = ($(this).text() == 'Preview' ? 'Edit' : 'Preview'); + $(this).text(previewLinkText); + + var note = $('#note_note').val(); + if (note.trim().length === 0) { note = 'Nothing to preview'; } + $.post($(this).attr('href'), {note: note}, function(data) { + $('#preview-note').html(data); + }); + + $('#preview-note, #note_note').toggle(); + e.preventDefault(); + }); +}); + +function focusSearch() { + $("#search").focus(); +} + +function updatePage(data){ + $.ajax({type: "GET", url: location.href, data: data, dataType: "script"}); +} + +function showMenu() { + $(this).toggleClass('hover'); +} + +function resetMenu() { + $(this).removeClass("hover"); +} + +function slugify(text) { + return text.replace(/[^-a-zA-Z0-9]+/g, '_').toLowerCase(); +} + +function showDiff(link) { + $(link).next('table').show(); + $(link).remove(); +} + +(function($){ + var _chosen = $.fn.chosen; + $.fn.extend({ + chosen: function(options) { + var default_options = {'search_contains' : 'true'}; + $.extend(default_options, options); + return _chosen.apply(this, [default_options]); + }}) +})(jQuery); + + +function ajaxGet(url) { + $.ajax({type: "GET", url: url, dataType: "script"}); +} + +/** + * Disable button if text field is empty + */ +function disableButtonIfEmtpyField(field_selector, button_selector) { + field = $(field_selector); + if(field.val() == "") { + field.closest("form").find(button_selector).attr("disabled", "disabled").addClass("disabled"); + } + + field.on('keyup', function(){ + var field = $(this); + var closest_submit = field.closest("form").find(button_selector); + if(field.val() == "") { + closest_submit.attr("disabled", "disabled").addClass("disabled"); + } else { + closest_submit.removeAttr("disabled").removeClass("disabled"); + } + }) +} From 3d3c6674fbea1b9099e80e1fc1768f85ecd3bf14 Mon Sep 17 00:00:00 2001 From: miks Date: Thu, 6 Sep 2012 16:32:26 +0300 Subject: [PATCH 180/357] Typo fixed --- doc/api/projects.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/api/projects.md b/doc/api/projects.md index 85b88d40..972ea67e 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -117,8 +117,8 @@ PUT /projects/:id/add_users Parameters: + `id` (required) - The ID or code name of a project -+ `user_ids` (required) - new project name -+ `project_access` (required) - new project name ++ `user_ids` (required) - The ID list of users to add ++ `project_access` (required) - Project access level Will return updated project with status `200 OK` on success, or `404 Not found` on fail. From d861023cb9dc71b5943916fdd6011dab32085626 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Thu, 6 Sep 2012 07:52:01 -0700 Subject: [PATCH 181/357] refactor factory specs --- spec/factories_spec.rb | 90 ++---------------------------------------- 1 file changed, 4 insertions(+), 86 deletions(-) diff --git a/spec/factories_spec.rb b/spec/factories_spec.rb index 5760aad4..5ccc17bd 100644 --- a/spec/factories_spec.rb +++ b/spec/factories_spec.rb @@ -1,91 +1,9 @@ require 'spec_helper' -describe "Factories" do - describe 'User' do - it "builds a valid instance" do - build(:user).should be_valid - end - - it "builds a valid admin instance" do - build(:admin).should be_valid - end - end - - describe 'Project' do - it "builds a valid instance" do - build(:project).should be_valid - end - end - - describe 'Issue' do - it "builds a valid instance" do - build(:issue).should be_valid - end - - it "builds a valid closed instance" do - build(:closed_issue).should be_valid - end - end - - describe 'MergeRequest' do - it "builds a valid instance" do - build(:merge_request).should be_valid - end - end - - describe 'Note' do - it "builds a valid instance" do - build(:note).should be_valid - end - end - - describe 'Event' do - it "builds a valid instance" do - build(:event).should be_valid - end - end - - describe 'Key' do - it "builds a valid instance" do - build(:key).should be_valid - end - - it "builds a valid deploy key instance" do - build(:deploy_key).should be_valid - end - - it "builds a valid personal key instance" do - build(:personal_key).should be_valid - end - end - - describe 'Milestone' do - it "builds a valid instance" do - build(:milestone).should be_valid - end - end - - describe 'SystemHook' do - it "builds a valid instance" do - build(:system_hook).should be_valid - end - end - - describe 'ProjectHook' do - it "builds a valid instance" do - build(:project_hook).should be_valid - end - end - - describe 'Wiki' do - it "builds a valid instance" do - build(:wiki).should be_valid - end - end - - describe 'Snippet' do - it "builds a valid instance" do - build(:snippet).should be_valid +FactoryGirl.factories.map(&:name).each do |factory_name| + describe "#{factory_name} factory" do + it 'should be valid' do + build(factory_name).should be_valid end end end From 46b9aafc396278a9ce0732d9a877ca01c45dbc0e Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Thu, 6 Sep 2012 07:56:33 -0700 Subject: [PATCH 182/357] add missing selector to projects.js --- app/assets/javascripts/projects.js.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/projects.js.coffee b/app/assets/javascripts/projects.js.coffee index 7700cf98..85ab2a06 100644 --- a/app/assets/javascripts/projects.js.coffee +++ b/app/assets/javascripts/projects.js.coffee @@ -1,7 +1,7 @@ window.Projects = -> $('#project_name').on 'change', -> slug = slugify $(@).val() - $('#project_code').val slug + $('#project_code, #project_path').val slug $('.new_project, .edit_project').on 'ajax:before', -> $('.project_new_holder, .project_edit_holder').hide() From 3a63f6f31622c5f96ff167b0c8df1367abbf5eda Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 6 Sep 2012 15:26:55 -0400 Subject: [PATCH 183/357] Simplify EMOJI_PATTERN --- lib/gitlab/markdown.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb index 2af2e9be..57b37764 100644 --- a/lib/gitlab/markdown.rb +++ b/lib/gitlab/markdown.rb @@ -35,7 +35,7 @@ module Gitlab ([^\w&;])? # Suffix (6) }x.freeze - EMOJI_PATTERN = %r{(:([\w\-\+]+):)}.freeze + EMOJI_PATTERN = %r{(:(\S+):)}.freeze attr_reader :html_options From 2faa4bba40909778c1732894faf42a0f00e87cc4 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 6 Sep 2012 15:31:25 -0400 Subject: [PATCH 184/357] Update Note#upvote? to support emoji voting --- app/models/note.rb | 2 +- spec/models/note_spec.rb | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/models/note.rb b/app/models/note.rb index 711a4ee6..d8494edd 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -103,7 +103,7 @@ class Note < ActiveRecord::Base # Returns true if this is an upvote note, # otherwise false is returned def upvote? - note =~ /^\+1/ ? true : false + note.start_with?('+1') || note.start_with?(':+1:') end end # == Schema Information diff --git a/spec/models/note_spec.rb b/spec/models/note_spec.rb index ffaf442d..dddfd34c 100644 --- a/spec/models/note_spec.rb +++ b/spec/models/note_spec.rb @@ -35,6 +35,16 @@ describe Note do note = Factory(:note, note: "-1 for this") note.should_not be_upvote end + + it "recognizes a +1 emoji as a vote" do + note = build(:note, note: ":+1: for this") + note.should be_upvote + end + + it "recognizes a neutral emoji note" do + note = build(:note, note: "I would :+1: this, but I don't want to") + note.should_not be_upvote + end end let(:project) { create(:project) } From 2dc0519277417456372d6bde5c47bec895cc497e Mon Sep 17 00:00:00 2001 From: miks Date: Thu, 6 Sep 2012 23:14:42 +0300 Subject: [PATCH 185/357] bulk access roles update/deletion added --- app/models/users_project.rb | 17 +++++++++++++++++ app/roles/team.rb | 13 +++++++++++++ 2 files changed, 30 insertions(+) diff --git a/app/models/users_project.rb b/app/models/users_project.rb index 7d172934..654b3711 100644 --- a/app/models/users_project.rb +++ b/app/models/users_project.rb @@ -20,6 +20,23 @@ class UsersProject < ActiveRecord::Base delegate :name, :email, to: :user, prefix: true + def self.bulk_delete(project, user_ids) + UsersProject.transaction do + UsersProject.where(:user_id => user_ids, :project_id => project.id).each do |users_project| + users_project.delete + end + end + end + + def self.bulk_update(project, user_ids, project_access) + UsersProject.transaction do + UsersProject.where(:user_id => user_ids, :project_id => project.id).each do |users_project| + users_project.project_access = project_access + users_project.save + end + end + end + def self.bulk_import(project, user_ids, project_access) UsersProject.transaction do user_ids.each do |user_id| diff --git a/app/roles/team.rb b/app/roles/team.rb index 27b1cc65..d8798c50 100644 --- a/app/roles/team.rb +++ b/app/roles/team.rb @@ -36,4 +36,17 @@ module Team UsersProject.bulk_import(self, users_ids, access_role) self.update_repository end + + # Update multiple project users + # to same access role by user ids + def update_users_ids_to_role(users_ids, access_role) + UsersProject.bulk_update(self, users_ids, access_role) + self.update_repository + end + + # Delete multiple users from project by user ids + def delete_users_by_ids(users_ids) + UsersProject.bulk_delete(self, users_ids) + self.update_repository + end end From 909c8c345dff0851e15d81917efe7817c7f89e22 Mon Sep 17 00:00:00 2001 From: miks Date: Thu, 6 Sep 2012 23:49:29 +0300 Subject: [PATCH 186/357] Make project users API more RESTful --- doc/api/projects.md | 49 ++++++++++++++++++++++++++++-- lib/api/entities.rb | 5 +++ lib/api/projects.rb | 38 +++++++++++++++++++++-- spec/requests/api/projects_spec.rb | 27 +++++++++++++--- 4 files changed, 111 insertions(+), 8 deletions(-) diff --git a/doc/api/projects.md b/doc/api/projects.md index 972ea67e..b26305b1 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -106,12 +106,26 @@ Parameters: Will return created project with status `201 Created` on success, or `404 Not found` on fail. +## Get project users + +Get users and access roles for existing project + +``` +GET /projects/:id/users +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project + +Will return users and their access roles with status `200 OK` on success, or `404 Not found` on fail. + ## Add project users Add users to exiting project ``` -PUT /projects/:id/add_users +POST /projects/:id/users ``` Parameters: @@ -120,7 +134,38 @@ Parameters: + `user_ids` (required) - The ID list of users to add + `project_access` (required) - Project access level -Will return updated project with status `200 OK` on success, or `404 Not found` on fail. +Will return status `201 Created` on success, or `404 Not found` on fail. + +## Update project users access level + +Update existing users to specified access level + +``` +PUT /projects/:id/users +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `user_ids` (required) - The ID list of users to add ++ `project_access` (required) - Project access level + +Will return status `200 OK` on success, or `404 Not found` on fail. + +## Delete project users + +Delete users from exiting project + +``` +DELETE /projects/:id/users +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `user_ids` (required) - The ID list of users to add + +Will return status `200 OK` on success, or `404 Not found` on fail. ## Project repository branches diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 96ccd87a..fef5328d 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -16,6 +16,11 @@ module Gitlab expose :issues_enabled, :merge_requests_enabled, :wall_enabled, :wiki_enabled, :created_at end + class UsersProject < Grape::Entity + expose :user, using: Entities::UserBasic + expose :project_access + end + class RepoObject < Grape::Entity expose :name, :commit end diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 9cd86d0b..e56f8949 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -44,6 +44,17 @@ module Gitlab end end + # Get project users + # + # Parameters: + # id (required) - The ID or code name of a project + # Example Request: + # GET /projects/:id/users + get ":id/users" do + @users_projects = paginate user_project.users_projects + present @users_projects, with: Entities::UsersProject + end + # Add users to project with specified access level # # Parameters: @@ -51,11 +62,34 @@ module Gitlab # user_ids (required) - The ID list of users to add # project_access (required) - Project access level # Example Request: - # PUT /projects/:id/add_users - put ":id/add_users" do + # POST /projects/:id/users + post ":id/users" do user_project.add_users_ids_to_team(params[:user_ids].values, params[:project_access]) end + # Update users to specified access level + # + # Parameters: + # id (required) - The ID or code name of a project + # user_ids (required) - The ID list of users to add + # project_access (required) - New project access level to + # Example Request: + # PUT /projects/:id/add_users + put ":id/users" do + user_project.update_users_ids_to_role(params[:user_ids].values, params[:project_access]) + end + + # Delete project users + # + # Parameters: + # id (required) - The ID or code name of a project + # user_ids (required) - The ID list of users to delete + # Example Request: + # DELETE /projects/:id/users + delete ":id/users" do + user_project.delete_users_ids_from_team(params[:user_ids].values) + end + # Get a project repository branches # # Parameters: diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index 125101ca..73ec3760 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -8,6 +8,7 @@ describe Gitlab::API do let(:user3) { Factory.create(:user) } let!(:project) { Factory :project, owner: user } let!(:snippet) { Factory :snippet, author: user, project: project, title: 'example' } + let!(:users_project) { Factory :users_project, user: user, project: project } before { project.add_access(user, :read) } describe "GET /projects" do @@ -64,12 +65,30 @@ describe Gitlab::API do end end - describe "PUT /projects/:id/add_users" do - it "should add users to existing project" do + describe "POST /projects/:id/users" do + it "should add users to project" do expect { - put api("/projects/#{project.code}/add_users", user), + post api("/projects/#{project.code}/users", user), user_ids: {"0" => user2.id, "1" => user3.id}, project_access: UsersProject::DEVELOPER - }.to change {Project.last.users_projects.where(:project_access => UsersProject::DEVELOPER).count}.by(2) + }.to change {project.users_projects.where(:project_access => UsersProject::DEVELOPER).count}.by(2) + end + end + + describe "PUT /projects/:id/users" do + it "should update users to new access role" do + expect { + put api("/projects/#{project.code}/users", user), + user_ids: {"0" => user}, project_access: UsersProject::DEVELOPER + }.to change {project.users_projects.where(:project_access => UsersProject::DEVELOPER).count}.by(1) + end + end + + describe "DELETE /projects/:id/users" do + it "should delete users from project" do + expect { + delete api("/projects/#{project.code}/delete", user), + user_ids: {"0" => users_project.id} + }.to change {project.users_projects.where(:project_access => UsersProject::DEVELOPER).count}.by(-1) end end From bde19c061a73a7756cad4ba02e52187b1eb22fc5 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 6 Sep 2012 16:51:28 -0400 Subject: [PATCH 187/357] Update failure message for UsersProject uniqueness validation Was "User has already been taken", is now "User already exists in project". --- app/models/users_project.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/models/users_project.rb b/app/models/users_project.rb index 7d172934..1b598483 100644 --- a/app/models/users_project.rb +++ b/app/models/users_project.rb @@ -14,7 +14,7 @@ class UsersProject < ActiveRecord::Base after_save :update_repository after_destroy :update_repository - validates_uniqueness_of :user_id, scope: [:project_id] + validates_uniqueness_of :user_id, scope: [:project_id], message: "already exists in project" validates_presence_of :user_id validates_presence_of :project_id @@ -48,10 +48,10 @@ class UsersProject < ActiveRecord::Base def self.access_roles { - "Guest" => GUEST, - "Reporter" => REPORTER, + "Guest" => GUEST, + "Reporter" => REPORTER, "Developer" => DEVELOPER, - "Master" => MASTER + "Master" => MASTER } end From 8f3b1d6ea4c72665e1b0ffbc554727595cbe60b0 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 6 Sep 2012 17:05:23 -0400 Subject: [PATCH 188/357] Fix spec broken by bde19c0 --- spec/models/users_project_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/models/users_project_spec.rb b/spec/models/users_project_spec.rb index 3197ba6e..33cb358e 100644 --- a/spec/models/users_project_spec.rb +++ b/spec/models/users_project_spec.rb @@ -10,7 +10,7 @@ describe UsersProject do let!(:users_project) { create(:users_project) } it { should validate_presence_of(:user_id) } - it { should validate_uniqueness_of(:user_id).scoped_to(:project_id) } + it { should validate_uniqueness_of(:user_id).scoped_to(:project_id).with_message(/already exists/) } it { should validate_presence_of(:project_id) } end From 34a48d55cc9763fb65c50b80e545c99350ebc6ca Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 6 Sep 2012 17:17:56 -0400 Subject: [PATCH 189/357] Revert "Change @project instance variable to a local in views/help/markdown" This reverts commit 6471d8c6521ef7a88f3aa893cc11c1da8077bdc0. --- app/views/help/markdown.html.haml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/help/markdown.html.haml b/app/views/help/markdown.html.haml index 15ad4a5b..0644ede3 100644 --- a/app/views/help/markdown.html.haml +++ b/app/views/help/markdown.html.haml @@ -88,9 +88,9 @@ for commits -# this example will only be shown if the user has a project with at least one issue - - if project = current_user.projects.first - - if issue = project.issues.first - %p For example in your #{link_to project.name, project_path(project)} project something like + - if @project = current_user.projects.first + - if issue = @project.issues.first + %p For example in your #{link_to @project.name, project_path(@project)} project something like %pre= "This is related to ##{issue.id}. @#{current_user.name} is working on solving it." %p becomes = markdown "This is related to ##{issue.id}. @#{current_user.name} is working on solving it." From 8fdeb43c36767fc10a0298598fd7452fa609faee Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 6 Sep 2012 17:20:57 -0400 Subject: [PATCH 190/357] Fix Help/Markdown: Take 2 --- app/views/help/markdown.html.haml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/views/help/markdown.html.haml b/app/views/help/markdown.html.haml index 0644ede3..2086b08c 100644 --- a/app/views/help/markdown.html.haml +++ b/app/views/help/markdown.html.haml @@ -90,12 +90,11 @@ -# this example will only be shown if the user has a project with at least one issue - if @project = current_user.projects.first - if issue = @project.issues.first - %p For example in your #{link_to @project.name, project_path(@project)} project something like + %p For example in your #{link_to @project.name, project_path(@project)} project, writing: %pre= "This is related to ##{issue.id}. @#{current_user.name} is working on solving it." - %p becomes - = markdown "This is related to ##{issue.id}. @#{current_user.name} is working on solving it." - - + %p becomes: + %pre= gfm "This is related to ##{issue.id}. @#{current_user.name} is working on solving it." + - @project = nil # Prevent this from bubbling up to page title .span4.right .alert.alert-info From 0eb8a0398197a4a586d83e4e18e7e070f547243f Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Fri, 7 Sep 2012 07:01:04 +0600 Subject: [PATCH 191/357] add mysql service for travis-ci MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit see http://about.travis-ci.org/blog/august-2012-upcoming-ci-environment-updates --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index da67e37d..bb4c4a79 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,8 @@ branches: - 'master' rvm: - 1.9.3 +services: + - mysql before_script: - "cp config/database.yml.$DB config/database.yml" - "cp config/gitlab.yml.example config/gitlab.yml" From 79021e674bab1d34609228343fbf3403d9bd9bc6 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 7 Sep 2012 08:16:29 +0300 Subject: [PATCH 192/357] Split gitolite backend. Use gitolite_config methods moved to separate class --- app/controllers/application_controller.rb | 4 - app/views/errors/invalid_ssh_key.html.haml | 3 - lib/gitlab/backend/gitolite.rb | 189 ++------------------- lib/gitlab/backend/gitolite_config.rb | 168 ++++++++++++++++++ spec/lib/gitolite_config_spec.rb | 16 ++ spec/lib/gitolite_spec.rb | 25 +++ spec/support/gitolite_stub.rb | 22 ++- 7 files changed, 241 insertions(+), 186 deletions(-) delete mode 100644 app/views/errors/invalid_ssh_key.html.haml create mode 100644 lib/gitlab/backend/gitolite_config.rb create mode 100644 spec/lib/gitolite_config_spec.rb create mode 100644 spec/lib/gitolite_spec.rb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 7e53b8fe..2fe2a974 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -14,10 +14,6 @@ class ApplicationController < ActionController::Base render "errors/gitolite", layout: "error" end - rescue_from Gitlab::Gitolite::InvalidKey do |exception| - render "errors/invalid_ssh_key", layout: "error" - end - rescue_from Encoding::CompatibilityError do |exception| render "errors/encoding", layout: "error", status: 404 end diff --git a/app/views/errors/invalid_ssh_key.html.haml b/app/views/errors/invalid_ssh_key.html.haml deleted file mode 100644 index fb7922b0..00000000 --- a/app/views/errors/invalid_ssh_key.html.haml +++ /dev/null @@ -1,3 +0,0 @@ -%h1 Git Error -%hr -%p Seems like SSH Key you provided is not a valid SSH key. diff --git a/lib/gitlab/backend/gitolite.rb b/lib/gitlab/backend/gitolite.rb index 3dfb574c..bc9e1f1d 100644 --- a/lib/gitlab/backend/gitolite.rb +++ b/lib/gitlab/backend/gitolite.rb @@ -1,202 +1,43 @@ -require 'gitolite' -require 'timeout' -require 'fileutils' +require_relative 'gitolite_config' -# TODO: refactor & cleanup module Gitlab class Gitolite class AccessDenied < StandardError; end - class InvalidKey < StandardError; end + + def config + @config ||= Gitlab::GitoliteConfig.new + end def set_key key_id, key_content, projects - configure do |c| - c.update_keys(key_id, key_content) - c.update_projects(projects) + config.apply do |config| + config.write_key(key_id, key_content) + config.update_projects(projects) end end def remove_key key_id, projects - configure do |c| - c.delete_key(key_id) - c.update_projects(projects) + config.apply do |config| + config.rm_key(key_id) + config.update_projects(projects) end end def update_repository project - configure do |c| - c.update_project(project.path, project) - end + config.update_project!(project.path, project) end - alias_method :create_repository, :update_repository - def remove_repository project - configure do |c| - c.destroy_project(project) - end + config.destroy_project!(project) end def url_to_repo path Gitlab.config.ssh_path + "#{path}.git" end - def initialize - # create tmp dir - @local_dir = File.join(Rails.root, 'tmp',"gitlabhq-gitolite-#{Time.now.to_i}") - end - def enable_automerge - configure do |git| - git.admin_all_repo - end + config.admin_all_repo!(project) end - protected - - def destroy_project(project) - FileUtils.rm_rf(project.path_to_repo) - - ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite')) - conf = ga_repo.config - conf.rm_repo(project.path) - ga_repo.save - end - - #update or create - def update_keys(user, key) - File.open(File.join(@local_dir, 'gitolite/keydir',"#{user}.pub"), 'w') {|f| f.write(key.gsub(/\n/,'')) } - end - - def delete_key(user) - File.unlink(File.join(@local_dir, 'gitolite/keydir',"#{user}.pub")) - `cd #{File.join(@local_dir,'gitolite')} ; git rm keydir/#{user}.pub` - end - - # update or create - def update_project(repo_name, project) - ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite')) - conf = ga_repo.config - repo = update_project_config(project, conf) - conf.add_repo(repo, true) - - ga_repo.save - end - - # Updates many projects and uses project.path as the repo path - # An order of magnitude faster than update_project - def update_projects(projects) - ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite')) - conf = ga_repo.config - - projects.each do |project| - repo = update_project_config(project, conf) - conf.add_repo(repo, true) - end - - ga_repo.save - end - - def update_project_config(project, conf) - repo_name = project.path - - repo = if conf.has_repo?(repo_name) - conf.get_repo(repo_name) - else - ::Gitolite::Config::Repo.new(repo_name) - end - - name_readers = project.repository_readers - name_writers = project.repository_writers - name_masters = project.repository_masters - - pr_br = project.protected_branches.map(&:name).join("$ ") - - repo.clean_permissions - - # Deny access to protected branches for writers - unless name_writers.blank? || pr_br.blank? - repo.add_permission("-", pr_br.strip + "$ ", name_writers) - end - - # Add read permissions - repo.add_permission("R", "", name_readers) unless name_readers.blank? - - # Add write permissions - repo.add_permission("RW+", "", name_writers) unless name_writers.blank? - repo.add_permission("RW+", "", name_masters) unless name_masters.blank? - - repo - end - - def admin_all_repo - ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite')) - conf = ga_repo.config - owner_name = "" - - # Read gitolite-admin user - # - begin - repo = conf.get_repo("gitolite-admin") - owner_name = repo.permissions[0]["RW+"][""][0] - raise StandardError if owner_name.blank? - rescue => ex - puts "Can't determine gitolite-admin owner".red - raise StandardError - end - - # @ALL repos premission for gitolite owner - repo_name = "@all" - repo = if conf.has_repo?(repo_name) - conf.get_repo(repo_name) - else - ::Gitolite::Config::Repo.new(repo_name) - end - - repo.add_permission("RW+", "", owner_name) - conf.add_repo(repo, true) - ga_repo.save - end - - private - - def pull - # create tmp dir - @local_dir = File.join(Rails.root, 'tmp',"gitlabhq-gitolite-#{Time.now.to_i}") - Dir.mkdir @local_dir - - `git clone #{Gitlab.config.gitolite_admin_uri} #{@local_dir}/gitolite` - end - - def push - Dir.chdir(File.join(@local_dir, "gitolite")) - `git add -A` - `git commit -am "GitLab"` - `git push` - Dir.chdir(Rails.root) - - FileUtils.rm_rf(@local_dir) - end - - def configure - Timeout::timeout(30) do - File.open(File.join(Rails.root, 'tmp', "gitlabhq-gitolite.lock"), "w+") do |f| - begin - f.flock(File::LOCK_EX) - pull - yield(self) - push - ensure - f.flock(File::LOCK_UN) - end - end - end - rescue Exception => ex - if ex.message =~ /is not a valid SSH key string/ - raise Gitolite::InvalidKey.new("ssh key is not valid") - else - Gitlab::Logger.error(ex.message) - raise Gitolite::AccessDenied.new("gitolite timeout") - end - end + alias_method :create_repository, :update_repository end end diff --git a/lib/gitlab/backend/gitolite_config.rb b/lib/gitlab/backend/gitolite_config.rb new file mode 100644 index 00000000..5cf49121 --- /dev/null +++ b/lib/gitlab/backend/gitolite_config.rb @@ -0,0 +1,168 @@ +require 'gitolite' +require 'timeout' +require 'fileutils' + +module Gitlab + class GitoliteConfig + def config_tmp_dir + @config_tmp_dir ||= File.join(Rails.root, 'tmp',"gitlabhq-gitolite-#{Time.now.to_i}") + end + + def apply + Timeout::timeout(30) do + File.open(File.join(Rails.root, 'tmp', "gitlabhq-gitolite.lock"), "w+") do |f| + begin + f.flock(File::LOCK_EX) + pull + yield(self) + push + ensure + f.flock(File::LOCK_UN) + end + end + end + rescue Exception => ex + Gitlab::Logger.error(ex.message) + raise Gitolite::AccessDenied.new("gitolite timeout") + end + + def destroy_project(project) + FileUtils.rm_rf(project.path_to_repo) + + ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(config_tmp_dir,'gitolite')) + conf = ga_repo.config + conf.rm_repo(project.path) + ga_repo.save + end + + def destroy_project!(project) + apply do |config| + config.destroy_project(project) + end + end + + def write_key(id, key) + File.open(File.join(config_tmp_dir, 'gitolite/keydir',"#{id}.pub"), 'w') do |f| + f.write(key.gsub(/\n/,'')) + end + end + + def rm_key(user) + File.unlink(File.join(config_tmp_dir, 'gitolite/keydir',"#{user}.pub")) + `cd #{File.join(config_tmp_dir,'gitolite')} ; git rm keydir/#{user}.pub` + end + + # update or create + def update_project(repo_name, project) + ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(config_tmp_dir,'gitolite')) + conf = ga_repo.config + repo = update_project_config(project, conf) + conf.add_repo(repo, true) + + ga_repo.save + end + + def update_project!(repo_name, project) + apply do |config| + config.update_project(repo_name, project) + end + end + + # Updates many projects and uses project.path as the repo path + # An order of magnitude faster than update_project + def update_projects(projects) + ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(config_tmp_dir,'gitolite')) + conf = ga_repo.config + + projects.each do |project| + repo = update_project_config(project, conf) + conf.add_repo(repo, true) + end + + ga_repo.save + end + + def update_project_config(project, conf) + repo_name = project.path + + repo = if conf.has_repo?(repo_name) + conf.get_repo(repo_name) + else + ::Gitolite::Config::Repo.new(repo_name) + end + + name_readers = project.repository_readers + name_writers = project.repository_writers + name_masters = project.repository_masters + + pr_br = project.protected_branches.map(&:name).join("$ ") + + repo.clean_permissions + + # Deny access to protected branches for writers + unless name_writers.blank? || pr_br.blank? + repo.add_permission("-", pr_br.strip + "$ ", name_writers) + end + + # Add read permissions + repo.add_permission("R", "", name_readers) unless name_readers.blank? + + # Add write permissions + repo.add_permission("RW+", "", name_writers) unless name_writers.blank? + repo.add_permission("RW+", "", name_masters) unless name_masters.blank? + + repo + end + + def admin_all_repo + ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(config_tmp_dir,'gitolite')) + conf = ga_repo.config + owner_name = "" + + # Read gitolite-admin user + # + begin + repo = conf.get_repo("gitolite-admin") + owner_name = repo.permissions[0]["RW+"][""][0] + raise StandardError if owner_name.blank? + rescue => ex + puts "Can't determine gitolite-admin owner".red + raise StandardError + end + + # @ALL repos premission for gitolite owner + repo_name = "@all" + repo = if conf.has_repo?(repo_name) + conf.get_repo(repo_name) + else + ::Gitolite::Config::Repo.new(repo_name) + end + + repo.add_permission("RW+", "", owner_name) + conf.add_repo(repo, true) + ga_repo.save + end + + def admin_all_repo! + apply { |config| config.admin_all_repo } + end + + private + + def pull + Dir.mkdir config_tmp_dir + `git clone #{Gitlab.config.gitolite_admin_uri} #{config_tmp_dir}/gitolite` + end + + def push + Dir.chdir(File.join(config_tmp_dir, "gitolite")) + `git add -A` + `git commit -am "GitLab"` + `git push` + Dir.chdir(Rails.root) + + FileUtils.rm_rf(config_tmp_dir) + end + end +end + diff --git a/spec/lib/gitolite_config_spec.rb b/spec/lib/gitolite_config_spec.rb new file mode 100644 index 00000000..c3ce0db5 --- /dev/null +++ b/spec/lib/gitolite_config_spec.rb @@ -0,0 +1,16 @@ +require 'spec_helper' + +describe Gitlab::GitoliteConfig do + let(:gitolite) { Gitlab::GitoliteConfig.new } + + it { should respond_to :write_key } + it { should respond_to :rm_key } + it { should respond_to :update_project } + it { should respond_to :update_project! } + it { should respond_to :update_projects } + it { should respond_to :destroy_project } + it { should respond_to :destroy_project! } + it { should respond_to :apply } + it { should respond_to :admin_all_repo } + it { should respond_to :admin_all_repo! } +end diff --git a/spec/lib/gitolite_spec.rb b/spec/lib/gitolite_spec.rb new file mode 100644 index 00000000..cc8ce8b2 --- /dev/null +++ b/spec/lib/gitolite_spec.rb @@ -0,0 +1,25 @@ +require 'spec_helper' + +describe Gitlab::Gitolite do + let(:project) { double('Project', path: 'diaspora') } + let(:gitolite_config) { double('Gitlab::GitoliteConfig') } + let(:gitolite) { Gitlab::Gitolite.new } + + before do + gitolite.stub(config: gitolite_config) + end + + it { should respond_to :set_key } + it { should respond_to :remove_key } + + it { should respond_to :update_repository } + it { should respond_to :create_repository } + it { should respond_to :remove_repository } + + it { gitolite.url_to_repo('diaspora').should == Gitlab.config.ssh_path + "diaspora.git" } + + it "should call config update" do + gitolite_config.should_receive(:update_project!) + gitolite.update_repository project + end +end diff --git a/spec/support/gitolite_stub.rb b/spec/support/gitolite_stub.rb index 2a907f99..037b09cd 100644 --- a/spec/support/gitolite_stub.rb +++ b/spec/support/gitolite_stub.rb @@ -17,7 +17,7 @@ module GitoliteStub ) gitolite_admin = double( - 'Gitolite::GitoliteAdmin', + 'Gitolite::GitoliteAdmin', config: gitolite_config, save: true, ) @@ -27,9 +27,21 @@ module GitoliteStub end def stub_gitlab_gitolite - gitlab_gitolite = Gitlab::Gitolite.new - Gitlab::Gitolite.stub(new: gitlab_gitolite) - gitlab_gitolite.stub(configure: ->() { yield(self) }) - gitlab_gitolite.stub(update_keys: true) + gitolite_config = double('Gitlab::GitoliteConfig') + gitolite_config.stub( + apply: ->() { yield(self) }, + write_key: true, + rm_key: true, + update_projects: true, + update_project: true, + update_project!: true, + destroy_project: true, + destroy_project!: true, + admin_all_repo: true, + admin_all_repo!: true, + + ) + + Gitlab::GitoliteConfig.stub(new: gitolite_config) end end From 963746f97847cd106e5f90f830fe9dc0b5ae0102 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 7 Sep 2012 09:15:30 +0300 Subject: [PATCH 193/357] Refactor gitolite_config --- lib/gitlab/backend/gitolite_config.rb | 71 ++++++++++++++++----------- 1 file changed, 43 insertions(+), 28 deletions(-) diff --git a/lib/gitlab/backend/gitolite_config.rb b/lib/gitlab/backend/gitolite_config.rb index 47870edc..ff4c9014 100644 --- a/lib/gitlab/backend/gitolite_config.rb +++ b/lib/gitlab/backend/gitolite_config.rb @@ -4,39 +4,64 @@ require 'fileutils' module Gitlab class GitoliteConfig - attr_reader :config_tmp_dir + attr_reader :config_tmp_dir, :ga_repo, :conf - def reset_config_tmp_dir - @config_tmp_dir = File.join(Rails.root, 'tmp',"gitlabhq-gitolite-#{Time.now.to_i}") + def config_tmp_dir + @config_tmp_dir ||= File.join(Rails.root, 'tmp',"gitlabhq-gitolite-#{Time.now.to_i}") + end + + def ga_repo + @ga_repo ||= ::Gitolite::GitoliteAdmin.new(File.join(config_tmp_dir,'gitolite')) end def apply Timeout::timeout(30) do File.open(File.join(Rails.root, 'tmp', "gitlabhq-gitolite.lock"), "w+") do |f| begin + # Set exclusive lock + # to prevent race condition f.flock(File::LOCK_EX) - reset_config_tmp_dir - pull + + # Pull gitolite-admin repo + # in tmp dir before do any changes + pull(config_tmp_dir) + + # Build ga_repo object and @conf + # to access gitolite-admin configuration + @conf = ga_repo.config + + # Do any changes + # in gitolite-admin + # config here yield(self) - push + + # Save changes in + # gitolite-admin repo + # before pusht it + ga_repo.save + + # Push gitolite-admin repo + # to apply all changes + push(config_tmp_dir) + + # Remove tmp dir + # wiith gitolite-admin FileUtils.rm_rf(config_tmp_dir) ensure + # unlock so other task cann access + # gitolite configuration f.flock(File::LOCK_UN) end end end rescue Exception => ex - Gitlab::Logger.error(ex.message) + Gitlab::Logger.error(ex.class.name + " " + ex.message) raise Gitolite::AccessDenied.new("gitolite timeout") end def destroy_project(project) FileUtils.rm_rf(project.path_to_repo) - - ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(config_tmp_dir,'gitolite')) - conf = ga_repo.config conf.rm_repo(project.path) - ga_repo.save end def destroy_project!(project) @@ -58,12 +83,8 @@ module Gitlab # update or create def update_project(repo_name, project) - ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(config_tmp_dir,'gitolite')) - conf = ga_repo.config repo = update_project_config(project, conf) conf.add_repo(repo, true) - - ga_repo.save end def update_project!(repo_name, project) @@ -75,15 +96,10 @@ module Gitlab # Updates many projects and uses project.path as the repo path # An order of magnitude faster than update_project def update_projects(projects) - ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(config_tmp_dir,'gitolite')) - conf = ga_repo.config - projects.each do |project| repo = update_project_config(project, conf) conf.add_repo(repo, true) end - - ga_repo.save end def update_project_config(project, conf) @@ -118,9 +134,9 @@ module Gitlab repo end + # Enable access to all repos for gitolite admin. + # We use it for accept merge request feature def admin_all_repo - ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(config_tmp_dir,'gitolite')) - conf = ga_repo.config owner_name = "" # Read gitolite-admin user @@ -144,7 +160,6 @@ module Gitlab repo.add_permission("RW+", "", owner_name) conf.add_repo(repo, true) - ga_repo.save end def admin_all_repo! @@ -153,13 +168,13 @@ module Gitlab private - def pull - Dir.mkdir config_tmp_dir - `git clone #{Gitlab.config.gitolite_admin_uri} #{config_tmp_dir}/gitolite` + def pull tmp_dir + Dir.mkdir tmp_dir + `git clone #{Gitlab.config.gitolite_admin_uri} #{tmp_dir}/gitolite` end - def push - Dir.chdir(File.join(config_tmp_dir, "gitolite")) + def push tmp_dir + Dir.chdir(File.join(tmp_dir, "gitolite")) `git add -A` `git commit -am "GitLab"` `git push` From 5cb9e7eedc24c418bbb3bce2f48a7c585f9cb439 Mon Sep 17 00:00:00 2001 From: randx Date: Fri, 7 Sep 2012 09:16:04 +0300 Subject: [PATCH 194/357] Fix emojii --- lib/gitlab/markdown.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb index 57b37764..17f865bb 100644 --- a/lib/gitlab/markdown.rb +++ b/lib/gitlab/markdown.rb @@ -95,7 +95,7 @@ module Gitlab text = text.gsub(EMOJI_PATTERN) do |match| if valid_emoji?($2) - helper.image_tag("#{$2}.png", size: "20x20", class: 'emoji', title: $1, alt: $1) + image_tag("emoji/#{$2}.png", size: "20x20", class: 'emoji', title: $1, alt: $1) else match end From 61c7449321c526fe3c36e899cead1ac11c39c466 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 7 Sep 2012 09:50:35 +0300 Subject: [PATCH 195/357] Bulk user add on project -> new team member --- app/controllers/team_members_controller.rb | 13 +++++----- app/views/team_members/_form.html.haml | 25 ++++++++----------- .../project/project_team_steps.rb | 4 +-- 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/app/controllers/team_members_controller.rb b/app/controllers/team_members_controller.rb index 0846f096..606cb972 100644 --- a/app/controllers/team_members_controller.rb +++ b/app/controllers/team_members_controller.rb @@ -17,13 +17,12 @@ class TeamMembersController < ApplicationController end def create - @team_member = UsersProject.new(params[:team_member]) - @team_member.project = project - if @team_member.save - redirect_to team_project_path(@project) - else - render "new" - end + @project.add_users_ids_to_team( + params[:user_ids], + params[:project_access] + ) + + redirect_to team_project_path(@project) end def update diff --git a/app/views/team_members/_form.html.haml b/app/views/team_members/_form.html.haml index 208794b9..192f2735 100644 --- a/app/views/team_members/_form.html.haml +++ b/app/views/team_members/_form.html.haml @@ -1,4 +1,5 @@ -%h3= "New Team member" +%h3.page_title + = "New Team member(s)" %hr = form_for @team_member, as: :team_member, url: project_team_members_path(@project, @team_member) do |f| -if @team_member.errors.any? @@ -7,27 +8,23 @@ - @team_member.errors.full_messages.each do |msg| %li= msg + %h6 1. Choose people you want in the team .clearfix - = f.label :user_id, "Name" - .input= f.select(:user_id, User.not_in_project(@project).all.collect {|p| [ p.name, p.id ] }, { include_blank: "Select user" }, { style: "width:300px" }) + = f.label :user_ids, "Peolpe" + .input= select_tag(:user_ids, options_from_collection_for_select(User.not_in_project(@project).all, :id, :name), { class: "xxlarge", multiple: true }) + %h6 2. Set access level for them .clearfix = f.label :project_access, "Project Access" - .input= f.select :project_access, options_for_select(Project.access_options, @team_member.project_access), {}, class: "project-access-select" + .input= select_tag :project_access, options_for_select(Project.access_options, @team_member.project_access), class: "project-access-select" .actions - = f.submit 'Save', class: "btn primary" - = link_to "Cancel", team_project_path(@project), class: "btn" + = f.submit 'Save', class: "btn save-btn" + = link_to "Cancel", team_project_path(@project), class: "btn cancel-btn" -:css - form select { - width:300px; - } :javascript - $('select#team_member_user_id').chosen(); - $('select#team_member_project_access').chosen(); - //$('select#team_member_repo_access').chosen(); - //$('select#team_member_project_access').chosen(); + $('select#user_ids').chosen(); + $('select#project_access').chosen(); diff --git a/features/step_definitions/project/project_team_steps.rb b/features/step_definitions/project/project_team_steps.rb index 0979a6ea..91885e46 100644 --- a/features/step_definitions/project/project_team_steps.rb +++ b/features/step_definitions/project/project_team_steps.rb @@ -22,8 +22,8 @@ end Given /^I select "(.*?)" as "(.*?)"$/ do |arg1, arg2| user = User.find_by_name(arg1) within "#new_team_member" do - select user.name, :from => "team_member_user_id" - select arg2, :from => "team_member_project_access" + select user.name, :from => "user_ids" + select arg2, :from => "project_access" end click_button "Save" end From fed6ab2481257e67822825fad1203ed073028a22 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 7 Sep 2012 10:42:41 +0300 Subject: [PATCH 196/357] Change representation of team members. Group by role --- Gemfile.lock | 4 ++-- app/views/keys/index.html.haml | 4 ++-- app/views/projects/_team.html.haml | 17 +++++++++-------- app/views/team_members/_show.html.haml | 16 ++++++++-------- 4 files changed, 21 insertions(+), 20 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index f350b3fc..d0b6a53a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -108,7 +108,7 @@ GEM bcrypt-ruby (3.0.1) blankslate (2.1.2.4) bootstrap-sass (2.0.4.0) - builder (3.0.0) + builder (3.0.2) capybara (1.1.2) mime-types (>= 1.16) nokogiri (>= 1.3.3) @@ -125,7 +125,7 @@ GEM charlock_holmes (0.6.8) childprocess (0.3.2) ffi (~> 1.0.6) - chosen-rails (0.9.8) + chosen-rails (0.9.8.3) railties (~> 3.0) thor (~> 0.14) coderay (1.0.6) diff --git a/app/views/keys/index.html.haml b/app/views/keys/index.html.haml index 3e919c5c..fd5a9dad 100644 --- a/app/views/keys/index.html.haml +++ b/app/views/keys/index.html.haml @@ -3,7 +3,7 @@ = link_to "Add new", new_key_path, class: "btn right" %hr -%p.slead +%p.slead SSH key allows you to establish a secure connection between your computer and GitLab @@ -15,7 +15,7 @@ %th - @keys.each do |key| = render(partial: 'show', locals: {key: key}) - - if @keys.blank? + - if @keys.blank? %tr %td{colspan: 3} %h3.nothing_here_message There are no SSH keys with access to your account. diff --git a/app/views/projects/_team.html.haml b/app/views/projects/_team.html.haml index 0ddcf17f..0ab22984 100644 --- a/app/views/projects/_team.html.haml +++ b/app/views/projects/_team.html.haml @@ -1,11 +1,12 @@ -%table - %thead - %tr - %th User - %th Permissions - %tbody - - @project.users_projects.each do |up| - = render(partial: 'team_members/show', locals: {member: up}) +- @project.users_projects.group_by(&:project_access).each do |access, members| + %table + %thead + %tr + %th.span7= Project.access_options.key(access).pluralize + %th + %tbody + - members.each do |up| + = render(partial: 'team_members/show', locals: {member: up}) :javascript diff --git a/app/views/team_members/_show.html.haml b/app/views/team_members/_show.html.haml index 2dc4fb65..d9a72494 100644 --- a/app/views/team_members/_show.html.haml +++ b/app/views/team_members/_show.html.haml @@ -2,12 +2,6 @@ - allow_admin = can? current_user, :admin_project, @project %tr{id: dom_id(member), class: "team_member_row user_#{user.id}"} %td - .right - - if @project.owner == user - %span.label Project Owner - - if user.blocked - %span.label Blocked - = link_to project_team_member_path(@project, member), title: user.name, class: "dark" do = image_tag gravatar_icon(user.email, 40), class: "avatar s32" = link_to project_team_member_path(@project, member), title: user.name, class: "dark" do @@ -16,5 +10,11 @@ %div.cgray= user.email %td - = form_for(member, as: :team_member, url: project_team_member_path(@project, member)) do |f| - = f.select :project_access, options_for_select(UsersProject.access_roles, member.project_access), {}, class: "medium project-access-select", disabled: !allow_admin + .right + - if @project.owner == user + %span.btn.disabled.success Project Owner + - if user.blocked + %span.btn.disabled.blocked Blocked + - if allow_admin + = form_for(member, as: :team_member, url: project_team_member_path(@project, member)) do |f| + = f.select :project_access, options_for_select(UsersProject.access_roles, member.project_access), {}, class: "medium project-access-select" From 09263719d536a3935c4b1d801472126ece28f283 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Fri, 7 Sep 2012 13:56:13 +0300 Subject: [PATCH 197/357] Preselected Milestone: Cucumber scenario added --- features/projects/issues/issues.feature | 10 ++++++++++ .../step_definitions/project/project_issues_steps.rb | 12 ++++++++++++ 2 files changed, 22 insertions(+) diff --git a/features/projects/issues/issues.feature b/features/projects/issues/issues.feature index 42a3d873..f0d9b610 100644 --- a/features/projects/issues/issues.feature +++ b/features/projects/issues/issues.feature @@ -64,3 +64,13 @@ Feature: Issues And I fill in issue search with "" Then I should see "Release 0.4" in issues And I should see "Release 0.3" in issues + + @javascript + @current + Scenario: I create Issue with pre-selected milestone + Given project "Shop" has milestone "v2.2" + And project "Shop" has milestone "v3.0" + And I visit project "Shop" issues page + When I select milestone "v3.0" + And I click link "New Issue" + Then I should see selected milestone with title "v3.0" diff --git a/features/step_definitions/project/project_issues_steps.rb b/features/step_definitions/project/project_issues_steps.rb index e46c1f42..ecf0892f 100644 --- a/features/step_definitions/project/project_issues_steps.rb +++ b/features/step_definitions/project/project_issues_steps.rb @@ -55,3 +55,15 @@ Given /^I fill in issue search with "(.*?)"$/ do |arg1| end fill_in 'issue_search', with: arg1 end + +When /^I select milestone "(.*?)"$/ do |milestone_title| + select milestone_title, from: "milestone_id" +end + +Then /^I should see selected milestone with title "(.*?)"$/ do |milestone_title| + issues_milestone_selector = "#issue_milestone_id_chzn/a" + wait_until{ + page.has_content?("Details") + } + page.find(issues_milestone_selector).should have_content(milestone_title) +end From b994a65fc318a91458fa8bb219e7ce07bd893eb5 Mon Sep 17 00:00:00 2001 From: randx Date: Fri, 7 Sep 2012 15:36:40 +0300 Subject: [PATCH 198/357] change gitolite backend behaviour to prevent error when config directory removed --- lib/gitlab/backend/gitolite.rb | 2 +- lib/gitlab/backend/gitolite_config.rb | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/gitlab/backend/gitolite.rb b/lib/gitlab/backend/gitolite.rb index bc9e1f1d..658182c7 100644 --- a/lib/gitlab/backend/gitolite.rb +++ b/lib/gitlab/backend/gitolite.rb @@ -5,7 +5,7 @@ module Gitlab class AccessDenied < StandardError; end def config - @config ||= Gitlab::GitoliteConfig.new + Gitlab::GitoliteConfig.new end def set_key key_id, key_content, projects diff --git a/lib/gitlab/backend/gitolite_config.rb b/lib/gitlab/backend/gitolite_config.rb index 5cf49121..47870edc 100644 --- a/lib/gitlab/backend/gitolite_config.rb +++ b/lib/gitlab/backend/gitolite_config.rb @@ -4,8 +4,10 @@ require 'fileutils' module Gitlab class GitoliteConfig - def config_tmp_dir - @config_tmp_dir ||= File.join(Rails.root, 'tmp',"gitlabhq-gitolite-#{Time.now.to_i}") + attr_reader :config_tmp_dir + + def reset_config_tmp_dir + @config_tmp_dir = File.join(Rails.root, 'tmp',"gitlabhq-gitolite-#{Time.now.to_i}") end def apply @@ -13,9 +15,11 @@ module Gitlab File.open(File.join(Rails.root, 'tmp', "gitlabhq-gitolite.lock"), "w+") do |f| begin f.flock(File::LOCK_EX) + reset_config_tmp_dir pull yield(self) push + FileUtils.rm_rf(config_tmp_dir) ensure f.flock(File::LOCK_UN) end @@ -160,8 +164,6 @@ module Gitlab `git commit -am "GitLab"` `git push` Dir.chdir(Rails.root) - - FileUtils.rm_rf(config_tmp_dir) end end end From 26552051b7af709ad21497747405714006a14b68 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Fri, 7 Sep 2012 16:35:59 +0300 Subject: [PATCH 199/357] Pre-selected milestone implemented --- app/assets/javascripts/issues.js | 21 +++++++++++++++++++ app/controllers/issues_controller.rb | 1 + app/views/issues/index.html.haml | 2 +- .../project/project_issues_steps.rb | 1 + 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/issues.js b/app/assets/javascripts/issues.js index aae818de..7f5694d0 100644 --- a/app/assets/javascripts/issues.js +++ b/app/assets/javascripts/issues.js @@ -80,6 +80,10 @@ function issuesPage(){ $(this).closest("form").submit(); }); + $("#new_issue_link").click(function(){ + updateNewIssueURL(); + }); + $('body').on('ajax:success', '.close_issue, .reopen_issue, #new_issue', function(){ var t = $(this), totalIssues, @@ -126,3 +130,20 @@ function issuesCheckChanged() { $('.issues_filters').show(); } } + +function updateNewIssueURL(){ + var new_issue_link = $("#new_issue_link"); + var milestone_id = $("#milestone_id").val(); + var assignee_id = $("#assignee_id").val(); + var new_href = ""; + if(milestone_id){ + new_href = "milestone_id=" + milestone_id + "&"; + } + if(assignee_id){ + new_href = new_href + "assignee_id=" + assignee_id; + } + if(new_href.length){ + new_href = new_issue_link.attr("href") + "?" + new_href; + new_issue_link.attr("href", new_href); + } +}; diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index a47b3843..b98c0b01 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -38,6 +38,7 @@ class IssuesController < ApplicationController def new @issue = @project.issues.new + @issue.milestone_id = params[:milestone_id] if params[:milestone_id].present? respond_with(@issue) end diff --git a/app/views/issues/index.html.haml b/app/views/issues/index.html.haml index 010b8856..bc5c86e6 100644 --- a/app/views/issues/index.html.haml +++ b/app/views/issues/index.html.haml @@ -6,7 +6,7 @@ .right .span5 - if can? current_user, :write_issue, @project - = link_to new_project_issue_path(@project), class: "right btn", title: "New Issue", remote: true do + = link_to new_project_issue_path(@project), class: "right btn", title: "New Issue", remote: true, id: "new_issue_link" do %i.icon-plus New Issue = form_tag search_project_issues_path(@project), method: :get, remote: true, id: "issue_search_form", class: :right do diff --git a/features/step_definitions/project/project_issues_steps.rb b/features/step_definitions/project/project_issues_steps.rb index ecf0892f..e4c169ec 100644 --- a/features/step_definitions/project/project_issues_steps.rb +++ b/features/step_definitions/project/project_issues_steps.rb @@ -57,6 +57,7 @@ Given /^I fill in issue search with "(.*?)"$/ do |arg1| end When /^I select milestone "(.*?)"$/ do |milestone_title| + #puts page.body select milestone_title, from: "milestone_id" end From c818c93aa7f8102dfd449bf2f1e82b36578e3ac7 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Fri, 7 Sep 2012 16:51:37 +0300 Subject: [PATCH 200/357] Cucumber scenario on pre-selected assignee added --- features/projects/issues/issues.feature | 9 ++++++++- .../project/project_issues_steps.rb | 19 +++++++++++++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/features/projects/issues/issues.feature b/features/projects/issues/issues.feature index f0d9b610..2cfda136 100644 --- a/features/projects/issues/issues.feature +++ b/features/projects/issues/issues.feature @@ -66,7 +66,6 @@ Feature: Issues And I should see "Release 0.3" in issues @javascript - @current Scenario: I create Issue with pre-selected milestone Given project "Shop" has milestone "v2.2" And project "Shop" has milestone "v3.0" @@ -74,3 +73,11 @@ Feature: Issues When I select milestone "v3.0" And I click link "New Issue" Then I should see selected milestone with title "v3.0" + + @javascript + @current + Scenario: I create Issue with pre-selected assignee + When I select first assignee from "Shop" project + And I click link "New Issue" + Then I should see first assignee from "Shop" as selected assignee + diff --git a/features/step_definitions/project/project_issues_steps.rb b/features/step_definitions/project/project_issues_steps.rb index e4c169ec..d78da53c 100644 --- a/features/step_definitions/project/project_issues_steps.rb +++ b/features/step_definitions/project/project_issues_steps.rb @@ -57,14 +57,25 @@ Given /^I fill in issue search with "(.*?)"$/ do |arg1| end When /^I select milestone "(.*?)"$/ do |milestone_title| - #puts page.body select milestone_title, from: "milestone_id" end Then /^I should see selected milestone with title "(.*?)"$/ do |milestone_title| issues_milestone_selector = "#issue_milestone_id_chzn/a" - wait_until{ - page.has_content?("Details") - } + wait_until{ page.has_content?("Details") } page.find(issues_milestone_selector).should have_content(milestone_title) end + +When /^I select first assignee from "(.*?)" project$/ do |project_name| + project = Project.find_by_name project_name + first_assignee = project.users.first + select first_assignee.name, from: "assignee_id" +end + +Then /^I should see first assignee from "(.*?)" as selected assignee$/ do |project_name| + issues_assignee_selector = "#issue_assignee_id_chzn/a" + wait_until{ page.has_content?("Details") } + project = Project.find_by_name project_name + assignee_name = project.users.first.name + page.find(issues_assignee_selector).should have_content(assignee_name) +end From b462b0c6ebfea32ba816ee8c30bc5aa4e5049e91 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Fri, 7 Sep 2012 16:52:48 +0300 Subject: [PATCH 201/357] Pre-selected assignee implemented --- app/controllers/issues_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index b98c0b01..05f5abb8 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -39,6 +39,7 @@ class IssuesController < ApplicationController def new @issue = @project.issues.new @issue.milestone_id = params[:milestone_id] if params[:milestone_id].present? + @issue.assignee_id = params[:assignee_id] if params[:assignee_id].present? respond_with(@issue) end From 320250cd7be1bbd6c2140344b8d3270728a84946 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Fri, 7 Sep 2012 17:03:38 +0300 Subject: [PATCH 202/357] Cucumber tag removed --- features/projects/issues/issues.feature | 1 - 1 file changed, 1 deletion(-) diff --git a/features/projects/issues/issues.feature b/features/projects/issues/issues.feature index 2cfda136..b2301b3f 100644 --- a/features/projects/issues/issues.feature +++ b/features/projects/issues/issues.feature @@ -75,7 +75,6 @@ Feature: Issues Then I should see selected milestone with title "v3.0" @javascript - @current Scenario: I create Issue with pre-selected assignee When I select first assignee from "Shop" project And I click link "New Issue" From 048117c05dd73acc7d6daff623ee5fdfe85a5d25 Mon Sep 17 00:00:00 2001 From: randx Date: Fri, 7 Sep 2012 19:57:13 +0300 Subject: [PATCH 203/357] projects helper added --- app/helpers/projects_helper.rb | 6 ++++++ app/views/projects/_team.html.haml | 5 +++-- 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 app/helpers/projects_helper.rb diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb new file mode 100644 index 00000000..34dbb06c --- /dev/null +++ b/app/helpers/projects_helper.rb @@ -0,0 +1,6 @@ +module ProjectsHelper + def grouper_project_members(project) + @project.users_projects.sort_by(&:project_access).reverse.group_by(&:project_access) + end +end + diff --git a/app/views/projects/_team.html.haml b/app/views/projects/_team.html.haml index 0ab22984..a0c88b59 100644 --- a/app/views/projects/_team.html.haml +++ b/app/views/projects/_team.html.haml @@ -1,8 +1,9 @@ -- @project.users_projects.group_by(&:project_access).each do |access, members| +- grouper_project_members(@project).each do |access, members| %table %thead %tr - %th.span7= Project.access_options.key(access).pluralize + %th.span7 + = Project.access_options.key(access).pluralize %th %tbody - members.each do |up| From e8f39a0a61c4c91b8a5dc016474b6139a79a52e8 Mon Sep 17 00:00:00 2001 From: randx Date: Fri, 7 Sep 2012 20:43:51 +0300 Subject: [PATCH 204/357] gitolite -> more exceptions --- lib/gitlab/backend/gitolite_config.rb | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/lib/gitlab/backend/gitolite_config.rb b/lib/gitlab/backend/gitolite_config.rb index ff4c9014..61ec8c11 100644 --- a/lib/gitlab/backend/gitolite_config.rb +++ b/lib/gitlab/backend/gitolite_config.rb @@ -4,6 +4,9 @@ require 'fileutils' module Gitlab class GitoliteConfig + class PullError < StandardError; end + class PushError < StandardError; end + attr_reader :config_tmp_dir, :ga_repo, :conf def config_tmp_dir @@ -54,6 +57,14 @@ module Gitlab end end end + rescue PullError => ex + Gitlab::Logger.error("Pull error -> " + ex.message) + raise Gitolite::AccessDenied, ex.message + + rescue PushError => ex + Gitlab::Logger.error("Push error -> " + " " + ex.message) + raise Gitolite::AccessDenied, ex.message + rescue Exception => ex Gitlab::Logger.error(ex.class.name + " " + ex.message) raise Gitolite::AccessDenied.new("gitolite timeout") @@ -171,14 +182,21 @@ module Gitlab def pull tmp_dir Dir.mkdir tmp_dir `git clone #{Gitlab.config.gitolite_admin_uri} #{tmp_dir}/gitolite` + + unless File.exists?(File.join(tmp_dir, 'gitolite', 'conf', 'gitolite.conf')) + raise PullError, "unable to clone gitolite-admin repo" + end end def push tmp_dir Dir.chdir(File.join(tmp_dir, "gitolite")) - `git add -A` - `git commit -am "GitLab"` - `git push` - Dir.chdir(Rails.root) + system('git add -A') + system('git commit -am "GitLab"') + if system('git push') + Dir.chdir(Rails.root) + else + raise PushError, "unable to push gitolite-admin repo" + end end end end From 367e17cc84bd432117f283d2e858a29d033e979f Mon Sep 17 00:00:00 2001 From: randx Date: Fri, 7 Sep 2012 20:47:52 +0300 Subject: [PATCH 205/357] 5xx error status code for gitolite & encoding error --- app/controllers/application_controller.rb | 4 ++-- app/views/errors/encoding.html.haml | 8 +++----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 2fe2a974..a0040298 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -11,11 +11,11 @@ class ApplicationController < ActionController::Base helper_method :abilities, :can? rescue_from Gitlab::Gitolite::AccessDenied do |exception| - render "errors/gitolite", layout: "error" + render "errors/gitolite", layout: "error", status: 500 end rescue_from Encoding::CompatibilityError do |exception| - render "errors/encoding", layout: "error", status: 404 + render "errors/encoding", layout: "error", status: 500 end rescue_from ActiveRecord::RecordNotFound do |exception| diff --git a/app/views/errors/encoding.html.haml b/app/views/errors/encoding.html.haml index 4662437f..d7b5e68e 100644 --- a/app/views/errors/encoding.html.haml +++ b/app/views/errors/encoding.html.haml @@ -1,5 +1,3 @@ -.alert-message.block-message.error - %h3 Encoding Error - %hr - %p - Page can't be loaded because of an encoding error. +%h1 Encoding Error +%hr +%p Page can't be loaded because of an encoding error. From 1b83af6eed3a4069a8f66a6785632e6f950e900f Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Fri, 7 Sep 2012 20:59:12 +0300 Subject: [PATCH 206/357] IssueController#new refactored --- app/assets/javascripts/issues.js | 4 ++-- app/controllers/issues_controller.rb | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/app/assets/javascripts/issues.js b/app/assets/javascripts/issues.js index 7f5694d0..148dc7b9 100644 --- a/app/assets/javascripts/issues.js +++ b/app/assets/javascripts/issues.js @@ -137,10 +137,10 @@ function updateNewIssueURL(){ var assignee_id = $("#assignee_id").val(); var new_href = ""; if(milestone_id){ - new_href = "milestone_id=" + milestone_id + "&"; + new_href = "issue[milestone_id]=" + milestone_id + "&"; } if(assignee_id){ - new_href = new_href + "assignee_id=" + assignee_id; + new_href = new_href + "issue[assignee_id]=" + assignee_id; } if(new_href.length){ new_href = new_issue_link.attr("href") + "?" + new_href; diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 05f5abb8..3d305238 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -37,9 +37,7 @@ class IssuesController < ApplicationController end def new - @issue = @project.issues.new - @issue.milestone_id = params[:milestone_id] if params[:milestone_id].present? - @issue.assignee_id = params[:assignee_id] if params[:assignee_id].present? + @issue = @project.issues.new(params[:issue]) respond_with(@issue) end From 5348ee62787a12855d8d917580fdcc8900910386 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Fri, 7 Sep 2012 22:14:17 +0200 Subject: [PATCH 207/357] Fix Ruby anti-pattern in Markdown --- lib/gitlab/markdown.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb index 17f865bb..afb61364 100644 --- a/lib/gitlab/markdown.rb +++ b/lib/gitlab/markdown.rb @@ -80,7 +80,7 @@ module Gitlab # # Returns parsed text def parse(text) - text = text.gsub(REFERENCE_PATTERN) do |match| + text.gsub!(REFERENCE_PATTERN) do |match| prefix = $1 || '' reference = $2 identifier = $3 || $4 || $5 @@ -93,7 +93,7 @@ module Gitlab end end - text = text.gsub(EMOJI_PATTERN) do |match| + text.gsub!(EMOJI_PATTERN) do |match| if valid_emoji?($2) image_tag("emoji/#{$2}.png", size: "20x20", class: 'emoji', title: $1, alt: $1) else From 130520fa5e9a09c53d3162ce82576f3b3544e158 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Sat, 8 Sep 2012 01:06:17 +0200 Subject: [PATCH 208/357] Reorder blocks in Markdown help --- app/views/help/markdown.html.haml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/app/views/help/markdown.html.haml b/app/views/help/markdown.html.haml index 2086b08c..e2f8e709 100644 --- a/app/views/help/markdown.html.haml +++ b/app/views/help/markdown.html.haml @@ -20,6 +20,15 @@ %li milestones %li wiki pages + .span4 + .alert.alert-info + %p + If you're not already familiar with Markdown, you should spend 15 minutes and go over the excellent + %strong= link_to "Markdown Syntax Guide", "http://daringfireball.net/projects/markdown/syntax" + at Daring Fireball. + +.row + .span8 %h3 Differences from traditional Markdown %h4 Newlines @@ -93,12 +102,5 @@ %p For example in your #{link_to @project.name, project_path(@project)} project, writing: %pre= "This is related to ##{issue.id}. @#{current_user.name} is working on solving it." %p becomes: - %pre= gfm "This is related to ##{issue.id}. @#{current_user.name} is working on solving it." + = markdown "This is related to ##{issue.id}. @#{current_user.name} is working on solving it." - @project = nil # Prevent this from bubbling up to page title - - .span4.right - .alert.alert-info - %p - If you're not already familiar with Markdown, you should spend 15 minutes and go over the excellent - %strong= link_to "Markdown Syntax Guide", "http://daringfireball.net/projects/markdown/syntax" - at Daring Fireball. From f4a90bc9f3ad4e6e9938736e3815eb84ec299af8 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Sat, 8 Sep 2012 01:08:07 +0200 Subject: [PATCH 209/357] Add emoji docs to Markdown help --- app/views/help/markdown.html.haml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/app/views/help/markdown.html.haml b/app/views/help/markdown.html.haml index e2f8e709..aa608ed6 100644 --- a/app/views/help/markdown.html.haml +++ b/app/views/help/markdown.html.haml @@ -71,6 +71,29 @@ %p becomes = markdown %Q{```ruby\nrequire 'redcarpet'\nmarkdown = Redcarpet.new("Hello World!")\nputs markdown.to_html\n```} + %h4 Emoji + +.row + .span8 + :ruby + puts markdown %Q{Sometimes you want to be :cool: and add some :sparkles: to your :speech_balloon:. Well we have a :gift: for you: + + :exclamation: You can use emoji anywhere GFM is supported. :sunglasses: + + You can use it to point out a :bug: or warn about :monkey:patches. And if someone improves your really :snail: code, send them a :bouquet: or some :candy:. People will :heart: you for that. + + If you are :new: to this, don't be :fearful:. You can easily join the emoji :circus_tent:. All you need to do is to :book: up on the supported codes. + } + + .span4 + .alert.alert-info + %p + Consult the + %strong= link_to "Emoji Cheat Sheet", "http://www.emoji-cheat-sheet.com/" + for a list of all supported emoji codes. + +.row + .span8 %h4 Special GitLab references %p From 9a4c22d395b96e27f9a1c5ec90b161ddf5815cdd Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Sat, 8 Sep 2012 01:11:32 +0200 Subject: [PATCH 210/357] Remove unnecessary check in Markdown helper --- app/helpers/gitlab_markdown_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/gitlab_markdown_helper.rb b/app/helpers/gitlab_markdown_helper.rb index ca2cb01f..e97e46f5 100644 --- a/app/helpers/gitlab_markdown_helper.rb +++ b/app/helpers/gitlab_markdown_helper.rb @@ -27,7 +27,7 @@ module GitlabMarkdownHelper filter_html: true, with_toc_data: true, hard_wrap: true) - @markdown ||= Redcarpet::Markdown.new(gitlab_renderer, + @markdown = Redcarpet::Markdown.new(gitlab_renderer, # see https://github.com/vmg/redcarpet#and-its-like-really-simple-to-use no_intra_emphasis: true, tables: true, From ce3fb949398786c9cc9c9d7803b72cb57f661279 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Sat, 8 Sep 2012 00:49:17 +0200 Subject: [PATCH 211/357] Fix bug where parsing of emoji was unnecessarily dependent on @project being set --- lib/gitlab/markdown.rb | 7 +++++-- spec/helpers/gitlab_markdown_helper_spec.rb | 5 +++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb index afb61364..f9125e03 100644 --- a/lib/gitlab/markdown.rb +++ b/lib/gitlab/markdown.rb @@ -47,7 +47,6 @@ module Gitlab # Note: reference links will only be generated if @project is set def gfm(text, html_options = {}) return text if text.nil? - return text if @project.nil? @html_options = html_options @@ -78,8 +77,11 @@ module Gitlab # # text - Text to parse # + # Note: reference links will only be generated if @project is set + # # Returns parsed text def parse(text) + # parse reference links text.gsub!(REFERENCE_PATTERN) do |match| prefix = $1 || '' reference = $2 @@ -91,8 +93,9 @@ module Gitlab else match end - end + end if @project + # parse emoji text.gsub!(EMOJI_PATTERN) do |match| if valid_emoji?($2) image_tag("emoji/#{$2}.png", size: "20x20", class: 'emoji', title: $1, alt: $1) diff --git a/spec/helpers/gitlab_markdown_helper_spec.rb b/spec/helpers/gitlab_markdown_helper_spec.rb index 3e7a02c6..4dd3802a 100644 --- a/spec/helpers/gitlab_markdown_helper_spec.rb +++ b/spec/helpers/gitlab_markdown_helper_spec.rb @@ -247,6 +247,11 @@ describe GitlabMarkdownHelper do it "ignores invalid emoji" do gfm(":invalid-emoji:").should_not match(/ Date: Sat, 8 Sep 2012 01:58:12 +0200 Subject: [PATCH 212/357] Prevent gfm() to leak changes to the string supplied through the _text_ argument --- lib/gitlab/markdown.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb index f9125e03..4fc0c392 100644 --- a/lib/gitlab/markdown.rb +++ b/lib/gitlab/markdown.rb @@ -48,6 +48,9 @@ module Gitlab def gfm(text, html_options = {}) return text if text.nil? + # prevents the string supplied through the _text_ argument to be altered + text = text.dup + @html_options = html_options # Extract pre blocks so they are not altered From 2e76342d72fac88e98820f038dce8fa01952fefb Mon Sep 17 00:00:00 2001 From: miks Date: Sat, 8 Sep 2012 12:37:23 +0300 Subject: [PATCH 213/357] typo fixed --- app/roles/team.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/roles/team.rb b/app/roles/team.rb index d8798c50..8aef405a 100644 --- a/app/roles/team.rb +++ b/app/roles/team.rb @@ -45,7 +45,7 @@ module Team end # Delete multiple users from project by user ids - def delete_users_by_ids(users_ids) + def delete_users_ids_from_team(users_ids) UsersProject.bulk_delete(self, users_ids) self.update_repository end From cc7c6d53966e7501da0af87481b7e7ef2b2025c2 Mon Sep 17 00:00:00 2001 From: Valeriy Sizov Date: Sat, 8 Sep 2012 13:35:00 +0300 Subject: [PATCH 214/357] New project form: spec for autocomplete --- spec/requests/projects_spec.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/spec/requests/projects_spec.rb b/spec/requests/projects_spec.rb index 63f8a696..92e89a16 100644 --- a/spec/requests/projects_spec.rb +++ b/spec/requests/projects_spec.rb @@ -3,6 +3,16 @@ require 'spec_helper' describe "Projects" do before { login_as :user } + describe 'GET /project/new' do + it "should work autocomplete", :js => true do + visit new_project_path + + fill_in 'project_name', with: 'Awesome' + find("#project_path").value.should == 'awesome' + find("#project_code").value.should == 'awesome' + end + end + describe "GET /projects/show" do before do @project = Factory :project, owner: @user From 06c1a8a9ae34e2a4fe7b4f4edb58bacfaf6df5c9 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Sat, 8 Sep 2012 02:08:35 +0200 Subject: [PATCH 215/357] Make notes recognize downvotes --- app/models/note.rb | 6 ++++++ spec/models/note_spec.rb | 23 +++++++++++++++-------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/app/models/note.rb b/app/models/note.rb index d8494edd..4c46c7df 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -105,6 +105,12 @@ class Note < ActiveRecord::Base def upvote? note.start_with?('+1') || note.start_with?(':+1:') end + + # Returns true if this is a downvote note, + # otherwise false is returned + def downvote? + note.start_with?('-1') || note.start_with?(':-1:') + end end # == Schema Information # diff --git a/spec/models/note_spec.rb b/spec/models/note_spec.rb index dddfd34c..7809953f 100644 --- a/spec/models/note_spec.rb +++ b/spec/models/note_spec.rb @@ -24,6 +24,13 @@ describe Note do it "recognizes a neutral note" do note = Factory(:note, note: "This is not a +1 note") note.should_not be_upvote + note.should_not be_downvote + end + + it "recognizes a neutral emoji note" do + note = build(:note, note: "I would :+1: this, but I don't want to") + note.should_not be_upvote + note.should_not be_downvote end it "recognizes a +1 note" do @@ -31,19 +38,19 @@ describe Note do note.should be_upvote end - it "recognizes a -1 note as no vote" do - note = Factory(:note, note: "-1 for this") - note.should_not be_upvote - end - it "recognizes a +1 emoji as a vote" do note = build(:note, note: ":+1: for this") note.should be_upvote end - it "recognizes a neutral emoji note" do - note = build(:note, note: "I would :+1: this, but I don't want to") - note.should_not be_upvote + it "recognizes a -1 note" do + note = Factory(:note, note: "-1 for this") + note.should be_downvote + end + + it "recognizes a -1 emoji as a vote" do + note = build(:note, note: ":-1: for this") + note.should be_downvote end end From a2a0060034171e22962129d53cc74fb7bde54476 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Sat, 8 Sep 2012 02:23:49 +0200 Subject: [PATCH 216/357] Rename Upvote role to Votes --- app/models/issue.rb | 2 +- app/models/merge_request.rb | 2 +- app/roles/{upvote.rb => votes.rb} | 2 +- spec/models/issue_spec.rb | 2 +- spec/models/merge_request_spec.rb | 2 +- spec/roles/{upvote_spec.rb => votes_spec.rb} | 0 6 files changed, 5 insertions(+), 5 deletions(-) rename app/roles/{upvote.rb => votes.rb} (88%) rename spec/roles/{upvote_spec.rb => votes_spec.rb} (100%) diff --git a/app/models/issue.rb b/app/models/issue.rb index 6409eeba..96a54907 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -1,6 +1,6 @@ class Issue < ActiveRecord::Base include IssueCommonality - include Upvote + include Votes acts_as_taggable_on :labels diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 542817b0..3376e31b 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -2,7 +2,7 @@ require File.join(Rails.root, "app/models/commit") class MergeRequest < ActiveRecord::Base include IssueCommonality - include Upvote + include Votes BROKEN_DIFF = "--broken-diff" diff --git a/app/roles/upvote.rb b/app/roles/votes.rb similarity index 88% rename from app/roles/upvote.rb rename to app/roles/votes.rb index 7efa6f20..29409292 100644 --- a/app/roles/upvote.rb +++ b/app/roles/votes.rb @@ -1,4 +1,4 @@ -module Upvote +module Votes # Return the number of +1 comments (upvotes) def upvotes notes.select(&:upvote?).size diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb index ca6307e7..34192da9 100644 --- a/spec/models/issue_spec.rb +++ b/spec/models/issue_spec.rb @@ -12,7 +12,7 @@ describe Issue do describe 'modules' do it { should include_module(IssueCommonality) } - it { should include_module(Upvote) } + it { should include_module(Votes) } end subject { Factory.create(:issue) } diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index d1253b35..523e823d 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -8,6 +8,6 @@ describe MergeRequest do describe 'modules' do it { should include_module(IssueCommonality) } - it { should include_module(Upvote) } + it { should include_module(Votes) } end end diff --git a/spec/roles/upvote_spec.rb b/spec/roles/votes_spec.rb similarity index 100% rename from spec/roles/upvote_spec.rb rename to spec/roles/votes_spec.rb From 2e0d5c2250ad34273a0ad6e207f2717b9a98bd86 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Sat, 8 Sep 2012 02:30:47 +0200 Subject: [PATCH 217/357] Add downvotes --- app/roles/votes.rb | 5 ++++ spec/roles/votes_spec.rb | 60 ++++++++++++++++++++++++++++------------ 2 files changed, 48 insertions(+), 17 deletions(-) diff --git a/app/roles/votes.rb b/app/roles/votes.rb index 29409292..fb132a33 100644 --- a/app/roles/votes.rb +++ b/app/roles/votes.rb @@ -3,4 +3,9 @@ module Votes def upvotes notes.select(&:upvote?).size end + + # Return the number of -1 comments (downvotes) + def downvotes + notes.select(&:downvote?).size + end end diff --git a/spec/roles/votes_spec.rb b/spec/roles/votes_spec.rb index 24288ada..43817999 100644 --- a/spec/roles/votes_spec.rb +++ b/spec/roles/votes_spec.rb @@ -1,27 +1,53 @@ require 'spec_helper' -describe Issue, "Upvote" do +describe Issue do let(:issue) { create(:issue) } - it "with no notes has a 0/0 score" do - issue.upvotes.should == 0 + describe "#upvotes" do + it "with no notes has a 0/0 score" do + issue.upvotes.should == 0 + end + + it "should recognize non-+1 notes" do + issue.notes << create(:note, note: "No +1 here") + issue.should have(1).note + issue.notes.first.upvote?.should be_false + issue.upvotes.should == 0 + end + + it "should recognize a single +1 note" do + issue.notes << create(:note, note: "+1 This is awesome") + issue.upvotes.should == 1 + end + + it "should recognize multiple +1 notes" do + issue.notes << create(:note, note: "+1 This is awesome") + issue.notes << create(:note, note: "+1 I want this") + issue.upvotes.should == 2 + end end - it "should recognize non-+1 notes" do - issue.notes << create(:note, note: "No +1 here") - issue.should have(1).note - issue.notes.first.upvote?.should be_false - issue.upvotes.should == 0 - end + describe "#downvotes" do + it "with no notes has a 0/0 score" do + issue.downvotes.should == 0 + end - it "should recognize a single +1 note" do - issue.notes << create(:note, note: "+1 This is awesome") - issue.upvotes.should == 1 - end + it "should recognize non--1 notes" do + issue.notes << create(:note, note: "Almost got a -1") + issue.should have(1).note + issue.notes.first.downvote?.should be_false + issue.downvotes.should == 0 + end - it "should recognize multiple +1 notes" do - issue.notes << create(:note, note: "+1 This is awesome") - issue.notes << create(:note, note: "+1 I want this") - issue.upvotes.should == 2 + it "should recognize a single -1 note" do + issue.notes << create(:note, note: "-1 This is bad") + issue.downvotes.should == 1 + end + + it "should recognize multiple -1 notes" do + issue.notes << create(:note, note: "-1 This is bad") + issue.notes << create(:note, note: "-1 Away with this") + issue.downvotes.should == 2 + end end end From 7b0c7ae52c299584e810fc4b1a33893ebdbb8ac3 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Sat, 8 Sep 2012 02:37:29 +0200 Subject: [PATCH 218/357] Add votes_count --- app/roles/votes.rb | 5 +++++ spec/roles/votes_spec.rb | 29 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/app/roles/votes.rb b/app/roles/votes.rb index fb132a33..3a584d8b 100644 --- a/app/roles/votes.rb +++ b/app/roles/votes.rb @@ -8,4 +8,9 @@ module Votes def downvotes notes.select(&:downvote?).size end + + # Return the total number of votes + def votes_count + upvotes + downvotes + end end diff --git a/spec/roles/votes_spec.rb b/spec/roles/votes_spec.rb index 43817999..5c3548a5 100644 --- a/spec/roles/votes_spec.rb +++ b/spec/roles/votes_spec.rb @@ -50,4 +50,33 @@ describe Issue do issue.downvotes.should == 2 end end + + describe "#votes_count" do + it "with no notes has a 0/0 score" do + issue.votes_count.should == 0 + end + + it "should recognize non notes" do + issue.notes << create(:note, note: "No +1 here") + issue.should have(1).note + issue.votes_count.should == 0 + end + + it "should recognize a single +1 note" do + issue.notes << create(:note, note: "+1 This is awesome") + issue.votes_count.should == 1 + end + + it "should recognize a single -1 note" do + issue.notes << create(:note, note: "-1 This is bad") + issue.votes_count.should == 1 + end + + it "should recognize multiple notes" do + issue.notes << create(:note, note: "+1 This is awesome") + issue.notes << create(:note, note: "-1 This is bad") + issue.notes << create(:note, note: "+1 I want this") + issue.votes_count.should == 3 + end + end end From 1271b4ce66d4251f8f038d8d339fbecbab2d0900 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Sat, 8 Sep 2012 03:30:41 +0200 Subject: [PATCH 219/357] Update display of merge requests and issues to also show downvotes --- app/assets/stylesheets/common.scss | 20 ++++++++++++++----- app/views/issues/_show.html.haml | 2 ++ app/views/issues/show.html.haml | 6 ++++-- .../merge_requests/_merge_request.html.haml | 2 ++ .../merge_requests/show/_mr_title.html.haml | 6 ++++-- 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index aa27a280..d52cb1fc 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -406,13 +406,23 @@ p.time { } } -.upvotes { +.votes { font-size: 14px; font-weight: bold; - color: #468847; - text-align: right; - padding: 4px; - margin: 2px; + padding: 4px 0; + margin: 2px 0; + .upvotes { + display: inline-block; + color: #468847; + padding: 0 4px; + margin: 0 2px; + } + .downvotes { + display: inline-block; + color: #B94A48; + padding: 0 4px; + margin: 0 2px; + } } /* Fix for readme code (stopped it from being yellow) */ diff --git a/app/views/issues/_show.html.haml b/app/views/issues/_show.html.haml index 8500cd40..e37ea3df 100644 --- a/app/views/issues/_show.html.haml +++ b/app/views/issues/_show.html.haml @@ -36,3 +36,5 @@ - if issue.upvotes > 0 %span.badge.badge-success= "+#{issue.upvotes}" + - if issue.downvotes > 0 + %span.badge.badge-important= "-#{issue.downvotes}" diff --git a/app/views/issues/show.html.haml b/app/views/issues/show.html.haml index dce8cf6a..36af1f49 100644 --- a/app/views/issues/show.html.haml +++ b/app/views/issues/show.html.haml @@ -17,8 +17,10 @@ Edit %br - - if @issue.upvotes > 0 - .upvotes#upvotes= "+#{pluralize @issue.upvotes, 'upvote'}" + .votes#votes + Votes: + .upvotes#upvotes= "#{@issue.upvotes} up" + .downvotes#downvotes= "#{@issue.downvotes} down" .back_link = link_to project_issues_path(@project) do diff --git a/app/views/merge_requests/_merge_request.html.haml b/app/views/merge_requests/_merge_request.html.haml index 74996090..8d0a6dcf 100644 --- a/app/views/merge_requests/_merge_request.html.haml +++ b/app/views/merge_requests/_merge_request.html.haml @@ -25,3 +25,5 @@ ago - if merge_request.upvotes > 0 %span.badge.badge-success= "+#{merge_request.upvotes}" + - if merge_request.downvotes > 0 + %span.badge.badge-important= "-#{merge_request.downvotes}" diff --git a/app/views/merge_requests/show/_mr_title.html.haml b/app/views/merge_requests/show/_mr_title.html.haml index 3ae1050d..f8ab6c19 100644 --- a/app/views/merge_requests/show/_mr_title.html.haml +++ b/app/views/merge_requests/show/_mr_title.html.haml @@ -24,8 +24,10 @@ Edit %br - - if @merge_request.upvotes > 0 - .upvotes#upvotes= "+#{pluralize @merge_request.upvotes, 'upvote'}" + .votes#votes + Votes: + .upvotes#upvotes= "#{@merge_request.upvotes} up" + .downvotes#downvotes= "#{@merge_request.downvotes} down" .back_link From 5ca31aa252d67372d9a90cceb61f16721dca3841 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Sat, 8 Sep 2012 16:00:38 +0200 Subject: [PATCH 220/357] Make issue buttons look more consistent with MRs --- app/views/issues/show.html.haml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/issues/show.html.haml b/app/views/issues/show.html.haml index 36af1f49..12394ac5 100644 --- a/app/views/issues/show.html.haml +++ b/app/views/issues/show.html.haml @@ -8,11 +8,11 @@ %span.right - if can?(current_user, :admin_project, @project) || @issue.author == current_user - if @issue.closed - = link_to 'Reopen', project_issue_path(@project, @issue, issue: {closed: false }, status_only: true), method: :put, class: "btn small" + = link_to 'Reopen', project_issue_path(@project, @issue, issue: {closed: false }, status_only: true), method: :put, class: "btn grouped success" - else - = link_to 'Close', project_issue_path(@project, @issue, issue: {closed: true }, status_only: true), method: :put, class: "btn small", title: "Close Issue" + = link_to 'Close', project_issue_path(@project, @issue, issue: {closed: true }, status_only: true), method: :put, class: "btn grouped danger", title: "Close Issue" - if can?(current_user, :admin_project, @project) || @issue.author == current_user - = link_to edit_project_issue_path(@project, @issue), class: "btn small" do + = link_to edit_project_issue_path(@project, @issue), class: "btn grouped" do %i.icon-edit Edit From 8a3408180ab51effd516de3c8e85d564aa4dfabd Mon Sep 17 00:00:00 2001 From: miks Date: Sat, 8 Sep 2012 17:40:36 +0300 Subject: [PATCH 221/357] move "users" test after project tests --- spec/requests/api/projects_spec.rb | 54 +++++++++++++++--------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index 8c294594..71ed39e7 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -67,33 +67,6 @@ describe Gitlab::API do end end - describe "POST /projects/:id/users" do - it "should add users to project" do - expect { - post api("/projects/#{project.code}/users", user), - user_ids: {"0" => user2.id, "1" => user3.id}, project_access: UsersProject::DEVELOPER - }.to change {project.users_projects.where(:project_access => UsersProject::DEVELOPER).count}.by(2) - end - end - - describe "PUT /projects/:id/users" do - it "should update users to new access role" do - expect { - put api("/projects/#{project.code}/users", user), - user_ids: {"0" => user}, project_access: UsersProject::DEVELOPER - }.to change {project.users_projects.where(:project_access => UsersProject::DEVELOPER).count}.by(1) - end - end - - describe "DELETE /projects/:id/users" do - it "should delete users from project" do - expect { - delete api("/projects/#{project.code}/delete", user), - user_ids: {"0" => users_project.id} - }.to change {project.users_projects.where(:project_access => UsersProject::DEVELOPER).count}.by(-1) - end - end - describe "GET /projects/:id" do it "should return a project by id" do get api("/projects/#{project.id}", user) @@ -134,6 +107,33 @@ describe Gitlab::API do end end + describe "POST /projects/:id/users" do + it "should add users to project" do + expect { + post api("/projects/#{project.code}/users", user), + user_ids: {"0" => user2.id, "1" => user3.id}, project_access: UsersProject::DEVELOPER + }.to change {project.users_projects.where(:project_access => UsersProject::DEVELOPER).count}.by(2) + end + end + + describe "PUT /projects/:id/users" do + it "should update users to new access role" do + expect { + put api("/projects/#{project.code}/users", user), + user_ids: {"0" => user}, project_access: UsersProject::DEVELOPER + }.to change {project.users_projects.where(:project_access => UsersProject::DEVELOPER).count}.by(1) + end + end + + describe "DELETE /projects/:id/users" do + it "should delete users from project" do + expect { + delete api("/projects/#{project.code}/users", user), + user_ids: {"0" => users_project.id} + }.to change {project.users_projects.where(:project_access => UsersProject::DEVELOPER).count}.by(-1) + end + end + describe "GET /projects/:id/repository/tags" do it "should return an array of project tags" do get api("/projects/#{project.code}/repository/tags", user) From a5164ea2ed4e809cb4af7a070652ef2a6b19fbf3 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Sat, 8 Sep 2012 16:44:56 +0200 Subject: [PATCH 222/357] Show votes as a bar --- app/assets/stylesheets/common.scss | 41 +++++++++++++++---- app/views/issues/_show.html.haml | 13 ++++-- app/views/issues/show.html.haml | 15 ++++--- .../merge_requests/_merge_request.html.haml | 13 ++++-- .../merge_requests/show/_mr_title.html.haml | 15 ++++--- 5 files changed, 70 insertions(+), 27 deletions(-) diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index d52cb1fc..829bece3 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -407,21 +407,46 @@ p.time { } .votes { - font-size: 14px; - font-weight: bold; - padding: 4px 0; - margin: 2px 0; + font-size: 13px; + line-height: 15px; + .progress { + height: 4px; + margin: 0; + .bar { + float: left; + height: 100%; + } + .bar-success { + background-color: #468847; + @include bg-gradient(#62C462, #51A351); + } + .bar-danger { + background-color: #B94A48; + @include bg-gradient(#EE5F5B, #BD362F); + } + } .upvotes { display: inline-block; color: #468847; - padding: 0 4px; - margin: 0 2px; } .downvotes { display: inline-block; color: #B94A48; - padding: 0 4px; - margin: 0 2px; + } +} +.votes-block { + margin: 14px 6px 6px 0; + .downvotes { + float: right; + } +} +.votes-inline { + display: inline-block; + margin: 0 8px; + .progress { + display: inline-block; + padding: 0 0 2px; + width: 45px; } } diff --git a/app/views/issues/_show.html.haml b/app/views/issues/_show.html.haml index e37ea3df..db394873 100644 --- a/app/views/issues/_show.html.haml +++ b/app/views/issues/_show.html.haml @@ -34,7 +34,12 @@ - else   - - if issue.upvotes > 0 - %span.badge.badge-success= "+#{issue.upvotes}" - - if issue.downvotes > 0 - %span.badge.badge-important= "-#{issue.downvotes}" + - if issue.votes_count > 0 + .votes.votes-inline + .upvotes= issue.upvotes + .progress + - up_percent = 100.0/issue.votes_count*issue.upvotes + - down_percent = 100.0-up_percent + .bar.bar-success{style: "width: #{up_percent}%;"} + .bar.bar-danger{style: "width: #{down_percent}%;"} + .downvotes= issue.downvotes diff --git a/app/views/issues/show.html.haml b/app/views/issues/show.html.haml index 12394ac5..1ec03951 100644 --- a/app/views/issues/show.html.haml +++ b/app/views/issues/show.html.haml @@ -16,16 +16,21 @@ %i.icon-edit Edit - %br - .votes#votes - Votes: - .upvotes#upvotes= "#{@issue.upvotes} up" - .downvotes#downvotes= "#{@issue.downvotes} down" +.right + .span3.votes.votes-block#votes + .progress + - up_percent = 100.0/@issue.votes_count*@issue.upvotes + - down_percent = 100.0-up_percent + .bar.bar-success{style: "width: #{up_percent}%;"} + .bar.bar-danger{style: "width: #{down_percent}%;"} + .upvotes= "#{@issue.upvotes} up" + .downvotes= "#{@issue.downvotes} down" .back_link = link_to project_issues_path(@project) do ← To issues list + .main_box .top_box_content %h4 diff --git a/app/views/merge_requests/_merge_request.html.haml b/app/views/merge_requests/_merge_request.html.haml index 8d0a6dcf..08420fd2 100644 --- a/app/views/merge_requests/_merge_request.html.haml +++ b/app/views/merge_requests/_merge_request.html.haml @@ -23,7 +23,12 @@ authored by #{merge_request.author_name} = time_ago_in_words(merge_request.created_at) ago - - if merge_request.upvotes > 0 - %span.badge.badge-success= "+#{merge_request.upvotes}" - - if merge_request.downvotes > 0 - %span.badge.badge-important= "-#{merge_request.downvotes}" + - if merge_request.votes_count > 0 + .votes.votes-inline + .upvotes= merge_request.upvotes + .progress + - up_percent = 100.0/merge_request.votes_count*merge_request.upvotes + - down_percent = 100.0-up_percent + .bar.bar-success{style: "width: #{up_percent}%;"} + .bar.bar-danger{style: "width: #{down_percent}%;"} + .downvotes= merge_request.downvotes diff --git a/app/views/merge_requests/show/_mr_title.html.haml b/app/views/merge_requests/show/_mr_title.html.haml index f8ab6c19..c0ad4be5 100644 --- a/app/views/merge_requests/show/_mr_title.html.haml +++ b/app/views/merge_requests/show/_mr_title.html.haml @@ -23,12 +23,15 @@ %i.icon-edit Edit - %br - .votes#votes - Votes: - .upvotes#upvotes= "#{@merge_request.upvotes} up" - .downvotes#downvotes= "#{@merge_request.downvotes} down" - +.right + .span3.votes.votes-block#votes + .progress + - up_percent = 100.0/@merge_request.votes_count*@merge_request.upvotes + - down_percent = 100.0-up_percent + .bar.bar-success{style: "width: #{up_percent}%;"} + .bar.bar-danger{style: "width: #{down_percent}%;"} + .upvotes= "#{@merge_request.upvotes} up" + .downvotes= "#{@merge_request.downvotes} down" .back_link = link_to project_merge_requests_path(@project) do From 0d1009af85c1ed6936a568e9bab9e4da28e69a30 Mon Sep 17 00:00:00 2001 From: miks Date: Sat, 8 Sep 2012 17:51:28 +0300 Subject: [PATCH 223/357] "users" GET test added --- spec/requests/api/projects_spec.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index 71ed39e7..e224982a 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -107,6 +107,18 @@ describe Gitlab::API do end end + describe "GET /projects/:id/users" do + it "should return project users" do + get api("/projects/#{project.code}/users", user) + + response.status.should == 200 + + json_response.should be_an Array + json_response.count.should == 1 + json_response.first['user']['id'].should == user.id + end + end + describe "POST /projects/:id/users" do it "should add users to project" do expect { From 499ff8b441b517902a0daf79600a59cc1830730e Mon Sep 17 00:00:00 2001 From: miks Date: Sat, 8 Sep 2012 19:39:10 +0300 Subject: [PATCH 224/357] fix failing tests --- spec/requests/api/projects_spec.rb | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index e224982a..439aecce 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -8,7 +8,8 @@ describe Gitlab::API do let(:user3) { Factory.create(:user) } let!(:project) { Factory :project, owner: user } let!(:snippet) { Factory :snippet, author: user, project: project, title: 'example' } - let!(:users_project) { Factory :users_project, user: user, project: project } + let!(:users_project) { Factory :users_project, user: user, project: project, project_access: UsersProject::MASTER } + let!(:users_project2) { Factory :users_project, user: user3, project: project, project_access: UsersProject::DEVELOPER } before { project.add_access(user, :read) } describe "GET /projects" do @@ -114,7 +115,7 @@ describe Gitlab::API do response.status.should == 200 json_response.should be_an Array - json_response.count.should == 1 + json_response.count.should == 2 json_response.first['user']['id'].should == user.id end end @@ -123,8 +124,8 @@ describe Gitlab::API do it "should add users to project" do expect { post api("/projects/#{project.code}/users", user), - user_ids: {"0" => user2.id, "1" => user3.id}, project_access: UsersProject::DEVELOPER - }.to change {project.users_projects.where(:project_access => UsersProject::DEVELOPER).count}.by(2) + user_ids: {"0" => user2.id}, project_access: UsersProject::DEVELOPER + }.to change {project.users_projects.where(:project_access => UsersProject::DEVELOPER).count}.by(1) end end @@ -132,8 +133,8 @@ describe Gitlab::API do it "should update users to new access role" do expect { put api("/projects/#{project.code}/users", user), - user_ids: {"0" => user}, project_access: UsersProject::DEVELOPER - }.to change {project.users_projects.where(:project_access => UsersProject::DEVELOPER).count}.by(1) + user_ids: {"0" => user3.id}, project_access: UsersProject::MASTER + }.to change {project.users_projects.where(:project_access => UsersProject::MASTER).count}.by(1) end end @@ -141,8 +142,8 @@ describe Gitlab::API do it "should delete users from project" do expect { delete api("/projects/#{project.code}/users", user), - user_ids: {"0" => users_project.id} - }.to change {project.users_projects.where(:project_access => UsersProject::DEVELOPER).count}.by(-1) + user_ids: {"0" => user3.id} + }.to change {project.users_projects.count}.by(-1) end end From 27e443650746ddb7bf63d9a34d4afaa15350521d Mon Sep 17 00:00:00 2001 From: miks Date: Sat, 8 Sep 2012 20:01:08 +0300 Subject: [PATCH 225/357] Return empty body --- lib/api/projects.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 6e445b2a..7da83429 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -75,6 +75,7 @@ module Gitlab # POST /projects/:id/users post ":id/users" do user_project.add_users_ids_to_team(params[:user_ids].values, params[:project_access]) + nil end # Update users to specified access level @@ -87,6 +88,7 @@ module Gitlab # PUT /projects/:id/add_users put ":id/users" do user_project.update_users_ids_to_role(params[:user_ids].values, params[:project_access]) + nil end # Delete project users @@ -98,6 +100,7 @@ module Gitlab # DELETE /projects/:id/users delete ":id/users" do user_project.delete_users_ids_from_team(params[:user_ids].values) + nil end # Get a project repository branches From 3b5a90bdf654f9715fd15c189d59bd56492bae8c Mon Sep 17 00:00:00 2001 From: miks Date: Sat, 8 Sep 2012 20:51:12 +0300 Subject: [PATCH 226/357] Projects hooks API implemented --- doc/api/projects.md | 44 ++++++++++++++++++++++++++++++ lib/api/entities.rb | 4 +++ lib/api/projects.rb | 40 +++++++++++++++++++++++++++ spec/requests/api/projects_spec.rb | 31 +++++++++++++++++++++ 4 files changed, 119 insertions(+) diff --git a/doc/api/projects.md b/doc/api/projects.md index 72874e59..73d6adc9 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -173,6 +173,50 @@ Parameters: Will return status `200 OK` on success, or `404 Not found` on fail. +## Get project hooks + +Get hooks for project + +``` +GET /projects/:id/hooks +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project + +Will return hooks with status `200 OK` on success, or `404 Not found` on fail. + +## Add project hook + +Add hook to project + +``` +POST /projects/:id/hooks +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `url` (required) - The hook URL + +Will return status `201 Created` on success, or `404 Not found` on fail. + +## Delete project hook + +Delete hook from project + +``` +DELETE /projects/:id/hooks +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `hook_id` (required) - The ID of hook to delete + +Will return status `200 OK` on success, or `404 Not found` on fail. + ## Project repository branches Get a list of repository branches from a project, sorted by name alphabetically. diff --git a/lib/api/entities.rb b/lib/api/entities.rb index fef5328d..b50d683f 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -9,6 +9,10 @@ module Gitlab expose :id, :email, :name, :blocked, :created_at end + class Hook < Grape::Entity + expose :id, :url + end + class Project < Grape::Entity expose :id, :code, :name, :description, :path, :default_branch expose :owner, using: Entities::UserBasic diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 7da83429..876de321 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -103,6 +103,46 @@ module Gitlab nil end + # Get project hooks + # + # Parameters: + # id (required) - The ID or code name of a project + # Example Request: + # GET /projects/:id/hooks + get ":id/hooks" do + @hooks = paginate user_project.hooks + present @hooks, with: Entities::Hook + end + + # Add hook to project + # + # Parameters: + # id (required) - The ID or code name of a project + # url (required) - The hook URL + # Example Request: + # POST /projects/:id/hooks + post ":id/hooks" do + @hook = user_project.hooks.new({"url" => params[:url]}) + if @hook.save + present @hook, with: Entities::Hook + else + error!({'message' => '404 Not found'}, 404) + end + end + + # Delete project hook + # + # Parameters: + # id (required) - The ID or code name of a project + # hook_id (required) - The ID of hook to delete + # Example Request: + # DELETE /projects/:id/hooks + delete ":id/hooks" do + @hook = user_project.hooks.find(params[:hook_id]) + @hook.destroy + nil + end + # Get a project repository branches # # Parameters: diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index 439aecce..23fb34e6 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -6,6 +6,7 @@ describe Gitlab::API do let(:user) { Factory :user } let(:user2) { Factory.create(:user) } let(:user3) { Factory.create(:user) } + let!(:hook) { Factory :project_hook, project: project, url: "http://example.com" } let!(:project) { Factory :project, owner: user } let!(:snippet) { Factory :snippet, author: user, project: project, title: 'example' } let!(:users_project) { Factory :users_project, user: user, project: project, project_access: UsersProject::MASTER } @@ -147,6 +148,36 @@ describe Gitlab::API do end end + describe "GET /projects/:id/hooks" do + it "should return project hooks" do + get api("/projects/#{project.code}/hooks", user) + + response.status.should == 200 + + json_response.should be_an Array + json_response.count.should == 1 + json_response.first['url'].should == "http://example.com" + end + end + + describe "POST /projects/:id/users" do + it "should add hook to project" do + expect { + post api("/projects/#{project.code}/hooks", user), + "url" => "http://example.com" + }.to change {project.hooks.count}.by(1) + end + end + + describe "DELETE /projects/:id/hooks" do + it "should delete hook from project" do + expect { + delete api("/projects/#{project.code}/hooks", user), + hook_id: hook.id + }.to change {project.hooks.count}.by(-1) + end + end + describe "GET /projects/:id/repository/tags" do it "should return an array of project tags" do get api("/projects/#{project.code}/repository/tags", user) From a86bd87afcb8ba8221aa72562a6591139fa763c0 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Sun, 9 Sep 2012 23:18:28 +0300 Subject: [PATCH 227/357] User joined project event added --- app/assets/stylesheets/common.scss | 8 ++++++++ app/decorators/event_decorator.rb | 5 ++++- app/models/event.rb | 9 ++++++++- app/observers/users_project_observer.rb | 6 ++++++ app/views/events/_event.html.haml | 4 ++++ app/views/events/_event_joined.html.haml | 8 ++++++++ features/dashboard/dashboard.feature | 7 ++++++- features/step_definitions/dashboard_steps.rb | 15 +++++++++++++++ spec/models/event_spec.rb | 11 +++++++++++ spec/observers/users_project_observer_spec.rb | 8 ++++++++ 10 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 app/views/events/_event_joined.html.haml diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index aa27a280..012aad03 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -179,6 +179,14 @@ span.update-author { &.merged { background-color: #2A2; } + + &.joined { + background-color: #1cb9ff; + } + + &.left { + background-color: #ff5057; + } } form { diff --git a/app/decorators/event_decorator.rb b/app/decorators/event_decorator.rb index 7df9081f..265dbe1a 100644 --- a/app/decorators/event_decorator.rb +++ b/app/decorators/event_decorator.rb @@ -8,7 +8,10 @@ class EventDecorator < ApplicationDecorator "#{self.author_name} #{self.action_name} MR ##{self.target_id}:" + self.merge_request_title elsif self.push? "#{self.author_name} #{self.push_action_name} #{self.ref_type} " + self.ref_name - else + elsif self.joined? + "#{self.author_name} #{self.action_name} #{self.project.name}" + + else "" end end diff --git a/app/models/event.rb b/app/models/event.rb index e20b79e2..15095d3b 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -10,6 +10,7 @@ class Event < ActiveRecord::Base Pushed = 5 Commented = 6 Merged = 7 + Joined = 8 # User joined project belongs_to :project belongs_to :target, polymorphic: true @@ -37,7 +38,7 @@ class Event < ActiveRecord::Base # - new issue # - merge request def allowed? - push? || issue? || merge_request? + push? || issue? || merge_request? || joined? end def push? @@ -84,6 +85,10 @@ class Event < ActiveRecord::Base [Closed, Reopened].include?(action) end + def joined? + action == self.class::Joined + end + def issue target if target_type == "Issue" end @@ -101,6 +106,8 @@ class Event < ActiveRecord::Base "closed" elsif merged? "merged" + elsif joined? + 'joined' else "opened" end diff --git a/app/observers/users_project_observer.rb b/app/observers/users_project_observer.rb index 763b2c87..2a98a194 100644 --- a/app/observers/users_project_observer.rb +++ b/app/observers/users_project_observer.rb @@ -1,6 +1,12 @@ class UsersProjectObserver < ActiveRecord::Observer def after_create(users_project) Notify.project_access_granted_email(users_project.id).deliver + + Event.create( + project_id: users_project.project.id, + action: Event::Joined, + author_id: users_project.user.id + ) end def after_update(users_project) diff --git a/app/views/events/_event.html.haml b/app/views/events/_event.html.haml index d49f0382..7566c094 100644 --- a/app/views/events/_event.html.haml +++ b/app/views/events/_event.html.haml @@ -11,3 +11,7 @@ .event_feed = render "events/event_push", event: event + - elsif event.joined? + .event_feed + = render "events/event_joined", event: event + diff --git a/app/views/events/_event_joined.html.haml b/app/views/events/_event_joined.html.haml new file mode 100644 index 00000000..6195da81 --- /dev/null +++ b/app/views/events/_event_joined.html.haml @@ -0,0 +1,8 @@ += image_tag gravatar_icon(event.author_email), class: "avatar" +%strong #{event.author_name} +%span.event_label{class: event.action_name}= event.action_name +%strong= link_to event.project.name, event.project +%span.cgray + = time_ago_in_words(event.created_at) + ago. + diff --git a/features/dashboard/dashboard.feature b/features/dashboard/dashboard.feature index a8c2205c..8775e081 100644 --- a/features/dashboard/dashboard.feature +++ b/features/dashboard/dashboard.feature @@ -15,4 +15,9 @@ Feature: Dashboard And I click "Create Merge Request" link Then I see prefilled new Merge Request page - + @current + Scenario: I should see User joined Project event + Given user with name "John Doe" joined project "Shop" + When I visit dashboard page + Then I should see "John Doe joined Shop" event + diff --git a/features/step_definitions/dashboard_steps.rb b/features/step_definitions/dashboard_steps.rb index 867233c8..3771fb9c 100644 --- a/features/step_definitions/dashboard_steps.rb +++ b/features/step_definitions/dashboard_steps.rb @@ -109,3 +109,18 @@ Given /^I have authored merge requests$/ do :author => @user, :project => project2 end + +Given /^user with name "(.*?)" joined project "(.*?)"$/ do |user_name, project_name| + user = Factory.create(:user, {name: user_name}) + project = Project.find_by_name project_name + Event.create( + project: project, + author_id: user.id, + action: Event::Joined + ) +end + +Then /^I should see "(.*?)" event$/ do |event_text| + page.should have_content(event_text) +end + diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb index aaffda31..81459233 100644 --- a/spec/models/event_spec.rb +++ b/spec/models/event_spec.rb @@ -49,4 +49,15 @@ describe Event do it { @event.branch_name.should == "master" } it { @event.author.should == @user } end + + describe "New team mamber" do + let(:project) {Factory.create :project} + let(:new_user) {Factory.create :user} + it "should create event" do + UsersProject.observers.enable :users_project_observer + expect{ + UsersProject.bulk_import(project, [new_user.id], UsersProject::DEVELOPER) + }.to change{Event.count}.by(1) + end + end end diff --git a/spec/observers/users_project_observer_spec.rb b/spec/observers/users_project_observer_spec.rb index 3e392040..99130aa5 100644 --- a/spec/observers/users_project_observer_spec.rb +++ b/spec/observers/users_project_observer_spec.rb @@ -23,6 +23,14 @@ describe UsersProjectObserver do Notify.should_receive(:project_access_granted_email).with(users_project.id).and_return(double(deliver: true)) subject.after_create(users_project) end + it "should create new event" do + Event.should_receive(:create).with( + project_id: users_project.project.id, + action: Event::Joined, + author_id: users_project.user.id + ) + subject.after_create(users_project) + end end describe "#after_update" do From 1f240b09ed5f9f5476a863dd2f906398e5a9f0d4 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Mon, 10 Sep 2012 00:27:47 +0300 Subject: [PATCH 228/357] User left project event added --- app/decorators/event_decorator.rb | 3 +-- app/models/event.rb | 15 +++++++++++++-- app/models/users_project.rb | 2 +- app/observers/users_project_observer.rb | 9 +++++++++ app/views/events/_event.html.haml | 4 ++-- ...ml => _event_membership_changed.html.haml} | 1 + features/dashboard/dashboard.feature | 9 +++++++-- features/step_definitions/dashboard_steps.rb | 10 ++++++++++ spec/models/event_spec.rb | 13 ++++++++++++- spec/observers/users_project_observer_spec.rb | 19 +++++++++++++++++++ 10 files changed, 75 insertions(+), 10 deletions(-) rename app/views/events/{_event_joined.html.haml => _event_membership_changed.html.haml} (97%) diff --git a/app/decorators/event_decorator.rb b/app/decorators/event_decorator.rb index 265dbe1a..ce0aaa03 100644 --- a/app/decorators/event_decorator.rb +++ b/app/decorators/event_decorator.rb @@ -8,9 +8,8 @@ class EventDecorator < ApplicationDecorator "#{self.author_name} #{self.action_name} MR ##{self.target_id}:" + self.merge_request_title elsif self.push? "#{self.author_name} #{self.push_action_name} #{self.ref_type} " + self.ref_name - elsif self.joined? + elsif self.membership_changed? "#{self.author_name} #{self.action_name} #{self.project.name}" - else "" end diff --git a/app/models/event.rb b/app/models/event.rb index 15095d3b..308ffd63 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -11,6 +11,7 @@ class Event < ActiveRecord::Base Commented = 6 Merged = 7 Joined = 8 # User joined project + Left = 9 # User left project belongs_to :project belongs_to :target, polymorphic: true @@ -38,7 +39,7 @@ class Event < ActiveRecord::Base # - new issue # - merge request def allowed? - push? || issue? || merge_request? || joined? + push? || issue? || merge_request? || membership_changed? end def push? @@ -86,7 +87,15 @@ class Event < ActiveRecord::Base end def joined? - action == self.class::Joined + action == Joined + end + + def left? + action == Left + end + + def membership_changed? + joined? || left? end def issue @@ -108,6 +117,8 @@ class Event < ActiveRecord::Base "merged" elsif joined? 'joined' + elsif left? + 'left' else "opened" end diff --git a/app/models/users_project.rb b/app/models/users_project.rb index 3b951f0d..ce64a10f 100644 --- a/app/models/users_project.rb +++ b/app/models/users_project.rb @@ -23,7 +23,7 @@ class UsersProject < ActiveRecord::Base def self.bulk_delete(project, user_ids) UsersProject.transaction do UsersProject.where(:user_id => user_ids, :project_id => project.id).each do |users_project| - users_project.delete + users_project.destroy end end end diff --git a/app/observers/users_project_observer.rb b/app/observers/users_project_observer.rb index 2a98a194..b2cea9f2 100644 --- a/app/observers/users_project_observer.rb +++ b/app/observers/users_project_observer.rb @@ -12,4 +12,13 @@ class UsersProjectObserver < ActiveRecord::Observer def after_update(users_project) Notify.project_access_granted_email(users_project.id).deliver end + + def after_destroy(users_project) + Event.create( + project_id: users_project.project.id, + action: Event::Left, + author_id: users_project.user.id + ) + end + end diff --git a/app/views/events/_event.html.haml b/app/views/events/_event.html.haml index 7566c094..7bae8db1 100644 --- a/app/views/events/_event.html.haml +++ b/app/views/events/_event.html.haml @@ -11,7 +11,7 @@ .event_feed = render "events/event_push", event: event - - elsif event.joined? + - elsif event.membership_changed? .event_feed - = render "events/event_joined", event: event + = render "events/event_membership_changed", event: event diff --git a/app/views/events/_event_joined.html.haml b/app/views/events/_event_membership_changed.html.haml similarity index 97% rename from app/views/events/_event_joined.html.haml rename to app/views/events/_event_membership_changed.html.haml index 6195da81..b079c138 100644 --- a/app/views/events/_event_joined.html.haml +++ b/app/views/events/_event_membership_changed.html.haml @@ -1,6 +1,7 @@ = image_tag gravatar_icon(event.author_email), class: "avatar" %strong #{event.author_name} %span.event_label{class: event.action_name}= event.action_name +project %strong= link_to event.project.name, event.project %span.cgray = time_ago_in_words(event.created_at) diff --git a/features/dashboard/dashboard.feature b/features/dashboard/dashboard.feature index 8775e081..98bb4980 100644 --- a/features/dashboard/dashboard.feature +++ b/features/dashboard/dashboard.feature @@ -15,9 +15,14 @@ Feature: Dashboard And I click "Create Merge Request" link Then I see prefilled new Merge Request page - @current Scenario: I should see User joined Project event Given user with name "John Doe" joined project "Shop" When I visit dashboard page - Then I should see "John Doe joined Shop" event + Then I should see "John Doe joined project Shop" event + + Scenario: I should see User left Project event + Given user with name "John Doe" joined project "Shop" + And user with name "John Doe" left project "Shop" + When I visit dashboard page + Then I should see "John Doe left project Shop" event diff --git a/features/step_definitions/dashboard_steps.rb b/features/step_definitions/dashboard_steps.rb index 3771fb9c..3ddc68e9 100644 --- a/features/step_definitions/dashboard_steps.rb +++ b/features/step_definitions/dashboard_steps.rb @@ -120,6 +120,16 @@ Given /^user with name "(.*?)" joined project "(.*?)"$/ do |user_name, project_n ) end +Given /^user with name "(.*?)" left project "(.*?)"$/ do |user_name, project_name| + user = User.find_by_name user_name + project = Project.find_by_name project_name + Event.create( + project: project, + author_id: user.id, + action: Event::Left + ) +end + Then /^I should see "(.*?)" event$/ do |event_text| page.should have_content(event_text) end diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb index 81459233..ee022e95 100644 --- a/spec/models/event_spec.rb +++ b/spec/models/event_spec.rb @@ -50,7 +50,7 @@ describe Event do it { @event.author.should == @user } end - describe "New team mamber" do + describe "Joined project team" do let(:project) {Factory.create :project} let(:new_user) {Factory.create :user} it "should create event" do @@ -60,4 +60,15 @@ describe Event do }.to change{Event.count}.by(1) end end + describe "Left project team" do + let(:project) {Factory.create :project} + let(:new_user) {Factory.create :user} + it "should create event" do + UsersProject.bulk_import(project, [new_user.id], UsersProject::DEVELOPER) + UsersProject.observers.enable :users_project_observer + expect{ + UsersProject.bulk_delete(project, [new_user.id]) + }.to change{Event.count}.by(1) + end + end end diff --git a/spec/observers/users_project_observer_spec.rb b/spec/observers/users_project_observer_spec.rb index 99130aa5..f38d9862 100644 --- a/spec/observers/users_project_observer_spec.rb +++ b/spec/observers/users_project_observer_spec.rb @@ -45,4 +45,23 @@ describe UsersProjectObserver do subject.after_update(users_project) end end + describe "#after_destroy" do + it "should called when UsersProject destroyed" do + subject.should_receive(:after_destroy) + UsersProject.observers.enable :users_project_observer do + UsersProject.bulk_delete( + users_project.project, + [users_project.user.id] + ) + end + end + it "should create new event" do + Event.should_receive(:create).with( + project_id: users_project.project.id, + action: Event::Left, + author_id: users_project.user.id + ) + subject.after_destroy(users_project) + end + end end From b565f33472d960e37ed41a8a0c09fbbc3ea65f1e Mon Sep 17 00:00:00 2001 From: randx Date: Mon, 10 Sep 2012 09:06:11 +0300 Subject: [PATCH 229/357] Auth for API --- lib/api/helpers.rb | 16 ++++++++++++++++ lib/api/issues.rb | 2 ++ lib/api/milestones.rb | 2 ++ lib/api/projects.rb | 7 +++++++ 4 files changed, 27 insertions(+) diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb index ce7b7b49..c0ba8747 100644 --- a/lib/api/helpers.rb +++ b/lib/api/helpers.rb @@ -21,5 +21,21 @@ module Gitlab def authenticate! error!({'message' => '401 Unauthorized'}, 401) unless current_user end + + def authorize! action, subject + unless abilities.allowed?(current_user, action, subject) + error!({'message' => '403 Forbidden'}, 403) + end + end + + private + + def abilities + @abilities ||= begin + abilities = Six.new + abilities << Ability + abilities + end + end end end diff --git a/lib/api/issues.rb b/lib/api/issues.rb index 68cb7e05..4cfa7500 100644 --- a/lib/api/issues.rb +++ b/lib/api/issues.rb @@ -79,6 +79,8 @@ module Gitlab # PUT /projects/:id/issues/:issue_id put ":id/issues/:issue_id" do @issue = user_project.issues.find(params[:issue_id]) + authorize! :modify_issue, @issue + parameters = { title: (params[:title] || @issue.title), description: (params[:description] || @issue.description), diff --git a/lib/api/milestones.rb b/lib/api/milestones.rb index 29f5efa4..7c684667 100644 --- a/lib/api/milestones.rb +++ b/lib/api/milestones.rb @@ -61,6 +61,8 @@ module Gitlab # Example Request: # PUT /projects/:id/milestones/:milestone_id put ":id/milestones/:milestone_id" do + authorize! :admin_milestone, user_project + @milestone = user_project.milestones.find(params[:milestone_id]) parameters = { title: (params[:title] || @milestone.title), diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 7da83429..05b07e8d 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -74,6 +74,7 @@ module Gitlab # Example Request: # POST /projects/:id/users post ":id/users" do + authorize! :admin_project, user_project user_project.add_users_ids_to_team(params[:user_ids].values, params[:project_access]) nil end @@ -87,6 +88,7 @@ module Gitlab # Example Request: # PUT /projects/:id/add_users put ":id/users" do + authorize! :admin_project, user_project user_project.update_users_ids_to_role(params[:user_ids].values, params[:project_access]) nil end @@ -99,6 +101,7 @@ module Gitlab # Example Request: # DELETE /projects/:id/users delete ":id/users" do + authorize! :admin_project, user_project user_project.delete_users_ids_from_team(params[:user_ids].values) nil end @@ -186,6 +189,8 @@ module Gitlab # PUT /projects/:id/snippets/:snippet_id put ":id/snippets/:snippet_id" do @snippet = user_project.snippets.find(params[:snippet_id]) + authorize! :modify_snippet, @snippet + parameters = { title: (params[:title] || @snippet.title), file_name: (params[:file_name] || @snippet.file_name), @@ -209,6 +214,8 @@ module Gitlab # DELETE /projects/:id/snippets/:snippet_id delete ":id/snippets/:snippet_id" do @snippet = user_project.snippets.find(params[:snippet_id]) + authorize! :modify_snippet, @snippet + @snippet.destroy end From d6c384c20f3798fffd0481cd758700a27bebd44f Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Mon, 10 Sep 2012 02:09:55 -0400 Subject: [PATCH 230/357] Reduce the amount of JavaScript written in views Seeing `:javascript` all over Views feels like a code smell. This goes a long way towards reducing the amount of JS in views, but there's still plenty to be done on that front. --- app/assets/javascripts/main.js.coffee | 3 +++ app/views/admin/projects/_form.html.haml | 3 +-- app/views/admin/projects/show.html.haml | 18 ++---------------- app/views/admin/team_members/_form.html.haml | 13 +------------ app/views/admin/users/show.html.haml | 18 ++---------------- app/views/commits/_head.html.haml | 7 +------ app/views/issues/_form.html.haml | 4 ++-- app/views/issues/edit.html.haml | 7 ------- app/views/issues/new.html.haml | 7 ------- app/views/merge_requests/_form.html.haml | 13 +++---------- app/views/milestones/edit.html.haml | 6 ------ app/views/projects/_refs.html.haml | 7 +------ app/views/protected_branches/index.html.haml | 5 +---- app/views/refs/_head.html.haml | 2 +- app/views/refs/_tree.html.haml | 3 --- app/views/refs/blame.html.haml | 5 ----- app/views/snippets/_form.html.haml | 10 +--------- app/views/team_members/_form.html.haml | 13 +++---------- 18 files changed, 22 insertions(+), 122 deletions(-) diff --git a/app/assets/javascripts/main.js.coffee b/app/assets/javascripts/main.js.coffee index a01b3932..86b19162 100644 --- a/app/assets/javascripts/main.js.coffee +++ b/app/assets/javascripts/main.js.coffee @@ -24,6 +24,9 @@ $ -> # Click a .one_click_select field, select the contents $(".one_click_select").live 'click', -> $(this).select() + # Initialize chosen selects + $('select.chosen').chosen() + # Disable form buttons while a form is submitting $('body').on 'ajax:complete, ajax:beforeSend, submit', 'form', (e) -> buttons = $('[type="submit"]', this) diff --git a/app/views/admin/projects/_form.html.haml b/app/views/admin/projects/_form.html.haml index 87d212e5..4848e739 100644 --- a/app/views/admin/projects/_form.html.haml +++ b/app/views/admin/projects/_form.html.haml @@ -32,7 +32,7 @@ - unless project.new_record? .clearfix = f.label :owner_id - .input= f.select :owner_id, User.all.map { |user| [user.name, user.id] } + .input= f.select :owner_id, User.all.map { |user| [user.name, user.id] }, {}, {class: 'chosen'} - if project.repo_exists? .clearfix @@ -69,7 +69,6 @@ :javascript $(function(){ - $('#project_owner_id').chosen(); new Projects(); }) diff --git a/app/views/admin/projects/show.html.haml b/app/views/admin/projects/show.html.haml index 65d888f5..63987410 100644 --- a/app/views/admin/projects/show.html.haml +++ b/app/views/admin/projects/show.html.haml @@ -71,25 +71,11 @@ %th Project Access: %tr - %td= select_tag :user_ids, options_from_collection_for_select(@users , :id, :name), multiple: true - %td= select_tag :project_access, options_for_select(Project.access_options), class: "project-access-select" + %td= select_tag :user_ids, options_from_collection_for_select(@users , :id, :name), multiple: true, data: {placeholder: 'Select users'}, class: 'chosen span5' + %td= select_tag :project_access, options_for_select(Project.access_options), {class: "project-access-select chosen span3"} %tr %td= submit_tag 'Add', class: "btn primary" %td Read more about project permissions %strong= link_to "here", help_permissions_path, class: "vlink" - -:css - form select { - width:150px; - } - - #user_ids { - width:300px; - } - -:javascript - $('select#user_ids').chosen(); - $('select#repo_access').chosen(); - $('select#project_access').chosen(); diff --git a/app/views/admin/team_members/_form.html.haml b/app/views/admin/team_members/_form.html.haml index 6a128de9..9cd94fdd 100644 --- a/app/views/admin/team_members/_form.html.haml +++ b/app/views/admin/team_members/_form.html.haml @@ -8,20 +8,9 @@ .clearfix %label Project Access: .input - = f.select :project_access, options_for_select(Project.access_options, @admin_team_member.project_access), {}, class: "project-access-select" + = f.select :project_access, options_for_select(Project.access_options, @admin_team_member.project_access), {}, class: "project-access-select chosen span3" %br .actions = f.submit 'Save', class: "btn primary" = link_to 'Cancel', :back, class: "btn" - -:css - form select { - width:300px; - } - -:javascript - $('select#team_member_user_id').chosen(); - $('select#team_member_project_id').chosen(); - $('select#team_member_repo_access').chosen(); - $('select#team_member_project_access').chosen(); diff --git a/app/views/admin/users/show.html.haml b/app/views/admin/users/show.html.haml index 4d2b9832..731916e9 100644 --- a/app/views/admin/users/show.html.haml +++ b/app/views/admin/users/show.html.haml @@ -68,8 +68,8 @@ %th Project Access: %tr - %td= select_tag :project_ids, options_from_collection_for_select(@projects , :id, :name), multiple: true - %td= select_tag :project_access, options_for_select(Project.access_options), class: "project-access-select" + %td= select_tag :project_ids, options_from_collection_for_select(@projects , :id, :name), multiple: true, data: {placeholder: 'Select projects'}, class: 'chosen span5' + %td= select_tag :project_access, options_for_select(Project.access_options), class: "project-access-select chosen span3" %tr %td= submit_tag 'Add', class: "btn primary" @@ -97,17 +97,3 @@ %td= select_tag :tm_project_access, options_for_select(Project.access_options, tm.project_access), class: "medium project-access-select", disabled: :disabled %td= link_to 'Edit Access', edit_admin_team_member_path(tm), class: "btn small" %td= link_to 'Remove from team', admin_team_member_path(tm), confirm: 'Are you sure?', method: :delete, class: "btn small danger" - -:css - form select { - width:150px; - } - - #project_ids { - width:300px; - } - -:javascript - $('select#project_ids').chosen(); - $('select#repo_access').chosen(); - $('select#project_access').chosen(); diff --git a/app/views/commits/_head.html.haml b/app/views/commits/_head.html.haml index a211329f..5a09d82a 100644 --- a/app/views/commits/_head.html.haml +++ b/app/views/commits/_head.html.haml @@ -1,7 +1,7 @@ %ul.nav.nav-tabs %li = form_tag switch_project_refs_path(@project), method: :get, class: "project-refs-form" do - = select_tag "ref", grouped_options_refs, onchange: "$(this.form).trigger('submit');", class: "project-refs-select" + = select_tag "ref", grouped_options_refs, onchange: "$(this.form).trigger('submit');", class: "project-refs-select chosen" = hidden_field_tag :destination, "commits" %li{class: "#{'active' if current_page?(project_commits_path(@project)) }"} @@ -26,8 +26,3 @@ %span.rss-icon = link_to project_commits_path(@project, :atom, { private_token: current_user.private_token, ref: @ref }), title: "Feed" do = image_tag "rss_ui.png", title: "feed" - -:javascript - $(function(){ - $('.project-refs-select').chosen(); - }); diff --git a/app/views/issues/_form.html.haml b/app/views/issues/_form.html.haml index 23de7e8e..813ecab2 100644 --- a/app/views/issues/_form.html.haml +++ b/app/views/issues/_form.html.haml @@ -18,12 +18,12 @@ = f.label :assignee_id do %i.icon-user Assign to - .input= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { include_blank: "Select a user" }) + .input= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { include_blank: "Select a user" }, {class: 'chosen'}) .issue_milestone = f.label :milestone_id do %i.icon-time Milestone - .input= f.select(:milestone_id, @project.milestones.active.all.collect {|p| [ p.title, p.id ] }, { include_blank: "Select milestone" }) + .input= f.select(:milestone_id, @project.milestones.active.all.collect {|p| [ p.title, p.id ] }, { include_blank: "Select milestone" }, {class: 'chosen'}) .issue_description .clearfix diff --git a/app/views/issues/edit.html.haml b/app/views/issues/edit.html.haml index 3c9877f8..b1bc3ba0 100644 --- a/app/views/issues/edit.html.haml +++ b/app/views/issues/edit.html.haml @@ -1,8 +1 @@ = render "form" - -:javascript - $(function(){ - $('select#issue_assignee_id').chosen(); - $('select#issue_milestone_id').chosen(); - }); - diff --git a/app/views/issues/new.html.haml b/app/views/issues/new.html.haml index 3c9877f8..b1bc3ba0 100644 --- a/app/views/issues/new.html.haml +++ b/app/views/issues/new.html.haml @@ -1,8 +1 @@ = render "form" - -:javascript - $(function(){ - $('select#issue_assignee_id').chosen(); - $('select#issue_milestone_id').chosen(); - }); - diff --git a/app/views/merge_requests/_form.html.haml b/app/views/merge_requests/_form.html.haml index d5271ed0..96692c0f 100644 --- a/app/views/merge_requests/_form.html.haml +++ b/app/views/merge_requests/_form.html.haml @@ -16,7 +16,7 @@ .padded = f.label :source_branch, "From", class: "control-label" .controls - = f.select(:source_branch, @project.heads.map(&:name), { include_blank: "Select branch" }, style: "width:250px") + = f.select(:source_branch, @project.heads.map(&:name), { include_blank: "Select branch" }, {class: 'chosen span3'}) .mr_source_commit .span2 @@ -28,7 +28,7 @@ .padded = f.label :target_branch, "To", class: "control-label" .controls - = f.select(:target_branch, @project.heads.map(&:name), { include_blank: "Select branch" }, style: "width:250px") + = f.select(:target_branch, @project.heads.map(&:name), { include_blank: "Select branch" }, {class: 'chosen span3'}) .mr_target_commit %h4.cdark 2. Fill info @@ -43,7 +43,7 @@ = f.label :assignee_id do %i.icon-user Assign to - .input= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { include_blank: "Select user" }, style: "width:250px") + .input= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { include_blank: "Select user" }, {class: 'chosen span3'}) .control-group @@ -56,18 +56,12 @@ = link_to project_merge_request_path(@project, @merge_request), class: "btn cancel-btn" do Cancel - - :javascript $(function(){ disableButtonIfEmptyField("#merge_request_title", ".save-btn"); - $('select#merge_request_assignee_id').chosen(); - $('select#merge_request_source_branch').chosen(); - $('select#merge_request_target_branch').chosen(); var source_branch = $("#merge_request_source_branch"); var target_branch = $("#merge_request_target_branch"); - $.get("#{branch_from_project_merge_requests_path(@project)}", {ref: source_branch.val() }); $.get("#{branch_to_project_merge_requests_path(@project)}", {ref: target_branch.val() }); @@ -79,4 +73,3 @@ $.get("#{branch_to_project_merge_requests_path(@project)}", {ref: $(this).val() }); }); }); - diff --git a/app/views/milestones/edit.html.haml b/app/views/milestones/edit.html.haml index af975a84..b1bc3ba0 100644 --- a/app/views/milestones/edit.html.haml +++ b/app/views/milestones/edit.html.haml @@ -1,7 +1 @@ = render "form" - -:javascript - $(function(){ - $('select#issue_assignee_id').chosen(); - }); - diff --git a/app/views/projects/_refs.html.haml b/app/views/projects/_refs.html.haml index 804b8523..dc1f3a28 100644 --- a/app/views/projects/_refs.html.haml +++ b/app/views/projects/_refs.html.haml @@ -1,8 +1,3 @@ = form_tag switch_project_refs_path(@project), method: :get, class: "project-refs-form" do - = select_tag "ref", grouped_options_refs, onchange: "this.form.submit();", class: "project-refs-select" + = select_tag "ref", grouped_options_refs, onchange: "this.form.submit();", class: "project-refs-select chosen" = hidden_field_tag :destination, destination - -:javascript - $(function(){ - $('.project-refs-select').chosen(); - }) diff --git a/app/views/protected_branches/index.html.haml b/app/views/protected_branches/index.html.haml index 33bb448a..43884de1 100644 --- a/app/views/protected_branches/index.html.haml +++ b/app/views/protected_branches/index.html.haml @@ -19,7 +19,7 @@ .entry.clearfix = f.label :name, "Branch" .span3 - = f.select(:name, @project.open_branches.map { |br| [br.name, br.name] } , { include_blank: "-- Select branch" }, { class: "span3" }) + = f.select(:name, @project.open_branches.map { |br| [br.name, br.name] } , {include_blank: "Select branch"}, {class: "chosen span3"})   = f.submit 'Protect', class: "primary btn" @@ -46,6 +46,3 @@ %td - if can? current_user, :admin_project, @project = link_to 'Unprotect', [@project, branch], confirm: 'Are you sure?', method: :delete, class: "danger btn small" - -:javascript - $('select#protected_branch_name').chosen(); diff --git a/app/views/refs/_head.html.haml b/app/views/refs/_head.html.haml index d51602de..94603f0a 100644 --- a/app/views/refs/_head.html.haml +++ b/app/views/refs/_head.html.haml @@ -1,7 +1,7 @@ %ul.nav.nav-tabs %li = form_tag switch_project_refs_path(@project), method: :get, class: "project-refs-form", remote: true do - = select_tag "ref", grouped_options_refs, onchange: "$(this.form).trigger('submit');", class: "project-refs-select" + = select_tag "ref", grouped_options_refs, onchange: "$(this.form).trigger('submit');", class: "project-refs-select chosen" = hidden_field_tag :destination, "tree" = hidden_field_tag :path, params[:path] %li{class: "#{'active' if (controller.controller_name == "refs") }"} diff --git a/app/views/refs/_tree.html.haml b/app/views/refs/_tree.html.haml index 297a3b5f..83e73280 100644 --- a/app/views/refs/_tree.html.haml +++ b/app/views/refs/_tree.html.haml @@ -47,10 +47,7 @@ :javascript $(function(){ - $('.project-refs-select').chosen(); - history.pushState({ path: this.path }, '', "#{@history_path}"); - }); // Load last commit log for each file in tree diff --git a/app/views/refs/blame.html.haml b/app/views/refs/blame.html.haml index 34478d4b..eb66f597 100644 --- a/app/views/refs/blame.html.haml +++ b/app/views/refs/blame.html.haml @@ -38,8 +38,3 @@ = preserve do %pre = Gitlab::Encode.utf8 lines.join("\n") - -:javascript - $(function(){ - $('.project-refs-select').chosen(); - }); diff --git a/app/views/snippets/_form.html.haml b/app/views/snippets/_form.html.haml index b8d8c098..e61e61a7 100644 --- a/app/views/snippets/_form.html.haml +++ b/app/views/snippets/_form.html.haml @@ -16,7 +16,7 @@ .input= f.text_field :file_name, placeholder: "example.rb" .clearfix = f.label "Lifetime" - .input= f.select :expires_at, lifetime_select_options, {}, style: "width:200px;" + .input= f.select :expires_at, lifetime_select_options, {}, {class: 'chosen span2'} .clearfix = f.label :content, "Code" .input= f.text_area :content, class: "span8" @@ -26,11 +26,3 @@ = link_to "Cancel", project_snippets_path(@project), class: " btn" - unless @snippet.new_record? .right= link_to 'Destroy', [@project, @snippet], confirm: 'Are you sure?', method: :delete, class: "btn right danger delete-snippet", id: "destroy_snippet_#{@snippet.id}" - - - -:javascript - $(function(){ - $('select#snippet_expires_at').chosen(); - }); - diff --git a/app/views/team_members/_form.html.haml b/app/views/team_members/_form.html.haml index 192f2735..3736bfea 100644 --- a/app/views/team_members/_form.html.haml +++ b/app/views/team_members/_form.html.haml @@ -10,21 +10,14 @@ %h6 1. Choose people you want in the team .clearfix - = f.label :user_ids, "Peolpe" - .input= select_tag(:user_ids, options_from_collection_for_select(User.not_in_project(@project).all, :id, :name), { class: "xxlarge", multiple: true }) - + = f.label :user_ids, "People" + .input= select_tag(:user_ids, options_from_collection_for_select(User.not_in_project(@project).all, :id, :name), {data: {placeholder: "Select users"}, class: "chosen xxlarge", multiple: true}) %h6 2. Set access level for them .clearfix = f.label :project_access, "Project Access" - .input= select_tag :project_access, options_for_select(Project.access_options, @team_member.project_access), class: "project-access-select" - + .input= select_tag :project_access, options_for_select(Project.access_options, @team_member.project_access), class: "project-access-select chosen" .actions = f.submit 'Save', class: "btn save-btn" = link_to "Cancel", team_project_path(@project), class: "btn cancel-btn" - - -:javascript - $('select#user_ids').chosen(); - $('select#project_access').chosen(); From e7f483f9f4dffbd675b7fc41b5c2cfd8c7309e0d Mon Sep 17 00:00:00 2001 From: Cyril Date: Mon, 10 Sep 2012 10:50:07 +0200 Subject: [PATCH 231/357] fix typo --- lib/gitlab/backend/gitolite_config.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gitlab/backend/gitolite_config.rb b/lib/gitlab/backend/gitolite_config.rb index 60eef8e8..0d636d2d 100644 --- a/lib/gitlab/backend/gitolite_config.rb +++ b/lib/gitlab/backend/gitolite_config.rb @@ -148,7 +148,7 @@ module Gitlab # Enable access to all repos for gitolite admin. # We use it for accept merge request feature def admin_all_repo - owner_name = Gitlab.settings.gitolite_admin_key + owner_name = Gitlab.config.gitolite_admin_key # @ALL repos premission for gitolite owner repo_name = "@all" From 52d29f5d5996fd5e5bcd203b5e352afee00f74aa Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 10 Sep 2012 09:13:45 +0300 Subject: [PATCH 232/357] Project team page improved --- app/assets/stylesheets/common.scss | 5 +++-- app/helpers/projects_helper.rb | 4 ++++ app/views/team_members/_show.html.haml | 20 +++++++++++++------- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index 012aad03..6f69ba5a 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -181,11 +181,12 @@ span.update-author { } &.joined { - background-color: #1cb9ff; + background-color: #1ca9dd; } &.left { - background-color: #ff5057; + background-color: #888; + float:none; } } diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 34dbb06c..c7dc54ee 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -2,5 +2,9 @@ module ProjectsHelper def grouper_project_members(project) @project.users_projects.sort_by(&:project_access).reverse.group_by(&:project_access) end + + def remove_from_team_message(project, member) + "You are going to remove #{member.user_name} from #{project.name}. Are you sure?" + end end diff --git a/app/views/team_members/_show.html.haml b/app/views/team_members/_show.html.haml index d9a72494..f68f8eb4 100644 --- a/app/views/team_members/_show.html.haml +++ b/app/views/team_members/_show.html.haml @@ -1,20 +1,26 @@ - user = member.user - allow_admin = can? current_user, :admin_project, @project %tr{id: dom_id(member), class: "team_member_row user_#{user.id}"} - %td + %td.span6 = link_to project_team_member_path(@project, member), title: user.name, class: "dark" do = image_tag gravatar_icon(user.email, 40), class: "avatar s32" = link_to project_team_member_path(@project, member), title: user.name, class: "dark" do %strong= truncate(user.name, lenght: 40) - %br - %div.cgray= user.email + %br + %small.cgray= user.email - %td + %td.span5 .right + - if current_user == user + %span.btn.disabled This is you! - if @project.owner == user - %span.btn.disabled.success Project Owner - - if user.blocked + %span.btn.disabled.success Owner + - elsif user.blocked %span.btn.disabled.blocked Blocked + - elsif allow_admin + = link_to project_team_member_path(project_id: @project, id: member.id), confirm: remove_from_team_message(@project, member), method: :delete, class: "very_small btn danger" do + %i.icon-minus.icon-white + - if allow_admin = form_for(member, as: :team_member, url: project_team_member_path(@project, member)) do |f| - = f.select :project_access, options_for_select(UsersProject.access_roles, member.project_access), {}, class: "medium project-access-select" + = f.select :project_access, options_for_select(UsersProject.access_roles, member.project_access), {}, class: "medium project-access-select span2" From a1ba470e4e0ec5ebbcd47755122878df6d19ad0b Mon Sep 17 00:00:00 2001 From: randx Date: Mon, 10 Sep 2012 09:26:35 +0300 Subject: [PATCH 233/357] Added guard --- Gemfile | 3 +++ Gemfile.lock | 11 +++++++++++ Guardfile | 30 ++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 Guardfile diff --git a/Gemfile b/Gemfile index c8d3821f..d104cbb6 100644 --- a/Gemfile +++ b/Gemfile @@ -109,6 +109,9 @@ group :development, :test do gem "database_cleaner" gem "launchy" gem 'factory_girl_rails' + + gem 'guard-rspec' + gem 'guard-cucumber' end group :test do diff --git a/Gemfile.lock b/Gemfile.lock index 83fd94db..00ece601 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -186,6 +186,14 @@ GEM multi_xml rack rack-mount + guard (1.3.2) + listen (>= 0.4.2) + thor (>= 0.14.6) + guard-cucumber (1.2.0) + cucumber (>= 1.2.0) + guard (>= 1.1.0) + guard-rspec (1.2.1) + guard (>= 1.1) haml (3.1.6) haml-rails (0.3.4) actionpack (~> 3.0) @@ -219,6 +227,7 @@ GEM libv8 (3.3.10.4) libwebsocket (0.1.3) addressable + listen (0.5.0) mail (2.4.4) i18n (>= 0.4.0) mime-types (~> 1.16) @@ -403,6 +412,8 @@ DEPENDENCIES grack! grape (~> 0.2.1) grit! + guard-cucumber + guard-rspec haml-rails headless httparty diff --git a/Guardfile b/Guardfile new file mode 100644 index 00000000..ed38f548 --- /dev/null +++ b/Guardfile @@ -0,0 +1,30 @@ +# A sample Guardfile +# More info at https://github.com/guard/guard#readme + +guard 'rspec', :version => 2 do + watch(%r{^spec/.+_spec\.rb$}) + watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" } + watch('spec/spec_helper.rb') { "spec" } + + # Rails example + watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" } + watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" } + watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] } + watch(%r{^spec/support/(.+)\.rb$}) { "spec" } + watch('config/routes.rb') { "spec/routing" } + watch('app/controllers/application_controller.rb') { "spec/controllers" } + + # Capybara request specs + watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" } + + # Turnip features and steps + watch(%r{^spec/acceptance/(.+)\.feature$}) + watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' } +end + + +guard 'cucumber' do + watch(%r{^features/.+\.feature$}) + watch(%r{^features/support/.+$}) { 'features' } + watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' } +end From 8795f67f47880f4ac4c88b627c22f1861cda2bc0 Mon Sep 17 00:00:00 2001 From: randx Date: Mon, 10 Sep 2012 09:41:51 +0300 Subject: [PATCH 234/357] REmoved autotest, added notify libs for growl --- Gemfile | 16 ++++++++++++++-- Gemfile.lock | 14 +++++++------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/Gemfile b/Gemfile index d104cbb6..660bef40 100644 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,13 @@ source "http://rubygems.org" +def darwin_only(require_as) + RUBY_PLATFORM.include?('darwin') && require_as +end + +def linux_only(require_as) + RUBY_PLATFORM.include?('linux') && require_as +end + gem "rails", "3.2.8" # Supported DBs @@ -102,16 +110,20 @@ group :development, :test do gem "capybara" gem "capybara-webkit" gem "headless" - gem "autotest" - gem "autotest-rails" gem "pry" gem "awesome_print" gem "database_cleaner" gem "launchy" gem 'factory_girl_rails' + # Guard gem 'guard-rspec' gem 'guard-cucumber' + + # Notification + gem 'rb-fsevent', :require => darwin_only('growl') + gem 'growl', :require => darwin_only('growl') + gem 'rb-inotify', :require => linux_only('rb-fsevent') end group :test do diff --git a/Gemfile.lock b/Gemfile.lock index 00ece601..94b16281 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -68,7 +68,6 @@ GIT GEM remote: http://rubygems.org/ specs: - ZenTest (4.8.1) actionmailer (3.2.8) actionpack (= 3.2.8) mail (~> 2.4.4) @@ -100,10 +99,6 @@ GEM rails (~> 3.0) addressable (2.2.8) arel (3.0.2) - autotest (4.4.6) - ZenTest (>= 4.4.1) - autotest-rails (4.1.2) - ZenTest (~> 4.5) awesome_print (1.0.2) bcrypt-ruby (3.0.1) blankslate (2.1.2.4) @@ -186,6 +181,7 @@ GEM multi_xml rack rack-mount + growl (1.0.3) guard (1.3.2) listen (>= 0.4.2) thor (>= 0.14.6) @@ -283,6 +279,9 @@ GEM raindrops (0.9.0) rake (0.9.2.2) raphael-rails (1.5.2) + rb-fsevent (0.9.1) + rb-inotify (0.8.8) + ffi (>= 0.5.0) rdoc (3.12) json (~> 1.4) redcarpet (2.1.1) @@ -386,8 +385,6 @@ PLATFORMS DEPENDENCIES acts-as-taggable-on (= 2.3.1) annotate! - autotest - autotest-rails awesome_print bootstrap-sass (= 2.0.4) capybara @@ -412,6 +409,7 @@ DEPENDENCIES grack! grape (~> 0.2.1) grit! + growl guard-cucumber guard-rspec haml-rails @@ -431,6 +429,8 @@ DEPENDENCIES rack-mini-profiler rails (= 3.2.8) raphael-rails (= 1.5.2) + rb-fsevent + rb-inotify redcarpet (~> 2.1.1) resque (~> 1.20.0) resque_mailer From a839cb427cc158330297fd89fbf40321d41349a4 Mon Sep 17 00:00:00 2001 From: randx Date: Mon, 10 Sep 2012 09:43:30 +0300 Subject: [PATCH 235/357] Fix require calls in gemfile --- Gemfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index 660bef40..6205594a 100644 --- a/Gemfile +++ b/Gemfile @@ -121,9 +121,9 @@ group :development, :test do gem 'guard-cucumber' # Notification - gem 'rb-fsevent', :require => darwin_only('growl') + gem 'rb-fsevent', :require => darwin_only('rb-fsevent') gem 'growl', :require => darwin_only('growl') - gem 'rb-inotify', :require => linux_only('rb-fsevent') + gem 'rb-inotify', :require => linux_only('rb-inotify') end group :test do From 915dac0055cd801c080ebcd37749f4fc6d2d12c4 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Mon, 10 Sep 2012 10:41:46 +0300 Subject: [PATCH 236/357] Error throwing moved to api_helper --- lib/api/helpers.rb | 27 ++++++++++++++++++++++++--- lib/api/issues.rb | 6 +++--- lib/api/milestones.rb | 4 ++-- lib/api/projects.rb | 10 +++++----- 4 files changed, 34 insertions(+), 13 deletions(-) diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb index c0ba8747..3a385f15 100644 --- a/lib/api/helpers.rb +++ b/lib/api/helpers.rb @@ -8,7 +8,7 @@ module Gitlab if @project ||= current_user.projects.find_by_id(params[:id]) || current_user.projects.find_by_code(params[:id]) else - error!({'message' => '404 Not found'}, 404) + not_found! end @project @@ -19,15 +19,36 @@ module Gitlab end def authenticate! - error!({'message' => '401 Unauthorized'}, 401) unless current_user + unauthorized! unless current_user end def authorize! action, subject unless abilities.allowed?(current_user, action, subject) - error!({'message' => '403 Forbidden'}, 403) + forbidden! end end + # error helpers + + def forbidden! + error!({'message' => '403 Forbidden'}, 403) + end + + def not_found!(resource = nil) + message = ["404"] + message << resource if resource + message << "Not Found" + error!({'message' => message.join(' ')}, 404) + end + + def unauthorized! + error!({'message' => '401 Unauthorized'}, 401) + end + + def not_allowed! + error!({'message' => 'method not allowed'}, 405) + end + private def abilities diff --git a/lib/api/issues.rb b/lib/api/issues.rb index 4cfa7500..659f065e 100644 --- a/lib/api/issues.rb +++ b/lib/api/issues.rb @@ -60,7 +60,7 @@ module Gitlab if @issue.save present @issue, with: Entities::Issue else - error!({'message' => '404 Not found'}, 404) + not_found! end end @@ -93,7 +93,7 @@ module Gitlab if @issue.update_attributes(parameters) present @issue, with: Entities::Issue else - error!({'message' => '404 Not found'}, 404) + not_found! end end @@ -105,7 +105,7 @@ module Gitlab # Example Request: # DELETE /projects/:id/issues/:issue_id delete ":id/issues/:issue_id" do - error!({'message' => 'method not allowed'}, 405) + not_allowed! end end end diff --git a/lib/api/milestones.rb b/lib/api/milestones.rb index 7c684667..4b0424ba 100644 --- a/lib/api/milestones.rb +++ b/lib/api/milestones.rb @@ -45,7 +45,7 @@ module Gitlab if @milestone.save present @milestone, with: Entities::Milestone else - error!({'message' => '404 Not found'}, 404) + not_found! end end @@ -74,7 +74,7 @@ module Gitlab if @milestone.update_attributes(parameters) present @milestone, with: Entities::Milestone else - error!({'message' => '404 Not found'}, 404) + not_found! end end end diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 05b07e8d..9d33323e 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -50,7 +50,7 @@ module Gitlab if @project.saved? present @project, with: Entities::Project else - error!({'message' => '404 Not found'}, 404) + not_found! end end @@ -172,7 +172,7 @@ module Gitlab if @snippet.save present @snippet, with: Entities::ProjectSnippet else - error!({'message' => '404 Not found'}, 404) + not_found! end end @@ -201,7 +201,7 @@ module Gitlab if @snippet.update_attributes(parameters) present @snippet, with: Entities::ProjectSnippet else - error!({'message' => '404 Not found'}, 404) + not_found! end end @@ -244,10 +244,10 @@ module Gitlab ref = params[:sha] commit = user_project.commit ref - error!('404 Commit Not Found', 404) unless commit + not_found! "Commit" unless commit tree = Tree.new commit.tree, user_project, ref, params[:filepath] - error!('404 File Not Found', 404) unless tree.try(:tree) + not_found! "File" unless tree.try(:tree) if tree.text? encoding = Gitlab::Encode.detect_encoding(tree.data) From decb3abf18314877c7f4fe9241d46936ebe53205 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Mon, 10 Sep 2012 00:42:36 -0700 Subject: [PATCH 237/357] install spinach-rails --- Gemfile | 1 + Gemfile.lock | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/Gemfile b/Gemfile index 6205594a..4e957e92 100644 --- a/Gemfile +++ b/Gemfile @@ -106,6 +106,7 @@ group :development do end group :development, :test do + gem 'spinach-rails' gem "rspec-rails" gem "capybara" gem "capybara-webkit" diff --git a/Gemfile.lock b/Gemfile.lock index 94b16281..317ff694 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -132,6 +132,7 @@ GEM execjs coffee-script-source (1.3.3) colored (1.2) + colorize (0.5.8) crack (0.3.1) cucumber (1.2.1) builder (>= 2.1.2) @@ -172,6 +173,7 @@ GEM thor (>= 0.13.6) gherkin (2.11.0) json (>= 1.4.6) + gherkin-ruby (0.2.1) git (1.2.5) github-markup (0.7.4) gitlab_meta (2.9) @@ -344,6 +346,13 @@ GEM tilt (~> 1.3, >= 1.3.3) six (0.2.0) slop (2.4.4) + spinach (0.5.2) + colorize + gherkin-ruby (~> 0.2.0) + spinach-rails (0.1.8) + capybara (~> 1) + railties (>= 3) + spinach (>= 0.4) sprockets (2.1.3) hike (~> 1.2) rack (~> 1.0) @@ -442,6 +451,7 @@ DEPENDENCIES shoulda-matchers simplecov six + spinach-rails sqlite3 stamp therubyracer From 9f25657ad9b48dab20188bfa51aacbe2e83689e5 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Mon, 10 Sep 2012 00:52:43 -0700 Subject: [PATCH 238/357] modify env file for spinach --- features/support/env.rb | 64 +++++------------------------------------ 1 file changed, 7 insertions(+), 57 deletions(-) diff --git a/features/support/env.rb b/features/support/env.rb index 53578152..aa2f2958 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -1,59 +1,9 @@ -unless ENV['CI'] - require 'simplecov' - SimpleCov.start 'rails' -end +ENV['RAILS_ENV'] = 'test' +require './config/environment' -require 'cucumber/rails' -require 'webmock/cucumber' +require 'rspec' +require 'database_cleaner' -WebMock.allow_net_connect! - -require Rails.root.join 'spec/support/gitolite_stub' -require Rails.root.join 'spec/support/stubbed_repository' -require Rails.root.join 'spec/support/login_helpers' -require Rails.root.join 'spec/support/valid_commit' - -Capybara.default_selector = :css -Capybara.javascript_driver = :webkit - -# By default, any exception happening in your Rails application will bubble up -# to Cucumber so that your scenario will fail. This is a different from how -# your application behaves in the production environment, where an error page will -# be rendered instead. -# -# Sometimes we want to override this default behaviour and allow Rails to rescue -# exceptions and display an error page (just like when the app is running in production). -# Typical scenarios where you want to do this is when you test your error pages. -# There are two ways to allow Rails to rescue exceptions: -# -# 1) Tag your scenario (or feature) with @allow-rescue -# -# 2) Set the value below to true. Beware that doing this globally is not -# recommended as it will mask a lot of errors for you! -# -ActionController::Base.allow_rescue = false - -# Remove/comment out the lines below if your app doesn't have a database. -# For some databases (like MongoDB and CouchDB) you may need to use :truncation instead. -begin - DatabaseCleaner.strategy = :transaction -rescue NameError - raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it." -end - -Cucumber::Rails::Database.javascript_strategy = :truncation - -require 'headless' - -headless = Headless.new -headless.start - -require 'cucumber/rspec/doubles' - -include GitoliteStub - -Before do - stub_gitolite! -end - -World(FactoryGirl::Syntax::Methods) +DatabaseCleaner.strategy = :transaction +Spinach.hooks.before_scenario { DatabaseCleaner.start } +Spinach.hooks.after_scenario { DatabaseCleaner.clean } From bb75052a904c24d1484fa6ec0ad96839effb8ee3 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Mon, 10 Sep 2012 00:53:15 -0700 Subject: [PATCH 239/357] get rid of cucumber step definitions --- features/step_definitions/common_steps.rb | 21 --- features/step_definitions/dashboard_steps.rb | 136 ------------------ .../profile/profile_keys_steps.rb | 34 ----- .../step_definitions/profile/profile_steps.rb | 39 ----- .../project/browse_code_steps.rb | 38 ----- .../project/project_commits_steps.rb | 64 --------- .../project/project_issues_steps.rb | 81 ----------- .../project/project_merge_requests_steps.rb | 38 ----- .../project/project_milestones_steps.rb | 33 ----- .../project/project_team_steps.rb | 55 ------- .../project/project_wiki_steps.rb | 14 -- .../project/projects_steps.rb | 77 ---------- features/step_definitions/visit_steps.rb | 91 ------------ 13 files changed, 721 deletions(-) delete mode 100644 features/step_definitions/common_steps.rb delete mode 100644 features/step_definitions/dashboard_steps.rb delete mode 100644 features/step_definitions/profile/profile_keys_steps.rb delete mode 100644 features/step_definitions/profile/profile_steps.rb delete mode 100644 features/step_definitions/project/browse_code_steps.rb delete mode 100644 features/step_definitions/project/project_commits_steps.rb delete mode 100644 features/step_definitions/project/project_issues_steps.rb delete mode 100644 features/step_definitions/project/project_merge_requests_steps.rb delete mode 100644 features/step_definitions/project/project_milestones_steps.rb delete mode 100644 features/step_definitions/project/project_team_steps.rb delete mode 100644 features/step_definitions/project/project_wiki_steps.rb delete mode 100644 features/step_definitions/project/projects_steps.rb delete mode 100644 features/step_definitions/visit_steps.rb diff --git a/features/step_definitions/common_steps.rb b/features/step_definitions/common_steps.rb deleted file mode 100644 index e9023f92..00000000 --- a/features/step_definitions/common_steps.rb +++ /dev/null @@ -1,21 +0,0 @@ -include LoginHelpers - -Given /^I signin as a user$/ do - login_as :user -end - -When /^I click link "(.*?)"$/ do |link| - click_link link -end - -When /^I click button "(.*?)"$/ do |button| - click_button button -end - -When /^I fill in "(.*?)" with "(.*?)"$/ do |field, value| - fill_in field, :with => value -end - -Given /^show me page$/ do - save_and_open_page -end diff --git a/features/step_definitions/dashboard_steps.rb b/features/step_definitions/dashboard_steps.rb deleted file mode 100644 index 3ddc68e9..00000000 --- a/features/step_definitions/dashboard_steps.rb +++ /dev/null @@ -1,136 +0,0 @@ -Then /^I should see "(.*?)" link$/ do |arg1| - page.should have_link(arg1) -end - -Then /^I should see "(.*?)" project link$/ do |arg1| - page.should have_link(arg1) -end - -Then /^I should see project "(.*?)" activity feed$/ do |arg1| - project = Project.find_by_name(arg1) - page.should have_content "#{@user.name} pushed new branch new_design at #{project.name}" -end - -Given /^project "(.*?)" has push event$/ do |arg1| - @project = Project.find_by_name(arg1) - - data = { - :before => "0000000000000000000000000000000000000000", - :after => "0220c11b9a3e6c69dc8fd35321254ca9a7b98f7e", - :ref => "refs/heads/new_design", - :user_id => @user.id, - :user_name => @user.name, - :repository => { - :name => @project.name, - :url => "localhost/rubinius", - :description => "", - :homepage => "localhost/rubinius", - :private => true - } - } - - @event = Event.create( - :project => @project, - :action => Event::Pushed, - :data => data, - :author_id => @user.id - ) -end - -Then /^I should see last push widget$/ do - page.should have_content "Your pushed to branch new_design" - page.should have_link "Create Merge Request" -end - -Then /^I click "(.*?)" link$/ do |arg1| - click_link arg1 #Create Merge Request" -end - -Then /^I see prefilled new Merge Request page$/ do - current_path.should == new_project_merge_request_path(@project) - find("#merge_request_source_branch").value.should == "new_design" - find("#merge_request_target_branch").value.should == "master" - find("#merge_request_title").value.should == "New Design" -end - -Given /^I visit dashboard search page$/ do - visit search_path -end - -Given /^I search for "(.*?)"$/ do |arg1| - fill_in "dashboard_search", :with => arg1 - click_button "Search" -end - -Then /^I should see issues assigned to me$/ do - issues = @user.issues - issues.each do |issue| - page.should have_content(issue.title[0..10]) - page.should have_content(issue.project.name) - end -end - -Then /^I should see my merge requests$/ do - merge_requests = @user.merge_requests - merge_requests.each do |mr| - page.should have_content(mr.title[0..10]) - page.should have_content(mr.project.name) - end -end - -Given /^I have assigned issues$/ do - project = Factory :project - project.add_access(@user, :read, :write) - - issue1 = Factory :issue, - :author => @user, - :assignee => @user, - :project => project - - issue2 = Factory :issue, - :author => @user, - :assignee => @user, - :project => project -end - -Given /^I have authored merge requests$/ do - project1 = Factory :project - - project2 = Factory :project - - project1.add_access(@user, :read, :write) - project2.add_access(@user, :read, :write) - - merge_request1 = Factory :merge_request, - :author => @user, - :project => project1 - - merge_request2 = Factory :merge_request, - :author => @user, - :project => project2 -end - -Given /^user with name "(.*?)" joined project "(.*?)"$/ do |user_name, project_name| - user = Factory.create(:user, {name: user_name}) - project = Project.find_by_name project_name - Event.create( - project: project, - author_id: user.id, - action: Event::Joined - ) -end - -Given /^user with name "(.*?)" left project "(.*?)"$/ do |user_name, project_name| - user = User.find_by_name user_name - project = Project.find_by_name project_name - Event.create( - project: project, - author_id: user.id, - action: Event::Left - ) -end - -Then /^I should see "(.*?)" event$/ do |event_text| - page.should have_content(event_text) -end - diff --git a/features/step_definitions/profile/profile_keys_steps.rb b/features/step_definitions/profile/profile_keys_steps.rb deleted file mode 100644 index 25926c53..00000000 --- a/features/step_definitions/profile/profile_keys_steps.rb +++ /dev/null @@ -1,34 +0,0 @@ -Given /^I visit profile keys page$/ do - visit keys_path -end - -Then /^I should see my ssh keys$/ do - @user.keys.each do |key| - page.should have_content(key.title) - end -end - -Given /^I have ssh keys:$/ do |table| - table.hashes.each do |row| - Factory :key, :user => @user, :title => row[:title], :key => "jfKLJDFKSFJSHFJ#{row[:title]}" - end -end - -Given /^I submit new ssh key "(.*?)"$/ do |arg1| - fill_in "key_title", :with => arg1 - fill_in "key_key", :with => "ssh-rsa publickey234=" - click_button "Save" -end - -Then /^I should see new ssh key "(.*?)"$/ do |arg1| - key = Key.find_by_title(arg1) - page.should have_content(key.title) - page.should have_content(key.key) - current_path.should == key_path(key) -end - -Then /^I should not see "(.*?)" ssh key$/ do |arg1| - within "#keys-table" do - page.should_not have_content(arg1) - end -end diff --git a/features/step_definitions/profile/profile_steps.rb b/features/step_definitions/profile/profile_steps.rb deleted file mode 100644 index 525d43f5..00000000 --- a/features/step_definitions/profile/profile_steps.rb +++ /dev/null @@ -1,39 +0,0 @@ -Then /^I should see my profile info$/ do - page.should have_content "Profile" - page.should have_content @user.name - page.should have_content @user.email -end - -Then /^I change my password$/ do - fill_in "user_password", :with => "222333" - fill_in "user_password_confirmation", :with => "222333" - click_button "Save" -end - -Then /^I should be redirected to sign in page$/ do - current_path.should == new_user_session_path -end - -Then /^I reset my token$/ do - @old_token = @user.private_token - click_button "Reset" -end - -Then /^I should see new token$/ do - find("#token").value.should_not == @old_token - find("#token").value.should == @user.reload.private_token -end - -Then /^I change my contact info$/ do - fill_in "user_skype", :with => "testskype" - fill_in "user_linkedin", :with => "testlinkedin" - fill_in "user_twitter", :with => "testtwitter" - click_button "Save" - @user.reload -end - -Then /^I should see new contact info$/ do - @user.skype.should == 'testskype' - @user.linkedin.should == 'testlinkedin' - @user.twitter.should == 'testtwitter' -end diff --git a/features/step_definitions/project/browse_code_steps.rb b/features/step_definitions/project/browse_code_steps.rb deleted file mode 100644 index d2ed9a0a..00000000 --- a/features/step_definitions/project/browse_code_steps.rb +++ /dev/null @@ -1,38 +0,0 @@ -Then /^I should see files from repository$/ do - page.should have_content("app") - page.should have_content("History") - page.should have_content("Gemfile") -end - -Then /^I should see files from repository for "(.*?)"$/ do |arg1| - current_path.should == tree_project_ref_path(@project, arg1) - page.should have_content("app") - page.should have_content("History") - page.should have_content("Gemfile") -end - -Given /^I click on file from repo$/ do - click_link "Gemfile" -end - -Then /^I should see it content$/ do - page.should have_content("rubygems.org") -end - -Given /^I click on raw button$/ do - click_link "raw" -end - -Then /^I should see raw file content$/ do - page.source.should == ValidCommit::BLOB_FILE -end - -Given /^I click blame button$/ do - click_link "blame" -end - -Then /^I should see git file blame$/ do - page.should have_content("rubygems.org") - page.should have_content("Dmitriy Zaporozhets") - page.should have_content("bc3735004cb Moving to rails 3.2") -end diff --git a/features/step_definitions/project/project_commits_steps.rb b/features/step_definitions/project/project_commits_steps.rb deleted file mode 100644 index 7f20ade4..00000000 --- a/features/step_definitions/project/project_commits_steps.rb +++ /dev/null @@ -1,64 +0,0 @@ -Then /^I see project commits$/ do - current_path.should == project_commits_path(@project) - - commit = @project.commit - page.should have_content(@project.name) - page.should have_content(commit.message) - page.should have_content(commit.id.to_s[0..5]) -end - -Given /^I click atom feed link$/ do - click_link "Feed" -end - -Then /^I see commits atom feed$/ do - commit = CommitDecorator.decorate(@project.commit) - page.response_headers['Content-Type'].should have_content("application/atom+xml") - page.body.should have_selector("title", :text => "Recent commits to #{@project.name}") - page.body.should have_selector("author email", :text => commit.author_email) - page.body.should have_selector("entry summary", :text => commit.description) -end - -Then /^I see commit info$/ do - page.should have_content ValidCommit::MESSAGE - page.should have_content "Showing 1 changed file" -end - -Given /^I fill compare fields with refs$/ do - fill_in "from", :with => "master" - fill_in "to", :with => "stable" - click_button "Compare" -end - -Given /^I see compared refs$/ do - page.should have_content "Commits (27)" - page.should have_content "Compare View" - page.should have_content "Showing 73 changed files" -end - -Then /^I should see "(.*?)" recent branches list$/ do |arg1| - page.should have_content("Branches") - page.should have_content("master") -end - -Then /^I should see "(.*?)" all branches list$/ do |arg1| - page.should have_content("Branches") - page.should have_content("master") -end - -Then /^I should see "(.*?)" all tags list$/ do |arg1| - page.should have_content("Tags") - page.should have_content("v1.2.1") -end - -Then /^I should see "(.*?)" protected branches list$/ do |arg1| - within "table" do - page.should have_content "stable" - page.should_not have_content "master" - end -end - -Given /^project "(.*?)" has protected branches$/ do |arg1| - project = Project.find_by_name(arg1) - project.protected_branches.create(:name => "stable") -end diff --git a/features/step_definitions/project/project_issues_steps.rb b/features/step_definitions/project/project_issues_steps.rb deleted file mode 100644 index d78da53c..00000000 --- a/features/step_definitions/project/project_issues_steps.rb +++ /dev/null @@ -1,81 +0,0 @@ -Given /^project "(.*?)" have "(.*?)" open issue$/ do |arg1, arg2| - project = Project.find_by_name(arg1) - Factory.create(:issue, :title => arg2, :project => project, :author => project.users.first) -end - -Given /^project "(.*?)" have "(.*?)" closed issue$/ do |arg1, arg2| - project = Project.find_by_name(arg1) - Factory.create(:issue, :title => arg2, :project => project, :author => project.users.first, :closed => true) -end - -Given /^I should see "(.*?)" in issues$/ do |arg1| - page.should have_content arg1 -end - -Given /^I should not see "(.*?)" in issues$/ do |arg1| - page.should_not have_content arg1 -end - -Then /^I should see issue "(.*?)"$/ do |arg1| - issue = Issue.find_by_title(arg1) - page.should have_content issue.title - page.should have_content issue.author_name - page.should have_content issue.project.name -end - -Given /^I submit new issue "(.*?)"$/ do |arg1| - fill_in "issue_title", with: arg1 - click_button "Submit new issue" -end - -Given /^project "(.*?)" have issues tags:$/ do |arg1, table| - project = Project.find_by_name(arg1) - table.hashes.each do |hash| - Factory :issue, - project: project, - label_list: [hash[:name]] - end -end - -Given /^I visit project "(.*?)" labels page$/ do |arg1| - visit project_labels_path(Project.find_by_name(arg1)) -end - -Then /^I should see label "(.*?)"$/ do |arg1| - within ".labels-table" do - page.should have_content arg1 - end -end - -Given /^I fill in issue search with "(.*?)"$/ do |arg1| - # Because fill_in, with: "" triggers nothing - # we need to trigger a keyup event - if arg1 == '' - page.execute_script("$('.issue_search').val('').keyup();"); - end - fill_in 'issue_search', with: arg1 -end - -When /^I select milestone "(.*?)"$/ do |milestone_title| - select milestone_title, from: "milestone_id" -end - -Then /^I should see selected milestone with title "(.*?)"$/ do |milestone_title| - issues_milestone_selector = "#issue_milestone_id_chzn/a" - wait_until{ page.has_content?("Details") } - page.find(issues_milestone_selector).should have_content(milestone_title) -end - -When /^I select first assignee from "(.*?)" project$/ do |project_name| - project = Project.find_by_name project_name - first_assignee = project.users.first - select first_assignee.name, from: "assignee_id" -end - -Then /^I should see first assignee from "(.*?)" as selected assignee$/ do |project_name| - issues_assignee_selector = "#issue_assignee_id_chzn/a" - wait_until{ page.has_content?("Details") } - project = Project.find_by_name project_name - assignee_name = project.users.first.name - page.find(issues_assignee_selector).should have_content(assignee_name) -end diff --git a/features/step_definitions/project/project_merge_requests_steps.rb b/features/step_definitions/project/project_merge_requests_steps.rb deleted file mode 100644 index fddb18ad..00000000 --- a/features/step_definitions/project/project_merge_requests_steps.rb +++ /dev/null @@ -1,38 +0,0 @@ -Given /^project "(.*?)" have "(.*?)" open merge request$/ do |arg1, arg2| - project = Project.find_by_name(arg1) - Factory.create(:merge_request, :title => arg2, :project => project, :author => project.users.first) -end - -Given /^project "(.*?)" have "(.*?)" closed merge request$/ do |arg1, arg2| - project = Project.find_by_name(arg1) - Factory.create(:merge_request, :title => arg2, :project => project, :author => project.users.first, :closed => true) -end - -Then /^I should see "(.*?)" in merge requests$/ do |arg1| - page.should have_content arg1 -end - -Then /^I should not see "(.*?)" in merge requests$/ do |arg1| - page.should_not have_content arg1 -end - -Then /^I should see merge request "(.*?)"$/ do |arg1| - merge_request = MergeRequest.find_by_title(arg1) - page.should have_content(merge_request.title[0..10]) - page.should have_content(merge_request.target_branch) - page.should have_content(merge_request.source_branch) -end - -Given /^I submit new merge request "(.*?)"$/ do |arg1| - fill_in "merge_request_title", :with => arg1 - select "master", :from => "merge_request_source_branch" - select "stable", :from => "merge_request_target_branch" - click_button "Save" -end - -Then /^I should see closed merge request "(.*?)"$/ do |arg1| - mr = MergeRequest.find_by_title(arg1) - mr.closed.should be_true - page.should have_content "Closed by" -end - diff --git a/features/step_definitions/project/project_milestones_steps.rb b/features/step_definitions/project/project_milestones_steps.rb deleted file mode 100644 index 936c52df..00000000 --- a/features/step_definitions/project/project_milestones_steps.rb +++ /dev/null @@ -1,33 +0,0 @@ -Given /^project "(.*?)" has milestone "(.*?)"$/ do |arg1, arg2| - project = Project.find_by_name(arg1) - - milestone = Factory :milestone, - :title => arg2, - :project => project - - 3.times do |i| - issue = Factory :issue, - :project => project, - :milestone => milestone - end -end - -Then /^I should see active milestones$/ do - milestone = @project.milestones.first - page.should have_content(milestone.title[0..10]) - page.should have_content(milestone.expires_at) - page.should have_content("Browse Issues") -end - -Then /^I should see milestone "(.*?)"$/ do |arg1| - milestone = @project.milestones.find_by_title(arg1) - page.should have_content(milestone.title[0..10]) - page.should have_content(milestone.expires_at) - page.should have_content("Browse Issues") -end - -Given /^I submit new milestone "(.*?)"$/ do |arg1| - fill_in "milestone_title", :with => arg1 - click_button "Create milestone" -end - diff --git a/features/step_definitions/project/project_team_steps.rb b/features/step_definitions/project/project_team_steps.rb deleted file mode 100644 index 91885e46..00000000 --- a/features/step_definitions/project/project_team_steps.rb +++ /dev/null @@ -1,55 +0,0 @@ -Given /^gitlab user "(.*?)"$/ do |arg1| - Factory :user, :name => arg1 -end - -Given /^"(.*?)" is "(.*?)" developer$/ do |arg1, arg2| - user = User.find_by_name(arg1) - project = Project.find_by_name(arg2) - project.add_access(user, :write) -end - -Then /^I should be able to see myself in team$/ do - page.should have_content(@user.name) - page.should have_content(@user.email) -end - -Then /^I should see "(.*?)" in team list$/ do |arg1| - user = User.find_by_name(arg1) - page.should have_content(user.name) - page.should have_content(user.email) -end - -Given /^I select "(.*?)" as "(.*?)"$/ do |arg1, arg2| - user = User.find_by_name(arg1) - within "#new_team_member" do - select user.name, :from => "user_ids" - select arg2, :from => "project_access" - end - click_button "Save" -end - -Then /^I should see "(.*?)" in team list as "(.*?)"$/ do |arg1, arg2| - user = User.find_by_name(arg1) - role_id = find(".user_#{user.id} #team_member_project_access").value - role_id.should == UsersProject.access_roles[arg2].to_s -end - -Given /^I change "(.*?)" role to "(.*?)"$/ do |arg1, arg2| - user = User.find_by_name(arg1) - within ".user_#{user.id}" do - select arg2, :from => "team_member_project_access" - end -end - -Then /^I should see "(.*?)" team profile$/ do |arg1| - user = User.find_by_name(arg1) - page.should have_content(user.name) - page.should have_content(user.email) - page.should have_content("To team list") -end - -Then /^I should not see "(.*?)" in team list$/ do |arg1| - user = User.find_by_name(arg1) - page.should_not have_content(user.name) - page.should_not have_content(user.email) -end diff --git a/features/step_definitions/project/project_wiki_steps.rb b/features/step_definitions/project/project_wiki_steps.rb deleted file mode 100644 index 31fc050a..00000000 --- a/features/step_definitions/project/project_wiki_steps.rb +++ /dev/null @@ -1,14 +0,0 @@ -Given /^I create Wiki page$/ do - fill_in "Title", :with => 'Test title' - fill_in "Content", :with => '[link test](test)' - click_on "Save" -end - -Then /^I should see newly created wiki page$/ do - page.should have_content("Test title") - page.should have_content("link test") - - click_link "link test" - - page.should have_content("Editing page") -end diff --git a/features/step_definitions/project/projects_steps.rb b/features/step_definitions/project/projects_steps.rb deleted file mode 100644 index d22b805f..00000000 --- a/features/step_definitions/project/projects_steps.rb +++ /dev/null @@ -1,77 +0,0 @@ -When /^I visit new project page$/ do - visit new_project_path -end - -When /^fill project form with valid data$/ do - fill_in 'project_name', :with => 'NewProject' - fill_in 'project_code', :with => 'NPR' - fill_in 'project_path', :with => 'newproject' - click_button "Create project" -end - -Then /^I should see project page$/ do - current_path.should == project_path(Project.last) - page.should have_content('NewProject') -end - -Then /^I should see empty project instuctions$/ do - page.should have_content("git init") - page.should have_content("git remote") - page.should have_content(Project.last.url_to_repo) -end - -Given /^I own project "(.*?)"$/ do |arg1| - @project = Factory :project, :name => arg1 - @project.add_access(@user, :admin) -end - -Given /^I visit project "(.*?)" wall page$/ do |arg1| - project = Project.find_by_name(arg1) - visit wall_project_path(project) -end - -Then /^I should see project wall note "(.*?)"$/ do |arg1| - page.should have_content arg1 -end - -Given /^project "(.*?)" has comment "(.*?)"$/ do |arg1, arg2| - project = Project.find_by_name(arg1) - project.notes.create(:note => arg1, :author => project.users.first) -end - -Given /^I write new comment "(.*?)"$/ do |arg1| - fill_in "note_note", :with => arg1 - click_button "Add Comment" -end - -Given /^I visit project "(.*?)" page$/ do |arg1| - project = Project.find_by_name(arg1) - visit project_path(project) -end - -Given /^I visit project "(.*?)" network page$/ do |arg1| - project = Project.find_by_name(arg1) - - # Stub out find_all to speed this up (10 commits vs. 650) - commits = Grit::Commit.find_all(project.repo, nil, {max_count: 10}) - Grit::Commit.stub(:find_all).and_return(commits) - - visit graph_project_path(project) -end - -Given /^page should have network graph$/ do - page.should have_content "Project Network Graph" - within ".graph" do - page.should have_content "master" - page.should have_content "scss_refactor..." - end -end - -Given /^I leave a comment like "(.*?)"$/ do |arg1| - fill_in "note_note", :with => arg1 - click_button "Add Comment" -end - -Then /^I should see comment "(.*?)"$/ do |arg1| - page.should have_content(arg1) -end diff --git a/features/step_definitions/visit_steps.rb b/features/step_definitions/visit_steps.rb deleted file mode 100644 index 35fc6d44..00000000 --- a/features/step_definitions/visit_steps.rb +++ /dev/null @@ -1,91 +0,0 @@ -Given /^I visit project "(.*?)" issues page$/ do |arg1| - visit project_issues_path(Project.find_by_name(arg1)) -end - -Given /^I visit issue page "(.*?)"$/ do |arg1| - issue = Issue.find_by_title(arg1) - visit project_issue_path(issue.project, issue) -end - -Given /^I visit project "(.*?)" merge requests page$/ do |arg1| - visit project_merge_requests_path(Project.find_by_name(arg1)) -end - -Given /^I visit merge request page "(.*?)"$/ do |arg1| - mr = MergeRequest.find_by_title(arg1) - visit project_merge_request_path(mr.project, mr) -end - -Given /^I visit project "(.*?)" milestones page$/ do |arg1| - @project = Project.find_by_name(arg1) - visit project_milestones_path(@project) -end - -Given /^I visit project commits page$/ do - visit project_commits_path(@project) -end - -Given /^I visit compare refs page$/ do - visit compare_project_commits_path(@project) -end - -Given /^I visit project branches page$/ do - visit branches_project_repository_path(@project) -end - -Given /^I visit project commit page$/ do - visit project_commit_path(@project, ValidCommit::ID) -end - -Given /^I visit project tags page$/ do - visit tags_project_repository_path(@project) -end - -Given /^I click on commit link$/ do - visit project_commit_path(@project, ValidCommit::ID) -end - -Given /^I visit project source page$/ do - visit tree_project_ref_path(@project, @project.root_ref) -end - -Given /^I visit project source page for "(.*?)"$/ do |arg1| - visit tree_project_ref_path(@project, arg1) -end - -Given /^I visit blob file from repo$/ do - visit tree_project_ref_path(@project, ValidCommit::ID, :path => ValidCommit::BLOB_FILE_PATH) -end - -Given /^I visit project "(.*?)" team page$/ do |arg1| - visit team_project_path(Project.find_by_name(arg1)) -end - -Given /^I visit project wiki page$/ do - visit project_wiki_path(@project, :index) -end - -Given /^I visit profile page$/ do - visit profile_path -end - -Given /^I visit profile token page$/ do - visit profile_token_path -end - -Given /^I visit profile password page$/ do - visit profile_password_path -end - -Given /^I visit dashboard page$/ do - visit dashboard_path -end - -Given /^I visit dashboard issues page$/ do - visit dashboard_issues_path -end - -Given /^I visit dashboard merge requests page$/ do - visit dashboard_merge_requests_path -end - From d74f54736b8aabb3885648c44d7e253209b8e9e1 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Mon, 10 Sep 2012 01:51:02 -0700 Subject: [PATCH 240/357] rewrite dashboard feature steps using spinach --- features/dashboard/dashboard.feature | 7 +- features/dashboard/issues.feature | 6 +- features/dashboard/merge_requests.feature | 8 +- features/dashboard/search.feature | 10 +-- features/steps/dashboard.rb | 97 ++++++++++++++++++++++ features/steps/dashboard_issues.rb | 32 +++++++ features/steps/dashboard_merge_requests.rb | 33 ++++++++ features/steps/dashboard_search.rb | 23 +++++ features/support/env.rb | 6 ++ 9 files changed, 205 insertions(+), 17 deletions(-) create mode 100644 features/steps/dashboard.rb create mode 100644 features/steps/dashboard_issues.rb create mode 100644 features/steps/dashboard_merge_requests.rb create mode 100644 features/steps/dashboard_search.rb diff --git a/features/dashboard/dashboard.feature b/features/dashboard/dashboard.feature index 98bb4980..9756bc7f 100644 --- a/features/dashboard/dashboard.feature +++ b/features/dashboard/dashboard.feature @@ -1,9 +1,9 @@ Feature: Dashboard - Background: - Given I signin as a user + Background: + Given I sign in as a user And I own project "Shop" And project "Shop" has push event - And I visit dashboard page + And I visit dashboard page Scenario: I should see projects list Then I should see "New Project" link @@ -25,4 +25,3 @@ Feature: Dashboard And user with name "John Doe" left project "Shop" When I visit dashboard page Then I should see "John Doe left project Shop" event - diff --git a/features/dashboard/issues.feature b/features/dashboard/issues.feature index c3361bb3..895b89aa 100644 --- a/features/dashboard/issues.feature +++ b/features/dashboard/issues.feature @@ -1,8 +1,8 @@ Feature: Dashboard Issues - Background: - Given I signin as a user + Background: + Given I sign in as a user And I have assigned issues - And I visit dashboard issues page + And I visit dashboard issues page Scenario: I should see issues list Then I should see issues assigned to me diff --git a/features/dashboard/merge_requests.feature b/features/dashboard/merge_requests.feature index 90b8749c..cad65b0d 100644 --- a/features/dashboard/merge_requests.feature +++ b/features/dashboard/merge_requests.feature @@ -1,8 +1,8 @@ -Feature: Dashboard MR - Background: - Given I signin as a user +Feature: Dashboard Merge Requests + Background: + Given I sign in as a user And I have authored merge requests - And I visit dashboard merge requests page + And I visit dashboard merge requests page Scenario: I should see projects list Then I should see my merge requests diff --git a/features/dashboard/search.feature b/features/dashboard/search.feature index f053fe86..91d870f4 100644 --- a/features/dashboard/search.feature +++ b/features/dashboard/search.feature @@ -1,11 +1,9 @@ Feature: Dashboard Search - Background: - Given I signin as a user + Background: + Given I sign in as a user And I own project "Shop" - And I visit dashboard search page + And I visit dashboard search page - Scenario: I should see project i'm looking for + Scenario: I should see project I am looking for Given I search for "Sho" Then I should see "Shop" project link - - diff --git a/features/steps/dashboard.rb b/features/steps/dashboard.rb new file mode 100644 index 00000000..e69686b3 --- /dev/null +++ b/features/steps/dashboard.rb @@ -0,0 +1,97 @@ +class Dashboard < Spinach::FeatureSteps + Then 'I should see "New Project" link' do + page.should have_link "New Project" + end + + Then 'I should see "Shop" project link' do + page.should have_link "Shop" + end + + Then 'I should see project "Shop" activity feed' do + project = Project.find_by_name("Shop") + page.should have_content "#{@user.name} pushed new branch new_design at #{project.name}" + end + + Then 'I should see last push widget' do + page.should have_content "Your pushed to branch new_design" + page.should have_link "Create Merge Request" + end + + And 'I click "Create Merge Request" link' do + click_link "Create Merge Request" + end + + Then 'I see prefilled new Merge Request page' do + current_path.should == new_project_merge_request_path(@project) + find("#merge_request_source_branch").value.should == "new_design" + find("#merge_request_target_branch").value.should == "master" + find("#merge_request_title").value.should == "New Design" + end + + Given 'user with name "John Doe" joined project "Shop"' do + user = Factory.create(:user, {name: "John Doe"}) + project = Project.find_by_name "Shop" + Event.create( + project: project, + author_id: user.id, + action: Event::Joined + ) + end + + When 'I visit dashboard page' do + visit dashboard_path + end + + Then 'I should see "John Doe joined project Shop" event' do + page.should have_content "John Doe joined project Shop" + end + + And 'user with name "John Doe" left project "Shop"' do + user = User.find_by_name "John Doe" + project = Project.find_by_name "Shop" + Event.create( + project: project, + author_id: user.id, + action: Event::Left + ) + end + + Then 'I should see "John Doe left project Shop" event' do + page.should have_content "John Doe left project Shop" + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I own project "Shop"' do + @project = Factory :project, :name => 'Shop' + @project.add_access(@user, :admin) + end + + And 'project "Shop" has push event' do + @project = Project.find_by_name("Shop") + + data = { + :before => "0000000000000000000000000000000000000000", + :after => "0220c11b9a3e6c69dc8fd35321254ca9a7b98f7e", + :ref => "refs/heads/new_design", + :user_id => @user.id, + :user_name => @user.name, + :repository => { + :name => @project.name, + :url => "localhost/rubinius", + :description => "", + :homepage => "localhost/rubinius", + :private => true + } + } + + @event = Event.create( + :project => @project, + :action => Event::Pushed, + :data => data, + :author_id => @user.id + ) + end +end diff --git a/features/steps/dashboard_issues.rb b/features/steps/dashboard_issues.rb new file mode 100644 index 00000000..8704d2ef --- /dev/null +++ b/features/steps/dashboard_issues.rb @@ -0,0 +1,32 @@ +class DashboardIssues < Spinach::FeatureSteps + Then 'I should see issues assigned to me' do + issues = @user.issues + issues.each do |issue| + page.should have_content(issue.title[0..10]) + page.should have_content(issue.project.name) + end + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I have assigned issues' do + project = Factory :project + project.add_access(@user, :read, :write) + + issue1 = Factory :issue, + :author => @user, + :assignee => @user, + :project => project + + issue2 = Factory :issue, + :author => @user, + :assignee => @user, + :project => project + end + + And 'I visit dashboard issues page' do + visit dashboard_issues_path + end +end diff --git a/features/steps/dashboard_merge_requests.rb b/features/steps/dashboard_merge_requests.rb new file mode 100644 index 00000000..3e057ef9 --- /dev/null +++ b/features/steps/dashboard_merge_requests.rb @@ -0,0 +1,33 @@ +class DashboardMergeRequests < Spinach::FeatureSteps + Then 'I should see my merge requests' do + merge_requests = @user.merge_requests + merge_requests.each do |mr| + page.should have_content(mr.title[0..10]) + page.should have_content(mr.project.name) + end + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I have authored merge requests' do + project1 = Factory :project + project2 = Factory :project + + project1.add_access(@user, :read, :write) + project2.add_access(@user, :read, :write) + + merge_request1 = Factory :merge_request, + :author => @user, + :project => project1 + + merge_request2 = Factory :merge_request, + :author => @user, + :project => project2 + end + + And 'I visit dashboard merge requests page' do + visit dashboard_merge_requests_path + end +end diff --git a/features/steps/dashboard_search.rb b/features/steps/dashboard_search.rb new file mode 100644 index 00000000..122774fc --- /dev/null +++ b/features/steps/dashboard_search.rb @@ -0,0 +1,23 @@ +class DashboardSearch < Spinach::FeatureSteps + Given 'I search for "Sho"' do + fill_in "dashboard_search", :with => "Sho" + click_button "Search" + end + + Then 'I should see "Shop" project link' do + page.should have_link "Shop" + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I own project "Shop"' do + @project = Factory :project, :name => "Shop" + @project.add_access(@user, :admin) + end + + And 'I visit dashboard search page' do + visit search_path + end +end diff --git a/features/support/env.rb b/features/support/env.rb index aa2f2958..2900e1cb 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -4,6 +4,12 @@ require './config/environment' require 'rspec' require 'database_cleaner' +%w(login_helpers stubbed_repository).each do |f| + require Rails.root.join('spec', 'support', f) +end + +include LoginHelpers + DatabaseCleaner.strategy = :transaction Spinach.hooks.before_scenario { DatabaseCleaner.start } Spinach.hooks.after_scenario { DatabaseCleaner.clean } From 7aeb92b8e4bb279346d9dcec7bbca1725cec8eb1 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Mon, 10 Sep 2012 02:40:51 -0700 Subject: [PATCH 241/357] rewrite profile feature steps using spinach --- features/profile/profile.feature | 4 +-- features/profile/ssh_keys.feature | 13 +++---- features/steps/profile.rb | 57 ++++++++++++++++++++++++++++++ features/steps/profile_ssh_keys.rb | 50 ++++++++++++++++++++++++++ 4 files changed, 114 insertions(+), 10 deletions(-) create mode 100644 features/steps/profile.rb create mode 100644 features/steps/profile_ssh_keys.rb diff --git a/features/profile/profile.feature b/features/profile/profile.feature index afda4b55..f4b2f198 100644 --- a/features/profile/profile.feature +++ b/features/profile/profile.feature @@ -1,6 +1,6 @@ Feature: Profile - Background: - Given I signin as a user + Background: + Given I sign in as a user Scenario: I look at my profile Given I visit profile page diff --git a/features/profile/ssh_keys.feature b/features/profile/ssh_keys.feature index c81503ed..018d124e 100644 --- a/features/profile/ssh_keys.feature +++ b/features/profile/ssh_keys.feature @@ -1,13 +1,10 @@ -Feature: SSH Keys - Background: - Given I signin as a user - And I have ssh keys: - | title | - | ssh-rsa Work | - | ssh-rsa Home | +Feature: Profile SSH Keys + Background: + Given I sign in as a user + And I have ssh key "ssh-rsa Work" And I visit profile keys page - Scenario: I should see SSH keys + Scenario: I should see ssh keys Then I should see my ssh keys Scenario: Add new ssh key diff --git a/features/steps/profile.rb b/features/steps/profile.rb new file mode 100644 index 00000000..c7e6be3f --- /dev/null +++ b/features/steps/profile.rb @@ -0,0 +1,57 @@ +class Profile < Spinach::FeatureSteps + Given 'I visit profile page' do + visit profile_path + end + + Then 'I should see my profile info' do + page.should have_content "Profile" + page.should have_content @user.name + page.should have_content @user.email + end + + Then 'I change my contact info' do + fill_in "user_skype", :with => "testskype" + fill_in "user_linkedin", :with => "testlinkedin" + fill_in "user_twitter", :with => "testtwitter" + click_button "Save" + @user.reload + end + + And 'I should see new contact info' do + @user.skype.should == 'testskype' + @user.linkedin.should == 'testlinkedin' + @user.twitter.should == 'testtwitter' + end + + Given 'I visit profile password page' do + visit profile_password_path + end + + Then 'I change my password' do + fill_in "user_password", :with => "222333" + fill_in "user_password_confirmation", :with => "222333" + click_button "Save" + end + + And 'I should be redirected to sign in page' do + current_path.should == new_user_session_path + end + + Given 'I visit profile token page' do + visit profile_token_path + end + + Then 'I reset my token' do + @old_token = @user.private_token + click_button "Reset" + end + + And 'I should see new token' do + find("#token").value.should_not == @old_token + find("#token").value.should == @user.reload.private_token + end + + Given 'I sign in as a user' do + login_as :user + end +end diff --git a/features/steps/profile_ssh_keys.rb b/features/steps/profile_ssh_keys.rb new file mode 100644 index 00000000..9360f66f --- /dev/null +++ b/features/steps/profile_ssh_keys.rb @@ -0,0 +1,50 @@ +class ProfileSshKeys < Spinach::FeatureSteps + Then 'I should see my ssh keys' do + @user.keys.each do |key| + page.should have_content(key.title) + end + end + + Given 'I click link "Add new"' do + click_link "Add new" + end + + And 'I submit new ssh key "Laptop"' do + fill_in "key_title", :with => "Laptop" + fill_in "key_key", :with => "ssh-rsa publickey234=" + click_button "Save" + end + + Then 'I should see new ssh key "Laptop"' do + key = Key.find_by_title("Laptop") + page.should have_content(key.title) + page.should have_content(key.key) + current_path.should == key_path(key) + end + + Given 'I click link "Work"' do + click_link "Work" + end + + And 'I click link "Remove"' do + click_link "Remove" + end + + Then 'I visit profile keys page' do + visit keys_path + end + + And 'I should not see "Work" ssh key' do + within "#keys-table" do + page.should_not have_content "Work" + end + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I have ssh key "ssh-rsa Work"' do + Factory :key, :user => @user, :title => "ssh-rsa Work", :key => "jfKLJDFKSFJSHFJssh-rsa Work" + end +end From a065557208d6076ec869144346e06c7de714389c Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Mon, 10 Sep 2012 13:49:00 +0300 Subject: [PATCH 242/357] Common errors method added --- lib/api/helpers.rb | 12 ++++++++---- spec/requests/api/projects_spec.rb | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb index 3a385f15..054eb2d3 100644 --- a/lib/api/helpers.rb +++ b/lib/api/helpers.rb @@ -31,22 +31,26 @@ module Gitlab # error helpers def forbidden! - error!({'message' => '403 Forbidden'}, 403) + render_api_error!('403 Forbidden', 403) end def not_found!(resource = nil) message = ["404"] message << resource if resource message << "Not Found" - error!({'message' => message.join(' ')}, 404) + render_api_error!(message.join(' '), 404) end def unauthorized! - error!({'message' => '401 Unauthorized'}, 401) + render_api_error!('401 Unauthorized', 401) end def not_allowed! - error!({'message' => 'method not allowed'}, 405) + render_api_error!('Method Not Allowed', 405) + end + + def render_api_error!(message, status) + error!({'message' => message}, status) end private diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index 439aecce..9388403f 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -85,7 +85,7 @@ describe Gitlab::API do it "should return a 404 error if not found" do get api("/projects/42", user) response.status.should == 404 - json_response['message'].should == '404 Not found' + json_response['message'].should == '404 Not Found' end end From 080bd12e167dceb3274bb488b7be787379d126b4 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Mon, 10 Sep 2012 04:27:11 -0700 Subject: [PATCH 243/357] rewrite project commits features using spinach --- .../commits/branches.feature | 15 +++-- .../commits/commit_comments.feature | 6 +- .../commits/commits.feature | 9 ++- .../commits/tags.feature | 9 +-- .../create_project.feature | 0 .../{projects => project}/deploy_keys.feature | 0 .../issues/issues.feature | 0 .../issues/labels.feature | 0 .../issues/milestones.feature | 0 .../merge_requests.feature | 0 .../{projects => project}/network.feature | 0 .../{projects => project}/project.feature | 0 .../{projects => project}/snippets.feature | 0 .../source/browse_files.feature | 0 .../source/git_blame.feature | 0 .../team_management.feature | 0 features/{projects => project}/wall.feature | 0 .../{projects => project}/web_hooks.feature | 0 features/{projects => project}/wiki.feature | 0 features/steps/project_browse_branches.rb | 44 ++++++++++++++ features/steps/project_browse_commits.rb | 60 +++++++++++++++++++ features/steps/project_browse_tags.rb | 19 ++++++ features/steps/project_comment_commit.rb | 23 +++++++ features/support/env.rb | 13 +++- 24 files changed, 178 insertions(+), 20 deletions(-) rename features/{projects => project}/commits/branches.feature (66%) rename features/{projects => project}/commits/commit_comments.feature (72%) rename features/{projects => project}/commits/commits.feature (82%) rename features/{projects => project}/commits/tags.feature (53%) rename features/{projects => project}/create_project.feature (100%) rename features/{projects => project}/deploy_keys.feature (100%) rename features/{projects => project}/issues/issues.feature (100%) rename features/{projects => project}/issues/labels.feature (100%) rename features/{projects => project}/issues/milestones.feature (100%) rename features/{projects => project}/merge_requests.feature (100%) rename features/{projects => project}/network.feature (100%) rename features/{projects => project}/project.feature (100%) rename features/{projects => project}/snippets.feature (100%) rename features/{projects => project}/source/browse_files.feature (100%) rename features/{projects => project}/source/git_blame.feature (100%) rename features/{projects => project}/team_management.feature (100%) rename features/{projects => project}/wall.feature (100%) rename features/{projects => project}/web_hooks.feature (100%) rename features/{projects => project}/wiki.feature (100%) create mode 100644 features/steps/project_browse_branches.rb create mode 100644 features/steps/project_browse_commits.rb create mode 100644 features/steps/project_browse_tags.rb create mode 100644 features/steps/project_comment_commit.rb diff --git a/features/projects/commits/branches.feature b/features/project/commits/branches.feature similarity index 66% rename from features/projects/commits/branches.feature rename to features/project/commits/branches.feature index 74575c51..4fa4dc26 100644 --- a/features/projects/commits/branches.feature +++ b/features/project/commits/branches.feature @@ -1,6 +1,6 @@ -Feature: Browse branches - Background: - Given I signin as a user +Feature: Project Browse branches + Background: + Given I sign in as a user And I own project "Shop" And project "Shop" has protected branches Given I visit project branches page @@ -16,8 +16,11 @@ Feature: Browse branches Given I click link "Protected" Then I should see "Shop" protected branches list - Scenario: I can download project by branch + # @wip + # Scenario: I can download project by branch - Scenario: I can view protected branches + # @wip + # Scenario: I can view protected branches - Scenario: I can manage protected branches + # @wip + # Scenario: I can manage protected branches diff --git a/features/projects/commits/commit_comments.feature b/features/project/commits/commit_comments.feature similarity index 72% rename from features/projects/commits/commit_comments.feature rename to features/project/commits/commit_comments.feature index 9bd56d29..5acf541a 100644 --- a/features/projects/commits/commit_comments.feature +++ b/features/project/commits/commit_comments.feature @@ -1,6 +1,6 @@ -Feature: Comment commit - Background: - Given I signin as a user +Feature: Project Comment commit + Background: + Given I sign in as a user And I own project "Shop" Given I visit project commit page diff --git a/features/projects/commits/commits.feature b/features/project/commits/commits.feature similarity index 82% rename from features/projects/commits/commits.feature rename to features/project/commits/commits.feature index 69d39d78..53de6e6a 100644 --- a/features/projects/commits/commits.feature +++ b/features/project/commits/commits.feature @@ -1,6 +1,6 @@ -Feature: Browse commits - Background: - Given I signin as a user +Feature: Project Browse commits + Background: + Given I sign in as a user And I own project "Shop" Given I visit project commits page @@ -18,5 +18,4 @@ Feature: Browse commits Scenario: I compare refs Given I visit compare refs page And I fill compare fields with refs - And I see compared refs - + And I see compared refs diff --git a/features/projects/commits/tags.feature b/features/project/commits/tags.feature similarity index 53% rename from features/projects/commits/tags.feature rename to features/project/commits/tags.feature index f7899fc3..1ac0f8bf 100644 --- a/features/projects/commits/tags.feature +++ b/features/project/commits/tags.feature @@ -1,10 +1,11 @@ -Feature: Browse tags - Background: - Given I signin as a user +Feature: Project Browse tags + Background: + Given I sign in as a user And I own project "Shop" Given I visit project tags page Scenario: I can see all git tags Then I should see "Shop" all tags list - Scenario: I can download project by tag + # @wip + # Scenario: I can download project by tag diff --git a/features/projects/create_project.feature b/features/project/create_project.feature similarity index 100% rename from features/projects/create_project.feature rename to features/project/create_project.feature diff --git a/features/projects/deploy_keys.feature b/features/project/deploy_keys.feature similarity index 100% rename from features/projects/deploy_keys.feature rename to features/project/deploy_keys.feature diff --git a/features/projects/issues/issues.feature b/features/project/issues/issues.feature similarity index 100% rename from features/projects/issues/issues.feature rename to features/project/issues/issues.feature diff --git a/features/projects/issues/labels.feature b/features/project/issues/labels.feature similarity index 100% rename from features/projects/issues/labels.feature rename to features/project/issues/labels.feature diff --git a/features/projects/issues/milestones.feature b/features/project/issues/milestones.feature similarity index 100% rename from features/projects/issues/milestones.feature rename to features/project/issues/milestones.feature diff --git a/features/projects/merge_requests.feature b/features/project/merge_requests.feature similarity index 100% rename from features/projects/merge_requests.feature rename to features/project/merge_requests.feature diff --git a/features/projects/network.feature b/features/project/network.feature similarity index 100% rename from features/projects/network.feature rename to features/project/network.feature diff --git a/features/projects/project.feature b/features/project/project.feature similarity index 100% rename from features/projects/project.feature rename to features/project/project.feature diff --git a/features/projects/snippets.feature b/features/project/snippets.feature similarity index 100% rename from features/projects/snippets.feature rename to features/project/snippets.feature diff --git a/features/projects/source/browse_files.feature b/features/project/source/browse_files.feature similarity index 100% rename from features/projects/source/browse_files.feature rename to features/project/source/browse_files.feature diff --git a/features/projects/source/git_blame.feature b/features/project/source/git_blame.feature similarity index 100% rename from features/projects/source/git_blame.feature rename to features/project/source/git_blame.feature diff --git a/features/projects/team_management.feature b/features/project/team_management.feature similarity index 100% rename from features/projects/team_management.feature rename to features/project/team_management.feature diff --git a/features/projects/wall.feature b/features/project/wall.feature similarity index 100% rename from features/projects/wall.feature rename to features/project/wall.feature diff --git a/features/projects/web_hooks.feature b/features/project/web_hooks.feature similarity index 100% rename from features/projects/web_hooks.feature rename to features/project/web_hooks.feature diff --git a/features/projects/wiki.feature b/features/project/wiki.feature similarity index 100% rename from features/projects/wiki.feature rename to features/project/wiki.feature diff --git a/features/steps/project_browse_branches.rb b/features/steps/project_browse_branches.rb new file mode 100644 index 00000000..9fb2e59d --- /dev/null +++ b/features/steps/project_browse_branches.rb @@ -0,0 +1,44 @@ +class ProjectBrowseBranches < Spinach::FeatureSteps + Then 'I should see "Shop" recent branches list' do + page.should have_content "Branches" + page.should have_content "master" + end + + Given 'I click link "All"' do + click_link "All" + end + + Then 'I should see "Shop" all branches list' do + page.should have_content "Branches" + page.should have_content "master" + end + + Given 'I click link "Protected"' do + click_link "Protected" + end + + Then 'I should see "Shop" protected branches list' do + within "table" do + page.should have_content "stable" + page.should_not have_content "master" + end + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I own project "Shop"' do + @project = Factory :project, :name => "Shop" + @project.add_access(@user, :admin) + end + + And 'project "Shop" has protected branches' do + project = Project.find_by_name("Shop") + project.protected_branches.create(:name => "stable") + end + + Given 'I visit project branches page' do + visit branches_project_repository_path(@project) + end +end diff --git a/features/steps/project_browse_commits.rb b/features/steps/project_browse_commits.rb new file mode 100644 index 00000000..71c592a7 --- /dev/null +++ b/features/steps/project_browse_commits.rb @@ -0,0 +1,60 @@ +class ProjectBrowseCommits < Spinach::FeatureSteps + Then 'I see project commits' do + current_path.should == project_commits_path(@project) + + commit = @project.commit + page.should have_content(@project.name) + page.should have_content(commit.message) + page.should have_content(commit.id.to_s[0..5]) + end + + Given 'I click atom feed link' do + click_link "Feed" + end + + Then 'I see commits atom feed' do + commit = CommitDecorator.decorate(@project.commit) + page.response_headers['Content-Type'].should have_content("application/atom+xml") + page.body.should have_selector("title", :text => "Recent commits to #{@project.name}") + page.body.should have_selector("author email", :text => commit.author_email) + page.body.should have_selector("entry summary", :text => commit.description) + end + + Given 'I click on commit link' do + visit project_commit_path(@project, ValidCommit::ID) + end + + Then 'I see commit info' do + page.should have_content ValidCommit::MESSAGE + page.should have_content "Showing 1 changed file" + end + + Given 'I visit compare refs page' do + visit compare_project_commits_path(@project) + end + + And 'I fill compare fields with refs' do + fill_in "from", :with => "master" + fill_in "to", :with => "stable" + click_button "Compare" + end + + And 'I see compared refs' do + page.should have_content "Commits (27)" + page.should have_content "Compare View" + page.should have_content "Showing 73 changed files" + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I own project "Shop"' do + @project = Factory :project, :name => "Shop" + @project.add_access(@user, :admin) + end + + Given 'I visit project commits page' do + visit project_commits_path(@project) + end +end diff --git a/features/steps/project_browse_tags.rb b/features/steps/project_browse_tags.rb new file mode 100644 index 00000000..c6bea691 --- /dev/null +++ b/features/steps/project_browse_tags.rb @@ -0,0 +1,19 @@ +class ProjectBrowseTags < Spinach::FeatureSteps + Then 'I should see "Shop" all tags list' do + page.should have_content "Tags" + page.should have_content "v1.2.1" + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I own project "Shop"' do + @project = Factory :project, :name => "Shop" + @project.add_access(@user, :admin) + end + + Given 'I visit project tags page' do + visit tags_project_repository_path(@project) + end +end diff --git a/features/steps/project_comment_commit.rb b/features/steps/project_comment_commit.rb new file mode 100644 index 00000000..04e94c7d --- /dev/null +++ b/features/steps/project_comment_commit.rb @@ -0,0 +1,23 @@ +class ProjectCommentCommit < Spinach::FeatureSteps + Given 'I leave a comment like "XML attached"' do + fill_in "note_note", :with => "XML attached" + click_button "Add Comment" + end + + Then 'I should see comment "XML attached"' do + page.should have_content "XML attached" + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I own project "Shop"' do + @project = Factory :project, :name => "Shop" + @project.add_access(@user, :admin) + end + + Given 'I visit project commit page' do + visit project_commit_path(@project, ValidCommit::ID) + end +end diff --git a/features/support/env.rb b/features/support/env.rb index 2900e1cb..38d828a2 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -4,12 +4,21 @@ require './config/environment' require 'rspec' require 'database_cleaner' -%w(login_helpers stubbed_repository).each do |f| +%w(gitolite_stub login_helpers stubbed_repository valid_commit).each do |f| require Rails.root.join('spec', 'support', f) end include LoginHelpers +include GitoliteStub -DatabaseCleaner.strategy = :transaction +WebMock.allow_net_connect! + +DatabaseCleaner.strategy = :truncation Spinach.hooks.before_scenario { DatabaseCleaner.start } Spinach.hooks.after_scenario { DatabaseCleaner.clean } + +Spinach.hooks.before_run do + RSpec::Mocks::setup self + + stub_gitolite! +end From a3d22297dcd7b547412cf0284a27ef11f90c20ad Mon Sep 17 00:00:00 2001 From: Minoru NAKATA Date: Mon, 10 Sep 2012 20:35:09 +0900 Subject: [PATCH 244/357] fix haml template error for ldap login. --- app/views/devise/sessions/_new_ldap.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/devise/sessions/_new_ldap.html.haml b/app/views/devise/sessions/_new_ldap.html.haml index 85010df7..4233aa61 100644 --- a/app/views/devise/sessions/_new_ldap.html.haml +++ b/app/views/devise/sessions/_new_ldap.html.haml @@ -15,7 +15,7 @@ $(function() { $('#new_user').toggle(); }); - = form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => { :class => "login-box" }) do |f| += form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => { :class => "login-box" }) do |f| = f.text_field :email, :class => "text top", :placeholder => "Email" = f.password_field :password, :class => "text bottom", :placeholder => "Password" - if devise_mapping.rememberable? From 698500dd786cc931cabeb0f44087c0cd11bd0131 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Mon, 10 Sep 2012 05:34:01 -0700 Subject: [PATCH 245/357] add spinach steps for project issues and source features --- features/project/issues/issues.feature | 5 +- features/project/issues/labels.feature | 11 +- features/project/issues/milestones.feature | 6 +- features/project/source/browse_files.feature | 14 +- features/project/source/git_blame.feature | 10 +- features/steps/project_browse_files.rb | 51 ++++++ features/steps/project_browse_git_repo.rb | 28 ++++ features/steps/project_issues.rb | 160 +++++++++++++++++++ features/steps/project_labels.rb | 33 ++++ features/steps/project_milestones.rb | 51 ++++++ features/support/env.rb | 2 + 11 files changed, 345 insertions(+), 26 deletions(-) create mode 100644 features/steps/project_browse_files.rb create mode 100644 features/steps/project_browse_git_repo.rb create mode 100644 features/steps/project_issues.rb create mode 100644 features/steps/project_labels.rb create mode 100644 features/steps/project_milestones.rb diff --git a/features/project/issues/issues.feature b/features/project/issues/issues.feature index b2301b3f..596e8bd7 100644 --- a/features/project/issues/issues.feature +++ b/features/project/issues/issues.feature @@ -1,6 +1,6 @@ -Feature: Issues +Feature: Project Issues Background: - Given I signin as a user + Given I sign in as a user And I own project "Shop" And project "Shop" have "Release 0.4" open issue And project "Shop" have "Release 0.3" closed issue @@ -79,4 +79,3 @@ Feature: Issues When I select first assignee from "Shop" project And I click link "New Issue" Then I should see first assignee from "Shop" as selected assignee - diff --git a/features/project/issues/labels.feature b/features/project/issues/labels.feature index 5a20bfd6..e601a41b 100644 --- a/features/project/issues/labels.feature +++ b/features/project/issues/labels.feature @@ -1,12 +1,9 @@ -Feature: Labels +Feature: Project Labels Background: - Given I signin as a user + Given I sign in as a user And I own project "Shop" - And project "Shop" have issues tags: - | name | - | bug | - | feature | - Given I visit project "Shop" labels page + And project "Shop" have issues tags: "bug", "feature" + Given I visit project "Shop" labels page Scenario: I should see active milestones Then I should see label "bug" diff --git a/features/project/issues/milestones.feature b/features/project/issues/milestones.feature index d78096a4..a57f67d6 100644 --- a/features/project/issues/milestones.feature +++ b/features/project/issues/milestones.feature @@ -1,9 +1,9 @@ -Feature: Milestones +Feature: Project Milestones Background: - Given I signin as a user + Given I sign in as a user And I own project "Shop" And project "Shop" has milestone "v2.2" - Given I visit project "Shop" milestones page + Given I visit project "Shop" milestones page Scenario: I should see active milestones Then I should see milestone "v2.2" diff --git a/features/project/source/browse_files.feature b/features/project/source/browse_files.feature index 04aebc19..b12b0ee3 100644 --- a/features/project/source/browse_files.feature +++ b/features/project/source/browse_files.feature @@ -1,6 +1,6 @@ -Feature: Browse git repo - Background: - Given I signin as a user +Feature: Project Browse files + Background: + Given I sign in as a user And I own project "Shop" Given I visit project source page @@ -12,12 +12,10 @@ Feature: Browse git repo Then I should see files from repository for "8470d70" Scenario: I browse file content - Given I click on file from repo + Given I click on "Gemfile" file in repo Then I should see it content Scenario: I browse raw file - Given I visit blob file from repo - And I click on raw button + Given I visit blob file from repo + And I click link "raw" Then I should see raw file content - - diff --git a/features/project/source/git_blame.feature b/features/project/source/git_blame.feature index 6aa6be47..93ed20a8 100644 --- a/features/project/source/git_blame.feature +++ b/features/project/source/git_blame.feature @@ -1,10 +1,10 @@ -Feature: Browse git repo - Background: - Given I signin as a user +Feature: Project Browse git repo + Background: + Given I sign in as a user And I own project "Shop" Given I visit project source page Scenario: I blame file - Given I click on file from repo + Given I click on "Gemfile" file in repo And I click blame button - Then I should see git file blame + Then I should see git file blame diff --git a/features/steps/project_browse_files.rb b/features/steps/project_browse_files.rb new file mode 100644 index 00000000..ad320584 --- /dev/null +++ b/features/steps/project_browse_files.rb @@ -0,0 +1,51 @@ +class ProjectBrowseFiles < Spinach::FeatureSteps + Then 'I should see files from repository' do + page.should have_content "app" + page.should have_content "History" + page.should have_content "Gemfile" + end + + Given 'I visit project source page for "8470d70"' do + visit tree_project_ref_path(@project, "8470d70") + end + + Then 'I should see files from repository for "8470d70"' do + current_path.should == tree_project_ref_path(@project, "8470d70") + page.should have_content "app" + page.should have_content "History" + page.should have_content "Gemfile" + end + + Given 'I click on "Gemfile" file in repo' do + click_link "Gemfile" + end + + Then 'I should see it content' do + page.should have_content "rubygems.org" + end + + Given 'I visit blob file from repo' do + visit tree_project_ref_path(@project, ValidCommit::ID, :path => ValidCommit::BLOB_FILE_PATH) + end + + And 'I click link "raw"' do + click_link "raw" + end + + Then 'I should see raw file content' do + page.source.should == ValidCommit::BLOB_FILE + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I own project "Shop"' do + @project = Factory :project, :name => "Shop" + @project.add_access(@user, :admin) + end + + Given 'I visit project source page' do + visit tree_project_ref_path(@project, @project.root_ref) + end +end diff --git a/features/steps/project_browse_git_repo.rb b/features/steps/project_browse_git_repo.rb new file mode 100644 index 00000000..56b33a90 --- /dev/null +++ b/features/steps/project_browse_git_repo.rb @@ -0,0 +1,28 @@ +class ProjectBrowseGitRepo < Spinach::FeatureSteps + Given 'I click on "Gemfile" file in repo' do + click_link "Gemfile" + end + + And 'I click blame button' do + click_link "blame" + end + + Then 'I should see git file blame' do + page.should have_content "rubygems.org" + page.should have_content "Dmitriy Zaporozhets" + page.should have_content "bc3735004cb Moving to rails 3.2" + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I own project "Shop"' do + @project = Factory :project, :name => "Shop" + @project.add_access(@user, :admin) + end + + Given 'I visit project source page' do + visit tree_project_ref_path(@project, @project.root_ref) + end +end diff --git a/features/steps/project_issues.rb b/features/steps/project_issues.rb new file mode 100644 index 00000000..c3fca0c6 --- /dev/null +++ b/features/steps/project_issues.rb @@ -0,0 +1,160 @@ +class ProjectIssues < Spinach::FeatureSteps + Given 'I should see "Release 0.4" in issues' do + page.should have_content "Release 0.4" + end + + And 'I should not see "Release 0.3" in issues' do + page.should_not have_content "Release 0.3" + end + + Given 'I click link "Closed"' do + click_link "Closed" + end + + Then 'I should see "Release 0.3" in issues' do + page.should have_content "Release 0.3" + end + + And 'I should not see "Release 0.4" in issues' do + page.should_not have_content "Release 0.4" + end + + Given 'I click link "All"' do + click_link "All" + end + + Given 'I click link "Release 0.4"' do + click_link "Release 0.4" + end + + Then 'I should see issue "Release 0.4"' do + page.should have_content "Release 0.4" + end + + Given 'I click link "New Issue"' do + click_link "New Issue" + end + + And 'I submit new issue "500 error on profile"' do + fill_in "issue_title", :with => "500 error on profile" + click_button "Submit new issue" + end + + Given 'I click link "500 error on profile"' do + click_link "500 error on profile" + end + + Then 'I should see issue "500 error on profile"' do + issue = Issue.find_by_title("500 error on profile") + page.should have_content issue.title + page.should have_content issue.author_name + page.should have_content issue.project.name + end + + Given 'I visit issue page "Release 0.4"' do + issue = Issue.find_by_title("Release 0.4") + visit project_issue_path(issue.project, issue) + end + + And 'I leave a comment like "XML attached"' do + fill_in "note_note", :with => "XML attached" + click_button "Add Comment" + end + + Then 'I should see comment "XML attached"' do + page.should have_content "XML attached" + end + + Given 'I fill in issue search with "Release"' do + fill_in 'issue_search', with: "Release" + end + + Given 'I fill in issue search with "Bug"' do + fill_in 'issue_search', with: "Bug" + end + + And 'I fill in issue search with "0.3"' do + fill_in 'issue_search', with: "0.3" + end + + And 'I fill in issue search with "Something"' do + fill_in 'issue_search', with: "Something" + end + + And 'I fill in issue search with ""' do + page.execute_script("$('.issue_search').val('').keyup();"); + fill_in 'issue_search', with: "" + end + + Given 'project "Shop" has milestone "v2.2"' do + project = Project.find_by_name("Shop") + milestone = Factory :milestone, :title => "v2.2", :project => project + + 3.times do + issue = Factory :issue, :project => project, :milestone => milestone + end + end + + And 'project "Shop" has milestone "v3.0"' do + project = Project.find_by_name("Shop") + milestone = Factory :milestone, :title => "v3.0", :project => project + + 3.times do + issue = Factory :issue, :project => project, :milestone => milestone + end + end + + And 'I visit project "Shop" issues page' do + visit project_issues_path(Project.find_by_name("Shop")) + end + + When 'I select milestone "v3.0"' do + select "v3.0", from: "milestone_id" + end + + Then 'I should see selected milestone with title "v3.0"' do + issues_milestone_selector = "#issue_milestone_id_chzn/a" + wait_until { page.has_content?("Details") } + page.find(issues_milestone_selector).should have_content("v3.0") + end + + When 'I select first assignee from "Shop" project' do + project = Project.find_by_name "Shop" + first_assignee = project.users.first + select first_assignee.name, from: "assignee_id" + end + + Then 'I should see first assignee from "Shop" as selected assignee' do + issues_assignee_selector = "#issue_assignee_id_chzn/a" + wait_until { page.has_content?("Details") } + project = Project.find_by_name "Shop" + assignee_name = project.users.first.name + page.find(issues_assignee_selector).should have_content(assignee_name) + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I own project "Shop"' do + @project = Factory :project, :name => "Shop" + @project.add_access(@user, :admin) + end + + And 'project "Shop" have "Release 0.4" open issue' do + project = Project.find_by_name("Shop") + Factory.create(:issue, + :title => "Release 0.4", + :project => project, + :author => project.users.first) + end + + And 'project "Shop" have "Release 0.3" closed issue' do + project = Project.find_by_name("Shop") + Factory.create(:issue, + :title => "Release 0.3", + :project => project, + :author => project.users.first, + :closed => true) + end +end diff --git a/features/steps/project_labels.rb b/features/steps/project_labels.rb new file mode 100644 index 00000000..2e83824f --- /dev/null +++ b/features/steps/project_labels.rb @@ -0,0 +1,33 @@ +class ProjectLabels < Spinach::FeatureSteps + Then 'I should see label "bug"' do + within ".labels-table" do + page.should have_content "bug" + end + end + + And 'I should see label "feature"' do + within ".labels-table" do + page.should have_content "feature" + end + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I own project "Shop"' do + @project = Factory :project, :name => "Shop" + @project.add_access(@user, :admin) + end + + And 'project "Shop" have issues tags: "bug", "feature"' do + project = Project.find_by_name("Shop") + ['bug', 'feature'].each do |label| + Factory :issue, project: project, label_list: label + end + end + + Given 'I visit project "Shop" labels page' do + visit project_labels_path(Project.find_by_name("Shop")) + end +end diff --git a/features/steps/project_milestones.rb b/features/steps/project_milestones.rb new file mode 100644 index 00000000..97574d1c --- /dev/null +++ b/features/steps/project_milestones.rb @@ -0,0 +1,51 @@ +class ProjectMilestones < Spinach::FeatureSteps + Then 'I should see milestone "v2.2"' do + milestone = @project.milestones.find_by_title("v2.2") + page.should have_content(milestone.title[0..10]) + page.should have_content(milestone.expires_at) + page.should have_content("Browse Issues") + end + + Given 'I click link "v2.2"' do + click_link "v2.2" + end + + Given 'I click link "New Milestone"' do + click_link "New Milestone" + end + + And 'I submit new milestone "v2.3"' do + fill_in "milestone_title", :with => "v2.3" + click_button "Create milestone" + end + + Then 'I should see milestone "v2.3"' do + milestone = @project.milestones.find_by_title("v2.3") + page.should have_content(milestone.title[0..10]) + page.should have_content(milestone.expires_at) + page.should have_content("Browse Issues") + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I own project "Shop"' do + @project = Factory :project, :name => "Shop" + @project.add_access(@user, :admin) + end + + And 'project "Shop" has milestone "v2.2"' do + project = Project.find_by_name("Shop") + milestone = Factory :milestone, :title => "v2.2", :project => project + + 3.times do + issue = Factory :issue, :project => project, :milestone => milestone + end + end + + Given 'I visit project "Shop" milestones page' do + @project = Project.find_by_name("Shop") + visit project_milestones_path(@project) + end +end diff --git a/features/support/env.rb b/features/support/env.rb index 38d828a2..7bd89801 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -3,6 +3,7 @@ require './config/environment' require 'rspec' require 'database_cleaner' +require 'spinach/capybara' %w(gitolite_stub login_helpers stubbed_repository valid_commit).each do |f| require Rails.root.join('spec', 'support', f) @@ -12,6 +13,7 @@ include LoginHelpers include GitoliteStub WebMock.allow_net_connect! +Capybara.javascript_driver = :webkit DatabaseCleaner.strategy = :truncation Spinach.hooks.before_scenario { DatabaseCleaner.start } From 8d171a8cbcec2748b583b75b2e304634e0ecd348 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vanja=20Radovanovi=C4=87?= Date: Mon, 10 Sep 2012 14:40:35 +0200 Subject: [PATCH 246/357] fixed commit title when commit message is an empty string and ensured that link_to_gfm helper doesn't break on nil body --- app/decorators/commit_decorator.rb | 2 +- app/helpers/gitlab_markdown_helper.rb | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/decorators/commit_decorator.rb b/app/decorators/commit_decorator.rb index f813ed25..56067221 100644 --- a/app/decorators/commit_decorator.rb +++ b/app/decorators/commit_decorator.rb @@ -16,7 +16,7 @@ class CommitDecorator < ApplicationDecorator # In case this first line is longer than 80 characters, it is cut off # after 70 characters and ellipses (`&hellp;`) are appended. def title - return no_commit_message unless safe_message + return no_commit_message unless safe_message && !safe_message.strip.empty? title_end = safe_message.index(/\n/) if (!title_end && safe_message.length > 80) || (title_end && title_end > 80) diff --git a/app/helpers/gitlab_markdown_helper.rb b/app/helpers/gitlab_markdown_helper.rb index e97e46f5..a54d2e3b 100644 --- a/app/helpers/gitlab_markdown_helper.rb +++ b/app/helpers/gitlab_markdown_helper.rb @@ -11,6 +11,8 @@ module GitlabMarkdownHelper # explicitly produce the correct linking behavior (i.e. # "outer text gfm ref more outer text"). def link_to_gfm(body, url, html_options = {}) + return "" unless body && !body.strip.empty? + gfm_body = gfm(body, html_options) gfm_body.gsub!(%r{.*?}m) do |match| From b58155113b46690d9390597f9f1feccf44b00989 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Mon, 10 Sep 2012 06:35:23 -0700 Subject: [PATCH 247/357] add spinach steps for remaining features --- features/project/deploy_keys.feature | 0 features/project/merge_requests.feature | 6 +- features/project/network.feature | 5 +- features/project/project.feature | 13 +-- features/project/snippets.feature | 0 features/project/team_management.feature | 15 ++-- features/project/wall.feature | 5 +- features/project/web_hooks.feature | 0 features/project/wiki.feature | 6 +- features/steps/create_project.rb | 27 ++++++ features/steps/project.rb | 15 ++++ features/steps/project_merge_requests.rb | 102 ++++++++++++++++++++++ features/steps/project_network_graph.rb | 28 ++++++ features/steps/project_team_management.rb | 98 +++++++++++++++++++++ features/steps/project_wall.rb | 24 +++++ features/steps/project_wiki.rb | 37 ++++++++ 16 files changed, 357 insertions(+), 24 deletions(-) delete mode 100644 features/project/deploy_keys.feature delete mode 100644 features/project/snippets.feature delete mode 100644 features/project/web_hooks.feature create mode 100644 features/steps/create_project.rb create mode 100644 features/steps/project.rb create mode 100644 features/steps/project_merge_requests.rb create mode 100644 features/steps/project_network_graph.rb create mode 100644 features/steps/project_team_management.rb create mode 100644 features/steps/project_wall.rb create mode 100644 features/steps/project_wiki.rb diff --git a/features/project/deploy_keys.feature b/features/project/deploy_keys.feature deleted file mode 100644 index e69de29b..00000000 diff --git a/features/project/merge_requests.feature b/features/project/merge_requests.feature index 54b6ccde..80f00986 100644 --- a/features/project/merge_requests.feature +++ b/features/project/merge_requests.feature @@ -1,10 +1,10 @@ -Feature: Merge Requests +Feature: Project Merge Requests Background: - Given I signin as a user + Given I sign in as a user And I own project "Shop" And project "Shop" have "Bug NS-04" open merge request And project "Shop" have "Feature NS-03" closed merge request - And I visit project "Shop" merge requests page + And I visit project "Shop" merge requests page Scenario: I should see open merge requests Then I should see "Bug NS-04" in merge requests diff --git a/features/project/network.feature b/features/project/network.feature index 61c05eb3..31ce5ad3 100644 --- a/features/project/network.feature +++ b/features/project/network.feature @@ -1,10 +1,9 @@ -@javascript Feature: Project Network Graph - Background: - Given I signin as a user + Given I sign in as a user And I own project "Shop" And I visit project "Shop" network page + @javascript Scenario: I should see project network Then page should have network graph diff --git a/features/project/project.feature b/features/project/project.feature index 895a928f..1c9f201d 100644 --- a/features/project/project.feature +++ b/features/project/project.feature @@ -1,11 +1,14 @@ -Feature: Project +Feature: Projects Background: Given I signin as a user And I own project "Shop" - And I visit project "Shop" page + And I visit project "Shop" page - Scenario: I should see project activity + # @wip + # Scenario: I should see project activity - Scenario: I edit project + # @wip + # Scenario: I edit project - Scenario: I visit attachments + # @wip + # Scenario: I visit attachments diff --git a/features/project/snippets.feature b/features/project/snippets.feature deleted file mode 100644 index e69de29b..00000000 diff --git a/features/project/team_management.feature b/features/project/team_management.feature index b5b485e2..ae0c459f 100644 --- a/features/project/team_management.feature +++ b/features/project/team_management.feature @@ -1,11 +1,11 @@ Feature: Project Team management - Background: - Given I signin as a user + Background: + Given I sign in as a user And I own project "Shop" - And gitlab user "Mike" - And gitlab user "Sam" + And gitlab user "Mike" + And gitlab user "Sam" And "Sam" is "Shop" developer - And I visit project "Shop" team page + And I visit project "Shop" team page Scenario: See all team members Then I should be able to see myself in team @@ -20,7 +20,7 @@ Feature: Project Team management Scenario: Update user access Given I should see "Sam" in team list as "Developer" And I change "Sam" role to "Reporter" - Then I visit project "Shop" team page + Then I visit project "Shop" team page And I should see "Sam" in team list as "Reporter" Scenario: View team member profile @@ -30,6 +30,5 @@ Feature: Project Team management Scenario: Cancel team member Given I click link "Sam" And I click link "Remove from team" - Then I visit project "Shop" team page + Then I visit project "Shop" team page And I should not see "Sam" in team list - diff --git a/features/project/wall.feature b/features/project/wall.feature index ed675e2c..c92dbf82 100644 --- a/features/project/wall.feature +++ b/features/project/wall.feature @@ -7,11 +7,12 @@ Feature: Project Wall Background: Given I signin as a user And I own project "Shop" - And I visit project "Shop" wall page + And I visit project "Shop" wall page + @javascript Scenario: Write comment Given I write new comment "my special test message" Then I should see project wall note "my special test message" - Then I visit project "Shop" wall page + Then I visit project "Shop" wall page And I should see project wall note "my special test message" diff --git a/features/project/web_hooks.feature b/features/project/web_hooks.feature deleted file mode 100644 index e69de29b..00000000 diff --git a/features/project/wiki.feature b/features/project/wiki.feature index 4441ada2..51370565 100644 --- a/features/project/wiki.feature +++ b/features/project/wiki.feature @@ -1,6 +1,6 @@ -Feature: Wiki - Background: - Given I signin as a user +Feature: Project Wiki + Background: + Given I sign in as a user And I own project "Shop" Given I visit project wiki page diff --git a/features/steps/create_project.rb b/features/steps/create_project.rb new file mode 100644 index 00000000..80f6f708 --- /dev/null +++ b/features/steps/create_project.rb @@ -0,0 +1,27 @@ +class CreateProject < Spinach::FeatureSteps + Given 'I signin as a user' do + login_as :user + end + + When 'I visit new project page' do + visit new_project_path + end + + And 'fill project form with valid data' do + fill_in 'project_name', :with => 'NewProject' + fill_in 'project_code', :with => 'NPR' + fill_in 'project_path', :with => 'newproject' + click_button "Create project" + end + + Then 'I should see project page' do + current_path.should == project_path(Project.last) + page.should have_content('NewProject') + end + + And 'I should see empty project instuctions' do + page.should have_content "git init" + page.should have_content "git remote" + page.should have_content Project.last.url_to_repo + end +end diff --git a/features/steps/project.rb b/features/steps/project.rb new file mode 100644 index 00000000..666a65fa --- /dev/null +++ b/features/steps/project.rb @@ -0,0 +1,15 @@ +class Projects < Spinach::FeatureSteps + Given 'I sign in as a user' do + login_as :user + end + + And 'I own project "Shop"' do + @project = Factory :project, :name => "Shop" + @project.add_access(@user, :admin) + end + + And 'I visit project "Shop" page' do + project = Project.find_by_name("Shop") + visit project_path(project) + end +end diff --git a/features/steps/project_merge_requests.rb b/features/steps/project_merge_requests.rb new file mode 100644 index 00000000..8515e7e8 --- /dev/null +++ b/features/steps/project_merge_requests.rb @@ -0,0 +1,102 @@ +class ProjectMergeRequests < Spinach::FeatureSteps + Then 'I should see "Bug NS-04" in merge requests' do + page.should have_content "Bug NS-04" + end + + And 'I should not see "Feature NS-03" in merge requests' do + page.should_not have_content "Feature NS-03" + end + + Given 'I click link "Closed"' do + click_link "Closed" + end + + Then 'I should see "Feature NS-03" in merge requests' do + page.should have_content "Feature NS-03" + end + + And 'I should not see "Bug NS-04" in merge requests' do + page.should_not have_content "Bug NS-04" + end + + Given 'I click link "All"' do + click_link "All" + end + + Given 'I click link "Bug NS-04"' do + click_link "Bug NS-04" + end + + Then 'I should see merge request "Bug NS-04"' do + page.should have_content "Bug NS-04" + end + + And 'I click link "Close"' do + click_link "Close" + end + + Then 'I should see closed merge request "Bug NS-04"' do + mr = MergeRequest.find_by_title("Bug NS-04") + mr.closed.should be_true + page.should have_content "Closed by" + end + + Given 'I click link "New Merge Request"' do + click_link "New Merge Request" + end + + And 'I submit new merge request "Wiki Feature"' do + fill_in "merge_request_title", :with => "Wiki Feature" + select "master", :from => "merge_request_source_branch" + select "stable", :from => "merge_request_target_branch" + click_button "Save" + end + + Then 'I should see merge request "Wiki Feature"' do + page.should have_content "Wiki Feature" + end + + Given 'I visit merge request page "Bug NS-04"' do + mr = MergeRequest.find_by_title("Bug NS-04") + visit project_merge_request_path(mr.project, mr) + end + + And 'I leave a comment like "XML attached"' do + fill_in "note_note", :with => "XML attached" + click_button "Add Comment" + end + + Then 'I should see comment "XML attached"' do + page.should have_content "XML attached" + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I own project "Shop"' do + @project = Factory :project, :name => "Shop" + @project.add_access(@user, :admin) + end + + And 'project "Shop" have "Bug NS-04" open merge request' do + project = Project.find_by_name("Shop") + Factory.create(:merge_request, + :title => "Bug NS-04", + :project => project, + :author => project.users.first) + end + + And 'project "Shop" have "Feature NS-03" closed merge request' do + project = Project.find_by_name("Shop") + Factory.create(:merge_request, + :title => "Feature NS-03", + :project => project, + :author => project.users.first, + :closed => true) + end + + And 'I visit project "Shop" merge requests page' do + visit project_merge_requests_path(Project.find_by_name("Shop")) + end +end diff --git a/features/steps/project_network_graph.rb b/features/steps/project_network_graph.rb new file mode 100644 index 00000000..d87f3d82 --- /dev/null +++ b/features/steps/project_network_graph.rb @@ -0,0 +1,28 @@ +class ProjectNetworkGraph < Spinach::FeatureSteps + Then 'page should have network graph' do + page.should have_content "Project Network Graph" + within ".graph" do + page.should have_content "master" + page.should have_content "scss_refactor..." + end + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I own project "Shop"' do + @project = Factory :project, :name => "Shop" + @project.add_access(@user, :admin) + end + + And 'I visit project "Shop" network page' do + project = Project.find_by_name("Shop") + + # Stub out find_all to speed this up (10 commits vs. 650) + commits = Grit::Commit.find_all(project.repo, nil, {max_count: 10}) + Grit::Commit.stub(:find_all).and_return(commits) + + visit graph_project_path(project) + end +end diff --git a/features/steps/project_team_management.rb b/features/steps/project_team_management.rb new file mode 100644 index 00000000..9cee75bd --- /dev/null +++ b/features/steps/project_team_management.rb @@ -0,0 +1,98 @@ +class ProjectTeamManagement < Spinach::FeatureSteps + Then 'I should be able to see myself in team' do + page.should have_content(@user.name) + page.should have_content(@user.email) + end + + And 'I should see "Sam" in team list' do + user = User.find_by_name("Sam") + page.should have_content(user.name) + page.should have_content(user.email) + end + + Given 'I click link "New Team Member"' do + click_link "New Team Member" + end + + And 'I select "Mike" as "Reporter"' do + user = User.find_by_name("Mike") + within "#new_team_member" do + select user.name, :from => "user_ids" + select "Reporter", :from => "project_access" + end + click_button "Save" + end + + Then 'I should see "Mike" in team list as "Reporter"' do + user = User.find_by_name("Mike") + role_id = find(".user_#{user.id} #team_member_project_access").value + role_id.should == UsersProject.access_roles["Reporter"].to_s + end + + Given 'I should see "Sam" in team list as "Developer"' do + user = User.find_by_name("Sam") + role_id = find(".user_#{user.id} #team_member_project_access").value + role_id.should == UsersProject.access_roles["Developer"].to_s + end + + And 'I change "Sam" role to "Reporter"' do + user = User.find_by_name("Sam") + within ".user_#{user.id}" do + select "Reporter", :from => "team_member_project_access" + end + end + + Then 'I visit project "Shop" team page' do + visit team_project_path(Project.find_by_name("Shop")) + end + + And 'I should see "Sam" in team list as "Reporter"' do + user = User.find_by_name("Sam") + role_id = find(".user_#{user.id} #team_member_project_access").value + role_id.should == UsersProject.access_roles["Reporter"].to_s + end + + Given 'I click link "Sam"' do + click_link "Sam" + end + + Then 'I should see "Sam" team profile' do + user = User.find_by_name("Sam") + page.should have_content(user.name) + page.should have_content(user.email) + page.should have_content("To team list") + end + + And 'I click link "Remove from team"' do + click_link "Remove from team" + end + + And 'I should not see "Sam" in team list' do + user = User.find_by_name("Sam") + page.should_not have_content(user.name) + page.should_not have_content(user.email) + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I own project "Shop"' do + @project = Factory :project, :name => "Shop" + @project.add_access(@user, :admin) + end + + And 'gitlab user "Mike"' do + Factory :user, :name => "Mike" + end + + And 'gitlab user "Sam"' do + Factory :user, :name => "Sam" + end + + And '"Sam" is "Shop" developer' do + user = User.find_by_name("Sam") + project = Project.find_by_name("Shop") + project.add_access(user, :write) + end +end diff --git a/features/steps/project_wall.rb b/features/steps/project_wall.rb new file mode 100644 index 00000000..b94bd0bb --- /dev/null +++ b/features/steps/project_wall.rb @@ -0,0 +1,24 @@ +class ProjectWall < Spinach::FeatureSteps + Given 'I write new comment "my special test message"' do + fill_in "note_note", :with => "my special test message" + click_button "Add Comment" + end + + Then 'I should see project wall note "my special test message"' do + page.should have_content "my special test message" + end + + Then 'I visit project "Shop" wall page' do + project = Project.find_by_name("Shop") + visit wall_project_path(project) + end + + Given 'I signin as a user' do + login_as :user + end + + And 'I own project "Shop"' do + @project = Factory :project, :name => "Shop" + @project.add_access(@user, :admin) + end +end diff --git a/features/steps/project_wiki.rb b/features/steps/project_wiki.rb new file mode 100644 index 00000000..8c8c7c8d --- /dev/null +++ b/features/steps/project_wiki.rb @@ -0,0 +1,37 @@ +class ProjectWiki < Spinach::FeatureSteps + Given 'I create Wiki page' do + fill_in "Title", :with => 'Test title' + fill_in "Content", :with => '[link test](test)' + click_on "Save" + end + + Then 'I should see newly created wiki page' do + page.should have_content "Test title" + page.should have_content "link test" + + click_link "link test" + page.should have_content "Editing page" + end + + And 'I leave a comment like "XML attached"' do + fill_in "note_note", :with => "XML attached" + click_button "Add Comment" + end + + Then 'I should see comment "XML attached"' do + page.should have_content "XML attached" + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I own project "Shop"' do + @project = Factory :project, :name => "Shop" + @project.add_access(@user, :admin) + end + + Given 'I visit project wiki page' do + visit project_wiki_path(@project, :index) + end +end From ae9689f8ffdf8a69bd803021d1f57a37aba06e0d Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Mon, 10 Sep 2012 06:40:57 -0700 Subject: [PATCH 248/357] remove cucumber completely --- Gemfile | 2 -- Gemfile.lock | 16 ---------- config/cucumber.yml | 8 ----- lib/tasks/cucumber.rake | 65 -------------------------------------- lib/tasks/gitlab/test.rake | 5 ++- lib/tasks/travis.rake | 2 +- script/cucumber | 10 ------ 7 files changed, 3 insertions(+), 105 deletions(-) delete mode 100644 config/cucumber.yml delete mode 100644 lib/tasks/cucumber.rake delete mode 100755 script/cucumber diff --git a/Gemfile b/Gemfile index 4e957e92..0609f6fd 100644 --- a/Gemfile +++ b/Gemfile @@ -119,7 +119,6 @@ group :development, :test do # Guard gem 'guard-rspec' - gem 'guard-cucumber' # Notification gem 'rb-fsevent', :require => darwin_only('rb-fsevent') @@ -128,7 +127,6 @@ group :development, :test do end group :test do - gem 'cucumber-rails', :require => false gem "simplecov", :require => false gem "shoulda-matchers" gem 'email_spec' diff --git a/Gemfile.lock b/Gemfile.lock index 317ff694..38094518 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -134,15 +134,6 @@ GEM colored (1.2) colorize (0.5.8) crack (0.3.1) - cucumber (1.2.1) - builder (>= 2.1.2) - diff-lcs (>= 1.1.3) - gherkin (~> 2.11.0) - json (>= 1.4.6) - cucumber-rails (1.3.0) - capybara (>= 1.1.2) - cucumber (>= 1.1.8) - nokogiri (>= 1.5.0) daemons (1.1.8) database_cleaner (0.8.0) devise (2.1.2) @@ -171,8 +162,6 @@ GEM ffi (1.0.11) foreman (0.47.0) thor (>= 0.13.6) - gherkin (2.11.0) - json (>= 1.4.6) gherkin-ruby (0.2.1) git (1.2.5) github-markup (0.7.4) @@ -187,9 +176,6 @@ GEM guard (1.3.2) listen (>= 0.4.2) thor (>= 0.14.6) - guard-cucumber (1.2.0) - cucumber (>= 1.2.0) - guard (>= 1.1.0) guard-rspec (1.2.1) guard (>= 1.1) haml (3.1.6) @@ -403,7 +389,6 @@ DEPENDENCIES chosen-rails coffee-rails (= 3.2.2) colored - cucumber-rails database_cleaner devise (~> 2.1.0) draper @@ -419,7 +404,6 @@ DEPENDENCIES grape (~> 0.2.1) grit! growl - guard-cucumber guard-rspec haml-rails headless diff --git a/config/cucumber.yml b/config/cucumber.yml deleted file mode 100644 index 19b288df..00000000 --- a/config/cucumber.yml +++ /dev/null @@ -1,8 +0,0 @@ -<% -rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : "" -rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}" -std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} --strict --tags ~@wip" -%> -default: <%= std_opts %> features -wip: --tags @wip:3 --wip features -rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip diff --git a/lib/tasks/cucumber.rake b/lib/tasks/cucumber.rake deleted file mode 100644 index 83f79471..00000000 --- a/lib/tasks/cucumber.rake +++ /dev/null @@ -1,65 +0,0 @@ -# IMPORTANT: This file is generated by cucumber-rails - edit at your own peril. -# It is recommended to regenerate this file in the future when you upgrade to a -# newer version of cucumber-rails. Consider adding your own code to a new file -# instead of editing this one. Cucumber will automatically load all features/**/*.rb -# files. - - -unless ARGV.any? {|a| a =~ /^gems/} # Don't load anything when running the gems:* tasks - -vendored_cucumber_bin = Dir["#{Rails.root}/vendor/{gems,plugins}/cucumber*/bin/cucumber"].first -$LOAD_PATH.unshift(File.dirname(vendored_cucumber_bin) + '/../lib') unless vendored_cucumber_bin.nil? - -begin - require 'cucumber/rake/task' - - namespace :cucumber do - Cucumber::Rake::Task.new({:ok => 'db:test:prepare'}, 'Run features that should pass') do |t| - t.binary = vendored_cucumber_bin # If nil, the gem's binary is used. - t.fork = true # You may get faster startup if you set this to false - t.profile = 'default' - end - - Cucumber::Rake::Task.new({:wip => 'db:test:prepare'}, 'Run features that are being worked on') do |t| - t.binary = vendored_cucumber_bin - t.fork = true # You may get faster startup if you set this to false - t.profile = 'wip' - end - - Cucumber::Rake::Task.new({:rerun => 'db:test:prepare'}, 'Record failing features and run only them if any exist') do |t| - t.binary = vendored_cucumber_bin - t.fork = true # You may get faster startup if you set this to false - t.profile = 'rerun' - end - - desc 'Run all features' - task :all => [:ok, :wip] - - task :statsetup do - require 'rails/code_statistics' - ::STATS_DIRECTORIES << %w(Cucumber\ features features) if File.exist?('features') - ::CodeStatistics::TEST_TYPES << "Cucumber features" if File.exist?('features') - end - end - desc 'Alias for cucumber:ok' - task :cucumber => 'cucumber:ok' - - task :default => :cucumber - - task :features => :cucumber do - STDERR.puts "*** The 'features' task is deprecated. See rake -T cucumber ***" - end - - # In case we don't have ActiveRecord, append a no-op task that we can depend upon. - task 'db:test:prepare' do - end - - task :stats => 'cucumber:statsetup' -rescue LoadError - desc 'cucumber rake task not available (cucumber not installed)' - task :cucumber do - abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin' - end -end - -end diff --git a/lib/tasks/gitlab/test.rake b/lib/tasks/gitlab/test.rake index 77e148cf..ad1bfb2e 100644 --- a/lib/tasks/gitlab/test.rake +++ b/lib/tasks/gitlab/test.rake @@ -1,5 +1,4 @@ namespace :gitlab do - desc "GITLAB | Run both cucumber & rspec" - task :test => ['cucumber', 'spec'] + desc "GITLAB | Run both spinach and rspec" + task :test => ['spinach', 'spec'] end - diff --git a/lib/tasks/travis.rake b/lib/tasks/travis.rake index 58767e10..13e32135 100644 --- a/lib/tasks/travis.rake +++ b/lib/tasks/travis.rake @@ -1,5 +1,5 @@ task :travis do - ["cucumber", "rspec spec"].each do |cmd| + ["spinach", "rspec spec"].each do |cmd| puts "Starting to run #{cmd}..." system("export DISPLAY=:99.0 && bundle exec #{cmd}") raise "#{cmd} failed!" unless $?.exitstatus == 0 diff --git a/script/cucumber b/script/cucumber deleted file mode 100755 index 7fa5c920..00000000 --- a/script/cucumber +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env ruby - -vendored_cucumber_bin = Dir["#{File.dirname(__FILE__)}/../vendor/{gems,plugins}/cucumber*/bin/cucumber"].first -if vendored_cucumber_bin - load File.expand_path(vendored_cucumber_bin) -else - require 'rubygems' unless ENV['NO_RUBYGEMS'] - require 'cucumber' - load Cucumber::BINARY -end From ef4e9c24d3dc870eb194591522dda6ec8dde7192 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Mon, 10 Sep 2012 06:43:49 -0700 Subject: [PATCH 249/357] install guard-spinach --- Gemfile | 1 + Gemfile.lock | 4 ++++ Guardfile | 16 ++++++---------- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Gemfile b/Gemfile index 0609f6fd..0a5f730d 100644 --- a/Gemfile +++ b/Gemfile @@ -119,6 +119,7 @@ group :development, :test do # Guard gem 'guard-rspec' + gem 'guard-spinach' # Notification gem 'rb-fsevent', :require => darwin_only('rb-fsevent') diff --git a/Gemfile.lock b/Gemfile.lock index 38094518..8046b92b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -178,6 +178,9 @@ GEM thor (>= 0.14.6) guard-rspec (1.2.1) guard (>= 1.1) + guard-spinach (0.0.2) + guard (>= 1.1) + spinach haml (3.1.6) haml-rails (0.3.4) actionpack (~> 3.0) @@ -405,6 +408,7 @@ DEPENDENCIES grit! growl guard-rspec + guard-spinach haml-rails headless httparty diff --git a/Guardfile b/Guardfile index ed38f548..6ed414bc 100644 --- a/Guardfile +++ b/Guardfile @@ -13,18 +13,14 @@ guard 'rspec', :version => 2 do watch(%r{^spec/support/(.+)\.rb$}) { "spec" } watch('config/routes.rb') { "spec/routing" } watch('app/controllers/application_controller.rb') { "spec/controllers" } - + # Capybara request specs watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" } - - # Turnip features and steps - watch(%r{^spec/acceptance/(.+)\.feature$}) - watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' } end - -guard 'cucumber' do - watch(%r{^features/.+\.feature$}) - watch(%r{^features/support/.+$}) { 'features' } - watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' } +guard 'spinach' do + watch(%r|^features/(.*)\.feature|) + watch(%r|^features/steps/(.*)([^/]+)\.rb|) do |m| + "features/#{m[1]}#{m[2]}.feature" + end end From 6d76e000d07300ab9e8e8c74b90db0abcdc48451 Mon Sep 17 00:00:00 2001 From: miks Date: Mon, 10 Sep 2012 16:50:01 +0300 Subject: [PATCH 250/357] Add authorization to hooks requests --- lib/api/projects.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/api/projects.rb b/lib/api/projects.rb index dfdd359c..cf23dc5f 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -113,6 +113,7 @@ module Gitlab # Example Request: # GET /projects/:id/hooks get ":id/hooks" do + authorize! :admin_project, user_project @hooks = paginate user_project.hooks present @hooks, with: Entities::Hook end @@ -125,6 +126,7 @@ module Gitlab # Example Request: # POST /projects/:id/hooks post ":id/hooks" do + authorize! :admin_project, user_project @hook = user_project.hooks.new({"url" => params[:url]}) if @hook.save present @hook, with: Entities::Hook @@ -141,6 +143,7 @@ module Gitlab # Example Request: # DELETE /projects/:id/hooks delete ":id/hooks" do + authorize! :admin_project, user_project @hook = user_project.hooks.find(params[:hook_id]) @hook.destroy nil From 7e2846fb57ef24dfac0de57f7b086a7415cc44e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vanja=20Radovanovi=C4=87?= Date: Mon, 10 Sep 2012 17:32:31 +0200 Subject: [PATCH 251/357] using blank?, much shorter --- app/decorators/commit_decorator.rb | 2 +- app/helpers/gitlab_markdown_helper.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/decorators/commit_decorator.rb b/app/decorators/commit_decorator.rb index 56067221..c85f7400 100644 --- a/app/decorators/commit_decorator.rb +++ b/app/decorators/commit_decorator.rb @@ -16,7 +16,7 @@ class CommitDecorator < ApplicationDecorator # In case this first line is longer than 80 characters, it is cut off # after 70 characters and ellipses (`&hellp;`) are appended. def title - return no_commit_message unless safe_message && !safe_message.strip.empty? + return no_commit_message if safe_message.blank? title_end = safe_message.index(/\n/) if (!title_end && safe_message.length > 80) || (title_end && title_end > 80) diff --git a/app/helpers/gitlab_markdown_helper.rb b/app/helpers/gitlab_markdown_helper.rb index a54d2e3b..511d4628 100644 --- a/app/helpers/gitlab_markdown_helper.rb +++ b/app/helpers/gitlab_markdown_helper.rb @@ -11,7 +11,7 @@ module GitlabMarkdownHelper # explicitly produce the correct linking behavior (i.e. # "outer text gfm ref more outer text"). def link_to_gfm(body, url, html_options = {}) - return "" unless body && !body.strip.empty? + return "" if body.blank? gfm_body = gfm(body, html_options) From 79eb5ab396690c613ea6e13c3c941ba1fa80f217 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Mon, 10 Sep 2012 08:35:03 -0700 Subject: [PATCH 252/357] refactor feature steps --- features/project/create_project.feature | 2 +- features/project/wall.feature | 6 +- features/steps/{ => dashboard}/dashboard.rb | 11 +- .../steps/{ => dashboard}/dashboard_issues.rb | 21 +--- .../dashboard_merge_requests.rb | 20 +--- .../steps/{ => dashboard}/dashboard_search.rb | 11 +- features/steps/{ => profile}/profile.rb | 17 +-- .../steps/{ => profile}/profile_ssh_keys.rb | 6 +- features/steps/project.rb | 15 --- .../steps/{ => project}/create_project.rb | 11 +- features/steps/project/project.rb | 5 + .../{ => project}/project_browse_branches.rb | 17 +-- .../{ => project}/project_browse_commits.rb | 21 +--- .../{ => project}/project_browse_files.rb | 25 +--- .../{ => project}/project_browse_git_repo.rb | 17 +-- features/steps/project/project_browse_tags.rb | 10 ++ .../steps/project/project_comment_commit.rb | 6 + .../steps/{ => project}/project_issues.rb | 40 ++----- .../steps/{ => project}/project_labels.rb | 17 +-- .../{ => project}/project_merge_requests.rb | 32 +---- .../steps/{ => project}/project_milestones.rb | 22 +--- .../{ => project}/project_network_graph.rb | 12 +- .../{ => project}/project_team_management.rb | 17 +-- features/steps/project/project_wall.rb | 6 + features/steps/project/project_wiki.rb | 20 ++++ features/steps/project_browse_tags.rb | 19 --- features/steps/project_comment_commit.rb | 23 ---- features/steps/project_wall.rb | 24 ---- features/steps/project_wiki.rb | 37 ------ features/steps/shared/authentication.rb | 10 ++ features/steps/shared/note.rb | 21 ++++ features/steps/shared/paths.rb | 112 ++++++++++++++++++ features/steps/shared/project.rb | 8 ++ features/support/env.rb | 5 +- 34 files changed, 270 insertions(+), 376 deletions(-) rename features/steps/{ => dashboard}/dashboard.rb (95%) rename features/steps/{ => dashboard}/dashboard_issues.rb (52%) rename features/steps/{ => dashboard}/dashboard_merge_requests.rb (58%) rename features/steps/{ => dashboard}/dashboard_search.rb (74%) rename features/steps/{ => profile}/profile.rb (80%) rename features/steps/{ => profile}/profile_ssh_keys.rb (94%) delete mode 100644 features/steps/project.rb rename features/steps/{ => project}/create_project.rb (76%) create mode 100644 features/steps/project/project.rb rename features/steps/{ => project}/project_browse_branches.rb (73%) rename features/steps/{ => project}/project_browse_commits.rb (79%) rename features/steps/{ => project}/project_browse_files.rb (58%) rename features/steps/{ => project}/project_browse_git_repo.rb (57%) create mode 100644 features/steps/project/project_browse_tags.rb create mode 100644 features/steps/project/project_comment_commit.rb rename features/steps/{ => project}/project_issues.rb (80%) rename features/steps/{ => project}/project_labels.rb (62%) rename features/steps/{ => project}/project_merge_requests.rb (73%) rename features/steps/{ => project}/project_milestones.rb (70%) rename features/steps/{ => project}/project_network_graph.rb (76%) rename features/steps/{ => project}/project_team_management.rb (89%) create mode 100644 features/steps/project/project_wall.rb create mode 100644 features/steps/project/project_wiki.rb delete mode 100644 features/steps/project_browse_tags.rb delete mode 100644 features/steps/project_comment_commit.rb delete mode 100644 features/steps/project_wall.rb delete mode 100644 features/steps/project_wiki.rb create mode 100644 features/steps/shared/authentication.rb create mode 100644 features/steps/shared/note.rb create mode 100644 features/steps/shared/paths.rb create mode 100644 features/steps/shared/project.rb diff --git a/features/project/create_project.feature b/features/project/create_project.feature index 42d25b3f..b7cdfdb8 100644 --- a/features/project/create_project.feature +++ b/features/project/create_project.feature @@ -4,7 +4,7 @@ Feature: Create Project Should be able to create a new one Scenario: User create a project - Given I signin as a user + Given I sign in as a user When I visit new project page And fill project form with valid data Then I should see project page diff --git a/features/project/wall.feature b/features/project/wall.feature index c92dbf82..c38d046a 100644 --- a/features/project/wall.feature +++ b/features/project/wall.feature @@ -1,11 +1,9 @@ -@javascript Feature: Project Wall In order to use Project Wall - A user - Should be able to read & write messages + A user should be able to read and write messages Background: - Given I signin as a user + Given I sign in as a user And I own project "Shop" And I visit project "Shop" wall page diff --git a/features/steps/dashboard.rb b/features/steps/dashboard/dashboard.rb similarity index 95% rename from features/steps/dashboard.rb rename to features/steps/dashboard/dashboard.rb index e69686b3..6c603bbe 100644 --- a/features/steps/dashboard.rb +++ b/features/steps/dashboard/dashboard.rb @@ -1,4 +1,7 @@ class Dashboard < Spinach::FeatureSteps + include SharedAuthentication + include SharedPaths + Then 'I should see "New Project" link' do page.should have_link "New Project" end @@ -38,10 +41,6 @@ class Dashboard < Spinach::FeatureSteps ) end - When 'I visit dashboard page' do - visit dashboard_path - end - Then 'I should see "John Doe joined project Shop" event' do page.should have_content "John Doe joined project Shop" end @@ -60,10 +59,6 @@ class Dashboard < Spinach::FeatureSteps page.should have_content "John Doe left project Shop" end - Given 'I sign in as a user' do - login_as :user - end - And 'I own project "Shop"' do @project = Factory :project, :name => 'Shop' @project.add_access(@user, :admin) diff --git a/features/steps/dashboard_issues.rb b/features/steps/dashboard/dashboard_issues.rb similarity index 52% rename from features/steps/dashboard_issues.rb rename to features/steps/dashboard/dashboard_issues.rb index 8704d2ef..9368782b 100644 --- a/features/steps/dashboard_issues.rb +++ b/features/steps/dashboard/dashboard_issues.rb @@ -1,4 +1,7 @@ class DashboardIssues < Spinach::FeatureSteps + include SharedAuthentication + include SharedPaths + Then 'I should see issues assigned to me' do issues = @user.issues issues.each do |issue| @@ -7,26 +10,10 @@ class DashboardIssues < Spinach::FeatureSteps end end - Given 'I sign in as a user' do - login_as :user - end - And 'I have assigned issues' do project = Factory :project project.add_access(@user, :read, :write) - issue1 = Factory :issue, - :author => @user, - :assignee => @user, - :project => project - - issue2 = Factory :issue, - :author => @user, - :assignee => @user, - :project => project - end - - And 'I visit dashboard issues page' do - visit dashboard_issues_path + 2.times { Factory :issue, :author => @user, :assignee => @user, :project => project } end end diff --git a/features/steps/dashboard_merge_requests.rb b/features/steps/dashboard/dashboard_merge_requests.rb similarity index 58% rename from features/steps/dashboard_merge_requests.rb rename to features/steps/dashboard/dashboard_merge_requests.rb index 3e057ef9..fc339e75 100644 --- a/features/steps/dashboard_merge_requests.rb +++ b/features/steps/dashboard/dashboard_merge_requests.rb @@ -1,4 +1,7 @@ class DashboardMergeRequests < Spinach::FeatureSteps + include SharedAuthentication + include SharedPaths + Then 'I should see my merge requests' do merge_requests = @user.merge_requests merge_requests.each do |mr| @@ -7,10 +10,6 @@ class DashboardMergeRequests < Spinach::FeatureSteps end end - Given 'I sign in as a user' do - login_as :user - end - And 'I have authored merge requests' do project1 = Factory :project project2 = Factory :project @@ -18,16 +17,7 @@ class DashboardMergeRequests < Spinach::FeatureSteps project1.add_access(@user, :read, :write) project2.add_access(@user, :read, :write) - merge_request1 = Factory :merge_request, - :author => @user, - :project => project1 - - merge_request2 = Factory :merge_request, - :author => @user, - :project => project2 - end - - And 'I visit dashboard merge requests page' do - visit dashboard_merge_requests_path + merge_request1 = Factory :merge_request, :author => @user, :project => project1 + merge_request2 = Factory :merge_request, :author => @user, :project => project2 end end diff --git a/features/steps/dashboard_search.rb b/features/steps/dashboard/dashboard_search.rb similarity index 74% rename from features/steps/dashboard_search.rb rename to features/steps/dashboard/dashboard_search.rb index 122774fc..e3585898 100644 --- a/features/steps/dashboard_search.rb +++ b/features/steps/dashboard/dashboard_search.rb @@ -1,4 +1,7 @@ class DashboardSearch < Spinach::FeatureSteps + include SharedAuthentication + include SharedPaths + Given 'I search for "Sho"' do fill_in "dashboard_search", :with => "Sho" click_button "Search" @@ -8,16 +11,8 @@ class DashboardSearch < Spinach::FeatureSteps page.should have_link "Shop" end - Given 'I sign in as a user' do - login_as :user - end - And 'I own project "Shop"' do @project = Factory :project, :name => "Shop" @project.add_access(@user, :admin) end - - And 'I visit dashboard search page' do - visit search_path - end end diff --git a/features/steps/profile.rb b/features/steps/profile/profile.rb similarity index 80% rename from features/steps/profile.rb rename to features/steps/profile/profile.rb index c7e6be3f..d3261a16 100644 --- a/features/steps/profile.rb +++ b/features/steps/profile/profile.rb @@ -1,7 +1,6 @@ class Profile < Spinach::FeatureSteps - Given 'I visit profile page' do - visit profile_path - end + include SharedAuthentication + include SharedPaths Then 'I should see my profile info' do page.should have_content "Profile" @@ -23,10 +22,6 @@ class Profile < Spinach::FeatureSteps @user.twitter.should == 'testtwitter' end - Given 'I visit profile password page' do - visit profile_password_path - end - Then 'I change my password' do fill_in "user_password", :with => "222333" fill_in "user_password_confirmation", :with => "222333" @@ -37,10 +32,6 @@ class Profile < Spinach::FeatureSteps current_path.should == new_user_session_path end - Given 'I visit profile token page' do - visit profile_token_path - end - Then 'I reset my token' do @old_token = @user.private_token click_button "Reset" @@ -50,8 +41,4 @@ class Profile < Spinach::FeatureSteps find("#token").value.should_not == @old_token find("#token").value.should == @user.reload.private_token end - - Given 'I sign in as a user' do - login_as :user - end end diff --git a/features/steps/profile_ssh_keys.rb b/features/steps/profile/profile_ssh_keys.rb similarity index 94% rename from features/steps/profile_ssh_keys.rb rename to features/steps/profile/profile_ssh_keys.rb index 9360f66f..96df2d73 100644 --- a/features/steps/profile_ssh_keys.rb +++ b/features/steps/profile/profile_ssh_keys.rb @@ -1,4 +1,6 @@ class ProfileSshKeys < Spinach::FeatureSteps + include SharedAuthentication + Then 'I should see my ssh keys' do @user.keys.each do |key| page.should have_content(key.title) @@ -40,10 +42,6 @@ class ProfileSshKeys < Spinach::FeatureSteps end end - Given 'I sign in as a user' do - login_as :user - end - And 'I have ssh key "ssh-rsa Work"' do Factory :key, :user => @user, :title => "ssh-rsa Work", :key => "jfKLJDFKSFJSHFJssh-rsa Work" end diff --git a/features/steps/project.rb b/features/steps/project.rb deleted file mode 100644 index 666a65fa..00000000 --- a/features/steps/project.rb +++ /dev/null @@ -1,15 +0,0 @@ -class Projects < Spinach::FeatureSteps - Given 'I sign in as a user' do - login_as :user - end - - And 'I own project "Shop"' do - @project = Factory :project, :name => "Shop" - @project.add_access(@user, :admin) - end - - And 'I visit project "Shop" page' do - project = Project.find_by_name("Shop") - visit project_path(project) - end -end diff --git a/features/steps/create_project.rb b/features/steps/project/create_project.rb similarity index 76% rename from features/steps/create_project.rb rename to features/steps/project/create_project.rb index 80f6f708..6d2ca3f9 100644 --- a/features/steps/create_project.rb +++ b/features/steps/project/create_project.rb @@ -1,11 +1,6 @@ class CreateProject < Spinach::FeatureSteps - Given 'I signin as a user' do - login_as :user - end - - When 'I visit new project page' do - visit new_project_path - end + include SharedAuthentication + include SharedPaths And 'fill project form with valid data' do fill_in 'project_name', :with => 'NewProject' @@ -16,7 +11,7 @@ class CreateProject < Spinach::FeatureSteps Then 'I should see project page' do current_path.should == project_path(Project.last) - page.should have_content('NewProject') + page.should have_content "NewProject" end And 'I should see empty project instuctions' do diff --git a/features/steps/project/project.rb b/features/steps/project/project.rb new file mode 100644 index 00000000..f33f12eb --- /dev/null +++ b/features/steps/project/project.rb @@ -0,0 +1,5 @@ +class Projects < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths +end diff --git a/features/steps/project_browse_branches.rb b/features/steps/project/project_browse_branches.rb similarity index 73% rename from features/steps/project_browse_branches.rb rename to features/steps/project/project_browse_branches.rb index 9fb2e59d..2f6e185d 100644 --- a/features/steps/project_browse_branches.rb +++ b/features/steps/project/project_browse_branches.rb @@ -1,4 +1,8 @@ class ProjectBrowseBranches < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + Then 'I should see "Shop" recent branches list' do page.should have_content "Branches" page.should have_content "master" @@ -24,21 +28,8 @@ class ProjectBrowseBranches < Spinach::FeatureSteps end end - Given 'I sign in as a user' do - login_as :user - end - - And 'I own project "Shop"' do - @project = Factory :project, :name => "Shop" - @project.add_access(@user, :admin) - end - And 'project "Shop" has protected branches' do project = Project.find_by_name("Shop") project.protected_branches.create(:name => "stable") end - - Given 'I visit project branches page' do - visit branches_project_repository_path(@project) - end end diff --git a/features/steps/project_browse_commits.rb b/features/steps/project/project_browse_commits.rb similarity index 79% rename from features/steps/project_browse_commits.rb rename to features/steps/project/project_browse_commits.rb index 71c592a7..01479987 100644 --- a/features/steps/project_browse_commits.rb +++ b/features/steps/project/project_browse_commits.rb @@ -1,4 +1,8 @@ class ProjectBrowseCommits < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + Then 'I see project commits' do current_path.should == project_commits_path(@project) @@ -29,10 +33,6 @@ class ProjectBrowseCommits < Spinach::FeatureSteps page.should have_content "Showing 1 changed file" end - Given 'I visit compare refs page' do - visit compare_project_commits_path(@project) - end - And 'I fill compare fields with refs' do fill_in "from", :with => "master" fill_in "to", :with => "stable" @@ -44,17 +44,4 @@ class ProjectBrowseCommits < Spinach::FeatureSteps page.should have_content "Compare View" page.should have_content "Showing 73 changed files" end - - Given 'I sign in as a user' do - login_as :user - end - - And 'I own project "Shop"' do - @project = Factory :project, :name => "Shop" - @project.add_access(@user, :admin) - end - - Given 'I visit project commits page' do - visit project_commits_path(@project) - end end diff --git a/features/steps/project_browse_files.rb b/features/steps/project/project_browse_files.rb similarity index 58% rename from features/steps/project_browse_files.rb rename to features/steps/project/project_browse_files.rb index ad320584..67c553ce 100644 --- a/features/steps/project_browse_files.rb +++ b/features/steps/project/project_browse_files.rb @@ -1,14 +1,14 @@ class ProjectBrowseFiles < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + Then 'I should see files from repository' do page.should have_content "app" page.should have_content "History" page.should have_content "Gemfile" end - Given 'I visit project source page for "8470d70"' do - visit tree_project_ref_path(@project, "8470d70") - end - Then 'I should see files from repository for "8470d70"' do current_path.should == tree_project_ref_path(@project, "8470d70") page.should have_content "app" @@ -24,10 +24,6 @@ class ProjectBrowseFiles < Spinach::FeatureSteps page.should have_content "rubygems.org" end - Given 'I visit blob file from repo' do - visit tree_project_ref_path(@project, ValidCommit::ID, :path => ValidCommit::BLOB_FILE_PATH) - end - And 'I click link "raw"' do click_link "raw" end @@ -35,17 +31,4 @@ class ProjectBrowseFiles < Spinach::FeatureSteps Then 'I should see raw file content' do page.source.should == ValidCommit::BLOB_FILE end - - Given 'I sign in as a user' do - login_as :user - end - - And 'I own project "Shop"' do - @project = Factory :project, :name => "Shop" - @project.add_access(@user, :admin) - end - - Given 'I visit project source page' do - visit tree_project_ref_path(@project, @project.root_ref) - end end diff --git a/features/steps/project_browse_git_repo.rb b/features/steps/project/project_browse_git_repo.rb similarity index 57% rename from features/steps/project_browse_git_repo.rb rename to features/steps/project/project_browse_git_repo.rb index 56b33a90..e966f407 100644 --- a/features/steps/project_browse_git_repo.rb +++ b/features/steps/project/project_browse_git_repo.rb @@ -1,4 +1,8 @@ class ProjectBrowseGitRepo < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + Given 'I click on "Gemfile" file in repo' do click_link "Gemfile" end @@ -12,17 +16,4 @@ class ProjectBrowseGitRepo < Spinach::FeatureSteps page.should have_content "Dmitriy Zaporozhets" page.should have_content "bc3735004cb Moving to rails 3.2" end - - Given 'I sign in as a user' do - login_as :user - end - - And 'I own project "Shop"' do - @project = Factory :project, :name => "Shop" - @project.add_access(@user, :admin) - end - - Given 'I visit project source page' do - visit tree_project_ref_path(@project, @project.root_ref) - end end diff --git a/features/steps/project/project_browse_tags.rb b/features/steps/project/project_browse_tags.rb new file mode 100644 index 00000000..0cbfa0d8 --- /dev/null +++ b/features/steps/project/project_browse_tags.rb @@ -0,0 +1,10 @@ +class ProjectBrowseTags < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + + Then 'I should see "Shop" all tags list' do + page.should have_content "Tags" + page.should have_content "v1.2.1" + end +end diff --git a/features/steps/project/project_comment_commit.rb b/features/steps/project/project_comment_commit.rb new file mode 100644 index 00000000..cb8385e1 --- /dev/null +++ b/features/steps/project/project_comment_commit.rb @@ -0,0 +1,6 @@ +class ProjectCommentCommit < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedNote + include SharedPaths +end diff --git a/features/steps/project_issues.rb b/features/steps/project/project_issues.rb similarity index 80% rename from features/steps/project_issues.rb rename to features/steps/project/project_issues.rb index c3fca0c6..64af2449 100644 --- a/features/steps/project_issues.rb +++ b/features/steps/project/project_issues.rb @@ -1,4 +1,9 @@ class ProjectIssues < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedNote + include SharedPaths + Given 'I should see "Release 0.4" in issues' do page.should have_content "Release 0.4" end @@ -51,20 +56,6 @@ class ProjectIssues < Spinach::FeatureSteps page.should have_content issue.project.name end - Given 'I visit issue page "Release 0.4"' do - issue = Issue.find_by_title("Release 0.4") - visit project_issue_path(issue.project, issue) - end - - And 'I leave a comment like "XML attached"' do - fill_in "note_note", :with => "XML attached" - click_button "Add Comment" - end - - Then 'I should see comment "XML attached"' do - page.should have_content "XML attached" - end - Given 'I fill in issue search with "Release"' do fill_in 'issue_search', with: "Release" end @@ -90,22 +81,14 @@ class ProjectIssues < Spinach::FeatureSteps project = Project.find_by_name("Shop") milestone = Factory :milestone, :title => "v2.2", :project => project - 3.times do - issue = Factory :issue, :project => project, :milestone => milestone - end + 3.times { Factory :issue, :project => project, :milestone => milestone } end And 'project "Shop" has milestone "v3.0"' do project = Project.find_by_name("Shop") milestone = Factory :milestone, :title => "v3.0", :project => project - 3.times do - issue = Factory :issue, :project => project, :milestone => milestone - end - end - - And 'I visit project "Shop" issues page' do - visit project_issues_path(Project.find_by_name("Shop")) + 3.times { Factory :issue, :project => project, :milestone => milestone } end When 'I select milestone "v3.0"' do @@ -132,15 +115,6 @@ class ProjectIssues < Spinach::FeatureSteps page.find(issues_assignee_selector).should have_content(assignee_name) end - Given 'I sign in as a user' do - login_as :user - end - - And 'I own project "Shop"' do - @project = Factory :project, :name => "Shop" - @project.add_access(@user, :admin) - end - And 'project "Shop" have "Release 0.4" open issue' do project = Project.find_by_name("Shop") Factory.create(:issue, diff --git a/features/steps/project_labels.rb b/features/steps/project/project_labels.rb similarity index 62% rename from features/steps/project_labels.rb rename to features/steps/project/project_labels.rb index 2e83824f..1a347bf3 100644 --- a/features/steps/project_labels.rb +++ b/features/steps/project/project_labels.rb @@ -1,4 +1,8 @@ class ProjectLabels < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + Then 'I should see label "bug"' do within ".labels-table" do page.should have_content "bug" @@ -11,23 +15,10 @@ class ProjectLabels < Spinach::FeatureSteps end end - Given 'I sign in as a user' do - login_as :user - end - - And 'I own project "Shop"' do - @project = Factory :project, :name => "Shop" - @project.add_access(@user, :admin) - end - And 'project "Shop" have issues tags: "bug", "feature"' do project = Project.find_by_name("Shop") ['bug', 'feature'].each do |label| Factory :issue, project: project, label_list: label end end - - Given 'I visit project "Shop" labels page' do - visit project_labels_path(Project.find_by_name("Shop")) - end end diff --git a/features/steps/project_merge_requests.rb b/features/steps/project/project_merge_requests.rb similarity index 73% rename from features/steps/project_merge_requests.rb rename to features/steps/project/project_merge_requests.rb index 8515e7e8..80e83906 100644 --- a/features/steps/project_merge_requests.rb +++ b/features/steps/project/project_merge_requests.rb @@ -1,4 +1,9 @@ class ProjectMergeRequests < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedNote + include SharedPaths + Then 'I should see "Bug NS-04" in merge requests' do page.should have_content "Bug NS-04" end @@ -56,29 +61,6 @@ class ProjectMergeRequests < Spinach::FeatureSteps page.should have_content "Wiki Feature" end - Given 'I visit merge request page "Bug NS-04"' do - mr = MergeRequest.find_by_title("Bug NS-04") - visit project_merge_request_path(mr.project, mr) - end - - And 'I leave a comment like "XML attached"' do - fill_in "note_note", :with => "XML attached" - click_button "Add Comment" - end - - Then 'I should see comment "XML attached"' do - page.should have_content "XML attached" - end - - Given 'I sign in as a user' do - login_as :user - end - - And 'I own project "Shop"' do - @project = Factory :project, :name => "Shop" - @project.add_access(@user, :admin) - end - And 'project "Shop" have "Bug NS-04" open merge request' do project = Project.find_by_name("Shop") Factory.create(:merge_request, @@ -95,8 +77,4 @@ class ProjectMergeRequests < Spinach::FeatureSteps :author => project.users.first, :closed => true) end - - And 'I visit project "Shop" merge requests page' do - visit project_merge_requests_path(Project.find_by_name("Shop")) - end end diff --git a/features/steps/project_milestones.rb b/features/steps/project/project_milestones.rb similarity index 70% rename from features/steps/project_milestones.rb rename to features/steps/project/project_milestones.rb index 97574d1c..83ed6859 100644 --- a/features/steps/project_milestones.rb +++ b/features/steps/project/project_milestones.rb @@ -1,4 +1,8 @@ class ProjectMilestones < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + Then 'I should see milestone "v2.2"' do milestone = @project.milestones.find_by_title("v2.2") page.should have_content(milestone.title[0..10]) @@ -26,26 +30,10 @@ class ProjectMilestones < Spinach::FeatureSteps page.should have_content("Browse Issues") end - Given 'I sign in as a user' do - login_as :user - end - - And 'I own project "Shop"' do - @project = Factory :project, :name => "Shop" - @project.add_access(@user, :admin) - end - And 'project "Shop" has milestone "v2.2"' do project = Project.find_by_name("Shop") milestone = Factory :milestone, :title => "v2.2", :project => project - 3.times do - issue = Factory :issue, :project => project, :milestone => milestone - end - end - - Given 'I visit project "Shop" milestones page' do - @project = Project.find_by_name("Shop") - visit project_milestones_path(@project) + 3.times { Factory :issue, :project => project, :milestone => milestone } end end diff --git a/features/steps/project_network_graph.rb b/features/steps/project/project_network_graph.rb similarity index 76% rename from features/steps/project_network_graph.rb rename to features/steps/project/project_network_graph.rb index d87f3d82..f34a81a4 100644 --- a/features/steps/project_network_graph.rb +++ b/features/steps/project/project_network_graph.rb @@ -1,4 +1,7 @@ class ProjectNetworkGraph < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + Then 'page should have network graph' do page.should have_content "Project Network Graph" within ".graph" do @@ -7,15 +10,6 @@ class ProjectNetworkGraph < Spinach::FeatureSteps end end - Given 'I sign in as a user' do - login_as :user - end - - And 'I own project "Shop"' do - @project = Factory :project, :name => "Shop" - @project.add_access(@user, :admin) - end - And 'I visit project "Shop" network page' do project = Project.find_by_name("Shop") diff --git a/features/steps/project_team_management.rb b/features/steps/project/project_team_management.rb similarity index 89% rename from features/steps/project_team_management.rb rename to features/steps/project/project_team_management.rb index 9cee75bd..7beca257 100644 --- a/features/steps/project_team_management.rb +++ b/features/steps/project/project_team_management.rb @@ -1,4 +1,8 @@ class ProjectTeamManagement < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + Then 'I should be able to see myself in team' do page.should have_content(@user.name) page.should have_content(@user.email) @@ -42,10 +46,6 @@ class ProjectTeamManagement < Spinach::FeatureSteps end end - Then 'I visit project "Shop" team page' do - visit team_project_path(Project.find_by_name("Shop")) - end - And 'I should see "Sam" in team list as "Reporter"' do user = User.find_by_name("Sam") role_id = find(".user_#{user.id} #team_member_project_access").value @@ -73,15 +73,6 @@ class ProjectTeamManagement < Spinach::FeatureSteps page.should_not have_content(user.email) end - Given 'I sign in as a user' do - login_as :user - end - - And 'I own project "Shop"' do - @project = Factory :project, :name => "Shop" - @project.add_access(@user, :admin) - end - And 'gitlab user "Mike"' do Factory :user, :name => "Mike" end diff --git a/features/steps/project/project_wall.rb b/features/steps/project/project_wall.rb new file mode 100644 index 00000000..ba9d3533 --- /dev/null +++ b/features/steps/project/project_wall.rb @@ -0,0 +1,6 @@ +class ProjectWall < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedNote + include SharedPaths +end diff --git a/features/steps/project/project_wiki.rb b/features/steps/project/project_wiki.rb new file mode 100644 index 00000000..902e9ce1 --- /dev/null +++ b/features/steps/project/project_wiki.rb @@ -0,0 +1,20 @@ +class ProjectWiki < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedNote + include SharedPaths + + Given 'I create Wiki page' do + fill_in "Title", :with => 'Test title' + fill_in "Content", :with => '[link test](test)' + click_on "Save" + end + + Then 'I should see newly created wiki page' do + page.should have_content "Test title" + page.should have_content "link test" + + click_link "link test" + page.should have_content "Editing page" + end +end diff --git a/features/steps/project_browse_tags.rb b/features/steps/project_browse_tags.rb deleted file mode 100644 index c6bea691..00000000 --- a/features/steps/project_browse_tags.rb +++ /dev/null @@ -1,19 +0,0 @@ -class ProjectBrowseTags < Spinach::FeatureSteps - Then 'I should see "Shop" all tags list' do - page.should have_content "Tags" - page.should have_content "v1.2.1" - end - - Given 'I sign in as a user' do - login_as :user - end - - And 'I own project "Shop"' do - @project = Factory :project, :name => "Shop" - @project.add_access(@user, :admin) - end - - Given 'I visit project tags page' do - visit tags_project_repository_path(@project) - end -end diff --git a/features/steps/project_comment_commit.rb b/features/steps/project_comment_commit.rb deleted file mode 100644 index 04e94c7d..00000000 --- a/features/steps/project_comment_commit.rb +++ /dev/null @@ -1,23 +0,0 @@ -class ProjectCommentCommit < Spinach::FeatureSteps - Given 'I leave a comment like "XML attached"' do - fill_in "note_note", :with => "XML attached" - click_button "Add Comment" - end - - Then 'I should see comment "XML attached"' do - page.should have_content "XML attached" - end - - Given 'I sign in as a user' do - login_as :user - end - - And 'I own project "Shop"' do - @project = Factory :project, :name => "Shop" - @project.add_access(@user, :admin) - end - - Given 'I visit project commit page' do - visit project_commit_path(@project, ValidCommit::ID) - end -end diff --git a/features/steps/project_wall.rb b/features/steps/project_wall.rb deleted file mode 100644 index b94bd0bb..00000000 --- a/features/steps/project_wall.rb +++ /dev/null @@ -1,24 +0,0 @@ -class ProjectWall < Spinach::FeatureSteps - Given 'I write new comment "my special test message"' do - fill_in "note_note", :with => "my special test message" - click_button "Add Comment" - end - - Then 'I should see project wall note "my special test message"' do - page.should have_content "my special test message" - end - - Then 'I visit project "Shop" wall page' do - project = Project.find_by_name("Shop") - visit wall_project_path(project) - end - - Given 'I signin as a user' do - login_as :user - end - - And 'I own project "Shop"' do - @project = Factory :project, :name => "Shop" - @project.add_access(@user, :admin) - end -end diff --git a/features/steps/project_wiki.rb b/features/steps/project_wiki.rb deleted file mode 100644 index 8c8c7c8d..00000000 --- a/features/steps/project_wiki.rb +++ /dev/null @@ -1,37 +0,0 @@ -class ProjectWiki < Spinach::FeatureSteps - Given 'I create Wiki page' do - fill_in "Title", :with => 'Test title' - fill_in "Content", :with => '[link test](test)' - click_on "Save" - end - - Then 'I should see newly created wiki page' do - page.should have_content "Test title" - page.should have_content "link test" - - click_link "link test" - page.should have_content "Editing page" - end - - And 'I leave a comment like "XML attached"' do - fill_in "note_note", :with => "XML attached" - click_button "Add Comment" - end - - Then 'I should see comment "XML attached"' do - page.should have_content "XML attached" - end - - Given 'I sign in as a user' do - login_as :user - end - - And 'I own project "Shop"' do - @project = Factory :project, :name => "Shop" - @project.add_access(@user, :admin) - end - - Given 'I visit project wiki page' do - visit project_wiki_path(@project, :index) - end -end diff --git a/features/steps/shared/authentication.rb b/features/steps/shared/authentication.rb new file mode 100644 index 00000000..77d9839f --- /dev/null +++ b/features/steps/shared/authentication.rb @@ -0,0 +1,10 @@ +require Rails.root.join('spec', 'support', 'login_helpers') + +module SharedAuthentication + include Spinach::DSL + include LoginHelpers + + Given 'I sign in as a user' do + login_as :user + end +end diff --git a/features/steps/shared/note.rb b/features/steps/shared/note.rb new file mode 100644 index 00000000..923e69b6 --- /dev/null +++ b/features/steps/shared/note.rb @@ -0,0 +1,21 @@ +module SharedNote + include Spinach::DSL + + Given 'I leave a comment like "XML attached"' do + fill_in "note_note", :with => "XML attached" + click_button "Add Comment" + end + + Then 'I should see comment "XML attached"' do + page.should have_content "XML attached" + end + + Given 'I write new comment "my special test message"' do + fill_in "note_note", :with => "my special test message" + click_button "Add Comment" + end + + Then 'I should see project wall note "my special test message"' do + page.should have_content "my special test message" + end +end diff --git a/features/steps/shared/paths.rb b/features/steps/shared/paths.rb new file mode 100644 index 00000000..05ae88e6 --- /dev/null +++ b/features/steps/shared/paths.rb @@ -0,0 +1,112 @@ +module SharedPaths + include Spinach::DSL + + And 'I visit dashboard search page' do + visit search_path + end + + And 'I visit dashboard merge requests page' do + visit dashboard_merge_requests_path + end + + And 'I visit dashboard issues page' do + visit dashboard_issues_path + end + + When 'I visit dashboard page' do + visit dashboard_path + end + + Given 'I visit profile page' do + visit profile_path + end + + Given 'I visit profile password page' do + visit profile_password_path + end + + Given 'I visit profile token page' do + visit profile_token_path + end + + When 'I visit new project page' do + visit new_project_path + end + + And 'I visit project "Shop" page' do + project = Project.find_by_name("Shop") + visit project_path(project) + end + + Given 'I visit project branches page' do + visit branches_project_repository_path(@project) + end + + Given 'I visit compare refs page' do + visit compare_project_commits_path(@project) + end + + Given 'I visit project commits page' do + visit project_commits_path(@project) + end + + Given 'I visit project source page' do + visit tree_project_ref_path(@project, @project.root_ref) + end + + Given 'I visit blob file from repo' do + visit tree_project_ref_path(@project, ValidCommit::ID, :path => ValidCommit::BLOB_FILE_PATH) + end + + Given 'I visit project source page for "8470d70"' do + visit tree_project_ref_path(@project, "8470d70") + end + + Given 'I visit project tags page' do + visit tags_project_repository_path(@project) + end + + Given 'I visit project commit page' do + visit project_commit_path(@project, ValidCommit::ID) + end + + And 'I visit project "Shop" issues page' do + visit project_issues_path(Project.find_by_name("Shop")) + end + + Given 'I visit issue page "Release 0.4"' do + issue = Issue.find_by_title("Release 0.4") + visit project_issue_path(issue.project, issue) + end + + Given 'I visit project "Shop" labels page' do + visit project_labels_path(Project.find_by_name("Shop")) + end + + Given 'I visit merge request page "Bug NS-04"' do + mr = MergeRequest.find_by_title("Bug NS-04") + visit project_merge_request_path(mr.project, mr) + end + + And 'I visit project "Shop" merge requests page' do + visit project_merge_requests_path(Project.find_by_name("Shop")) + end + + Given 'I visit project "Shop" milestones page' do + @project = Project.find_by_name("Shop") + visit project_milestones_path(@project) + end + + Then 'I visit project "Shop" team page' do + visit team_project_path(Project.find_by_name("Shop")) + end + + Then 'I visit project "Shop" wall page' do + project = Project.find_by_name("Shop") + visit wall_project_path(project) + end + + Given 'I visit project wiki page' do + visit project_wiki_path(@project, :index) + end +end diff --git a/features/steps/shared/project.rb b/features/steps/shared/project.rb new file mode 100644 index 00000000..9b64ca59 --- /dev/null +++ b/features/steps/shared/project.rb @@ -0,0 +1,8 @@ +module SharedProject + include Spinach::DSL + + And 'I own project "Shop"' do + @project = Factory :project, :name => "Shop" + @project.add_access(@user, :admin) + end +end diff --git a/features/support/env.rb b/features/support/env.rb index 7bd89801..9c6cef07 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -5,11 +5,12 @@ require 'rspec' require 'database_cleaner' require 'spinach/capybara' -%w(gitolite_stub login_helpers stubbed_repository valid_commit).each do |f| +%w(gitolite_stub stubbed_repository valid_commit).each do |f| require Rails.root.join('spec', 'support', f) end -include LoginHelpers +Dir["#{Rails.root}/features/steps/shared/*.rb"].each {|file| require file} + include GitoliteStub WebMock.allow_net_connect! From a2f7f48c034bc32fe626980ed88f8789b19b36bd Mon Sep 17 00:00:00 2001 From: randx Date: Mon, 10 Sep 2012 19:50:35 +0300 Subject: [PATCH 253/357] Ask guard not to run all tests on start --- Guardfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Guardfile b/Guardfile index 6ed414bc..0eea2ad9 100644 --- a/Guardfile +++ b/Guardfile @@ -1,7 +1,7 @@ # A sample Guardfile # More info at https://github.com/guard/guard#readme -guard 'rspec', :version => 2 do +guard 'rspec', :version => 2, :all_on_start => false do watch(%r{^spec/.+_spec\.rb$}) watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" } watch('spec/spec_helper.rb') { "spec" } From 96d4f22e53a6176715f9557fb0707cb166a1dd80 Mon Sep 17 00:00:00 2001 From: Saito Date: Tue, 11 Sep 2012 19:18:14 +0800 Subject: [PATCH 254/357] tree view need use ascii-8bit, file name need be utf8. --- app/helpers/tree_helper.rb | 3 ++- app/models/tree.rb | 2 +- app/views/refs/_tree_file.html.haml | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/helpers/tree_helper.rb b/app/helpers/tree_helper.rb index c51ee84a..a5d5c742 100644 --- a/app/helpers/tree_helper.rb +++ b/app/helpers/tree_helper.rb @@ -18,7 +18,8 @@ module TreeHelper end def tree_full_path(content) - if params[:path] + content.name.force_encoding('utf-8') + if params[:path] File.join(params[:path], content.name) else content.name diff --git a/app/models/tree.rb b/app/models/tree.rb index bc95d335..d65e50ab 100644 --- a/app/models/tree.rb +++ b/app/models/tree.rb @@ -16,7 +16,7 @@ class Tree def initialize(raw_tree, project, ref = nil, path = nil) @project, @ref, @path = project, ref, path, @tree = if path - raw_tree / path + raw_tree / path.dup.force_encoding('ascii-8bit') else raw_tree end diff --git a/app/views/refs/_tree_file.html.haml b/app/views/refs/_tree_file.html.haml index 765f271a..f6566ccf 100644 --- a/app/views/refs/_tree_file.html.haml +++ b/app/views/refs/_tree_file.html.haml @@ -2,7 +2,7 @@ .file_title %i.icon-file %span.file_name - = name + = name.force_encoding('utf-8') %small #{file.mode} %span.options = link_to "raw", blob_project_ref_path(@project, @ref, path: params[:path]), class: "btn very_small", target: "_blank" From 5a9071264576e672da998d6d346bc5200ae91153 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Tue, 11 Sep 2012 05:35:16 -0700 Subject: [PATCH 255/357] don't load commit logs when viewing blob --- app/views/refs/_tree.html.haml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/views/refs/_tree.html.haml b/app/views/refs/_tree.html.haml index 83e73280..ec6dba4e 100644 --- a/app/views/refs/_tree.html.haml +++ b/app/views/refs/_tree.html.haml @@ -50,11 +50,12 @@ history.pushState({ path: this.path }, '', "#{@history_path}"); }); - // Load last commit log for each file in tree - $(window).load(function(){ - ajaxGet('#{@logs_path}'); - }); - +- unless tree.is_blob? + :javascript + // Load last commit log for each file in tree + $(window).load(function(){ + ajaxGet('#{@logs_path}'); + }); - if params[:path] && request.xhr? :javascript From f7c70eaaedd196accbe8e952ddc4738a96b81998 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Tue, 11 Sep 2012 16:47:59 +0200 Subject: [PATCH 256/357] Add *votes_in_percent --- app/roles/votes.rb | 16 +++++++++++++ spec/roles/votes_spec.rb | 50 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/app/roles/votes.rb b/app/roles/votes.rb index 3a584d8b..043a6feb 100644 --- a/app/roles/votes.rb +++ b/app/roles/votes.rb @@ -4,11 +4,27 @@ module Votes notes.select(&:upvote?).size end + def upvotes_in_percent + if votes_count.zero? + 0 + else + 100.0 / votes_count * upvotes + end + end + # Return the number of -1 comments (downvotes) def downvotes notes.select(&:downvote?).size end + def downvotes_in_percent + if votes_count.zero? + 0 + else + 100.0 - upvotes_in_percent + end + end + # Return the total number of votes def votes_count upvotes + downvotes diff --git a/spec/roles/votes_spec.rb b/spec/roles/votes_spec.rb index 5c3548a5..98666022 100644 --- a/spec/roles/votes_spec.rb +++ b/spec/roles/votes_spec.rb @@ -79,4 +79,54 @@ describe Issue do issue.votes_count.should == 3 end end + + describe "#upvotes_in_percent" do + it "with no notes has a 0% score" do + issue.upvotes_in_percent.should == 0 + end + + it "should count a single 1 note as 100%" do + issue.notes << create(:note, note: "+1 This is awesome") + issue.upvotes_in_percent.should == 100 + end + + it "should count multiple +1 notes as 100%" do + issue.notes << create(:note, note: "+1 This is awesome") + issue.notes << create(:note, note: "+1 I want this") + issue.upvotes_in_percent.should == 100 + end + + it "should count fractions for multiple +1 and -1 notes correctly" do + issue.notes << create(:note, note: "+1 This is awesome") + issue.notes << create(:note, note: "+1 I want this") + issue.notes << create(:note, note: "-1 This is bad") + issue.notes << create(:note, note: "+1 me too") + issue.upvotes_in_percent.should == 75 + end + end + + describe "#downvotes_in_percent" do + it "with no notes has a 0% score" do + issue.downvotes_in_percent.should == 0 + end + + it "should count a single -1 note as 100%" do + issue.notes << create(:note, note: "-1 This is bad") + issue.downvotes_in_percent.should == 100 + end + + it "should count multiple -1 notes as 100%" do + issue.notes << create(:note, note: "-1 This is bad") + issue.notes << create(:note, note: "-1 Away with this") + issue.downvotes_in_percent.should == 100 + end + + it "should count fractions for multiple +1 and -1 notes correctly" do + issue.notes << create(:note, note: "+1 This is awesome") + issue.notes << create(:note, note: "+1 I want this") + issue.notes << create(:note, note: "-1 This is bad") + issue.notes << create(:note, note: "+1 me too") + issue.downvotes_in_percent.should == 25 + end + end end From 0bfcc574b660108646bd2c99a611163a0c847251 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Mon, 10 Sep 2012 15:27:14 +0200 Subject: [PATCH 257/357] Extract displaying votes into partials --- app/views/issues/_show.html.haml | 9 +-------- app/views/issues/show.html.haml | 9 +-------- app/views/merge_requests/_merge_request.html.haml | 10 ++-------- app/views/merge_requests/show/_mr_title.html.haml | 9 +-------- app/views/votes/_votes_block.html.haml | 6 ++++++ app/views/votes/_votes_inline.html.haml | 6 ++++++ 6 files changed, 17 insertions(+), 32 deletions(-) create mode 100644 app/views/votes/_votes_block.html.haml create mode 100644 app/views/votes/_votes_inline.html.haml diff --git a/app/views/issues/_show.html.haml b/app/views/issues/_show.html.haml index db394873..22101aa1 100644 --- a/app/views/issues/_show.html.haml +++ b/app/views/issues/_show.html.haml @@ -35,11 +35,4 @@   - if issue.votes_count > 0 - .votes.votes-inline - .upvotes= issue.upvotes - .progress - - up_percent = 100.0/issue.votes_count*issue.upvotes - - down_percent = 100.0-up_percent - .bar.bar-success{style: "width: #{up_percent}%;"} - .bar.bar-danger{style: "width: #{down_percent}%;"} - .downvotes= issue.downvotes + = render 'votes/votes_inline', votable: issue diff --git a/app/views/issues/show.html.haml b/app/views/issues/show.html.haml index 1ec03951..9b1c72a3 100644 --- a/app/views/issues/show.html.haml +++ b/app/views/issues/show.html.haml @@ -17,14 +17,7 @@ Edit .right - .span3.votes.votes-block#votes - .progress - - up_percent = 100.0/@issue.votes_count*@issue.upvotes - - down_percent = 100.0-up_percent - .bar.bar-success{style: "width: #{up_percent}%;"} - .bar.bar-danger{style: "width: #{down_percent}%;"} - .upvotes= "#{@issue.upvotes} up" - .downvotes= "#{@issue.downvotes} down" + .span3#votes= render 'votes/votes_block', votable: @issue .back_link = link_to project_issues_path(@project) do diff --git a/app/views/merge_requests/_merge_request.html.haml b/app/views/merge_requests/_merge_request.html.haml index 08420fd2..9d94d670 100644 --- a/app/views/merge_requests/_merge_request.html.haml +++ b/app/views/merge_requests/_merge_request.html.haml @@ -23,12 +23,6 @@ authored by #{merge_request.author_name} = time_ago_in_words(merge_request.created_at) ago + - if merge_request.votes_count > 0 - .votes.votes-inline - .upvotes= merge_request.upvotes - .progress - - up_percent = 100.0/merge_request.votes_count*merge_request.upvotes - - down_percent = 100.0-up_percent - .bar.bar-success{style: "width: #{up_percent}%;"} - .bar.bar-danger{style: "width: #{down_percent}%;"} - .downvotes= merge_request.downvotes + = render 'votes/votes_inline', votable: merge_request diff --git a/app/views/merge_requests/show/_mr_title.html.haml b/app/views/merge_requests/show/_mr_title.html.haml index c0ad4be5..8708469c 100644 --- a/app/views/merge_requests/show/_mr_title.html.haml +++ b/app/views/merge_requests/show/_mr_title.html.haml @@ -24,14 +24,7 @@ Edit .right - .span3.votes.votes-block#votes - .progress - - up_percent = 100.0/@merge_request.votes_count*@merge_request.upvotes - - down_percent = 100.0-up_percent - .bar.bar-success{style: "width: #{up_percent}%;"} - .bar.bar-danger{style: "width: #{down_percent}%;"} - .upvotes= "#{@merge_request.upvotes} up" - .downvotes= "#{@merge_request.downvotes} down" + .span3#votes= render 'votes/votes_block', votable: @merge_request .back_link = link_to project_merge_requests_path(@project) do diff --git a/app/views/votes/_votes_block.html.haml b/app/views/votes/_votes_block.html.haml new file mode 100644 index 00000000..bded53b2 --- /dev/null +++ b/app/views/votes/_votes_block.html.haml @@ -0,0 +1,6 @@ +.votes.votes-block + .progress + .bar.bar-success{style: "width: #{votable.upvotes_in_percent}%;"} + .bar.bar-danger{style: "width: #{votable.downvotes_in_percent}%;"} + .upvotes= "#{votable.upvotes} up" + .downvotes= "#{votable.downvotes} down" diff --git a/app/views/votes/_votes_inline.html.haml b/app/views/votes/_votes_inline.html.haml new file mode 100644 index 00000000..91bd200d --- /dev/null +++ b/app/views/votes/_votes_inline.html.haml @@ -0,0 +1,6 @@ +.votes.votes-inline + .upvotes= votable.upvotes + .progress + .bar.bar-success{style: "width: #{votable.upvotes_in_percent}%;"} + .bar.bar-danger{style: "width: #{votable.downvotes_in_percent}%;"} + .downvotes= votable.downvotes From 0523b4265bb19bfff15c6a435dd52ffd6a5683f8 Mon Sep 17 00:00:00 2001 From: randx Date: Tue, 11 Sep 2012 23:24:53 +0300 Subject: [PATCH 258/357] Application logger --- app/assets/javascripts/admin.js.coffee | 4 +++ app/assets/javascripts/application.js | 2 +- app/assets/stylesheets/sections/nav.scss | 1 - app/observers/project_observer.rb | 12 ++++++++ app/observers/user_observer.rb | 12 ++++++++ app/views/admin/logs/show.html.haml | 35 ++++++++++++++++++------ lib/gitlab/app_logger.rb | 11 ++++++++ lib/gitlab/backend/gitolite_config.rb | 10 +++++-- lib/gitlab/git_logger.rb | 11 ++++++++ lib/gitlab/logger.rb | 8 ++---- 10 files changed, 86 insertions(+), 20 deletions(-) create mode 100644 lib/gitlab/app_logger.rb create mode 100644 lib/gitlab/git_logger.rb diff --git a/app/assets/javascripts/admin.js.coffee b/app/assets/javascripts/admin.js.coffee index 269a7a76..76454c29 100644 --- a/app/assets/javascripts/admin.js.coffee +++ b/app/assets/javascripts/admin.js.coffee @@ -6,3 +6,7 @@ $ -> elems.val('').attr 'disabled', true else elems.removeAttr 'disabled' + + $('.log-tabs a').click (e) -> + e.preventDefault() + $(this).tab('show') diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 4c487ec1..f9fdb0f7 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -11,7 +11,7 @@ //= require jquery.endless-scroll //= require jquery.highlight //= require jquery.waitforimages -//= require bootstrap-modal +//= require bootstrap //= require modernizr //= require chosen-jquery //= require raphael diff --git a/app/assets/stylesheets/sections/nav.scss b/app/assets/stylesheets/sections/nav.scss index 6f6a0e8e..2d902918 100644 --- a/app/assets/stylesheets/sections/nav.scss +++ b/app/assets/stylesheets/sections/nav.scss @@ -55,7 +55,6 @@ ul.main_menu { &.current { background-color:#D5D5D5; - border-bottom: 1px solid #AAA; border-right: 1px solid #BBB; border-left: 1px solid #BBB; border-radius: 0 0 1px 1px; diff --git a/app/observers/project_observer.rb b/app/observers/project_observer.rb index 135959ab..03a61709 100644 --- a/app/observers/project_observer.rb +++ b/app/observers/project_observer.rb @@ -4,6 +4,18 @@ class ProjectObserver < ActiveRecord::Observer end def after_destroy(project) + log_info("Project \"#{project.name}\" was removed") + project.destroy_repository end + + def after_create project + log_info("#{project.owner.name} created a new project \"#{project.name}\"") + end + + protected + + def log_info message + Gitlab::AppLogger.info message + end end diff --git a/app/observers/user_observer.rb b/app/observers/user_observer.rb index d12bcc99..654621f7 100644 --- a/app/observers/user_observer.rb +++ b/app/observers/user_observer.rb @@ -1,5 +1,17 @@ class UserObserver < ActiveRecord::Observer def after_create(user) + log_info("User \"#{user.name}\" (#{user.email}) was created") + Notify.new_user_email(user.id, user.password).deliver end + + def after_destroy user + log_info("User \"#{user.name}\" (#{user.email}) was removed") + end + + protected + + def log_info message + Gitlab::AppLogger.info message + end end diff --git a/app/views/admin/logs/show.html.haml b/app/views/admin/logs/show.html.haml index 800d3bb2..0efe6db7 100644 --- a/app/views/admin/logs/show.html.haml +++ b/app/views/admin/logs/show.html.haml @@ -1,9 +1,26 @@ -.file_holder#README - .file_title - %i.icon-file - githost.log - .file_content.logs - %ol - - Gitlab::Logger.read_latest.each do |line| - %li - %p= line +%ul.nav.nav-tabs.log-tabs + %li.active + = link_to "githost.log", "#githost", 'data-toggle' => 'tab' + %li + = link_to "application.log", "#application", 'data-toggle' => 'tab' +.tab-content + .tab-pane.active#githost + .file_holder#README + .file_title + %i.icon-file + githost.log + .file_content.logs + %ol + - Gitlab::GitLogger.read_latest.each do |line| + %li + %p= line + .tab-pane#application + .file_holder#README + .file_title + %i.icon-file + application.log + .file_content.logs + %ol + - Gitlab::AppLogger.read_latest.each do |line| + %li + %p= line diff --git a/lib/gitlab/app_logger.rb b/lib/gitlab/app_logger.rb new file mode 100644 index 00000000..8e4717b4 --- /dev/null +++ b/lib/gitlab/app_logger.rb @@ -0,0 +1,11 @@ +module Gitlab + class AppLogger < Gitlab::Logger + def self.file_name + 'application.log' + end + + def format_message(severity, timestamp, progname, msg) + "#{timestamp.to_s(:long)}: #{msg}\n" + end + end +end diff --git a/lib/gitlab/backend/gitolite_config.rb b/lib/gitlab/backend/gitolite_config.rb index 0d636d2d..f51e8efc 100644 --- a/lib/gitlab/backend/gitolite_config.rb +++ b/lib/gitlab/backend/gitolite_config.rb @@ -58,18 +58,22 @@ module Gitlab end end rescue PullError => ex - Gitlab::Logger.error("Pull error -> " + ex.message) + log("Pull error -> " + ex.message) raise Gitolite::AccessDenied, ex.message rescue PushError => ex - Gitlab::Logger.error("Push error -> " + " " + ex.message) + log("Push error -> " + " " + ex.message) raise Gitolite::AccessDenied, ex.message rescue Exception => ex - Gitlab::Logger.error(ex.class.name + " " + ex.message) + log(ex.class.name + " " + ex.message) raise Gitolite::AccessDenied.new("gitolite timeout") end + def log message + Gitlab::GitLogger.error(message) + end + def destroy_project(project) FileUtils.rm_rf(project.path_to_repo) conf.rm_repo(project.path) diff --git a/lib/gitlab/git_logger.rb b/lib/gitlab/git_logger.rb new file mode 100644 index 00000000..fbfed205 --- /dev/null +++ b/lib/gitlab/git_logger.rb @@ -0,0 +1,11 @@ +module Gitlab + class GitLogger < Gitlab::Logger + def self.file_name + 'githost.log' + end + + def format_message(severity, timestamp, progname, msg) + "#{timestamp.to_s(:long)} -> #{severity} -> #{msg}\n" + end + end +end diff --git a/lib/gitlab/logger.rb b/lib/gitlab/logger.rb index c3a19e71..9405163d 100644 --- a/lib/gitlab/logger.rb +++ b/lib/gitlab/logger.rb @@ -9,17 +9,13 @@ module Gitlab end def self.read_latest - path = Rails.root.join("log/githost.log") + path = Rails.root.join("log", file_name) self.build unless File.exist?(path) logs = File.read(path).split("\n") end def self.build - new(File.join(Rails.root, "log/githost.log")) + new(File.join(Rails.root, "log", file_name)) end - - def format_message(severity, timestamp, progname, msg) - "#{timestamp.to_s(:long)} -> #{severity} -> #{msg}\n" - end end end From 486de8c3f412df3e71c9045faf250941c03c8c00 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 12 Sep 2012 07:48:22 +0300 Subject: [PATCH 259/357] Refactoring auth --- Gemfile.lock | 32 +++++++++++++++ app/assets/stylesheets/auth_methods.scss | 4 +- app/views/devise/sessions/new.html.erb | 32 --------------- config/gitlab.yml.example | 50 +++++++++++++++--------- config/initializers/1_settings.rb | 10 ++++- config/initializers/devise.rb | 17 ++++++++ config/initializers/omniauth.rb.sample | 15 ------- 7 files changed, 91 insertions(+), 69 deletions(-) delete mode 100644 app/views/devise/sessions/new.html.erb delete mode 100644 config/initializers/omniauth.rb.sample diff --git a/Gemfile.lock b/Gemfile.lock index 8046b92b..3d27d3fb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -158,6 +158,8 @@ GEM factory_girl_rails (4.0.0) factory_girl (~> 4.0.0) railties (>= 3.0.0) + faraday (0.8.4) + multipart-post (~> 1.1) ffaker (1.14.0) ffi (1.0.11) foreman (0.47.0) @@ -194,6 +196,7 @@ GEM httparty (0.8.3) multi_json (~> 1.0) multi_xml + httpauth (0.1) i18n (0.6.1) journey (1.0.4) jquery-rails (2.0.2) @@ -203,6 +206,8 @@ GEM jquery-rails railties (>= 3.1.0) json (1.7.5) + jwt (0.1.5) + multi_json (>= 1.0) kaminari (0.14.0) actionpack (>= 3.0.0) activesupport (>= 3.0.0) @@ -225,12 +230,35 @@ GEM sprockets (~> 2.0) multi_json (1.3.6) multi_xml (0.5.1) + multipart-post (1.1.5) mysql2 (0.3.11) net-ldap (0.2.2) nokogiri (1.5.3) + oauth (0.4.7) + oauth2 (0.8.0) + faraday (~> 0.8) + httpauth (~> 0.1) + jwt (~> 0.1.4) + multi_json (~> 1.0) + rack (~> 1.2) omniauth (1.1.0) hashie (~> 1.2) rack + omniauth-github (1.0.3) + omniauth (~> 1.0) + omniauth-oauth2 (~> 1.1) + omniauth-google-oauth2 (0.1.13) + omniauth (~> 1.0) + omniauth-oauth2 + omniauth-oauth (1.0.1) + oauth + omniauth (~> 1.0) + omniauth-oauth2 (1.1.0) + oauth2 (~> 0.8.0) + omniauth (~> 1.0) + omniauth-twitter (0.0.13) + multi_json (~> 1.3) + omniauth-oauth (~> 1.0) orm_adapter (0.3.0) polyglot (0.3.3) posix-spawn (0.3.6) @@ -420,7 +448,11 @@ DEPENDENCIES linguist (~> 1.0.0)! modernizr (= 2.5.3) mysql2 + omniauth + omniauth-github + omniauth-google-oauth2 omniauth-ldap! + omniauth-twitter pry pygments.rb! rack-mini-profiler diff --git a/app/assets/stylesheets/auth_methods.scss b/app/assets/stylesheets/auth_methods.scss index ed6f5b0f..f94a0e52 100644 --- a/app/assets/stylesheets/auth_methods.scss +++ b/app/assets/stylesheets/auth_methods.scss @@ -1,9 +1,9 @@ .auth_methods { - &ul { + ul { margin: 0; text-align:center; padding: 5px; - &li { + li { display: inline; } } diff --git a/app/views/devise/sessions/new.html.erb b/app/views/devise/sessions/new.html.erb deleted file mode 100644 index 6b334b87..00000000 --- a/app/views/devise/sessions/new.html.erb +++ /dev/null @@ -1,32 +0,0 @@ -<% unless ldap_enable? -%> - - <%= form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => { :class => "login-box" }) do |f| %> - <%= image_tag "login-logo.png", :width => "304", :height => "66", :class => "login-logo", :alt => "Login Logo" %> - - <%= f.text_field :email, :class => "text top", :placeholder => "Email" %> - <%= f.password_field :password, :class => "text bottom", :placeholder => "Password" %> - - <% if devise_mapping.rememberable? -%> -
    - <% end -%> -
    - <%= f.submit "Sign in", :class => "primary btn" %> -
    <%= render :partial => "devise/shared/links" %>
    - - <%- if devise_mapping.omniauthable? %> -
    -
    -
      - <%- resource_class.omniauth_providers.each do |provider| %> -
    • <%= link_to authbutton(provider), - omniauth_authorize_path(resource_name, provider) %>
    • - <% end -%> -
    -
    - <% end -%> - - <% end %> - -<% else %> - <%= render :partial => 'devise/sessions/new_ldap' %> -<% end %> diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example index 809d7ee9..a52bc1b9 100644 --- a/config/gitlab.yml.example +++ b/config/gitlab.yml.example @@ -25,8 +25,38 @@ app: # backup_keep_time: 604800 # default: 0 (forever) (in seconds) # disable_gravatar: true # default: false - Disable user avatars from Gravatar.com + + + # -# 2. Advanced settings: +# 2. Auth settings +# ========================== +ldap: + enabled: false + host: '_your_ldap_server' + base: '_the_base_where_you_search_for_users' + port: 636 + uid: 'sAMAccountName' + method: 'ssl' # plain + bind_dn: '_the_full_dn_of_the_user_you_will_bind_with' + password: '_the_password_of_the_bind_user' + +omniauth: + enabled: false + allow_single_sign_on: false + block_auto_created_users: true + providers: + # - { name: 'google_oauth2', app_id: 'YOUR APP ID', + # app_secret: 'YOUR APP SECRET', + # args: { access_type: 'offline', approval_prompt: '' } } + # - { name: 'twitter', app_id: 'YOUR APP ID', + # app_secret: 'YOUR APP SECRET'} + # - { name: 'github', app_id: 'YOUR APP ID', + # app_secret: 'YOUR APP SECRET' } + + +# +# 3. Advanced settings: # ========================== # Git Hosting configuration @@ -50,21 +80,3 @@ git: git_max_size: 5242880 # 5.megabytes # Git timeout to read commit, in seconds git_timeout: 10 - -# Omniauth configuration -omniauth: - enabled: false - providers: - allow_single_sign_on: false - block_auto_created_users: true - -# omniauth: -# enabled: true -# providers: -# - { name: 'google_oauth2', app_id: 'YOUR APP ID', -# app_secret: 'YOUR APP SECRET', -# args: { access_type: 'offline', approval_prompt: '' } } -# - { name: 'twitter', app_id: 'YOUR APP ID', -# app_secret: 'YOUR APP SECRET'} -# - { name: 'github', app_id: 'YOUR APP ID', -# app_secret: 'YOUR APP SECRET' } diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb index 00b7cc09..326f5af2 100644 --- a/config/initializers/1_settings.rb +++ b/config/initializers/1_settings.rb @@ -120,8 +120,16 @@ class Settings < Settingslogic app['backup_keep_time'] || 0 end + def ldap_enabled? + ldap['enabled'] + rescue + false + end + def omniauth_enabled? - omniauth['enabled'] || false + omniauth && omniauth['enabled'] + rescue + false end def omniauth_providers diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index 54011ba5..8f3cef5a 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -204,4 +204,21 @@ Devise.setup do |config| # manager.intercept_401 = false # manager.default_strategies(:scope => :user).unshift :some_external_strategy # end + + gl = Gitlab.config + + if gl.ldap_enabled? + config.omniauth :ldap, + :host => gl.ldap['host'], + :base => gl.ldap['base'], + :uid => gl.ldap['uid'], + :port => gl.ldap['port'], + :method => gl.ldap['method'], + :bind_dn => gl.ldap['bind_dn'], + :password => gl.ldap['password'] + end + + gl.omniauth_providers.each do |gl_provider| + config.omniauth gl_provider['name'].to_sym, gl_provider['app_id'], gl_provider['app_secret'] + end end diff --git a/config/initializers/omniauth.rb.sample b/config/initializers/omniauth.rb.sample deleted file mode 100644 index 6e844efd..00000000 --- a/config/initializers/omniauth.rb.sample +++ /dev/null @@ -1,15 +0,0 @@ -# Copy this file to 'omniauth.rb' and configure it as necessary. -# The wiki has further details on configuring each provider. - -Devise.setup do |config| - # config.omniauth :github, 'APP_ID', 'APP_SECRET', :scope => 'user,public_repo' - - # config.omniauth :ldap, - # :host => 'YOUR_LDAP_SERVER', - # :base => 'THE_BASE_WHERE_YOU_SEARCH_FOR_USERS', - # :uid => 'sAMAccountName', - # :port => 389, - # :method => :plain, - # :bind_dn => 'THE_FULL_DN_OF_THE_USER_YOU_WILL_BIND_WITH', - # :password => 'THE_PASSWORD_OF_THE_BIND_USER' -end From fa4150d47d88b85d6027729844480a3e7c71d3cd Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 12 Sep 2012 08:23:20 +0300 Subject: [PATCH 260/357] Cleanup after omniauth --- app/assets/stylesheets/auth_methods.scss | 10 ----- .../stylesheets/gitlab_bootstrap/blocks.scss | 4 ++ app/assets/stylesheets/main.scss | 1 - .../omniauth_callbacks_controller.rb | 11 +++-- app/helpers/application_helper.rb | 5 ++- app/views/devise/sessions/new.html.haml | 9 ++-- app/views/profile/password.html.haml | 6 +-- app/views/profile/show.html.haml | 44 +++++++++++-------- config/gitlab.yml.example | 6 ++- 9 files changed, 49 insertions(+), 47 deletions(-) delete mode 100644 app/assets/stylesheets/auth_methods.scss diff --git a/app/assets/stylesheets/auth_methods.scss b/app/assets/stylesheets/auth_methods.scss deleted file mode 100644 index f94a0e52..00000000 --- a/app/assets/stylesheets/auth_methods.scss +++ /dev/null @@ -1,10 +0,0 @@ -.auth_methods { - ul { - margin: 0; - text-align:center; - padding: 5px; - li { - display: inline; - } - } -} diff --git a/app/assets/stylesheets/gitlab_bootstrap/blocks.scss b/app/assets/stylesheets/gitlab_bootstrap/blocks.scss index 70f7889f..e0ae8db7 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/blocks.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/blocks.scss @@ -142,4 +142,8 @@ border:none; } } + + .ui-box-body { + padding:10px; + } } diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index 201c69f4..9a6d4456 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -134,7 +134,6 @@ $hover: #fdf5d9; * TODO: clean it */ @import "common.scss"; -@import "auth_methods.scss"; /** * Styles related to specific part of app diff --git a/app/controllers/omniauth_callbacks_controller.rb b/app/controllers/omniauth_callbacks_controller.rb index 3be285ba..2fb783b2 100644 --- a/app/controllers/omniauth_callbacks_controller.rb +++ b/app/controllers/omniauth_callbacks_controller.rb @@ -1,4 +1,9 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController + Gitlab.config.omniauth_providers.each do |provider| + define_method provider['name'] do + handle_omniauth + end + end # Extend the standard message generation to accept our custom exception def failure_message @@ -19,12 +24,6 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController sign_in_and_redirect @user end - Settings.omniauth_providers.each do |provider| - define_method provider['name'] do - handle_omniauth - end - end - private def handle_omniauth diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 7033daf8..fb1393e2 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -137,7 +137,8 @@ module ApplicationHelper end def authbutton(provider, size = 64) - image_tag("authbuttons/#{provider.to_s.split('_').first}_#{size}.png", - alt: "Sign in with #{provider.to_s.titleize}" ) + file_name = "#{provider.to_s.split('_').first}_#{size}.png" + image_tag("authbuttons/#{file_name}", + alt: "Sign in with #{provider.to_s.titleize}") end end diff --git a/app/views/devise/sessions/new.html.haml b/app/views/devise/sessions/new.html.haml index 6e86186c..e217cba6 100644 --- a/app/views/devise/sessions/new.html.haml +++ b/app/views/devise/sessions/new.html.haml @@ -15,7 +15,8 @@ .right = render :partial => "devise/shared/links" - if devise_mapping.omniauthable? - - resource_class.omniauth_providers.each do |provider| - %hr/ - = link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider), :class => "btn primary" - %br/ + %hr/ + %ul.unstyled + - resource_class.omniauth_providers.each do |provider| + %li + = link_to authbutton(provider, 32), omniauth_authorize_path(resource_name, provider) diff --git a/app/views/profile/password.html.haml b/app/views/profile/password.html.haml index 2405b9d7..bf58e2ae 100644 --- a/app/views/profile/password.html.haml +++ b/app/views/profile/password.html.haml @@ -19,11 +19,11 @@ = f.label :password_confirmation .input= f.password_field :password_confirmation - - if Settings.omniauth.enabled + - if Gitlab.config.omniauth_enabled? .span5.right - .auth_methods.alert.alert-info + .alert.alert-info %strong Tip: Use one of the following sites to login - %ul + %ul.unstyled - User.omniauth_providers.each do |provider| %li= link_to authbutton(provider), | omniauth_authorize_path(User, provider) | diff --git a/app/views/profile/show.html.haml b/app/views/profile/show.html.haml index 1e53ead6..8369da4c 100644 --- a/app/views/profile/show.html.haml +++ b/app/views/profile/show.html.haml @@ -50,28 +50,34 @@ %strong Tip: You can change your avatar at gravatar.com - - if Settings.omniauth.enabled && @user.provider? - %h4 - Omniauth Providers: - = link_to "Change", profile_password_path, class: "btn small right" - You can login through #{@user.provider.titleize}! - = authbutton(@user.provider, 32) + - @user.provider = 'twitter' + - if Gitlab.config.omniauth_enabled? && @user.provider? + .ui-box + .ui-box-body + %h4 + Omniauth Providers: + = link_to "Change", profile_password_path, class: "btn small right" + You can login through #{@user.provider.titleize}! + = authbutton(@user.provider, 32) - %h4 - Personal projects: - %small.right - %span= current_user.my_own_projects.count - of - %span= current_user.projects_limit - .progress - .bar{style: "width: #{current_user.projects_limit_percent}%;"} + .ui-box + .ui-box-body + %h4 + Personal projects: + %small.right + %span= current_user.my_own_projects.count + of + %span= current_user.projects_limit + .progress + .bar{style: "width: #{current_user.projects_limit_percent}%;"} - %h4 - SSH public keys: - %small.right - %span= link_to current_user.keys.count, keys_path + .ui-box + .ui-box-body + %h4 + SSH public keys: + %strong.right= link_to current_user.keys.count, keys_path - = link_to "Add Public Key", new_key_path, class: "btn small right" + = link_to "Add Public Key", new_key_path, class: "btn small" .form-actions = f.submit 'Save', class: "btn save-btn" diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example index a52bc1b9..3e4668ce 100644 --- a/config/gitlab.yml.example +++ b/config/gitlab.yml.example @@ -43,8 +43,6 @@ ldap: omniauth: enabled: false - allow_single_sign_on: false - block_auto_created_users: true providers: # - { name: 'google_oauth2', app_id: 'YOUR APP ID', # app_secret: 'YOUR APP SECRET', @@ -53,6 +51,10 @@ omniauth: # app_secret: 'YOUR APP SECRET'} # - { name: 'github', app_id: 'YOUR APP ID', # app_secret: 'YOUR APP SECRET' } + # IMPORTANT! + # It allows user to login without having user account + allow_single_sign_on: false + block_auto_created_users: true # From d8f6d38d39868426902ffbad9c232b7748a4288f Mon Sep 17 00:00:00 2001 From: randx Date: Wed, 12 Sep 2012 09:05:12 +0300 Subject: [PATCH 261/357] Fix observer test --- spec/observers/user_observer_spec.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/spec/observers/user_observer_spec.rb b/spec/observers/user_observer_spec.rb index 23dac98b..0420a250 100644 --- a/spec/observers/user_observer_spec.rb +++ b/spec/observers/user_observer_spec.rb @@ -13,7 +13,7 @@ describe UserObserver do end context 'when a new user is created' do - let(:user) { double(:user, id: 42, password: 'P@ssword!') } + let(:user) { double(:user, id: 42, password: 'P@ssword!', name: 'John', email: 'u@mail.local') } let(:notification) { double :notification } it 'sends an email' do @@ -22,5 +22,10 @@ describe UserObserver do subject.after_create(user) end + + it 'trigger logger' do + Gitlab::AppLogger.should_receive(:info) + subject.after_create(user) + end end end From 048d47e6266b5b078a169f1657d07883e86f169b Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 12 Sep 2012 09:23:16 +0300 Subject: [PATCH 262/357] Refactorn oauth & ldap --- app/models/user.rb | 57 +++--------------------- config/gitlab.yml.example | 15 ++++--- lib/gitlab/auth.rb | 66 +++++++++++++++++++++++++++ spec/lib/auth_spec.rb | 93 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 176 insertions(+), 55 deletions(-) create mode 100644 lib/gitlab/auth.rb create mode 100644 spec/lib/auth_spec.rb diff --git a/app/models/user.rb b/app/models/user.rb index fa5d6834..47876722 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -87,62 +87,19 @@ class User < ActiveRecord::Base end def self.create_from_omniauth(auth, ldap = false) - provider, uid = auth.provider, auth.uid - name = auth.info.name.force_encoding("utf-8") - email = auth.info.email.downcase unless auth.info.email.nil? - - ldap_prefix = ldap ? '(LDAP) ' : '' - raise OmniAuth::Error, "#{ldap_prefix}#{provider} does not provide an email"\ - " address" if auth.info.email.blank? - - logger.info "#{ldap_prefix}Creating user from #{provider} login"\ - " {uid => #{uid}, name => #{name}, email => #{email}}" - password = Devise.friendly_token[0, 8].downcase - @user = User.new( - extern_uid: uid, - provider: provider, - name: name, - email: email, - password: password, - password_confirmation: password, - projects_limit: Gitlab.config.default_projects_limit, - ) - if Gitlab.config.omniauth.block_auto_created_users && !ldap - @user.blocked = true - end - @user.save! - @user + gitlab_auth.create_from_omniauth(auth, ldap) end def self.find_or_new_for_omniauth(auth) - provider, uid = auth.provider, auth.uid - - if @user = User.find_by_provider_and_extern_uid(provider, uid) - @user - else - if Gitlab.config.omniauth.allow_single_sign_on - @user = User.create_from_omniauth(auth) - @user - end - end + gitlab_auth.find_or_new_for_omniauth(auth) end - def self.find_for_ldap_auth(auth, signed_in_resource=nil) - uid = auth.info.uid - provider = auth.provider - email = auth.info.email.downcase unless auth.info.email.nil? - raise OmniAuth::Error, "LDAP accounts must provide an uid and email address" if uid.nil? or email.nil? + def self.find_for_ldap_auth(auth, signed_in_resource = nil) + gitlab_auth.find_for_ldap_auth(auth, signed_in_resource) + end - if @user = User.find_by_extern_uid_and_provider(uid, provider) - @user - # workaround for backward compatibility - elsif @user = User.find_by_email(email) - logger.info "Updating legacy LDAP user #{email} with extern_uid => #{uid}" - @user.update_attributes(:extern_uid => uid, :provider => provider) - @user - else - create_from_omniauth(auth) - end + def self.gitlab_auth + Gitlab::Auth.new end def self.search query diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example index 3e4668ce..80d95b26 100644 --- a/config/gitlab.yml.example +++ b/config/gitlab.yml.example @@ -42,7 +42,16 @@ ldap: password: '_the_password_of_the_bind_user' omniauth: - enabled: false + # Enable ability for users + # to login via twitter, google .. + enabled: true + + # IMPORTANT! + # It allows user to login without having user account + allow_single_sign_on: false + block_auto_created_users: true + + # Auth providers providers: # - { name: 'google_oauth2', app_id: 'YOUR APP ID', # app_secret: 'YOUR APP SECRET', @@ -51,10 +60,6 @@ omniauth: # app_secret: 'YOUR APP SECRET'} # - { name: 'github', app_id: 'YOUR APP ID', # app_secret: 'YOUR APP SECRET' } - # IMPORTANT! - # It allows user to login without having user account - allow_single_sign_on: false - block_auto_created_users: true # diff --git a/lib/gitlab/auth.rb b/lib/gitlab/auth.rb new file mode 100644 index 00000000..ef058ff5 --- /dev/null +++ b/lib/gitlab/auth.rb @@ -0,0 +1,66 @@ +module Gitlab + class Auth + def find_for_ldap_auth(auth, signed_in_resource = nil) + uid = auth.info.uid + provider = auth.provider + email = auth.info.email.downcase unless auth.info.email.nil? + raise OmniAuth::Error, "LDAP accounts must provide an uid and email address" if uid.nil? or email.nil? + + if @user = User.find_by_extern_uid_and_provider(uid, provider) + @user + elsif @user = User.find_by_email(email) + log.info "Updating legacy LDAP user #{email} with extern_uid => #{uid}" + @user.update_attributes(:extern_uid => uid, :provider => provider) + @user + else + create_from_omniauth(auth, true) + end + end + + def create_from_omniauth auth, ldap = false + provider = auth.provider + uid = auth.info.uid || auth.uid + name = auth.info.name.force_encoding("utf-8") + email = auth.info.email.downcase unless auth.info.email.nil? + + ldap_prefix = ldap ? '(LDAP) ' : '' + raise OmniAuth::Error, "#{ldap_prefix}#{provider} does not provide an email"\ + " address" if auth.info.email.blank? + + log.info "#{ldap_prefix}Creating user from #{provider} login"\ + " {uid => #{uid}, name => #{name}, email => #{email}}" + password = Devise.friendly_token[0, 8].downcase + @user = User.new( + extern_uid: uid, + provider: provider, + name: name, + email: email, + password: password, + password_confirmation: password, + projects_limit: Gitlab.config.default_projects_limit, + ) + if Gitlab.config.omniauth.block_auto_created_users && !ldap + @user.blocked = true + end + @user.save! + @user + end + + def find_or_new_for_omniauth(auth) + provider, uid = auth.provider, auth.uid + + if @user = User.find_by_provider_and_extern_uid(provider, uid) + @user + else + if Gitlab.config.omniauth.allow_single_sign_on + @user = create_from_omniauth(auth) + @user + end + end + end + + def log + Gitlab::AppLogger + end + end +end diff --git a/spec/lib/auth_spec.rb b/spec/lib/auth_spec.rb new file mode 100644 index 00000000..5faf1307 --- /dev/null +++ b/spec/lib/auth_spec.rb @@ -0,0 +1,93 @@ +require 'spec_helper' + +describe Gitlab::Auth do + let(:gl_auth) { Gitlab::Auth.new } + + before do + @info = mock( + uid: '12djsak321', + name: 'John', + email: 'john@mail.com' + ) + end + + describe :find_for_ldap_auth do + before do + @auth = mock( + uid: '12djsak321', + info: @info, + provider: 'ldap' + ) + end + + it "should find by uid & provider" do + User.should_receive :find_by_extern_uid_and_provider + gl_auth.find_for_ldap_auth(@auth) + end + + it "should update credentials by email if missing uid" do + user = double('User') + User.stub find_by_extern_uid_and_provider: nil + User.stub find_by_email: user + user.should_receive :update_attributes + gl_auth.find_for_ldap_auth(@auth) + end + + + it "should create from auth if user doesnot exist"do + User.stub find_by_extern_uid_and_provider: nil + User.stub find_by_email: nil + gl_auth.should_receive :create_from_omniauth + gl_auth.find_for_ldap_auth(@auth) + end + end + + describe :find_or_new_for_omniauth do + before do + @auth = mock( + info: @info, + provider: 'twitter', + uid: '12djsak321', + ) + end + + it "should find user"do + User.should_receive :find_by_provider_and_extern_uid + gl_auth.should_not_receive :create_from_omniauth + gl_auth.find_or_new_for_omniauth(@auth) + end + + it "should not create user"do + User.stub find_by_provider_and_extern_uid: nil + gl_auth.should_not_receive :create_from_omniauth + gl_auth.find_or_new_for_omniauth(@auth) + end + + it "should create user if single_sing_on"do + Gitlab.config.omniauth.stub allow_single_sign_on: true + User.stub find_by_provider_and_extern_uid: nil + gl_auth.should_receive :create_from_omniauth + gl_auth.find_or_new_for_omniauth(@auth) + end + end + + describe :create_from_omniauth do + it "should create user from LDAP" do + @auth = mock(info: @info, provider: 'ldap') + user = gl_auth.create_from_omniauth(@auth, true) + + user.should be_valid + user.extern_uid.should == @info.uid + user.provider.should == 'ldap' + end + + it "should create user from Omniauth" do + @auth = mock(info: @info, provider: 'twitter') + user = gl_auth.create_from_omniauth(@auth, false) + + user.should be_valid + user.extern_uid.should == @info.uid + user.provider.should == 'twitter' + end + end +end From a87c268f7d3b083534a76065040aa78744c46862 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Wed, 12 Sep 2012 05:01:50 -0700 Subject: [PATCH 263/357] remove duplicate code from atom request specs --- spec/requests/atom/dashboard_issues_spec.rb | 45 +++++------------ spec/requests/atom/dashboard_spec.rb | 32 +++++------- spec/requests/atom/issues_spec.rb | 54 +++++++++------------ 3 files changed, 50 insertions(+), 81 deletions(-) diff --git a/spec/requests/atom/dashboard_issues_spec.rb b/spec/requests/atom/dashboard_issues_spec.rb index 79a9b8ef..8d1111fc 100644 --- a/spec/requests/atom/dashboard_issues_spec.rb +++ b/spec/requests/atom/dashboard_issues_spec.rb @@ -1,42 +1,23 @@ require 'spec_helper' -describe "User Issues Dashboard" do +describe "Dashboard Issues Feed" do describe "GET /issues" do - before do + let!(:user) { Factory :user } + let!(:project1) { Factory :project } + let!(:project2) { Factory :project } + let!(:issue1) { Factory :issue, author: user, assignee: user, project: project1 } + let!(:issue2) { Factory :issue, author: user, assignee: user, project: project2 } - login_as :user - - @project1 = Factory :project - - @project2 = Factory :project - - @project1.add_access(@user, :read, :write) - @project2.add_access(@user, :read, :write) - - @issue1 = Factory :issue, - author: @user, - assignee: @user, - project: @project1 - - @issue2 = Factory :issue, - author: @user, - assignee: @user, - project: @project2 - - visit dashboard_issues_path - end - - describe "atom feed", js: false do + describe "atom feed" do it "should render atom feed via private token" do - logout - visit dashboard_issues_path(:atom, private_token: @user.private_token) + visit dashboard_issues_path(:atom, private_token: user.private_token) page.response_headers['Content-Type'].should have_content("application/atom+xml") - page.body.should have_selector("title", text: "#{@user.name} issues") - page.body.should have_selector("author email", text: @issue1.author_email) - page.body.should have_selector("entry summary", text: @issue1.title) - page.body.should have_selector("author email", text: @issue2.author_email) - page.body.should have_selector("entry summary", text: @issue2.title) + page.body.should have_selector("title", text: "#{user.name} issues") + page.body.should have_selector("author email", text: issue1.author_email) + page.body.should have_selector("entry summary", text: issue1.title) + page.body.should have_selector("author email", text: issue2.author_email) + page.body.should have_selector("entry summary", text: issue2.title) end end end diff --git a/spec/requests/atom/dashboard_spec.rb b/spec/requests/atom/dashboard_spec.rb index 00c7a525..9459dd01 100644 --- a/spec/requests/atom/dashboard_spec.rb +++ b/spec/requests/atom/dashboard_spec.rb @@ -1,27 +1,21 @@ require 'spec_helper' -describe "User Dashboard" do - before { login_as :user } - +describe "Dashboard Feed" do describe "GET /" do - before do - @project = Factory :project, owner: @user - @project.add_access(@user, :read) - visit dashboard_path + let!(:user) { Factory :user } + + context "projects atom feed via private token" do + it "should render projects atom feed" do + visit dashboard_path(:atom, private_token: user.private_token) + page.body.should have_selector("feed title") + end end - it "should render projects atom feed via private token" do - logout - - visit dashboard_path(:atom, private_token: @user.private_token) - page.body.should have_selector("feed title") - end - - it "should not render projects page via private token" do - logout - - visit dashboard_path(private_token: @user.private_token) - current_path.should == new_user_session_path + context "projects page via private token" do + it "should redirect to login page" do + visit dashboard_path(private_token: user.private_token) + current_path.should == new_user_session_path + end end end end diff --git a/spec/requests/atom/issues_spec.rb b/spec/requests/atom/issues_spec.rb index 468d1b22..c8671979 100644 --- a/spec/requests/atom/issues_spec.rb +++ b/spec/requests/atom/issues_spec.rb @@ -1,40 +1,34 @@ require 'spec_helper' -describe "Issues" do - let(:project) { Factory :project } - - before do - login_as :user - project.add_access(@user, :read, :write) - end - +describe "Issues Feed" do describe "GET /issues" do - before do - @issue = Factory :issue, - author: @user, - assignee: @user, - project: project + let!(:user) { Factory :user } + let!(:project) { Factory :project, owner: user } + let!(:issue) { Factory :issue, author: user, project: project } - visit project_issues_path(project) + before { project.add_access(user, :read, :write) } + + context "when authenticated" do + it "should render atom feed" do + login_with user + visit project_issues_path(project, :atom) + + page.response_headers['Content-Type'].should have_content("application/atom+xml") + page.body.should have_selector("title", text: "#{project.name} issues") + page.body.should have_selector("author email", text: issue.author_email) + page.body.should have_selector("entry summary", text: issue.title) + end end - it "should render atom feed" do - visit project_issues_path(project, :atom) + context "when authenticated via private token" do + it "should render atom feed" do + visit project_issues_path(project, :atom, private_token: user.private_token) - page.response_headers['Content-Type'].should have_content("application/atom+xml") - page.body.should have_selector("title", text: "#{project.name} issues") - page.body.should have_selector("author email", text: @issue.author_email) - page.body.should have_selector("entry summary", text: @issue.title) - end - - it "should render atom feed via private token" do - logout - visit project_issues_path(project, :atom, private_token: @user.private_token) - - page.response_headers['Content-Type'].should have_content("application/atom+xml") - page.body.should have_selector("title", text: "#{project.name} issues") - page.body.should have_selector("author email", text: @issue.author_email) - page.body.should have_selector("entry summary", text: @issue.title) + page.response_headers['Content-Type'].should have_content("application/atom+xml") + page.body.should have_selector("title", text: "#{project.name} issues") + page.body.should have_selector("author email", text: issue.author_email) + page.body.should have_selector("entry summary", text: issue.title) + end end end end From b6f249dc1f4b1867f8f16a23b30f65f4be8e7fd7 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Wed, 12 Sep 2012 05:11:56 -0700 Subject: [PATCH 264/357] make API specs more organized and readable --- spec/requests/api/issues_spec.rb | 10 ++++++---- spec/requests/api/projects_spec.rb | 10 ++++++---- spec/requests/api/users_spec.rb | 10 ++++++---- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/spec/requests/api/issues_spec.rb b/spec/requests/api/issues_spec.rb index 293ea83a..442e9c73 100644 --- a/spec/requests/api/issues_spec.rb +++ b/spec/requests/api/issues_spec.rb @@ -9,12 +9,14 @@ describe Gitlab::API do before { project.add_access(user, :read) } describe "GET /issues" do - it "should return authentication error" do - get api("/issues") - response.status.should == 401 + context "when unauthenticated" do + it "should return authentication error" do + get api("/issues") + response.status.should == 401 + end end - describe "authenticated GET /issues" do + context "when authenticated" do it "should return an array of issues" do get api("/issues", user) response.status.should == 200 diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index cc6843cc..9412287f 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -9,12 +9,14 @@ describe Gitlab::API do before { project.add_access(user, :read) } describe "GET /projects" do - it "should return authentication error" do - get api("/projects") - response.status.should == 401 + context "when unauthenticated" do + it "should return authentication error" do + get api("/projects") + response.status.should == 401 + end end - describe "authenticated GET /projects" do + context "when authenticated" do it "should return an array of projects" do get api("/projects", user) response.status.should == 200 diff --git a/spec/requests/api/users_spec.rb b/spec/requests/api/users_spec.rb index d791962a..e25fe134 100644 --- a/spec/requests/api/users_spec.rb +++ b/spec/requests/api/users_spec.rb @@ -6,12 +6,14 @@ describe Gitlab::API do let(:user) { Factory :user } describe "GET /users" do - it "should return authentication error" do - get api("/users") - response.status.should == 401 + context "when unauthenticated" do + it "should return authentication error" do + get api("/users") + response.status.should == 401 + end end - describe "authenticated GET /users" do + context "when authenticated" do it "should return an array of users" do get api("/users", user) response.status.should == 200 From acc5302c3fea3f07a654e270f06ebf96fec14c5c Mon Sep 17 00:00:00 2001 From: randx Date: Wed, 12 Sep 2012 18:56:44 +0300 Subject: [PATCH 265/357] improve profile layout after omniauth changes --- app/assets/stylesheets/common.scss | 14 ++++++ .../stylesheets/gitlab_bootstrap/blocks.scss | 4 ++ app/helpers/profile_helper.rb | 7 +++ app/views/profile/password.html.haml | 46 +++++++++---------- app/views/profile/show.html.haml | 39 ++++++++-------- config/gitlab.yml.example | 4 +- 6 files changed, 67 insertions(+), 47 deletions(-) create mode 100644 app/helpers/profile_helper.rb diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index ed71a42e..ab3d44d8 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -689,3 +689,17 @@ li.note { text-align:center; margin-bottom:10px; } + +.oauth_select_holder { + padding:20px; + img { + padding:5px; + margin-right:10px; + } + .active { + img { + border:1px solid #ccc; + @include border-radius(5px); + } + } +} diff --git a/app/assets/stylesheets/gitlab_bootstrap/blocks.scss b/app/assets/stylesheets/gitlab_bootstrap/blocks.scss index e0ae8db7..ae66bd20 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/blocks.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/blocks.scss @@ -65,6 +65,10 @@ border-color: #CCC; @include solid_shade; + &.white { + background:#fff; + } + ul { margin:0; } diff --git a/app/helpers/profile_helper.rb b/app/helpers/profile_helper.rb new file mode 100644 index 00000000..80d67009 --- /dev/null +++ b/app/helpers/profile_helper.rb @@ -0,0 +1,7 @@ +module ProfileHelper + def oauth_active_class provider + if current_user.provider == provider.to_s + 'active' + end + end +end diff --git a/app/views/profile/password.html.haml b/app/views/profile/password.html.haml index bf58e2ae..805429e3 100644 --- a/app/views/profile/password.html.haml +++ b/app/views/profile/password.html.haml @@ -1,31 +1,29 @@ +- if Gitlab.config.omniauth_enabled? + %h3.page_title Accounts + %hr + %p.hint Tip: Click on icon to activate sigin with one of the following services + .oauth_select_holder + - User.omniauth_providers.each do |provider| + %span{class: oauth_active_class(provider) } + = link_to authbutton(provider, 32), omniauth_authorize_path(User, provider) + +.clearfix.prepend-top-20 %h3.page_title Password %hr = form_for @user, url: profile_password_path, method: :put do |f| - .row - .span7 - .data - %p.slead After successful password update you will be redirected to login page where you should login with new password - -if @user.errors.any? - .alert-message.block-message.error - %ul - - @user.errors.full_messages.each do |msg| - %li= msg + %p.slead After successful password update you will be redirected to login page where you should login with new password + -if @user.errors.any? + .alert-message.block-message.error + %ul + - @user.errors.full_messages.each do |msg| + %li= msg - .clearfix - = f.label :password - .input= f.password_field :password - .clearfix - = f.label :password_confirmation - .input= f.password_field :password_confirmation - - - if Gitlab.config.omniauth_enabled? - .span5.right - .alert.alert-info - %strong Tip: Use one of the following sites to login - %ul.unstyled - - User.omniauth_providers.each do |provider| - %li= link_to authbutton(provider), | - omniauth_authorize_path(User, provider) | + .clearfix + = f.label :password + .input= f.password_field :password + .clearfix + = f.label :password_confirmation + .input= f.password_field :password_confirmation .actions = f.submit 'Save', class: "btn save-btn" diff --git a/app/views/profile/show.html.haml b/app/views/profile/show.html.haml index 8369da4c..5ac84122 100644 --- a/app/views/profile/show.html.haml +++ b/app/views/profile/show.html.haml @@ -6,7 +6,6 @@ %small = @user.email - %hr = form_for @user, url: profile_update_path, method: :put, html: { class: "edit_user form-horizontal" } do |f| @@ -28,7 +27,23 @@ = f.text_field :email, class: "input-xlarge" %span.help-block We also use email for avatar detection. - %hr + .span5.right + %div.tips + %h6 Tips: + %ul + -unless Gitlab.config.disable_gravatar? + %li + %p.hint You can change your avatar at gravatar.com + + - if Gitlab.config.omniauth_enabled? && @user.provider? + %li + %p.hint + You can login through #{@user.provider.titleize}! + = link_to "click here to change", profile_password_path + + %hr + .row + .span7 .control-group = f.label :skype, class: "control-label" .controls= f.text_field :skype, class: "input-xlarge" @@ -44,23 +59,7 @@ = f.text_area :bio, rows: 6, class: "input-xlarge", maxlength: 250 %span.help-block Tell us about yourself in fewer than 250 characters. .span5.right - - -unless Gitlab.config.disable_gravatar? - %p.alert.alert-info - %strong Tip: - You can change your avatar at gravatar.com - - - @user.provider = 'twitter' - - if Gitlab.config.omniauth_enabled? && @user.provider? - .ui-box - .ui-box-body - %h4 - Omniauth Providers: - = link_to "Change", profile_password_path, class: "btn small right" - You can login through #{@user.provider.titleize}! - = authbutton(@user.provider, 32) - - .ui-box + .ui-box.white .ui-box-body %h4 Personal projects: @@ -71,7 +70,7 @@ .progress .bar{style: "width: #{current_user.projects_limit_percent}%;"} - .ui-box + .ui-box.white .ui-box-body %h4 SSH public keys: diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example index 80d95b26..28323484 100644 --- a/config/gitlab.yml.example +++ b/config/gitlab.yml.example @@ -26,8 +26,6 @@ app: # disable_gravatar: true # default: false - Disable user avatars from Gravatar.com - - # # 2. Auth settings # ========================== @@ -44,7 +42,7 @@ ldap: omniauth: # Enable ability for users # to login via twitter, google .. - enabled: true + enabled: false # IMPORTANT! # It allows user to login without having user account From 9329dfbfc59325196fc98bcb15bd47adf8121013 Mon Sep 17 00:00:00 2001 From: randx Date: Wed, 12 Sep 2012 19:01:52 +0300 Subject: [PATCH 266/357] Show inline providers icons on login page --- app/views/devise/sessions/new.html.haml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/views/devise/sessions/new.html.haml b/app/views/devise/sessions/new.html.haml index e217cba6..07ecf70b 100644 --- a/app/views/devise/sessions/new.html.haml +++ b/app/views/devise/sessions/new.html.haml @@ -16,7 +16,6 @@ = render :partial => "devise/shared/links" - if devise_mapping.omniauthable? %hr/ - %ul.unstyled - - resource_class.omniauth_providers.each do |provider| - %li - = link_to authbutton(provider, 32), omniauth_authorize_path(resource_name, provider) + - resource_class.omniauth_providers.each do |provider| + %span + = link_to authbutton(provider, 32), omniauth_authorize_path(resource_name, provider) From 4782163c7acd3dc972675df4d6378244a8970450 Mon Sep 17 00:00:00 2001 From: randx Date: Wed, 12 Sep 2012 19:06:32 +0300 Subject: [PATCH 267/357] Use default tw thubmnails --- app/assets/stylesheets/common.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index ab3d44d8..69a3d743 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -660,7 +660,7 @@ li.note { margin-right:40px; .prev { - @extend .borders; + @extend .thumbnail; height:120px; width:175px; margin-bottom:10px; From 0d77209ea0f13184a8140efeaafa52bc916ec71f Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 12 Sep 2012 18:11:59 -0400 Subject: [PATCH 268/357] Be more resilient in the case of missing omniauth settings Should no longer freak out when omniauth settings aren't present in gitlab.yml. People who aren't using it shouldn't even have to put a 'false' entry in their config for it (and probably wouldn't, after an upgrade). --- config/initializers/1_settings.rb | 8 ++++---- lib/gitlab/auth.rb | 6 +++--- spec/lib/auth_spec.rb | 4 +++- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb index 326f5af2..7a7ca43f 100644 --- a/config/initializers/1_settings.rb +++ b/config/initializers/1_settings.rb @@ -121,19 +121,19 @@ class Settings < Settingslogic end def ldap_enabled? - ldap['enabled'] - rescue + ldap && ldap['enabled'] + rescue Settingslogic::MissingSetting false end def omniauth_enabled? omniauth && omniauth['enabled'] - rescue + rescue Settingslogic::MissingSetting false end def omniauth_providers - omniauth['providers'] || [] + (omniauth_enabled? && omniauth['providers']) || [] end def disable_gravatar? diff --git a/lib/gitlab/auth.rb b/lib/gitlab/auth.rb index ef058ff5..90bd5d74 100644 --- a/lib/gitlab/auth.rb +++ b/lib/gitlab/auth.rb @@ -17,7 +17,7 @@ module Gitlab end end - def create_from_omniauth auth, ldap = false + def create_from_omniauth(auth, ldap = false) provider = auth.provider uid = auth.info.uid || auth.uid name = auth.info.name.force_encoding("utf-8") @@ -39,7 +39,7 @@ module Gitlab password_confirmation: password, projects_limit: Gitlab.config.default_projects_limit, ) - if Gitlab.config.omniauth.block_auto_created_users && !ldap + if Gitlab.config.omniauth['block_auto_created_users'] && !ldap @user.blocked = true end @user.save! @@ -52,7 +52,7 @@ module Gitlab if @user = User.find_by_provider_and_extern_uid(provider, uid) @user else - if Gitlab.config.omniauth.allow_single_sign_on + if Gitlab.config.omniauth['allow_single_sign_on'] @user = create_from_omniauth(auth) @user end diff --git a/spec/lib/auth_spec.rb b/spec/lib/auth_spec.rb index 5faf1307..1e03bc59 100644 --- a/spec/lib/auth_spec.rb +++ b/spec/lib/auth_spec.rb @@ -4,6 +4,8 @@ describe Gitlab::Auth do let(:gl_auth) { Gitlab::Auth.new } before do + Gitlab.config.stub(omniauth: {}) + @info = mock( uid: '12djsak321', name: 'John', @@ -64,7 +66,7 @@ describe Gitlab::Auth do end it "should create user if single_sing_on"do - Gitlab.config.omniauth.stub allow_single_sign_on: true + Gitlab.config.omniauth['allow_single_sign_on'] = true User.stub find_by_provider_and_extern_uid: nil gl_auth.should_receive :create_from_omniauth gl_auth.find_or_new_for_omniauth(@auth) From d993f666423744d213d7cce063b48e71fa751d43 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 13 Sep 2012 15:20:00 -0400 Subject: [PATCH 269/357] Fix HTML entities being parsed in GFM Also fixes the spec so that it actually tests the thing it says it's testing. Hooray! Closes #1308 --- lib/gitlab/markdown.rb | 22 +++++++++++++++------ spec/helpers/gitlab_markdown_helper_spec.rb | 1 + 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb index 4fc0c392..0a467a8d 100644 --- a/lib/gitlab/markdown.rb +++ b/lib/gitlab/markdown.rb @@ -26,13 +26,13 @@ module Gitlab # => "\":trollface:\" module Markdown REFERENCE_PATTERN = %r{ - ([^\w&;])? # Prefix (1) + (\W)? # Prefix (1) ( # Reference (2) @([\w\._]+) # User name (3) |[#!$](\d+) # Issue/MR/Snippet ID (4) |([\h]{6,40}) # Commit ID (5) ) - ([^\w&;])? # Suffix (6) + (\W)? # Suffix (6) }x.freeze EMOJI_PATTERN = %r{(:(\S+):)}.freeze @@ -84,6 +84,13 @@ module Gitlab # # Returns parsed text def parse(text) + parse_references(text) if @project + parse_emoji(text) + + text + end + + def parse_references(text) # parse reference links text.gsub!(REFERENCE_PATTERN) do |match| prefix = $1 || '' @@ -91,13 +98,18 @@ module Gitlab identifier = $3 || $4 || $5 suffix = $6 || '' - if ref_link = reference_link(reference, identifier) + # Avoid HTML entities + if prefix.ends_with?('&') || suffix.starts_with?(';') + match + elsif ref_link = reference_link(reference, identifier) prefix + ref_link + suffix else match end - end if @project + end + end + def parse_emoji(text) # parse emoji text.gsub!(EMOJI_PATTERN) do |match| if valid_emoji?($2) @@ -106,8 +118,6 @@ module Gitlab match end end - - text end # Private: Checks if an emoji icon exists in the image asset directory diff --git a/spec/helpers/gitlab_markdown_helper_spec.rb b/spec/helpers/gitlab_markdown_helper_spec.rb index 4dd3802a..0af33142 100644 --- a/spec/helpers/gitlab_markdown_helper_spec.rb +++ b/spec/helpers/gitlab_markdown_helper_spec.rb @@ -31,6 +31,7 @@ describe GitlabMarkdownHelper do end it "should not touch HTML entities" do + @project.issues.stub(:where).with(id: '39').and_return([issue]) actual = expected = "We'll accept good pull requests." gfm(actual).should == expected end From 795cc9b7161b3c2e580075a88d7b53ef95e3f883 Mon Sep 17 00:00:00 2001 From: Peter Gonda Date: Fri, 14 Sep 2012 15:57:25 +0200 Subject: [PATCH 270/357] Repaired Get patch --- app/controllers/commits_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/commits_controller.rb b/app/controllers/commits_controller.rb index 4ab40c30..6d3f1aea 100644 --- a/app/controllers/commits_controller.rb +++ b/app/controllers/commits_controller.rb @@ -64,7 +64,7 @@ class CommitsController < ApplicationController @commit.to_patch, type: "text/plain", disposition: 'attachment', - filename: "#{@commit.id.patch}" + filename: "#{@commit.id}.patch" ) end From dc37c8aaae29f2340ba3fd0bcda08c937010abde Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 14 Sep 2012 19:13:25 +0300 Subject: [PATCH 271/357] Refactored profile area --- app/assets/stylesheets/common.scss | 7 +++ app/assets/stylesheets/main.scss | 5 ++ app/assets/stylesheets/sections/profile.scss | 8 +++ app/controllers/profile_controller.rb | 8 ++- app/helpers/application_helper.rb | 3 +- app/views/layouts/profile.html.haml | 10 ++-- app/views/profile/account.html.haml | 57 +++++++++++++++++++ app/views/profile/history.html.haml | 5 ++ app/views/profile/password.html.haml | 29 ---------- app/views/profile/show.html.haml | 4 +- app/views/profile/token.html.haml | 23 -------- config/routes.rb | 3 +- features/profile/profile.feature | 2 +- features/steps/shared/paths.rb | 4 +- spec/requests/security/profile_access_spec.rb | 4 +- 15 files changed, 104 insertions(+), 68 deletions(-) create mode 100644 app/assets/stylesheets/sections/profile.scss create mode 100644 app/views/profile/account.html.haml create mode 100644 app/views/profile/history.html.haml delete mode 100644 app/views/profile/password.html.haml delete mode 100644 app/views/profile/token.html.haml diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index 69a3d743..fda8d54c 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -699,7 +699,14 @@ li.note { .active { img { border:1px solid #ccc; + background:$hover; @include border-radius(5px); } } } + +.btn-build-token { + float: left; + padding: 6px 20px; + margin-right: 12px; +} diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index 9a6d4456..75001d3a 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -160,6 +160,11 @@ $hover: #fdf5d9; */ @import "sections/notes.scss"; +/** + * This file represent profile styles + */ +@import "sections/profile.scss"; + /** * Devise styles */ diff --git a/app/assets/stylesheets/sections/profile.scss b/app/assets/stylesheets/sections/profile.scss new file mode 100644 index 00000000..206da3a9 --- /dev/null +++ b/app/assets/stylesheets/sections/profile.scss @@ -0,0 +1,8 @@ +.profile_history { + .event_feed { + min-height:20px; + .avatar { + width:20px; + } + } +} diff --git a/app/controllers/profile_controller.rb b/app/controllers/profile_controller.rb index a95a3310..ba68af2e 100644 --- a/app/controllers/profile_controller.rb +++ b/app/controllers/profile_controller.rb @@ -32,10 +32,14 @@ class ProfileController < ApplicationController def reset_private_token current_user.reset_authentication_token! - redirect_to profile_token_path + redirect_to profile_account_path end - private + def history + @events = current_user.recent_events.page(params[:page]).per(20) + end + + private def user @user = current_user diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index fb1393e2..3e435840 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -104,7 +104,8 @@ module ApplicationHelper # Profile Area when :profile; current_page?(controller: "profile", action: :show) - when :password; current_page?(controller: "profile", action: :password) + when :history; current_page?(controller: "profile", action: :history) + when :account; current_page?(controller: "profile", action: :account) when :token; current_page?(controller: "profile", action: :token) when :design; current_page?(controller: "profile", action: :design) when :ssh_keys; controller.controller_name == "keys" diff --git a/app/views/layouts/profile.html.haml b/app/views/layouts/profile.html.haml index 810b346f..62c8db5b 100644 --- a/app/views/layouts/profile.html.haml +++ b/app/views/layouts/profile.html.haml @@ -9,20 +9,20 @@ %li.home{class: tab_class(:profile)} = link_to "Profile", profile_path - %li{class: tab_class(:password)} - = link_to "Authentication", profile_password_path + %li{class: tab_class(:account)} + = link_to "Account", profile_account_path %li{class: tab_class(:ssh_keys)} = link_to keys_path do SSH Keys %span.count= current_user.keys.count - %li{class: tab_class(:token)} - = link_to "Token", profile_token_path - %li{class: tab_class(:design)} = link_to "Design", profile_design_path + %li{class: tab_class(:history)} + = link_to "History", profile_history_path + .content = yield diff --git a/app/views/profile/account.html.haml b/app/views/profile/account.html.haml new file mode 100644 index 00000000..6707a8ff --- /dev/null +++ b/app/views/profile/account.html.haml @@ -0,0 +1,57 @@ +- if Gitlab.config.omniauth_enabled? + %fieldset + %legend + %h3.page_title Social Accounts + .oauth_select_holder + %p.hint Tip: Click on icon to activate sigin with one of the following services + - User.omniauth_providers.each do |provider| + %span{class: oauth_active_class(provider) } + = link_to authbutton(provider, 32), omniauth_authorize_path(User, provider) + + +%fieldset + %legend + %h3.page_title + Private token + %span.cred.right + keep it in secret! + .padded + = form_for @user, url: profile_reset_private_token_path, method: :put do |f| + .data + %p.slead + Private token used to access application resources without authentication. + %br + It can be used for atom feed or API + %p.cgray + - if current_user.private_token + = text_field_tag "token", current_user.private_token, class: "xxlarge large_text" + = f.submit 'Reset', confirm: "Are you sure?", class: "btn primary btn-build-token" + - else + %span You don`t have one yet. Click generate to fix it. + = f.submit 'Generate', class: "btn success btn-build-token" + +%fieldset + %legend + %h3.page_title Password + = form_for @user, url: profile_password_path, method: :put do |f| + .padded + %p.slead After successful password update you will be redirected to login page where you should login with new password + -if @user.errors.any? + .alert-message.block-message.error + %ul + - @user.errors.full_messages.each do |msg| + %li= msg + + .clearfix + = f.label :password + .input= f.password_field :password + .clearfix + = f.label :password_confirmation + .input= f.password_field :password_confirmation + .actions + = f.submit 'Save', class: "btn save-btn" + + + + + diff --git a/app/views/profile/history.html.haml b/app/views/profile/history.html.haml new file mode 100644 index 00000000..aa7006c5 --- /dev/null +++ b/app/views/profile/history.html.haml @@ -0,0 +1,5 @@ +.profile_history + = render @events +%hr += paginate @events, theme: "gitlab" + diff --git a/app/views/profile/password.html.haml b/app/views/profile/password.html.haml deleted file mode 100644 index 805429e3..00000000 --- a/app/views/profile/password.html.haml +++ /dev/null @@ -1,29 +0,0 @@ -- if Gitlab.config.omniauth_enabled? - %h3.page_title Accounts - %hr - %p.hint Tip: Click on icon to activate sigin with one of the following services - .oauth_select_holder - - User.omniauth_providers.each do |provider| - %span{class: oauth_active_class(provider) } - = link_to authbutton(provider, 32), omniauth_authorize_path(User, provider) - -.clearfix.prepend-top-20 -%h3.page_title Password -%hr - -= form_for @user, url: profile_password_path, method: :put do |f| - %p.slead After successful password update you will be redirected to login page where you should login with new password - -if @user.errors.any? - .alert-message.block-message.error - %ul - - @user.errors.full_messages.each do |msg| - %li= msg - - .clearfix - = f.label :password - .input= f.password_field :password - .clearfix - = f.label :password_confirmation - .input= f.password_field :password_confirmation - .actions - = f.submit 'Save', class: "btn save-btn" diff --git a/app/views/profile/show.html.haml b/app/views/profile/show.html.haml index 5ac84122..7b625291 100644 --- a/app/views/profile/show.html.haml +++ b/app/views/profile/show.html.haml @@ -33,13 +33,13 @@ %ul -unless Gitlab.config.disable_gravatar? %li - %p.hint You can change your avatar at gravatar.com + %p.hint You can change your avatar at #{link_to "gravatar.com", "http://gravatar.com"} - if Gitlab.config.omniauth_enabled? && @user.provider? %li %p.hint You can login through #{@user.provider.titleize}! - = link_to "click here to change", profile_password_path + = link_to "click here to change", profile_account_path %hr .row diff --git a/app/views/profile/token.html.haml b/app/views/profile/token.html.haml deleted file mode 100644 index 6c870c36..00000000 --- a/app/views/profile/token.html.haml +++ /dev/null @@ -1,23 +0,0 @@ -%h3.page_title - Private token - %span.cred.right - keep it in secret! -%hr -= form_for @user, url: profile_reset_private_token_path, method: :put do |f| - .data - %p.slead - Private token used to access application resources without authentication. - %br - It can be used for atom feed or API - %p.cgray - - if current_user.private_token - = text_field_tag "token", current_user.private_token, class: "xxlarge large_text" - - else - You don`t have one yet. Click generate to fix it. - .actions - - if current_user.private_token - = f.submit 'Reset', confirm: "Are you sure?", class: "btn" - - else - = f.submit 'Generate', class: "btn primary" - - diff --git a/config/routes.rb b/config/routes.rb index ed5eac0d..84a0c6ab 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -63,7 +63,8 @@ Gitlab::Application.routes.draw do # # Profile Area # - get "profile/password", :to => "profile#password" + get "profile/account", :to => "profile#account" + get "profile/history", :to => "profile#history" put "profile/password", :to => "profile#password_update" get "profile/token", :to => "profile#token" put "profile/reset_private_token", :to => "profile#reset_private_token" diff --git a/features/profile/profile.feature b/features/profile/profile.feature index f4b2f198..03cb7a13 100644 --- a/features/profile/profile.feature +++ b/features/profile/profile.feature @@ -12,7 +12,7 @@ Feature: Profile And I should see new contact info Scenario: I change my password - Given I visit profile password page + Given I visit profile account page Then I change my password And I should be redirected to sign in page diff --git a/features/steps/shared/paths.rb b/features/steps/shared/paths.rb index 05ae88e6..b0028f9c 100644 --- a/features/steps/shared/paths.rb +++ b/features/steps/shared/paths.rb @@ -21,8 +21,8 @@ module SharedPaths visit profile_path end - Given 'I visit profile password page' do - visit profile_password_path + Given 'I visit profile account page' do + visit profile_account_path end Given 'I visit profile token page' do diff --git a/spec/requests/security/profile_access_spec.rb b/spec/requests/security/profile_access_spec.rb index 9f6fe6a2..69c1c29c 100644 --- a/spec/requests/security/profile_access_spec.rb +++ b/spec/requests/security/profile_access_spec.rb @@ -28,8 +28,8 @@ describe "Users Security" do it { should be_denied_for :visitor } end - describe "GET /profile/password" do - subject { profile_password_path } + describe "GET /profile/account" do + subject { profile_account_path } it { should be_allowed_for @u1 } it { should be_allowed_for :admin } From 759fb518eb28ca59913f1c897b3cc056693709ca Mon Sep 17 00:00:00 2001 From: randx Date: Fri, 14 Sep 2012 18:46:40 +0300 Subject: [PATCH 272/357] fix event issue when event for left project + project removed --- app/models/event.rb | 36 +++++++++++-------- .../_event_membership_changed.html.haml | 2 +- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/app/models/event.rb b/app/models/event.rb index 308ffd63..b11b21bd 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -35,13 +35,21 @@ class Event < ActiveRecord::Base end # Next events currently enabled for system - # - push + # - push # - new issue # - merge request def allowed? push? || issue? || merge_request? || membership_changed? end + def project_name + if project + project.name + else + "(deleted)" + end + end + def push? action == self.class::Pushed && valid_push? end @@ -58,31 +66,31 @@ class Event < ActiveRecord::Base action == self.class::Reopened end - def issue? + def issue? target_type == "Issue" end - def merge_request? + def merge_request? target_type == "MergeRequest" end - def new_issue? - target_type == "Issue" && + def new_issue? + target_type == "Issue" && action == Created end - def new_merge_request? - target_type == "MergeRequest" && + def new_merge_request? + target_type == "MergeRequest" && action == Created end - def changed_merge_request? - target_type == "MergeRequest" && + def changed_merge_request? + target_type == "MergeRequest" && [Closed, Reopened].include?(action) end - def changed_issue? - target_type == "Issue" && + def changed_issue? + target_type == "Issue" && [Closed, Reopened].include?(action) end @@ -98,7 +106,7 @@ class Event < ActiveRecord::Base joined? || left? end - def issue + def issue target if target_type == "Issue" end @@ -106,7 +114,7 @@ class Event < ActiveRecord::Base target if target_type == "MergeRequest" end - def author + def author @author ||= User.find(author_id) end @@ -119,7 +127,7 @@ class Event < ActiveRecord::Base 'joined' elsif left? 'left' - else + else "opened" end end diff --git a/app/views/events/_event_membership_changed.html.haml b/app/views/events/_event_membership_changed.html.haml index b079c138..464f24b3 100644 --- a/app/views/events/_event_membership_changed.html.haml +++ b/app/views/events/_event_membership_changed.html.haml @@ -2,7 +2,7 @@ %strong #{event.author_name} %span.event_label{class: event.action_name}= event.action_name project -%strong= link_to event.project.name, event.project +%strong= link_to event.project_name, event.project %span.cgray = time_ago_in_words(event.created_at) ago. From 0d66cf2a38540056b6400c526e62ccc0cbc3144d Mon Sep 17 00:00:00 2001 From: randx Date: Fri, 14 Sep 2012 18:58:16 +0300 Subject: [PATCH 273/357] Fixed token feature --- features/profile/profile.feature | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/profile/profile.feature b/features/profile/profile.feature index 03cb7a13..134cabb5 100644 --- a/features/profile/profile.feature +++ b/features/profile/profile.feature @@ -17,6 +17,6 @@ Feature: Profile And I should be redirected to sign in page Scenario: I reset my token - Given I visit profile token page + Given I visit profile account page Then I reset my token And I should see new token From 8b6dba749a80fbdf94f1495dda8cf3cdad61a28b Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Thu, 13 Sep 2012 02:12:44 +0200 Subject: [PATCH 274/357] Reorder notes view elements --- app/assets/javascripts/note.js | 8 ++++---- app/assets/stylesheets/sections/notes.scss | 6 +++++- app/views/notes/_notes.html.haml | 9 ++++----- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/app/assets/javascripts/note.js b/app/assets/javascripts/note.js index 79ab086b..47b0e0f5 100644 --- a/app/assets/javascripts/note.js +++ b/app/assets/javascripts/note.js @@ -106,8 +106,8 @@ var NoteList = { type: "GET", url: this.notes_path, data: "?" + this.target_params, - complete: function(){ $('.status').removeClass("loading")}, - beforeSend: function() { $('.status').addClass("loading") }, + complete: function(){ $('.notes-status').removeClass("loading")}, + beforeSend: function() { $('.notes-status').addClass("loading") }, dataType: "script"}); }, @@ -136,8 +136,8 @@ var NoteList = { type: "GET", url: this.notes_path, data: "first_id=" + this.first_id + this.target_params, - complete: function(){ $('.status').removeClass("loading")}, - beforeSend: function() { $('.status').addClass("loading") }, + complete: function(){ $('.notes-status').removeClass("loading")}, + beforeSend: function() { $('.notes-status').addClass("loading") }, dataType: "script"}); }, diff --git a/app/assets/stylesheets/sections/notes.scss b/app/assets/stylesheets/sections/notes.scss index 6a965fa4..b2f61d9b 100644 --- a/app/assets/stylesheets/sections/notes.scss +++ b/app/assets/stylesheets/sections/notes.scss @@ -10,7 +10,7 @@ padding:0px; } -#new_notes_list li:last-child{ +#notes-list li:last-child { border-bottom:1px solid #aaa; } @@ -71,6 +71,10 @@ } } +.notes-status { + margin: 18px; +} + p.notify_controls input{ margin: 5px; diff --git a/app/views/notes/_notes.html.haml b/app/views/notes/_notes.html.haml index e692e746..e5b1ea72 100644 --- a/app/views/notes/_notes.html.haml +++ b/app/views/notes/_notes.html.haml @@ -1,10 +1,9 @@ +%ul#notes-list +%ul#new_notes_list +.notes-status + - if can? current_user, :write_note, @project = render "notes/form" -.clear -%hr -%ul#new_notes_list -%ul#notes-list -.status :javascript From 6ffec9a298dd90275ec6b17d1e11554bd31b9f2c Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Thu, 13 Sep 2012 15:43:16 +0200 Subject: [PATCH 275/357] Update Note to load notes in the right order --- app/contexts/notes/load_context.rb | 23 ++++++++++++----------- app/models/note.rb | 2 +- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/app/contexts/notes/load_context.rb b/app/contexts/notes/load_context.rb index c89a7d19..c026fc50 100644 --- a/app/contexts/notes/load_context.rb +++ b/app/contexts/notes/load_context.rb @@ -8,24 +8,25 @@ module Notes @notes = case target_type - when "commit" - then project.commit_notes(project.commit(target_id)).fresh.limit(20) - when "snippet" - then project.snippets.find(target_id).notes - when "wall" - then project.common_notes.order("created_at DESC").fresh.limit(50) + when "commit" + project.commit_notes(project.commit(target_id)).fresh.limit(20) when "issue" - then project.issues.find(target_id).notes.inc_author.order("created_at DESC").limit(20) + project.issues.find(target_id).notes.inc_author.fresh.limit(20) when "merge_request" - then project.merge_requests.find(target_id).notes.inc_author.order("created_at DESC").limit(20) + project.merge_requests.find(target_id).notes.inc_author.fresh.limit(20) + when "snippet" + project.snippets.find(target_id).notes.fresh + when "wall" + # this is the only case, where the order is DESC + project.common_notes.order("created_at DESC").limit(50) when "wiki" - then project.wikis.reverse.map {|w| w.notes.fresh }.flatten[0..20] + project.wikis.reverse.map {|w| w.notes.fresh }.flatten[0..20] end @notes = if last_id - @notes.where("id > ?", last_id) + @notes.where("id < ?", last_id) elsif first_id - @notes.where("id < ?", first_id) + @notes.where("id > ?", first_id) else @notes end diff --git a/app/models/note.rb b/app/models/note.rb index 4c46c7df..9aad8949 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -36,7 +36,7 @@ class Note < ActiveRecord::Base scope :today, where("created_at >= :date", date: Date.today) scope :last_week, where("created_at >= :date", date: (Date.today - 7.days)) scope :since, lambda { |day| where("created_at >= :date", date: (day)) } - scope :fresh, order("created_at DESC") + scope :fresh, order("created_at ASC") scope :inc_author_project, includes(:project, :author) scope :inc_author, includes(:author) From 14164017533388dc2a0d0f43e05ee84badbf2223 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Thu, 13 Sep 2012 19:55:57 +0200 Subject: [PATCH 276/357] Fix markup --- app/assets/stylesheets/sections/notes.scss | 2 +- app/views/notes/_notes.html.haml | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/assets/stylesheets/sections/notes.scss b/app/assets/stylesheets/sections/notes.scss index b2f61d9b..8db88930 100644 --- a/app/assets/stylesheets/sections/notes.scss +++ b/app/assets/stylesheets/sections/notes.scss @@ -3,7 +3,7 @@ * */ #notes-list, -#new_notes_list { +#new-notes-list { display:block; list-style:none; margin:0px; diff --git a/app/views/notes/_notes.html.haml b/app/views/notes/_notes.html.haml index e5b1ea72..14e1e84b 100644 --- a/app/views/notes/_notes.html.haml +++ b/app/views/notes/_notes.html.haml @@ -1,11 +1,10 @@ %ul#notes-list -%ul#new_notes_list +%ul#new-notes-list .notes-status - if can? current_user, :write_note, @project = render "notes/form" - :javascript $(function(){ NoteList.init("#{tid}", "#{tt}", "#{project_notes_path(@project)}"); From e802d00996d6948e29f085d4de9409423e0d91a4 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Fri, 14 Sep 2012 16:52:24 +0200 Subject: [PATCH 277/357] Completely redo loading of notes with JS --- app/assets/javascripts/note.js | 199 ++++++++++++++----------- app/contexts/notes/load_context.rb | 9 +- app/helpers/notes_helper.rb | 9 ++ app/views/notes/_create_common.js.haml | 3 +- app/views/notes/_load.js.haml | 14 +- 5 files changed, 134 insertions(+), 100 deletions(-) create mode 100644 app/helpers/notes_helper.rb diff --git a/app/assets/javascripts/note.js b/app/assets/javascripts/note.js index 47b0e0f5..ccc84ac9 100644 --- a/app/assets/javascripts/note.js +++ b/app/assets/javascripts/note.js @@ -4,9 +4,8 @@ var NoteList = { target_params: null, target_id: 0, target_type: null, - first_id: 0, - last_id: 0, - disable:false, + bottom_id: 0, + loading_more_disabled: false, init: function(tid, tt, path) { @@ -15,26 +14,23 @@ var NoteList = { this.target_type = tt; this.target_params = "&target_type=" + this.target_type + "&target_id=" + this.target_id; - // get notes + // get initial set of notes this.getContent(); - // get new notes every n seconds - this.initRefresh(); - $('.delete-note').live('ajax:success', function() { $(this).closest('li').fadeOut(); }); - $(".note-form-holder").live("ajax:before", function(){ + $(".note-form-holder").on("ajax:before", function(){ $(".submit_note").disable() }) - $(".note-form-holder").live("ajax:complete", function(){ + $(".note-form-holder").on("ajax:complete", function(){ $(".submit_note").enable() }) disableButtonIfEmptyField(".note-text", ".submit_note"); - $(".note-text").live("focus", function(){ + $(".note-text").on("focus", function(){ $(this).css("height", "80px"); $('.note_advanced_opts').show(); }); @@ -44,64 +40,20 @@ var NoteList = { var filename = val.replace(/^.*[\\\/]/, ''); $(".file_name").text(filename); }); - }, /** - * Load new notes to fresh list called 'new_notes_list': - * - Replace 'new_notes_list' with new list every n seconds - * - Append new notes to this list after submit + * Handle loading the initial set of notes. + * And set up loading more notes when scrolling to the bottom of the page. */ - initRefresh: - function() { - // init timer - var intNew = setInterval("NoteList.getNew()", 10000); - }, - - replace: - function(html) { - $("#new_notes_list").html(html); - }, - - prepend: - function(id, html) { - if(id != this.last_id) { - $("#new_notes_list").prepend(html); - } - }, - - getNew: - function() { - // refersh notes list - $.ajax({ - type: "GET", - url: this.notes_path, - data: "last_id=" + this.last_id + this.target_params, - dataType: "script"}); - }, - - refresh: - function() { - // refersh notes list - $.ajax({ - type: "GET", - url: this.notes_path, - data: "first_id=" + this.first_id + "&last_id=" + this.last_id + this.target_params, - dataType: "script"}); - }, - /** - * Init load of notes: - * 1. Get content with ajax call - * 2. Set content of notes list with loaded one + * Gets an inital set of notes. */ - - - getContent: - function() { + getContent: + function() { $.ajax({ type: "GET", url: this.notes_path, @@ -111,10 +63,13 @@ var NoteList = { dataType: "script"}); }, + /** + * Called in response to getContent(). + * Replaces the content of #notes-list with the given html. + */ setContent: - function(fid, lid, html) { - this.last_id = lid; - this.first_id = fid; + function(last_id, html) { + this.bottom_id = last_id; $("#notes-list").html(html); // Init infinite scrolling @@ -123,54 +78,126 @@ var NoteList = { /** - * Paging for old notes when scroll to bottom: - * 1. Init scroll events with 'initLoadMore' - * 2. Load onlder notes with 'getOld' method - * 3. append old notes to bottom of list with 'append' + * Handle loading more notes when scrolling to the bottom of the page. + * The id of the last note in the list is in this.bottom_id. * + * Set up refreshing only new notes after all notes have been loaded. */ - getOld: + + + /** + * Initializes loading more notes when scrolling to the bottom of the page. + */ + initLoadMore: function() { + $(document).endlessScroll({ + bottomPixels: 400, + fireDelay: 1000, + fireOnce:true, + ceaseFire: function() { + return NoteList.loading_more_disabled; + }, + callback: function(i) { + NoteList.getMore(); + } + }); + }, + + /** + * Gets an additional set of notes. + */ + getMore: + function() { + // only load more notes if there are no "new" notes $('.loading').show(); $.ajax({ type: "GET", url: this.notes_path, - data: "first_id=" + this.first_id + this.target_params, + data: "loading_more=1&after_id=" + this.bottom_id + this.target_params, complete: function(){ $('.notes-status').removeClass("loading")}, beforeSend: function() { $('.notes-status').addClass("loading") }, dataType: "script"}); }, - append: + /** + * Called in response to getMore(). + * Append notes to #notes-list. + */ + appendMoreNotes: function(id, html) { - if(this.first_id == id) { - this.disable = true; - } else { - this.first_id = id; + if(id != this.bottom_id) { + this.bottom_id = id; $("#notes-list").append(html); } }, - initLoadMore: + /** + * Called in response to getMore(). + * Disables loading more notes when scrolling to the bottom of the page. + * Initalizes refreshing new notes. + */ + finishedLoadingMore: function() { - $(document).endlessScroll({ - bottomPixels: 400, - fireDelay: 1000, - fireOnce:true, - ceaseFire: function() { - return NoteList.disable; - }, - callback: function(i) { - NoteList.getOld(); + this.loading_more_disabled = true; + + // from now on only get new notes + this.initRefreshNew(); + }, + + + /** + * Handle refreshing and adding of new notes. + * + * New notes are all notes that are created after the site has been loaded. + * The "old" notes are in #notes-list the "new" ones will be in #new-notes-list. + * The id of the last "old" note is in this.bottom_id. + */ + + + /** + * Initializes getting new notes every n seconds. + */ + initRefreshNew: + function() { + setInterval("NoteList.getNew()", 10000); + }, + + /** + * Gets the new set of notes (i.e. all notes after ). + */ + getNew: + function() { + $.ajax({ + type: "GET", + url: this.notes_path, + data: "loading_new=1&after_id=" + this.bottom_id + this.target_params, + dataType: "script"}); + }, + + /** + * Called in response to getNew(). + * Replaces the content of #new-notes-list with the given html. + */ + replaceNewNotes: + function(html) { + $("#new-notes-list").html(html); + }, + + /** + * Adds a single note to #new-notes-list. + */ + appendNewNote: + function(id, html) { + if(id != this.bottom_id) { + $("#new-notes-list").append(html); } - }); } }; -var PerLineNotes = { +var PerLineNotes = { init: function() { - $(".line_note_link, .line_note_reply_link").live("click", function(e) { + $(".line_note_link, .line_note_reply_link").on("click", function(e) { var form = $(".per_line_form"); $(this).closest("tr").after(form); form.find("#note_line_code").val($(this).attr("line_code")); diff --git a/app/contexts/notes/load_context.rb b/app/contexts/notes/load_context.rb index c026fc50..c2d7644b 100644 --- a/app/contexts/notes/load_context.rb +++ b/app/contexts/notes/load_context.rb @@ -3,8 +3,7 @@ module Notes def execute target_type = params[:target_type] target_id = params[:target_id] - first_id = params[:first_id] - last_id = params[:last_id] + after_id = params[:after_id] @notes = case target_type @@ -23,10 +22,8 @@ module Notes project.wikis.reverse.map {|w| w.notes.fresh }.flatten[0..20] end - @notes = if last_id - @notes.where("id < ?", last_id) - elsif first_id - @notes.where("id > ?", first_id) + @notes = if after_id + @notes.where("id > ?", after_id) else @notes end diff --git a/app/helpers/notes_helper.rb b/app/helpers/notes_helper.rb new file mode 100644 index 00000000..28701661 --- /dev/null +++ b/app/helpers/notes_helper.rb @@ -0,0 +1,9 @@ +module NotesHelper + def loading_more_notes? + params[:loading_more].present? + end + + def loading_new_notes? + params[:loading_new].present? + end +end diff --git a/app/views/notes/_create_common.js.haml b/app/views/notes/_create_common.js.haml index e80eccb1..ce678585 100644 --- a/app/views/notes/_create_common.js.haml +++ b/app/views/notes/_create_common.js.haml @@ -5,7 +5,8 @@ $('.note-form-holder #preview-link').text('Preview'); $('.note-form-holder #preview-note').hide(); $('.note-form-holder').show(); - NoteList.prepend(#{note.id}, "#{escape_javascript(render partial: "notes/show", locals: {note: note})}"); + NoteList.appendNewNote(#{note.id}, "#{escape_javascript(render "notes/show", note: note)}"); + - else :plain $(".note-form-holder").replaceWith("#{escape_javascript(render('form'))}"); diff --git a/app/views/notes/_load.js.haml b/app/views/notes/_load.js.haml index c16a699a..8c735476 100644 --- a/app/views/notes/_load.js.haml +++ b/app/views/notes/_load.js.haml @@ -1,17 +1,17 @@ - unless @notes.blank? - - if params[:last_id] + - if loading_more_notes? :plain - NoteList.replace("#{escape_javascript(render(partial: 'notes/notes_list'))}"); + NoteList.appendMoreNotes(#{@notes.last.id}, "#{escape_javascript(render 'notes/notes_list')}"); - - elsif params[:first_id] + - elsif loading_new_notes? :plain - NoteList.append(#{@notes.last.id}, "#{escape_javascript(render(partial: 'notes/notes_list'))}"); + NoteList.replaceNewNotes("#{escape_javascript(render 'notes/notes_list')}"); - else :plain - NoteList.setContent(#{@notes.last.id}, #{@notes.first.id}, "#{escape_javascript(render(partial: 'notes/notes_list'))}"); + NoteList.setContent(#{@notes.last.id}, "#{escape_javascript(render 'notes/notes_list')}"); - else - - if params[:first_id] + - if loading_more_notes? :plain - NoteList.append(#{params[:first_id]}, ""); + NoteList.finishedLoadingMore(); From 20e009a40a4fa5d7e5517833e14c16b32b461720 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Fri, 14 Sep 2012 01:21:39 +0200 Subject: [PATCH 278/357] Update diff comments order and rendering --- app/views/commits/_text_file.html.haml | 4 ++-- app/views/notes/_create_common.js.haml | 2 +- app/views/notes/_per_line_show.html.haml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/views/commits/_text_file.html.haml b/app/views/commits/_text_file.html.haml index 0f6210f2..5dc8dbd3 100644 --- a/app/views/commits/_text_file.html.haml +++ b/app/views/commits/_text_file.html.haml @@ -18,9 +18,9 @@ %td.line_content{class: "noteable_line #{type} #{line_code}", "line_code" => line_code}= raw "#{line}  " - if @comments_allowed - - comments = @line_notes.select { |n| n.line_code == line_code }.sort_by(&:created_at).reverse + - comments = @line_notes.select { |n| n.line_code == line_code }.sort_by(&:created_at) - unless comments.empty? - comments.each_with_index do |note, i| - = render "notes/reply_button", line_code: line_code if i.zero? = render "notes/per_line_show", note: note - @line_notes.reject!{ |n| n == note } + = render "notes/reply_button", line_code: line_code diff --git a/app/views/notes/_create_common.js.haml b/app/views/notes/_create_common.js.haml index ce678585..0a00bd40 100644 --- a/app/views/notes/_create_common.js.haml +++ b/app/views/notes/_create_common.js.haml @@ -9,5 +9,5 @@ - else :plain - $(".note-form-holder").replaceWith("#{escape_javascript(render('form'))}"); + $(".note-form-holder").replaceWith("#{escape_javascript(render 'form')}"); diff --git a/app/views/notes/_per_line_show.html.haml b/app/views/notes/_per_line_show.html.haml index cf1769c0..9d5a31a7 100644 --- a/app/views/notes/_per_line_show.html.haml +++ b/app/views/notes/_per_line_show.html.haml @@ -1,5 +1,5 @@ %tr.line_notes_row %td{colspan: 3} %ul - = render partial: "notes/show", locals: {note: note} + = render "notes/show", note: note From 653f7ec4fb57f84f471c8f2078c7534b1c085cc9 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Fri, 14 Sep 2012 01:22:09 +0200 Subject: [PATCH 279/357] Update links for inline comments to use data-* attributes --- app/views/commits/_text_file.html.haml | 2 +- app/views/notes/_reply_button.html.haml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/commits/_text_file.html.haml b/app/views/commits/_text_file.html.haml index 5dc8dbd3..7a00eb45 100644 --- a/app/views/commits/_text_file.html.haml +++ b/app/views/commits/_text_file.html.haml @@ -13,7 +13,7 @@ %td.old_line = link_to raw(type == "new" ? " " : line_old), "##{line_code}", id: line_code - if @comments_allowed - = link_to "", "#", class: "line_note_link", "line_code" => line_code, title: "Add note for this line" + = link_to "", "#", class: "line_note_link", data: { line_code: line_code }, title: "Add note for this line" %td.new_line= link_to raw(type == "old" ? " " : line_new) , "##{line_code}", id: line_code %td.line_content{class: "noteable_line #{type} #{line_code}", "line_code" => line_code}= raw "#{line}  " diff --git a/app/views/notes/_reply_button.html.haml b/app/views/notes/_reply_button.html.haml index c981fb9f..42c737c7 100644 --- a/app/views/notes/_reply_button.html.haml +++ b/app/views/notes/_reply_button.html.haml @@ -1,4 +1,4 @@ %tr.line_notes_row.reply %td{colspan: 3} %i.icon-comment - = link_to "Reply", "#", class: "line_note_reply_link", "line_code" => line_code, title: "Add note for this line" + = link_to "Reply", "#", class: "line_note_reply_link", data: { line_code: line_code }, title: "Add note for this line" From cee230a158e72a973150a17034b58c869f7e9407 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Fri, 14 Sep 2012 01:32:55 +0200 Subject: [PATCH 280/357] Update JS for adding and removing diff line notes --- app/assets/javascripts/note.js | 37 +++++++++++++++++++++++++--- app/views/notes/_create_line.js.haml | 19 +++++++++++--- 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/app/assets/javascripts/note.js b/app/assets/javascripts/note.js index ccc84ac9..7cbf44b9 100644 --- a/app/assets/javascripts/note.js +++ b/app/assets/javascripts/note.js @@ -17,8 +17,9 @@ var NoteList = { // get initial set of notes this.getContent(); - $('.delete-note').live('ajax:success', function() { - $(this).closest('li').fadeOut(); }); + $("#notes-list, #new-notes-list").on("ajax:success", ".delete-note", function() { + $(this).closest('li').fadeOut(); + }); $(".note-form-holder").on("ajax:before", function(){ $(".submit_note").disable() @@ -197,13 +198,41 @@ var NoteList = { var PerLineNotes = { init: function() { - $(".line_note_link, .line_note_reply_link").on("click", function(e) { + /** + * Called when clicking on the "add note" or "reply" button for a diff line. + * + * Shows the note form below the line. + * Sets some hidden fields in the form. + */ + $(".diff_file_content").on("click", ".line_note_link, .line_note_reply_link", function(e) { var form = $(".per_line_form"); $(this).closest("tr").after(form); - form.find("#note_line_code").val($(this).attr("line_code")); + form.find("#note_line_code").val($(this).data("lineCode")); form.show(); return false; }); + disableButtonIfEmptyField(".line-note-text", ".submit_inline_note"); + + /** + * Called in response to successfully deleting a note on a diff line. + * + * Removes the actual note from view. + * Removes the reply button if the last note for that line has been removed. + */ + $(".diff_file_content").on("ajax:success", ".delete-note", function() { + var trNote = $(this).closest("tr"); + trNote.fadeOut(function() { + $(this).remove(); + }); + + // check if this is the last note for this line + // elements must really be removed for this to work reliably + var trLine = trNote.prev(); + var trRpl = trNote.next(); + if (trLine.hasClass("line_holder") && trRpl.hasClass("reply")) { + trRpl.fadeOut(function() { $(this).remove(); }); + } + }); } } diff --git a/app/views/notes/_create_line.js.haml b/app/views/notes/_create_line.js.haml index 662909f7..ab862b2f 100644 --- a/app/views/notes/_create_line.js.haml +++ b/app/views/notes/_create_line.js.haml @@ -1,8 +1,19 @@ - if note.valid? :plain + // hide and reset the form $(".per_line_form").hide(); $('.line-note-form-holder textarea').val(""); - $("a.line_note_reply_link[line_code='#{note.line_code}']").closest("tr").remove(); - var trEl = $(".#{note.line_code}").parent(); - trEl.after("#{escape_javascript(render partial: "notes/per_line_show", locals: {note: note})}"); - trEl.after("#{escape_javascript(render partial: "notes/reply_button", locals: {line_code: note.line_code})}"); + + // find the reply button for this line + // (might not be there if this is the first note) + var trRpl = $("a.line_note_reply_link[data-line-code='#{note.line_code}']").closest("tr"); + if (trRpl.size() == 0) { + // find the commented line ... + var trEl = $(".#{note.line_code}").parent(); + // ... and insert the note and the reply button after it + trEl.after("#{escape_javascript(render "notes/reply_button", line_code: note.line_code)}"); + trEl.after("#{escape_javascript(render "notes/per_line_show", note: note)}"); + } else { + // instert new note before reply button + trRpl.before("#{escape_javascript(render "notes/per_line_show", note: note)}"); + } From 61eb650db0eb05ee6436d662927cb963ec157b76 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Fri, 14 Sep 2012 04:59:55 +0200 Subject: [PATCH 281/357] Rename 'notes/notes' partial to 'notes/notes_with_form' --- app/views/commits/show.html.haml | 2 +- app/views/issues/show.html.haml | 2 +- app/views/merge_requests/_show.html.haml | 2 +- app/views/merge_requests/show.js.haml | 2 +- .../notes/{_notes.html.haml => _notes_with_form.html.haml} | 0 app/views/projects/wall.html.haml | 2 +- app/views/snippets/show.html.haml | 2 +- app/views/wikis/show.html.haml | 2 +- 8 files changed, 7 insertions(+), 7 deletions(-) rename app/views/notes/{_notes.html.haml => _notes_with_form.html.haml} (100%) diff --git a/app/views/commits/show.html.haml b/app/views/commits/show.html.haml index e01f8ea5..d12fff96 100644 --- a/app/views/commits/show.html.haml +++ b/app/views/commits/show.html.haml @@ -1,6 +1,6 @@ = render "commits/commit_box" = render "commits/diffs", diffs: @commit.diffs -= render "notes/notes", tid: @commit.id, tt: "commit" += render "notes/notes_with_form", tid: @commit.id, tt: "commit" = render "notes/per_line_form" diff --git a/app/views/issues/show.html.haml b/app/views/issues/show.html.haml index 9b1c72a3..0b72a820 100644 --- a/app/views/issues/show.html.haml +++ b/app/views/issues/show.html.haml @@ -61,4 +61,4 @@ = markdown @issue.description -.issue_notes#notes= render "notes/notes", tid: @issue.id, tt: "issue" +.issue_notes#notes= render "notes/notes_with_form", tid: @issue.id, tt: "issue" diff --git a/app/views/merge_requests/_show.html.haml b/app/views/merge_requests/_show.html.haml index f1b3fa9f..40b72190 100644 --- a/app/views/merge_requests/_show.html.haml +++ b/app/views/merge_requests/_show.html.haml @@ -16,7 +16,7 @@ Diff .merge_request_notes#notes{ class: (controller.action_name == 'show') ? "" : "hide" } - = render("notes/notes", tid: @merge_request.id, tt: "merge_request") + = render("notes/notes_with_form", tid: @merge_request.id, tt: "merge_request") .merge-request-diffs = render "merge_requests/show/diffs" if @diffs .status diff --git a/app/views/merge_requests/show.js.haml b/app/views/merge_requests/show.js.haml index 7a27b166..f44ccbb5 100644 --- a/app/views/merge_requests/show.js.haml +++ b/app/views/merge_requests/show.js.haml @@ -1,2 +1,2 @@ :plain - $(".merge-request-notes").html("#{escape_javascript(render("notes/notes", tid: @merge_request.id, tt: "merge_request"))}"); + $(".merge-request-notes").html("#{escape_javascript(render notes/notes_with_form", tid: @merge_request.id, tt: "merge_request")}"); diff --git a/app/views/notes/_notes.html.haml b/app/views/notes/_notes_with_form.html.haml similarity index 100% rename from app/views/notes/_notes.html.haml rename to app/views/notes/_notes_with_form.html.haml diff --git a/app/views/projects/wall.html.haml b/app/views/projects/wall.html.haml index 97765d7a..1a07bc3d 100644 --- a/app/views/projects/wall.html.haml +++ b/app/views/projects/wall.html.haml @@ -1,2 +1,2 @@ %div.wall_page - = render "notes/notes", tid: nil, tt: "wall" + = render "notes/notes_with_form", tid: nil, tt: "wall" diff --git a/app/views/snippets/show.html.haml b/app/views/snippets/show.html.haml index 0800b81d..4188a9f1 100644 --- a/app/views/snippets/show.html.haml +++ b/app/views/snippets/show.html.haml @@ -17,4 +17,4 @@ %div{class: current_user.dark_scheme ? "black" : ""} = raw @snippet.colorize(options: { linenos: 'True'}) -= render "notes/notes", tid: @snippet.id, tt: "snippet" += render "notes/notes_with_form", tid: @snippet.id, tt: "snippet" diff --git a/app/views/wikis/show.html.haml b/app/views/wikis/show.html.haml index fc235227..579ea1b3 100644 --- a/app/views/wikis/show.html.haml +++ b/app/views/wikis/show.html.haml @@ -21,4 +21,4 @@ Delete this page %hr -.wiki_notes#notes= render "notes/notes", tid: @wiki.id, tt: "wiki" +.wiki_notes#notes= render "notes/notes_with_form", tid: @wiki.id, tt: "wiki" From 8fb70d924dbb089fdac89125664e3aa73212d8fc Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Fri, 14 Sep 2012 05:00:21 +0200 Subject: [PATCH 282/357] Rename 'notes/create_*' partials --- .../{_create_common.js.haml => _create_common_note.js.haml} | 0 .../{_create_line.js.haml => _create_per_line_note.js.haml} | 0 app/views/notes/create.js.haml | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) rename app/views/notes/{_create_common.js.haml => _create_common_note.js.haml} (100%) rename app/views/notes/{_create_line.js.haml => _create_per_line_note.js.haml} (100%) diff --git a/app/views/notes/_create_common.js.haml b/app/views/notes/_create_common_note.js.haml similarity index 100% rename from app/views/notes/_create_common.js.haml rename to app/views/notes/_create_common_note.js.haml diff --git a/app/views/notes/_create_line.js.haml b/app/views/notes/_create_per_line_note.js.haml similarity index 100% rename from app/views/notes/_create_line.js.haml rename to app/views/notes/_create_per_line_note.js.haml diff --git a/app/views/notes/create.js.haml b/app/views/notes/create.js.haml index 8f631f38..03866591 100644 --- a/app/views/notes/create.js.haml +++ b/app/views/notes/create.js.haml @@ -1,7 +1,7 @@ - if @note.line_code - = render "create_line", note: @note + = render "create_per_line_note", note: @note - else - = render "create_common", note: @note + = render "create_common_note", note: @note -# Enable submit button :plain From 3c02c93f08019a73929de8e812424e581c58c62a Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Fri, 14 Sep 2012 05:05:37 +0200 Subject: [PATCH 283/357] Remove 'notes/load' partial --- app/views/notes/_load.js.haml | 17 ----------------- app/views/notes/index.js.haml | 18 +++++++++++++++++- 2 files changed, 17 insertions(+), 18 deletions(-) delete mode 100644 app/views/notes/_load.js.haml diff --git a/app/views/notes/_load.js.haml b/app/views/notes/_load.js.haml deleted file mode 100644 index 8c735476..00000000 --- a/app/views/notes/_load.js.haml +++ /dev/null @@ -1,17 +0,0 @@ -- unless @notes.blank? - - if loading_more_notes? - :plain - NoteList.appendMoreNotes(#{@notes.last.id}, "#{escape_javascript(render 'notes/notes_list')}"); - - - elsif loading_new_notes? - :plain - NoteList.replaceNewNotes("#{escape_javascript(render 'notes/notes_list')}"); - - - else - :plain - NoteList.setContent(#{@notes.last.id}, "#{escape_javascript(render 'notes/notes_list')}"); - -- else - - if loading_more_notes? - :plain - NoteList.finishedLoadingMore(); diff --git a/app/views/notes/index.js.haml b/app/views/notes/index.js.haml index ee31c0b8..8c735476 100644 --- a/app/views/notes/index.js.haml +++ b/app/views/notes/index.js.haml @@ -1 +1,17 @@ -= render "notes/load" +- unless @notes.blank? + - if loading_more_notes? + :plain + NoteList.appendMoreNotes(#{@notes.last.id}, "#{escape_javascript(render 'notes/notes_list')}"); + + - elsif loading_new_notes? + :plain + NoteList.replaceNewNotes("#{escape_javascript(render 'notes/notes_list')}"); + + - else + :plain + NoteList.setContent(#{@notes.last.id}, "#{escape_javascript(render 'notes/notes_list')}"); + +- else + - if loading_more_notes? + :plain + NoteList.finishedLoadingMore(); From c02e3f2104d9dbb1bca01935fe7c0dfeacf53baf Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Fri, 14 Sep 2012 05:08:40 +0200 Subject: [PATCH 284/357] Rename 'notes/form' partial to 'notes/common_form' --- app/views/notes/{_form.html.haml => _common_form.html.haml} | 0 app/views/notes/_notes_with_form.html.haml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename app/views/notes/{_form.html.haml => _common_form.html.haml} (100%) diff --git a/app/views/notes/_form.html.haml b/app/views/notes/_common_form.html.haml similarity index 100% rename from app/views/notes/_form.html.haml rename to app/views/notes/_common_form.html.haml diff --git a/app/views/notes/_notes_with_form.html.haml b/app/views/notes/_notes_with_form.html.haml index 14e1e84b..53716c1d 100644 --- a/app/views/notes/_notes_with_form.html.haml +++ b/app/views/notes/_notes_with_form.html.haml @@ -3,7 +3,7 @@ .notes-status - if can? current_user, :write_note, @project - = render "notes/form" + = render "notes/common_form" :javascript $(function(){ From 29c71f2fb95ba98513ff96939fd4a602b4a3bd6f Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Fri, 14 Sep 2012 05:10:06 +0200 Subject: [PATCH 285/357] Rename 'notes/reply_button' partial to 'notes/per_line_reply_button' --- app/views/commits/_text_file.html.haml | 2 +- app/views/notes/_create_per_line_note.js.haml | 2 +- ..._reply_button.html.haml => _per_line_reply_button.html.haml} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename app/views/notes/{_reply_button.html.haml => _per_line_reply_button.html.haml} (100%) diff --git a/app/views/commits/_text_file.html.haml b/app/views/commits/_text_file.html.haml index 7a00eb45..f7dae301 100644 --- a/app/views/commits/_text_file.html.haml +++ b/app/views/commits/_text_file.html.haml @@ -23,4 +23,4 @@ - comments.each_with_index do |note, i| = render "notes/per_line_show", note: note - @line_notes.reject!{ |n| n == note } - = render "notes/reply_button", line_code: line_code + = render "notes/per_line_reply_button", line_code: line_code diff --git a/app/views/notes/_create_per_line_note.js.haml b/app/views/notes/_create_per_line_note.js.haml index ab862b2f..d7f0a0dc 100644 --- a/app/views/notes/_create_per_line_note.js.haml +++ b/app/views/notes/_create_per_line_note.js.haml @@ -11,7 +11,7 @@ // find the commented line ... var trEl = $(".#{note.line_code}").parent(); // ... and insert the note and the reply button after it - trEl.after("#{escape_javascript(render "notes/reply_button", line_code: note.line_code)}"); + trEl.after("#{escape_javascript(render "notes/per_line_reply_button", line_code: note.line_code)}"); trEl.after("#{escape_javascript(render "notes/per_line_show", note: note)}"); } else { // instert new note before reply button diff --git a/app/views/notes/_reply_button.html.haml b/app/views/notes/_per_line_reply_button.html.haml similarity index 100% rename from app/views/notes/_reply_button.html.haml rename to app/views/notes/_per_line_reply_button.html.haml From 4fc66ead4f50f76efb80e119bbedc7514602f57f Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Fri, 14 Sep 2012 05:13:26 +0200 Subject: [PATCH 286/357] Rename 'notes/show' partial to 'notes/note' --- app/views/notes/_create_common_note.js.haml | 2 +- app/views/notes/{_show.html.haml => _note.html.haml} | 0 app/views/notes/_notes_list.html.haml | 2 +- app/views/notes/_per_line_show.html.haml | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) rename app/views/notes/{_show.html.haml => _note.html.haml} (100%) diff --git a/app/views/notes/_create_common_note.js.haml b/app/views/notes/_create_common_note.js.haml index 0a00bd40..bbebc247 100644 --- a/app/views/notes/_create_common_note.js.haml +++ b/app/views/notes/_create_common_note.js.haml @@ -5,7 +5,7 @@ $('.note-form-holder #preview-link').text('Preview'); $('.note-form-holder #preview-note').hide(); $('.note-form-holder').show(); - NoteList.appendNewNote(#{note.id}, "#{escape_javascript(render "notes/show", note: note)}"); + NoteList.appendNewNote(#{note.id}, "#{escape_javascript(render "notes/note", note: note)}"); - else :plain diff --git a/app/views/notes/_show.html.haml b/app/views/notes/_note.html.haml similarity index 100% rename from app/views/notes/_show.html.haml rename to app/views/notes/_note.html.haml diff --git a/app/views/notes/_notes_list.html.haml b/app/views/notes/_notes_list.html.haml index 5673988d..e2c4bedc 100644 --- a/app/views/notes/_notes_list.html.haml +++ b/app/views/notes/_notes_list.html.haml @@ -1,4 +1,4 @@ - @notes.each do |note| - next unless note.author - = render partial: "notes/show", locals: {note: note} + = render "notes/note", note: note diff --git a/app/views/notes/_per_line_show.html.haml b/app/views/notes/_per_line_show.html.haml index 9d5a31a7..28bcd6e0 100644 --- a/app/views/notes/_per_line_show.html.haml +++ b/app/views/notes/_per_line_show.html.haml @@ -1,5 +1,5 @@ %tr.line_notes_row %td{colspan: 3} %ul - = render "notes/show", note: note + = render "notes/note", note: note From dd1b3177c999560818e8bbfb549630234f6ec9f0 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Fri, 14 Sep 2012 05:19:38 +0200 Subject: [PATCH 287/357] Renamed 'notes/notes_list' partial to 'notes/notes' --- app/views/notes/{_notes_list.html.haml => _notes.html.haml} | 2 +- app/views/notes/index.js.haml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) rename app/views/notes/{_notes_list.html.haml => _notes.html.haml} (59%) diff --git a/app/views/notes/_notes_list.html.haml b/app/views/notes/_notes.html.haml similarity index 59% rename from app/views/notes/_notes_list.html.haml rename to app/views/notes/_notes.html.haml index e2c4bedc..adb5dfcb 100644 --- a/app/views/notes/_notes_list.html.haml +++ b/app/views/notes/_notes.html.haml @@ -1,4 +1,4 @@ - @notes.each do |note| - next unless note.author - = render "notes/note", note: note + = render "note", note: note diff --git a/app/views/notes/index.js.haml b/app/views/notes/index.js.haml index 8c735476..3d6859eb 100644 --- a/app/views/notes/index.js.haml +++ b/app/views/notes/index.js.haml @@ -1,15 +1,15 @@ - unless @notes.blank? - if loading_more_notes? :plain - NoteList.appendMoreNotes(#{@notes.last.id}, "#{escape_javascript(render 'notes/notes_list')}"); + NoteList.appendMoreNotes(#{@notes.last.id}, "#{escape_javascript(render 'notes/notes')}"); - elsif loading_new_notes? :plain - NoteList.replaceNewNotes("#{escape_javascript(render 'notes/notes_list')}"); + NoteList.replaceNewNotes("#{escape_javascript(render 'notes/notes')}"); - else :plain - NoteList.setContent(#{@notes.last.id}, "#{escape_javascript(render 'notes/notes_list')}"); + NoteList.setContent(#{@notes.last.id}, "#{escape_javascript(render 'notes/notes')}"); - else - if loading_more_notes? From c6d71b7b8e5e8dc22da9b8aab392196d1987fd68 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Fri, 14 Sep 2012 05:21:58 +0200 Subject: [PATCH 288/357] Rename 'notes/per_line_show' partial to 'notes/per_line_note' --- app/views/commits/_text_file.html.haml | 2 +- app/views/notes/_create_per_line_note.js.haml | 4 ++-- .../{_per_line_show.html.haml => _per_line_note.html.haml} | 0 3 files changed, 3 insertions(+), 3 deletions(-) rename app/views/notes/{_per_line_show.html.haml => _per_line_note.html.haml} (100%) diff --git a/app/views/commits/_text_file.html.haml b/app/views/commits/_text_file.html.haml index f7dae301..7626a015 100644 --- a/app/views/commits/_text_file.html.haml +++ b/app/views/commits/_text_file.html.haml @@ -21,6 +21,6 @@ - comments = @line_notes.select { |n| n.line_code == line_code }.sort_by(&:created_at) - unless comments.empty? - comments.each_with_index do |note, i| - = render "notes/per_line_show", note: note + = render "notes/per_line_note", note: note - @line_notes.reject!{ |n| n == note } = render "notes/per_line_reply_button", line_code: line_code diff --git a/app/views/notes/_create_per_line_note.js.haml b/app/views/notes/_create_per_line_note.js.haml index d7f0a0dc..180960e3 100644 --- a/app/views/notes/_create_per_line_note.js.haml +++ b/app/views/notes/_create_per_line_note.js.haml @@ -12,8 +12,8 @@ var trEl = $(".#{note.line_code}").parent(); // ... and insert the note and the reply button after it trEl.after("#{escape_javascript(render "notes/per_line_reply_button", line_code: note.line_code)}"); - trEl.after("#{escape_javascript(render "notes/per_line_show", note: note)}"); + trEl.after("#{escape_javascript(render "notes/per_line_note", note: note)}"); } else { // instert new note before reply button - trRpl.before("#{escape_javascript(render "notes/per_line_show", note: note)}"); + trRpl.before("#{escape_javascript(render "notes/per_line_note", note: note)}"); } diff --git a/app/views/notes/_per_line_show.html.haml b/app/views/notes/_per_line_note.html.haml similarity index 100% rename from app/views/notes/_per_line_show.html.haml rename to app/views/notes/_per_line_note.html.haml From a3dbd990682f5f39d9c3e58858faf85b9b0a6179 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Fri, 14 Sep 2012 17:02:09 +0200 Subject: [PATCH 289/357] Extract 'notes/per_line_note_link' partial --- app/views/commits/_text_file.html.haml | 2 +- app/views/notes/_per_line_note_link.html.haml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 app/views/notes/_per_line_note_link.html.haml diff --git a/app/views/commits/_text_file.html.haml b/app/views/commits/_text_file.html.haml index 7626a015..22d2b9ed 100644 --- a/app/views/commits/_text_file.html.haml +++ b/app/views/commits/_text_file.html.haml @@ -13,7 +13,7 @@ %td.old_line = link_to raw(type == "new" ? " " : line_old), "##{line_code}", id: line_code - if @comments_allowed - = link_to "", "#", class: "line_note_link", data: { line_code: line_code }, title: "Add note for this line" + = render "notes/per_line_note_link", line_code: line_code %td.new_line= link_to raw(type == "old" ? " " : line_new) , "##{line_code}", id: line_code %td.line_content{class: "noteable_line #{type} #{line_code}", "line_code" => line_code}= raw "#{line}  " diff --git a/app/views/notes/_per_line_note_link.html.haml b/app/views/notes/_per_line_note_link.html.haml new file mode 100644 index 00000000..72b59a59 --- /dev/null +++ b/app/views/notes/_per_line_note_link.html.haml @@ -0,0 +1 @@ += link_to "", "#", class: "line_note_link", data: { line_code: line_code }, title: "Add note for this line" From e1ca155c95a41a9adfe984a3e3ba5c777c61acd8 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Fri, 14 Sep 2012 16:57:08 +0200 Subject: [PATCH 290/357] Extract 'notes/per_line_notes_with_reply' partial --- app/views/commits/_text_file.html.haml | 5 +---- app/views/notes/_per_line_notes_with_reply.html.haml | 3 +++ 2 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 app/views/notes/_per_line_notes_with_reply.html.haml diff --git a/app/views/commits/_text_file.html.haml b/app/views/commits/_text_file.html.haml index 22d2b9ed..9f5b5345 100644 --- a/app/views/commits/_text_file.html.haml +++ b/app/views/commits/_text_file.html.haml @@ -20,7 +20,4 @@ - if @comments_allowed - comments = @line_notes.select { |n| n.line_code == line_code }.sort_by(&:created_at) - unless comments.empty? - - comments.each_with_index do |note, i| - = render "notes/per_line_note", note: note - - @line_notes.reject!{ |n| n == note } - = render "notes/per_line_reply_button", line_code: line_code + = render "notes/per_line_notes_with_reply", notes: comments diff --git a/app/views/notes/_per_line_notes_with_reply.html.haml b/app/views/notes/_per_line_notes_with_reply.html.haml new file mode 100644 index 00000000..1bcfc41f --- /dev/null +++ b/app/views/notes/_per_line_notes_with_reply.html.haml @@ -0,0 +1,3 @@ +- notes.each do |note| + = render "notes/per_line_note", note: note += render "notes/per_line_reply_button", line_code: notes.first.line_code From e63d7b6029142d100adca03e11ba0e33d9c2981c Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Fri, 14 Sep 2012 05:56:12 +0200 Subject: [PATCH 291/357] Rename note.js to notes.js --- app/assets/javascripts/{note.js => notes.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename app/assets/javascripts/{note.js => notes.js} (100%) diff --git a/app/assets/javascripts/note.js b/app/assets/javascripts/notes.js similarity index 100% rename from app/assets/javascripts/note.js rename to app/assets/javascripts/notes.js From 7563abbe49fc16280877be89342d552e0609d57c Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Fri, 14 Sep 2012 17:00:48 +0200 Subject: [PATCH 292/357] Add 'notes/reversed_notes_with_form' partial --- app/assets/stylesheets/sections/notes.scss | 14 ++++++++++++-- .../notes/_reversed_notes_with_form.html.haml | 11 +++++++++++ app/views/projects/wall.html.haml | 2 +- 3 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 app/views/notes/_reversed_notes_with_form.html.haml diff --git a/app/assets/stylesheets/sections/notes.scss b/app/assets/stylesheets/sections/notes.scss index 8db88930..2db20f16 100644 --- a/app/assets/stylesheets/sections/notes.scss +++ b/app/assets/stylesheets/sections/notes.scss @@ -10,7 +10,10 @@ padding:0px; } -#notes-list li:last-child { +#new-notes-list:not(.reversed) { + border-top:1px solid #aaa; +} +#new-notes-list.reversed { border-bottom:1px solid #aaa; } @@ -48,7 +51,6 @@ .note { padding: 8px 0; - border-bottom: 1px solid #eee; overflow: hidden; display: block; img {float: left; margin-right: 10px;} @@ -70,6 +72,14 @@ .delete-note { display:block; } } } +#notes-list:not(.reversed) .note, +#new-notes-list:not(.reversed) .note { + border-bottom: 1px solid #eee; +} +#notes-list.reversed .note, +#new-notes-list.reversed .note { + border-top: 1px solid #eee; +} .notes-status { margin: 18px; diff --git a/app/views/notes/_reversed_notes_with_form.html.haml b/app/views/notes/_reversed_notes_with_form.html.haml new file mode 100644 index 00000000..05f01847 --- /dev/null +++ b/app/views/notes/_reversed_notes_with_form.html.haml @@ -0,0 +1,11 @@ +- if can? current_user, :write_note, @project + = render "notes/common_form" + +%ul.reversed#new-notes-list +%ul.reversed#notes-list +.notes-status + +:javascript + $(function(){ + NoteList.init("#{tid}", "#{tt}", "#{project_notes_path(@project)}"); + }); \ No newline at end of file diff --git a/app/views/projects/wall.html.haml b/app/views/projects/wall.html.haml index 1a07bc3d..591a8cd0 100644 --- a/app/views/projects/wall.html.haml +++ b/app/views/projects/wall.html.haml @@ -1,2 +1,2 @@ %div.wall_page - = render "notes/notes_with_form", tid: nil, tt: "wall" + = render "notes/reversed_notes_with_form", tid: nil, tt: "wall" From 07eec9c66a910b5a808852f498e1dc9c88b701d2 Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Fri, 14 Sep 2012 17:01:34 +0200 Subject: [PATCH 293/357] Update Notes JS for reversed notes --- app/assets/javascripts/notes.js | 27 ++++++++++++++++++++------- app/contexts/notes/load_context.rb | 7 +++++-- app/models/note.rb | 2 +- app/views/notes/index.js.haml | 2 +- 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/app/assets/javascripts/notes.js b/app/assets/javascripts/notes.js index 7cbf44b9..81bb1d6d 100644 --- a/app/assets/javascripts/notes.js +++ b/app/assets/javascripts/notes.js @@ -4,14 +4,17 @@ var NoteList = { target_params: null, target_id: 0, target_type: null, + top_id: 0, bottom_id: 0, loading_more_disabled: false, + reversed: false, init: function(tid, tt, path) { this.notes_path = path + ".js"; this.target_id = tid; this.target_type = tt; + this.reversed = $("#notes-list").hasClass("reversed"); this.target_params = "&target_type=" + this.target_type + "&target_id=" + this.target_id; // get initial set of notes @@ -69,12 +72,18 @@ var NoteList = { * Replaces the content of #notes-list with the given html. */ setContent: - function(last_id, html) { + function(first_id, last_id, html) { + this.top_id = first_id; this.bottom_id = last_id; $("#notes-list").html(html); - // Init infinite scrolling + // init infinite scrolling this.initLoadMore(); + + // init getting new notes + if (this.reversed) { + this.initRefreshNew(); + } }, @@ -114,7 +123,7 @@ var NoteList = { $.ajax({ type: "GET", url: this.notes_path, - data: "loading_more=1&after_id=" + this.bottom_id + this.target_params, + data: "loading_more=1&" + (this.reversed ? "before_id" : "after_id") + "=" + this.bottom_id + this.target_params, complete: function(){ $('.notes-status').removeClass("loading")}, beforeSend: function() { $('.notes-status').addClass("loading") }, dataType: "script"}); @@ -142,7 +151,9 @@ var NoteList = { this.loading_more_disabled = true; // from now on only get new notes - this.initRefreshNew(); + if (!this.reversed) { + this.initRefreshNew(); + } }, @@ -164,14 +175,14 @@ var NoteList = { }, /** - * Gets the new set of notes (i.e. all notes after ). + * Gets the new set of notes. */ getNew: function() { $.ajax({ type: "GET", url: this.notes_path, - data: "loading_new=1&after_id=" + this.bottom_id + this.target_params, + data: "loading_new=1&after_id=" + (this.reversed ? this.top_id : this.bottom_id) + this.target_params, dataType: "script"}); }, @@ -189,7 +200,9 @@ var NoteList = { */ appendNewNote: function(id, html) { - if(id != this.bottom_id) { + if (this.reversed) { + $("#new-notes-list").prepend(html); + } else { $("#new-notes-list").append(html); } } diff --git a/app/contexts/notes/load_context.rb b/app/contexts/notes/load_context.rb index c2d7644b..6d26e16a 100644 --- a/app/contexts/notes/load_context.rb +++ b/app/contexts/notes/load_context.rb @@ -4,6 +4,7 @@ module Notes target_type = params[:target_type] target_id = params[:target_id] after_id = params[:after_id] + before_id = params[:before_id] @notes = case target_type @@ -17,14 +18,16 @@ module Notes project.snippets.find(target_id).notes.fresh when "wall" # this is the only case, where the order is DESC - project.common_notes.order("created_at DESC").limit(50) + project.common_notes.order("created_at DESC, id DESC").limit(50) when "wiki" project.wikis.reverse.map {|w| w.notes.fresh }.flatten[0..20] end @notes = if after_id @notes.where("id > ?", after_id) - else + elsif before_id + @notes.where("id < ?", before_id) + else @notes end end diff --git a/app/models/note.rb b/app/models/note.rb index 9aad8949..34edb94e 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -36,7 +36,7 @@ class Note < ActiveRecord::Base scope :today, where("created_at >= :date", date: Date.today) scope :last_week, where("created_at >= :date", date: (Date.today - 7.days)) scope :since, lambda { |day| where("created_at >= :date", date: (day)) } - scope :fresh, order("created_at ASC") + scope :fresh, order("created_at ASC, id ASC") scope :inc_author_project, includes(:project, :author) scope :inc_author, includes(:author) diff --git a/app/views/notes/index.js.haml b/app/views/notes/index.js.haml index 3d6859eb..3814dbd4 100644 --- a/app/views/notes/index.js.haml +++ b/app/views/notes/index.js.haml @@ -9,7 +9,7 @@ - else :plain - NoteList.setContent(#{@notes.last.id}, "#{escape_javascript(render 'notes/notes')}"); + NoteList.setContent(#{@notes.first.id}, #{@notes.last.id}, "#{escape_javascript(render 'notes/notes')}"); - else - if loading_more_notes? From a82977c64843aa177498f1a715121ae6e38bc323 Mon Sep 17 00:00:00 2001 From: randx Date: Sat, 15 Sep 2012 01:00:59 +0300 Subject: [PATCH 294/357] A bit of test refactoring --- Guardfile | 2 +- app/observers/users_project_observer.rb | 5 +-- spec/models/event_spec.rb | 41 +++++++++---------- spec/observers/users_project_observer_spec.rb | 41 ++++++++++--------- .../requests/gitlab_flavored_markdown_spec.rb | 1 + spec/support/gitolite_stub.rb | 34 ++------------- 6 files changed, 49 insertions(+), 75 deletions(-) diff --git a/Guardfile b/Guardfile index 0eea2ad9..50a10af9 100644 --- a/Guardfile +++ b/Guardfile @@ -1,7 +1,7 @@ # A sample Guardfile # More info at https://github.com/guard/guard#readme -guard 'rspec', :version => 2, :all_on_start => false do +guard 'rspec', :version => 2, :all_on_start => false, :all_after_pass => false do watch(%r{^spec/.+_spec\.rb$}) watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" } watch('spec/spec_helper.rb') { "spec" } diff --git a/app/observers/users_project_observer.rb b/app/observers/users_project_observer.rb index b2cea9f2..0512e606 100644 --- a/app/observers/users_project_observer.rb +++ b/app/observers/users_project_observer.rb @@ -15,10 +15,9 @@ class UsersProjectObserver < ActiveRecord::Observer def after_destroy(users_project) Event.create( - project_id: users_project.project.id, - action: Event::Left, + project_id: users_project.project.id, + action: Event::Left, author_id: users_project.user.id ) end - end diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb index ee022e95..5cb68761 100644 --- a/spec/models/event_spec.rb +++ b/spec/models/event_spec.rb @@ -14,12 +14,12 @@ describe Event do it { should respond_to(:commits) } end - describe "Push event" do - before do + describe "Push event" do + before do project = Factory :project @user = project.owner - data = { + data = { before: "0000000000000000000000000000000000000000", after: "0220c11b9a3e6c69dc8fd35321254ca9a7b98f7e", ref: "refs/heads/master", @@ -50,25 +50,24 @@ describe Event do it { @event.author.should == @user } end - describe "Joined project team" do - let(:project) {Factory.create :project} - let(:new_user) {Factory.create :user} - it "should create event" do - UsersProject.observers.enable :users_project_observer - expect{ - UsersProject.bulk_import(project, [new_user.id], UsersProject::DEVELOPER) - }.to change{Event.count}.by(1) + describe 'Team events' do + let(:user_project) { stub.as_null_object } + let(:observer) { UsersProjectObserver.instance } + + before { + Event.should_receive :create + } + + describe "Joined project team" do + it "should create event" do + observer.after_create user_project + end end - end - describe "Left project team" do - let(:project) {Factory.create :project} - let(:new_user) {Factory.create :user} - it "should create event" do - UsersProject.bulk_import(project, [new_user.id], UsersProject::DEVELOPER) - UsersProject.observers.enable :users_project_observer - expect{ - UsersProject.bulk_delete(project, [new_user.id]) - }.to change{Event.count}.by(1) + + describe "Left project team" do + it "should create event" do + observer.after_destroy user_project + end end end end diff --git a/spec/observers/users_project_observer_spec.rb b/spec/observers/users_project_observer_spec.rb index f38d9862..07d71da8 100644 --- a/spec/observers/users_project_observer_spec.rb +++ b/spec/observers/users_project_observer_spec.rb @@ -1,34 +1,32 @@ require 'spec_helper' describe UsersProjectObserver do - let(:user) { Factory.create :user } - let(:project) { Factory.create(:project, - code: "Fuu", - path: "Fuu" ) } - let(:users_project) { Factory.create(:users_project, - project: project, - user: user )} + let(:users_project) { stub.as_null_object } subject { UsersProjectObserver.instance } describe "#after_create" do it "should called when UsersProject created" do subject.should_receive(:after_create) + UsersProject.observers.enable :users_project_observer do - Factory.create(:users_project, - project: project, - user: user) + create(:users_project) end end + it "should send email to user" do - Notify.should_receive(:project_access_granted_email).with(users_project.id).and_return(double(deliver: true)) + Event.stub(:create => true) + Notify.should_receive(:project_access_granted_email).and_return(stub(deliver: true)) + subject.after_create(users_project) end + it "should create new event" do Event.should_receive(:create).with( - project_id: users_project.project.id, - action: Event::Joined, + project_id: users_project.project.id, + action: Event::Joined, author_id: users_project.user.id ) + subject.after_create(users_project) end end @@ -36,29 +34,32 @@ describe UsersProjectObserver do describe "#after_update" do it "should called when UsersProject updated" do subject.should_receive(:after_update) + UsersProject.observers.enable :users_project_observer do - users_project.update_attribute(:project_access, 40) + create(:users_project).update_attribute(:project_access, 40) end end + it "should send email to user" do Notify.should_receive(:project_access_granted_email).with(users_project.id).and_return(double(deliver: true)) + subject.after_update(users_project) end end + describe "#after_destroy" do it "should called when UsersProject destroyed" do subject.should_receive(:after_destroy) + UsersProject.observers.enable :users_project_observer do - UsersProject.bulk_delete( - users_project.project, - [users_project.user.id] - ) + create(:users_project).destroy end end + it "should create new event" do Event.should_receive(:create).with( - project_id: users_project.project.id, - action: Event::Left, + project_id: users_project.project.id, + action: Event::Left, author_id: users_project.user.id ) subject.after_destroy(users_project) diff --git a/spec/requests/gitlab_flavored_markdown_spec.rb b/spec/requests/gitlab_flavored_markdown_spec.rb index 1076e90c..68d354b7 100644 --- a/spec/requests/gitlab_flavored_markdown_spec.rb +++ b/spec/requests/gitlab_flavored_markdown_spec.rb @@ -25,6 +25,7 @@ describe "Gitlab Flavored Markdown" do @tag_name = "gfm-test-tag" r.git.native(:tag, {}, @tag_name, commit.id) end + after do # delete test branch and tag project.repo.git.native(:branch, {D: true}, @branch_name) diff --git a/spec/support/gitolite_stub.rb b/spec/support/gitolite_stub.rb index 037b09cd..574bb5a1 100644 --- a/spec/support/gitolite_stub.rb +++ b/spec/support/gitolite_stub.rb @@ -5,42 +5,16 @@ module GitoliteStub end def stub_gitolite_admin - gitolite_repo = mock( - clean_permissions: true, - add_permission: true - ) - - gitolite_config = mock( - add_repo: true, - get_repo: gitolite_repo, - has_repo?: true - ) - - gitolite_admin = double( - 'Gitolite::GitoliteAdmin', - config: gitolite_config, - save: true, - ) + gitolite_admin = double('Gitolite::GitoliteAdmin') + gitolite_admin.as_null_object Gitolite::GitoliteAdmin.stub(new: gitolite_admin) - end def stub_gitlab_gitolite gitolite_config = double('Gitlab::GitoliteConfig') - gitolite_config.stub( - apply: ->() { yield(self) }, - write_key: true, - rm_key: true, - update_projects: true, - update_project: true, - update_project!: true, - destroy_project: true, - destroy_project!: true, - admin_all_repo: true, - admin_all_repo!: true, - - ) + gitolite_config.stub(apply: ->() { yield(self) }) + gitolite_config.as_null_object Gitlab::GitoliteConfig.stub(new: gitolite_config) end From 9159be3a50e3bc94f30f85d9640eeac212bf0948 Mon Sep 17 00:00:00 2001 From: randx Date: Sat, 15 Sep 2012 09:49:21 +0300 Subject: [PATCH 295/357] Fix MR diff comments. Fix wiki comments loading error --- app/assets/stylesheets/sections/notes.scss | 4 ++-- app/contexts/notes/load_context.rb | 2 +- app/models/project.rb | 4 ++++ app/models/wiki.rb | 1 - app/views/merge_requests/diffs.html.haml | 4 ++++ 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/assets/stylesheets/sections/notes.scss b/app/assets/stylesheets/sections/notes.scss index 2db20f16..148807d6 100644 --- a/app/assets/stylesheets/sections/notes.scss +++ b/app/assets/stylesheets/sections/notes.scss @@ -14,7 +14,7 @@ border-top:1px solid #aaa; } #new-notes-list.reversed { - border-bottom:1px solid #aaa; + border-bottom:1px solid #ccc; } .issue_notes, @@ -227,7 +227,7 @@ td .line_note_link { } } -.note-text { +.note-text { border: 1px solid #aaa; box-shadow:none; } diff --git a/app/contexts/notes/load_context.rb b/app/contexts/notes/load_context.rb index 6d26e16a..f92a7801 100644 --- a/app/contexts/notes/load_context.rb +++ b/app/contexts/notes/load_context.rb @@ -20,7 +20,7 @@ module Notes # this is the only case, where the order is DESC project.common_notes.order("created_at DESC, id DESC").limit(50) when "wiki" - project.wikis.reverse.map {|w| w.notes.fresh }.flatten[0..20] + project.wiki_notes.limit(20) end @notes = if after_id diff --git a/app/models/project.rb b/app/models/project.rb index 4de836c7..56d5d791 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -171,6 +171,10 @@ class Project < ActiveRecord::Base end end + def wiki_notes + Note.where(noteable_id: wikis.map(&:id), noteable_type: 'Wiki', project_id: self.id) + end + def project_id self.id end diff --git a/app/models/wiki.rb b/app/models/wiki.rb index 3c4952cd..ebb1ff49 100644 --- a/app/models/wiki.rb +++ b/app/models/wiki.rb @@ -28,7 +28,6 @@ class Wiki < ActiveRecord::Base end new_wiki end - end end # == Schema Information diff --git a/app/views/merge_requests/diffs.html.haml b/app/views/merge_requests/diffs.html.haml index 176b19bc..a755491c 100644 --- a/app/views/merge_requests/diffs.html.haml +++ b/app/views/merge_requests/diffs.html.haml @@ -1,2 +1,6 @@ = render "show" +:javascript + $(function(){ + PerLineNotes.init(); + }); From 348def03449f8f92fc1b568df7ad2fef40343587 Mon Sep 17 00:00:00 2001 From: randx Date: Sat, 15 Sep 2012 09:58:16 +0300 Subject: [PATCH 296/357] Init mr comments when naviagate via ajax to diff --- app/views/merge_requests/diffs.js.haml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/views/merge_requests/diffs.js.haml b/app/views/merge_requests/diffs.js.haml index b147e5be..98539985 100644 --- a/app/views/merge_requests/diffs.js.haml +++ b/app/views/merge_requests/diffs.js.haml @@ -1,4 +1,7 @@ :plain $(".merge-request-diffs").html("#{escape_javascript(render(partial: "merge_requests/show/diffs"))}"); + $(function(){ + PerLineNotes.init(); + }); From b8113334a86639b87d5f89cc78e2279a8ae4e38a Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Sat, 15 Sep 2012 11:54:46 +0200 Subject: [PATCH 297/357] Highlight voting notes for issues and merge requests --- app/assets/stylesheets/sections/notes.scss | 13 +++++++++++++ app/helpers/notes_helper.rb | 8 ++++++++ app/views/issues/show.html.haml | 2 +- app/views/merge_requests/_show.html.haml | 2 +- app/views/notes/_note.html.haml | 2 +- 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/app/assets/stylesheets/sections/notes.scss b/app/assets/stylesheets/sections/notes.scss index 148807d6..06b929c6 100644 --- a/app/assets/stylesheets/sections/notes.scss +++ b/app/assets/stylesheets/sections/notes.scss @@ -81,6 +81,19 @@ border-top: 1px solid #eee; } +/* mark vote notes */ +.voting_notes .note { + padding: 8px 0 8px 12px; + &.upvote { + padding-left: 8px; + border-left: 4px solid #468847; + } + &.downvote { + padding-left: 8px; + border-left: 4px solid #B94A48; + } +} + .notes-status { margin: 18px; } diff --git a/app/helpers/notes_helper.rb b/app/helpers/notes_helper.rb index 28701661..65389e38 100644 --- a/app/helpers/notes_helper.rb +++ b/app/helpers/notes_helper.rb @@ -6,4 +6,12 @@ module NotesHelper def loading_new_notes? params[:loading_new].present? end + + def note_vote_class(note) + if note.upvote? + "vote upvote" + elsif note.downvote? + "vote downvote" + end + end end diff --git a/app/views/issues/show.html.haml b/app/views/issues/show.html.haml index 0b72a820..e7365e10 100644 --- a/app/views/issues/show.html.haml +++ b/app/views/issues/show.html.haml @@ -61,4 +61,4 @@ = markdown @issue.description -.issue_notes#notes= render "notes/notes_with_form", tid: @issue.id, tt: "issue" +.issue_notes.voting_notes#notes= render "notes/notes_with_form", tid: @issue.id, tt: "issue" diff --git a/app/views/merge_requests/_show.html.haml b/app/views/merge_requests/_show.html.haml index 40b72190..f1d0c8aa 100644 --- a/app/views/merge_requests/_show.html.haml +++ b/app/views/merge_requests/_show.html.haml @@ -15,7 +15,7 @@ %i.icon-list-alt Diff -.merge_request_notes#notes{ class: (controller.action_name == 'show') ? "" : "hide" } +.merge_request_notes.voting_notes#notes{ class: (controller.action_name == 'show') ? "" : "hide" } = render("notes/notes_with_form", tid: @merge_request.id, tt: "merge_request") .merge-request-diffs = render "merge_requests/show/diffs" if @diffs diff --git a/app/views/notes/_note.html.haml b/app/views/notes/_note.html.haml index 3412e4eb..23145f12 100644 --- a/app/views/notes/_note.html.haml +++ b/app/views/notes/_note.html.haml @@ -1,4 +1,4 @@ -%li{id: dom_id(note), class: "note"} +%li{id: dom_id(note), class: "note #{note_vote_class(note)}"} = image_tag gravatar_icon(note.author.email), class: "avatar s32" %div.note-author %strong= note.author_name From 6aebb76b5d05bf7668a8f389a00648fdb405af7d Mon Sep 17 00:00:00 2001 From: Riyad Preukschas Date: Sat, 15 Sep 2012 11:55:17 +0200 Subject: [PATCH 298/357] Update votes when creating or refreshing notes --- app/assets/javascripts/notes.js | 43 ++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/notes.js b/app/assets/javascripts/notes.js index 81bb1d6d..7b59cc77 100644 --- a/app/assets/javascripts/notes.js +++ b/app/assets/javascripts/notes.js @@ -21,15 +21,18 @@ var NoteList = { this.getContent(); $("#notes-list, #new-notes-list").on("ajax:success", ".delete-note", function() { - $(this).closest('li').fadeOut(); + $(this).closest('li').fadeOut(function() { + $(this).remove(); + NoteList.updateVotes(); + }); }); $(".note-form-holder").on("ajax:before", function(){ - $(".submit_note").disable() + $(".submit_note").disable(); }) $(".note-form-holder").on("ajax:complete", function(){ - $(".submit_note").enable() + $(".submit_note").enable(); }) disableButtonIfEmptyField(".note-text", ".submit_note"); @@ -154,6 +157,8 @@ var NoteList = { if (!this.reversed) { this.initRefreshNew(); } + // make sure we are up to date + this.updateVotes(); }, @@ -193,6 +198,7 @@ var NoteList = { replaceNewNotes: function(html) { $("#new-notes-list").html(html); + this.updateVotes(); }, /** @@ -205,6 +211,37 @@ var NoteList = { } else { $("#new-notes-list").append(html); } + this.updateVotes(); + }, + + /** + * Recalculates the votes and updates them (if they are displayed at all). + * + * Assumes all relevant notes are displayed (i.e. there are no more notes to + * load via getMore()). + * Might produce inaccurate results when not all notes have been loaded and a + * recalculation is triggered (e.g. when deleting a note). + */ + updateVotes: + function() { + var votes = $("#votes .votes"); + var notes = $("#notes-list, #new-notes-list").find(".note.vote"); + + // only update if there is a vote display + if (votes.size()) { + var upvotes = notes.filter(".upvote").size(); + var downvotes = notes.filter(".downvote").size(); + var votesCount = upvotes + downvotes; + var upvotesPercent = votesCount ? (100.0 / votesCount * upvotes) : 0; + var downvotesPercent = votesCount ? (100.0 - upvotesPercent) : 0; + + // change vote bar lengths + votes.find(".bar-success").css("width", upvotesPercent+"%"); + votes.find(".bar-danger").css("width", downvotesPercent+"%"); + // replace vote numbers + votes.find(".upvotes").text(votes.find(".upvotes").text().replace(/\d+/, upvotes)); + votes.find(".downvotes").text(votes.find(".downvotes").text().replace(/\d+/, downvotes)); + } } }; From 74cfab692fd9808c1ea6a6cc6f45c348deb4fd72 Mon Sep 17 00:00:00 2001 From: Tobias Pfeiffer Date: Sat, 15 Sep 2012 20:26:08 +0200 Subject: [PATCH 299/357] Renamed unicorn.rb.orig to unicorn.rb.example since this seems to be more in line with the common used naming in the config directory. Plus seeing *.orig files I think of the leftovers of git merges, which left me puzzled for quite some time. --- config/{unicorn.rb.orig => unicorn.rb.example} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename config/{unicorn.rb.orig => unicorn.rb.example} (100%) diff --git a/config/unicorn.rb.orig b/config/unicorn.rb.example similarity index 100% rename from config/unicorn.rb.orig rename to config/unicorn.rb.example From fa529c789c6d5e6c7c52de73166007e4650a46fa Mon Sep 17 00:00:00 2001 From: Tobias Pfeiffer Date: Sat, 15 Sep 2012 21:23:41 +0200 Subject: [PATCH 300/357] added the name change to the installation.md - thanks and nice catch to @NARKOZ --- doc/installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/installation.md b/doc/installation.md index af169d81..d5d1ccdd 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -252,7 +252,7 @@ You can login via web using admin generated with setup: ## 1. Unicorn cd /home/gitlab/gitlab - sudo -u gitlab cp config/unicorn.rb.orig config/unicorn.rb + sudo -u gitlab cp config/unicorn.rb.example config/unicorn.rb sudo -u gitlab bundle exec unicorn_rails -c config/unicorn.rb -E production -D ## 2. Nginx From 296e322bfc896f99b15d0639b25745a22a73e9ce Mon Sep 17 00:00:00 2001 From: Tobias Pfeiffer Date: Sat, 15 Sep 2012 21:52:01 +0200 Subject: [PATCH 301/357] the rake was missing in fron of the gitlab:test task --- doc/development.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/development.md b/doc/development.md index 55be2bc3..741f5a9f 100644 --- a/doc/development.md +++ b/doc/development.md @@ -36,7 +36,7 @@ ### 3. Run Tests # All in one - bundle exec gitlab:test + bundle exec rake gitlab:test # Rspec bundle exec rake spec From 9c117f263646635f03b50cac38db4fb830500642 Mon Sep 17 00:00:00 2001 From: Tobias Pfeiffer Date: Sat, 15 Sep 2012 21:53:45 +0200 Subject: [PATCH 302/357] The project doesn't use cucumber(anymore?), it uses spinach --- doc/development.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/development.md b/doc/development.md index 741f5a9f..67bcb8e1 100644 --- a/doc/development.md +++ b/doc/development.md @@ -41,5 +41,5 @@ # Rspec bundle exec rake spec - # Cucumber - bundle exec rake cucumber + # Spinach + bundle exec rake spinach From caef9ed1121a16ca0cc78715695daaa974271bfd Mon Sep 17 00:00:00 2001 From: randx Date: Sun, 16 Sep 2012 13:39:49 +0300 Subject: [PATCH 303/357] Update installation doc with branch names --- doc/installation.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/installation.md b/doc/installation.md index d5d1ccdd..345d801d 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -152,7 +152,14 @@ and ensure you have followed all of the above steps carefully. sudo pip install pygments sudo gem install bundler cd /home/gitlab + + # Get gitlab code. Use this for stable setup sudo -H -u gitlab git clone -b stable https://github.com/gitlabhq/gitlabhq.git gitlab + + # Skip this for stable setup. + # Master branch (recent changes, less stable) + sudo -H -u gitlab git clone -b master https://github.com/gitlabhq/gitlabhq.git gitlab + cd gitlab # Rename config files From 4f4c401f77522c27df7afdc25eeef39de76e241b Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sun, 16 Sep 2012 04:05:13 -0400 Subject: [PATCH 304/357] Don't instantiate Resque::Server in routes It still works, and it cleans up the output of `rake routes`. --- config/routes.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/routes.rb b/config/routes.rb index 84a0c6ab..858111f2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -10,7 +10,7 @@ Gitlab::Application.routes.draw do # Optionally, enable Resque here require 'resque/server' - mount Resque::Server.new, at: '/info/resque', as: 'resque' + mount Resque::Server => '/info/resque', as: 'resque' # Enable Grack support mount Grack::Bundle.new({ From 94f91146f15c955b02e9f3717b9bf7506019f63d Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sun, 16 Sep 2012 04:51:26 -0400 Subject: [PATCH 305/357] Limit admin/logs and admin/resque routes to the actions that are used --- config/routes.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index 858111f2..77cde722 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -53,8 +53,8 @@ Gitlab::Application.routes.draw do resources :hooks, :only => [:index, :create, :destroy] do get :test end - resource :logs - resource :resque, :controller => 'resque' + resource :logs, only: [:show] + resource :resque, :controller => 'resque', only: [:show] root :to => "dashboard#index" end From d7eb7970249b662ebcc2673001503a247d7fbe48 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sun, 16 Sep 2012 07:22:46 -0400 Subject: [PATCH 306/357] 1.9 Hash syntax in routes.rb Also cleans up some alignment and removes unnecessary "to: " arguments --- config/routes.rb | 103 ++++++++++++++++++++++++----------------------- 1 file changed, 52 insertions(+), 51 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index 77cde722..c226a473 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -23,14 +23,14 @@ Gitlab::Application.routes.draw do # # Help # - get 'help' => 'help#index' - get 'help/permissions' => 'help#permissions' - get 'help/workflow' => 'help#workflow' - get 'help/api' => 'help#api' - get 'help/web_hooks' => 'help#web_hooks' + get 'help' => 'help#index' + get 'help/permissions' => 'help#permissions' + get 'help/workflow' => 'help#workflow' + get 'help/api' => 'help#api' + get 'help/web_hooks' => 'help#web_hooks' get 'help/system_hooks' => 'help#system_hooks' - get 'help/markdown' => 'help#markdown' - get 'help/ssh' => 'help#ssh' + get 'help/markdown' => 'help#markdown' + get 'help/ssh' => 'help#ssh' # # Admin Area @@ -43,19 +43,19 @@ Gitlab::Application.routes.draw do put :unblock end end - resources :projects, :constraints => { :id => /[^\/]+/ } do + resources :projects, constraints: { id: /[^\/]+/ } do member do get :team put :team_update end end - resources :team_members, :only => [:edit, :update, :destroy] - resources :hooks, :only => [:index, :create, :destroy] do + resources :team_members, only: [:edit, :update, :destroy] + resources :hooks, only: [:index, :create, :destroy] do get :test end resource :logs, only: [:show] - resource :resque, :controller => 'resque', only: [:show] - root :to => "dashboard#index" + resource :resque, controller: 'resque', only: [:show] + root to: "dashboard#index" end get "errors/githost" @@ -63,31 +63,32 @@ Gitlab::Application.routes.draw do # # Profile Area # - get "profile/account", :to => "profile#account" - get "profile/history", :to => "profile#history" - put "profile/password", :to => "profile#password_update" - get "profile/token", :to => "profile#token" - put "profile/reset_private_token", :to => "profile#reset_private_token" - get "profile", :to => "profile#show" - get "profile/design", :to => "profile#design" - put "profile/update", :to => "profile#update" + get "profile/account" => "profile#account" + get "profile/history" => "profile#history" + put "profile/password" => "profile#password_update" + get "profile/token" => "profile#token" + put "profile/reset_private_token" => "profile#reset_private_token" + get "profile" => "profile#show" + get "profile/design" => "profile#design" + put "profile/update" => "profile#update" + resources :keys # # Dashboard Area # - get "dashboard", :to => "dashboard#index" - get "dashboard/issues", :to => "dashboard#issues" - get "dashboard/merge_requests", :to => "dashboard#merge_requests" + get "dashboard" => "dashboard#index" + get "dashboard/issues" => "dashboard#issues" + get "dashboard/merge_requests" => "dashboard#merge_requests" - resources :projects, :constraints => { :id => /[^\/]+/ }, :only => [:new, :create] + resources :projects, constraints: { id: /[^\/]+/ }, only: [:new, :create] - devise_for :users, :controllers => { :omniauth_callbacks => :omniauth_callbacks } + devise_for :users, controllers: { omniauth_callbacks: :omniauth_callbacks } # # Project Area # - resources :projects, :constraints => { :id => /[^\/]+/ }, :except => [:new, :create, :index], :path => "/" do + resources :projects, constraints: { id: /[^\/]+/ }, except: [:new, :create, :index], path: "/" do member do get "team" get "wall" @@ -95,7 +96,7 @@ Gitlab::Application.routes.draw do get "files" end - resources :wikis, :only => [:show, :edit, :destroy, :create] do + resources :wikis, only: [:show, :edit, :destroy, :create] do collection do get :pages end @@ -114,46 +115,45 @@ Gitlab::Application.routes.draw do end resources :deploy_keys - resources :protected_branches, :only => [:index, :create, :destroy] + resources :protected_branches, only: [:index, :create, :destroy] - resources :refs, :only => [], :path => "/" do + resources :refs, only: [], path: "/" do collection do get "switch" end member do - get "tree", :constraints => { :id => /[a-zA-Z.\/0-9_\-]+/ } - get "logs_tree", :constraints => { :id => /[a-zA-Z.\/0-9_\-]+/ } + get "tree", constraints: { id: /[a-zA-Z.\/0-9_\-]+/ } + get "logs_tree", constraints: { id: /[a-zA-Z.\/0-9_\-]+/ } get "blob", - :constraints => { - :id => /[a-zA-Z.0-9\/_\-]+/, - :path => /.*/ + constraints: { + id: /[a-zA-Z.0-9\/_\-]+/, + path: /.*/ } - # tree viewer get "tree/:path" => "refs#tree", - :as => :tree_file, - :constraints => { - :id => /[a-zA-Z.0-9\/_\-]+/, - :path => /.*/ + as: :tree_file, + constraints: { + id: /[a-zA-Z.0-9\/_\-]+/, + path: /.*/ } # tree viewer get "logs_tree/:path" => "refs#logs_tree", - :as => :logs_file, - :constraints => { - :id => /[a-zA-Z.0-9\/_\-]+/, - :path => /.*/ + as: :logs_file, + constraints: { + id: /[a-zA-Z.0-9\/_\-]+/, + path: /.*/ } # blame get "blame/:path" => "refs#blame", - :as => :blame_file, - :constraints => { - :id => /[a-zA-Z.0-9\/_\-]+/, - :path => /.*/ + as: :blame_file, + constraints: { + id: /[a-zA-Z.0-9\/_\-]+/, + path: /.*/ } end end @@ -178,7 +178,7 @@ Gitlab::Application.routes.draw do end end - resources :hooks, :only => [:index, :create, :destroy] do + resources :hooks, only: [:index, :create, :destroy] do member do get :test end @@ -194,7 +194,7 @@ Gitlab::Application.routes.draw do end resources :team_members resources :milestones - resources :labels, :only => [:index] + resources :labels, only: [:index] resources :issues do collection do @@ -203,11 +203,12 @@ Gitlab::Application.routes.draw do get :search end end - resources :notes, :only => [:index, :create, :destroy] do + resources :notes, only: [:index, :create, :destroy] do collection do post :preview end end end - root :to => "dashboard#index" + + root to: "dashboard#index" end From 89069dc5f7714472b106914a27c462755ab01396 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sun, 16 Sep 2012 07:31:51 -0400 Subject: [PATCH 307/357] Remove unused ProfileController#password action --- app/controllers/profile_controller.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/controllers/profile_controller.rb b/app/controllers/profile_controller.rb index ba68af2e..7ddbfe11 100644 --- a/app/controllers/profile_controller.rb +++ b/app/controllers/profile_controller.rb @@ -16,9 +16,6 @@ class ProfileController < ApplicationController def token end - def password - end - def password_update params[:user].reject!{ |k, v| k != "password" && k != "password_confirmation"} From 83f24de3520ba1c49544b268253a0665831c2bd5 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sun, 16 Sep 2012 04:21:46 -0400 Subject: [PATCH 308/357] Add routing specs --- spec/routing/admin_routing_spec.rb | 166 ++++++++ spec/routing/routing_spec.rb | 588 +++++++++++++++++++++++++++++ 2 files changed, 754 insertions(+) create mode 100644 spec/routing/admin_routing_spec.rb create mode 100644 spec/routing/routing_spec.rb diff --git a/spec/routing/admin_routing_spec.rb b/spec/routing/admin_routing_spec.rb new file mode 100644 index 00000000..60261c7a --- /dev/null +++ b/spec/routing/admin_routing_spec.rb @@ -0,0 +1,166 @@ +require 'spec_helper' + +# team_update_admin_user PUT /admin/users/:id/team_update(.:format) admin/users#team_update +# block_admin_user PUT /admin/users/:id/block(.:format) admin/users#block +# unblock_admin_user PUT /admin/users/:id/unblock(.:format) admin/users#unblock +# admin_users GET /admin/users(.:format) admin/users#index +# POST /admin/users(.:format) admin/users#create +# new_admin_user GET /admin/users/new(.:format) admin/users#new +# edit_admin_user GET /admin/users/:id/edit(.:format) admin/users#edit +# admin_user GET /admin/users/:id(.:format) admin/users#show +# PUT /admin/users/:id(.:format) admin/users#update +# DELETE /admin/users/:id(.:format) admin/users#destroy +describe Admin::UsersController, "routing" do + it "to #team_update" do + put("/admin/users/1/team_update").should route_to('admin/users#team_update', id: '1') + end + + it "to #block" do + put("/admin/users/1/block").should route_to('admin/users#block', id: '1') + end + + it "to #unblock" do + put("/admin/users/1/unblock").should route_to('admin/users#unblock', id: '1') + end + + it "to #index" do + get("/admin/users").should route_to('admin/users#index') + end + + it "to #show" do + get("/admin/users/1").should route_to('admin/users#show', id: '1') + end + + it "to #create" do + post("/admin/users").should route_to('admin/users#create') + end + + it "to #new" do + get("/admin/users/new").should route_to('admin/users#new') + end + + it "to #edit" do + get("/admin/users/1/edit").should route_to('admin/users#edit', id: '1') + end + + it "to #show" do + get("/admin/users/1").should route_to('admin/users#show', id: '1') + end + + it "to #update" do + put("/admin/users/1").should route_to('admin/users#update', id: '1') + end + + it "to #destroy" do + delete("/admin/users/1").should route_to('admin/users#destroy', id: '1') + end +end + +# team_admin_project GET /admin/projects/:id/team(.:format) admin/projects#team {:id=>/[^\/]+/} +# team_update_admin_project PUT /admin/projects/:id/team_update(.:format) admin/projects#team_update {:id=>/[^\/]+/} +# admin_projects GET /admin/projects(.:format) admin/projects#index {:id=>/[^\/]+/} +# POST /admin/projects(.:format) admin/projects#create {:id=>/[^\/]+/} +# new_admin_project GET /admin/projects/new(.:format) admin/projects#new {:id=>/[^\/]+/} +# edit_admin_project GET /admin/projects/:id/edit(.:format) admin/projects#edit {:id=>/[^\/]+/} +# admin_project GET /admin/projects/:id(.:format) admin/projects#show {:id=>/[^\/]+/} +# PUT /admin/projects/:id(.:format) admin/projects#update {:id=>/[^\/]+/} +# DELETE /admin/projects/:id(.:format) admin/projects#destroy {:id=>/[^\/]+/} +describe Admin::ProjectsController, "routing" do + it "to #team" do + get("/admin/projects/gitlab/team").should route_to('admin/projects#team', id: 'gitlab') + end + + it "to #team_update" do + put("/admin/projects/gitlab/team_update").should route_to('admin/projects#team_update', id: 'gitlab') + end + + it "to #index" do + get("/admin/projects").should route_to('admin/projects#index') + end + + it "to #create" do + post("/admin/projects").should route_to('admin/projects#create') + end + + it "to #new" do + get("/admin/projects/new").should route_to('admin/projects#new') + end + + it "to #edit" do + get("/admin/projects/gitlab/edit").should route_to('admin/projects#edit', id: 'gitlab') + end + + it "to #show" do + get("/admin/projects/gitlab").should route_to('admin/projects#show', id: 'gitlab') + end + + it "to #update" do + put("/admin/projects/gitlab").should route_to('admin/projects#update', id: 'gitlab') + end + + it "to #destroy" do + delete("/admin/projects/gitlab").should route_to('admin/projects#destroy', id: 'gitlab') + end +end + +# edit_admin_team_member GET /admin/team_members/:id/edit(.:format) admin/team_members#edit +# admin_team_member PUT /admin/team_members/:id(.:format) admin/team_members#update +# DELETE /admin/team_members/:id(.:format) admin/team_members#destroy +describe Admin::TeamMembersController, "routing" do + it "to #edit" do + get("/admin/team_members/1/edit").should route_to('admin/team_members#edit', id: '1') + end + + it "to #update" do + put("/admin/team_members/1").should route_to('admin/team_members#update', id: '1') + end + + it "to #destroy" do + delete("/admin/team_members/1").should route_to('admin/team_members#destroy', id: '1') + end +end + +# admin_hook_test GET /admin/hooks/:hook_id/test(.:format) admin/hooks#test +# admin_hooks GET /admin/hooks(.:format) admin/hooks#index +# POST /admin/hooks(.:format) admin/hooks#create +# admin_hook DELETE /admin/hooks/:id(.:format) admin/hooks#destroy +describe Admin::HooksController, "routing" do + it "to #test" do + get("/admin/hooks/1/test").should route_to('admin/hooks#test', hook_id: '1') + end + + it "to #index" do + get("/admin/hooks").should route_to('admin/hooks#index') + end + + it "to #create" do + post("/admin/hooks").should route_to('admin/hooks#create') + end + + it "to #destroy" do + delete("/admin/hooks/1").should route_to('admin/hooks#destroy', id: '1') + end + +end + +# admin_logs GET /admin/logs(.:format) admin/logs#show +describe Admin::LogsController, "routing" do + it "to #show" do + get("/admin/logs").should route_to('admin/logs#show') + end +end + +# admin_resque GET /admin/resque(.:format) admin/resque#show +describe Admin::ResqueController, "routing" do + it "to #show" do + get("/admin/resque").should route_to('admin/resque#show') + end +end + +# admin_root /admin(.:format) admin/dashboard#index +describe Admin::DashboardController, "routing" do + it "to #index" do + get("/admin").should route_to('admin/dashboard#index') + end +end + diff --git a/spec/routing/routing_spec.rb b/spec/routing/routing_spec.rb new file mode 100644 index 00000000..f69422ba --- /dev/null +++ b/spec/routing/routing_spec.rb @@ -0,0 +1,588 @@ +require 'spec_helper' + +# Shared examples for a resource inside a Project +# +# By default it tests all the default REST actions: index, create, new, edit, +# show, update, and destroy. You can remove actions by customizing the +# `actions` variable. +# +# It also expects a `controller` variable to be available which defines both +# the path to the resource as well as the controller name. +# +# Examples +# +# # Default behavior +# it_behaves_like "RESTful project resources" do +# let(:controller) { 'issues' } +# end +# +# # Customizing actions +# it_behaves_like "RESTful project resources" do +# let(:actions) { [:index] } +# let(:controller) { 'issues' } +# end +shared_examples "RESTful project resources" do + let(:actions) { [:index, :create, :new, :edit, :show, :update, :destroy] } + + it "to #index" do + get("/gitlabhq/#{controller}").should route_to("#{controller}#index", project_id: 'gitlabhq') if actions.include?(:index) + end + + it "to #create" do + post("/gitlabhq/#{controller}").should route_to("#{controller}#create", project_id: 'gitlabhq') if actions.include?(:create) + end + + it "to #new" do + get("/gitlabhq/#{controller}/new").should route_to("#{controller}#new", project_id: 'gitlabhq') if actions.include?(:new) + end + + it "to #edit" do + get("/gitlabhq/#{controller}/1/edit").should route_to("#{controller}#edit", project_id: 'gitlabhq', id: '1') if actions.include?(:edit) + end + + it "to #show" do + get("/gitlabhq/#{controller}/1").should route_to("#{controller}#show", project_id: 'gitlabhq', id: '1') if actions.include?(:show) + end + + it "to #update" do + put("/gitlabhq/#{controller}/1").should route_to("#{controller}#update", project_id: 'gitlabhq', id: '1') if actions.include?(:update) + end + + it "to #destroy" do + delete("/gitlabhq/#{controller}/1").should route_to("#{controller}#destroy", project_id: 'gitlabhq', id: '1') if actions.include?(:destroy) + end +end + +# search GET /search(.:format) search#show +describe SearchController, "routing" do + it "to #show" do + get("/search").should route_to('search#show') + end +end + +# gitlab_api /api Gitlab::API +# resque /info/resque Resque::Server +# /:path Grack +describe "Mounted Apps", "routing" do + it "to API" do + get("/api").should be_routable + end + + it "to Resque" do + pending + get("/info/resque").should be_routable + end + + it "to Grack" do + get("/gitlabhq.git").should be_routable + end +end + +# help GET /help(.:format) help#index +# help_permissions GET /help/permissions(.:format) help#permissions +# help_workflow GET /help/workflow(.:format) help#workflow +# help_api GET /help/api(.:format) help#api +# help_web_hooks GET /help/web_hooks(.:format) help#web_hooks +# help_system_hooks GET /help/system_hooks(.:format) help#system_hooks +# help_markdown GET /help/markdown(.:format) help#markdown +# help_ssh GET /help/ssh(.:format) help#ssh +describe HelpController, "routing" do + it "to #index" do + get("/help").should route_to('help#index') + end + + it "to #permissions" do + get("/help/permissions").should route_to('help#permissions') + end + + it "to #workflow" do + get("/help/workflow").should route_to('help#workflow') + end + + it "to #api" do + get("/help/api").should route_to('help#api') + end + + it "to #web_hooks" do + get("/help/web_hooks").should route_to('help#web_hooks') + end + + it "to #system_hooks" do + get("/help/system_hooks").should route_to('help#system_hooks') + end + + it "to #markdown" do + get("/help/markdown").should route_to('help#markdown') + end + + it "to #ssh" do + get("/help/ssh").should route_to('help#ssh') + end +end + +# errors_githost GET /errors/githost(.:format) errors#githost +describe ErrorsController, "routing" do + it "to #githost" do + get("/errors/githost").should route_to('errors#githost') + end +end + +# profile_account GET /profile/account(.:format) profile#account +# profile_history GET /profile/history(.:format) profile#history +# profile_password PUT /profile/password(.:format) profile#password_update +# profile_token GET /profile/token(.:format) profile#token +# profile_reset_private_token PUT /profile/reset_private_token(.:format) profile#reset_private_token +# profile GET /profile(.:format) profile#show +# profile_design GET /profile/design(.:format) profile#design +# profile_update PUT /profile/update(.:format) profile#update +describe ProfileController, "routing" do + it "to #account" do + get("/profile/account").should route_to('profile#account') + end + + it "to #history" do + get("/profile/history").should route_to('profile#history') + end + + it "to #password_update" do + put("/profile/password").should route_to('profile#password_update') + end + + it "to #token" do + get("/profile/token").should route_to('profile#token') + end + + it "to #reset_private_token" do + put("/profile/reset_private_token").should route_to('profile#reset_private_token') + end + + it "to #show" do + get("/profile").should route_to('profile#show') + end + + it "to #design" do + get("/profile/design").should route_to('profile#design') + end + + it "to #update" do + put("/profile/update").should route_to('profile#update') + end +end + +# keys GET /keys(.:format) keys#index +# POST /keys(.:format) keys#create +# new_key GET /keys/new(.:format) keys#new +# edit_key GET /keys/:id/edit(.:format) keys#edit +# key GET /keys/:id(.:format) keys#show +# PUT /keys/:id(.:format) keys#update +# DELETE /keys/:id(.:format) keys#destroy +describe KeysController, "routing" do + it "to #index" do + get("/keys").should route_to('keys#index') + end + + it "to #create" do + post("/keys").should route_to('keys#create') + end + + it "to #new" do + get("/keys/new").should route_to('keys#new') + end + + it "to #edit" do + get("/keys/1/edit").should route_to('keys#edit', id: '1') + end + + it "to #show" do + get("/keys/1").should route_to('keys#show', id: '1') + end + + it "to #update" do + put("/keys/1").should route_to('keys#update', id: '1') + end + + it "to #destroy" do + delete("/keys/1").should route_to('keys#destroy', id: '1') + end +end + +# dashboard GET /dashboard(.:format) dashboard#index +# dashboard_issues GET /dashboard/issues(.:format) dashboard#issues +# dashboard_merge_requests GET /dashboard/merge_requests(.:format) dashboard#merge_requests +# root / dashboard#index +describe DashboardController, "routing" do + it "to #index" do + get("/dashboard").should route_to('dashboard#index') + get("/").should route_to('dashboard#index') + end + + it "to #issues" do + get("/dashboard/issues").should route_to('dashboard#issues') + end + + it "to #merge_requests" do + get("/dashboard/merge_requests").should route_to('dashboard#merge_requests') + end +end + +# projects POST /projects(.:format) projects#create +# new_project GET /projects/new(.:format) projects#new +# team_project GET /:id/team(.:format) projects#team +# wall_project GET /:id/wall(.:format) projects#wall +# graph_project GET /:id/graph(.:format) projects#graph +# files_project GET /:id/files(.:format) projects#files +# edit_project GET /:id/edit(.:format) projects#edit +# project GET /:id(.:format) projects#show +# PUT /:id(.:format) projects#update +# DELETE /:id(.:format) projects#destroy +describe ProjectsController, "routing" do + it "to #create" do + post("/projects").should route_to('projects#create') + end + + it "to #new" do + get("/projects/new").should route_to('projects#new') + end + + it "to #team" do + get("/gitlabhq/team").should route_to('projects#team', id: 'gitlabhq') + end + + it "to #wall" do + get("/gitlabhq/wall").should route_to('projects#wall', id: 'gitlabhq') + end + + it "to #graph" do + get("/gitlabhq/graph").should route_to('projects#graph', id: 'gitlabhq') + end + + it "to #files" do + get("/gitlabhq/files").should route_to('projects#files', id: 'gitlabhq') + end + + it "to #edit" do + get("/gitlabhq/edit").should route_to('projects#edit', id: 'gitlabhq') + end + + it "to #show" do + get("/gitlabhq").should route_to('projects#show', id: 'gitlabhq') + end + + it "to #update" do + put("/gitlabhq").should route_to('projects#update', id: 'gitlabhq') + end + + it "to #destroy" do + delete("/gitlabhq").should route_to('projects#destroy', id: 'gitlabhq') + end +end + +# new_user_session GET /users/sign_in(.:format) devise/sessions#new +# user_session POST /users/sign_in(.:format) devise/sessions#create +# destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy +# user_omniauth_authorize /users/auth/:provider(.:format) omniauth_callbacks#passthru +# user_omniauth_callback /users/auth/:action/callback(.:format) omniauth_callbacks#(?-mix:(?!)) +# user_password POST /users/password(.:format) devise/passwords#create +# new_user_password GET /users/password/new(.:format) devise/passwords#new +# edit_user_password GET /users/password/edit(.:format) devise/passwords#edit +# PUT /users/password(.:format) devise/passwords#update +describe "Authentication", "routing" do + # pending +end + +# pages_project_wikis GET /:project_id/wikis/pages(.:format) wikis#pages +# history_project_wiki GET /:project_id/wikis/:id/history(.:format) wikis#history +# project_wikis POST /:project_id/wikis(.:format) wikis#create +# edit_project_wiki GET /:project_id/wikis/:id/edit(.:format) wikis#edit +# project_wiki GET /:project_id/wikis/:id(.:format) wikis#show +# DELETE /:project_id/wikis/:id(.:format) wikis#destroy +describe WikisController, "routing" do + it "to #pages" do + get("/gitlabhq/wikis/pages").should route_to('wikis#pages', project_id: 'gitlabhq') + end + + it "to #history" do + get("/gitlabhq/wikis/1/history").should route_to('wikis#history', project_id: 'gitlabhq', id: '1') + end + + it_behaves_like "RESTful project resources" do + let(:actions) { [:create, :edit, :show, :destroy] } + let(:controller) { 'wikis' } + end +end + +# branches_project_repository GET /:project_id/repository/branches(.:format) repositories#branches +# tags_project_repository GET /:project_id/repository/tags(.:format) repositories#tags +# archive_project_repository GET /:project_id/repository/archive(.:format) repositories#archive +# project_repository POST /:project_id/repository(.:format) repositories#create +# new_project_repository GET /:project_id/repository/new(.:format) repositories#new +# edit_project_repository GET /:project_id/repository/edit(.:format) repositories#edit +# GET /:project_id/repository(.:format) repositories#show +# PUT /:project_id/repository(.:format) repositories#update +# DELETE /:project_id/repository(.:format) repositories#destroy +describe RepositoriesController, "routing" do + it "to #branches" do + get("/gitlabhq/repository/branches").should route_to('repositories#branches', project_id: 'gitlabhq') + end + + it "to #tags" do + get("/gitlabhq/repository/tags").should route_to('repositories#tags', project_id: 'gitlabhq') + end + + it "to #archive" do + get("/gitlabhq/repository/archive").should route_to('repositories#archive', project_id: 'gitlabhq') + end + + it "to #create" do + post("/gitlabhq/repository").should route_to('repositories#create', project_id: 'gitlabhq') + end + + it "to #new" do + get("/gitlabhq/repository/new").should route_to('repositories#new', project_id: 'gitlabhq') + end + + it "to #edit" do + get("/gitlabhq/repository/edit").should route_to('repositories#edit', project_id: 'gitlabhq') + end + + it "to #show" do + get("/gitlabhq/repository").should route_to('repositories#show', project_id: 'gitlabhq') + end + + it "to #update" do + put("/gitlabhq/repository").should route_to('repositories#update', project_id: 'gitlabhq') + end + + it "to #destroy" do + delete("/gitlabhq/repository").should route_to('repositories#destroy', project_id: 'gitlabhq') + end +end + +# project_deploy_keys GET /:project_id/deploy_keys(.:format) deploy_keys#index +# POST /:project_id/deploy_keys(.:format) deploy_keys#create +# new_project_deploy_key GET /:project_id/deploy_keys/new(.:format) deploy_keys#new +# edit_project_deploy_key GET /:project_id/deploy_keys/:id/edit(.:format) deploy_keys#edit +# project_deploy_key GET /:project_id/deploy_keys/:id(.:format) deploy_keys#show +# PUT /:project_id/deploy_keys/:id(.:format) deploy_keys#update +# DELETE /:project_id/deploy_keys/:id(.:format) deploy_keys#destroy +describe DeployKeysController, "routing" do + it_behaves_like "RESTful project resources" do + let(:controller) { 'deploy_keys' } + end +end + +# project_protected_branches GET /:project_id/protected_branches(.:format) protected_branches#index +# POST /:project_id/protected_branches(.:format) protected_branches#create +# project_protected_branch DELETE /:project_id/protected_branches/:id(.:format) protected_branches#destroy +describe ProtectedBranchesController, "routing" do + it_behaves_like "RESTful project resources" do + let(:actions) { [:index, :create, :destroy] } + let(:controller) { 'protected_branches' } + end +end + +# switch_project_refs GET /:project_id/switch(.:format) refs#switch +# tree_project_ref GET /:project_id/:id/tree(.:format) refs#tree +# logs_tree_project_ref GET /:project_id/:id/logs_tree(.:format) refs#logs_tree +# blob_project_ref GET /:project_id/:id/blob(.:format) refs#blob +# tree_file_project_ref GET /:project_id/:id/tree/:path(.:format) refs#tree +# logs_file_project_ref GET /:project_id/:id/logs_tree/:path(.:format) refs#logs_tree +# blame_file_project_ref GET /:project_id/:id/blame/:path(.:format) refs#blame +describe RefsController, "routing" do + it "to #switch" do + get("/gitlabhq/switch").should route_to('refs#switch', project_id: 'gitlabhq') + end + + it "to #tree" do + get("/gitlabhq/stable/tree").should route_to('refs#tree', project_id: 'gitlabhq', id: 'stable') + get("/gitlabhq/stable/tree/foo/bar/baz").should route_to('refs#tree', project_id: 'gitlabhq', id: 'stable', path: 'foo/bar/baz') + end + + it "to #logs_tree" do + get("/gitlabhq/stable/logs_tree").should route_to('refs#logs_tree', project_id: 'gitlabhq', id: 'stable') + get("/gitlabhq/stable/logs_tree/foo/bar/baz").should route_to('refs#logs_tree', project_id: 'gitlabhq', id: 'stable', path: 'foo/bar/baz') + end + + it "to #blob" do + get("/gitlabhq/stable/blob").should route_to('refs#blob', project_id: 'gitlabhq', id: 'stable') + end + + it "to #blame" do + get("/gitlabhq/stable/blame/foo/bar/baz").should route_to('refs#blame', project_id: 'gitlabhq', id: 'stable', path: 'foo/bar/baz') + end +end + +# diffs_project_merge_request GET /:project_id/merge_requests/:id/diffs(.:format) merge_requests#diffs +# automerge_project_merge_request GET /:project_id/merge_requests/:id/automerge(.:format) merge_requests#automerge +# automerge_check_project_merge_request GET /:project_id/merge_requests/:id/automerge_check(.:format) merge_requests#automerge_check +# raw_project_merge_request GET /:project_id/merge_requests/:id/raw(.:format) merge_requests#raw +# branch_from_project_merge_requests GET /:project_id/merge_requests/branch_from(.:format) merge_requests#branch_from +# branch_to_project_merge_requests GET /:project_id/merge_requests/branch_to(.:format) merge_requests#branch_to +# project_merge_requests GET /:project_id/merge_requests(.:format) merge_requests#index +# POST /:project_id/merge_requests(.:format) merge_requests#create +# new_project_merge_request GET /:project_id/merge_requests/new(.:format) merge_requests#new +# edit_project_merge_request GET /:project_id/merge_requests/:id/edit(.:format) merge_requests#edit +# project_merge_request GET /:project_id/merge_requests/:id(.:format) merge_requests#show +# PUT /:project_id/merge_requests/:id(.:format) merge_requests#update +# DELETE /:project_id/merge_requests/:id(.:format) merge_requests#destroy +describe MergeRequestsController, "routing" do + it "to #diffs" do + get("/gitlabhq/merge_requests/1/diffs").should route_to('merge_requests#diffs', project_id: 'gitlabhq', id: '1') + end + + it "to #automerge" do + get("/gitlabhq/merge_requests/1/automerge").should route_to('merge_requests#automerge', project_id: 'gitlabhq', id: '1') + end + + it "to #automerge_check" do + get("/gitlabhq/merge_requests/1/automerge_check").should route_to('merge_requests#automerge_check', project_id: 'gitlabhq', id: '1') + end + + it "to #raw" do + get("/gitlabhq/merge_requests/1/raw").should route_to('merge_requests#raw', project_id: 'gitlabhq', id: '1') + end + + it "to #branch_from" do + get("/gitlabhq/merge_requests/branch_from").should route_to('merge_requests#branch_from', project_id: 'gitlabhq') + end + + it "to #branch_to" do + get("/gitlabhq/merge_requests/branch_to").should route_to('merge_requests#branch_to', project_id: 'gitlabhq') + end + + it_behaves_like "RESTful project resources" do + let(:controller) { 'merge_requests' } + end +end + +# raw_project_snippet GET /:project_id/snippets/:id/raw(.:format) snippets#raw +# project_snippets GET /:project_id/snippets(.:format) snippets#index +# POST /:project_id/snippets(.:format) snippets#create +# new_project_snippet GET /:project_id/snippets/new(.:format) snippets#new +# edit_project_snippet GET /:project_id/snippets/:id/edit(.:format) snippets#edit +# project_snippet GET /:project_id/snippets/:id(.:format) snippets#show +# PUT /:project_id/snippets/:id(.:format) snippets#update +# DELETE /:project_id/snippets/:id(.:format) snippets#destroy +describe SnippetsController, "routing" do + it "to #raw" do + get("/gitlabhq/snippets/1/raw").should route_to('snippets#raw', project_id: 'gitlabhq', id: '1') + end + + it_behaves_like "RESTful project resources" do + let(:controller) { 'snippets' } + end +end + +# test_project_hook GET /:project_id/hooks/:id/test(.:format) hooks#test +# project_hooks GET /:project_id/hooks(.:format) hooks#index +# POST /:project_id/hooks(.:format) hooks#create +# project_hook DELETE /:project_id/hooks/:id(.:format) hooks#destroy +describe HooksController, "routing" do + it "to #test" do + get("/gitlabhq/hooks/1/test").should route_to('hooks#test', project_id: 'gitlabhq', id: '1') + end + + it_behaves_like "RESTful project resources" do + let(:actions) { [:index, :create, :destroy] } + let(:controller) { 'hooks' } + end +end + +# compare_project_commits GET /:project_id/commits/compare(.:format) commits#compare +# patch_project_commit GET /:project_id/commits/:id/patch(.:format) commits#patch +# project_commits GET /:project_id/commits(.:format) commits#index +# POST /:project_id/commits(.:format) commits#create +# new_project_commit GET /:project_id/commits/new(.:format) commits#new +# edit_project_commit GET /:project_id/commits/:id/edit(.:format) commits#edit +# project_commit GET /:project_id/commits/:id(.:format) commits#show +# PUT /:project_id/commits/:id(.:format) commits#update +# DELETE /:project_id/commits/:id(.:format) commits#destroy +describe CommitsController, "routing" do + it "to #compare" do + get("/gitlabhq/commits/compare").should route_to('commits#compare', project_id: 'gitlabhq') + end + + it "to #patch" do + get("/gitlabhq/commits/1/patch").should route_to('commits#patch', project_id: 'gitlabhq', id: '1') + end + + it_behaves_like "RESTful project resources" do + let(:controller) { 'commits' } + end +end + +# project_team_members GET /:project_id/team_members(.:format) team_members#index +# POST /:project_id/team_members(.:format) team_members#create +# new_project_team_member GET /:project_id/team_members/new(.:format) team_members#new +# edit_project_team_member GET /:project_id/team_members/:id/edit(.:format) team_members#edit +# project_team_member GET /:project_id/team_members/:id(.:format) team_members#show +# PUT /:project_id/team_members/:id(.:format) team_members#update +# DELETE /:project_id/team_members/:id(.:format) team_members#destroy +describe TeamMembersController, "routing" do + it_behaves_like "RESTful project resources" do + let(:controller) { 'team_members' } + end +end + +# project_milestones GET /:project_id/milestones(.:format) milestones#index +# POST /:project_id/milestones(.:format) milestones#create +# new_project_milestone GET /:project_id/milestones/new(.:format) milestones#new +# edit_project_milestone GET /:project_id/milestones/:id/edit(.:format) milestones#edit +# project_milestone GET /:project_id/milestones/:id(.:format) milestones#show +# PUT /:project_id/milestones/:id(.:format) milestones#update +# DELETE /:project_id/milestones/:id(.:format) milestones#destroy +describe MilestonesController, "routing" do + it_behaves_like "RESTful project resources" do + let(:controller) { 'milestones' } + end +end + +# project_labels GET /:project_id/labels(.:format) labels#index +describe LabelsController, "routing" do + it "to #index" do + get("/gitlabhq/labels").should route_to('labels#index', project_id: 'gitlabhq') + end +end + +# sort_project_issues POST /:project_id/issues/sort(.:format) issues#sort +# bulk_update_project_issues POST /:project_id/issues/bulk_update(.:format) issues#bulk_update +# search_project_issues GET /:project_id/issues/search(.:format) issues#search +# project_issues GET /:project_id/issues(.:format) issues#index +# POST /:project_id/issues(.:format) issues#create +# new_project_issue GET /:project_id/issues/new(.:format) issues#new +# edit_project_issue GET /:project_id/issues/:id/edit(.:format) issues#edit +# project_issue GET /:project_id/issues/:id(.:format) issues#show +# PUT /:project_id/issues/:id(.:format) issues#update +# DELETE /:project_id/issues/:id(.:format) issues#destroy +describe IssuesController, "routing" do + it "to #sort" do + post("/gitlabhq/issues/sort").should route_to('issues#sort', project_id: 'gitlabhq') + end + + it "to #bulk_update" do + post("/gitlabhq/issues/bulk_update").should route_to('issues#bulk_update', project_id: 'gitlabhq') + end + + it "to #search" do + get("/gitlabhq/issues/search").should route_to('issues#search', project_id: 'gitlabhq') + end + + it_behaves_like "RESTful project resources" do + let(:controller) { 'issues' } + end +end + +# preview_project_notes POST /:project_id/notes/preview(.:format) notes#preview +# project_notes GET /:project_id/notes(.:format) notes#index +# POST /:project_id/notes(.:format) notes#create +# project_note DELETE /:project_id/notes/:id(.:format) notes#destroy +describe NotesController, "routing" do + it "to #preview" do + post("/gitlabhq/notes/preview").should route_to('notes#preview', project_id: 'gitlabhq') + end + + it_behaves_like "RESTful project resources" do + let(:actions) { [:index, :create, :destroy] } + let(:controller) { 'notes' } + end +end From 925183ed7a8eb392e008764483f59c319e22a59c Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sun, 16 Sep 2012 07:44:54 -0400 Subject: [PATCH 309/357] Add an AdminController base class for Admin controllers Handles stuff that's shared across admin controllers. --- app/controllers/admin/dashboard_controller.rb | 6 +----- app/controllers/admin/hooks_controller.rb | 8 ++------ app/controllers/admin/logs_controller.rb | 6 +----- app/controllers/admin/projects_controller.rb | 9 +++------ app/controllers/admin/resque_controller.rb | 5 ++--- app/controllers/admin/team_members_controller.rb | 6 +----- app/controllers/admin/users_controller.rb | 16 ++++++---------- app/controllers/admin_controller.rb | 11 +++++++++++ app/controllers/application_controller.rb | 4 ---- 9 files changed, 27 insertions(+), 44 deletions(-) create mode 100644 app/controllers/admin_controller.rb diff --git a/app/controllers/admin/dashboard_controller.rb b/app/controllers/admin/dashboard_controller.rb index ad80f4d5..5152f6fa 100644 --- a/app/controllers/admin/dashboard_controller.rb +++ b/app/controllers/admin/dashboard_controller.rb @@ -1,8 +1,4 @@ -class Admin::DashboardController < ApplicationController - layout "admin" - before_filter :authenticate_user! - before_filter :authenticate_admin! - +class Admin::DashboardController < AdminController def index @workers = Resque.workers @pending_jobs = Resque.size(:post_receive) diff --git a/app/controllers/admin/hooks_controller.rb b/app/controllers/admin/hooks_controller.rb index 7f832fd5..91a1d633 100644 --- a/app/controllers/admin/hooks_controller.rb +++ b/app/controllers/admin/hooks_controller.rb @@ -1,8 +1,4 @@ -class Admin::HooksController < ApplicationController - layout "admin" - before_filter :authenticate_user! - before_filter :authenticate_admin! - +class Admin::HooksController < AdminController def index @hooks = SystemHook.all @hook = SystemHook.new @@ -15,7 +11,7 @@ class Admin::HooksController < ApplicationController redirect_to admin_hooks_path, notice: 'Hook was successfully created.' else @hooks = SystemHook.all - render :index + render :index end end diff --git a/app/controllers/admin/logs_controller.rb b/app/controllers/admin/logs_controller.rb index c130b4b8..28c321a9 100644 --- a/app/controllers/admin/logs_controller.rb +++ b/app/controllers/admin/logs_controller.rb @@ -1,6 +1,2 @@ -class Admin::LogsController < ApplicationController - layout "admin" - before_filter :authenticate_user! - before_filter :authenticate_admin! +class Admin::LogsController < AdminController end - diff --git a/app/controllers/admin/projects_controller.rb b/app/controllers/admin/projects_controller.rb index 80d11f03..24406525 100644 --- a/app/controllers/admin/projects_controller.rb +++ b/app/controllers/admin/projects_controller.rb @@ -1,7 +1,4 @@ -class Admin::ProjectsController < ApplicationController - layout "admin" - before_filter :authenticate_user! - before_filter :authenticate_admin! +class Admin::ProjectsController < AdminController before_filter :admin_project, only: [:edit, :show, :update, :destroy, :team_update] def index @@ -43,7 +40,7 @@ class Admin::ProjectsController < ApplicationController def update owner_id = params[:project].delete(:owner_id) - if owner_id + if owner_id @admin_project.owner = User.find(owner_id) end @@ -60,7 +57,7 @@ class Admin::ProjectsController < ApplicationController redirect_to admin_projects_url, notice: 'Project was successfully deleted.' end - private + private def admin_project @admin_project = Project.find_by_code(params[:id]) diff --git a/app/controllers/admin/resque_controller.rb b/app/controllers/admin/resque_controller.rb index dc575cc2..9d8e7e30 100644 --- a/app/controllers/admin/resque_controller.rb +++ b/app/controllers/admin/resque_controller.rb @@ -1,5 +1,4 @@ -class Admin::ResqueController < ApplicationController - layout 'admin' +class Admin::ResqueController < AdminController def show end -end \ No newline at end of file +end diff --git a/app/controllers/admin/team_members_controller.rb b/app/controllers/admin/team_members_controller.rb index 57803b01..07320805 100644 --- a/app/controllers/admin/team_members_controller.rb +++ b/app/controllers/admin/team_members_controller.rb @@ -1,8 +1,4 @@ -class Admin::TeamMembersController < ApplicationController - layout "admin" - before_filter :authenticate_user! - before_filter :authenticate_admin! - +class Admin::TeamMembersController < AdminController def edit @admin_team_member = UsersProject.find(params[:id]) end diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index 1e8f420b..e2d61864 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -1,8 +1,4 @@ -class Admin::UsersController < ApplicationController - layout "admin" - before_filter :authenticate_user! - before_filter :authenticate_admin! - +class Admin::UsersController < AdminController def index @admin_users = User.scoped @admin_users = @admin_users.filter(params[:filter]) @@ -24,7 +20,7 @@ class Admin::UsersController < ApplicationController @admin_user = User.find(params[:id]) UsersProject.user_bulk_import( - @admin_user, + @admin_user, params[:project_ids], params[:project_access] ) @@ -41,22 +37,22 @@ class Admin::UsersController < ApplicationController @admin_user = User.find(params[:id]) end - def block + def block @admin_user = User.find(params[:id]) if @admin_user.block redirect_to :back, alert: "Successfully blocked" - else + else redirect_to :back, alert: "Error occured. User was not blocked" end end - def unblock + def unblock @admin_user = User.find(params[:id]) if @admin_user.update_attribute(:blocked, false) redirect_to :back, alert: "Successfully unblocked" - else + else redirect_to :back, alert: "Error occured. User was not unblocked" end end diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb new file mode 100644 index 00000000..bce9f692 --- /dev/null +++ b/app/controllers/admin_controller.rb @@ -0,0 +1,11 @@ +# Provides a base class for Admin controllers to subclass +# +# Automatically sets the layout and ensures an administrator is logged in +class AdminController < ApplicationController + layout 'admin' + before_filter :authenticate_admin! + + def authenticate_admin! + return render_404 unless current_user.is_admin? + end +end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index a0040298..5ac5c639 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -84,10 +84,6 @@ class ApplicationController < ActionController::Base abilities << Ability end - def authenticate_admin! - return render_404 unless current_user.is_admin? - end - def authorize_project!(action) return access_denied! unless can?(current_user, action, project) end From a0893b4d58a6162743b325efe0f93b1b957e8a0a Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Fri, 10 Aug 2012 18:44:36 -0400 Subject: [PATCH 310/357] Remove non-existent "close" action from authorize_modify_issue filter --- app/controllers/issues_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 3d305238..9be37ca1 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -17,7 +17,7 @@ class IssuesController < ApplicationController before_filter :authorize_write_issue!, only: [:new, :create] # Allow modify issue - before_filter :authorize_modify_issue!, only: [:close, :edit, :update] + before_filter :authorize_modify_issue!, only: [:edit, :update] # Allow destroy issue before_filter :authorize_admin_issue!, only: [:destroy] From 8cfb197dfcad3aa0c11f7afd34e4c7bfef953d1d Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Fri, 10 Aug 2012 18:51:07 -0400 Subject: [PATCH 311/357] Remove redundant access check for Issues#destroy We were already calling `authorize_admin_issue!` in a before filter with the same permission checks, so this deleted check wasn't actually doing anything. --- app/controllers/issues_controller.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 9be37ca1..1d78a6d9 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -87,8 +87,6 @@ class IssuesController < ApplicationController end def destroy - return access_denied! unless can?(current_user, :admin_issue, @issue) - @issue.destroy respond_to do |format| From 95bd93fe1aad3efbe2c8cc7b255a98ddb27d2d35 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sun, 16 Sep 2012 09:21:20 -0400 Subject: [PATCH 312/357] Remove Projects#team action Uses TeamMembers#index instead, to be more RESTful --- app/controllers/team_members_controller.rb | 6 +++--- app/helpers/application_helper.rb | 2 +- app/helpers/tab_helper.rb | 2 +- app/views/projects/_project_head.html.haml | 4 ++-- app/views/team_members/_form.html.haml | 2 +- app/views/{projects => team_members}/_team.html.haml | 0 .../team.html.haml => team_members/index.html.haml} | 6 ++---- app/views/team_members/show.html.haml | 2 +- config/routes.rb | 2 +- features/steps/shared/paths.rb | 2 +- spec/routing/routing_spec.rb | 5 ----- 11 files changed, 13 insertions(+), 20 deletions(-) rename app/views/{projects => team_members}/_team.html.haml (100%) rename app/views/{projects/team.html.haml => team_members/index.html.haml} (79%) diff --git a/app/controllers/team_members_controller.rb b/app/controllers/team_members_controller.rb index 606cb972..27f40b5a 100644 --- a/app/controllers/team_members_controller.rb +++ b/app/controllers/team_members_controller.rb @@ -22,7 +22,7 @@ class TeamMembersController < ApplicationController params[:project_access] ) - redirect_to team_project_path(@project) + redirect_to project_team_index_path(@project) end def update @@ -32,7 +32,7 @@ class TeamMembersController < ApplicationController unless @team_member.valid? flash[:alert] = "User should have at least one role" end - redirect_to team_project_path(@project) + redirect_to project_team_index_path(@project) end def destroy @@ -40,7 +40,7 @@ class TeamMembersController < ApplicationController @team_member.destroy respond_to do |format| - format.html { redirect_to team_project_path(@project) } + format.html { redirect_to project_team_index_path(@project) } format.js { render nothing: true } end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 3e435840..0938dc23 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -62,7 +62,7 @@ module ApplicationHelper { label: "#{@project.name} / Wall", url: wall_project_path(@project) }, { label: "#{@project.name} / Tree", url: tree_project_ref_path(@project, @project.root_ref) }, { label: "#{@project.name} / Commits", url: project_commits_path(@project) }, - { label: "#{@project.name} / Team", url: team_project_path(@project) } + { label: "#{@project.name} / Team", url: project_team_index_path(@project) } ] end diff --git a/app/helpers/tab_helper.rb b/app/helpers/tab_helper.rb index 1740864b..b5d7ccb7 100644 --- a/app/helpers/tab_helper.rb +++ b/app/helpers/tab_helper.rb @@ -8,7 +8,7 @@ module TabHelper end def project_tab_class - [:show, :files, :team, :edit, :update].each do |action| + [:show, :files, :edit, :update].each do |action| return "current" if current_page?(controller: "projects", action: action, id: @project) end diff --git a/app/views/projects/_project_head.html.haml b/app/views/projects/_project_head.html.haml index ba64ee7f..4f38bef8 100644 --- a/app/views/projects/_project_head.html.haml +++ b/app/views/projects/_project_head.html.haml @@ -3,8 +3,8 @@ = link_to project_path(@project), class: "activities-tab tab" do %i.icon-home Show - %li{ class: " #{'active' if (controller.controller_name == "team_members") || current_page?(team_project_path(@project)) }" } - = link_to team_project_path(@project), class: "team-tab tab" do + %li{ class: " #{'active' if (controller.controller_name == "team_members") || current_page?(project_team_index_path(@project)) }" } + = link_to project_team_index_path(@project), class: "team-tab tab" do %i.icon-user Team %li{ class: "#{'active' if current_page?(files_project_path(@project)) }" } diff --git a/app/views/team_members/_form.html.haml b/app/views/team_members/_form.html.haml index 3736bfea..92167138 100644 --- a/app/views/team_members/_form.html.haml +++ b/app/views/team_members/_form.html.haml @@ -20,4 +20,4 @@ .actions = f.submit 'Save', class: "btn save-btn" - = link_to "Cancel", team_project_path(@project), class: "btn cancel-btn" + = link_to "Cancel", project_team_index_path(@project), class: "btn cancel-btn" diff --git a/app/views/projects/_team.html.haml b/app/views/team_members/_team.html.haml similarity index 100% rename from app/views/projects/_team.html.haml rename to app/views/team_members/_team.html.haml diff --git a/app/views/projects/team.html.haml b/app/views/team_members/index.html.haml similarity index 79% rename from app/views/projects/team.html.haml rename to app/views/team_members/index.html.haml index e8a825c7..b3b7b72a 100644 --- a/app/views/projects/team.html.haml +++ b/app/views/team_members/index.html.haml @@ -1,4 +1,4 @@ -= render "project_head" += render "projects/project_head" %h3.page_title Team Members %small (#{@project.users_projects.count}) @@ -10,6 +10,4 @@ Read more about project permissions %strong= link_to "here", help_permissions_path, class: "vlink" - -= render partial: "team", locals: {project: @project} - += render partial: "team_members/team", locals: {project: @project} diff --git a/app/views/team_members/show.html.haml b/app/views/team_members/show.html.haml index 3b5c78a8..9d03cd2c 100644 --- a/app/views/team_members/show.html.haml +++ b/app/views/team_members/show.html.haml @@ -14,7 +14,7 @@ %hr .back_link %br - = link_to team_project_path(@project), class: "" do + = link_to project_team_index_path(@project), class: "" do ← To team list %br .row diff --git a/config/routes.rb b/config/routes.rb index c226a473..cfb9bdb9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -90,7 +90,6 @@ Gitlab::Application.routes.draw do # resources :projects, constraints: { id: /[^\/]+/ }, except: [:new, :create, :index], path: "/" do member do - get "team" get "wall" get "graph" get "files" @@ -192,6 +191,7 @@ Gitlab::Application.routes.draw do get :patch end end + resources :team, controller: 'team_members', only: [:index] resources :team_members resources :milestones resources :labels, only: [:index] diff --git a/features/steps/shared/paths.rb b/features/steps/shared/paths.rb index b0028f9c..93ad0219 100644 --- a/features/steps/shared/paths.rb +++ b/features/steps/shared/paths.rb @@ -98,7 +98,7 @@ module SharedPaths end Then 'I visit project "Shop" team page' do - visit team_project_path(Project.find_by_name("Shop")) + visit project_team_index_path(Project.find_by_name("Shop")) end Then 'I visit project "Shop" wall page' do diff --git a/spec/routing/routing_spec.rb b/spec/routing/routing_spec.rb index f69422ba..c93fb58a 100644 --- a/spec/routing/routing_spec.rb +++ b/spec/routing/routing_spec.rb @@ -227,7 +227,6 @@ end # projects POST /projects(.:format) projects#create # new_project GET /projects/new(.:format) projects#new -# team_project GET /:id/team(.:format) projects#team # wall_project GET /:id/wall(.:format) projects#wall # graph_project GET /:id/graph(.:format) projects#graph # files_project GET /:id/files(.:format) projects#files @@ -244,10 +243,6 @@ describe ProjectsController, "routing" do get("/projects/new").should route_to('projects#new') end - it "to #team" do - get("/gitlabhq/team").should route_to('projects#team', id: 'gitlabhq') - end - it "to #wall" do get("/gitlabhq/wall").should route_to('projects#wall', id: 'gitlabhq') end From 02b24cefc7d48c1a4adb4a3fcd430770022db7b1 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sun, 16 Sep 2012 10:38:01 -0400 Subject: [PATCH 313/357] Missed a use of team_project_path --- spec/requests/security/project_access_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/requests/security/project_access_spec.rb b/spec/requests/security/project_access_spec.rb index 0cdf43bf..af0d5fcd 100644 --- a/spec/requests/security/project_access_spec.rb +++ b/spec/requests/security/project_access_spec.rb @@ -70,7 +70,7 @@ describe "Application access" do end describe "GET /project_code/team" do - subject { team_project_path(@project) } + subject { project_team_index_path(@project) } it { should be_allowed_for @u1 } it { should be_allowed_for @u3 } From c23eb4082948322a1b690e0850c09bfc8df81589 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Sun, 16 Sep 2012 17:52:06 +0300 Subject: [PATCH 314/357] SSH Keys API implemented --- lib/api.rb | 1 + lib/api/entities.rb | 6 ++++ lib/api/keys.rb | 44 ++++++++++++++++++++++++ spec/requests/api/ssh_keys_spec.rb | 55 ++++++++++++++++++++++++++++++ 4 files changed, 106 insertions(+) create mode 100644 lib/api/keys.rb create mode 100644 spec/requests/api/ssh_keys_spec.rb diff --git a/lib/api.rb b/lib/api.rb index be04701c..37e03849 100644 --- a/lib/api.rb +++ b/lib/api.rb @@ -17,5 +17,6 @@ module Gitlab mount Projects mount Issues mount Milestones + mount Keys end end diff --git a/lib/api/entities.rb b/lib/api/entities.rb index b50d683f..13a48e12 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -48,5 +48,11 @@ module Gitlab expose :assignee, :author, using: Entities::UserBasic expose :closed, :updated_at, :created_at end + + class Key < Grape::Entity + expose :id, + :title, + :key + end end end diff --git a/lib/api/keys.rb b/lib/api/keys.rb new file mode 100644 index 00000000..96ab7029 --- /dev/null +++ b/lib/api/keys.rb @@ -0,0 +1,44 @@ +module Gitlab + # Keys API + class Keys < Grape::API + before { authenticate! } + resource :keys do + # Get currently authenticated user's keys + # + # Example Request: + # GET /keys + get do + present current_user.keys, with: Entities::Key + end + # Add new ssh key to currently authenticated user + # + # Parameters: + # key (required) - New SSH Key + # title (required) - New SSH Key's title + # Example Request: + # POST /keys + post do + key = current_user.keys.new( + title: params[:title], + key: params[:key] + ) + if key.save + present key, with: Entities::Key + else + not_found! + end + end + # Delete existed ssh key of currently authenticated user + # + # Parameters: + # id (required) - SSH Key ID + # Example Request: + # DELETE /keys/:id + delete "/:id" do + key = current_user.keys.find params[:id] + key.delete + end + end + end +end + diff --git a/spec/requests/api/ssh_keys_spec.rb b/spec/requests/api/ssh_keys_spec.rb new file mode 100644 index 00000000..b8c60377 --- /dev/null +++ b/spec/requests/api/ssh_keys_spec.rb @@ -0,0 +1,55 @@ +require 'spec_helper' + +describe Gitlab::Keys do + include ApiHelpers + let(:user) { + user = Factory.create :user + user.reset_authentication_token! + user + } + let(:key) { Factory.create :key, { user: user}} + + describe "GET /keys" do + context "when unauthenticated" do + it "should return authentication error" do + get api("/keys") + response.status.should == 401 + end + end + context "when authenticated" do + it "should return array of ssh keys" do + user.keys << key + user.save + get api("/keys", user) + response.status.should == 200 + json_response.should be_an Array + json_response.first["title"].should == key.title + end + end + end + + describe "POST /keys" do + it "should not create invalid ssh key" do + post api("/keys", user), { title: "invalid key" } + response.status.should == 404 + end + it "should create ssh key" do + key_attrs = Factory.attributes :key + expect { + post api("/keys", user), key_attrs + }.to change{ user.keys.count }.by(1) + end + end + + describe "DELETE /keys/:id" do + it "should delete existed key" do + user.keys << key + user.save + expect { + delete api("/keys/#{key.id}", user) + }.to change{user.keys.count}.by(-1) + end + end + +end + From b24346fa2b246d71b2918e9d3ac3049f7663fb86 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sun, 16 Sep 2012 10:56:32 -0400 Subject: [PATCH 315/357] Fix permissions for TeamMembers#index --- app/controllers/team_members_controller.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/controllers/team_members_controller.rb b/app/controllers/team_members_controller.rb index 27f40b5a..a50dcd3e 100644 --- a/app/controllers/team_members_controller.rb +++ b/app/controllers/team_members_controller.rb @@ -5,7 +5,10 @@ class TeamMembersController < ApplicationController # Authorize before_filter :add_project_abilities before_filter :authorize_read_project! - before_filter :authorize_admin_project!, except: [:show] + before_filter :authorize_admin_project!, except: [:index, :show] + + def index + end def show @team_member = project.users_projects.find(params[:id]) From 87d40fd276ade536e0b6b3019e52c2e1844e47ea Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Sun, 16 Sep 2012 18:21:59 +0300 Subject: [PATCH 316/357] Docs added --- doc/api/README.md | 1 + doc/api/keys.md | 79 ++++++++++++++++++++++++++++++ lib/api/keys.rb | 8 +++ spec/requests/api/ssh_keys_spec.rb | 18 +++++++ 4 files changed, 106 insertions(+) create mode 100644 doc/api/keys.md diff --git a/doc/api/README.md b/doc/api/README.md index 93919b42..9741072c 100644 --- a/doc/api/README.md +++ b/doc/api/README.md @@ -34,3 +34,4 @@ When listing resources you can pass the following parameters: + [Snippets](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/snippets.md) + [Issues](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/issues.md) + [Milestones](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/milestones.md) ++ [SSH Keys](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/keys.md) diff --git a/doc/api/keys.md b/doc/api/keys.md new file mode 100644 index 00000000..8106eb8a --- /dev/null +++ b/doc/api/keys.md @@ -0,0 +1,79 @@ +## List keys + +Get a list of currently authenticated user's keys. + +``` +GET /keys +``` + +```json +[ + { + "id": 1, + "title" : "Public key" + "key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4 + 596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4 + soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=", + }, + { + "id": 3, + "title" : "Another Public key" + "key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4 + 596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4 + soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=" + } +] +``` + +## Single key + +Get a single key. + +``` +GET /keys/:id +``` + +Parameters: + ++ `id` (required) - The ID of a key + +```json +{ + "id": 1, + "title" : "Public key" + "key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4 + 596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4 + soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=" + } +``` +## Add key + +Create new key owned by currently authenticated user + +``` +POST /keys +``` + +Parameters: + ++ `title` (required) - new SSH Key ++ `key` (optional) - new SSH key's title + +Will return created key with status `201 Created` on success, or `404 Not +found` on fail. + +## Delete key + +Delete key owned by currently authenticated user + +``` +DELETE /keys/:id +``` + +Parameters: + ++ `id` (required) - key ID + +Will return `200 OK` on success, or `404 Not Found` on fail. + + diff --git a/lib/api/keys.rb b/lib/api/keys.rb index 96ab7029..d58c7caf 100644 --- a/lib/api/keys.rb +++ b/lib/api/keys.rb @@ -10,6 +10,14 @@ module Gitlab get do present current_user.keys, with: Entities::Key end + # Get single key owned by currently authenticated user + # + # Example Request: + # GET /keys/:id + get "/:id" do + key = current_user.keys.find params[:id] + present key, with: Entities::Key + end # Add new ssh key to currently authenticated user # # Parameters: diff --git a/spec/requests/api/ssh_keys_spec.rb b/spec/requests/api/ssh_keys_spec.rb index b8c60377..7fb8c920 100644 --- a/spec/requests/api/ssh_keys_spec.rb +++ b/spec/requests/api/ssh_keys_spec.rb @@ -28,6 +28,20 @@ describe Gitlab::Keys do end end + describe "GET /keys/:id" do + it "should returm single key" do + user.keys << key + user.save + get api("/keys/#{key.id}", user) + response.status.should == 200 + json_response["title"].should == key.title + end + it "should return 404 Not Found within invalid ID" do + get api("/keys/42", user) + response.status.should == 404 + end + end + describe "POST /keys" do it "should not create invalid ssh key" do post api("/keys", user), { title: "invalid key" } @@ -49,6 +63,10 @@ describe Gitlab::Keys do delete api("/keys/#{key.id}", user) }.to change{user.keys.count}.by(-1) end + it "should return 404 Not Found within invalid ID" do + delete api("/keys/42", user) + response.status.should == 404 + end end end From 4247ccd3401b81f654f2203f4b71f0257fd9c569 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sun, 16 Sep 2012 11:53:36 -0400 Subject: [PATCH 317/357] Remove unused project/_refs partial --- app/views/projects/_refs.html.haml | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 app/views/projects/_refs.html.haml diff --git a/app/views/projects/_refs.html.haml b/app/views/projects/_refs.html.haml deleted file mode 100644 index dc1f3a28..00000000 --- a/app/views/projects/_refs.html.haml +++ /dev/null @@ -1,3 +0,0 @@ -= form_tag switch_project_refs_path(@project), method: :get, class: "project-refs-form" do - = select_tag "ref", grouped_options_refs, onchange: "this.form.submit();", class: "project-refs-select chosen" - = hidden_field_tag :destination, destination From 465e40d3a663944b5aacf3e53a63158a7812f219 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sun, 16 Sep 2012 12:07:57 -0400 Subject: [PATCH 318/357] Extract ref switcher into a partial Also moves onchange JS to projects.js.coffee --- app/assets/javascripts/projects.js.coffee | 6 +++++- app/views/commits/_head.html.haml | 7 +------ app/views/refs/_head.html.haml | 5 +---- app/views/shared/_ref_switcher.html.haml | 5 +++++ 4 files changed, 12 insertions(+), 11 deletions(-) create mode 100644 app/views/shared/_ref_switcher.html.haml diff --git a/app/assets/javascripts/projects.js.coffee b/app/assets/javascripts/projects.js.coffee index 14738e14..008fa8e9 100644 --- a/app/assets/javascripts/projects.js.coffee +++ b/app/assets/javascripts/projects.js.coffee @@ -10,11 +10,15 @@ window.Projects = -> $('form #project_default_branch').chosen() disableButtonIfEmptyField '#project_name', '.project-submit' -# Git clone panel switcher $ -> + # Git clone panel switcher scope = $ '.project_clone_holder' if scope.length > 0 $('a, button', scope).click -> $('a, button', scope).removeClass 'active' $(@).addClass 'active' $('#project_clone', scope).val $(@).data 'clone' + + # Ref switcher + $('.project-refs-select').on 'change', -> + $(@).parents('form').submit() diff --git a/app/views/commits/_head.html.haml b/app/views/commits/_head.html.haml index 5a09d82a..a8111a72 100644 --- a/app/views/commits/_head.html.haml +++ b/app/views/commits/_head.html.haml @@ -1,9 +1,5 @@ %ul.nav.nav-tabs - %li - = form_tag switch_project_refs_path(@project), method: :get, class: "project-refs-form" do - = select_tag "ref", grouped_options_refs, onchange: "$(this.form).trigger('submit');", class: "project-refs-select chosen" - = hidden_field_tag :destination, "commits" - + %li= render partial: 'shared/ref_switcher', locals: {destination: 'commits'} %li{class: "#{'active' if current_page?(project_commits_path(@project)) }"} = link_to project_commits_path(@project) do Commits @@ -20,7 +16,6 @@ Tags %span.badge= @project.repo.tag_count - - if current_page?(project_commits_path(@project)) && current_user.private_token %li.right %span.rss-icon diff --git a/app/views/refs/_head.html.haml b/app/views/refs/_head.html.haml index 94603f0a..3592f573 100644 --- a/app/views/refs/_head.html.haml +++ b/app/views/refs/_head.html.haml @@ -1,9 +1,6 @@ %ul.nav.nav-tabs %li - = form_tag switch_project_refs_path(@project), method: :get, class: "project-refs-form", remote: true do - = select_tag "ref", grouped_options_refs, onchange: "$(this.form).trigger('submit');", class: "project-refs-select chosen" - = hidden_field_tag :destination, "tree" - = hidden_field_tag :path, params[:path] + = render partial: 'shared/ref_switcher', locals: {destination: 'tree', path: params[:path]} %li{class: "#{'active' if (controller.controller_name == "refs") }"} = link_to tree_project_ref_path(@project, @ref) do Source diff --git a/app/views/shared/_ref_switcher.html.haml b/app/views/shared/_ref_switcher.html.haml new file mode 100644 index 00000000..e0c89522 --- /dev/null +++ b/app/views/shared/_ref_switcher.html.haml @@ -0,0 +1,5 @@ += form_tag switch_project_refs_path(@project), method: :get, class: "project-refs-form" do + = select_tag "ref", grouped_options_refs, class: "project-refs-select chosen" + = hidden_field_tag :destination, destination + - if respond_to?(:path) + = hidden_field_tag :path, path From f4b14494ef6abf3d144c28e4af0c20143383e062 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Sun, 16 Sep 2012 12:42:52 -0400 Subject: [PATCH 319/357] Move project-related routing specs to their own file --- spec/routing/project_routing_spec.rb | 398 +++++++++++++++++++++++++++ spec/routing/routing_spec.rb | 397 -------------------------- 2 files changed, 398 insertions(+), 397 deletions(-) create mode 100644 spec/routing/project_routing_spec.rb diff --git a/spec/routing/project_routing_spec.rb b/spec/routing/project_routing_spec.rb new file mode 100644 index 00000000..b3f9db01 --- /dev/null +++ b/spec/routing/project_routing_spec.rb @@ -0,0 +1,398 @@ +require 'spec_helper' + +# Shared examples for a resource inside a Project +# +# By default it tests all the default REST actions: index, create, new, edit, +# show, update, and destroy. You can remove actions by customizing the +# `actions` variable. +# +# It also expects a `controller` variable to be available which defines both +# the path to the resource as well as the controller name. +# +# Examples +# +# # Default behavior +# it_behaves_like "RESTful project resources" do +# let(:controller) { 'issues' } +# end +# +# # Customizing actions +# it_behaves_like "RESTful project resources" do +# let(:actions) { [:index] } +# let(:controller) { 'issues' } +# end +shared_examples "RESTful project resources" do + let(:actions) { [:index, :create, :new, :edit, :show, :update, :destroy] } + + it "to #index" do + get("/gitlabhq/#{controller}").should route_to("#{controller}#index", project_id: 'gitlabhq') if actions.include?(:index) + end + + it "to #create" do + post("/gitlabhq/#{controller}").should route_to("#{controller}#create", project_id: 'gitlabhq') if actions.include?(:create) + end + + it "to #new" do + get("/gitlabhq/#{controller}/new").should route_to("#{controller}#new", project_id: 'gitlabhq') if actions.include?(:new) + end + + it "to #edit" do + get("/gitlabhq/#{controller}/1/edit").should route_to("#{controller}#edit", project_id: 'gitlabhq', id: '1') if actions.include?(:edit) + end + + it "to #show" do + get("/gitlabhq/#{controller}/1").should route_to("#{controller}#show", project_id: 'gitlabhq', id: '1') if actions.include?(:show) + end + + it "to #update" do + put("/gitlabhq/#{controller}/1").should route_to("#{controller}#update", project_id: 'gitlabhq', id: '1') if actions.include?(:update) + end + + it "to #destroy" do + delete("/gitlabhq/#{controller}/1").should route_to("#{controller}#destroy", project_id: 'gitlabhq', id: '1') if actions.include?(:destroy) + end +end + +# projects POST /projects(.:format) projects#create +# new_project GET /projects/new(.:format) projects#new +# wall_project GET /:id/wall(.:format) projects#wall +# graph_project GET /:id/graph(.:format) projects#graph +# files_project GET /:id/files(.:format) projects#files +# edit_project GET /:id/edit(.:format) projects#edit +# project GET /:id(.:format) projects#show +# PUT /:id(.:format) projects#update +# DELETE /:id(.:format) projects#destroy +describe ProjectsController, "routing" do + it "to #create" do + post("/projects").should route_to('projects#create') + end + + it "to #new" do + get("/projects/new").should route_to('projects#new') + end + + it "to #wall" do + get("/gitlabhq/wall").should route_to('projects#wall', id: 'gitlabhq') + end + + it "to #graph" do + get("/gitlabhq/graph").should route_to('projects#graph', id: 'gitlabhq') + end + + it "to #files" do + get("/gitlabhq/files").should route_to('projects#files', id: 'gitlabhq') + end + + it "to #edit" do + get("/gitlabhq/edit").should route_to('projects#edit', id: 'gitlabhq') + end + + it "to #show" do + get("/gitlabhq").should route_to('projects#show', id: 'gitlabhq') + end + + it "to #update" do + put("/gitlabhq").should route_to('projects#update', id: 'gitlabhq') + end + + it "to #destroy" do + delete("/gitlabhq").should route_to('projects#destroy', id: 'gitlabhq') + end +end + +# pages_project_wikis GET /:project_id/wikis/pages(.:format) wikis#pages +# history_project_wiki GET /:project_id/wikis/:id/history(.:format) wikis#history +# project_wikis POST /:project_id/wikis(.:format) wikis#create +# edit_project_wiki GET /:project_id/wikis/:id/edit(.:format) wikis#edit +# project_wiki GET /:project_id/wikis/:id(.:format) wikis#show +# DELETE /:project_id/wikis/:id(.:format) wikis#destroy +describe WikisController, "routing" do + it "to #pages" do + get("/gitlabhq/wikis/pages").should route_to('wikis#pages', project_id: 'gitlabhq') + end + + it "to #history" do + get("/gitlabhq/wikis/1/history").should route_to('wikis#history', project_id: 'gitlabhq', id: '1') + end + + it_behaves_like "RESTful project resources" do + let(:actions) { [:create, :edit, :show, :destroy] } + let(:controller) { 'wikis' } + end +end + +# branches_project_repository GET /:project_id/repository/branches(.:format) repositories#branches +# tags_project_repository GET /:project_id/repository/tags(.:format) repositories#tags +# archive_project_repository GET /:project_id/repository/archive(.:format) repositories#archive +# project_repository POST /:project_id/repository(.:format) repositories#create +# new_project_repository GET /:project_id/repository/new(.:format) repositories#new +# edit_project_repository GET /:project_id/repository/edit(.:format) repositories#edit +# GET /:project_id/repository(.:format) repositories#show +# PUT /:project_id/repository(.:format) repositories#update +# DELETE /:project_id/repository(.:format) repositories#destroy +describe RepositoriesController, "routing" do + it "to #branches" do + get("/gitlabhq/repository/branches").should route_to('repositories#branches', project_id: 'gitlabhq') + end + + it "to #tags" do + get("/gitlabhq/repository/tags").should route_to('repositories#tags', project_id: 'gitlabhq') + end + + it "to #archive" do + get("/gitlabhq/repository/archive").should route_to('repositories#archive', project_id: 'gitlabhq') + end + + it "to #create" do + post("/gitlabhq/repository").should route_to('repositories#create', project_id: 'gitlabhq') + end + + it "to #new" do + get("/gitlabhq/repository/new").should route_to('repositories#new', project_id: 'gitlabhq') + end + + it "to #edit" do + get("/gitlabhq/repository/edit").should route_to('repositories#edit', project_id: 'gitlabhq') + end + + it "to #show" do + get("/gitlabhq/repository").should route_to('repositories#show', project_id: 'gitlabhq') + end + + it "to #update" do + put("/gitlabhq/repository").should route_to('repositories#update', project_id: 'gitlabhq') + end + + it "to #destroy" do + delete("/gitlabhq/repository").should route_to('repositories#destroy', project_id: 'gitlabhq') + end +end + +# project_deploy_keys GET /:project_id/deploy_keys(.:format) deploy_keys#index +# POST /:project_id/deploy_keys(.:format) deploy_keys#create +# new_project_deploy_key GET /:project_id/deploy_keys/new(.:format) deploy_keys#new +# edit_project_deploy_key GET /:project_id/deploy_keys/:id/edit(.:format) deploy_keys#edit +# project_deploy_key GET /:project_id/deploy_keys/:id(.:format) deploy_keys#show +# PUT /:project_id/deploy_keys/:id(.:format) deploy_keys#update +# DELETE /:project_id/deploy_keys/:id(.:format) deploy_keys#destroy +describe DeployKeysController, "routing" do + it_behaves_like "RESTful project resources" do + let(:controller) { 'deploy_keys' } + end +end + +# project_protected_branches GET /:project_id/protected_branches(.:format) protected_branches#index +# POST /:project_id/protected_branches(.:format) protected_branches#create +# project_protected_branch DELETE /:project_id/protected_branches/:id(.:format) protected_branches#destroy +describe ProtectedBranchesController, "routing" do + it_behaves_like "RESTful project resources" do + let(:actions) { [:index, :create, :destroy] } + let(:controller) { 'protected_branches' } + end +end + +# switch_project_refs GET /:project_id/switch(.:format) refs#switch +# tree_project_ref GET /:project_id/:id/tree(.:format) refs#tree +# logs_tree_project_ref GET /:project_id/:id/logs_tree(.:format) refs#logs_tree +# blob_project_ref GET /:project_id/:id/blob(.:format) refs#blob +# tree_file_project_ref GET /:project_id/:id/tree/:path(.:format) refs#tree +# logs_file_project_ref GET /:project_id/:id/logs_tree/:path(.:format) refs#logs_tree +# blame_file_project_ref GET /:project_id/:id/blame/:path(.:format) refs#blame +describe RefsController, "routing" do + it "to #switch" do + get("/gitlabhq/switch").should route_to('refs#switch', project_id: 'gitlabhq') + end + + it "to #tree" do + get("/gitlabhq/stable/tree").should route_to('refs#tree', project_id: 'gitlabhq', id: 'stable') + get("/gitlabhq/stable/tree/foo/bar/baz").should route_to('refs#tree', project_id: 'gitlabhq', id: 'stable', path: 'foo/bar/baz') + end + + it "to #logs_tree" do + get("/gitlabhq/stable/logs_tree").should route_to('refs#logs_tree', project_id: 'gitlabhq', id: 'stable') + get("/gitlabhq/stable/logs_tree/foo/bar/baz").should route_to('refs#logs_tree', project_id: 'gitlabhq', id: 'stable', path: 'foo/bar/baz') + end + + it "to #blob" do + get("/gitlabhq/stable/blob").should route_to('refs#blob', project_id: 'gitlabhq', id: 'stable') + end + + it "to #blame" do + get("/gitlabhq/stable/blame/foo/bar/baz").should route_to('refs#blame', project_id: 'gitlabhq', id: 'stable', path: 'foo/bar/baz') + end +end + +# diffs_project_merge_request GET /:project_id/merge_requests/:id/diffs(.:format) merge_requests#diffs +# automerge_project_merge_request GET /:project_id/merge_requests/:id/automerge(.:format) merge_requests#automerge +# automerge_check_project_merge_request GET /:project_id/merge_requests/:id/automerge_check(.:format) merge_requests#automerge_check +# raw_project_merge_request GET /:project_id/merge_requests/:id/raw(.:format) merge_requests#raw +# branch_from_project_merge_requests GET /:project_id/merge_requests/branch_from(.:format) merge_requests#branch_from +# branch_to_project_merge_requests GET /:project_id/merge_requests/branch_to(.:format) merge_requests#branch_to +# project_merge_requests GET /:project_id/merge_requests(.:format) merge_requests#index +# POST /:project_id/merge_requests(.:format) merge_requests#create +# new_project_merge_request GET /:project_id/merge_requests/new(.:format) merge_requests#new +# edit_project_merge_request GET /:project_id/merge_requests/:id/edit(.:format) merge_requests#edit +# project_merge_request GET /:project_id/merge_requests/:id(.:format) merge_requests#show +# PUT /:project_id/merge_requests/:id(.:format) merge_requests#update +# DELETE /:project_id/merge_requests/:id(.:format) merge_requests#destroy +describe MergeRequestsController, "routing" do + it "to #diffs" do + get("/gitlabhq/merge_requests/1/diffs").should route_to('merge_requests#diffs', project_id: 'gitlabhq', id: '1') + end + + it "to #automerge" do + get("/gitlabhq/merge_requests/1/automerge").should route_to('merge_requests#automerge', project_id: 'gitlabhq', id: '1') + end + + it "to #automerge_check" do + get("/gitlabhq/merge_requests/1/automerge_check").should route_to('merge_requests#automerge_check', project_id: 'gitlabhq', id: '1') + end + + it "to #raw" do + get("/gitlabhq/merge_requests/1/raw").should route_to('merge_requests#raw', project_id: 'gitlabhq', id: '1') + end + + it "to #branch_from" do + get("/gitlabhq/merge_requests/branch_from").should route_to('merge_requests#branch_from', project_id: 'gitlabhq') + end + + it "to #branch_to" do + get("/gitlabhq/merge_requests/branch_to").should route_to('merge_requests#branch_to', project_id: 'gitlabhq') + end + + it_behaves_like "RESTful project resources" do + let(:controller) { 'merge_requests' } + end +end + +# raw_project_snippet GET /:project_id/snippets/:id/raw(.:format) snippets#raw +# project_snippets GET /:project_id/snippets(.:format) snippets#index +# POST /:project_id/snippets(.:format) snippets#create +# new_project_snippet GET /:project_id/snippets/new(.:format) snippets#new +# edit_project_snippet GET /:project_id/snippets/:id/edit(.:format) snippets#edit +# project_snippet GET /:project_id/snippets/:id(.:format) snippets#show +# PUT /:project_id/snippets/:id(.:format) snippets#update +# DELETE /:project_id/snippets/:id(.:format) snippets#destroy +describe SnippetsController, "routing" do + it "to #raw" do + get("/gitlabhq/snippets/1/raw").should route_to('snippets#raw', project_id: 'gitlabhq', id: '1') + end + + it_behaves_like "RESTful project resources" do + let(:controller) { 'snippets' } + end +end + +# test_project_hook GET /:project_id/hooks/:id/test(.:format) hooks#test +# project_hooks GET /:project_id/hooks(.:format) hooks#index +# POST /:project_id/hooks(.:format) hooks#create +# project_hook DELETE /:project_id/hooks/:id(.:format) hooks#destroy +describe HooksController, "routing" do + it "to #test" do + get("/gitlabhq/hooks/1/test").should route_to('hooks#test', project_id: 'gitlabhq', id: '1') + end + + it_behaves_like "RESTful project resources" do + let(:actions) { [:index, :create, :destroy] } + let(:controller) { 'hooks' } + end +end + +# compare_project_commits GET /:project_id/commits/compare(.:format) commits#compare +# patch_project_commit GET /:project_id/commits/:id/patch(.:format) commits#patch +# project_commits GET /:project_id/commits(.:format) commits#index +# POST /:project_id/commits(.:format) commits#create +# new_project_commit GET /:project_id/commits/new(.:format) commits#new +# edit_project_commit GET /:project_id/commits/:id/edit(.:format) commits#edit +# project_commit GET /:project_id/commits/:id(.:format) commits#show +# PUT /:project_id/commits/:id(.:format) commits#update +# DELETE /:project_id/commits/:id(.:format) commits#destroy +describe CommitsController, "routing" do + it "to #compare" do + get("/gitlabhq/commits/compare").should route_to('commits#compare', project_id: 'gitlabhq') + end + + it "to #patch" do + get("/gitlabhq/commits/1/patch").should route_to('commits#patch', project_id: 'gitlabhq', id: '1') + end + + it_behaves_like "RESTful project resources" do + let(:controller) { 'commits' } + end +end + +# project_team_members GET /:project_id/team_members(.:format) team_members#index +# POST /:project_id/team_members(.:format) team_members#create +# new_project_team_member GET /:project_id/team_members/new(.:format) team_members#new +# edit_project_team_member GET /:project_id/team_members/:id/edit(.:format) team_members#edit +# project_team_member GET /:project_id/team_members/:id(.:format) team_members#show +# PUT /:project_id/team_members/:id(.:format) team_members#update +# DELETE /:project_id/team_members/:id(.:format) team_members#destroy +describe TeamMembersController, "routing" do + it_behaves_like "RESTful project resources" do + let(:controller) { 'team_members' } + end +end + +# project_milestones GET /:project_id/milestones(.:format) milestones#index +# POST /:project_id/milestones(.:format) milestones#create +# new_project_milestone GET /:project_id/milestones/new(.:format) milestones#new +# edit_project_milestone GET /:project_id/milestones/:id/edit(.:format) milestones#edit +# project_milestone GET /:project_id/milestones/:id(.:format) milestones#show +# PUT /:project_id/milestones/:id(.:format) milestones#update +# DELETE /:project_id/milestones/:id(.:format) milestones#destroy +describe MilestonesController, "routing" do + it_behaves_like "RESTful project resources" do + let(:controller) { 'milestones' } + end +end + +# project_labels GET /:project_id/labels(.:format) labels#index +describe LabelsController, "routing" do + it "to #index" do + get("/gitlabhq/labels").should route_to('labels#index', project_id: 'gitlabhq') + end +end + +# sort_project_issues POST /:project_id/issues/sort(.:format) issues#sort +# bulk_update_project_issues POST /:project_id/issues/bulk_update(.:format) issues#bulk_update +# search_project_issues GET /:project_id/issues/search(.:format) issues#search +# project_issues GET /:project_id/issues(.:format) issues#index +# POST /:project_id/issues(.:format) issues#create +# new_project_issue GET /:project_id/issues/new(.:format) issues#new +# edit_project_issue GET /:project_id/issues/:id/edit(.:format) issues#edit +# project_issue GET /:project_id/issues/:id(.:format) issues#show +# PUT /:project_id/issues/:id(.:format) issues#update +# DELETE /:project_id/issues/:id(.:format) issues#destroy +describe IssuesController, "routing" do + it "to #sort" do + post("/gitlabhq/issues/sort").should route_to('issues#sort', project_id: 'gitlabhq') + end + + it "to #bulk_update" do + post("/gitlabhq/issues/bulk_update").should route_to('issues#bulk_update', project_id: 'gitlabhq') + end + + it "to #search" do + get("/gitlabhq/issues/search").should route_to('issues#search', project_id: 'gitlabhq') + end + + it_behaves_like "RESTful project resources" do + let(:controller) { 'issues' } + end +end + +# preview_project_notes POST /:project_id/notes/preview(.:format) notes#preview +# project_notes GET /:project_id/notes(.:format) notes#index +# POST /:project_id/notes(.:format) notes#create +# project_note DELETE /:project_id/notes/:id(.:format) notes#destroy +describe NotesController, "routing" do + it "to #preview" do + post("/gitlabhq/notes/preview").should route_to('notes#preview', project_id: 'gitlabhq') + end + + it_behaves_like "RESTful project resources" do + let(:actions) { [:index, :create, :destroy] } + let(:controller) { 'notes' } + end +end diff --git a/spec/routing/routing_spec.rb b/spec/routing/routing_spec.rb index c93fb58a..cb8dbf37 100644 --- a/spec/routing/routing_spec.rb +++ b/spec/routing/routing_spec.rb @@ -1,58 +1,5 @@ require 'spec_helper' -# Shared examples for a resource inside a Project -# -# By default it tests all the default REST actions: index, create, new, edit, -# show, update, and destroy. You can remove actions by customizing the -# `actions` variable. -# -# It also expects a `controller` variable to be available which defines both -# the path to the resource as well as the controller name. -# -# Examples -# -# # Default behavior -# it_behaves_like "RESTful project resources" do -# let(:controller) { 'issues' } -# end -# -# # Customizing actions -# it_behaves_like "RESTful project resources" do -# let(:actions) { [:index] } -# let(:controller) { 'issues' } -# end -shared_examples "RESTful project resources" do - let(:actions) { [:index, :create, :new, :edit, :show, :update, :destroy] } - - it "to #index" do - get("/gitlabhq/#{controller}").should route_to("#{controller}#index", project_id: 'gitlabhq') if actions.include?(:index) - end - - it "to #create" do - post("/gitlabhq/#{controller}").should route_to("#{controller}#create", project_id: 'gitlabhq') if actions.include?(:create) - end - - it "to #new" do - get("/gitlabhq/#{controller}/new").should route_to("#{controller}#new", project_id: 'gitlabhq') if actions.include?(:new) - end - - it "to #edit" do - get("/gitlabhq/#{controller}/1/edit").should route_to("#{controller}#edit", project_id: 'gitlabhq', id: '1') if actions.include?(:edit) - end - - it "to #show" do - get("/gitlabhq/#{controller}/1").should route_to("#{controller}#show", project_id: 'gitlabhq', id: '1') if actions.include?(:show) - end - - it "to #update" do - put("/gitlabhq/#{controller}/1").should route_to("#{controller}#update", project_id: 'gitlabhq', id: '1') if actions.include?(:update) - end - - it "to #destroy" do - delete("/gitlabhq/#{controller}/1").should route_to("#{controller}#destroy", project_id: 'gitlabhq', id: '1') if actions.include?(:destroy) - end -end - # search GET /search(.:format) search#show describe SearchController, "routing" do it "to #show" do @@ -225,53 +172,6 @@ describe DashboardController, "routing" do end end -# projects POST /projects(.:format) projects#create -# new_project GET /projects/new(.:format) projects#new -# wall_project GET /:id/wall(.:format) projects#wall -# graph_project GET /:id/graph(.:format) projects#graph -# files_project GET /:id/files(.:format) projects#files -# edit_project GET /:id/edit(.:format) projects#edit -# project GET /:id(.:format) projects#show -# PUT /:id(.:format) projects#update -# DELETE /:id(.:format) projects#destroy -describe ProjectsController, "routing" do - it "to #create" do - post("/projects").should route_to('projects#create') - end - - it "to #new" do - get("/projects/new").should route_to('projects#new') - end - - it "to #wall" do - get("/gitlabhq/wall").should route_to('projects#wall', id: 'gitlabhq') - end - - it "to #graph" do - get("/gitlabhq/graph").should route_to('projects#graph', id: 'gitlabhq') - end - - it "to #files" do - get("/gitlabhq/files").should route_to('projects#files', id: 'gitlabhq') - end - - it "to #edit" do - get("/gitlabhq/edit").should route_to('projects#edit', id: 'gitlabhq') - end - - it "to #show" do - get("/gitlabhq").should route_to('projects#show', id: 'gitlabhq') - end - - it "to #update" do - put("/gitlabhq").should route_to('projects#update', id: 'gitlabhq') - end - - it "to #destroy" do - delete("/gitlabhq").should route_to('projects#destroy', id: 'gitlabhq') - end -end - # new_user_session GET /users/sign_in(.:format) devise/sessions#new # user_session POST /users/sign_in(.:format) devise/sessions#create # destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy @@ -284,300 +184,3 @@ end describe "Authentication", "routing" do # pending end - -# pages_project_wikis GET /:project_id/wikis/pages(.:format) wikis#pages -# history_project_wiki GET /:project_id/wikis/:id/history(.:format) wikis#history -# project_wikis POST /:project_id/wikis(.:format) wikis#create -# edit_project_wiki GET /:project_id/wikis/:id/edit(.:format) wikis#edit -# project_wiki GET /:project_id/wikis/:id(.:format) wikis#show -# DELETE /:project_id/wikis/:id(.:format) wikis#destroy -describe WikisController, "routing" do - it "to #pages" do - get("/gitlabhq/wikis/pages").should route_to('wikis#pages', project_id: 'gitlabhq') - end - - it "to #history" do - get("/gitlabhq/wikis/1/history").should route_to('wikis#history', project_id: 'gitlabhq', id: '1') - end - - it_behaves_like "RESTful project resources" do - let(:actions) { [:create, :edit, :show, :destroy] } - let(:controller) { 'wikis' } - end -end - -# branches_project_repository GET /:project_id/repository/branches(.:format) repositories#branches -# tags_project_repository GET /:project_id/repository/tags(.:format) repositories#tags -# archive_project_repository GET /:project_id/repository/archive(.:format) repositories#archive -# project_repository POST /:project_id/repository(.:format) repositories#create -# new_project_repository GET /:project_id/repository/new(.:format) repositories#new -# edit_project_repository GET /:project_id/repository/edit(.:format) repositories#edit -# GET /:project_id/repository(.:format) repositories#show -# PUT /:project_id/repository(.:format) repositories#update -# DELETE /:project_id/repository(.:format) repositories#destroy -describe RepositoriesController, "routing" do - it "to #branches" do - get("/gitlabhq/repository/branches").should route_to('repositories#branches', project_id: 'gitlabhq') - end - - it "to #tags" do - get("/gitlabhq/repository/tags").should route_to('repositories#tags', project_id: 'gitlabhq') - end - - it "to #archive" do - get("/gitlabhq/repository/archive").should route_to('repositories#archive', project_id: 'gitlabhq') - end - - it "to #create" do - post("/gitlabhq/repository").should route_to('repositories#create', project_id: 'gitlabhq') - end - - it "to #new" do - get("/gitlabhq/repository/new").should route_to('repositories#new', project_id: 'gitlabhq') - end - - it "to #edit" do - get("/gitlabhq/repository/edit").should route_to('repositories#edit', project_id: 'gitlabhq') - end - - it "to #show" do - get("/gitlabhq/repository").should route_to('repositories#show', project_id: 'gitlabhq') - end - - it "to #update" do - put("/gitlabhq/repository").should route_to('repositories#update', project_id: 'gitlabhq') - end - - it "to #destroy" do - delete("/gitlabhq/repository").should route_to('repositories#destroy', project_id: 'gitlabhq') - end -end - -# project_deploy_keys GET /:project_id/deploy_keys(.:format) deploy_keys#index -# POST /:project_id/deploy_keys(.:format) deploy_keys#create -# new_project_deploy_key GET /:project_id/deploy_keys/new(.:format) deploy_keys#new -# edit_project_deploy_key GET /:project_id/deploy_keys/:id/edit(.:format) deploy_keys#edit -# project_deploy_key GET /:project_id/deploy_keys/:id(.:format) deploy_keys#show -# PUT /:project_id/deploy_keys/:id(.:format) deploy_keys#update -# DELETE /:project_id/deploy_keys/:id(.:format) deploy_keys#destroy -describe DeployKeysController, "routing" do - it_behaves_like "RESTful project resources" do - let(:controller) { 'deploy_keys' } - end -end - -# project_protected_branches GET /:project_id/protected_branches(.:format) protected_branches#index -# POST /:project_id/protected_branches(.:format) protected_branches#create -# project_protected_branch DELETE /:project_id/protected_branches/:id(.:format) protected_branches#destroy -describe ProtectedBranchesController, "routing" do - it_behaves_like "RESTful project resources" do - let(:actions) { [:index, :create, :destroy] } - let(:controller) { 'protected_branches' } - end -end - -# switch_project_refs GET /:project_id/switch(.:format) refs#switch -# tree_project_ref GET /:project_id/:id/tree(.:format) refs#tree -# logs_tree_project_ref GET /:project_id/:id/logs_tree(.:format) refs#logs_tree -# blob_project_ref GET /:project_id/:id/blob(.:format) refs#blob -# tree_file_project_ref GET /:project_id/:id/tree/:path(.:format) refs#tree -# logs_file_project_ref GET /:project_id/:id/logs_tree/:path(.:format) refs#logs_tree -# blame_file_project_ref GET /:project_id/:id/blame/:path(.:format) refs#blame -describe RefsController, "routing" do - it "to #switch" do - get("/gitlabhq/switch").should route_to('refs#switch', project_id: 'gitlabhq') - end - - it "to #tree" do - get("/gitlabhq/stable/tree").should route_to('refs#tree', project_id: 'gitlabhq', id: 'stable') - get("/gitlabhq/stable/tree/foo/bar/baz").should route_to('refs#tree', project_id: 'gitlabhq', id: 'stable', path: 'foo/bar/baz') - end - - it "to #logs_tree" do - get("/gitlabhq/stable/logs_tree").should route_to('refs#logs_tree', project_id: 'gitlabhq', id: 'stable') - get("/gitlabhq/stable/logs_tree/foo/bar/baz").should route_to('refs#logs_tree', project_id: 'gitlabhq', id: 'stable', path: 'foo/bar/baz') - end - - it "to #blob" do - get("/gitlabhq/stable/blob").should route_to('refs#blob', project_id: 'gitlabhq', id: 'stable') - end - - it "to #blame" do - get("/gitlabhq/stable/blame/foo/bar/baz").should route_to('refs#blame', project_id: 'gitlabhq', id: 'stable', path: 'foo/bar/baz') - end -end - -# diffs_project_merge_request GET /:project_id/merge_requests/:id/diffs(.:format) merge_requests#diffs -# automerge_project_merge_request GET /:project_id/merge_requests/:id/automerge(.:format) merge_requests#automerge -# automerge_check_project_merge_request GET /:project_id/merge_requests/:id/automerge_check(.:format) merge_requests#automerge_check -# raw_project_merge_request GET /:project_id/merge_requests/:id/raw(.:format) merge_requests#raw -# branch_from_project_merge_requests GET /:project_id/merge_requests/branch_from(.:format) merge_requests#branch_from -# branch_to_project_merge_requests GET /:project_id/merge_requests/branch_to(.:format) merge_requests#branch_to -# project_merge_requests GET /:project_id/merge_requests(.:format) merge_requests#index -# POST /:project_id/merge_requests(.:format) merge_requests#create -# new_project_merge_request GET /:project_id/merge_requests/new(.:format) merge_requests#new -# edit_project_merge_request GET /:project_id/merge_requests/:id/edit(.:format) merge_requests#edit -# project_merge_request GET /:project_id/merge_requests/:id(.:format) merge_requests#show -# PUT /:project_id/merge_requests/:id(.:format) merge_requests#update -# DELETE /:project_id/merge_requests/:id(.:format) merge_requests#destroy -describe MergeRequestsController, "routing" do - it "to #diffs" do - get("/gitlabhq/merge_requests/1/diffs").should route_to('merge_requests#diffs', project_id: 'gitlabhq', id: '1') - end - - it "to #automerge" do - get("/gitlabhq/merge_requests/1/automerge").should route_to('merge_requests#automerge', project_id: 'gitlabhq', id: '1') - end - - it "to #automerge_check" do - get("/gitlabhq/merge_requests/1/automerge_check").should route_to('merge_requests#automerge_check', project_id: 'gitlabhq', id: '1') - end - - it "to #raw" do - get("/gitlabhq/merge_requests/1/raw").should route_to('merge_requests#raw', project_id: 'gitlabhq', id: '1') - end - - it "to #branch_from" do - get("/gitlabhq/merge_requests/branch_from").should route_to('merge_requests#branch_from', project_id: 'gitlabhq') - end - - it "to #branch_to" do - get("/gitlabhq/merge_requests/branch_to").should route_to('merge_requests#branch_to', project_id: 'gitlabhq') - end - - it_behaves_like "RESTful project resources" do - let(:controller) { 'merge_requests' } - end -end - -# raw_project_snippet GET /:project_id/snippets/:id/raw(.:format) snippets#raw -# project_snippets GET /:project_id/snippets(.:format) snippets#index -# POST /:project_id/snippets(.:format) snippets#create -# new_project_snippet GET /:project_id/snippets/new(.:format) snippets#new -# edit_project_snippet GET /:project_id/snippets/:id/edit(.:format) snippets#edit -# project_snippet GET /:project_id/snippets/:id(.:format) snippets#show -# PUT /:project_id/snippets/:id(.:format) snippets#update -# DELETE /:project_id/snippets/:id(.:format) snippets#destroy -describe SnippetsController, "routing" do - it "to #raw" do - get("/gitlabhq/snippets/1/raw").should route_to('snippets#raw', project_id: 'gitlabhq', id: '1') - end - - it_behaves_like "RESTful project resources" do - let(:controller) { 'snippets' } - end -end - -# test_project_hook GET /:project_id/hooks/:id/test(.:format) hooks#test -# project_hooks GET /:project_id/hooks(.:format) hooks#index -# POST /:project_id/hooks(.:format) hooks#create -# project_hook DELETE /:project_id/hooks/:id(.:format) hooks#destroy -describe HooksController, "routing" do - it "to #test" do - get("/gitlabhq/hooks/1/test").should route_to('hooks#test', project_id: 'gitlabhq', id: '1') - end - - it_behaves_like "RESTful project resources" do - let(:actions) { [:index, :create, :destroy] } - let(:controller) { 'hooks' } - end -end - -# compare_project_commits GET /:project_id/commits/compare(.:format) commits#compare -# patch_project_commit GET /:project_id/commits/:id/patch(.:format) commits#patch -# project_commits GET /:project_id/commits(.:format) commits#index -# POST /:project_id/commits(.:format) commits#create -# new_project_commit GET /:project_id/commits/new(.:format) commits#new -# edit_project_commit GET /:project_id/commits/:id/edit(.:format) commits#edit -# project_commit GET /:project_id/commits/:id(.:format) commits#show -# PUT /:project_id/commits/:id(.:format) commits#update -# DELETE /:project_id/commits/:id(.:format) commits#destroy -describe CommitsController, "routing" do - it "to #compare" do - get("/gitlabhq/commits/compare").should route_to('commits#compare', project_id: 'gitlabhq') - end - - it "to #patch" do - get("/gitlabhq/commits/1/patch").should route_to('commits#patch', project_id: 'gitlabhq', id: '1') - end - - it_behaves_like "RESTful project resources" do - let(:controller) { 'commits' } - end -end - -# project_team_members GET /:project_id/team_members(.:format) team_members#index -# POST /:project_id/team_members(.:format) team_members#create -# new_project_team_member GET /:project_id/team_members/new(.:format) team_members#new -# edit_project_team_member GET /:project_id/team_members/:id/edit(.:format) team_members#edit -# project_team_member GET /:project_id/team_members/:id(.:format) team_members#show -# PUT /:project_id/team_members/:id(.:format) team_members#update -# DELETE /:project_id/team_members/:id(.:format) team_members#destroy -describe TeamMembersController, "routing" do - it_behaves_like "RESTful project resources" do - let(:controller) { 'team_members' } - end -end - -# project_milestones GET /:project_id/milestones(.:format) milestones#index -# POST /:project_id/milestones(.:format) milestones#create -# new_project_milestone GET /:project_id/milestones/new(.:format) milestones#new -# edit_project_milestone GET /:project_id/milestones/:id/edit(.:format) milestones#edit -# project_milestone GET /:project_id/milestones/:id(.:format) milestones#show -# PUT /:project_id/milestones/:id(.:format) milestones#update -# DELETE /:project_id/milestones/:id(.:format) milestones#destroy -describe MilestonesController, "routing" do - it_behaves_like "RESTful project resources" do - let(:controller) { 'milestones' } - end -end - -# project_labels GET /:project_id/labels(.:format) labels#index -describe LabelsController, "routing" do - it "to #index" do - get("/gitlabhq/labels").should route_to('labels#index', project_id: 'gitlabhq') - end -end - -# sort_project_issues POST /:project_id/issues/sort(.:format) issues#sort -# bulk_update_project_issues POST /:project_id/issues/bulk_update(.:format) issues#bulk_update -# search_project_issues GET /:project_id/issues/search(.:format) issues#search -# project_issues GET /:project_id/issues(.:format) issues#index -# POST /:project_id/issues(.:format) issues#create -# new_project_issue GET /:project_id/issues/new(.:format) issues#new -# edit_project_issue GET /:project_id/issues/:id/edit(.:format) issues#edit -# project_issue GET /:project_id/issues/:id(.:format) issues#show -# PUT /:project_id/issues/:id(.:format) issues#update -# DELETE /:project_id/issues/:id(.:format) issues#destroy -describe IssuesController, "routing" do - it "to #sort" do - post("/gitlabhq/issues/sort").should route_to('issues#sort', project_id: 'gitlabhq') - end - - it "to #bulk_update" do - post("/gitlabhq/issues/bulk_update").should route_to('issues#bulk_update', project_id: 'gitlabhq') - end - - it "to #search" do - get("/gitlabhq/issues/search").should route_to('issues#search', project_id: 'gitlabhq') - end - - it_behaves_like "RESTful project resources" do - let(:controller) { 'issues' } - end -end - -# preview_project_notes POST /:project_id/notes/preview(.:format) notes#preview -# project_notes GET /:project_id/notes(.:format) notes#index -# POST /:project_id/notes(.:format) notes#create -# project_note DELETE /:project_id/notes/:id(.:format) notes#destroy -describe NotesController, "routing" do - it "to #preview" do - post("/gitlabhq/notes/preview").should route_to('notes#preview', project_id: 'gitlabhq') - end - - it_behaves_like "RESTful project resources" do - let(:actions) { [:index, :create, :destroy] } - let(:controller) { 'notes' } - end -end From 549c4c2202307608773a10d8ce9a7dc978537de4 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Sun, 16 Sep 2012 19:51:04 +0300 Subject: [PATCH 320/357] API attributes refactored --- lib/api/helpers.rb | 8 ++++++++ lib/api/issues.rb | 24 ++++++------------------ lib/api/milestones.rb | 18 ++++-------------- lib/api/projects.rb | 38 ++++++++++++++++++-------------------- 4 files changed, 36 insertions(+), 52 deletions(-) diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb index 054eb2d3..d0fc8c43 100644 --- a/lib/api/helpers.rb +++ b/lib/api/helpers.rb @@ -28,6 +28,14 @@ module Gitlab end end + def existed_attributes(keys) + attrs = {} + keys.each do |key| + attrs[key] = params[key] if params[key].present? + end + attrs + end + # error helpers def forbidden! diff --git a/lib/api/issues.rb b/lib/api/issues.rb index 659f065e..b177a4a8 100644 --- a/lib/api/issues.rb +++ b/lib/api/issues.rb @@ -48,15 +48,10 @@ module Gitlab # Example Request: # POST /projects/:id/issues post ":id/issues" do - @issue = user_project.issues.new( - title: params[:title], - description: params[:description], - assignee_id: params[:assignee_id], - milestone_id: params[:milestone_id], - label_list: params[:labels] - ) + attrs = existed_attributes [:title, :description, :assignee_id, :milestone_id] + attrs[:label_list] = params[:labels] if params[:labels].present? + @issue = user_project.issues.new attrs @issue.author = current_user - if @issue.save present @issue, with: Entities::Issue else @@ -81,16 +76,9 @@ module Gitlab @issue = user_project.issues.find(params[:issue_id]) authorize! :modify_issue, @issue - parameters = { - title: (params[:title] || @issue.title), - description: (params[:description] || @issue.description), - assignee_id: (params[:assignee_id] || @issue.assignee_id), - milestone_id: (params[:milestone_id] || @issue.milestone_id), - label_list: (params[:labels] || @issue.label_list), - closed: (params[:closed] || @issue.closed) - } - - if @issue.update_attributes(parameters) + attrs = existed_attributes [:title, :description, :assignee_id, :milestone_id, :closed] + attrs[:label_list] = params[:labels] if params[:labels].present? + if @issue.update_attributes attrs present @issue, with: Entities::Issue else not_found! diff --git a/lib/api/milestones.rb b/lib/api/milestones.rb index 4b0424ba..d5d3347a 100644 --- a/lib/api/milestones.rb +++ b/lib/api/milestones.rb @@ -36,12 +36,8 @@ module Gitlab # Example Request: # POST /projects/:id/milestones post ":id/milestones" do - @milestone = user_project.milestones.new( - title: params[:title], - description: params[:description], - due_date: params[:due_date] - ) - + attrs = existed_attributes [:title, :description, :due_date] + @milestone = user_project.milestones.new attrs if @milestone.save present @milestone, with: Entities::Milestone else @@ -64,14 +60,8 @@ module Gitlab authorize! :admin_milestone, user_project @milestone = user_project.milestones.find(params[:milestone_id]) - parameters = { - title: (params[:title] || @milestone.title), - description: (params[:description] || @milestone.description), - due_date: (params[:due_date] || @milestone.due_date), - closed: (params[:closed] || @milestone.closed) - } - - if @milestone.update_attributes(parameters) + attrs = existed_attributes [:title, :description, :due_date, :closed] + if @milestone.update_attributes attrs present @milestone, with: Entities::Milestone else not_found! diff --git a/lib/api/projects.rb b/lib/api/projects.rb index cf23dc5f..4a263472 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -40,13 +40,16 @@ module Gitlab post do params[:code] ||= params[:name] params[:path] ||= params[:name] - project_attrs = {} - params.each_pair do |k ,v| - if Project.attribute_names.include? k - project_attrs[k] = v - end - end - @project = Project.create_by_user(project_attrs, current_user) + attrs = existed_attributes [:code, + :path, + :name, + :description, + :default_branch, + :issues_enabled, + :wall_enabled, + :merge_requests_enabled, + :wiki_enabled] + @project = Project.create_by_user(attrs, current_user) if @project.saved? present @project, with: Entities::Project else @@ -204,12 +207,10 @@ module Gitlab # Example Request: # POST /projects/:id/snippets post ":id/snippets" do - @snippet = user_project.snippets.new( - title: params[:title], - file_name: params[:file_name], - expires_at: params[:lifetime], - content: params[:code] - ) + attrs = existed_attributes [:title, :file_name] + attrs[:expires_at] = params[:lifetime] if params[:lifetime].present? + attrs[:content] = params[:code] if params[:code].present? + @snippet = user_project.snippets.new attrs @snippet.author = current_user if @snippet.save @@ -234,14 +235,11 @@ module Gitlab @snippet = user_project.snippets.find(params[:snippet_id]) authorize! :modify_snippet, @snippet - parameters = { - title: (params[:title] || @snippet.title), - file_name: (params[:file_name] || @snippet.file_name), - expires_at: (params[:lifetime] || @snippet.expires_at), - content: (params[:code] || @snippet.content) - } + attrs = existed_attributes [:title, :file_name] + attrs[:expires_at] = params[:lifetime] if params[:lifetime].present? + attrs[:content] = params[:code] if params[:code].present? - if @snippet.update_attributes(parameters) + if @snippet.update_attributes attrs present @snippet, with: Entities::ProjectSnippet else not_found! From b896880eb46c2b8167e2252d3656b5e38e35f6ec Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Sun, 16 Sep 2012 20:08:57 +0300 Subject: [PATCH 321/357] Method name changed --- lib/api/helpers.rb | 2 +- lib/api/issues.rb | 4 ++-- lib/api/milestones.rb | 4 ++-- lib/api/projects.rb | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb index d0fc8c43..9a08b995 100644 --- a/lib/api/helpers.rb +++ b/lib/api/helpers.rb @@ -28,7 +28,7 @@ module Gitlab end end - def existed_attributes(keys) + def attributes_for_keys(keys) attrs = {} keys.each do |key| attrs[key] = params[key] if params[key].present? diff --git a/lib/api/issues.rb b/lib/api/issues.rb index b177a4a8..4ee2d11f 100644 --- a/lib/api/issues.rb +++ b/lib/api/issues.rb @@ -48,7 +48,7 @@ module Gitlab # Example Request: # POST /projects/:id/issues post ":id/issues" do - attrs = existed_attributes [:title, :description, :assignee_id, :milestone_id] + attrs = attributes_for_keys [:title, :description, :assignee_id, :milestone_id] attrs[:label_list] = params[:labels] if params[:labels].present? @issue = user_project.issues.new attrs @issue.author = current_user @@ -76,7 +76,7 @@ module Gitlab @issue = user_project.issues.find(params[:issue_id]) authorize! :modify_issue, @issue - attrs = existed_attributes [:title, :description, :assignee_id, :milestone_id, :closed] + attrs = attributes_for_keys [:title, :description, :assignee_id, :milestone_id, :closed] attrs[:label_list] = params[:labels] if params[:labels].present? if @issue.update_attributes attrs present @issue, with: Entities::Issue diff --git a/lib/api/milestones.rb b/lib/api/milestones.rb index d5d3347a..daaff940 100644 --- a/lib/api/milestones.rb +++ b/lib/api/milestones.rb @@ -36,7 +36,7 @@ module Gitlab # Example Request: # POST /projects/:id/milestones post ":id/milestones" do - attrs = existed_attributes [:title, :description, :due_date] + attrs = attributes_for_keys [:title, :description, :due_date] @milestone = user_project.milestones.new attrs if @milestone.save present @milestone, with: Entities::Milestone @@ -60,7 +60,7 @@ module Gitlab authorize! :admin_milestone, user_project @milestone = user_project.milestones.find(params[:milestone_id]) - attrs = existed_attributes [:title, :description, :due_date, :closed] + attrs = attributes_for_keys [:title, :description, :due_date, :closed] if @milestone.update_attributes attrs present @milestone, with: Entities::Milestone else diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 4a263472..1d9004f8 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -40,7 +40,7 @@ module Gitlab post do params[:code] ||= params[:name] params[:path] ||= params[:name] - attrs = existed_attributes [:code, + attrs = attributes_for_keys [:code, :path, :name, :description, @@ -207,7 +207,7 @@ module Gitlab # Example Request: # POST /projects/:id/snippets post ":id/snippets" do - attrs = existed_attributes [:title, :file_name] + attrs = attributes_for_keys [:title, :file_name] attrs[:expires_at] = params[:lifetime] if params[:lifetime].present? attrs[:content] = params[:code] if params[:code].present? @snippet = user_project.snippets.new attrs @@ -235,7 +235,7 @@ module Gitlab @snippet = user_project.snippets.find(params[:snippet_id]) authorize! :modify_snippet, @snippet - attrs = existed_attributes [:title, :file_name] + attrs = attributes_for_keys [:title, :file_name] attrs[:expires_at] = params[:lifetime] if params[:lifetime].present? attrs[:content] = params[:code] if params[:code].present? From c83af0dfe7b82c355eb115a35bfee2a98146b64d Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Sun, 16 Sep 2012 22:44:20 +0300 Subject: [PATCH 322/357] Uses attributes_for_keys --- lib/api/keys.rb | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/api/keys.rb b/lib/api/keys.rb index d58c7caf..4c302727 100644 --- a/lib/api/keys.rb +++ b/lib/api/keys.rb @@ -26,10 +26,8 @@ module Gitlab # Example Request: # POST /keys post do - key = current_user.keys.new( - title: params[:title], - key: params[:key] - ) + attrs = attributes_for_keys [:title, :key] + key = current_user.keys.new attrs if key.save present key, with: Entities::Key else From aaa916f15c9bde139058888be660705390cc02db Mon Sep 17 00:00:00 2001 From: Saito Date: Mon, 17 Sep 2012 18:36:23 +0800 Subject: [PATCH 323/357] use high level api and compatibility with Passenger --- lib/gitlab/backend/grack_auth.rb | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/gitlab/backend/grack_auth.rb b/lib/gitlab/backend/grack_auth.rb index 4f77c327..43a75cc3 100644 --- a/lib/gitlab/backend/grack_auth.rb +++ b/lib/gitlab/backend/grack_auth.rb @@ -12,21 +12,22 @@ module Grack # Pass Gitolite update hook ENV['GL_BYPASS_UPDATE_HOOK'] = "true" - # Need this patch because the rails mount - @env['PATH_INFO'] = @env['REQUEST_PATH'] + # Need this patch due to the rails mount + @env['PATH_INFO'] = @request.path + @env['SCRIPT_NAME'] = "" # Find project by PATH_INFO from env - if m = /^\/([\w-]+).git/.match(@env['PATH_INFO']).to_a + if m = /^\/([\w-]+).git/.match(@request.path_info).to_a return false unless project = Project.find_by_path(m.last) end # Git upload and receive - if @env['REQUEST_METHOD'] == 'GET' + if @request.get? true - elsif @env['REQUEST_METHOD'] == 'POST' - if @env['REQUEST_URI'].end_with?('git-upload-pack') + elsif @request.post? + if @request.path_info.end_with?('git-upload-pack') return project.dev_access_for?(user) - elsif @env['REQUEST_URI'].end_with?('git-receive-pack') + elsif @request.path_info.end_with?('git-receive-pack') if project.protected_branches.map(&:name).include?(current_ref) project.master_access_for?(user) else From 9c0f6e87146bd9b55cdf84e546e7645b91f99dda Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Mon, 17 Sep 2012 20:18:49 +0300 Subject: [PATCH 324/357] Small fixes added --- doc/api/keys.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/api/keys.md b/doc/api/keys.md index 8106eb8a..d22b22e2 100644 --- a/doc/api/keys.md +++ b/doc/api/keys.md @@ -44,7 +44,7 @@ Parameters: "key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4 596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4 soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=" - } +} ``` ## Add key @@ -56,8 +56,8 @@ POST /keys Parameters: -+ `title` (required) - new SSH Key -+ `key` (optional) - new SSH key's title ++ `title` (required) - new SSH Key's title ++ `key` (required) - new SSH key Will return created key with status `201 Created` on success, or `404 Not found` on fail. From 0358c2ebdb7e56694872ceac61f820f39fb2c17b Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Mon, 17 Sep 2012 20:42:18 +0300 Subject: [PATCH 325/357] CONTRIBUTING.md copied from wiki pages --- CONTRIBUTING.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..487aa193 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,30 @@ +## Contribute to Gitlab + +If you want to contribute to Gitlab, follow this process: + +1. Fork the project +2. Create a feature branch +3. Code +4. Create a pull request + +We only accept pull requests if: + +* Your code has proper tests and all tests pass +* Your code can be merged w/o problems +* It wont broke existing functionality +* Its a quality code +* We like it :) + +## [You may need a developer VM](https://github.com/gitlabhq/developer-vm) + +## Running tests + +To run the specs for Gitlab, you need to run seeds for test db. + + cd gitlabhq + rake db:seed_fu RAILS_ENV=test + +Then you can run the test suite with rake: + + rake gitlab:test + From aeb87d8f1dc9de89e8ff9ff367c8d50e7dc817de Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Mon, 17 Sep 2012 21:38:08 +0300 Subject: [PATCH 326/357] Gitlab => GitLab --- CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 487aa193..9041530d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ -## Contribute to Gitlab +## Contribute to GitLab -If you want to contribute to Gitlab, follow this process: +If you want to contribute to GitLab, follow this process: 1. Fork the project 2. Create a feature branch @@ -19,7 +19,7 @@ We only accept pull requests if: ## Running tests -To run the specs for Gitlab, you need to run seeds for test db. +To run the specs for GitLab, you need to run seeds for test db. cd gitlabhq rake db:seed_fu RAILS_ENV=test From 249cb19d96cff52f70f930fbf13ee23ae5d66d3e Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 18 Sep 2012 08:54:17 +0300 Subject: [PATCH 327/357] Fix project update. Make slim form only for reversed comments --- app/assets/javascripts/notes.js | 15 ++++++++++----- app/assets/stylesheets/sections/notes.scss | 10 ---------- app/views/notes/_common_form.html.haml | 2 +- .../notes/_reversed_notes_with_form.html.haml | 2 +- app/views/projects/edit.html.haml | 6 +++--- 5 files changed, 15 insertions(+), 20 deletions(-) diff --git a/app/assets/javascripts/notes.js b/app/assets/javascripts/notes.js index 81bb1d6d..4a55b41b 100644 --- a/app/assets/javascripts/notes.js +++ b/app/assets/javascripts/notes.js @@ -34,16 +34,21 @@ var NoteList = { disableButtonIfEmptyField(".note-text", ".submit_note"); - $(".note-text").on("focus", function(){ - $(this).css("height", "80px"); - $('.note_advanced_opts').show(); - }); - $("#note_attachment").change(function(e){ var val = $('.input-file').val(); var filename = val.replace(/^.*[\\\/]/, ''); $(".file_name").text(filename); }); + + if(this.reversed) { + var textarea = $(".note-text"); + $('.note_advanced_opts').hide(); + textarea.css("height", "40px"); + textarea.on("focus", function(){ + $(this).css("height", "80px"); + $('.note_advanced_opts').show(); + }); + } }, diff --git a/app/assets/stylesheets/sections/notes.scss b/app/assets/stylesheets/sections/notes.scss index 148807d6..5fc6c96e 100644 --- a/app/assets/stylesheets/sections/notes.scss +++ b/app/assets/stylesheets/sections/notes.scss @@ -10,13 +10,6 @@ padding:0px; } -#new-notes-list:not(.reversed) { - border-top:1px solid #aaa; -} -#new-notes-list.reversed { - border-bottom:1px solid #ccc; -} - .issue_notes, .wiki_notes { .note_content { @@ -33,9 +26,6 @@ } #new_note { - .note-text { - height:40px; - } .attach_holder { display:none; } diff --git a/app/views/notes/_common_form.html.haml b/app/views/notes/_common_form.html.haml index 6d559cfc..fc6e3c7e 100644 --- a/app/views/notes/_common_form.html.haml +++ b/app/views/notes/_common_form.html.haml @@ -14,7 +14,7 @@ .right Comments are parsed with #{link_to "GitLab Flavored Markdown", help_markdown_path, target: '_blank'}. .clearfix - .row.note_advanced_opts.hide + .row.note_advanced_opts .span3 = f.submit 'Add Comment', class: "btn success submit_note grouped", id: "submit_note" = link_to 'Preview', preview_project_notes_path(@project), class: 'btn grouped', id: 'preview-link' diff --git a/app/views/notes/_reversed_notes_with_form.html.haml b/app/views/notes/_reversed_notes_with_form.html.haml index 05f01847..24d59924 100644 --- a/app/views/notes/_reversed_notes_with_form.html.haml +++ b/app/views/notes/_reversed_notes_with_form.html.haml @@ -8,4 +8,4 @@ :javascript $(function(){ NoteList.init("#{tid}", "#{tt}", "#{project_notes_path(@project)}"); - }); \ No newline at end of file + }); diff --git a/app/views/projects/edit.html.haml b/app/views/projects/edit.html.haml index 987d43ec..fdd537da 100644 --- a/app/views/projects/edit.html.haml +++ b/app/views/projects/edit.html.haml @@ -3,10 +3,10 @@ %h3.page_title Edit Project %hr = render "projects/form" -%div.ajax_loader.hide +%div.save-project-loader.hide %center - %div.padded= image_tag "ajax_loader.gif" - %h3.prepend-top Saving project & repository. Please wait... + = image_tag "ajax_loader.gif" + %h3 Saving project. Please wait a few minutes :javascript $(function(){ new Projects(); }); From 64e76a87aaddf76c3b3a487c5eb39e4490e4724f Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 18 Sep 2012 09:17:55 +0300 Subject: [PATCH 328/357] Notes votes: use icons instead of borders. Removed unnecessary padding --- app/assets/stylesheets/common.scss | 12 ++++++++++++ app/assets/stylesheets/sections/notes.scss | 10 +--------- app/views/notes/_note.html.haml | 10 +++++++++- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index fda8d54c..ffabdf8b 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -158,6 +158,18 @@ span.update-author { padding: 6px; } } + + &.label-success { + background-color: #8D8; + color: #333; + text-shadow: 0 1px 1px white; + } + + &.label-error { + background-color: #D88; + color: #333; + text-shadow: 0 1px 1px white; + } } .event_label { diff --git a/app/assets/stylesheets/sections/notes.scss b/app/assets/stylesheets/sections/notes.scss index e14a0828..267a9b43 100644 --- a/app/assets/stylesheets/sections/notes.scss +++ b/app/assets/stylesheets/sections/notes.scss @@ -73,15 +73,7 @@ /* mark vote notes */ .voting_notes .note { - padding: 8px 0 8px 12px; - &.upvote { - padding-left: 8px; - border-left: 4px solid #468847; - } - &.downvote { - padding-left: 8px; - border-left: 4px solid #B94A48; - } + padding: 8px 0; } .notes-status { diff --git a/app/views/notes/_note.html.haml b/app/views/notes/_note.html.haml index 23145f12..5234e55d 100644 --- a/app/views/notes/_note.html.haml +++ b/app/views/notes/_note.html.haml @@ -6,8 +6,16 @@ %cite.cgray = time_ago_in_words(note.updated_at) ago + - if note.upvote? + %span.label.label-success + %i.icon-thumbs-up + \+1 + - if note.downvote? + %span.label.label-error + %i.icon-thumbs-down + \-1 - if(note.author_id == current_user.id) || can?(current_user, :admin_note, @project) - = link_to [@project, note], confirm: 'Are you sure?', method: :delete, remote: true, class: "cred delete-note btn very_small" do + = link_to [@project, note], confirm: 'Are you sure?', method: :delete, remote: true, class: "cred delete-note btn very_small" do %i.icon-trash Remove From aaec545a677f08a39a49d40db2e454e57ed72cbe Mon Sep 17 00:00:00 2001 From: randx Date: Tue, 18 Sep 2012 20:50:34 +0300 Subject: [PATCH 329/357] Gitlab styled tabs. Better ref selector --- .../stylesheets/gitlab_bootstrap/common.scss | 24 +++++++++++++++- app/assets/stylesheets/ref_select.scss | 28 +++++++++++++------ 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/app/assets/stylesheets/gitlab_bootstrap/common.scss b/app/assets/stylesheets/gitlab_bootstrap/common.scss index cd7145c9..f4fbd223 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/common.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/common.scss @@ -33,7 +33,29 @@ .nav-pills a:hover { background-color:#888; } .nav-pills .active a { background-color: $style_color; } .nav-tabs > li > a, .nav-pills > li > a { color:$style_color; } -.nav-tabs > .active > a { font-weight:bold; } +.nav.nav-tabs { + li { + > a { + padding:8px 20px; + margin-right: 7px; + border-color: #EEE; + color:#888; + border-bottom: 1px solid #ddd; + .badge { + background-color: #eee; + color:#888; + text-shadow:0 1px 1px #fff; + } + } + &.active { + > a { + border-color: #CCC; + border-bottom: 1px solid #fff; + color:#333; + } + } + } +} /** ALERT MESSAGES **/ .alert-message { @extend .alert; } diff --git a/app/assets/stylesheets/ref_select.scss b/app/assets/stylesheets/ref_select.scss index 5b52e11b..9f66136f 100644 --- a/app/assets/stylesheets/ref_select.scss +++ b/app/assets/stylesheets/ref_select.scss @@ -12,35 +12,45 @@ width:120px; } -.project-refs-form .chzn-container { +.project-refs-form .chzn-container { position: relative; top: 0; left: 0; margin-right: 10px; - .chzn-drop { + .chzn-drop { margin:7px 0; - border: 1px solid #CCC; - min-width: 300px; + min-width: 400px; + border: 2px solid $blue_link; + @include border-radius(4px); - .chzn-results { + .chzn-results { max-height:300px; + + .group-result { + color: $blue_link; + } + .active-result { + &.highlighted { + background: $blue_link; + } + } } .chzn-search input { - min-width:200px; + min-width:300px; } } - .chzn-single { + .chzn-single { @include bg-gray-gradient; - div { + div { background:transparent; border-left:none; } - span { + span { font-weight: normal; } } From 4ecf23d2ad4f401c94fabeb061cc36c487276d33 Mon Sep 17 00:00:00 2001 From: randx Date: Tue, 18 Sep 2012 21:05:33 +0300 Subject: [PATCH 330/357] Fix ref select search width --- app/assets/stylesheets/ref_select.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/stylesheets/ref_select.scss b/app/assets/stylesheets/ref_select.scss index 9f66136f..ed6760f1 100644 --- a/app/assets/stylesheets/ref_select.scss +++ b/app/assets/stylesheets/ref_select.scss @@ -38,7 +38,7 @@ } .chzn-search input { - min-width:300px; + min-width:365px; } } From bfed07ee20d5df75e444994912edda48839acbac Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 18 Sep 2012 21:45:09 -0400 Subject: [PATCH 331/357] Add an initializer to allow custom Resque configs --- config/initializers/resque.rb | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 config/initializers/resque.rb diff --git a/config/initializers/resque.rb b/config/initializers/resque.rb new file mode 100644 index 00000000..b333ceee --- /dev/null +++ b/config/initializers/resque.rb @@ -0,0 +1,8 @@ +rails_root = ENV['RAILS_ROOT'] || File.dirname(__FILE__) + '/../..' +rails_env = ENV['RAILS_ENV'] || 'development' +config_file = File.join(rails_root, 'config', 'resque.yml') + +if File.exists?(config_file) + resque_config = YAML.load_file(config_file) + Resque.redis = resque_config[rails_env] +end From 259ca982da2f2962773ef797fabe6d6641689f5e Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 18 Sep 2012 21:53:27 -0400 Subject: [PATCH 332/357] Add docs for customizing Redis, add example file --- config/resque.yml.example | 3 +++ doc/installation.md | 9 ++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 config/resque.yml.example diff --git a/config/resque.yml.example b/config/resque.yml.example new file mode 100644 index 00000000..cd3d4874 --- /dev/null +++ b/config/resque.yml.example @@ -0,0 +1,3 @@ +development: localhost:6379 +test: localhost:6379 +production: redis.example.com:6379 diff --git a/doc/installation.md b/doc/installation.md index 345d801d..865cde3c 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -251,6 +251,14 @@ You can login via web using admin generated with setup: # if you run this as root /home/gitlab/gitlab/tmp/pids/resque_worker.pid will be owned by root # causing the resque worker not to start via init script on next boot/service restart +## Customizing Resque's Redis connection + +If you'd like Resque to connect to a Redis server on a non-standard port or on +a different host, you can configure its connection string in the +**config/resque.yml** file: + + production: redis.example.com:6379 + **Ok - we have a working application now. ** **But keep going - there are some things that should be done ** @@ -276,7 +284,6 @@ You can login via web using admin generated with setup: # of the host serving GitLab. sudo vim /etc/nginx/sites-enabled/gitlab - # Restart nginx: /etc/init.d/nginx restart From bf625b7c92d5f07516339f53fdf391185df8547c Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 19 Sep 2012 09:14:07 +0300 Subject: [PATCH 333/357] polishing UI a bit. Added footer links for dashboard --- app/assets/stylesheets/common.scss | 20 +++++++ .../stylesheets/gitlab_bootstrap/common.scss | 10 ++++ app/assets/stylesheets/sections/issues.scss | 55 ++++++++++--------- .../stylesheets/sections/merge_requests.scss | 55 +++++++++---------- app/views/admin/resque/show.html.haml | 6 +- app/views/dashboard/index.html.haml | 8 ++- app/views/events/_event_last_push.html.haml | 2 +- app/views/issues/_show.html.haml | 2 +- app/views/issues/index.html.haml | 2 +- app/views/labels/_label.html.haml | 9 ++- app/views/search/show.html.haml | 19 ++++--- 11 files changed, 117 insertions(+), 71 deletions(-) diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index ffabdf8b..c5b37916 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -145,6 +145,19 @@ span.update-author { .label { background-color: #474D57; + &.label-tag { + background: none; + border: none; + padding:4px 6px; + color:#444; + text-shadow:0 0 1px #fff; + + &.grouped { + float: left; + margin-right: 6px; + padding: 6px; + } + } &.label-issue { background-color: #eee; border: 1px solid #ccc; @@ -722,3 +735,10 @@ li.note { padding: 6px 20px; margin-right: 12px; } + +.gitlab-promo { + a { + color:#aaa; + margin-right: 30px; + } +} diff --git a/app/assets/stylesheets/gitlab_bootstrap/common.scss b/app/assets/stylesheets/gitlab_bootstrap/common.scss index f4fbd223..b9459ee6 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/common.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/common.scss @@ -72,3 +72,13 @@ img.lil_av { padding-left: 4px; padding-right:3px; } /** HELPERS **/ .nothing_here_message { text-align:center; padding:20px; color:#777; } p.slead { color:#456; font-size:16px; margin-bottom: 12px; font-weight: 200; line-height: 24px; } + +/** FORMS **/ +input[type='search'].search-text-input { + background-image: url("icon-search.png"); + background-repeat: no-repeat; + background-position: 10px; + padding-left:25px; + @include border-radius(4px); + border:1px solid #ccc; +} diff --git a/app/assets/stylesheets/sections/issues.scss b/app/assets/stylesheets/sections/issues.scss index 230a7aea..10def510 100644 --- a/app/assets/stylesheets/sections/issues.scss +++ b/app/assets/stylesheets/sections/issues.scss @@ -1,55 +1,55 @@ -.issue_form_box { +.issue_form_box { @extend .main_box; - .issue_title { + .issue_title { @extend .top_box_content; - .clearfix { - margin-bottom:0px; - input { + .clearfix { + margin-bottom:0px; + input { @extend .span8; } } } - .issue_middle_block { + .issue_middle_block { @extend .middle_box_content; height:30px; - .issue_assignee { + .issue_assignee { @extend .span6; float:left; } - .issue_milestone { + .issue_milestone { @extend .span4; float:left; } } - .issue_description { + .issue_description { @extend .bottom_box_content; } } -.issues_table { - .issue { +.issues_table { + .issue { padding:7px 10px; - .issue_check { + .issue_check { float:left; padding: 8px 0; padding-right: 8px; min-width: 15px; } - p { + p { padding-top:0; padding-bottom:2px; } - img.avatar { + img.avatar { width:32px; margin-top:4px; } } } -input.check_all_issues { +input.check_all_issues { float:left; padding: 0; margin:0; @@ -59,8 +59,8 @@ input.check_all_issues { height: 22px; } -.issues_content { - .title { +.issues_content { + .title { height: 40px; } } @@ -70,30 +70,30 @@ input.check_all_issues { @media (min-width: 1200px) { .issues_filters select { width:220px; } } -#issues-table-holder { - .issues_filters { - form { +#issues-table-holder { + .issues_filters { + form { padding:0; margin:0; margin-top:7px } - } + } - .issues_bulk_update { + .issues_bulk_update { margin: 0; - form { + form { padding:0; margin:0; margin-top:7px } - .update_selected_issues { + .update_selected_issues { position:relative; top:-2px; margin-left:4px; float:left; } - - .update_issues_text { + + .update_issues_text { padding:3px; line-height: 18px; float:left; @@ -101,10 +101,11 @@ input.check_all_issues { } } -#update_status { +#update_status { width:100px; } + /** * Milestones list * diff --git a/app/assets/stylesheets/sections/merge_requests.scss b/app/assets/stylesheets/sections/merge_requests.scss index 73171915..c932f0fc 100644 --- a/app/assets/stylesheets/sections/merge_requests.scss +++ b/app/assets/stylesheets/sections/merge_requests.scss @@ -1,13 +1,13 @@ -/** +/** * MR form * */ -.mr_branch_box { +.mr_branch_box { @extend .ui-box; margin-bottom:20px; - .body { + .body { background:#f1f1f1; } @@ -17,19 +17,19 @@ * MR -> show: Automerge widget * */ -.automerge_widget { - &.can_be_merged { +.automerge_widget { + &.can_be_merged { background: #DFF0D8; } - form { + form { margin-bottom:0; - .clearfix { + .clearfix { margin-bottom:0; } } - .accept_group { + .accept_group { float:left; border: 1px solid #ADA; padding: 2px; @@ -37,29 +37,29 @@ border-radius: 5px; background: #CEB; - .accept_merge_request { + .accept_merge_request { font-size:13px; float:left; } - .remove_branch_holder { + .remove_branch_holder { margin-left:20px; margin-right:10px; float:left; } - label { + label { color:#444; } } - .how_to_merge_link { + .how_to_merge_link { @extend .primary; } } -.mr_nav_tabs { - li { - a { +.mr_nav_tabs { + li { + a { font-weight:bold; padding:8px 20px; text-align:center; @@ -67,19 +67,19 @@ } } -li.merge_request { +li.merge_request { padding:7px 10px; - img.avatar { + img.avatar { width: 32px; margin-top: 4px; } - p { + p { padding: 0px; padding-bottom: 2px; } } -.merge_in_progress { +.merge_in_progress { @extend .padded; @extend .append-bottom-10; } @@ -88,22 +88,21 @@ li.merge_request { @include round-borders-all(4px); padding:2px 4px; border:none; - font-size:13px; + font-size:14px; background: #474D57; color:#fff; - font-weight:bold; - font-family: monospace; + font-family: 'Menlo', 'Liberation Mono', 'Consolas', 'Courier New', 'andale mono','lucida console',monospace; } -.mr_source_commit, -.mr_target_commit { - .commit { +.mr_source_commit, +.mr_target_commit { + .commit { margin:0; padding:0; padding: 5px; margin-bottom: 5px; .avatar { position:relative } - .row_title { + .row_title { color:#444; } .commit-author-name, @@ -113,12 +112,12 @@ li.merge_request { display:none; } list-style:none; - &:hover { + &:hover { background:none; } } } -.mr_direction_tip { +.mr_direction_tip { margin-top:40px } diff --git a/app/views/admin/resque/show.html.haml b/app/views/admin/resque/show.html.haml index d889a5d0..8850e378 100644 --- a/app/views/admin/resque/show.html.haml +++ b/app/views/admin/resque/show.html.haml @@ -1,2 +1,4 @@ -%h3 Resque -%iframe{src: resque_url, width: 1168, height: 600, style: "border: none"} +%h3.page_title Resque +%br +.ui-box + %iframe{src: resque_url, width: '100%', height: 600, style: "border: none"} diff --git a/app/views/dashboard/index.html.haml b/app/views/dashboard/index.html.haml index e13640fb..791c18e3 100644 --- a/app/views/dashboard/index.html.haml +++ b/app/views/dashboard/index.html.haml @@ -31,13 +31,19 @@ %span= project_last_activity(project) .bottom= paginate @projects, theme: "gitlab" - %hr %div %span.rss-icon = link_to dashboard_path(:atom, { private_token: current_user.private_token }) do = image_tag "rss_ui.png", title: "feed" %strong News Feed + %hr + .gitlab-promo + = link_to "Homepage", "http://gitlabhq.com" + = link_to "Blog", "http://blog.gitlabhq.com" + = link_to "@gitlabhq", "https://twitter.com/gitlabhq" + + - else %h3.nothing_here_message There are no projects you have access to. %br diff --git a/app/views/events/_event_last_push.html.haml b/app/views/events/_event_last_push.html.haml index 66e14936..aa1d28f2 100644 --- a/app/views/events/_event_last_push.html.haml +++ b/app/views/events/_event_last_push.html.haml @@ -2,7 +2,7 @@ .event_lp %div = image_tag gravatar_icon(event.author_email), class: "avatar" - %span Your pushed to + %span Your pushed to = event.ref_type = link_to project_commits_path(event.project, ref: event.ref_name) do %strong= truncate(event.ref_name, length: 28) diff --git a/app/views/issues/_show.html.haml b/app/views/issues/_show.html.haml index 22101aa1..64401bdd 100644 --- a/app/views/issues/_show.html.haml +++ b/app/views/issues/_show.html.haml @@ -4,7 +4,7 @@ = check_box_tag dom_id(issue,"selected"), nil, false, 'data-id' => issue.id, class: "selected_issue", disabled: !can?(current_user, :modify_issue, issue) .right - issue.labels.each do |label| - %span.label.label-issue.grouped + %span.label.label-tag.grouped %i.icon-tag = label.name - if issue.notes.any? diff --git a/app/views/issues/index.html.haml b/app/views/issues/index.html.haml index bc5c86e6..22c34baa 100644 --- a/app/views/issues/index.html.haml +++ b/app/views/issues/index.html.haml @@ -12,7 +12,7 @@ = form_tag search_project_issues_path(@project), method: :get, remote: true, id: "issue_search_form", class: :right do = hidden_field_tag :project_id, @project.id, { id: 'project_id' } = hidden_field_tag :status, params[:f] - = search_field_tag :issue_search, nil, { placeholder: 'Search', class: 'issue_search span3 right neib' } + = search_field_tag :issue_search, nil, { placeholder: 'Search', class: 'issue_search span3 right neib search-text-input' } .clearfix diff --git a/app/views/labels/_label.html.haml b/app/views/labels/_label.html.haml index 32158c20..8a465a9e 100644 --- a/app/views/labels/_label.html.haml +++ b/app/views/labels/_label.html.haml @@ -1,4 +1,9 @@ %li.wll - %strong= label.name + %strong + %i.icon-tag + = label.name .right - %span= pluralize label.count, 'issue' + = link_to project_issues_path(label_name: label.name) do + %strong + = pluralize(label.count, 'issue') + = "»" diff --git a/app/views/search/show.html.haml b/app/views/search/show.html.haml index b4a38b57..d85c24ec 100644 --- a/app/views/search/show.html.haml +++ b/app/views/search/show.html.haml @@ -3,8 +3,8 @@ = label_tag :search do %strong Looking for .input - = text_field_tag :search, params[:search], placeholder: "issue 143", class: "input-xxlarge", id: "dashboard_search" - = submit_tag 'Search', class: "btn primary" + = search_field_tag :search, params[:search], placeholder: "issue 143", class: "input-xxlarge search-text-input", id: "dashboard_search" + = submit_tag 'Search', class: "btn primary wide" - if params[:search].present? %br %h3 @@ -15,8 +15,9 @@ .row .span6 %table - %tr - %th Projects + %thead + %tr + %th Projects %tbody - @projects.each do |project| %tr @@ -32,8 +33,9 @@ %h4.nothing_here_message No Projects %br %table - %tr - %th Merge Requests + %thead + %tr + %th Merge Requests %tbody - @merge_requests.each do |merge_request| %tr @@ -50,8 +52,9 @@ %h4.nothing_here_message No Merge Requests .span6 %table - %tr - %th Issues + %thead + %tr + %th Issues %tbody - @issues.each do |issue| %tr From 01974185a1640ed869417131d062b5a2eef620bc Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 19 Sep 2012 12:14:42 -0400 Subject: [PATCH 334/357] Simplify is_within matcher [ci skip] --- spec/support/matchers.rb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/spec/support/matchers.rb b/spec/support/matchers.rb index cb1dcba3..809453c4 100644 --- a/spec/support/matchers.rb +++ b/spec/support/matchers.rb @@ -73,11 +73,7 @@ module Shoulda::Matchers::ActiveModel class EnsureLengthOfMatcher # Shortcut for is_at_least and is_at_most def is_within(range) - if range.exclude_end? - is_at_least(range.first) && is_at_most(range.last - 1) - else - is_at_least(range.first) && is_at_most(range.last) - end + is_at_least(range.min) && is_at_most(range.max) end end end From 496f88afe10f95a7aa64ea8ab10e57412f827283 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 19 Sep 2012 19:42:26 -0400 Subject: [PATCH 335/357] Escape text passed to gfm by link_to_gfm --- app/helpers/gitlab_markdown_helper.rb | 4 ++-- app/views/commits/_commit_box.html.haml | 4 ++-- spec/helpers/gitlab_markdown_helper_spec.rb | 9 ++++++++- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/app/helpers/gitlab_markdown_helper.rb b/app/helpers/gitlab_markdown_helper.rb index 511d4628..111982e9 100644 --- a/app/helpers/gitlab_markdown_helper.rb +++ b/app/helpers/gitlab_markdown_helper.rb @@ -12,8 +12,8 @@ module GitlabMarkdownHelper # "outer text gfm ref more outer text"). def link_to_gfm(body, url, html_options = {}) return "" if body.blank? - - gfm_body = gfm(body, html_options) + + gfm_body = gfm(escape_once(body), html_options) gfm_body.gsub!(%r{.*?}m) do |match| "#{match}#{link_to("", url, html_options)[0..-5]}" # "".length +1 diff --git a/app/views/commits/_commit_box.html.haml b/app/views/commits/_commit_box.html.haml index 506f4e09..572337de 100644 --- a/app/views/commits/_commit_box.html.haml +++ b/app/views/commits/_commit_box.html.haml @@ -11,10 +11,10 @@ = link_to tree_project_ref_path(@project, @commit.id), class: "browse-button primary grouped" do %strong Browse Code » %h3.commit-title.page_title - = gfm @commit.title + = gfm escape_once(@commit.title) - if @commit.description.present? %pre.commit-description - = gfm @commit.description + = gfm escape_once(@commit.description) .commit-info .row .span4 diff --git a/spec/helpers/gitlab_markdown_helper_spec.rb b/spec/helpers/gitlab_markdown_helper_spec.rb index 0af33142..a6708a7a 100644 --- a/spec/helpers/gitlab_markdown_helper_spec.rb +++ b/spec/helpers/gitlab_markdown_helper_spec.rb @@ -292,11 +292,18 @@ describe GitlabMarkdownHelper do actual = link_to_gfm("Fixed in #{commit.id}", commit_path, class: 'foo') actual.should have_selector 'a.gfm.gfm-commit.foo' end + + it "escapes HTML passed in as the body" do + actual = "This is a

    test

    - see ##{issues[0].id}" + link_to_gfm(actual, commit_path).should match('<h1>test</h1>') + end end describe "#markdown" do it "should handle references in paragraphs" do - markdown("\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. #{commit.id} Nam pulvinar sapien eget odio adipiscing at faucibus orci vestibulum.\n").should == "

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. #{link_to commit.id, project_commit_path(project, commit), title: commit.link_title, class: "gfm gfm-commit "} Nam pulvinar sapien eget odio adipiscing at faucibus orci vestibulum.

    \n" + actual = "\n\nLorem ipsum dolor sit amet. #{commit.id} Nam pulvinar sapien eget.\n" + expected = project_commit_path(project, commit) + markdown(actual).should match(expected) end it "should handle references in headers" do From ba72c6f683fc52a3223c45c5044abf1361e059fd Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 19 Sep 2012 20:21:12 -0400 Subject: [PATCH 336/357] Escape text passed directly to gfm --- app/views/events/_commit.html.haml | 2 +- app/views/issues/show.html.haml | 2 +- app/views/merge_requests/show/_mr_box.html.haml | 2 +- app/views/milestones/show.html.haml | 2 +- app/views/repositories/_branch.html.haml | 2 +- app/views/repositories/_feed.html.haml | 2 +- app/views/repositories/tags.html.haml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/views/events/_commit.html.haml b/app/views/events/_commit.html.haml index 1e5c00cb..cb25d831 100644 --- a/app/views/events/_commit.html.haml +++ b/app/views/events/_commit.html.haml @@ -5,4 +5,4 @@ %strong.cdark= commit.author_name – = image_tag gravatar_icon(commit.author_email), class: "avatar", width: 16 - = gfm truncate(commit.title, length: 50) rescue "--broken encoding" + = gfm escape_once(truncate(commit.title, length: 50)) rescue "--broken encoding" diff --git a/app/views/issues/show.html.haml b/app/views/issues/show.html.haml index e7365e10..da2aeac4 100644 --- a/app/views/issues/show.html.haml +++ b/app/views/issues/show.html.haml @@ -31,7 +31,7 @@ .alert-message.error.status_info Closed - else .alert-message.success.status_info Open - = gfm @issue.title + = gfm escape_once(@issue.title) .middle_box_content %cite.cgray Created by diff --git a/app/views/merge_requests/show/_mr_box.html.haml b/app/views/merge_requests/show/_mr_box.html.haml index 81ab83f3..89c3110b 100644 --- a/app/views/merge_requests/show/_mr_box.html.haml +++ b/app/views/merge_requests/show/_mr_box.html.haml @@ -5,7 +5,7 @@ .alert-message.error.status_info Closed - else .alert-message.success.status_info Open - = gfm @merge_request.title + = gfm escape_once(@merge_request.title) .middle_box_content %div diff --git a/app/views/milestones/show.html.haml b/app/views/milestones/show.html.haml index 0d6cb2a0..ba71ead7 100644 --- a/app/views/milestones/show.html.haml +++ b/app/views/milestones/show.html.haml @@ -21,7 +21,7 @@ .alert-message.error.status_info Closed - else .alert-message.success.status_info Open - = gfm @milestone.title + = gfm escape_once(@milestone.title) %small.right= @milestone.expires_at .middle_box_content diff --git a/app/views/repositories/_branch.html.haml b/app/views/repositories/_branch.html.haml index cf8558ec..64a633be 100644 --- a/app/views/repositories/_branch.html.haml +++ b/app/views/repositories/_branch.html.haml @@ -11,7 +11,7 @@ %code= commit.short_id = image_tag gravatar_icon(commit.author_email), class: "", width: 16 - = gfm truncate(commit.title, length: 40) + = gfm escape_once(truncate(commit.title, length: 40)) %span.update-author.right = time_ago_in_words(commit.committed_date) ago diff --git a/app/views/repositories/_feed.html.haml b/app/views/repositories/_feed.html.haml index ac4eb483..0c13551d 100644 --- a/app/views/repositories/_feed.html.haml +++ b/app/views/repositories/_feed.html.haml @@ -13,7 +13,7 @@ = link_to project_commits_path(@project, commit.id) do %code= commit.short_id = image_tag gravatar_icon(commit.author_email), class: "", width: 16 - = gfm truncate(commit.title, length: 40) + = gfm escape_once(truncate(commit.title, length: 40)) %td %span.right.cgray = time_ago_in_words(commit.committed_date) diff --git a/app/views/repositories/tags.html.haml b/app/views/repositories/tags.html.haml index 0e870c80..a4114586 100644 --- a/app/views/repositories/tags.html.haml +++ b/app/views/repositories/tags.html.haml @@ -17,7 +17,7 @@ = link_to project_commit_path(@project, commit.id) do %code= commit.short_id = image_tag gravatar_icon(commit.author_email), class: "", width: 16 - = gfm truncate(commit.title, length: 40) + = gfm escape_once(truncate(commit.title, length: 40)) %td %span.update-author.right = time_ago_in_words(commit.committed_date) From 345c4d2a776c3e30d0c05e5954adbfe4142f3519 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 19 Sep 2012 20:21:35 -0400 Subject: [PATCH 337/357] Update gfm so escaped text is still parsed for references --- lib/gitlab/markdown.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb index 0a467a8d..9201003e 100644 --- a/lib/gitlab/markdown.rb +++ b/lib/gitlab/markdown.rb @@ -48,8 +48,10 @@ module Gitlab def gfm(text, html_options = {}) return text if text.nil? - # prevents the string supplied through the _text_ argument to be altered - text = text.dup + # Duplicate the string so we don't alter the original, then call to_str + # to cast it back to a String instead of a SafeBuffer. This is required + # for gsub calls to work as we need them to. + text = text.dup.to_str @html_options = html_options From 6104942438c14ec7bd21c6cd5bd995272b3faff6 Mon Sep 17 00:00:00 2001 From: randx Date: Thu, 20 Sep 2012 09:06:12 +0300 Subject: [PATCH 338/357] Sanitize for network graph --- lib/gitlab/graph_commit.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/gitlab/graph_commit.rb b/lib/gitlab/graph_commit.rb index b9859d79..e14d670e 100644 --- a/lib/gitlab/graph_commit.rb +++ b/lib/gitlab/graph_commit.rb @@ -5,6 +5,8 @@ module Gitlab attr_accessor :time, :space attr_accessor :refs + include ActionView::Helpers::SanitizeHelper + def self.to_graph(project) @repo = project.repo commits = Grit::Commit.find_all(@repo, nil, {max_count: 650}) @@ -164,7 +166,7 @@ module Gitlab h[:refs] = refs.collect{|r|r.name}.join(" ") unless refs.nil? h[:id] = sha h[:date] = date - h[:message] = Gitlab::Encode.utf8(message) + h[:message] = sanitize(Gitlab::Encode.utf8(message)) h[:login] = author.email h end From ed899a2f4b50b4370feeea94676502b42383c746 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 20 Sep 2012 11:50:22 +0300 Subject: [PATCH 339/357] Replace sanitize with escape once --- lib/gitlab/graph_commit.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/gitlab/graph_commit.rb b/lib/gitlab/graph_commit.rb index e14d670e..d3668a99 100644 --- a/lib/gitlab/graph_commit.rb +++ b/lib/gitlab/graph_commit.rb @@ -5,7 +5,7 @@ module Gitlab attr_accessor :time, :space attr_accessor :refs - include ActionView::Helpers::SanitizeHelper + include ActionView::Helpers::TagHelper def self.to_graph(project) @repo = project.repo @@ -166,7 +166,7 @@ module Gitlab h[:refs] = refs.collect{|r|r.name}.join(" ") unless refs.nil? h[:id] = sha h[:date] = date - h[:message] = sanitize(Gitlab::Encode.utf8(message)) + h[:message] = escape_once(Gitlab::Encode.utf8(message)) h[:login] = author.email h end From 0e524aaea1a98e5f1dff7f7370838116da5ba6f0 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 20 Sep 2012 13:00:18 +0300 Subject: [PATCH 340/357] Added workaround for github-markup issue with rendering markdown --- app/helpers/tree_helper.rb | 8 ++++++-- app/views/refs/_tree.html.haml | 6 +++++- app/views/refs/_tree_file.html.haml | 6 +++++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/app/helpers/tree_helper.rb b/app/helpers/tree_helper.rb index a5d5c742..2b7265ca 100644 --- a/app/helpers/tree_helper.rb +++ b/app/helpers/tree_helper.rb @@ -32,7 +32,11 @@ module TreeHelper # # Returns boolean def markup?(filename) - filename.end_with?(*%w(.mdown .md .markdown .textile .rdoc .org .creole - .mediawiki .rst .asciidoc .pod)) + filename.end_with?(*%w(.textile .rdoc .org .creole + .mediawiki .rst .asciidoc .pod)) + end + + def gitlab_markdown?(filename) + filename.end_with?(*%w(.mdown .md .markdown)) end end diff --git a/app/views/refs/_tree.html.haml b/app/views/refs/_tree.html.haml index ec6dba4e..55078718 100644 --- a/app/views/refs/_tree.html.haml +++ b/app/views/refs/_tree.html.haml @@ -43,7 +43,11 @@ %i.icon-file = content.name .file_content.wiki - = raw GitHub::Markup.render(content.name, content.data) + - if gitlab_markdown?(content.name) + = preserve do + = markdown(content.data) + - else + = raw GitHub::Markup.render(content.name, content.data) :javascript $(function(){ diff --git a/app/views/refs/_tree_file.html.haml b/app/views/refs/_tree_file.html.haml index f6566ccf..76173e24 100644 --- a/app/views/refs/_tree_file.html.haml +++ b/app/views/refs/_tree_file.html.haml @@ -9,7 +9,11 @@ = link_to "history", project_commits_path(@project, path: params[:path], ref: @ref), class: "btn very_small" = link_to "blame", blame_file_project_ref_path(@project, @ref, path: params[:path]), class: "btn very_small" - if file.text? - - if markup?(name) + - if gitlab_markdown?(name) + .file_content.wiki + = preserve do + = markdown(file.data) + - elsif markup?(name) .file_content.wiki = raw GitHub::Markup.render(name, file.data) - else From f33e1e480e9009f8cd3930eef1830877623588c5 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 20 Sep 2012 13:05:07 +0300 Subject: [PATCH 341/357] Let it be v2.9 --- CHANGELOG | 4 +++- VERSION | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 7322efbf..99641ad3 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -9,8 +9,10 @@ v 2.9.0 - scss refactoring. gitlab_bootstrap/ dir - fix git push http body bigger than 112k problem - list of labels page under issues tab - - API for milestones + - API for milestones, keys - restyled buttons + - OAuth + - Comment order changed v 2.8.1 - ability to disable gravatars diff --git a/VERSION b/VERSION index a564e653..c8e38b61 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.9.0pre +2.9.0 From 4e1f1e142299209ff50d595528b1e6410c9b7308 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Thu, 20 Sep 2012 18:34:07 +0600 Subject: [PATCH 342/357] API docs minor formatting fix [ci-skip] --- doc/api/projects.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/api/projects.md b/doc/api/projects.md index 73d6adc9..53ee5d41 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -102,7 +102,7 @@ Parameters: + `name` (required) - new project name + `code` (optional) - new project code, uses project name if not set + `path` (optional) - new project path, uses project name if not set -+ `description (optional) - short project description ++ `description` (optional) - short project description + `default_branch` (optional) - 'master' by default + `issues_enabled` (optional) - enabled by default + `wall_enabled` (optional) - enabled by default From 37817cc31d890f1e79b31ae3d625fbace672451e Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Thu, 20 Sep 2012 18:38:34 +0600 Subject: [PATCH 343/357] API: expose project id for milestones --- lib/api/entities.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 13a48e12..6241fc8f 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -36,7 +36,9 @@ module Gitlab end class Milestone < Grape::Entity - expose :id, :title, :description, :due_date, :closed, :updated_at, :created_at + expose :id + expose (:project_id) {|milestone| milestone.project.id} + expose :title, :description, :due_date, :closed, :updated_at, :created_at end class Issue < Grape::Entity From 9aafe77e708174aac697a8dcafc99b90e96be36e Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 20 Sep 2012 17:44:44 +0300 Subject: [PATCH 344/357] I want be able to get token via api. Used for mobile applications --- doc/api/README.md | 1 + doc/api/session.md | 22 +++++++++++++++++ lib/api.rb | 1 + lib/api/entities.rb | 8 +++++-- lib/api/session.rb | 21 +++++++++++++++++ spec/requests/api/session_spec.rb | 39 +++++++++++++++++++++++++++++++ 6 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 doc/api/session.md create mode 100644 lib/api/session.rb create mode 100644 spec/requests/api/session_spec.rb diff --git a/doc/api/README.md b/doc/api/README.md index 9741072c..443ec7bf 100644 --- a/doc/api/README.md +++ b/doc/api/README.md @@ -30,6 +30,7 @@ When listing resources you can pass the following parameters: ## Contents + [Users](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/users.md) ++ [Session](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/session.md) + [Projects](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/projects.md) + [Snippets](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/snippets.md) + [Issues](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/issues.md) diff --git a/doc/api/session.md b/doc/api/session.md new file mode 100644 index 00000000..9fdbeb43 --- /dev/null +++ b/doc/api/session.md @@ -0,0 +1,22 @@ +Login to get private token + +``` +POST /session +``` + +Parameters: + ++ `email` (required) - The email of user ++ `password` (required) - Valid password + + +```json +{ + "id": 1, + "email": "john@example.com", + "name": "John Smith", + "private_token": "dd34asd13as", + "created_at": "2012-05-23T08:00:58Z", + "blocked": true +} +``` diff --git a/lib/api.rb b/lib/api.rb index 37e03849..3b62f31b 100644 --- a/lib/api.rb +++ b/lib/api.rb @@ -18,5 +18,6 @@ module Gitlab mount Issues mount Milestones mount Keys + mount Session end end diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 6241fc8f..5d8cc276 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -9,6 +9,10 @@ module Gitlab expose :id, :email, :name, :blocked, :created_at end + class UserLogin < Grape::Entity + expose :id, :email, :name, :private_token, :blocked, :created_at + end + class Hook < Grape::Entity expose :id, :url end @@ -52,8 +56,8 @@ module Gitlab end class Key < Grape::Entity - expose :id, - :title, + expose :id, + :title, :key end end diff --git a/lib/api/session.rb b/lib/api/session.rb new file mode 100644 index 00000000..5bcdf93a --- /dev/null +++ b/lib/api/session.rb @@ -0,0 +1,21 @@ +module Gitlab + # Users API + class Session < Grape::API + # Login to get token + # + # Example Request: + # POST /session + post "/session" do + resource = User.find_for_database_authentication(email: params[:email]) + + return forbidden! unless resource + + if resource.valid_password?(params[:password]) + present resource, with: Entities::UserLogin + else + forbidden! + end + end + end +end + diff --git a/spec/requests/api/session_spec.rb b/spec/requests/api/session_spec.rb new file mode 100644 index 00000000..0809475b --- /dev/null +++ b/spec/requests/api/session_spec.rb @@ -0,0 +1,39 @@ +require 'spec_helper' + +describe Gitlab::API do + include ApiHelpers + + let(:user) { Factory :user } + + describe "POST /session" do + context "when valid password" do + it "should return private token" do + post api("/session"), email: user.email, password: '123456' + response.status.should == 201 + + json_response['email'].should == user.email + json_response['private_token'].should == user.private_token + end + end + + context "when invalid password" do + it "should return authentication error" do + post api("/session"), email: user.email, password: '123' + response.status.should == 403 + + json_response['email'].should be_nil + json_response['private_token'].should be_nil + end + end + + context "when empty password" do + it "should return authentication error" do + post api("/session"), email: user.email + response.status.should == 403 + + json_response['email'].should be_nil + json_response['private_token'].should be_nil + end + end + end +end From 3dd940d4cbd72afed38eba49b557823a6a55eac2 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Thu, 20 Sep 2012 08:36:43 -0700 Subject: [PATCH 345/357] API: extend UserLogin entity from UserBasic --- lib/api/entities.rb | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 5d8cc276..a8b786ae 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -9,8 +9,8 @@ module Gitlab expose :id, :email, :name, :blocked, :created_at end - class UserLogin < Grape::Entity - expose :id, :email, :name, :private_token, :blocked, :created_at + class UserLogin < UserBasic + expose :private_token end class Hook < Grape::Entity @@ -56,9 +56,7 @@ module Gitlab end class Key < Grape::Entity - expose :id, - :title, - :key + expose :id, :title, :key end end end From b08d33f6a9a82e04f288fc0a4de6d4a7489795e1 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Thu, 20 Sep 2012 08:38:08 -0700 Subject: [PATCH 346/357] API: return 401 for invalid session --- lib/api/session.rb | 5 ++--- spec/requests/api/session_spec.rb | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/api/session.rb b/lib/api/session.rb index 5bcdf93a..b4050160 100644 --- a/lib/api/session.rb +++ b/lib/api/session.rb @@ -8,14 +8,13 @@ module Gitlab post "/session" do resource = User.find_for_database_authentication(email: params[:email]) - return forbidden! unless resource + return unauthorized! unless resource if resource.valid_password?(params[:password]) present resource, with: Entities::UserLogin else - forbidden! + unauthorized! end end end end - diff --git a/spec/requests/api/session_spec.rb b/spec/requests/api/session_spec.rb index 0809475b..f251f392 100644 --- a/spec/requests/api/session_spec.rb +++ b/spec/requests/api/session_spec.rb @@ -19,7 +19,7 @@ describe Gitlab::API do context "when invalid password" do it "should return authentication error" do post api("/session"), email: user.email, password: '123' - response.status.should == 403 + response.status.should == 401 json_response['email'].should be_nil json_response['private_token'].should be_nil @@ -29,7 +29,7 @@ describe Gitlab::API do context "when empty password" do it "should return authentication error" do post api("/session"), email: user.email - response.status.should == 403 + response.status.should == 401 json_response['email'].should be_nil json_response['private_token'].should be_nil From 81aeac46d63cd315b6545494cfa41ae163cadc5c Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Thu, 20 Sep 2012 08:51:26 -0700 Subject: [PATCH 347/357] update help section with session API docs --- app/views/help/api.html.haml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/views/help/api.html.haml b/app/views/help/api.html.haml index 35176f8e..b1916110 100644 --- a/app/views/help/api.html.haml +++ b/app/views/help/api.html.haml @@ -13,6 +13,8 @@ %a{href: "#snippets"} Snippets %li %a{href: "#users"} Users + %li + %a{href: "#session"} Session %li %a{href: "#issues"} Issues %li @@ -58,6 +60,16 @@ %br +.file_holder#session + .file_title + %i.icon-file + Session + .file_content.wiki + = preserve do + = markdown File.read(Rails.root.join("doc", "api", "session.md")) + +%br + .file_holder#issues .file_title %i.icon-file From a605943d76216f2c5e78178c2b87ed92ff79741f Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Thu, 20 Sep 2012 22:11:15 +0600 Subject: [PATCH 348/357] fix broken spec --- spec/helpers/tree_helper_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/helpers/tree_helper_spec.rb b/spec/helpers/tree_helper_spec.rb index bb124d8b..d450b687 100644 --- a/spec/helpers/tree_helper_spec.rb +++ b/spec/helpers/tree_helper_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' describe TreeHelper do describe '#markup?' do - %w(mdown md markdown textile rdoc org creole mediawiki rst asciidoc pod).each do |type| + %w(textile rdoc org creole mediawiki rst asciidoc pod).each do |type| it "returns true for #{type} files" do markup?("README.#{type}").should be_true end From 4cc169d3cacea7e4325bb5632cc8878a7c3f41fe Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 21 Sep 2012 11:22:53 +0300 Subject: [PATCH 349/357] Improve commits compare. Added tags to autocomplete. Dont look for commits if from & to are empty --- app/controllers/commits_controller.rb | 1 + app/models/commit.rb | 12 ++++++++---- app/roles/repository.rb | 8 ++++++++ app/views/commits/compare.html.haml | 28 +++++++++++++++------------ 4 files changed, 33 insertions(+), 16 deletions(-) diff --git a/app/controllers/commits_controller.rb b/app/controllers/commits_controller.rb index 6d3f1aea..1e7aec00 100644 --- a/app/controllers/commits_controller.rb +++ b/app/controllers/commits_controller.rb @@ -52,6 +52,7 @@ class CommitsController < ApplicationController @commits = result[:commits] @commit = result[:commit] @diffs = result[:diffs] + @refs_are_same = result[:same] @line_notes = [] @commits = CommitDecorator.decorate(@commits) diff --git a/app/models/commit.rb b/app/models/commit.rb index 15afedcb..73583e9e 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -82,20 +82,24 @@ class Commit end def compare(project, from, to) - first = project.commit(to.try(:strip)) - last = project.commit(from.try(:strip)) - result = { commits: [], diffs: [], - commit: nil + commit: nil, + same: false } + return result unless from && to + + first = project.commit(to.try(:strip)) + last = project.commit(from.try(:strip)) + if first && last commits = [first, last].sort_by(&:created_at) younger = commits.first older = commits.last + result[:same] = (younger.id == older.id) result[:commits] = project.repo.commits_between(younger.id, older.id).map {|c| Commit.new(c)} result[:diffs] = project.repo.diff(younger.id, older.id) rescue [] result[:commit] = Commit.new(older) diff --git a/app/roles/repository.rb b/app/roles/repository.rb index a77de4ad..01156ac1 100644 --- a/app/roles/repository.rb +++ b/app/roles/repository.rb @@ -79,6 +79,14 @@ module Repository @heads ||= repo.heads end + def branches_names + heads.map(&:name) + end + + def ref_names + [branches_names + tags].flatten + end + def tree(fcommit, path = nil) fcommit = commit if fcommit == :head tree = fcommit.tree diff --git a/app/views/commits/compare.html.haml b/app/views/commits/compare.html.haml index 7dab1f5c..db15ba53 100644 --- a/app/views/commits/compare.html.haml +++ b/app/views/commits/compare.html.haml @@ -1,16 +1,16 @@ = render "head" -%h3 +%h3.page_title Compare View %hr %div - %p + %p.slead Fill input field with commit id like - %code '4eedf23' + %code.label_branch 4eedf23 or branch/tag name like - %code master - & press compare button for commits list, code diff. + %code.label_branch master + and press compare button for commits list, code diff. %br @@ -19,22 +19,24 @@ = text_field_tag :from, params[:from], placeholder: "master", class: "xlarge" = "..." = text_field_tag :to, params[:to], placeholder: "aa8b4ef", class: "xlarge" + - if @refs_are_same + .alert + %span Refs are the same .actions - = submit_tag "Compare", class: "btn primary" + = submit_tag "Compare", class: "btn primary wide commits-compare-btn" - -- unless @commits.empty? +- if @commits.present? %div.ui-box %h5.small Commits (#{@commits.count}) %ul.unstyled= render @commits -- unless @diffs.empty? - %h4 Diff - = render "commits/diffs", diffs: @diffs + - unless @diffs.empty? + %h4 Diff + = render "commits/diffs", diffs: @diffs :javascript $(function() { - var availableTags = #{@project.heads.map(&:name).to_json}; + var availableTags = #{@project.ref_names.to_json}; $("#from").autocomplete({ source: availableTags, @@ -45,5 +47,7 @@ source: availableTags, minLength: 1 }); + + disableButtonIfEmptyField('#to', '.commits-compare-btn'); }); From 10d3a30b255cd85b2cf7af39814fd7418eecd838 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 21 Sep 2012 13:22:30 +0300 Subject: [PATCH 350/357] APi for commits. Better api docs --- Guardfile | 1 + app/views/help/api.html.haml | 159 ++++++++++++++++-------------- doc/api/commits.md | 38 +++++++ lib/api.rb | 1 + lib/api/commits.rb | 29 ++++++ lib/api/entities.rb | 5 + lib/api/helpers.rb | 2 +- lib/api/milestones.rb | 6 ++ lib/api/projects.rb | 20 ++-- spec/requests/api/commits_spec.rb | 29 ++++++ 10 files changed, 205 insertions(+), 85 deletions(-) create mode 100644 doc/api/commits.md create mode 100644 lib/api/commits.rb create mode 100644 spec/requests/api/commits_spec.rb diff --git a/Guardfile b/Guardfile index 50a10af9..e682f0b6 100644 --- a/Guardfile +++ b/Guardfile @@ -4,6 +4,7 @@ guard 'rspec', :version => 2, :all_on_start => false, :all_after_pass => false do watch(%r{^spec/.+_spec\.rb$}) watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" } + watch(%r{^lib/api/(.+)\.rb$}) { |m| "spec/requests/api/#{m[1]}_spec.rb" } watch('spec/spec_helper.rb') { "spec" } # Rails example diff --git a/app/views/help/api.html.haml b/app/views/help/api.html.haml index b1916110..1f0ce879 100644 --- a/app/views/help/api.html.haml +++ b/app/views/help/api.html.haml @@ -1,89 +1,96 @@ -%h3 API +%h3.page_title API .back_link = link_to help_path do ← to index -%hr - -%ol - %li - %a{href: "#README"} README - %li - %a{href: "#projects"} Projects - %li - %a{href: "#snippets"} Snippets - %li - %a{href: "#users"} Users - %li - %a{href: "#session"} Session - %li - %a{href: "#issues"} Issues - %li - %a{href: "#milestones"} Milestones - -.file_holder#README - .file_title - %i.icon-file - README - .file_content.wiki - = preserve do - = markdown File.read(Rails.root.join("doc", "api", "README.md")) - %br -.file_holder#projects - .file_title - %i.icon-file - Projects - .file_content.wiki - = preserve do - = markdown File.read(Rails.root.join("doc", "api", "projects.md")) +%ul.nav.nav-tabs.log-tabs + %li.active + = link_to "README", "#README", 'data-toggle' => 'tab' + %li + = link_to "Projects", "#projects", 'data-toggle' => 'tab' + %li + = link_to "Snippets", "#snippets", 'data-toggle' => 'tab' + %li + = link_to "Users", "#users", 'data-toggle' => 'tab' + %li + = link_to "Session", "#session", 'data-toggle' => 'tab' + %li + = link_to "Issues", "#issues", 'data-toggle' => 'tab' + %li + = link_to "Milestones", "#milestones", 'data-toggle' => 'tab' + %li + = link_to "Commits", "#commits", 'data-toggle' => 'tab' -%br +.tab-content + .tab-pane.active#README + .file_holder + .file_title + %i.icon-file + README + .file_content.wiki + = preserve do + = markdown File.read(Rails.root.join("doc", "api", "README.md")) -.file_holder#snippets - .file_title - %i.icon-file - Projects Snippets - .file_content.wiki - = preserve do - = markdown File.read(Rails.root.join("doc", "api", "snippets.md")) + .tab-pane#projects + .file_holder + .file_title + %i.icon-file + Projects + .file_content.wiki + = preserve do + = markdown File.read(Rails.root.join("doc", "api", "projects.md")) -%br + .tab-pane#snippets + .file_holder + .file_title + %i.icon-file + Projects Snippets + .file_content.wiki + = preserve do + = markdown File.read(Rails.root.join("doc", "api", "snippets.md")) -.file_holder#users - .file_title - %i.icon-file - Users - .file_content.wiki - = preserve do - = markdown File.read(Rails.root.join("doc", "api", "users.md")) + .tab-pane#users + .file_holder + .file_title + %i.icon-file + Users + .file_content.wiki + = preserve do + = markdown File.read(Rails.root.join("doc", "api", "users.md")) -%br + .tab-pane#session + .file_holder + .file_title + %i.icon-file + Session + .file_content.wiki + = preserve do + = markdown File.read(Rails.root.join("doc", "api", "session.md")) -.file_holder#session - .file_title - %i.icon-file - Session - .file_content.wiki - = preserve do - = markdown File.read(Rails.root.join("doc", "api", "session.md")) + .tab-pane#issues + .file_holder + .file_title + %i.icon-file + Issues + .file_content.wiki + = preserve do + = markdown File.read(Rails.root.join("doc", "api", "issues.md")) -%br + .tab-pane#milestones + .file_holder + .file_title + %i.icon-file + Milestones + .file_content.wiki + = preserve do + = markdown File.read(Rails.root.join("doc", "api", "milestones.md")) -.file_holder#issues - .file_title - %i.icon-file - Issues - .file_content.wiki - = preserve do - = markdown File.read(Rails.root.join("doc", "api", "issues.md")) - -%br - -.file_holder#milestones - .file_title - %i.icon-file - Milestones - .file_content.wiki - = preserve do - = markdown File.read(Rails.root.join("doc", "api", "milestones.md")) + .tab-pane#commits + .file_holder + .file_title + %i.icon-file + Commits + .file_content.wiki + = preserve do + = markdown File.read(Rails.root.join("doc", "api", "commits.md")) diff --git a/doc/api/commits.md b/doc/api/commits.md new file mode 100644 index 00000000..fccb35c3 --- /dev/null +++ b/doc/api/commits.md @@ -0,0 +1,38 @@ +## List Commits + +Get a list of project commits. + +``` +GET /projects/:id/commits +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `ref_name` (optional) - branch/tag name ++ `page` (optional) ++ `per_page` (optional) + + +```json + +[ + { + "id": "ed899a2f4b50b4370feeea94676502b42383c746", + "short_id": "ed899a2f4b5", + "title": "Replace sanitize with escape once", + "author_name": "Dmitriy Zaporozhets", + "author_email": "dzaporozhets@sphereconsultinginc.com", + "created_at": "2012-09-20T11:50:22+03:00" + }, + { + "id": "6104942438c14ec7bd21c6cd5bd995272b3faff6", + "short_id": "6104942438c", + "title": "Sanitize for network graph", + "author_name": "randx", + "author_email": "dmitriy.zaporozhets@gmail.com", + "created_at": "2012-09-20T09:06:12+03:00" + } +] + +``` diff --git a/lib/api.rb b/lib/api.rb index 3b62f31b..f4e9e5fc 100644 --- a/lib/api.rb +++ b/lib/api.rb @@ -19,5 +19,6 @@ module Gitlab mount Milestones mount Keys mount Session + mount Commits end end diff --git a/lib/api/commits.rb b/lib/api/commits.rb new file mode 100644 index 00000000..47d96fc4 --- /dev/null +++ b/lib/api/commits.rb @@ -0,0 +1,29 @@ +module Gitlab + # Commits API + class Commits < Grape::API + before { authenticate! } + + resource :projects do + # Get a list of project commits + # + # Parameters: + # id (required) - The ID or code name of a project + # ref_name (optional) - Name of branch or tag + # page (optional) - default is 0 + # per_page (optional) - default is 20 + # Example Request: + # GET /projects/:id/commits + get ":id/commits" do + authorize! :download_code, user_project + + page = params[:page] || 0 + per_page = params[:per_page] || 20 + ref = params[:ref_name] || user_project.try(:default_branch) || 'master' + + commits = user_project.commits(ref, nil, per_page, page * per_page) + + present CommitDecorator.decorate(commits), with: Entities::Commit + end + end + end +end diff --git a/lib/api/entities.rb b/lib/api/entities.rb index a8b786ae..1909a016 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -17,6 +17,11 @@ module Gitlab expose :id, :url end + class Commit < Grape::Entity + expose :id, :short_id, :title, + :author_name, :author_email, :created_at + end + class Project < Grape::Entity expose :id, :code, :name, :description, :path, :default_branch expose :owner, using: Entities::UserBasic diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb index 9a08b995..14390545 100644 --- a/lib/api/helpers.rb +++ b/lib/api/helpers.rb @@ -61,7 +61,7 @@ module Gitlab error!({'message' => message}, status) end - private + private def abilities @abilities ||= begin diff --git a/lib/api/milestones.rb b/lib/api/milestones.rb index daaff940..f55dfd04 100644 --- a/lib/api/milestones.rb +++ b/lib/api/milestones.rb @@ -11,6 +11,8 @@ module Gitlab # Example Request: # GET /projects/:id/milestones get ":id/milestones" do + authorize! :read_milestone, user_project + present paginate(user_project.milestones), with: Entities::Milestone end @@ -22,6 +24,8 @@ module Gitlab # Example Request: # GET /projects/:id/milestones/:milestone_id get ":id/milestones/:milestone_id" do + authorize! :read_milestone, user_project + @milestone = user_project.milestones.find(params[:milestone_id]) present @milestone, with: Entities::Milestone end @@ -36,6 +40,8 @@ module Gitlab # Example Request: # POST /projects/:id/milestones post ":id/milestones" do + authorize! :admin_milestone, user_project + attrs = attributes_for_keys [:title, :description, :due_date] @milestone = user_project.milestones.new attrs if @milestone.save diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 1d9004f8..d6ff02c3 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -40,14 +40,14 @@ module Gitlab post do params[:code] ||= params[:name] params[:path] ||= params[:name] - attrs = attributes_for_keys [:code, - :path, - :name, - :description, - :default_branch, - :issues_enabled, - :wall_enabled, - :merge_requests_enabled, + attrs = attributes_for_keys [:code, + :path, + :name, + :description, + :default_branch, + :issues_enabled, + :wall_enabled, + :merge_requests_enabled, :wiki_enabled] @project = Project.create_by_user(attrs, current_user) if @project.saved? @@ -207,6 +207,8 @@ module Gitlab # Example Request: # POST /projects/:id/snippets post ":id/snippets" do + authorize! :write_snippet, user_project + attrs = attributes_for_keys [:title, :file_name] attrs[:expires_at] = params[:lifetime] if params[:lifetime].present? attrs[:content] = params[:code] if params[:code].present? @@ -282,6 +284,8 @@ module Gitlab # Example Request: # GET /projects/:id/repository/commits/:sha/blob get ":id/repository/commits/:sha/blob" do + authorize! :download_code, user_project + ref = params[:sha] commit = user_project.commit ref diff --git a/spec/requests/api/commits_spec.rb b/spec/requests/api/commits_spec.rb new file mode 100644 index 00000000..3af5ec21 --- /dev/null +++ b/spec/requests/api/commits_spec.rb @@ -0,0 +1,29 @@ +require 'spec_helper' + +describe Gitlab::API do + include ApiHelpers + + let(:user) { Factory :user } + let!(:project) { Factory :project, owner: user } + + describe "GET /projects/:id/commits" do + context "authorized user" do + before { project.add_access(user, :read) } + + it "should return project commits" do + get api("/projects/#{project.code}/commits", user) + response.status.should == 200 + + json_response.should be_an Array + json_response.first['id'].should == project.commit.id + end + end + + context "unauthorized user" do + it "should return project commits" do + get api("/projects/#{project.code}/commits") + response.status.should == 401 + end + end + end +end From 25b745271a1db25fc709ae13737b04c1f94cdb95 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Fri, 21 Sep 2012 03:23:17 -0700 Subject: [PATCH 351/357] add API for project team members --- doc/api/projects.md | 65 +++++++++++++------- lib/api/entities.rb | 7 ++- lib/api/projects.rb | 95 +++++++++++++++++++----------- spec/requests/api/projects_spec.rb | 54 ++++++++++------- 4 files changed, 141 insertions(+), 80 deletions(-) diff --git a/doc/api/projects.md b/doc/api/projects.md index 53ee5d41..1e23df3a 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -112,66 +112,89 @@ Parameters: Will return created project with status `201 Created` on success, or `404 Not found` on fail. -## Get project users +## List project team members -Get users and access roles for existing project +Get a list of project team members. ``` -GET /projects/:id/users +GET /projects/:id/members ``` Parameters: + `id` (required) - The ID or code name of a project -Will return users and their access roles with status `200 OK` on success, or `404 Not found` on fail. +## Get project team member -## Add project users - -Add users to exiting project +Get a project team member. ``` -POST /projects/:id/users +GET /projects/:id/members/:user_id ``` Parameters: + `id` (required) - The ID or code name of a project -+ `user_ids` (required) - The ID list of users to add -+ `project_access` (required) - Project access level ++ `user_id` (required) - The ID of a user + +```json +{ + + "id": 1, + "email": "john@example.com", + "name": "John Smith", + "blocked": false, + "created_at": "2012-05-23T08:00:58Z", + "access_level": 40 +} +``` + +## Add project team member + +Add a user to a project team. + +``` +POST /projects/:id/members +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `user_id` (required) - The ID of a user to add ++ `access_level` (required) - Project access level Will return status `201 Created` on success, or `404 Not found` on fail. -## Update project users access level +## Edit project team member -Update existing users to specified access level +Update project team member to specified access level. ``` -PUT /projects/:id/users +PUT /projects/:id/members/:user_id ``` Parameters: + `id` (required) - The ID or code name of a project -+ `user_ids` (required) - The ID list of users to add -+ `project_access` (required) - Project access level ++ `user_id` (required) - The ID of a team member ++ `access_level` (required) - Project access level Will return status `200 OK` on success, or `404 Not found` on fail. -## Delete project users +## Remove project team member -Delete users from exiting project +Removes user from project team. ``` -DELETE /projects/:id/users +DELETE /projects/:id/members/:user_id ``` Parameters: + `id` (required) - The ID or code name of a project -+ `user_ids` (required) - The ID list of users to add ++ `user_id` (required) - The ID of a team member -Will return status `200 OK` on success, or `404 Not found` on fail. +Status code `200` will be returned on success. ## Get project hooks @@ -344,7 +367,7 @@ Parameters: + `id` (required) - The ID or code name of a project + `sha` (required) - The commit or branch name -+ `filepath` (required) - The path the file ++ `filepath` (required) - The path the file Will return the raw file contents. diff --git a/lib/api/entities.rb b/lib/api/entities.rb index a8b786ae..9e572324 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -24,9 +24,10 @@ module Gitlab expose :issues_enabled, :merge_requests_enabled, :wall_enabled, :wiki_enabled, :created_at end - class UsersProject < Grape::Entity - expose :user, using: Entities::UserBasic - expose :project_access + class ProjectMember < UserBasic + expose :project_access, :as => :access_level do |user, options| + options[:project].users_projects.find_by_user_id(user.id).project_access + end end class RepoObject < Grape::Entity diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 1d9004f8..456b8a77 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -40,14 +40,14 @@ module Gitlab post do params[:code] ||= params[:name] params[:path] ||= params[:name] - attrs = attributes_for_keys [:code, - :path, - :name, - :description, - :default_branch, - :issues_enabled, - :wall_enabled, - :merge_requests_enabled, + attrs = attributes_for_keys [:code, + :path, + :name, + :description, + :default_branch, + :issues_enabled, + :wall_enabled, + :merge_requests_enabled, :wiki_enabled] @project = Project.create_by_user(attrs, current_user) if @project.saved? @@ -57,56 +57,83 @@ module Gitlab end end - # Get project users + # Get a project team members # # Parameters: # id (required) - The ID or code name of a project # Example Request: - # GET /projects/:id/users - get ":id/users" do - @users_projects = paginate user_project.users_projects - present @users_projects, with: Entities::UsersProject + # GET /projects/:id/members + get ":id/members" do + @members = paginate user_project.users + present @members, with: Entities::ProjectMember, project: user_project end - # Add users to project with specified access level + # Get a project team members # # Parameters: # id (required) - The ID or code name of a project - # user_ids (required) - The ID list of users to add - # project_access (required) - Project access level + # user_id (required) - The ID of a user # Example Request: - # POST /projects/:id/users - post ":id/users" do - authorize! :admin_project, user_project - user_project.add_users_ids_to_team(params[:user_ids].values, params[:project_access]) - nil + # GET /projects/:id/members/:user_id + get ":id/members/:user_id" do + @member = user_project.users.find params[:user_id] + present @member, with: Entities::ProjectMember, project: user_project end - # Update users to specified access level + # Add a new project team member # # Parameters: # id (required) - The ID or code name of a project - # user_ids (required) - The ID list of users to add - # project_access (required) - New project access level to + # user_id (required) - The ID of a user + # access_level (required) - Project access level # Example Request: - # PUT /projects/:id/add_users - put ":id/users" do + # POST /projects/:id/members + post ":id/members" do authorize! :admin_project, user_project - user_project.update_users_ids_to_role(params[:user_ids].values, params[:project_access]) - nil + users_project = user_project.users_projects.new( + user_id: params[:user_id], + project_access: params[:access_level] + ) + + if users_project.save + @member = users_project.user + present @member, with: Entities::ProjectMember, project: user_project + else + not_found! + end end - # Delete project users + # Update project team member # # Parameters: # id (required) - The ID or code name of a project - # user_ids (required) - The ID list of users to delete + # user_id (required) - The ID of a team member + # access_level (required) - Project access level # Example Request: - # DELETE /projects/:id/users - delete ":id/users" do + # PUT /projects/:id/members/:user_id + put ":id/members/:user_id" do authorize! :admin_project, user_project - user_project.delete_users_ids_from_team(params[:user_ids].values) - nil + users_project = user_project.users_projects.find_by_user_id params[:user_id] + + if users_project.update_attributes(project_access: params[:access_level]) + @member = users_project.user + present @member, with: Entities::ProjectMember, project: user_project + else + not_found! + end + end + + # Remove a team member from project + # + # Parameters: + # id (required) - The ID or code name of a project + # user_id (required) - The ID of a team member + # Example Request: + # DELETE /projects/:id/members/:user_id + delete ":id/members/:user_id" do + authorize! :admin_project, user_project + users_project = user_project.users_projects.find_by_user_id params[:user_id] + users_project.destroy end # Get project hooks diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index b46380b2..40a9147d 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -111,42 +111,52 @@ describe Gitlab::API do end end - describe "GET /projects/:id/users" do - it "should return project users" do - get api("/projects/#{project.code}/users", user) - + describe "GET /projects/:id/members" do + it "should return project team members" do + get api("/projects/#{project.code}/members", user) response.status.should == 200 - json_response.should be_an Array json_response.count.should == 2 - json_response.first['user']['id'].should == user.id + json_response.first['email'].should == user.email end end - describe "POST /projects/:id/users" do - it "should add users to project" do - expect { - post api("/projects/#{project.code}/users", user), - user_ids: {"0" => user2.id}, project_access: UsersProject::DEVELOPER - }.to change {project.users_projects.where(:project_access => UsersProject::DEVELOPER).count}.by(1) + describe "GET /projects/:id/members/:user_id" do + it "should return project team member" do + get api("/projects/#{project.code}/members/#{user.id}", user) + response.status.should == 200 + json_response['email'].should == user.email + json_response['access_level'].should == UsersProject::MASTER end end - describe "PUT /projects/:id/users" do - it "should update users to new access role" do + describe "POST /projects/:id/members" do + it "should add user to project team" do expect { - put api("/projects/#{project.code}/users", user), - user_ids: {"0" => user3.id}, project_access: UsersProject::MASTER - }.to change {project.users_projects.where(:project_access => UsersProject::MASTER).count}.by(1) + post api("/projects/#{project.code}/members", user), user_id: user2.id, + access_level: UsersProject::DEVELOPER + }.to change { UsersProject.count }.by(1) + + response.status.should == 201 + json_response['email'].should == user2.email + json_response['access_level'].should == UsersProject::DEVELOPER end end - describe "DELETE /projects/:id/users" do - it "should delete users from project" do + describe "PUT /projects/:id/members/:user_id" do + it "should update project team member" do + put api("/projects/#{project.code}/members/#{user3.id}", user), access_level: UsersProject::MASTER + response.status.should == 200 + json_response['email'].should == user3.email + json_response['access_level'].should == UsersProject::MASTER + end + end + + describe "DELETE /projects/:id/members/:user_id" do + it "should remove user from project team" do expect { - delete api("/projects/#{project.code}/users", user), - user_ids: {"0" => user3.id} - }.to change {project.users_projects.count}.by(-1) + delete api("/projects/#{project.code}/members/#{user3.id}", user) + }.to change { UsersProject.count }.by(-1) end end From 4a072be2d775d5ce59573cfb447ddab940854d54 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Fri, 21 Sep 2012 04:34:07 -0700 Subject: [PATCH 352/357] API: commits belong to project repository --- doc/api/commits.md | 38 ------------------------------ doc/api/projects.md | 34 ++++++++++++++++++++++++++ lib/api.rb | 1 - lib/api/commits.rb | 29 ----------------------- lib/api/entities.rb | 9 ++++--- lib/api/projects.rb | 18 ++++++++++++++ spec/requests/api/commits_spec.rb | 29 ----------------------- spec/requests/api/projects_spec.rb | 21 +++++++++++++++++ 8 files changed, 77 insertions(+), 102 deletions(-) delete mode 100644 doc/api/commits.md delete mode 100644 lib/api/commits.rb delete mode 100644 spec/requests/api/commits_spec.rb diff --git a/doc/api/commits.md b/doc/api/commits.md deleted file mode 100644 index fccb35c3..00000000 --- a/doc/api/commits.md +++ /dev/null @@ -1,38 +0,0 @@ -## List Commits - -Get a list of project commits. - -``` -GET /projects/:id/commits -``` - -Parameters: - -+ `id` (required) - The ID or code name of a project -+ `ref_name` (optional) - branch/tag name -+ `page` (optional) -+ `per_page` (optional) - - -```json - -[ - { - "id": "ed899a2f4b50b4370feeea94676502b42383c746", - "short_id": "ed899a2f4b5", - "title": "Replace sanitize with escape once", - "author_name": "Dmitriy Zaporozhets", - "author_email": "dzaporozhets@sphereconsultinginc.com", - "created_at": "2012-09-20T11:50:22+03:00" - }, - { - "id": "6104942438c14ec7bd21c6cd5bd995272b3faff6", - "short_id": "6104942438c", - "title": "Sanitize for network graph", - "author_name": "randx", - "author_email": "dmitriy.zaporozhets@gmail.com", - "created_at": "2012-09-20T09:06:12+03:00" - } -] - -``` diff --git a/doc/api/projects.md b/doc/api/projects.md index 1e23df3a..2d67bfa9 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -355,6 +355,40 @@ Parameters: ] ``` +## Project repository commits + +Get a list of repository commits in a project. + +``` +GET /projects/:id/repository/commits +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `ref_name` (optional) - The name of a repository branch or tag + +```json +[ + { + "id": "ed899a2f4b50b4370feeea94676502b42383c746", + "short_id": "ed899a2f4b5", + "title": "Replace sanitize with escape once", + "author_name": "Dmitriy Zaporozhets", + "author_email": "dzaporozhets@sphereconsultinginc.com", + "created_at": "2012-09-20T11:50:22+03:00" + }, + { + "id": "6104942438c14ec7bd21c6cd5bd995272b3faff6", + "short_id": "6104942438c", + "title": "Sanitize for network graph", + "author_name": "randx", + "author_email": "dmitriy.zaporozhets@gmail.com", + "created_at": "2012-09-20T09:06:12+03:00" + } +] +``` + ## Raw blob content Get the raw file contents for a file. diff --git a/lib/api.rb b/lib/api.rb index f4e9e5fc..3b62f31b 100644 --- a/lib/api.rb +++ b/lib/api.rb @@ -19,6 +19,5 @@ module Gitlab mount Milestones mount Keys mount Session - mount Commits end end diff --git a/lib/api/commits.rb b/lib/api/commits.rb deleted file mode 100644 index 47d96fc4..00000000 --- a/lib/api/commits.rb +++ /dev/null @@ -1,29 +0,0 @@ -module Gitlab - # Commits API - class Commits < Grape::API - before { authenticate! } - - resource :projects do - # Get a list of project commits - # - # Parameters: - # id (required) - The ID or code name of a project - # ref_name (optional) - Name of branch or tag - # page (optional) - default is 0 - # per_page (optional) - default is 20 - # Example Request: - # GET /projects/:id/commits - get ":id/commits" do - authorize! :download_code, user_project - - page = params[:page] || 0 - per_page = params[:per_page] || 20 - ref = params[:ref_name] || user_project.try(:default_branch) || 'master' - - commits = user_project.commits(ref, nil, per_page, page * per_page) - - present CommitDecorator.decorate(commits), with: Entities::Commit - end - end - end -end diff --git a/lib/api/entities.rb b/lib/api/entities.rb index fd19fa0e..ee6f15f1 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -17,11 +17,6 @@ module Gitlab expose :id, :url end - class Commit < Grape::Entity - expose :id, :short_id, :title, - :author_name, :author_email, :created_at - end - class Project < Grape::Entity expose :id, :code, :name, :description, :path, :default_branch expose :owner, using: Entities::UserBasic @@ -39,6 +34,10 @@ module Gitlab expose :name, :commit end + class RepoCommit < Grape::Entity + expose :id, :short_id, :title, :author_name, :author_email, :created_at + end + class ProjectSnippet < Grape::Entity expose :id, :title, :file_name expose :author, using: Entities::UserBasic diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 0554d97c..c3dc3da6 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -211,6 +211,24 @@ module Gitlab present user_project.repo.tags.sort_by(&:name).reverse, with: Entities::RepoObject end + # Get a project repository commits + # + # Parameters: + # id (required) - The ID or code name of a project + # ref_name (optional) - The name of a repository branch or tag + # Example Request: + # GET /projects/:id/repository/commits + get ":id/repository/commits" do + authorize! :download_code, user_project + + page = params[:page] || 0 + per_page = params[:per_page] || 20 + ref = params[:ref_name] || user_project.try(:default_branch) || 'master' + + commits = user_project.commits(ref, nil, per_page, page * per_page) + present CommitDecorator.decorate(commits), with: Entities::RepoCommit + end + # Get a project snippet # # Parameters: diff --git a/spec/requests/api/commits_spec.rb b/spec/requests/api/commits_spec.rb deleted file mode 100644 index 3af5ec21..00000000 --- a/spec/requests/api/commits_spec.rb +++ /dev/null @@ -1,29 +0,0 @@ -require 'spec_helper' - -describe Gitlab::API do - include ApiHelpers - - let(:user) { Factory :user } - let!(:project) { Factory :project, owner: user } - - describe "GET /projects/:id/commits" do - context "authorized user" do - before { project.add_access(user, :read) } - - it "should return project commits" do - get api("/projects/#{project.code}/commits", user) - response.status.should == 200 - - json_response.should be_an Array - json_response.first['id'].should == project.commit.id - end - end - - context "unauthorized user" do - it "should return project commits" do - get api("/projects/#{project.code}/commits") - response.status.should == 401 - end - end - end -end diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index 40a9147d..498bbad6 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -199,6 +199,27 @@ describe Gitlab::API do end end + describe "GET /projects/:id/repository/commits" do + context "authorized user" do + before { project.add_access(user2, :read) } + + it "should return project commits" do + get api("/projects/#{project.code}/repository/commits", user) + response.status.should == 200 + + json_response.should be_an Array + json_response.first['id'].should == project.commit.id + end + end + + context "unauthorized user" do + it "should not return project commits" do + get api("/projects/#{project.code}/repository/commits") + response.status.should == 401 + end + end + end + describe "GET /projects/:id/snippets/:snippet_id" do it "should return a project snippet" do get api("/projects/#{project.code}/snippets/#{snippet.id}", user) From b62445813dffec92e85540ed081e4d6e12d58dc0 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Fri, 21 Sep 2012 04:49:28 -0700 Subject: [PATCH 353/357] API: SSH keys belong to user entity --- doc/api/keys.md | 79 ------------------------------ doc/api/users.md | 78 +++++++++++++++++++++++++++++ lib/api.rb | 1 - lib/api/entities.rb | 4 +- lib/api/keys.rb | 50 ------------------- lib/api/users.rb | 59 +++++++++++++++++++--- spec/requests/api/ssh_keys_spec.rb | 73 --------------------------- spec/requests/api/users_spec.rb | 63 +++++++++++++++++++++++- 8 files changed, 195 insertions(+), 212 deletions(-) delete mode 100644 doc/api/keys.md delete mode 100644 lib/api/keys.rb delete mode 100644 spec/requests/api/ssh_keys_spec.rb diff --git a/doc/api/keys.md b/doc/api/keys.md deleted file mode 100644 index d22b22e2..00000000 --- a/doc/api/keys.md +++ /dev/null @@ -1,79 +0,0 @@ -## List keys - -Get a list of currently authenticated user's keys. - -``` -GET /keys -``` - -```json -[ - { - "id": 1, - "title" : "Public key" - "key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4 - 596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4 - soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=", - }, - { - "id": 3, - "title" : "Another Public key" - "key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4 - 596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4 - soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=" - } -] -``` - -## Single key - -Get a single key. - -``` -GET /keys/:id -``` - -Parameters: - -+ `id` (required) - The ID of a key - -```json -{ - "id": 1, - "title" : "Public key" - "key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4 - 596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4 - soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=" -} -``` -## Add key - -Create new key owned by currently authenticated user - -``` -POST /keys -``` - -Parameters: - -+ `title` (required) - new SSH Key's title -+ `key` (required) - new SSH key - -Will return created key with status `201 Created` on success, or `404 Not -found` on fail. - -## Delete key - -Delete key owned by currently authenticated user - -``` -DELETE /keys/:id -``` - -Parameters: - -+ `id` (required) - key ID - -Will return `200 OK` on success, or `404 Not Found` on fail. - - diff --git a/doc/api/users.md b/doc/api/users.md index b9b04dc5..4f806b14 100644 --- a/doc/api/users.md +++ b/doc/api/users.md @@ -88,3 +88,81 @@ GET /user "theme_id": 1 } ``` + +## List SSH keys + +Get a list of currently authenticated user's SSH keys. + +``` +GET /user/keys +``` + +```json +[ + { + "id": 1, + "title" : "Public key" + "key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4 + 596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4 + soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=", + }, + { + "id": 3, + "title" : "Another Public key" + "key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4 + 596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4 + soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=" + } +] +``` + +## Single SSH key + +Get a single key. + +``` +GET /user/keys/:id +``` + +Parameters: + ++ `id` (required) - The ID of an SSH key + +```json +{ + "id": 1, + "title" : "Public key" + "key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4 + 596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4 + soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=" +} +``` +## Add SSH key + +Create new key owned by currently authenticated user + +``` +POST /user/keys +``` + +Parameters: + ++ `title` (required) - new SSH Key's title ++ `key` (required) - new SSH key + +Will return created key with status `201 Created` on success, or `404 Not +found` on fail. + +## Delete SSH key + +Delete key owned by currently authenticated user + +``` +DELETE /user/keys/:id +``` + +Parameters: + ++ `id` (required) - SSH key ID + +Will return `200 OK` on success, or `404 Not Found` on fail. diff --git a/lib/api.rb b/lib/api.rb index 3b62f31b..2890a8cc 100644 --- a/lib/api.rb +++ b/lib/api.rb @@ -17,7 +17,6 @@ module Gitlab mount Projects mount Issues mount Milestones - mount Keys mount Session end end diff --git a/lib/api/entities.rb b/lib/api/entities.rb index ee6f15f1..ee693de6 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -60,8 +60,8 @@ module Gitlab expose :closed, :updated_at, :created_at end - class Key < Grape::Entity - expose :id, :title, :key + class SSHKey < Grape::Entity + expose :id, :title, :key end end end diff --git a/lib/api/keys.rb b/lib/api/keys.rb deleted file mode 100644 index 4c302727..00000000 --- a/lib/api/keys.rb +++ /dev/null @@ -1,50 +0,0 @@ -module Gitlab - # Keys API - class Keys < Grape::API - before { authenticate! } - resource :keys do - # Get currently authenticated user's keys - # - # Example Request: - # GET /keys - get do - present current_user.keys, with: Entities::Key - end - # Get single key owned by currently authenticated user - # - # Example Request: - # GET /keys/:id - get "/:id" do - key = current_user.keys.find params[:id] - present key, with: Entities::Key - end - # Add new ssh key to currently authenticated user - # - # Parameters: - # key (required) - New SSH Key - # title (required) - New SSH Key's title - # Example Request: - # POST /keys - post do - attrs = attributes_for_keys [:title, :key] - key = current_user.keys.new attrs - if key.save - present key, with: Entities::Key - else - not_found! - end - end - # Delete existed ssh key of currently authenticated user - # - # Parameters: - # id (required) - SSH Key ID - # Example Request: - # DELETE /keys/:id - delete "/:id" do - key = current_user.keys.find params[:id] - key.delete - end - end - end -end - diff --git a/lib/api/users.rb b/lib/api/users.rb index 98ced6f8..0ca8fb2a 100644 --- a/lib/api/users.rb +++ b/lib/api/users.rb @@ -25,12 +25,59 @@ module Gitlab end end - # Get currently authenticated user - # - # Example Request: - # GET /user - get "/user" do - present @current_user, with: Entities::User + resource :user do + # Get currently authenticated user + # + # Example Request: + # GET /user + get do + present @current_user, with: Entities::User + end + + # Get currently authenticated user's keys + # + # Example Request: + # GET /user/keys + get "keys" do + present current_user.keys, with: Entities::SSHKey + end + + # Get single key owned by currently authenticated user + # + # Example Request: + # GET /user/keys/:id + get "keys/:id" do + key = current_user.keys.find params[:id] + present key, with: Entities::SSHKey + end + + # Add new ssh key to currently authenticated user + # + # Parameters: + # key (required) - New SSH Key + # title (required) - New SSH Key's title + # Example Request: + # POST /user/keys + post "keys" do + attrs = attributes_for_keys [:title, :key] + key = current_user.keys.new attrs + if key.save + present key, with: Entities::SSHKey + else + not_found! + end + end + + # Delete existed ssh key of currently authenticated user + # + # Parameters: + # id (required) - SSH Key ID + # Example Request: + # DELETE /user/keys/:id + delete "keys/:id" do + key = current_user.keys.find params[:id] + key.delete + end end end end diff --git a/spec/requests/api/ssh_keys_spec.rb b/spec/requests/api/ssh_keys_spec.rb deleted file mode 100644 index 7fb8c920..00000000 --- a/spec/requests/api/ssh_keys_spec.rb +++ /dev/null @@ -1,73 +0,0 @@ -require 'spec_helper' - -describe Gitlab::Keys do - include ApiHelpers - let(:user) { - user = Factory.create :user - user.reset_authentication_token! - user - } - let(:key) { Factory.create :key, { user: user}} - - describe "GET /keys" do - context "when unauthenticated" do - it "should return authentication error" do - get api("/keys") - response.status.should == 401 - end - end - context "when authenticated" do - it "should return array of ssh keys" do - user.keys << key - user.save - get api("/keys", user) - response.status.should == 200 - json_response.should be_an Array - json_response.first["title"].should == key.title - end - end - end - - describe "GET /keys/:id" do - it "should returm single key" do - user.keys << key - user.save - get api("/keys/#{key.id}", user) - response.status.should == 200 - json_response["title"].should == key.title - end - it "should return 404 Not Found within invalid ID" do - get api("/keys/42", user) - response.status.should == 404 - end - end - - describe "POST /keys" do - it "should not create invalid ssh key" do - post api("/keys", user), { title: "invalid key" } - response.status.should == 404 - end - it "should create ssh key" do - key_attrs = Factory.attributes :key - expect { - post api("/keys", user), key_attrs - }.to change{ user.keys.count }.by(1) - end - end - - describe "DELETE /keys/:id" do - it "should delete existed key" do - user.keys << key - user.save - expect { - delete api("/keys/#{key.id}", user) - }.to change{user.keys.count}.by(-1) - end - it "should return 404 Not Found within invalid ID" do - delete api("/keys/42", user) - response.status.should == 404 - end - end - -end - diff --git a/spec/requests/api/users_spec.rb b/spec/requests/api/users_spec.rb index e25fe134..5d7ef99c 100644 --- a/spec/requests/api/users_spec.rb +++ b/spec/requests/api/users_spec.rb @@ -3,7 +3,8 @@ require 'spec_helper' describe Gitlab::API do include ApiHelpers - let(:user) { Factory :user } + let(:user) { Factory :user } + let(:key) { Factory :key, user: user } describe "GET /users" do context "when unauthenticated" do @@ -38,4 +39,64 @@ describe Gitlab::API do json_response['email'].should == user.email end end + + describe "GET /user/keys" do + context "when unauthenticated" do + it "should return authentication error" do + get api("/user/keys") + response.status.should == 401 + end + end + context "when authenticated" do + it "should return array of ssh keys" do + user.keys << key + user.save + get api("/user/keys", user) + response.status.should == 200 + json_response.should be_an Array + json_response.first["title"].should == key.title + end + end + end + + describe "GET /user/keys/:id" do + it "should returm single key" do + user.keys << key + user.save + get api("/user/keys/#{key.id}", user) + response.status.should == 200 + json_response["title"].should == key.title + end + it "should return 404 Not Found within invalid ID" do + get api("/user/keys/42", user) + response.status.should == 404 + end + end + + describe "POST /user/keys" do + it "should not create invalid ssh key" do + post api("/user/keys", user), { title: "invalid key" } + response.status.should == 404 + end + it "should create ssh key" do + key_attrs = Factory.attributes :key + expect { + post api("/user/keys", user), key_attrs + }.to change{ user.keys.count }.by(1) + end + end + + describe "DELETE /user/keys/:id" do + it "should delete existed key" do + user.keys << key + user.save + expect { + delete api("/user/keys/#{key.id}", user) + }.to change{user.keys.count}.by(-1) + end + it "should return 404 Not Found within invalid ID" do + delete api("/user/keys/42", user) + response.status.should == 404 + end + end end From 1bae64d7f608e3d68d52fd59755216db6c70f7f4 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Fri, 21 Sep 2012 04:53:13 -0700 Subject: [PATCH 354/357] whitespace --- spec/requests/api/users_spec.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/spec/requests/api/users_spec.rb b/spec/requests/api/users_spec.rb index 5d7ef99c..243f70f5 100644 --- a/spec/requests/api/users_spec.rb +++ b/spec/requests/api/users_spec.rb @@ -47,6 +47,7 @@ describe Gitlab::API do response.status.should == 401 end end + context "when authenticated" do it "should return array of ssh keys" do user.keys << key @@ -67,6 +68,7 @@ describe Gitlab::API do response.status.should == 200 json_response["title"].should == key.title end + it "should return 404 Not Found within invalid ID" do get api("/user/keys/42", user) response.status.should == 404 @@ -78,6 +80,7 @@ describe Gitlab::API do post api("/user/keys", user), { title: "invalid key" } response.status.should == 404 end + it "should create ssh key" do key_attrs = Factory.attributes :key expect { @@ -94,6 +97,7 @@ describe Gitlab::API do delete api("/user/keys/#{key.id}", user) }.to change{user.keys.count}.by(-1) end + it "should return 404 Not Found within invalid ID" do delete api("/user/keys/42", user) response.status.should == 404 From 130433158981bd4f95121060d75d8fb56c14f80d Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Fri, 21 Sep 2012 05:00:20 -0700 Subject: [PATCH 355/357] remove commits API section from help --- app/views/help/api.html.haml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/app/views/help/api.html.haml b/app/views/help/api.html.haml index 1f0ce879..d317bfa7 100644 --- a/app/views/help/api.html.haml +++ b/app/views/help/api.html.haml @@ -19,8 +19,6 @@ = link_to "Issues", "#issues", 'data-toggle' => 'tab' %li = link_to "Milestones", "#milestones", 'data-toggle' => 'tab' - %li - = link_to "Commits", "#commits", 'data-toggle' => 'tab' .tab-content .tab-pane.active#README @@ -85,12 +83,3 @@ .file_content.wiki = preserve do = markdown File.read(Rails.root.join("doc", "api", "milestones.md")) - - .tab-pane#commits - .file_holder - .file_title - %i.icon-file - Commits - .file_content.wiki - = preserve do - = markdown File.read(Rails.root.join("doc", "api", "commits.md")) From 4162566e11d9239d82b532e34c503ad1cbfe4d78 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Fri, 21 Sep 2012 05:03:50 -0700 Subject: [PATCH 356/357] separate project repositories API docs --- app/views/help/api.html.haml | 11 +++ doc/api/projects.md | 166 ----------------------------------- doc/api/repositories.md | 166 +++++++++++++++++++++++++++++++++++ 3 files changed, 177 insertions(+), 166 deletions(-) create mode 100644 doc/api/repositories.md diff --git a/app/views/help/api.html.haml b/app/views/help/api.html.haml index d317bfa7..00085166 100644 --- a/app/views/help/api.html.haml +++ b/app/views/help/api.html.haml @@ -11,6 +11,8 @@ = link_to "Projects", "#projects", 'data-toggle' => 'tab' %li = link_to "Snippets", "#snippets", 'data-toggle' => 'tab' + %li + = link_to "Repositories", "#repositories", 'data-toggle' => 'tab' %li = link_to "Users", "#users", 'data-toggle' => 'tab' %li @@ -48,6 +50,15 @@ = preserve do = markdown File.read(Rails.root.join("doc", "api", "snippets.md")) + .tab-pane#repositories + .file_holder + .file_title + %i.icon-file + Projects + .file_content.wiki + = preserve do + = markdown File.read(Rails.root.join("doc", "api", "repositories.md")) + .tab-pane#users .file_holder .file_title diff --git a/doc/api/projects.md b/doc/api/projects.md index 2d67bfa9..d06a41c2 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -239,169 +239,3 @@ Parameters: + `hook_id` (required) - The ID of hook to delete Will return status `200 OK` on success, or `404 Not found` on fail. - -## Project repository branches - -Get a list of repository branches from a project, sorted by name alphabetically. - -``` -GET /projects/:id/repository/branches -``` - -Parameters: - -+ `id` (required) - The ID or code name of a project - -```json -[ - { - "name": "master", - "commit": { - "id": "7b5c3cc8be40ee161ae89a06bba6229da1032a0c", - "parents": [ - { - "id": "4ad91d3c1144c406e50c7b33bae684bd6837faf8" - } - ], - "tree": "46e82de44b1061621357f24c05515327f2795a95", - "message": "add projects API", - "author": { - "name": "John Smith", - "email": "john@example.com" - }, - "committer": { - "name": "John Smith", - "email": "john@example.com" - }, - "authored_date": "2012-06-27T05:51:39-07:00", - "committed_date": "2012-06-28T03:44:20-07:00" - } - } -] -``` - -Get a single project repository branch. - -``` -GET /projects/:id/repository/branches/:branch -``` - -Parameters: - -+ `id` (required) - The ID or code name of a project -+ `branch` (required) - The name of the branch - -```json -{ - "name": "master", - "commit": { - "id": "7b5c3cc8be40ee161ae89a06bba6229da1032a0c", - "parents": [ - { - "id": "4ad91d3c1144c406e50c7b33bae684bd6837faf8" - } - ], - "tree": "46e82de44b1061621357f24c05515327f2795a95", - "message": "add projects API", - "author": { - "name": "John Smith", - "email": "john@example.com" - }, - "committer": { - "name": "John Smith", - "email": "john@example.com" - }, - "authored_date": "2012-06-27T05:51:39-07:00", - "committed_date": "2012-06-28T03:44:20-07:00" - } -} -``` - -## Project repository tags - -Get a list of repository tags from a project, sorted by name in reverse alphabetical order. - -``` -GET /projects/:id/repository/tags -``` - -Parameters: - -+ `id` (required) - The ID or code name of a project - -```json -[ - { - "name": "v1.0.0", - "commit": { - "id": "2695effb5807a22ff3d138d593fd856244e155e7", - "parents": [ - - ], - "tree": "38017f2f189336fe4497e9d230c5bb1bf873f08d", - "message": "Initial commit", - "author": { - "name": "John Smith", - "email": "john@example.com" - }, - "committer": { - "name": "Jack Smith", - "email": "jack@example.com" - }, - "authored_date": "2012-05-28T04:42:42-07:00", - "committed_date": "2012-05-28T04:42:42-07:00" - } - } -] -``` - -## Project repository commits - -Get a list of repository commits in a project. - -``` -GET /projects/:id/repository/commits -``` - -Parameters: - -+ `id` (required) - The ID or code name of a project -+ `ref_name` (optional) - The name of a repository branch or tag - -```json -[ - { - "id": "ed899a2f4b50b4370feeea94676502b42383c746", - "short_id": "ed899a2f4b5", - "title": "Replace sanitize with escape once", - "author_name": "Dmitriy Zaporozhets", - "author_email": "dzaporozhets@sphereconsultinginc.com", - "created_at": "2012-09-20T11:50:22+03:00" - }, - { - "id": "6104942438c14ec7bd21c6cd5bd995272b3faff6", - "short_id": "6104942438c", - "title": "Sanitize for network graph", - "author_name": "randx", - "author_email": "dmitriy.zaporozhets@gmail.com", - "created_at": "2012-09-20T09:06:12+03:00" - } -] -``` - -## Raw blob content - -Get the raw file contents for a file. - -``` -GET /projects/:id/repository/commits/:sha/blob -``` - -Parameters: - -+ `id` (required) - The ID or code name of a project -+ `sha` (required) - The commit or branch name -+ `filepath` (required) - The path the file - -Will return the raw file contents. - diff --git a/doc/api/repositories.md b/doc/api/repositories.md new file mode 100644 index 00000000..487ad9b2 --- /dev/null +++ b/doc/api/repositories.md @@ -0,0 +1,166 @@ +## Project repository branches + +Get a list of repository branches from a project, sorted by name alphabetically. + +``` +GET /projects/:id/repository/branches +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project + +```json +[ + { + "name": "master", + "commit": { + "id": "7b5c3cc8be40ee161ae89a06bba6229da1032a0c", + "parents": [ + { + "id": "4ad91d3c1144c406e50c7b33bae684bd6837faf8" + } + ], + "tree": "46e82de44b1061621357f24c05515327f2795a95", + "message": "add projects API", + "author": { + "name": "John Smith", + "email": "john@example.com" + }, + "committer": { + "name": "John Smith", + "email": "john@example.com" + }, + "authored_date": "2012-06-27T05:51:39-07:00", + "committed_date": "2012-06-28T03:44:20-07:00" + } + } +] +``` + +## Project repository branch + +Get a single project repository branch. + +``` +GET /projects/:id/repository/branches/:branch +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `branch` (required) - The name of the branch + +```json +{ + "name": "master", + "commit": { + "id": "7b5c3cc8be40ee161ae89a06bba6229da1032a0c", + "parents": [ + { + "id": "4ad91d3c1144c406e50c7b33bae684bd6837faf8" + } + ], + "tree": "46e82de44b1061621357f24c05515327f2795a95", + "message": "add projects API", + "author": { + "name": "John Smith", + "email": "john@example.com" + }, + "committer": { + "name": "John Smith", + "email": "john@example.com" + }, + "authored_date": "2012-06-27T05:51:39-07:00", + "committed_date": "2012-06-28T03:44:20-07:00" + } +} +``` + +## Project repository tags + +Get a list of repository tags from a project, sorted by name in reverse alphabetical order. + +``` +GET /projects/:id/repository/tags +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project + +```json +[ + { + "name": "v1.0.0", + "commit": { + "id": "2695effb5807a22ff3d138d593fd856244e155e7", + "parents": [ + + ], + "tree": "38017f2f189336fe4497e9d230c5bb1bf873f08d", + "message": "Initial commit", + "author": { + "name": "John Smith", + "email": "john@example.com" + }, + "committer": { + "name": "Jack Smith", + "email": "jack@example.com" + }, + "authored_date": "2012-05-28T04:42:42-07:00", + "committed_date": "2012-05-28T04:42:42-07:00" + } + } +] +``` + +## Project repository commits + +Get a list of repository commits in a project. + +``` +GET /projects/:id/repository/commits +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `ref_name` (optional) - The name of a repository branch or tag + +```json +[ + { + "id": "ed899a2f4b50b4370feeea94676502b42383c746", + "short_id": "ed899a2f4b5", + "title": "Replace sanitize with escape once", + "author_name": "Dmitriy Zaporozhets", + "author_email": "dzaporozhets@sphereconsultinginc.com", + "created_at": "2012-09-20T11:50:22+03:00" + }, + { + "id": "6104942438c14ec7bd21c6cd5bd995272b3faff6", + "short_id": "6104942438c", + "title": "Sanitize for network graph", + "author_name": "randx", + "author_email": "dmitriy.zaporozhets@gmail.com", + "created_at": "2012-09-20T09:06:12+03:00" + } +] +``` + +## Raw blob content + +Get the raw file contents for a file. + +``` +GET /projects/:id/repository/commits/:sha/blob +``` + +Parameters: + ++ `id` (required) - The ID or code name of a project ++ `sha` (required) - The commit or branch name ++ `filepath` (required) - The path the file + +Will return the raw file contents. From bbdb2c3fef5a71802131c08226d7f4dfa18ddd89 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Fri, 21 Sep 2012 05:06:36 -0700 Subject: [PATCH 357/357] fix links in API README --- doc/api/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/api/README.md b/doc/api/README.md index 443ec7bf..36a36f8f 100644 --- a/doc/api/README.md +++ b/doc/api/README.md @@ -33,6 +33,6 @@ When listing resources you can pass the following parameters: + [Session](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/session.md) + [Projects](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/projects.md) + [Snippets](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/snippets.md) ++ [Repositories](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/repositories.md) + [Issues](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/issues.md) + [Milestones](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/milestones.md) -+ [SSH Keys](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/keys.md)

    Htqb$=AB&_8cm_# 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/two_women_holding_hands.png b/app/assets/images/emoji/two_women_holding_hands.png new file mode 100755 index 0000000000000000000000000000000000000000..619646c4e02aa3887877851c1e462485a28e37b9 GIT binary patch literal 7633 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�PmVR)L0n0L0 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/u6307.png b/app/assets/images/emoji/u6307.png new file mode 100755 index 0000000000000000000000000000000000000000..6557f5672fb8cd1be9303787f7c00eddf0cd6b83 GIT binary patch literal 4103 zcmV+i5cuzjP)os21kJ{iD7=n#42?Ym}q5!EAh*YIO+7PO!jS5k!@Mx(j zH55`c3N0lMXe2}p3OH$m4GwZ*UbYkL6bEd;-nH>Quh;v!d*3s2PR$X^-QC%}dpEW) zDE(a>$s^sFJ^%mtzVCc9<14h*{2?Rx!{+}DuqhL93a)l8K#HqyNHoSN#^HU*LK7x4O*SE~^HJYr;1Wliy&LxR?rQ6P4g-kO~AK&Zc-kNpJ;Z6{M8M zp#BXR^?=@<-+EdGh^s^+vG5}_S=Z4Zp-Mp51*-rd3+Y6$tq@XJh_j$wX&=uopxi7J zeDFh%cOa>uPeHf;Gcx(x^b0yM;}j5^!sk;Tev$?D`55sogk0v-E#ms7O{}Y5OKU|7 zb)i{AtSC}QK1`HWgV!rmK_1& zYB8U>@UK{8wbCddmZhe4Hh;h3Zf;v}3yyTi=nP%C9){f{d7Vco&4-DUlCW^7cB+{d znM+K>aFxp=?>@$TzxyYK22MaG3JC>A{C4{DpVH6kj%g!6oPy1v@6#$@EPkSn#Cq&3#iJnc+Lu5`sDK*%)Y~&NA4ow z_7Sl{L`0Z~<$wqQAQ60+C^QDGQQD&|-_D!eZ}Cju&-v>Gx0^Yy-E{?rd*1*z0%@_y zXoLTrG6lp%!r?q;H_NOw%u_fu7JELmn@+cj2j2ZIaXU&xMiG28(LhdRNqbqovEXlL zcIL76SL<+xeCU#J$lu37cb$GsyOT%294@AgHPmQu3f#8nZ%OME|8neKsR~u%;Gj*& z2eGA%v?WLkDDXTFrBonyEhGX7XcQV>`Dip}g0Ki79bxAD&x`)yl!m|Jq1V3yHDTV< zW;DX9lN%6`S5OT^Jwg>RHZ^YKp^it0T45|LQTR-TB`vyg9rT>&0bhXDSP_c_v(Kg4 zsxkrrldox!X2eROg#ZnXwy4pwkP1{8CfHJ92^(K4JmoPN7Shc5p^pFLOLPB>?^irb zA)kk831RuiB@7U&i2=6H^6C||W!mV@cTi?EgiDXbE>FPYr1>07U&*hC6JsbY_ z+TU?u{Y3~Zkq8DvKYLzz8TaV|D8L66K+~7zb79>@CRzxZfGKv;#tB=boHT9yN0=RM zq(L^AK0p&BBpkZ)T}H$5nicFH-U~4aQLzeO3Io(U!hj9+(OM3q4iJ(K3XiGKDDqy8 zjY~H2=ygA2ESK)vK*7)92nUHxBHP2=>+a&-&G#}&!7K2IwzXvZ6k!oTqYwy$5GJjx zkcA)e>DMQC+%-Y!;Odoc@`Pr;a=gCC?DD)x`_{yUcmV&;*3C42LJ4sIEh{-6v_KdKo4&zq1FpE*}@d+IdVG9c>!Ezjw z$&(yT z($&^U{!jtl0Fe-^46WqvF8L-m-g_f07qu|TpMUXY4*lC(+`s*P)?c-rn1}}oE|_-N zXc?=mlmP+*r2G_7qUHkAp_IlY$5=e=nebOy13n;8$|tY#jHQq-aQM52;a#Xn)o|&& z^{k!0mTSNGC#+d>5#hOErsCUQ|28ArlRTY#h86MUC>=Dw$2VF68cW^_XtRQ*we+Vk zKp>1*jSlqcW6#%UW6H!yHaHFJxON8@F1?Vtg>_(477E3I%mEgzUPNnGD|x?Qv`xfS zuF--n=VqvApb@T3m!$%NEz81kEDRc?CsBUzd(x8Fj*XB4sU*6fnb3(64u#ox-A2lx zE8oTbltBRmuQ8b{G@PD1s6H_R!n(boOA! zZNiZ-p7f}5>KKa>ip~?A^quUZkSh=hg{W(&15Md<<~lhra)5oweY}=@jicG4jEE6V zoH#+@#|6B&2baQ}^XIT2z5v^|CzxO~1ay^70gb^|{^%ID=O;*D9kaOcg&S!<*-qZi z(>Kt^qE9S>s~ClFI!yDwH&ahNRZbP*m0^DI$zLF91QR)wK4iom&mN~e+s@I=N^n21!;XhD~g0=hWCA$N#+RgcnYoSU|`skAFi1Jjf5Vb~jHxG+rE3bUbh z1EXYBmX`)zq9N2kZK#$+K0z!L3#^c|BuBR#okQy2ZTrnJEgz&l5irVG%YL8hh)hP-vxziYUSnNGZ)0G?tJKVJXWLGASfz%p~^??xj7`PHU`{ zGr?DX_f@)c-86<8$JQ%TFmqncXn>+Fe8wS5^#QK$(w=TNE=nQMLXS2`=2##QT9{*W z;Mt-HT{~oBRag)Q+p;O>0@wWd8XjnWfHy|oV8|Pyd`xPY)O)J?DX#wY)jZk#B(+ZM zXwQNcW^QKAr{-=n%)AdM4wF}1=`P|(fS4QO z^XGk@4I4M`mDE=_dh#ed0%U<|NK_<9gc6{c9sv}96p(}DoFutha?GxrO~%a_a|&Jo zL_kN$dx7#1P*4R1LIY;t0o}k6%mlcCQA|;M`P(nEe&c#@Fx>j|t<1~KW6y(oNTd=B zr-m6E7$jfFQ!e3fn7Z0JvlUxWi?tnV>9jgQVL+VD%TW(d#SwV#Cor%T*a5hh5MEZZ zjO%Z>p0QNaRIvUt>lr1POM(mb9Gm9#&Aj(HU2^2$alm70^aM@b=|q48hT)rwzsXIX zy@}f9TFzN^PFYu}3Ri)Ifx!XJ6g>ky;GfCY<2pD35h7se7nZWRd3AY{%=PfZ@h5nq z;|b8<_zoyQj_=nc(p2wKt+_4iagCIxyh)pznP{>x1bcyC3KZGZv5T9VZ>AKRPNC6G_rx^hT0q-Q= z0SNTt3o8~fN`Jba*V|r)S|Bpc+yEWv4)RW(lDIIK84QR!lMxU^5X6G^e7gzl?LFIh zrt2AY_3lC_LGla9acw9PGfE=Bf7pi}z+q}ez`xChOPLvBM!Ud-s_6$!KtOM%m!_>v zkOL&3VXifIs_I+B90!ek`L367b1s&&m<)|3pU=~>w57z~C}S7UfH$*Fu=ItaMdK`G zO%Z;9;{cajbqT*WdWI>$nKD2CIw-7s1A?4=19V_a$IK1z39z?sFRq>@1-v{h6)l`w zac zrf88xnGv7}5E=>L*SLCLV=4H$-<$98f} z%QZ~J)_1o~S_7mf1MTr!gKwdPLI}YWm|bFaWHyblMnJ)gJ{WS9?^_)+l9D0IZK) z6cj6e8aN5`@RHF6*-{4N%y^S~i1IiN%>cwE6gB~9&Nii=Pk2Dah=*=Ejiyn3rG7CY zgs24OvX~{D$A8eweCmK0-~iS~v@U3X;&x}m_XC}DaFE+M%weEMYdtcx0Yww$0dZPr z;*YqOCa$0shy&r`BW}b;s@N5`*fcNzbn{Ez<{vpmH;~p^ca{5YFagXrCm!RgT*RlD z!(UL#Dk^|Tu`VDvyQpHmlLJyl{Ok1cLtbMC23#O9qo2(QA;Lft;9x+qk_)KhV&W_% zOd~cn;_RXXS*`N_oAPR&5`y*8biw$p9Yn`P`{tpmR8|iYpUqJu>002ovPDHLk FV1iEbrSAX$ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/u6708.png b/app/assets/images/emoji/u6708.png new file mode 100755 index 0000000000000000000000000000000000000000..e4dfe5aa7626af6907ffb8821282c33f354183d2 GIT binary patch literal 3011 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 JPDHLkV1lM~5PARr literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/u7121.png b/app/assets/images/emoji/u7121.png new file mode 100755 index 0000000000000000000000000000000000000000..25f694ed3ff0b8865f7fc69e5115d8e5f9488997 GIT binary patch literal 3942 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 Al>h($ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/u7533.png b/app/assets/images/emoji/u7533.png new file mode 100755 index 0000000000000000000000000000000000000000..fc4a9901b461cf3f8a95d3ea2b775885632f7923 GIT binary patch literal 3048 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/u7a7a.png b/app/assets/images/emoji/u7a7a.png new file mode 100755 index 0000000000000000000000000000000000000000..c05f5cff73ba4cce11c158826a30839149c8e50c GIT binary patch literal 4180 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 c>n+a literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/umbrella.png b/app/assets/images/emoji/umbrella.png new file mode 100755 index 0000000000000000000000000000000000000000..1db722fa661ea4e74fca2dc29e7972716843d812 GIT binary patch literal 4745 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/vertical_traffic_light.png b/app/assets/images/emoji/vertical_traffic_light.png new file mode 100755 index 0000000000000000000000000000000000000000..7a5ba35f09d9a0f80fb46ee148d996f78ea1c953 GIT binary patch literal 3422 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/vibration_mode.png b/app/assets/images/emoji/vibration_mode.png new file mode 100755 index 0000000000000000000000000000000000000000..a716e96c6353cfcc026eaaf8517f207122c2cb06 GIT binary patch literal 3906 zcmV-I554e-P) zdz58medpol-TPeX)>VD4mTo{=5Cqe}Fc>sqkT}Z4@q!GBSrBwU0;9$V7)a0rqDI4t zq# z`Kdp~0UX=jb%?mSXDYQpvJ}Qkr;K z$#Qb4)v9M}nN?Ztp3mNIRcx@&0=WDQ;oYA-(IxY`96P65peKhd+f2hA7r{R}F7$Vmef1Udy>nq7y*+dkDJ2wB(vCz(3qq10 z5WF-*h+>|LSzT7i)iSC%l^VmNY#n0rcHiAO;r!3s9|vaK0iSwZIAY;kH}Aj55sT*2 z+f7e_t|d!!AM!4xWv^H0TQ2EbAQU!f#y!Q&j+Xf9)7}&~Fo2=V1r}cg8;no&Dldw~3qnH{%7^T-Qyy!tfdTTWJd>QU(;M9Z_fYeER8#0Gl|;IH23eajX)X~}%%cQNn4 zL(KjCpR(go`OhyF#s?(D4$=;i4pJaUytL#%B*dJNwc@WHk+1!ZVsH0jZs}lhM5(-^Hp;M?2i}zn99CeAt+-2W9P8Mr+ z&SS^0iyDr%e)a#v+HM0lwB*7>BEtGmmisTV-*U5I2DUGrI zQJ#37HDior^cPv)!(q!?|-* zLo^jhStuqNbC&$}Uuig~-g~u%lNa0$9dRt~+id`a)SLgGd z>lGv|(2XZoa{V)Gn#Ym9#}TiiYYtmCa`#HE`w7b*;;iMoas{J-tlr{Ypr^p#TK;Yo z_oM4z4*p#h_EV|w!&MC4&ueh@Ygl|ZqZzSvtW;yp8go}V>}(wmU8B2N)o`<^=)|@G z^pqXdRidLnY4K}?p|y-{qTIWyd_Z)LPdo?+Jz8V=IV zh0=tMV$-p00L4T{A)!%{kTSjnNz1?qojG^jL-jO%@QllC*`AYfj~ zy+7u^ypQ+YOc7AW@&B0zzGo_GgT!IR$H)`ry&3^nQs!q5@Q$}|_YZmV$&5wh07$58 z(Qwi9YC5(JAVd-*fl%K`p@-PA=oJfWT*aDKa9fM~>i^D~Td0qbjB(dGjz6Dst|ln} z@DJZ+=S>JejC2RBxbqAA^I!6&735_KeH?xchyFeQH{Qd0=X3a@^c_yUZYuIz!$lHE z5F%{@5QKmbP#vYz+0y=jIL^Op=A%C$0mPiU|A6OK(zS%%1$^&emR`vRKWVpg1poxQ zD3}9N}NCVDo*P@V7t@K71p0oXn{Qktc`%giOOl2m}bi^zQ-@wF+5n z*Y-~eY<-e>ujTjN1i<~DV$*%}EF~$jV;y~m@##;RHGlCJTyhJ88|Ye2XMv~gq<1<0 z;UeJVlep(lwymM(&|T-O)^v$8-4KZxA~Bz=5P5zhZ}_hO46o(MTj^X(Y<}P95GS8) zpYisyn`6ctfv$cY{W@ct0C>xXd2SP-WzHfo)5`Q65RqlOrkUkbA}dY?;ISL2O;8Ht z83K7^(GvTN1^wiaJZqMe>P{ZMmg7DJtT>4WBUyzU0J2G+X#>a+5lx;f%K)fX>0Zpj zD4{}VoT+9;?w{p z=vhc-5rB~mBn4t?000#WSO6eRsK#B-5tF8iz3qUAh>1b6 zg)Q#@%`N~?!20?0Ze-3O)H6iQ-~f;Z@?5j4a(gCfUg-cpPIJsUc}^M_e43~BrvMPC zjT6&dFItREmxwr%UEzswu`(o-`^am6l#xvguc!Aw;FTZa2N!Y9PKHb58TFjl5^BBK zO{NcE&&P*^@({OFdH>}A>{!d_M#>AOER;nJ2MrhPNTBUPIJ}u!1qpeMKy4?F-3q{^ zA7}l+eD~j&Qz0Zotpeo8^S!Lrr> zo@aaotM37zvW?Z(QtBl}l9b92qt8*#THK}!AfNn{pq??fk>++7g-%8`bJvBOaxJj1 zi$~US{E2*GC1;=rfGko+Et`H@EJW(aA^?TRL-@z%IsHOz_*+wP#|M}grfU(EamII0 z9U~yLI8DC@wp0LA#+p?qQ|#my*RkL*e*0ozZU+zF$EBa=^OthuR#vpMu)Pc*Lj=Ie zt=x#4@8pbAOvPOv=7~Ef&tv)lT|;U8xuPSNRS}52_WBN04)WH3jswNJBtu@59X2fZY>XI;0olIoF-X%CB+8HN4_T08V)ezkGsI-@_Mw z#aWR#8RLKsjN*DMJDN4ObMOJC;*sxg%ZJ#!jXo4wq(U2cX7U(pX_=sv_5*jIh{qn_ zvZMI;9jtge0KfHWo_UzlKfra@b0(Gn2JlV1>nv{jrdB*~6JK~g3o#!MTZ990yC+9J zgO{N;iA{g21kA%aY?azuiN+@8sh z&Eys^DK#w-p#5K4ii_BQD-Yq1S90KSz0gFg1DHJtiYQ|NhH>>9`11kaOTWWdg+-I! zm9!O^AuUdEX72(sq5V2AG|p-ap^k{vTR7+=bj;zlHFP5&#rozkEo07RPBYjQ&L-4(f z?Vkd(Tmu5q#6BZU2(w%R;!JjhbHrJktOUdM9mAARhgq*n?E?q|`7DwKDC4o)Iq4&2 zPjf8gSU&Vej~{v^*R$3hDUk9?FC2e0>Jp? z>)d%nw|DiF9A8RFI|wPsZ<;)^j7n49`awT^!42c>1E7M+*Ejg&$4hP~Czd7XERm)p zf#BDhh&(ps$E%EtuyN3{FF4WkYa2jp5JK2~$Ds1kXI*e6Upg?if9$4QrkIi>1ccz% ziWrH=b7~nA6AX>9e$a-SHoBnUv>DrDgK2*<6GB*u?$a0A@4SAWdgVNC?(3qXgF@P@ zkP!TO5D|0gS+gn?hIaDw4*&eM0axC-)h3L^7&o$aZ-WEa|Ahk^^@m?P&|8n0>)gfN zj_fQ`Dv&0G(5#pJ%15%CYMt>3wv74LUktkTW9$78P{Y8Cel{0EC}Teqp+xd$`#buu zPRA}RI;<B?r{7DaJT4qX0BRD4-wRelr=v zK#Z{t(+AK#h#t&Ghu;h;nhV}2z{~<@A4DfQQAWY9*E(3o1jb{GZ1e`+!89I28yg93V<&21 zC3zvdg@iZ<@B*9651tGBc}UYV=rW3qGXYG1jxzyFfQ~Z(On_E10ZahbbuaYp2_XW1 zu+U~I>U0(rs>BIxJr`c8{4f6fZ5*Q`BWN}=)N2W%NWofQrQ3ro9qQR2(prXvxr-1&0l+4b-T&_a5aP4Z zo&)M8Db?>Mady|x$o88@$49em+sCkN^JcR2Fb1*)k~l&fMG#8BT8HJ89C@Cj+aoD* z)EgPHfgxO+o&-=5Kv5;P133Jy030}Q!0p+y2Zs+ICUl$l(GMQRLytU$pFVRGBOA7_ zu9B$+C^#5cTf!L!3qs#$Sf`FJYivS~K$ zYqmy5e=n8kogccXd1t*j^r4Z>qjKBkG3?kjO7jkq(gR462ueyoNVfJ;uLrFyj5aXN zaNF$_SX%C(+s%mq1FX2#nkA0ok6$qe-g)Pp=79$uP&eOvGflh!pZxUaaCte#YiBOu z%YX6}Y~0vHmZqqu5u{Ym&Y{o+bYY;&lF%<`@)EtgS6f={)|Qr*M%wL_UDV?3xdklF zFQVuyqMI*b--mBqDe`in-imkFqBAHO4cfx?V(;Ev*fus=S(@h%Qn13^T*Em7YXIuN zk(f$K3+*&3z1&&GrMKsC>EcB|#;X9ZZr0j;R|H^iaL@=LRF-9EkN|+Q4z1QO_FTUi zYwLxy{jADbVS3ae1+Wx98^@vomuy zPR-2V!i8DP&rDP2iC9m93k@4}vaA4Jv|fRZX?Esm$L&caxYvT*1XMEjL4 z+U+G=zC4Gy*%@jl(OvF9%6=8G>xuvrMG;soD$4kmB8gh9hA0t`)K@A(tR&({fJWdP zvyxf~R@?sqi~|&jLqtkA00Xci2CzKH3gpJ2SSiuTySQ{|0n<~nm^e3y(-Y@#^7sUv zJNh*F@*sBZBxW2qh=EoU!V0!(QIf@%yQtW;FyF@9+n2DoFhz11%S&wnd+88>=V|Q? z_)A<7fZ5quOifMk1lD?smSu@3ji8i(5{msWQq(H1s1*KpL&Iajh3T9GEMTQ!r7a>j zwxWP_5fTdsTHg>dY#$qeJ+KpbmjLN?F>`Sqr{6e_SC7Ar6R(`WtFL?ywR#iRePBPv zwqA#_&_ww*=E>@dixl>lNaBapP%|qth=rVz~tm4UV7<8^m4-faPi^{Tdzk{?KKK00k{N^#zI0s z$Y6Eq2r2kE-7q5x>30kvECjo;BLRf z@WKmt>#cJD6tSX5`)$h1E}cVMDppcTM!>s*0F;n$Qb0Ho1^~WgDhM{dKs8wP4FFIp zU;*CORpkHHA^g4qoKXzo=*B@}MiU42?Zg*8^9dX|`U^bw%yZeyg%e*T5RL=*_umBo zR+><(l;z;^{ITaTb+L{5hTZ7tf|CrT1e|avrDAJKNVYBnwLq}A;67M+KruKzXmVG9 z`%*9(43d)4zrzyZO9-k^ez8XT(PkQB->z-gvUwwJz2zXDI`ZuH=YMwO-*)W0@h4@s z_s7%IuV129)!RM z1=chu=-C3f#vbY2DCF+}jDR9@#KF%M0agQzw1)k=w_$wz4{-3ty?FeIBVRak^61p& z>-K(i`rPS9-ZKFGXC)~W#zr@zy#l}0EH3dv8zw=X);JYq>qlUPBI%VDLXk))5de^$ z5fa|AGFsg=R5OV9)PnX(t1z?kkwOs^u`-7wrK=UJ-sca?epPX z`#yHlnbW7g4RnS9#Ll^sR|EiX!Kb}at!4`7jWw2uSl^BSu4Y)jbj)d9wNnSXb}CfMoK^=sMCGDk}9O!k*FI_4ZIS0=MM$yQIFgD&m z+K7?XYe-U3I!T~nQ^r|GVpjtwr|@vVH03rYPMrAdg5dP@^f%X!wOXy)YmI>~4G$)~51B|{h^+sC zo!d$27`2*0T2Y^Q>!2cqC@4q`M{B7x3SwO<{#RY^*^1GZ^ z`2z?mE3AQG7jXOx0K21w!()#h!hiqxFy}T`RTDJ8NF1eTGzK}Sb&42ycZH-2$?0tj z#WWXuYRl5v#ardf$nscprV|g zT`dDb(xMR6QXtoW(_ul5tuIN0v%G^$PM)W#?H+vgGoQlJ$`ZRlSa0Y^->mPGIPUo1 z=3ft%40i|+L`jS{&rjp2Cl8@0ODGk?Xp2$@CNK*~ghOY!jYy?e&wyYr-d?gs9qpAB zKFh;Yh&!g8v?Nem6>7FN;NVRk!{_g~3-b%}!D7sL$bPGfem1J(*8Nz7FuIbSfs+W0!0Nd!u# zkyQR?4YV$J+q^hS3Dn{|R1{-$bPSOU)AdL8kmSI^w~z?KLH#vQqypZay^LkKnNspf<~31bX&X`l*ll_pmX zsWvF`9A!~*?Laudlp5dp_WcZulB&=0Ye7ypud(C%b%hn_IKA$6m+^;x^kv$8cA?ZI zin2i7%bEHv^2Jf@-GKXm<0L81yA00n0su$zG_6-#BKtWZ>=|G+bSWUAIjz+^v0x^Y zg@J`63a;S$-}?vLbnwH7)0BZ*pL$1e90Gt1kblX?m3a7@vx!S%%h76G{l)YK+maI)+gOC5=VZ zf)fp64O^usN|J&V&aw;}Hg4q1tSn1}Yc=hzPN3We)M{;##|Ut)O`bk|I(+VKqBI(X zHq=@ecvqC#dPZtZtzUyBS$|!<3rL9uF<_vPQD4Do%?R`4##e)!6DZjNych8-U0|PK7C3`z#{fuyde$Ic%s3wOasyM6#C}4-al&%n!tz3jyktw|rD1>V_PVTS zP=&j8_uPY#kr5m^bO=vA`6T8k+J}#vJZDiWeYHMWjN+KCt<<|70tVVhUR?0VqtC`FaPqFfD253-zf%%266W61kVx23JVJh zIQp~y#njXV+;YoDshBa2#~*tPQ)?7OP zBqSOY00RSD1_QzgjzlQMJ42`jdja4$C|L%t&<6kU*ni>4rw%hf;aCHu6elzz8#i$- z@Pi-zh+SfM!w6-Pb9mr^Z*e4FY%ilhbH`BwWnRKM$7_wC$QSLR zC_$XoJP@gZR0>J0#*0$~fFMy?f%SFPe@wM>&oylXrZ^ICPA{wsWiOz#rC(sI__@go zfO8FhC{UHCgux=P{cl)6N((92`s}9tdBD{lhJs{C9ZgPzVnmg)X^a{xpCC#km(dfh z6#FW1tYYLOkx*d;0#J@y8A{wvh7+E1%rXcCSP3Z&1RVFBtQ3-=nk4x5q@;Ob$?-_Z z*vAm%prwIxW;GeRW(?pTP3kG<@`OH9zc$d|YA{7>Y9lB_XttUJLdxfc8qwN16Dqor z6%-J@k{iyyT(o4mL5?l58$reidS#oErzLdS z7ttCV{R(|N{ntFtGXV4N2>?M?_0f?t{p;ne+Pf`WR2GfouQQokz8Pnw$6DMF~O4q8(;!ZLK_dZ}m4Kd1WJUuMmr zu9S@}Drq$1B!#M|9aUCUOm!8fm_B!$TwxOihBxt{$s>TZi*MJDiFf)wx6U2HBj**X>qZQIF8om)}a;-{AM1eui$6>V1#?|uAwW;r2uPS!yJSGMm7vr?)T8d#M!?F zP>__N)qUcsE9#q4^(mf`)L4AK-akfY>nh5(T209C;WOZg_wVwlwdNq0z*?sK5J@jc z#O)f~rdoHj-VW=;hSqT3w}w8R{BUS!Xrr}mi?zlD0NyWgeYAGrY;fl6*|U%It>3Nd z^VQFQpd?&hzX+6%d>bUV2<7a56<8zQN7MJOSFZ{kuFB9a`$PvZLEJk9!G2|A5FUG% zKHew(yLSM>Ua=p1fBi1-o@Mo4&&B)9|Nb?&t5D|u0D1Rl6F6UtegFUf07*qoM6N<$ Ef_2=8MF0Q* literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/video_game.png b/app/assets/images/emoji/video_game.png new file mode 100755 index 0000000000000000000000000000000000000000..59d45baeabbb4d839472ebf66bd538dd9341e390 GIT binary patch literal 4957 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 bI^FR<4NrTPCgjDy00000NkvXXu0mjfVN;M0 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/violin.png b/app/assets/images/emoji/violin.png new file mode 100755 index 0000000000000000000000000000000000000000..0dba5ba2b66507b4461f804978459c0286da9ab6 GIT binary patch literal 5020 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/volcano.png b/app/assets/images/emoji/volcano.png new file mode 100755 index 0000000000000000000000000000000000000000..9b434539b05655036d465500e296ccce84711ffe GIT binary patch literal 6167 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/vs.png b/app/assets/images/emoji/vs.png new file mode 100755 index 0000000000000000000000000000000000000000..863638850e1e30e39cf82aa8cf9500e70468ec7f GIT binary patch literal 3424 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 U?H!q0_y7O^07*qoM6N<$f+YN5*8l(j literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/warning.png b/app/assets/images/emoji/warning.png new file mode 100755 index 0000000000000000000000000000000000000000..466658d99a8f4d3dede8bd41da34dde0b450f7dc GIT binary patch literal 3177 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/water_buffalo.png b/app/assets/images/emoji/water_buffalo.png new file mode 100755 index 0000000000000000000000000000000000000000..3bcde3edd9536e4c4e298daec98e18f0f244b479 GIT binary patch literal 4774 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 AX8-^I literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/watermelon.png b/app/assets/images/emoji/watermelon.png new file mode 100755 index 0000000000000000000000000000000000000000..fc212be784482c07bb3c49168c48784d6ef9e046 GIT binary patch literal 5501 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 bz`l-oo0v^gJ+q1+0}yz+`njxgN@xNAIBSi+ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/waxing_crescent_moon.png b/app/assets/images/emoji/waxing_crescent_moon.png new file mode 100755 index 0000000000000000000000000000000000000000..c8f13dd31c8d4035ebf1450601561f76fe3066e5 GIT binary patch literal 6198 zcmV-67|G{}P)rjs5st00Liy$CWFxN$K#LyO^Gp65lke`~#~_ z4i4AxtI6~24uSAXJx2cG-< z7-I@C#^6KhIv<81%4Y5SdhOV(V;P33>(!hGpQq?{v*+^k_y79Se||&J+PH_i9 zTu-bHDn~25H_7>n=k3iO{Ks#4`v17`#Q8h^%HO&EPk9O-Pniom@W7>49vu%q*!PZiwFXh>JKEab8e$L>Cb6NHO4}Cj=#VCH0QgAPlR@(MCBraa=eSPEHD|;hZk+ z=lRa{)9a61d;BxMdHR!o>2E*zkG?J#aNm8$e_*rOy!pQS?|DH=n`7rX=Uk5u9pVF? zh=_m$N|~uRqDvG6vQR5zDU|Bb8kpux$xzh;1s{7-H?U6oxOw{V#f$e{I=Sz;PyW;| z{N1Phh0i>?fAG~mdF{hrGXS3X%u8>)a^>n@T&)i;rT#Do9pV$gbvWk%hYtb3KoHmH z@4Z6-#Gw>Qh21O^6u-}u?9o~fNrWiG=!ntNcadQo+&>CtT-aQDdg$SAf9Y$tUughL-7jA`{LsPS#TRtxVCcIOy8Z|!iGEnq_5D(u!-+?n zC&tKX-P^Md9@HTK2)eKXg+jqlar$ltXC(`7}h7gUtgf>4(NshV(jSp!6>d;5!dM7 z^%3s^UFz)hl8Z6Jd55q7<%FV&0Hs!B>AY42z&RxZPYBWg2s=_*5mKg0E4qGgo0I+m zF8`T-`Hmm?)fa!~Yd`(e0${}-{NAJElYhNAyl`&}8@hBvOlxB5>AC?$5GU5DF7>1s z0q9a_Ob}(x6$FA0cyXuzB6#OPE2@I`0Tl--)G`8!6UB#0428arbjE@}ifgyI;3`N&tBK+yCANHk*sTKgC13{(!ze!iQv(_dYO} znP8n$QcOnwJZDsu^=hE&I-p z*HyX*!9(!1Nrre_I$*WdqqFPVKlp+_@|t&k*^8lPJmbQTuhvH|4q=V&*2J{Ig@lOM zT&k+6x_92@96%bk0Z1uYVLk+6my89W@7he84qzJLoI^w{FxiiSnlr$DUl{kwb}O8n z7w(+GZVUVUj*=&;77JTG9N8!woLuJF&%gTOpZ?2Ne*DV<;L80cFFHIpeszim!MTCx z2fRzf5J_o3b)l((c%e(t1g-0nJqI7Cs#GloMCv-ccszoS!9Yk|GC>3ys4le51FAx) zkc%+R!fsdC?mEtQusxp{N5?d;$XP%$fN6qLxP0|EJo|aaul|WYck-ey8Gxfz_cPsa zuyJ8vwK+0>uT-PDw3D`MKMcKfv#OF(GOM%B2Tz`7qp*pVclMfdP5ncRMCSk~rJCxi z30?pMRB$d(RhTE(?UeKLk@M}2?M@h{6**TbLbdp~!#Qtk3aR6Pr(N7!zPJ0CF9iV0 z_UrZWw+6qa>o(T;5TbR+OTvjzi<-AbAB_oJ7tN{!h`~dx467A=pISYOEBMeXa2iMQ zVt?L?u_(p%9ssq>Viw0o5?%o*FD!9-gE&iX0EDWQ zs#uqb2^<9H0U^d@tPpYJnkhA#7;35JE@i5Wb79<9cDu}eC+zl_X;S98qR`Qxgq$J7 zM2a1kuU-iEJ#Bd77Y=|eX)nBDwK}+8q{I8JiI|Ivt%1We(E?P&7$5?O0jI)h z)gzyi_G*S{KigQ;Qi&T^C#+iQf zOjBULpV{qploHu)9llmPN)b>kP|ZF~XiqK=a`8fZ4e(DsF9WV#J$_C<^e+@ijrxm7 zX(`lNsT2fA(c35-Y&IrR3Mfh`1u#9Z+1;N{)QS}`Wy=Oj$f?YwpkTs?Hq~#DMyZuH zGNn>VCfC9=%|`EWR>mnaPCdJQ$GqQi`^huLePpTwbM6rmxD~=cH*C0aW&Ogx^@`)? zd|m)j&&yNV1ZmW7T^DCFTXVLV)OPYl(GUXtkT^J8AppQU7sh#}=ECWA%XT-Cr^0T# zvm#>hIK=*6$pul&MSKuM1OaNE%~ezZ#I(lyM9#`Q&dk%qIAWP#$~`WwnfC%^kCqXo zAQhy{Hoh0H9EL9N^3M-I=)Wh%4od67I8AmUB^T>pt(jc2&8zByqQKdmE!%N4TWYTf z(>x(st?>OgTCw~6M4qb&9L~CJuc-UjXj8N7nt&zew>$YfQKbc^(k~w3--|ITK>Q zImo4OcDCj8^o){=&9w8vI8Mw{SqjeV_B*CrnDfld8@IS|^OSKnqT0p-6z2o0p~rg% zrBK^Y5kn$`go@S0I2ER;lB*)VP;zsP6dbj#C}Yo*6W;Z>*x|{G4t>*Q?SQMG-$T*G6^Tg2gQ~(7~6ik4r%B-0v1~v0El1Ill zD$Z?4Nr9bp-}}mv45?WWQG|&u3MufsyJ~>*{#gnjErBhR1n{u-z&fx@0isC&gYRs@4fHIGJ?%X*wg|D>$nCLonW}9W2 zsnA9wL~@h-G zl0fzjsUGKAS5fn9116UlF@O{iPaiA|nhS^sih=@)+1YM?hTti=2`tRac_O9WKrj|9 zBd7w1Qcw$M3soqSV;&1aVLF}B-GsQzaM0l#sO&)n!7~JR>8=0-3F}6j)_EVibz&O# zmfD=<0mT(Xl4B_cRMA|?rV}33V%e?b{ z9s#kDfol8Ff@nl4Hg*u87F09iJ`obsI>S7pA+k6bpimqRK{~y=3#dbK&NzyxYK$HU z&Zs|?k)Voq!6>Zrg!qV30BpuVOw8(%8bgXEV!QJZMF=q%kkw9jHv2Nh6{Tb~cR?|r zrQvF95bL-%H5Z2oZM%9rS&=2@g;fzW;ReAw#RVnL6Nts}MGHjkssXi@z1dkQAW$gA z0Hj4!X~&r7mU&{HckLe|fFs02*R2reK|$1+4&<8cI2#$w%-Qr}8KD-gkR|n@xX?n9 z3yaNxH6lb0i<@AUTA%`TZu&G9kQv`4(qTjkKv)hR8*nQ7y8=*(-hej$Mi`ZL0wSn_ zidEIDFBeK_SsjGs@7V8mMsJ*$6^^^TrN&aqqV%P8R2*fVS+W421`+^f!`hfsN^>F8 zB|(=4DvHn=0|l`qv!avY3Q#~Z6hRkjpZEEZy8@7leoQsno3}OlY|*yaSOHrE%`CB) zQf8(+n@Fk^H=8|)$2#8ZEH5Hf08nisl=EmY8x&;$0$tK#w#eL;v(YSU0eP`zMWxMj z6l~-~Js}i^O>+RPGoV01boSvQ>s+y5q-d!IO3w2lMi~%_ z)<#GtI6NXsHm#V+7IU46T`js~iC~TZz*6|KOm2YZf-dj9EQcEtMRB482hJ%@a_hPq zp^k``=0Mrh5?5P2Rf{dnr;?<`&`O?08waG#ZPljA zAUJ~2QgGBVGUkbKJm-9S(`MP|tBRo3Sy_e^psF%Wlg&M5iPbhIVjEg;OBV2MQF&p&*32EdJ4@^5I(W-V2hoL_STATO?Kx8?eQxyIS{Hv8R~71$V~%hjWZxF)*Zd!s9gF|JzrEG!}g)W$OJ3109r z6Hq)D6O;45d?w$iw_3G85hhv(5kI_>d=4fpnpyUERC{ij? zrKPwo!we!o1@+6yu@od{swj@;#aSG#G%?E*L}@c!irHS7uyGT>yEZl|;JtvfB7;C@ z%kh~Y4(Ia1q=2Yzwx|Xb$~nrOv(wCt)BLbnA$Mm0D+9usY1>foy#JsYV#;)8=E|#I@`W+o~%nHXPm^PAQmkuAQeYNsCZX# zZlbeMP`rvLnU(0eIP=G~GsaF)%CDM6NWT^GumDbD0nmH$awz321E~1h2#Z zDLO(>l56SI=_0gMpeSgDTx`X7cDr!>$?YdU{i*FoJ}&^Ons>YW)@dG_7ngDA{Ne(r zSyBr?YS|r{uobh!k-5%BV-!+M1n14O#Rt6iW{+A8szq1StW2qB)ut&(6G;LzSaG7J z{3$_XrVEf#ATZ&j;F!T!6)8CKX=ZmmbN%KyH*d{vecOk1{(>%x%aga>mQ#3x3}K)o z3Wa449uKafR==Z4#i;;*x+TvmRk7n-6{B<4_kbEx%-W10i7HJb1xyG75ut%v)iu{} zV%_!*QczNWu7eZ{o~ezDx)y+H0h$Y(&&v5U@#GWdyD{H-+ZX)t_=68UH2uVz-Y8v4 zf6N7s0%Bcswh6*gGlH@&?h%}Y2surkb3n|!W;2a_>KnN^( zKX?!_tIpB)l|EHgefu;z1~uwS&5QMA%Ctw_#I)b>*dwdcU~^!KE-}}E6tn`Oh%~{2Wpvb=*g72GY@gas z1Ja9-LS{&wgSF#m;}|-jw+pBcP|94G&MLUdZrpS0<|&UpdivgdzWISK`4*Ya?kjJ2 z!;gK)`|`am#$$(oI6#19ZiR)gm1-CWESX+iD+RzI%hFV>^Uxx$;ugVMTxC&wpe=TM zVd#|2+H>*Pap@>>&t=cafnyaaGLHBZC`H)c+OeyJ?e-3z_{8-`uHTto_9O2Z&%UfX zMNdypub-T3UM9}}7wILKm;nH_n>8FCesMfQ3nd zB7UKMfFUWXPS|vrAqIx1bnL0lGw!e)k-akR&UyTkxAV0dyO+K8U1!&yl3QhO-8%nh zjQ+cvxQDx5TC{Z?VkuA?2-2twgi)Mp$CQkB(Fz4XVF^tQE$TugfJz8ro*x6O z2hV1u9Ib?-jS!eA`$Rm3JQm7S$Y*ElYUb0AUFS2`&c18=^XDJso$!SXO5ODpWGEh}^QXfq){=oMcIR!6|)&O_#0nn@;F}!B=`O z^i=Y0BKyoZ?s@dF8`G`Z(|7!@-@fr5fBIpazY@2~nkYW_;155ZV)$2D@*fxBg7a>v z1Nhu~|5%E)s<3UDa}=d6$1ZUiCm^)KyCkdzI9kE+AsqLa zpYzzKp8Uk^oBQwh@Bi)QfBpymUZ=147bZl+U%WWn6GD3PFs!~Wb}NKnY!C?uZgB`P zMgV}A>Vqu)-e?XW3;n$-qzLO?SP#OEX}eU=TEyzgEWQ}}_HhT|9$LI7OT1w4o>EC6R$a@+4dRHBC%uyAuQz~M$XS`{uG zIZif};IkZzb?KrbosIzq;%o96#cUygjdBF zo-3~1I_F$VkAm3m-m$Fb9bIf<*LTXM7uIXX$wA@58jd$gDidYgGH%C@Pjmg*{8)4P0^@M{Rb-GPY5$E-tGt!i~AF{W>JPM;lv zepB-9>4$5#UMEi01N2F6t~}={>Z3z19~+|n=6c1i`Eh@fecFEdv0LY#doknd7l6Bi zAwYNeGNBs}Q#aJm59*Fj)UALRq;^qiP?s-vr_&bl&wq$fzX~V!yWbw?8~pKq0ADO1 UIrHsoE&u=k07*qoM6N<$f;JTJ_y7O^ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/waxing_gibbous_moon.png b/app/assets/images/emoji/waxing_gibbous_moon.png new file mode 100755 index 0000000000000000000000000000000000000000..dd8c4845896cc5ebd80837b8662b24133df75a67 GIT binary patch literal 6455 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/wedding.png b/app/assets/images/emoji/wedding.png new file mode 100755 index 0000000000000000000000000000000000000000..ead19d52cfb41c033796c39dfc8ba877d304df1e GIT binary patch literal 5847 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 KMNUMnLSTZ(#6JQ6 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/whale2.png b/app/assets/images/emoji/whale2.png new file mode 100755 index 0000000000000000000000000000000000000000..4af657b2fdc98c2d703742d682cf952625224d63 GIT binary patch literal 6032 zcmV;B7jNi^P)1fFm0oF@t6QgWv+kx_y!P4{vp%rF25bx%3?6O<=HM7^1{fHIYq*B{K4-Ww zr#U?g5DX?hh$${kIZVbS!>yDHt|wRf6agX1LObu ze&74v_ul`6KJf1ko^f&cqunoge(9NKT>tRn{{Ckl00jNg$w(hJ-^90F4qw=h z3t#wu0|5SgZujn&zT^><;RsExqhkSSn_v0Pcm9G|vEu>YAiw_geShZWqbiBkcTh^@ z7zHO((~BpZZ_-CJW{i5rs7_B0``EhpR4COV?QEYAp9q^1zW=+`90PNYb z=a2V$Mh9F-v^>gbn4z4eIWjaaP;6cYxq8Ot>}UX3<5bXLr~K9h zc@0!mJl=OKD7}|)Vo6F;dMG2U-tGt>~;S-`+^+_0MnXl{+>Mt zzIxCrD$zf_oYVzwx&{hQ zYo?g&4oWhQ(3u!BoeDG3(Q_#e_qw0o$39`ZmEfsXd@gxM19UcB#U(21yGoh$Go%6t z;Q%2n-^u_8AOWgs3Q2Axe^n)UhUETuzh`&=3*vS_cq#*D8go5IzMqNGxBnuyWr4~D z*2yxqNvSns#EnmIqJ(|sNnPqQX`mH_zN7X4%D0<;y66bSrOgyF{r zy<)TZI)Cm2>N^LHJ?j~&e;8-zCXKP5(yAt?0DVDn*$63-4i|NG(1e_~_P*@@!jl~0 zQ#h5;&{Kj5Pd;b2#7yo+q?%jX#!8*@f-@fCDvz!Xr;sMeW_ETQdEaf%Mks5%+ z0)$|#h1~s;SHJyj*T4F(RCwyWKL^dPPwWl$xc}wx!1PVEsZUZN{Z}kVtr(-YydH|q z?xb_dQgZc<(=muUZzc#9u-ILMJx%}%*db=a9A!WY;vk6e`7DZ!@Ck-@_PG1)VnBBm z00@Zt0Pl!`x1B8DYLH=>L|P0=8Ym%(K?z8OvziJ{tsMoxv#zdR+;{AvhgV2;F9H=E zNGus5Oo|u;0I+o}JhP2XM;83p$$}jNz;pY2zjiz*^Jf=R>K+Gcswp<7o3w=kk_G?( zV%SG2q(yw8O`PH(Urjcb#T^3xQ~I#4x-8bvN&5O}N+=qnc;tR&?WC|EsdP|mvlg!L zLUKKMT*#Es`Hs>6t^{trny&alD?3A3_4MkkYLEgw;A)UqIz-Vqo#Y*5dcNpL7VKK9}i6X*CPSR|8m4nYljzK zbUmf4Kjayq*?;8xfn6>xUuICaBsr1&T^~&A6Tw+m@SK3u5IxR+BL=4W+8NOR6+lP? zJA#vH$?c4~hU5HD0FLfE`n98H)DMoG)BOBIpq9J>)N~TBCjt}5BOvL&Jpy!(ycD^= zJQGtyftm_*Wz}>pw)man=hFa;GKRt6yyRZ~cMX77Sng_kfsJPbaD%gw0{PAJq(Vx> zp<7Hq8YnPFK#M)e3+4pC>A1eY?c>X?FCX*{jQy`*MIhY^Jku#s6_6Fs13BN9aCI8CG1T=%?)%8F+tH z*}o-YN|XTs%x#>(^MZNGuAdS{V2;2Hz`eH7vA~Qqrx3p9rd~Q8;R$LF_=FjL6q;Ov z?yHd$sdW^ltDx|da#CeiQEEXo6bvM4136mRUNiz&6F%&<^JLkA6x z^ioZ2CBPVTtwNWGhiUfs{L8X++5vVKs>>5fp)_@hQly5Z9xllEE1gHK|Y3w0A zI75q@O}l>wj`AD5ain+Bv)XB-CeS9SKP4h{L^NKq{-Bi~Kir+DVUd zt_W%Xz%0;WK_c}X5Ow{V0>Jwj;NhS4N_1Ks)%Pq=UGF^Abk9=T;1bp0eb4AB^-Zo( z%YdDlYzvfEH3X2lNR{6MFmPUIMY`0ICfiJTg?b8)R?=~QE$G%l8GI8ErR)aeWQUz{ zKuu-^1|Dx6KBv+0jc`f&xIi$2xFjF)QKyEbw>(Y-&Uj7FQC+J+s} zHL^yPZF8hCz-eJ>%Y%u~q$-L_&7~Ms98y9H%C%Bf!!&{(pfn4_398H^u5<{M($Ga` zqK!8W`6~U`XE=NQ?a-bBa6g++!CIAysZlPzQ@^$PB7OitbO3A>Cx|jA)gdyc6AaCK z@M{{t72v>0#gX)q?#GoKGg#>*3AT0EPW9GBY6TG8m#$Ll&cIp^*AV@n03our2ZHam()~OQ==m8rV z2bOScnYsXs71w*muTmF2%dHxP_3Wku2xeG{g(6iNI&~p~SQB`>t%NPbP0P*VkkvBa zz-Izfpt|CxFkRz^z18V2osRKg7s@VgzlY-RA@4Y)M_{TA`vTr&+xs5v8)k7J#iZ`f zF$e&K`+#8tZxd^rh;uCf2!+NS_DdLc`hZ`10&~PC`n0KTi0VLlD*|dCU8er&YXAY~ z!>eSQ+5i}9WW{Sc7-F5gN|zRH(#YHm8kpXso^b|im5LkDhJtGRA1hEX!s9gL8=g>xPtV>n~HwZAsWd(8bk{VEPt~SC7E^DB;l+B)V?ZKS7^^QDa1o*oms{a9fNRtt4*`JO z93E{+^CC3HjT<|caMqf-P;0?>Od0i|y#QbI3`__pf*96x&r9(A0AXz57WGc9Q{U7kR(*qpXRg!e zJXZbkI#&NCP1q4Qf*!%Onbo^A<+#HD3LB!4b0K(;5eYLD6rD*Cc&|cEMrJfaD;hAn z8=+)?k}d)X`XUex*zl`e9|oL*9k@Qvd5-IgRKTCN$mde-;Q6uY^8yIw05TCugeOqt zOYmD@SB#+=4O4)olJ>rQ;RUDI{zhG8b&X1`x@GB{VF5&7n+WteR(2CX-=rY~&)0?# ztQDYeide5WMom)>YXBV(NA<5W04%&Q$o;4O3^p$1c0Ggk_vLaXGqrf@)J`Dw^) zq=E!g*tJAuwpFSb-K6T#Yh-M3C<`=&RL|JQi+ z@p?l7p8M`SngJuGm+zAO+Cxqc`S~`8sHtHJ0dFzEFSe9|G!{JPt4FWVC_@XdfDMy~ zVLsEl$3bRnfiVxP$x4^>f(-yhoE`)Zot^}j4&d1Euoc#@;v?625@f(<*)?d3Tjr>= z%TBt|K6?3FLj3!8kv*}w@H(FqqBFL`1g#+Oo09WL0cHa7{yH-N!QMx%FSAI3DJ+cF zX!*wLH0ihvHr$ujwcBsdm5qlC9IDD1Rrg@k>c*+O4W+7Tm=X(msI=uWWub|Rg4I?T ztO5i|o9KZNR7VPMsg&kMgsxHMeN1^#d!10epR0}po(`&;5Oh)N92K|CQ$_a@>EQ`t zvYOuA)=<>Rf)Gvdt+M7xssG&&M5w-`1iS!N_#OhkAwHpZY#o5yqCTX84Z5&&?E#Gd zEXVg=7xvtE@FrMs53IR^N+JM)5&T^@9$i0?DIviLP{ir3*snXp!D%M zjtRLg6@*J04orPz<btT2XN8}+D5Uk`j=*@u&Lo__)#cLc!-a61d zy2!|G!TPCP`Y(+qT z6~-#A;dL36;HIoN=*{ea@ZCm`TP1S!=4&X4uZS3qUAcucx{V6)kS?#@MM^y2v=YF^ zaGiBx1Wf3|_pt3wWGkIiE0l+=6%eq(yca+oeJcTu#sIg8CMO5Zv#4=`j18Bmxal$# zVgO=Be`4;Or^+5X)xxdn>n6xQ&a}xs=YvhxNAAx#5vcafEVDjtA6^#4#{n0(0s&kX zg||(!2yVzRCL+1Mbxdr4_5fh{9s<5kQ_EXoxVZj+wFBPbHa>fWMHA;+zc-HG=agXa z4UDf4dt8GGfP9zQE?zzjDUxI%b#5!=RS#1|JA!SUp~}uV(UJmCy%bESwK~WG0LpMZ zp|IyMH(VdKe`s6VR03o2Mk_lfsS7N?N{jdJL*Ok#4lzH_0(OKrzs`9s!OXAU7bgi8 z2-T+@cW{0mAOji& zgOE~3DAmx71$3^<5_}05U}{7&H@rqogJ{-pJqM-lRA|=tlXj49Z*$_&bKlbB)c>eu z&`zCWD>zmmV$0Ga00dcCG(wybLiyQM@c>x)SH&hnCpd7S{S^r0^zt3Nzb>xPj-P?A zK$&F$-4J#)qtVK)=qG<=sd$0T`P-Ds4NimDVF(}3_Bu#`(Oqft1QlY{OPVi}87p6e z*T#VrFkqRg;AW%JEbr_;e&P8i4QaQ%JNvl5Mv+?7{kWmuF4XVE%`yu_6eq7C@1e+4>6)n7U8A zL&W*V3CGVTRp=}FAXLjJg==Dx`Xv>XonT1$Ltg+kT$ckg1b_niuW+v4#Hvf)BL(hq zrGRUEo!0OC06@JaB8kt1Jqe%ZTMcEMrkpd3{J3MQ#4xb zg*#N*>)2{~kPbX#;pYIMx;l!0CL|fHSouZLovHn2RT!o=Vf7oVc9bzYkJBNROVTZ3 z)xm}h=_zbm{Q~SS2k2mLA^pKt;4GwTat)x#RJs*CLmgOV=~<-Grg730bYjR-N1+K7 z{7jO9V2YyARwtGX!7*Nv$#2xwE13vk7w!^1mJi?R8-!xPYfei~xU4Y?` zh6lD;(g1;r%Y#{xQYUkS2{|xTUJ?U@Dk7lZ93VP)G!JGi$ahw>!QTS_BT8Pfv6Vtp z`E>Gp>f89E$-Mn1B6AM;XdGUOym!v2%$P72k-M+vhkMDgYyQ2Ux*xhQE2#k2DC&+han1{IEDP0pCfDQ~!HXM2O32DrV%3ec!<1&~q{O@y zQfSQ&PF+YT*oU6p`F!yS`wBn*``RuqK=6w2^F|MUjX(N`UTtpu5A_vRSk@uJz!k5f zQ1=O}?qzurRo^>@k~c|ZEn`&NFpOiA(n~N_&#rqXNNIGOKA)25>aBQ@eaLV7ar>ve z%Tx9o@Qu43^?UA^pVH4OP*->|IJMU|Tt68SUoaV>F-?Z3jFaaga|S$vQcRvfy8L5) zYQMdBLc}0CpAvo0%RglRY#$H~hCyMY^8Uk_%MvVp?sv7-=6?YX52!!({;W6v0000< KMNUMnLSTY{oJHaQ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/wheelchair.png b/app/assets/images/emoji/wheelchair.png new file mode 100755 index 0000000000000000000000000000000000000000..eddcdd7977aa74caed3a4546628ba44aa9863d8d GIT binary patch literal 4224 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 UDgvvq2LJ#707*qoM6N<$f{DGOBLDyZ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/white_flower.png b/app/assets/images/emoji/white_flower.png new file mode 100755 index 0000000000000000000000000000000000000000..c0929d0dd9947a58766c19db54bef0c25edadff9 GIT binary patch literal 4391 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/white_square.png b/app/assets/images/emoji/white_square.png new file mode 100755 index 0000000000000000000000000000000000000000..60cb19a1371a7de1d486d120f9b050970237a3b1 GIT binary patch literal 1411 zcmV-}1$_F6P)?e;2cV)icXxN+tE##!%W}J3uRj%`yWOs6)cyYb{r%?p`udLuz{SPI z@6~GcqZtK^28ee2&j;8z7(mBaNs@y0OzS2m~u>I01%A;^!FQ8 z1scM4$oB*_i%oGeirv40stxiM&sq>WtgKjffJqr!XqUXCoSTo zdkO&10yN=$5&&v78;dy*)fz|epQ#{nAZeC;EQVPucmx)}$g zz63ai52Dx7+#KG*D*@i?FaQ)ejd)ZIF6!3bX~r?N`4r(En~)6vZk%%+Y`|RHwfHNlLF<_4v2xUtE7b)}vEV?@K7TkX17)kmpO1Q*X z8UuL6-z@=>OS2-sl&))lXja@S8B$<`Bijo|5bVS48BmmTZO6V?CDar*Pl?P;b0muX)BW!Afp$%&iu_Op7djoX9$WnpV*Vj>5 zY-;Em`MVqtxO4*HKtq-a-~->@-r6%rf)o;;%0X2UL>@UGvH@Dj3seCf3RM*xsT^Qx zfzum4OLhzP+LyqSG==H`xG6*x3#W9?Mmt=cG|ZYcmMNwo_AWHJ@u?n^p-P1OcuKn~AL zmc@Gj_Cl9Ojq`ik!P9kGwQ@*bLlKU9B_J07o?7Q-pW$2}Y6LAkpJD`4#w{0sa4s zsW&)>7dUkrFq;v~1z@fmU=bteL2d~Nn9|;!k_RlR0!!BYPc{@@G7`+`NrppVskEHS zsgH~VryP})xO@gLkg^Ar#l0^#I9ok{L}~*7?bW!>*G*;j2WN4EkylL83fos~OQ_`H zruujINz>%0>|K-Z?wbYJ9+N(=b&s;&5TU&{=(Ku7*(L5}-&aUBM*P1O(9ZOl(jt}A zM*!dt3$PPx7c)z-(Q&vwtW)Au0EqY>=6gA)>!LOQlemt*d(hq-lu6BoNq>Z|N8OtnIC5lz+Y$dr42j$ RFNgpD002ovPDHLkV1i%be~|zH literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/wind_chime.png b/app/assets/images/emoji/wind_chime.png new file mode 100755 index 0000000000000000000000000000000000000000..efacf5dd4be4decef0704614b26f8121bfc2a250 GIT binary patch literal 3487 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 lQ>HW4skU2HZE}p4{|9g6zGYn{sB=TQ7WNQ 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∋Ig=?fGZogz@olG#U-b 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/womans_clothes.png b/app/assets/images/emoji/womans_clothes.png new file mode 100755 index 0000000000000000000000000000000000000000..aa297c7b65e5cf94553a915cc300a8c6175403bd GIT binary patch literal 4075 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/womans_hat.png b/app/assets/images/emoji/womans_hat.png new file mode 100755 index 0000000000000000000000000000000000000000..4cb2e6a6934f102c624bf793303448a6b56c4660 GIT binary patch literal 8101 zcmV;WA6npvP)sRp$NM`<>tOo_VbK&b}TJ+i{%OjuUVk$4LW$03F5<=paA=K0aC?goGeHpn%d1 z-GD&Q9flTx5Ktl@1Txr(6Wg(aXJ236sczl6x299)oI2z1&bu$Klz&=rCYz*DQ_|9| zNmXY(YuL|o)_R3fivO2CDKT9{HA= zme1aOZR6S39;<%hZMUs`;0IoN^xao~?~OOMMDCv(fUjE*xa<1nPiRW}u|nRwxsbCk zG|BQ(1JV?KHb>WWQeZOn5t_jFLwdt8LNm^H4<;W_N&E+&I^Wy+7X!e_rNV0j>J??% zysKVzzpY$w^|F`4&;{j+hpFl0^Lgs62DzMv>3XDb#C$eqI+-vUjp%o~42BbWS8Xr} z7>uW%oW;p6eCBlLiT^7BIN9`mKxpC}Lde$_U0Z7wEf#7Xg`9(T)ojbab8U+G0_8>x z+shM&F-e*r1td{GnkW=$c1j6R6tlgv$KF*N&O#1GbN2h=kHnGxBcD1u>VCrkxUQaC z2&DWa+t7YA@7ZR~)LE>$cp6m81#&ryQmKGp7-&LLu2m^ks!YdYy6rZO>rkwg$(PIM zQW6INs2Jb(8Fst$dp)G4gOrR0Lk>nWx`P?*-jvQ@`hyRgKY0I(aX^1D&L3;!e#^3r zpI$5HDdY?^DJa-F6b|XAQD*?Nla`*;aUR6mVf$&>uUFW@^tryzpgys)&!Ox4-co49j9Vn4%(|dZPf*l*z$9wiZ*c19;z3r1qatQx#_x9ik?jx_*u;^FE%iA4KJ5NN`a>9S@abth!n%p zX)Q0{&*vm@Oum@sb#MG8T)oe5`zf^O3b)_&au!xip{7g%Xk*y|3txW2`W#}`S{lv2q9 zp~~)^WOf=*VNwn z)c~Nq``z#U@@Zdl?{Ah1uettcgXz>~WuZc=QDA*@kHuz*$z+Zu;LvId)3zuSJcOo^ zrV5d!gi%1E((Im(LLVss6opbg1FBFdkuO$=!wIMml_ZQhn)DS<FHd^W|K{m69eYXk;~PXeMsn&cG^FD%d$Y zi>%|7&~+PWNEAz0PLW_XLaKz$-ZrLVVLLg{^epu?)4P45p^$W!}8;1O;s|^p8rZ}d-$s-G#-`J&9D={37**zFjtCtC*1S!dCT1m-#I!6If z9AnuAj%$&XNUKR>Wszd7mfaL_G)0OO%W<)67rRivDmJmp3kco7bc+bXB$({eTs?}D zbFzkNIW}(I#jtI1xf}&AN3ED=rBNX7>OXnc4Gr%_XTU5;K6I#AqEd9(?+&>2rX%d^ zbF7Zqk%XPA7+oplxIOK9Jx@n=Q7^x+s zY0PZYL7=k!pv4i=Fi{GkagT7)X62e!F`EoX@-UxHFfA*)T7{HZ`U_1FCs3{UlzTQo zIQtpkSHETeu4xs2!!b?!&|;b4XvSirgr!T`-62O-8eH7!(5QHv+UfAJ8w(8g3}*9) zX0vwn3}`f}S#Kzoizr>-SQe5L5&J~55XW7_$<@#dg%mnc69}b9q6pNOB$R-}a6M|} zTS@&HhEvQ+YTAE112u^P6e+O~qylU=p%i&k3u6Yu`M>*`0XSL_MRf0H*J=eEOER5A ztSpq-*z8cuyYz=s(geaVVYfFxb4-?7HM+e4C$2qA(j5@Qic+~q7$n@7Q@gpvn-1!@)4$qrb~np z8Tf^qjV96~zxb|iEx+e?KhpoIdw^*de#J607HWB>lYnZ;LnSH0(S(BM(C&=MIVRoy z6zL@F&xc%d?MbGS5#7#^TCk0i$SJe)#4`}?_E5z-XXa?lM8p=p`+$mMJv`1Iqy|1~wi zG)aG|R&ekfGjn92S)kn=;Mz9xc}Seb1YwkcViqK4_Aan;=m=iUVs~ek@o<7;YHVM+ z%y2LuNn%FBF=$5Ct&>;*I%x`VG{+yenGY@#4%@`DF6pd;3a1eIFx`j#I%>FsBE@iA zEU%dH07;B)yJ)7KWmhJek`&7_DCR7p>FD2n`#0Zw&sS9fH!Kyt4JnO!B}bIR*p7j1 zXk6$|SZtPQ?+-8yox#{g6B>r4acQu@IEpxS^cc^deV$7qrdlpyn1cOwn{uT@xs+!% zoKdKhL1-jtgq|1xBuPXRPJt9Hn4lX*7D-Jr5kf=B6c7jjPOg;k0)N=0zIH7e&pt|J z=@6HmJCzBoxxazbZ3K$tdXZD7*Z%^je8m}%BHnHp8kK_0bQ)6ja#zm)Qi-k!Ci4(o zm&}6*5Tu#{FXU6tKEQR?y`1TIN@u^r_VzYWoKPxPm`&##^hPMdW;UKMn@&lU%q$FI zGM1PMRI0LUiQ^|UVOT4Q+7M+rrkNP;jSiWG60 zQq1M>9If2)w4eFP0Z7%Gia9$YF<}@{D%$i0Qyj<0`hh|b#0g3%LY1K0lxof7(_0TS z4?|w@s#|Ecdn75@3!Bbn-Eh!tk6x$EXgDDjP8O|6f1l~N&wM_|_vcyG#7ROJgd{;g5(im* zE6pShBKkXL81*(OuiQcq#$0^*GaR|;P6qt}?VTMg(`9e3&C=R3wrf#z4Lr-RmrBk% zzibbPQgN#g0xzd$k+DnzrN~&GX&U(bDY}$IQG!xrFH`}#0rf_X&u)K?ThG0m?|AEX z^S(d)pFH{0S#G-NB;}&Vu-~IpuHjXhg!2i#-EF*LIeU*l1(3vjbX`L?N7?_?3RuVa?S1E&Zxi7sYf5CTyJuDyG^4|qO`os zBRt#qMc{p3G6Pa2ZqlW|F?5nJ#tMI5JO>?~FwAx;%Zph!}%Tphin_~U0k z$Z#;>d%y2{sFZU&^61lS?{+aAFJp4!ZU-w@B3Eh=hCbc)6-NCYzMqm{XBNgX13gw6 zDHf?#0<(f2!``K5xb*CO2;Je>tG|ospu$>GRh z!6Sc)sT_Xbhu_XM$Ci2Q@l%{Sb%7|=NmRmc|1$GQ4?AC_P+CMO7#-}gzkPx3)&>XN zHV3^9gZ3`_TjywBdYat}kJ8^gk2E}5C%>6u^8^>4_&Dbt`y{#YBB?OgxwOuAf9JQ; zb_8eFpQBMOqDjcv7N#Mwb$;~AG(oYbONn7h1OiPH2tWvl6p*SE5U4Kzpb6ASV?Itu zLWPloN-fW+@Erf+;rC<2Cg1l%@8I4y-O1MGWj_1h!mxV7$M<_x#}Z zarBl~@mu%*F}1{|m~#Q}Ts_kZwqd;W%K$)LY62-TC&{R(6d+Qvucd}czmOSZjE<4U ztg8q|3Z=j*N@{hNM`lm+dk_B!{q}%+?|lpJ{PDMEgzD)hPVwmHpW)J#0|vu6ot-T% zKmR1{^;3-Zw+N>LgaFfYv1|{J_`@E%7arr>=l+&c5BxRjXHGGkD#mlg_POWDn?7%U z*Uxgp9dF{-?td>^>-)?u$828i68bToV`aU|GWBCsAqp?p1a*ln0D&Znu2N{4L<$X& z3QQxrXE6-PG>DLvKo51o-I#GR!7K`NPvBN{YRcuwgXidczQ^0gZ{?QjZe{gdCwTsu z$NBt2k8=L>X|{46)oKMV@8H^FY_p9f6FbyozMCvjVH>Re80stw}3>@1OEVODIfBD^9 zd+Xg$JwfNfr+M!qzrrUT*uYE+tbX?bZrvmdV+Oe~yN`~M30Q`PF4WC02!KKiRiZ$t z46!6i$)cgjjMcf0ff~#(vhPVW1o?u_sILgNb^2b6;R@^uXfBzO)SVoYe#nR0_wnT5 zIqqG19k(C5gO^`_2RFX*bxfuQj1Kncw)f~=HGeiCi6i2xCJ^LY2iMC{u2-nG7Fk?9 zfxCDDtTODa^O4W~G9TFZb1ps>V2c_{_crlL7E(a0X~iPQkPA{g{&HFq?-NWv*9k4h}-k zR>FLkU=|_Qkhpc7TG=6)33}rJAKd#Gf4BcB)^aTl7nV6uIl)?W4bLr+w>><&gp!Id z377^$IW-<$DRNah(#6C3p zMJ_zp150Q1)y<4h_0IWpo}ZDcrxXrpl-F!3iA^w#+4Q$LKf27v2M=R!=otyKrGafa zpd|z<#1}rk9-*0F=Pk<14r*qy@#z@pwm5w20`-QASF~|+W;SY9iOM89QW3^FwOc&e zpBs@phxNi#I1WE&Xb#hPh(eI}Y)0cb^=dT}Mbl|Ot?J?pjZ6*Ji#e_YBZ45|&|-

    zjb_|#6Pu$6bRr0r2r^-f#7R7ou*8AL`nO0f0CEuk!SCGW#+Uwt=YH{@aqlQG7vAx6 zALlFo_CK)RzJZ>eA%kJUSj{?(=7dosc{$4j)Rk0WQXw<1#(*15x!H`9sbN!tNFoI! zSR+^yJd&P4&twg7l8gc-F9IMCn+-BK&wk>kxc9Z!xclA>%X!d0{rkN0U;Hw!{`Ak1 zp2)JlK=}axRU+fcSgZiz@%}|vra)9_dW{iiB5X`KvBumC%|sAX4fmu2J%UJB16Deo z)DffU90D;l;?@mLe&bhJe(yiC{r>Oc@4fgH_PgMJ#7*AwYyXCmA9#uL5B>vq{dLS8 z5=0^Mz<`U05`cT)#6{g9McJo=DI3$P1E9bpaBRX+Yh(nbQZ%$7hLLnlyeA#SGwBJ8 z#sfeNy?KN7fBul=H$TNIKluH;=cj*$`QLvWJ5m1D&wY%C|LULfH$U|YJpFgR2VQ(P zJUWALMC2j>#1I+J0(akp9?Ah95=SsMc4D;aXaImIY*d+1TtNXvP=OR71!j^yWzByi zA&?j7$Yw%ce-;1TU+1-FpXd31_)mELrN7VmU*CnO@}3|4ab8)2v)}m*-uBzSM*E4M zgqwGfb%hMbi{e%QcMm#Ab7hsfCxOsnpQ|tl7^MMM0zd#m4h>5RTok0k&qB)~)5f7h z6q*qGbC&<|A9;N`V*bE~x&21Go=@+Q@A_Uugz5Zso`2VO^YDj0%=Xa(?*7mJ&h*0{ zLgpiIz{ko1X%G%OphY5@s0eEWkZ6D?sDJ`;9T7A@0pxPemCODvpaUhHgzPK+2cO~L z=|l1ZA7Yb9tb6j6Kj6lD--lrAzWiC{qZ8ixfe+$+&+hY|W%}G7Gr#wHKn*7mkAoz3 zNoE!H0kbBgkSPR^n&e=pDcE&Jz(i0f23%~C1TN4#lRwW4QN#@OJ@LhtSrN5}Z~4DQ`S@4gi=!I4AY5*5UunSd*^ zCW_J{afWu$nADh5uQvknc(RiVYMU3w01`^H%#dYE{ORX8fAv-3xfeKo$BQ*err0zi zvx0We37K!xI6_4bg22?11!8-SwVBo?&>#dGpR;~)U&&@ zU-oo&P-EX0`o1IU9v-}g-FgbWeFvRp)IbIjqNNi8Xfv9?WI{8$`Uvc{3)|hE{cej6 zZvh2KqD&v}9nK!%_rA{h+I<$8Xm9@;aCDR1AAghF@5r@71|fn+pdPH*Fsy7ooy8YC zoHToL)mLBXDXgzQB*oCO>O-aENHBTpZ&fABg%5=S@DJI}za+w@0|SVUmABYL0$EsL^i2HRzY z?5Ioxu*AaJosjk>;QMtU9G2Z4vqrmdgS>H@_3RY3d!~Mm>5Xf)sWEDs3B#Gh=s@&N zcPG7HodMhJj?>dK?2QID+a0Qu9_;q`_LSIeS^FMrgWY`#c5(|-qo1AQyB&K6b_*il z0w5%bd1ncbE+9dqu&ygR7cw8Q+b^trfmD`tg{5;epChK|@h!qv+!vPfEt|fg&4~R5 zX$@Z|bZU5a*8PrkS+Bu>-IhnE4`H5}+JwZ4bSKjZPnc%#hRrj_MvE1{ z(&k2+W;}xP(}(QO9$h^L^uDs&?cw}oQK2I5&@OPxDLCL~}A8s!ST8Ewd|dy=$zeg=_F%0!5w1Vpf|f%YAJzi@VT z&iVQI)d4`25LmN3HsMWl%^FM%65K$6WxvoxnWl-kS?$F)8$j{sL7-9_*p=-x8D>Gz(8sSbz$D@$)NVGdHr7=jQQ1%Nwf;C|eSJwciti=Q*vSP6c zDW$T#D-k1@bjKtQ0SW<2L8Qh-)Bs2zMCb`t;er*0%P5+Oh@z^{9j2MpI~gF7bT8W# zfP@T3NE|KJso;H2h!Scz*9bzHfdHz4iDAu{T0=)J?|s474hX1&CE1gVK!8+Zvc@zU zIslMyAON+B0a${zpflz`5>+MBF_iATf|&=Xlo)4%2qcI&I%09S;{@(b#x+DxqRyI1 zYeRq#1R>q4ZxJFXTTDYWNKsOx!pPh(HPnQPdi8$*Lcl~35~V65|9sp=N8X6Rw(-d; zf=tlxVjMy<#WfHFUsu*;!Ix{;AfhxCOkrvxt5c1N6jifLD1v*(Js^dUU}^@cxCc2U zl3MdAher>=RIK*w)w~2bm|;TMssx#W56~kZJjx*iJURqqo0#TgvW9wqJ7ip)0cJ{@ zCg#mdYcr^!1c4wjW^l}`nvx_8&6uYdHM{tWlv;U#5m(DuvgWpX5Cn)IB%%ORZkUZ0 zisy*Ck|>SDSv&y4nj&+<=836oX!Fc+cEWUYd<_?<;i}csYS7FuQ?dt15(#A1ii-fk z)XEJu(*(%D>KJ;02u&3c!2^0E4B!zUE8COh6a+MDWP?a&?SYFAFarc8GfWIYLBTMl zX~L#i`W12W^1LxBg`)A{d1vxOcj*=xSJ#N_(nBUsFtKC{&cG*#N<6 ziyVmvb)O1~)E|)&G2kHNIUo;6Ef%COgjQ(=By{g(#i^(yvo&&zj;W$5%#%ST#fP%$ zD>0y_mraEe*`XV0Sufp&8f2no%+o~EhM5+t2~Yr3h!U5f zFF;oQm|CNI$Hg&PWd&j6fkJYg8=K8cc*j&|(=~DcL3z3eq6#@KXR!7_UD3If*Q=pT zXj&SfT8B^-Bsv%ok&lsI5Qg4}f>#O*kIEow2YcMi6X6XREJ1;!fK_9j+M7ogp-qiu z*8rebh)2vYl$7K!qmhI<84W>TgeA0^*i5Y~&WgM4et6OD0hE43CO%dVYUI}L2jTJ* zj7p(E#qb6&-T^3G6`Dpg)@lUR8dE0LY7wq%gVst} z4XyaAiK2`fi{b)31M5zgl_nE1LQNz{cBXkk#RzdC6U~5-VpKp3@g+*Q#D?+@VG9o= z1Z*$}FraCx&6HL|M?g(6RnnAZirRHPj9AT-nGjh@4-CqK>ClE8N)$;CM;z9rXh{<$ zRcIw_!caU4B+nqCm?5Gxvr+{YWZ0!gr_t(pfD$;$)P&7uLeMdOc^JFQz^u`%U0nl4 z!vq|H3khapwgFX`R8UbooLnobXNwU|gtZGTjI0^2Y>|O`)D|~`L{KS_R8?#+tF+ND zyVGVIhBcEX4lXFsip-EUum^gz4AMtC@IB|@F2b8CL~b%pEmXg zi6`{#6^g>?JxblvF>C0E(M<$q#k@o^h9$;u5qCd)DGFBREC;}bQ$>pu%-elNt27S$H(w&|H<^Myp5?39xuVje_CW)GWv;lNtBnS{eLkN@=Cz5K) zvw9SeKDNCPw0UAfF)mZ^3{oNT8c9$YUOvQ5O=-<&T8WRyqVHHGyjIp|geM-IwL=g7aGfrw6e0y(IgbQnS=2oRpE;vmArxX%p99M91TRURWT8cmf1GK9>*sO}`C4NU-~ zfU-tYgAuqq6AK7SGz8N`;Tj@niija16+onBc8yMEQNIba)`sVnU5V6@nb;7u9!XO{ zMCwe9lBSR$hcD6YImC7_zyt3=63`k**_@2XtxXZCG6D|=Pb8AwlOFx*07wFwBXTB! z)WwAKfb4_{JsXW`R3ggjNkk1D0cpJ9K}(<_Zvrw@8==@H6`C4gz^WkH5VgaG2hmEO zLyt&^A+nN!r?X!d`s!DAffPZ!9%i9XGj-5|Od|t4oZXt(XfC0yd$5`_yAaJt4AM&k zr4v#2HUU)whUSh5^N)m>l~P^*M@2R)L+M`LzKiJN6+ zGf$Yc$`0v74@4NdM=eoIVO2xg%49|x^A3RM!PiN^OZnGu)*b+$l?9?1g5bTg-)-sp z?KM7+KRRXi;5B;hh$`6u0aL01dOAVk-3K!$(NyCQr;jFPYt?k|2|=)?03+=kf>-T9 zDjU=_Eng2GTW5g;mhP~t665gX1xYj^ z4$=6lWgNoqI3)Vw5C=p-Cb4C1=%%MTo@xK9_u1aMb*rob!NjWkUA5}leY(3~t#91> z?5hbO@bCPk6aQa;e`ol<=mdtwbn$a~n5IMti#!jKtvc`(OwGRkLVa zxULI_u=?OQgo{$26)sHI{YS~R9<*)k{#KFO^@SDSoEhiT_~O2^e8J${L_9jp9}I$C zMl_i~BAG&V{aS2$_67KD7yft*!gUpShY+wy+Tq%CT!PlNQL-Hrh$5fcY(v zgs}YZ#bVH04S*nM1z~6i8-Bdk(~ULx9>feEMuwv(ST2g1c`<;0t^iY7h94CVh3^|! zml~6fMG+4L5%%ja92a|DeHFP4>oM$%Gm#!M2KnwTbai$jQ(uQjBqBv1plO+*DdMfJHwmm#|+G5(7?i$39fi!=_Hd1@}LInx-b?SRV`s_%$FF3}9_{H(uM%4$9=9TaKez$7d0kpmp3Gn^k@W;PyloW zbOC6Z0EB?9q~{vK1vFh_D5qfMb9n2&Z^H1+8*t=zzAw`{UnofO!C+8UeOehA1*StV zQG>bn{Ryis`!OE+%aeFDTSST}c1mL-q7<#GWXbf=bq{_*)AX^Qn*b*bAG>luI({Y|P>5mx>;C)@IyQWOsaIWxME}EJc6OCh zK}7^Y{9UV5M22L|FHOTMfBX~T0A@B1V($CUWtvhzO$YQ(MDXgwsLw@!Q%4;2%Aibo zN>eJ1gskKS3`3AK$!m(dBq|_O6ga~51d)B+;o7B825Und_N;#&k6rX_%(#9j22460 zxxH;tr~t#7UX_uMPN(sk-~0wkZd`&%Grxi}^p&9wZMTCp;QK3xrZ>6qwVG{@{B!`P%Do z#5wJ zkO@Fl^)HV+>SI>;78W|hqag(SBoC5=f{^Sz^<7u4q2_qW)N!~b93=q3wS49yQAYqz zUUdbs`}SeN_kMsPMd5sad+xah^XJdU=+UF45K#)UtGykwZdi&3F1`pI+qS{a8leKO zVh^DO4w(QmM;^7gk9=b~fkZS2zoE-;*8xc$t}1wh^sszJOVW^@c4!E$C2=*^yMos7 zo*T^dFp_v?$zn7kKl3j| zp2L+EjwtekCxLcI+Tdv;j(&GQCNropT|@F=k~d)VwKqkcxer6o5+qMZ;xvR%<^>PdwF#;3ZD-G`L>XhbV`;^tu9B zNy4s#^t$?)B5XS<1%!eNt`H3evBq|B$CInz@7RmmZoeHh%=r&L{1CQn%fDxLKr)$R z?bwItfPol$?s+KX3sO+Z4wZoB!3e-1XY|$0spMIWihMv0HH1`Ck(Z>Q$hsb3$Cg64 z-kNYceB%8+YrD$xioD|$&IpOU-qwK^cC}+5>%uf2u>Ssg(N!p5ALoI6tPhrDNg>!J zkVquZ%Zage>{zsX>39@+dqGX%2nwOOU7uNiNdrc*&DAV!sv-GU00Bc&IWNkd*JQXu zRdoj-ycS176`prwI#lF+1$jZpRLSQNAgR|#{`nodkqHHG#^C<4+Q0a_yYSMoTVaHw z*u&!2PEY_T1Um#0L>EP(q99+FBMzH-4+4PlqBEL zwg>SUGjYkok74eu%WxP&`n1M0Vtya8HiZ&^=JO$#OyRXVSD^KkzoDdQ*u;9!$xcx$ z7Nx*-_4P863XX#qi>7UxuwAk4fCZS)GGta`qUI}^L<}(s;PdHfz;U6u(&e;JMUG^h zPvELtSJmCI2^j&hT6fep;Rlbd!Z-f#0J7-@! zfCZ?F#vZCq#N}R|6<2ql$2qqz z$KFH=wKGr01ss0^CcOpV@jw0%Tc7#A&`4CZvC0l1=Y$f4diU;?C}p$Q(bk5I8#kht zg)f)O$&oo0jiJDwX)K^w;LQUPU}C?)*Vn~k;bbf%x3jt-RM>mPPLr0zl;=UHoUiaa ztrCJ3Ho<8Q?Jqu$U)=mFlw4rc(4iFJ4vd<02Er6h3x@IH(@)`z5AbP&C=la#J0{Ce|1FI@GR)#+8;3YEz@gD-Uz6$d?PA%=tEkVT>LMQ&0y6 z91R$oOyKorpTUY$66b&88*;W^%{+ei`emr;=>nSjf#el&fD%IqL8xeOX*B?BlY8HM z9W~RYqnjyaee{t$Xw9((Sf&Lyczpkk#MDNoz9xMM_tpp-y0@PvypS(XcoIUv^~lq@ z3J%~1vuh7TK8L-#b|G=**KpUk>Ho6%_8ij6STim&GH}cs$i(&!oJ?)R}w*V(k zpLs<;7N@W#;G+OOU6bTB2t{0tuBzhGRt!1H`-BhlUNsygAs+ z9IZd|ES!7QA_#hG?u8d(%lZxY@0)Lu;XRx+Vb-D>P)MfaxnbGkuB+;RvhtaV0zw3W z$hK49?b`vvz+N7gb zY*hd)+Ds&j=eUvCxP2!=eEuJoU5=rb{R}65`}-6aumC*u*y9Mi{xaUUW`#UhHO61uxO!2xOce!m@_K56=t+GL{E z7x1BG!Z@M_$-co7O4)ITfBh1`}_nJU?Qo@WKS{;=O~hl9b;#i>jNAzg=&sYUSc!(p#}3q~SdE_^f<{hn|= zkHdCh=6X=f<`4));IexZDNGAT*N)Y1W5K+6Sa{=&7|04eZrnJmdhR*AdDD$(W}$Uh z?Lh)#ni{eD>A%1-48#&~*qTnF%JWd+uB=K2*jy7z2p2AESB^Enfkxli4+|lz{f>ZG zJo@!yO&sw=40_2#{Fq~*r!x?_tgQ6P^R%DzcUnTw^V#lB^z<8u^x5a4-RASYB4%3H z&VqOJ_kW0=@(Anh-~S%#Sm}AzkJC;$1tZQp8=VYS*D_&~jHPR+%cK!aCSgNYJ2{eq zA_!%@nxNLM62gN;m>STOmI z$TDhNRbx#;dK8cmR&IHyv}IJLfJeR$0?1kBTOGX}>-Jj!&CtHa zmk)?ifJmGo&xNBLGtON+p^8_mUK1DA_ zfg(=0Ugxohl6*bRHE{6(-4LPYX9Oc5gd-6-M@MPtT^XK(X3j$H=1hd^>ah9!H5kDIisznq0xvDO4nrCKJ9h7oB7FVQ zpJLM+uYm(R+-Mk-vZ~rw4L*db10;=d?$b)|m--+G$9>fl;ia)JfaHrk`$$}ce;;h`U41Yd#`tguH=p+nJn*Ln<+~jz3j?nO6aMZYoQ&HdC0wZ9^Ybhb-C?i3>tt}J^^kyR_{p7#!?1IZ+xH(WM zuLTO%^MYlH@-D;P3w;W(q98=;0o@YQ0?{Ko*RF%XJWn?@ft*+b{bd0%=`>Ktp&z@# z#7pL*hZC1oEP0-BgxvD>cK0AL>rBkye*Th+E|P`r@l~tf*L9r0l$dt)wdm~=tyGev zN+e(kkU#}tcmx&ss^0H<;qR0~9+oP^C9aFMgMwq{a>BU?01iw5T^pkt1~xwSsC?TR zj78*Zt=`ik6b{R6Y>}s~htED6$6W9|bnn>>t7OSg6lM_?^L_SDe}(|X2rz9%4d{>G zUj7rTdg>|Y&@kns=@@j@Ip|RpUl2~^JddidccFwKph90kwLlsAioCS8>zw+TuE~Wo zV?>bo+r!HI_MLa(q-z(!?CF*{&RZMuge6Q7gb>J6gvmdehn_uqvHGD0kZ5d@E%V(C zA7aIAw_@IcpW%f+KZZA!-Ga$AQQUX!H7HWd2`5ZLH;=r8W>oC!Ju525*@}oLPkcfN z;3(n*M{Sk!gxj~aZ_f+yzn|%v+%d_9R|h2%6PuzDfCJ5m^Dn`1-~O(=l)$5ADFRgh z0QT%GO12I716XzC71+UZIiB0&rR}>=17PNfQ{lF@%FUD!3d=3&rd$!BOa`fJ4`LM5 z)-_2^R8@PYdbdZ&P9#0A1W-9o0Z_1AIX(!nSbsFK)(1nFc&d@=ft5W{((x_|}gQ?#uOHNQR}4-DFfM zfqsQ7!X$5Lnit+`rsrCDxN5>vy}dl{I-a!@`66wRaYH!b;WR@MNff(%K%g^`yPmQkoTda@XjN@7Zs1(VP6x(+qS5Rhx3 z>2kYT>1`LvLR5IXvfrzAr_!OK@RiBu<<#dKA%rL$)Lmh6GGxe6QP;9z&}*gMEFQk> zQWRL-1;f3&s|%Jb3!{8Le>V>?e)WrAU|@4ImOt_cMou{%ZM%2UQ#PDRq80s{@W@E( zsI?4h&$<%I+Z8ju=XK?IM|qy)UF)Qx5StG6uCRJPuPz_D2B0|za6H|^(eRmfM5Rdm!K*bck!jnMHd@hd={aaTEJ&i^!Dl^SDp9D zDxvJkweq^0^k@sp^F`O1T@vDjLvmZ39&qS6wZXAr+m0k0X5nh(G1KE${uBY`bTAUd z(xpo!`SIh&%P1H;WC*NW4h0sw2|xT1MxTBbvR$3>?W|j|lT)w1RDOdfPju2MR8@L) z4OX=}NnS>QB>(3_c3YhJnzhQ|=0HG$u6Zv(!VLF~FTQ}k{(LcZ^&gDeZoU~uAAK}d zu3Ra%wHieJuoR~0`j|kH|0* z4(mIU@99OLsToJk{Vu}&1|Zkf1KYCH>@JBb@)FA1f}{!CyZX)|M>q=hI*z#Y^!&Qd z0=Du5UZCPP$b@SSx)j;y?`|x^42kOINoH}ffoDcrQ>#8PmyepT-M_aZa%k8X? zLyLn{Duuy=2f@d+$!7z<`W2*)IR^P+0i{Aw3afIRLKC#*T({|U$FA@?VcRRRt}{jm z(et@|WX5&Gnxdm-YQk}BN&cPAF1$tW*Ru^C-j#5>Qz+z-WsBUtb*nrKZDW+kS)NhVx#c4iSSuV|hXvua zI@ej97w!c@h~j%PdN?E#~zCfn>S%A3Aa!Lo-E1DlP16pkwK2NV&~4CD4G`ZrX~o#A9;#Vw5|6_ zaIdh0c&hp}9gQF~0#IvZA^4^73+hWKugYiY`~8jpdN-2PeYswjIqdUccqobpt?lQi$_$V&@7jFv9egU*h2?Ct1~`-@zu z@OpPo&#x`VdJKR~)DwQfC4{n0g%!$Hu7!fDfC}qW2v(_+s1`sXtoi2fCwDjaf{5yd zB`kmd`Ie9x!||5`-hzEqc(=+0n7DtNXpq zeD~kkIyV6b5NX0!LC#Ww6bVzIK$H{;70-)GJgegGoC>%^wKx?5R3WBmjX~Xa8EJph zr{gdm8T&MK6BJrm0F-4_0tf=aJ0;>OR@VT7t+Sh=SVgnVcAc%cQm&OVLys!L2_ml6 z8ex~o6N*?~*_ncPq^1qlU`!P{j?*>mC{5@snkG^j z;HMHH$Ov$4lBb@?IS^eow4IKycbUL$0NaT!MKVal6#Rs*svEh4tzcDqUfH5T{!^mC ztRh}Ub(%;44)Ve@NkCVK5P7A#K?D>cL==j!f>s462nAGmP7u|eG^?JAif~7jw^6kg zpWEjKRrMucRFKlEtGEI_1){3jSAGAfzlTrj4p7g&K%X2vc%j8X68L`)yiR~5!vItO O0000s^4+x?1&^{FP1%wdd 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 BPV4{x literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/four.png b/app/assets/images/emoji/four.png new file mode 100755 index 0000000000000000000000000000000000000000..14782ba23b94d4f26e7ea5803d0474a184ba651e GIT binary patch literal 3176 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/free.png b/app/assets/images/emoji/free.png new file mode 100755 index 0000000000000000000000000000000000000000..c886cf2494c1367bec7134e9179519a52cc4bb1b GIT binary patch literal 3605 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 b(E|Sqon(p%{Zd)100000NkvXXu0mjfEB>_| literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/fried_shrimp.png b/app/assets/images/emoji/fried_shrimp.png new file mode 100755 index 0000000000000000000000000000000000000000..c8c284bf14af14f06f4dbd45e61e035e3b8db52e GIT binary patch literal 7550 zcmV-^9f9JBP)cRpx(t?=#-{=J@i>RYkojswe~t&|;85WN2}qK|~QG98f`VAgUuYf`+oeXl)Ri zhGGz8&{ihfMnsTCL=;4&REB!g@am13FJI=(%$s*OeevzJ_daVK;l1bIG9>@{_;&(Mz3VwYcIw^F`I(dN`o3p<>2*(U{+l7-_-)UN zzHHn7m-1YvSK9*kB{q<(b`$eO*K%7)UD%-d^ zeA&If^W#5o=7T?e``O?7pCA9KP(=_re{a&2^jiWFA;HUqeSHP!ldvb96_Gi38G`fH3_4F-R{c|?Uo==!K)ts}! zE2V2s*lu9F!a5n3g>X)5z<6UE+DL*>&IQfZFUHNzTR=wOe(lR|c~+kX4uS`Dj^F;| zRv7hf>318?K&W3ZwI^(LsYe;!6>{h78tvtM2v-tyS^!kjF?DHZuPjTX0wIN|@e(g& zD3r-ZN_z8yMuY=_X*VJ@4-6kP0ycl=U5}Mf{O#V^oqBuxz5_3N**0G%8tL2%jODFC zqiMoOAds{c`&6+c+bA&klzcp-*xJT>hbc5FNeJTz=N&l!B~*B z55i#41<{A9sy+RNPl4f2{KQQgFM82cn{R#7bJWtl&xknrWud}1h4Y=yt^d~B9>tY$ zDM@|r4M_1{r{heQTf;!Ah}K*esU%^uMenMkG!7mC0&L}|r!}1ei?rrDSY4qf+hoHX zf-oR%wQyxlw!Mq4HAF2T8|{m(_nbJCA3F8EAAjY^-~Y*Lzaa#SfAQA$vM~1r+las9 z8;$q+(MZ_~Yt|08oS#mQN%+IHH~;!Et_+k64_b>3gb$Rj@V2HdN~|f_J$;_h#sm>6 zM(0+^E)1x4Crmd-Oa?o6FVR`eWc3``ZbrH=M<5GgKg1OSoH5i^fUQJ;e_Ryt%Yic= zJNto`KK0~p|KQ_Kz4Lp%?SU&mn-`An{A#p$`b^6=8V#3Cyq6Ndd!wDNsuiWecdx$T z4JlW^WKi8Z+#CDqwF+4BsJ z-^=*?1q1>+*~IG%AuQ?K5;%*U45@NKI^RYl9fT0q_?~pw#Uc9R*%O116W(Jb8ee#YfL$wFgd@; z;LdwV+ik*Tf_L_!Pf2?nvh4{`D*>a~J#&Kbc8Lk*s7y#@8wBkxQLl>+Q;JCqB0x5K zh*p2aXxTEFgLl0BQQ-q3z?UVu);I;iS$tLDoEEw)MO~GYW$sK_dS}h8XI}HltN2GC zE&}JjrP=S|@-f4ct8Aa%rWzYY7lup*BZPoDE2)cYrh>`(78kyJH{M%1hZpHyb%gHW z{q&CPC)*mbec}|;VMeyO!DxL*Io6C;*C}>KR9S{Gplg9__oWk!C%2Ptdg=pO1+2Gd zW5^vCV{q0W9mIi>wbs@cjS|WWC;L{rp9L;g0)O`ECpE3Nhl;H!lp)QfIdrKB5(OxX zHpoEGUTk8kihO56+)8l9peqehQjNxVKqe{WXasqNwNtDQF_UfLW{fleX>T4MB?vtA zctjLgve6_BcFk{}c-Qma=#uX3$9~{#TVJ;VDq|^Xjgks)EnZukHe}O`D$gXQ#+bsF zDKd&Ma6{S2X)EQK!NDjn}et)3t<+kk-L{q)T&jkFJm` z^{ETZ&WZEv+_Q?#GRmD1!xLxd%(V$yDN(0MwY5W))p+k{%=IB`k_`sfS|bn?>#NAw zzM?TtHMvcdJMTF0p66flbrTQ?NoEYS)&$1ki~(bafWQl(OD&45qAn_@gztaqf4%>O zT!yQzyQvi@mect*jpZKGjV*Lt%>u5+Q*2cuk|x>omJ3RvDdKWqN*#d}~O1zR%)y`)G7q1kDI<9Wn_~am4ni za}183V7j_7OO$##BI)%A(ujI8q0xyj(=n#3=s(lPTl%3mE6{rp6nCtt+Ut5Z2&~Mpo9(#o;%-{^c)!D0|@XS<*@y`OcKn zpZhYSwN1+1oH{Fzfn<7N7hP1~1$9}Yvy#cyh_o9c!hmFXk?u7|s3#Spvm5N5zJLnk zj1;_}cW9aEV2fgR7oFz_>*ya^A#AmnZf>BBN5(0HG2T`nq!7*C4X57q+}GUsj;Hsp zNWj6Q@sTu)Da(rSxiuVqCSOz42yM_+O_t??$`H7VsCAg<)4ds&q?rFx6^H+)&P#UA zZZSN)L6sNO(+uw%DhbfWQfC$Qs9?G=BHtQgQ3xqny-3>HUw;`}8>(?eHrPcM8e58?O(~P@(`T4FbO@c72=75igtfGl63!c68H+?h?w$tx2A8n%lDFl>+n&1-cM^(e zg%={o{-G9sK*5&R77b!^Fl&7sc>aQ5C^2a79tLj9@1U|=R8(>r1Uca7H>F8 zoJ7bdL~oqHi4YgYqzA4+m~z4374#1~uh-OVd1VBy0bzPlMmA75xS z$uV*1rq(Z_x;o}kM4cbV}t5$6-O6TBLWFRN!rW3 zS-?rRLDFlI_S?uHAntciNz8P8n`)fXziJ;S$KZQu$^1Mv%MaDl;@LsUpI(uGKmXXr z{xlNu^Ek)q$B*&NtV*~1q6CfQ@Lb-VXYqWRH3t-|WYQX)d=3;&7HHE-DCzAV?FM3qAS=m*`z}7_TJTcizqL zQx2nd=&1QJ5+tS!sV_Sv(~1i0z%NA6%fhGEdm+&|dB%k`O{gHqMcOBJ4Ks#sbioYZEqOOrD_<2$Z6=vcmjL z*V0<-&s2l~ryXv*LmHICp_}bGRlAR=Gfb7y-QT0R)S;@($kpyES0n%sw}1N1;ERcV zb0-KncWxC^8@w~vN>jU<+*FKrGO9@_Y*pid(fazcz7{;d6G3)=`oEl7>>v1ub#|tj zy3_60t3dey7k639>Ac3W`l z&{N*g>bCE(#*pufDY7Zm?igFwH0E2hR{G2znWLDL)Ok(Z2uOM<9)~v-albV?F4u*j z8W)(tkzLqE0L9J-Aw1K~OQU$2x4D-(Fxk3R%b93Ulm5c5_ zy=wKQM?C4ZX(s~jD7L56MTN%`C82jtQx|%+ooy~8cIles^GIRqyh4P6ayTSvq*Pxc zZ?HwRwL!MNiOr{YYmvfH47W&o?b)?_XPdI}?4DUg=NW^Or#XMe7s)qwh`LSE#omIK z;`~2Jz!$vN0AZAV=}4zN84kx}RgO?#Dud27B4DNlj1eLbB*Mv?+PwrIF-8VvQGV^s z(el!bU%BoP5C7xNVyhI=T{TJ6R#OcZfD z^&(Ea!_!#oBBh>5K3!VC>KqkVqR`Sv1;~Iht7tACLaGLMgDFd<>jR2$j#H9!zDGFM zi-Z$Df4>SNpMU1#fB)XEto_ISa-V*?jn8T*Yc!tFSiFKd5>&f+{jl$N$|DcI^{vOh z7I>m{5QSmLC1m!@GuF3{-;&wQA4?iZ6gCn+*F5qEQP7;!!PcW=x%jEBzxsoxhkxQ%hELm{`#Rm`^Vqo}HlVL6$iir7c zE2`!AvA}WF91B^^35-F-aU`t`I`OejwOiMJvS@s%jqr`YHwR-*zp$+z@{`hD_cpZj z!X~@>dk=rxR{#9b;p)~QQ5(wLU6hSbVZ_d<)3`h%?)FI=Ad@C>oe?(sWTS%dnUi#n z97HZ2q7e>AmJhIb??L%q}#?*8UA7cLc8))vo8tWvkc?egR_-dE5 z7oe17y1hd|%6Ma&(djk3HH7VipcRvk^7q^?0=)NiYQ>uARcA9{9Ojh{=lsT4f%5F0 zTIKxT9!HAVu^Xce)9ne9o#FBOT^dUU7d}$#+kY}n!mAg97E@hfTZ(QN((kl!qYCfA z2`|@A-T70)+n)FN`Q~FBz|@^M;%vk8)5C+vd+EIw0u)Ml;eCR%0xh)nLL)_FRB@zY z^7tSO&-C}N^nJ9;#W6y(F_poLC*VV-CA7Lt2olOs!1Vko3Qab)gpCGiGhk3x=n}$I zV(J>JJ#oKv0Qd(0b#ceW*Mt49c!fUu=G*5zJTXoJxS+KRcqG^B}FMGy&cvb9tK7uf?R>aOW|ESbt0d)YP{rBzG!5AtybA} zR{HBLGEEu@GVO{ejEKyTs1cK_941T>v{9I>oShV<)TlT`=n2Kn6l91>LW0oaoW&YP z(2Q6*va+)8aX0*P2oVN}uSbQ&$(hs(7y zce%Pg-R(8UUNR{1X%!~!z{H>Z7JM{rSBL+i5zQa3lC!rA)!nZVh+*pHKI^<`5y-1i zq>&KRu7TUm2wD*;i7+$b$$?V0c&(?8O8yj{IJ|pbR(@JWJjZN%SD#Ed#rJvd_V+VAzy0IQ z-TKMKT0o&%vkeGgB$3^SMlT>}Ht=DDs|B(fV5~rb5}{C13w$LIs#eas`7*EP+b0)r zUGF9bwr-jP_ucHQ!<98bYe9+T3hA6Bh})P^fXjz?Qy^7<%PdhGVroH|dy=_1tcYMd zMGq%Ltrq2Iir<}5YXNvv6b)?6M*;3v4gfg*iFc+~KlDJ<*wK%1rCBhA0VVLc#yOZB zbWnI_P>Ddu09ON2*@3DkJl+`UX^8-`tpPHOsH=*&onVc@Rfa~d`3FyU{TKe{1L_d@ zz~{~te|7JfJL1EQPq@YBRf>_5UnSONFb$0MhyaC!B^B(!DM5LDxXjpK}ABgtI5u9Vlqp4;XF|YvjWcA zfO?t%f}K;V)RSyhVRpvitfRkw;p6|T4w1hfWVs!kd;8O5`x*10y4Gd|aTO6!qKBH` zXagexyj5UIWH&)&5z2U6qG-n*j5OrI6jFs03E_nX+tF#lD#f(tiMsRDrKYufl)9+N zE^Od+jSm!~^FzF^Nm?O(x(hghRtsk;!tOk2Q8L-s1_i#ZDJz39mZ%le+dr2t9^KdZ zhBQgN`>Bt5=`oeOxsf}1wS7@jww@JGgLW68GbZP^ zscVN&g6VFK5Q3ze(%m=zk|)0Yj^F%-G)cYZOK0D!2ifVCanu-!Qd4Z~GP!39y*%e9;I-4RQiBJ(%1R%jXizy8Y zhv&~e`AuJW@(1qp?i<=AW*^pm`*cwMj4buCyC)~89r0B$<+Mgz>itQV8W^dmhZDkH z7dI^NjSvw9Gj#+?&61p}6(Wd9nlVH@#^=rxhzhElW~V{4yuxU001BdZiy%D!wPvz@ z4reP=E5$iSG0CYX1q2`ig-XJD>DmK-bNamxy&m}LH?&XikstWXKyT--aqCk8H_rC;5!n%HDNrhC@$2viNrWST6`K}bVc3B2o?jPFurJDvm9GNJ<13oNf0>jmZ;Zf zI@l!)9e7WjPbsGvE(-B!lOT=IS%K5;QVr2yON}Wj+6&#!?qv3bTZK9Ep!5k=&zXN~ zd^Y&u`ac*e{lk!396n)aG{>%)oYW`|c+e|n^y)#86A+t?P8le`NR02#{B9}wtoI__d#eEZy zAz>JTkQBp$D%Yq+LOINttX^QcHO0qsn6khZyX5E2v3>73s?mgMxWjmD6I0}j&t3F+ zj>S@D6;-a$rKa6$6khRP#6>))ouW^D<%j?GYoGM+AN!8Vy<0a_oNeaVVTM^~A-uzt znsm8^jbo(p1alIhLCz~OJtdoDASJe}nVh|V$!5h^26vsNoKA6-VR~VLE^C4)03_jG= z2G%*kMAE&!ix-l~U7IuxHxZ%4=TrQ+$!M@MlXyDcLO4k^Em5JQyRtB=7i4GFsPl>{ zGvFOEN=TXw>e`~>2*LoD)w4RI3n>TYtBK9al_FOvujU1Xp)aS2d84M23oTH=Fec2oH^38&ohO&^duMP!|Rn zMZ~=p#(Jg~wkStqf>;u^BRn2mSvm{tYJUI1n`I<_w{q3&p(&{HT z=kd-V!T=QoV2x2}ECMN1ce%H{a^2D2Jo@4f{o*&ITm16O=`UjMJ%16Go?-9!5(IFZ zzuox$t52MH*v;+aDUXYzr(LJhZ(e@n;=W>Sgos1Zo7xPgXOL16H6rq1P7oW~i|tvm zn+|5BEP_~3mo-5e69jU`jmNvCYY&=6zcmcQ&^Fr5UpJHdo!n0d;PQX`^6Qs-`Hzg{ zWhMZ1*>8Dcqp@Tob>mZ3df)PthaS4&vEP2p&0qQaXOqETq@rdF#t|j~B2Y6Gn6g4R z=bcCB(hw$L9VcOwG-HBx`?n80?C7JJG4JoSW%aVFU-E}%9|!?zZ;*QexI7Sb$-+I? zA|SYA(IpG_jN{9G2V5d1j>GVo-};b8KKF+7hWXu%n|FsL0BI*iR~9J+X*2RcBN9fc zuhvQDx7II=?z`oY`(Kfj^~d%d+V?|Js_{MNM$doxD?f1-aF;9g>m?xAqXfApIC)vX z!KHDyC(vY1pb?M)$t52HjXl@mOBU@R*GEw(f8pszZh6kbdk@(jWObG2A`~K2v9d`k zl{>ZgdlSch^Yg#^)!SD$ve82h%()Y5JJS>Ie9jv-ceCGl>?=P08Nlzg`%8cV#2&j` z)&ZdQkTCOmNSN7WM8tc7j?y?zD_sT75dy)U)yD&-(@K&zzVtD-yz^uC{KXRwCpUc0 z&CAcLtsRp#S3h^(_&0C9VfmV0dEZyw@yR<@HvtWpOWpzYfd}gOfZ6jbm%MnOf$v=g zubBO>kmUjV6%yv&d;ao!myP{pWA=FVUcY?xd62#v{MX0c<(3B#|Niwj|Hkou0Rs<$ U5As%j4*&oF07*qoM6N<$f@$5wZvX%Q literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/fries.png b/app/assets/images/emoji/fries.png new file mode 100755 index 0000000000000000000000000000000000000000..cfef66966a729c48ccf081661403d43d802c6105 GIT binary patch literal 6405 zcmV+g8T#glP)DyYzW2WO?cHDZbkC+)wIH;hjS&ctAP5<7%oZ>pY${+IJDVK`9IE0J#?DgZ z*d#7uyDABZF%Y|A3{)_y0HXy7v};DvjL=9L&1j~lr?+oi-gfUjdGqxvsmoKUQfWr9 ztMIG(*SU3j`rUK>=YP)WTi<+2MEFU5G(XYL-xKin1o*s!&xe(|*!Ovx2iKS3xwa<$Dn3w1|=S}dvN=;4q{HqFlq^Z@mDo{ZY0D*#n zfZ}jKfdFhIKym;P!Wif~IT^ucdWJvvqDb%W905h(m1&=UH>K2Xv>eo}upT@Fp~l;g zc?5LkFtVWzOB&R3O0Yl%BmyH~AVLS|iF~SS_^q6X=^S&pDW~LI~8W zCBips#y&Nm_IMWn0lWgymKwn)_ffv>D8sKD!^;E@kWl0PMoAbE#wLe@wy#)K&~x%D z|I5h#_*-j&Mb^Dv@zuA^%Y)w|u+0iHuie5WpMEvhJ@hWF{j+}vAGr`!98~}K<>>e9 zApqQbo!vL@`lyU^AP#4AY)*9!Dum{EIGf$s= z+K0at0{*d5v-2JcyR>@Cc}lUx2ySna`9HpzOF#5-=C+mD6eNV654&4jde>Wd-S57V z3;ye?v1o>)1l=7GxDqovXSn=dUxN2X*J4owsl!hkva7+&hcDow&%Tjs9()Jk7v4zN zDzhbXSfH0sDlqnlS$!HjNDebDT=j(4^ z`)hWhBE|fcD#5$Yr@tCuEMOw&cF|FWlr=E|4u-RNpx=Ef*Z$9&xafnIvh|V~e4CJr zElr>WY+WZ|^R&mp&ndO*B_D%@>`Plb9^0;TY2G^OT2a+d0S2e~^wviBTSJs2XsroD zg=am8GRPEFZ^Wh#?_zwXkLP!96FHgyE; zKzW+lc~exjmGJjAhz}2H*?mj452~Lm~}HOcZ4teP+PQQkyt6#7Fx0fcmBL*>Pcs zx>uVhke~bO-)TX)%XLU`N~-?z4cA(cv+JR z^Pdl$PcleAayY~Mc{6k$AMpKK7U&IQlpg{ywQ7L!0w`BOCk%%Xvoo4mV@4Fmk9k1qnGr16NfAM?JC zzMNNm??!gy{iB82`$47Nd(H@`YJPtPSbM5RyDgwnJP&-|ryOLgE_K2Aw5Cgx>*TUk zoLa4bQ_R*auh`chIvI2O_dA?giHH*6vWw^0xxLKO$0F9+3E~1~TT?i(C`mb$XZ5eX zew5ektFdXPX5m-_iN$RVsWwU|F(@pfSW~Z8nf75*tID;Xd<7T&;XcZ<<=;Ce1msL! zKc&>}riLvJo_VB$A;t53Kr_{-G8&DMbVRuZ^IIw$T`&YXrB-!_uHuElo~mZ)(10!5 z8#HS9o*t7Kl?Na5 z6KSIy^Rp$6ofu3=u{OgRht?h!Ts*}kJ8OvNu(pR2MSo~HwKO7%66RVSnbCNjrQ40U ziB62l3|Ty&`+413eXG*0)vR<$wNJs545Sl$IglX zl|MD5-chzf=7cFU;{)wn;(dgSBuc4;8YPByKLAg&eS4LMAMVoWr-)bt4GuP4(PGoy z2A&l}d|WnWturPl`Rv%yU=#}vJ-nLl<%&2m;?c(jyee<7&Ox;rV4cF(C4xXeDU|2a z>kaX=P_KI^9iSzqpI9FKQ3pv3_1t%*lz!0!ybs4}C>-6M#aJJ)9dt5aW_OM1_6kZ$2nwgFESwlqE}A{^mKKy}LY4oM_W-59sz%AfR3kICOZ73Sgz3F*P0HX^jSKHssJ#T^4U& z=1L#{ZictNXaY36y*w3i!GFApSAYHncE7B}Ti(A7t$mvHN}lZ&Cr|ZhHZ@C2W5`nG zHU)%b%@c<^q;Ukgg7%vPeo85f5SLE&#=`+oV%T@p6kF!1RH{DHO^?M>V{W}|jW=E2 zWO*s#$k8FzTFT`rGfj_eTN?BS4#_Oz*fBfp;haIMjHRyPmcLq})lHZK0ug|>oecqR zbRRySnK#bjcX}`wQL8v^x@ne1z0Axsj7BLg8=wM@@mMk4s&dhu3XeS*5vPKO1KVY4 z%0oE?1mFzAv1V~$$W$xDN=W9))M_p#GUe2v5!c_aiCRUdR?AE^%Xr#iU6vEw%X`d_ z<&_9eJ1V6ZCyHYWmMjxK@Q=3hYoFdn@X0F}Ts}h?-teOD0uFW`e!9or{WaT-vjyThCqkJXN$KS=O=k3$Dn01w|6lpP?X^!f=4 ziz%xsqg?8BpoG>V=35o6J-13mN{l;EDlAx3)53R#~1pntff5p^cuI^vPASqm&?v( z3cR8ca8m^L{a}U9-?q#h4|e(MJG5f^Qcb;%v=zHRp=m~RD`&TWR~bc1HIl0&huFv6G^Yh%Ka z&&;L<)_SDIr(Vq%3=Bt~8BX5&FMj!AuDEh14?SXW;uwuBVYA9Tk4EgfqsxCgX!!M! zN3*0@0TSeq7fnDW>fRXWYQ@PwQ5X1xD)TDO=L_FF#Zub`62xURnjZD4hxSX9f&{P# zj^40@?+N9S!5GbXTQyK)su?1xMy2HV@#90%%%Lz7lERXv-4~Q(_~jb=4=fP`K0CIx z*tI=COG2kRWH?Oeb;q3Ojqo0h_|2YX#?veY&;^nSvw<5>TU2qdryV@h5u> zdVNI3pme_PPiB3+ULuPI;Dywx5m`1OipDIjjyQ30l$XQ+L!J8`8?f_~MQR>h4`Kxo zLIOC&1238YBs~xViGoxl2P8?xdpA$Bvr*xH|K9~3*uP2?CulEZw&l~BDI-)+OuBns z^BuNqDYM$nc=S-j%E}m}9L{tJ1H)C9Z_2xN!s=RzGa3=05so?XbcB*I!*PNi`1pPa z=MqE(w7V8@Da&gKPn{fc_<<2OhGi0QMb;skSixrcz>6l}zeI8*6G%kXU#g&QEWT5G z;?nK>Xn&8d-m=Q$Kkl)%vW%xP8g&@-d-y>}W_=b{3^P-X;mGh8UtQ+V;Xcu*j}ki> zWmjIRc;(eI9Q<*Fh(p-^`3~QpD`?)8snVh z>7yOuahqAF0leV#rcdG{XC?pr*S@WFRCx#O-j zU-?Fd6AL{?gEhLnnEClK(^D0mcw&X#z|!wW;0a61V-7#jqt_d8;+a*BBT;`+&<>dzS1U6ESqLVSOQFzabnT1*zQm&DNZhDEG!$A z2Zpd(hD0-$I({jr@qrt+)2IXx#gpL0DbhG!14*HP)XBv6vnC*p%wuuMUzb&mOoK@c zHZvfaEEAL%8fBl4)LMK*W;vRqJP?h!(;stilgFtehTfW?+Jtfys2CnPkaDayX7BEh zdg$S4pJ<$5GnlRWs7z5FD{iPYx!McaH&xdfhq%wWa|Vg(U}OEOGi$rL26C;@Vd zdF-qS_?*bvKW~P;SiGspm~jeY9WF6w(Fg{dCQBXYbkeYP*8+C8W_kCH&7c4)bW+Oz zA#y@CXX#()AT)BB_9-k0|C+uGJ}mB&N^^{oCbR0i#2wAOi$!5 z#Lo3T*O#@kCIBE6c`R}A>I6j!7?VxTPCz?w z8u8R*t&~TSXd>xg8Uwt#!vQk#@w;`Zx=s)p+_UTz^0!6s777&<^)Fx***GC{jzmKu zli)F$`_CBxDzp2O&?9z*#FUUlDQ?O`TZbqIo&r&z3rTBL?5&fa(Tozucy5XM)iKR2 z6?EtW;F6SRVS(=c3e~mERI3Unw#fRkQd$qZuoG^KLwqK_BsdbMiHj0&Hrs#B2uM>7 zr6or!nq;Da98rpKWqd1WWkEFJX_SD-Iw5L8h(>D|M~>v81?JyW!f(uj^*{swudE1W z8dP@lX@Bno9N9*tCO9h~6hsIzQ36Ooh;t5W99f)_S|L%cP-%`4htAnYV_y`piOAFI zbG9gh*x-!doI;A4#5m+MtW2!SA;yvo9i!F?vp1d&z6B{@EJZV0U#AdEw`kqyGit7o z4MExU-*@XM&N*$1cW1d3A&CtM^4uS5xv!^vK4%I5$b^H5$ezh4EC?{EK^s8{Xl=n$ zg+o*mIONO;NsLmFQbBbx{aK8Aw60bI3&EljZvS zkIlL=f!H}xSKI;4B>~3ejZoxgVu1ujVk|aUA5lsac%TH7R^S}u7R^KK7S4Fw|$05uPn3OZ0=p|&@mT^b=t4e?w-DoD{2LK56YEg9HIqc7K;m);Sk0s7oPaNjocK`1OH!@E z#Hk6>Nn!{CP~z~E!sWn$(!~du7Ch&mqewbwE^WiF|5FQ%l-IpYAZmjLAN^eg9mDIc z^uY8O91~crg0{G{7=19YIdC?IfK`xYc3qL8a)5Cz`SMs!oO1#I3_OuKF3XgV09oR& zTA@WyO5j-n6sW@H@Vc7egC4b4C@=~HzVxSX;RTvFfyG6|JAXz%YbYzm4{H1YxTe8o zMg0po@PX!sWMZ1D2jB#^I1my z^&T&KC4A~z0t$#cSb^THhP6Kqs6`4}wMYsGAX3<3AUMH^kSRr!+2XHLNS$DFA73&8 zEIec=E*vP5%#q~?0jmlpl@uftig3kVRZ&^!7j+0HP;^!QG1VhanX- zx+XYNWS)%*SYKNKBak8Mmmt*o{1?!Uhh8!Qh8d64HAIpF7#T-o41s{}DZFC*s|i%0 z0t%~8AyhNSz8kRiU5A7MfJ!t0ifT;|&yZysvJSXsvoD4G!3snO!_+W#LL?9ibaEeG zG6KE>6GS80Cn8RAl+IkLQd4l|RMuSu0MCj}&tQrRZ8HXBGz}+EP*q zUx6;53KR>9Wf3KH3rJzlbQh$6`n0RWzGQN>?@p56}PRGfyuL znq*w!k;vLWWa0-&@3VX;@( z;^!NGuXtYp0r(pk%Qhe_Y*MV#4cRV$0c>Ffa2p^1&sPF3qzM*4J#UF@B!ktPv<(K~a53F>H{yW^l(douq)1UnqL3&M z(FUoJx)s4gBpw^}L(^(C;3PP)Vu+#;j193}DI0vJTot>jT$gk9+4r^9oTK+#Ye{Dx zm722K$Go^o`Zeah%rXA|Ut`XiYiS=*Ro>433~<4Kw=*snaKV5J23#=Uf&p)1TrePd zvkBz3#oLVMcU0v4CX)S#f(YvMMO1#|o%=SA^&ZeSc;plj;XR#ujkW&~(f5jx%TWat ze5uDo^&h<9FZ9RVAHNy?|KCSp*)J{GyYRmyl6xe!$XtY(k0G;QEfgM|I2acAu^Z{6 z_;bJ3yLD(^oe>smFBm zD_a8cp7ws((>Z2RdyiSph^|;9zGWxz?R$vdx0m!o`^fG&Kzh$5BzNs2zGk%*UA*+C z(ShCT_Jccq_y3hQd=|bFz8mI*xgkf$6>^5$p+=|`YKGc@L*NoP{YngwTRJ;M?6an2 zSIv%$_{t@stCz8R7Lay=Q3DfDFWA*K@vXZ^@4eI~AK2sLtCw5x-p<#PkMDU}?p(SI z03eLRd*QS2o$%c-C(I2wLM|qR+@VIO6>3(s1BbvRa0=Ys@;yMTJZe(Y3We>Zi^%Rd zB#97Ja6l@BkoA=8d=L;jPBj@ae(B~<-fMe=`>#l zd-JNwLM;CH2>;?39Xmu6tO2ARt3nbZd*`u6Kom}mTHgCdfy>^qJ;2`5`7){bf?3Uo zE?dOxnZvXbhy{r)W+4V+00j@em&3$E3Cvl{6&=h{O!+VCxED6iwGjZa+`?Y5KyV3sM-uvRVF9Eqx=CFK0 z+7afW7P1o7Uj#;>72z$6{_+_8FZ?ruFFis2gI8fLQaUkYrrx{`ui=gkiLP11Uc0Pj zUx$D&4)2A}!gm786#wm6@?UfTDwIF#lKkYXWPflingT|^Df;pdHz<+CM8Yxxkhxgg^F8!* z4zUF*5F5lA#{czc$)7k4P{BR70gs#^{=^CHzP%lwe3HZ< z3vuPXhyV();J*1Xekwi^%a`xJpU?f?=K%0i;^qH30`nGxT3Bk(^&CAh0xK2twNZGl z7Gwp4FsGX98}T7$$Q^2gTA?O!%|S#0r=Pz;h-FH(0_Te+|$`H~TygKBP5Q4)i+V`M(6VA_GW0V7RU)pNq!kR#*@IYaJHBh(5tL+!u; zRlq}YUm(F|V3j0c-S*OL)@)D0d_81R6^bij|_#jU`{WPnq zt0e6f(a{l3Jpf|s4vU9&f8`{IKHZCUKdf+dBrR0HL@ipNmDwV4rkAvtqA_~r$1#h8ZqCQCr)By;6VTj z#8PztnL%P8GWF|#@L9u1Mn239IYO?GGvp36s#>9@%`t%kzTqSa0)cDbyxj+(BdT2G zz1K)ZP!;h?X%rD5P16eAdjO0vs4At7aA_@CJdiY3+W;a>R~SeXEfr#mMBoxZR7v85 zG?6WN0Y*|#Mv8bfq6#WF?^P8ET(|usDBgb`uUCnRsCS@2kf&S~ikEXbQA8ZaTjoqA z6Y}8%cVG#VSwN8_+Uz?gAfBdu!3q)!CNa26V)Dl}=vW(!-IBK`3W`x4YF8Xo6}%^K z!)wKLyEj2&TG@3JC6o@Tf(nJ=4rXlhHyHH?07P+A!K*S{AF$yE=(`pX4@e`}DOxC6 zmgvNxg@;lRBVY{T1ig8Q4L4xe?N_;)ya1tAs9DvfXt=1>+=>#@YF!sNZ;Ju)?wtqI zyLO+5R_E`;gXU%JxB?@GT;67Iso~@c$2ooKG#lLwy6as|pLmUvM~^YNeF1yf5{zs8 zIE5m>Lmr^$G-^=;uQ2h|eZk~C9ZtUdO2`#*hTNe>Rcmm-gxVDcR8jR6Hx#1f_MPeb zcAt7DAqXJ4$FCYpCprABR@HA0tlS)JUo9|%suZKDQ@=+4WK!n_naEmeVuU~@hD`*Ci*RRzm z3_Xk;qMMCGp-AZvF)%EqDAA1^UCVK6lOK+LeCE#Ay#(5~E`G{%vOB7iTH8X~KoTR7 z;FG8>Y@`+*U@@d5oj%I++wyFxJ=Xvft%X99n@TJq2qA(Zbqqmh z%ruBvG}c-}8bRiEWw$JTbo_YtZ_d*J=C=ugBLmjdt!@Bm1bb#$dq$V3h;0?zkmWp2 zoz884MWJc+#st~2Y&N~7;nj#owB~C-W2rP~Y%5@=+TfQPAlBZcR`Av!RxrkZ1V}(b zW|lZJuN%QILx^*Ce@|nmZst+hG8Pof)_J0AF+yikH%4p4)q@yRwK72?GlihW-gVw3 zpkh`qrY;_g5Q9Nbq>4z>5gwS~&1|b$Hid6B49raHcxFT^$jn%0_lvD+MVq-Oz-EUa zbqXUu;8}wz8Zc(%br{fWB-S)9l*VwjG@jHDK%32wDhgtn*G+^Fw=NwCq_!T0wvJsL z)oB&+GoSm-4wKn^#MB(s&vvDtGZ*5#27qjKw+KQbWVTHaFtdhH3%8q{g9Vypgl&vz zS%?IkI6yY}_yEOZ5x#UVDxn0NZ%&0C^)m+~ndt!CXIGb;-vITBsG@~O zL{Kr{XX$PVMra_7P*Vw%sEQ4m*YgqnnGJMY65YB3COT6Thz;dqry(`is}|6H0i{98 z%76w6M$yI?oS+tDwu5HRSEli(Xu8IwkQ?ygEeo&tc~+TDA5}Yc*F|WM&)( z;ieKJvDD+lAXAvtl*tn>p=WZEkL^Rpt~R(KC5ff@(FtTJC3^2J1kmP&Nee+r1BI)^ zh@m!O3RF=~V}bw*)_{QTm+bO4W7UF%pvjkhaQ-FW{0~jxKQinVjCRj)?agrL?@!}i z>S6b^Fqh6F``Wbtz$id%0(R4gCN__|EZ%t*|I>RAjTxI$5X6ZA_22v|JAq?E{L6jH<0IUef*aqzOt+IVIx)Z$zS4GH190w} zO#DY|;W&0|%-pqeT>m~e{G&D6-GcVddbs(B;y`PPIm#)_N``b|h%MGqMKvIig(O4) z6^i8nq!z|NB%9}k67WjCtB2+#(iJoUA_H3MHNnJc9{?>KIw;V!G3Mxq_(-348lz#! zP++1u<-A0BahqdL2l35qymSBkb=?g{H|^-#m1K_P1iz4Q^Y!ygj`Vou`)lkMVYvjx zCAs$uT9(mD!en0ye@Pp6U>?7>MYJPDS2KJk!DhB@=S1p`uol^}`kIZcaA+RLDsEWf zCl1pskh5dl*$HxdM0B)YiOyb~;!MHZ*pV26Z&|ulIOdhBKeSBpj(H9p9w6Nu)^pr? zJ}MtS-F|&HL(csvqw;H#8f;{E;+Z}--_YUK)tINha|%1~?1>{T@*pFnd~rhl^C4sZ z8h!7{Gegm_jN1|AVuIb7V3uP1bX?BID8ghpK}7%%r({!sh!PD7%vuiJg7Qp`osP3% zLEKl8v8QcJg(R^=nL*=(zJ=rClC_11TR*vj@y<4fp6p{rB~0O`(8B%68+sm)-n8<( zEGAc&#Tc2QY{wkDCgVU`c;?%u7(Y4SQft^bMOG@QQ`Cd=iYpzHTq$x#;XFChh{xga zKzYtdx`qL41tG?gV2O=N7#Oe zb_@Iz+MT>Gd2;Q_H}ps>ANdcbQSl;?U@T--dFfeCZ(qVqzjYD4!+oCn&RLEh%h?|p zc1<*cLyzR*Z_dh zzpOu;UBC2UYxE&8ib_O+C$f%TJX3OdN5sMRwz%il<~Va`%yZxG^2B39G7XS9{MRwkpa&n+N{``>M zX-72h=+Ke(9P~=G@9?Ai!{fvKhu`!sM6#Q*tI{m_ZoCk`GwxWDMN7IcjU9uX6FMux zC6~nP-<4pxp4Xn5@ccgwIQ7(+v(My2&J*EDP}&Gdz>NDPkXKNKz!>ldr7^5rm9p!G zj4SVGv+KGPT{0YdE$8UblHOTIIfPJ5<>6vHb;$*B`VmRBr$Z;ScJ#}-M-C5qFY^;ZgBIh->(yPxl{FePraOWL!dy~|DBkst*OBW*2j*xZC6jC8+3u#-4GHA~W z3rj+0-m<)CNMci;VijUFhzATPP>QDjyeN|#*19FVzGtJWj5bOpV}lzBlc6&1!+66_ zqgHXU5w3puSNVj`p8Db7)wlFlVoia6fAI(B?v=uQLrS~bl!7>e^DfP=E2 z5?>UMkCc4e#DOv%1QV1zm@x2Ped%vTf3h7vm3>p#{}EZ4i<3W&GWl#eXF6$HNLoUi zF@+E%5XH3#krgDKd73`^zd#wFxGBoKHX?{GYXh40_q}qg-xw76SC9Rzo(0$r1GWv< z+!y@^YvnUZW!~tzK#)7R5+p1PGvpdQjD}Ea+IyeZedp$qcL)i&Jc5Bl2|g1iq>6|E(V)TF5*4sjQ-j!AMDYRDDopDX zEI0w$Iu?{yS`lqks8J+B70|#8kOv7#ZgSs`bI)Tx*4KR|d*)ovJtP#)4V|&SnQzwF zYoB{(zW?`FYwdH6s49QR82+&Ne*s)xB3E2-#gewRw$BDZu(Vt*i^gz_QB{mFl1in9 zvf1oiS6_YgH;$PALqkK`ecxy9+_}u0Ig?ilYb||!eHDAth7B7|x&8LrKYC0A$mjE{ zTepriYt~?l;nhM_DHe;|eDlrh*|X<^z_Agay}g~&Pd}YF{dl!;U67l-utsD6~Gu_(Y)jF$_4iKAHXxV)t6_X3?$DgXkV z(>h3((~KIWDBwCT?!0RC?@SWG76*Ra3s0T5mW`KwgpD8HNJnP}U;N^ixbE8PcN{8EW;#%ulk4?jZh%{TFbS)dj?fg%v1_(5({Tp{f;~C z*f3?wpp7h^=aO<=q+G%kaB9qz#Hftb=%XM4SWty`yzT9j$HrK*awTtl;~Vkg*YAAW z8t}_>Ha9V=vy-gr#N#y5qBx0wDS-$mR7{oe{J3}M(4i{a;9I9mfG7!R z6h-*s`MT0sz-ls9GXV=kKma%{e0TG=80+oj2V3spM_aZqKG4sWJMRGC&f9KfwC4a_ zO*sbl?c?C~-_Z<=D>wowFai`6%7sG5=FOXT9O~=)PS?EoblTuviJ6iTP-{U!ZA4HU zM`{GndZyKDEEEJ5w!r*@Pc!s|On`iX}-RvT^uHZ(i~6blG842jC+y0wqKxF{9~ z6v`zyeeH#;c<*~z`o8rnS-X}q-}g>VT)m2!%a`$*4_w0R*Pg{|F290P&RN097jFQC zfu-d5*Uj3u%H(% z?rJwfJ;UD64nRY+9=mt*Ad1lAmE1RZ+(SV716ar_RoO`-Hi3n3nQbkac-J z2rpgHET4ZguLm2~1dR~n^I%D+oBCC>{{A2W90dXFL~$&r)btXY2&Pa5JgPfG95)1* z(ah(%kDpIRIzuYu(2{aF&Ix%wWL4lB#}LAmg;LwnxtwXpaM`v zI6DuwJXFvd0M1Lxzos3YE-F~q-O!Ct6or)YqZk2)#7Po_NvPIDI2o;5y)S?$7y+Y+ z7?MO50bgXa)bY4(Jfq4G--(m5{j1coi;hs*42oB#^t za*3cYj%z@vMsH$IFjPfA6NhV`4G2JW6)=EKvg$o*uG32 z(HR^71=mTM7Re}+ofD2YS2Y8oB!C4*ttIQWFs)@CyLLWzA60lL%;+-$O8Isaa=%|h*BS|d#`rx==TL7ib4kV?`OxaAEURY=WY@_ z&wFdOx#hEatWqwP-or~oRF#)Xr^wuy@Ioh$IjU2QM}ZL7Q!x=zo~JR(ecykgqoZRq z7NI4d&wry(D15Tv$6){uhMdIt9H1Oq6et27{I{FQ%x!IIn(4ak);V+L{3@5rwTz98 zm5asVl>m*;fP^I?!CZrz^v?bJ_dfzGo)Q7tr%xX;!~Ha6z?CCMy*OZ*HNS(iufLI# zFT9w#eC$d9_H6wr_kZLfioJulSqF4-kwg&~g@sE_-__F6vO1l~5ClOb18!E;eQ^d{ zFk{Ayr3)7>Jh7>%X-nJ~FKGC;#JX3UHCQfy=Rn4Rw5el`!iZ(Tip5<1)C&`xXYWsb z$S*$o2_D?|VIKMNU-H63{|Rb2e&yNBIduu14{4eFKQjhAv9a)m#jCpqL(DqIm`dtD zQ*j<3c6jB!eftV=bL8ZcPd-1+h(Bw120Xp(;r>%vz*LX4lR_1iEKQvr?|I-?xY;HE zg0WGyT(FY84?c;R*!T47G|x%Xz3yU42lkQ9)z2&ii~-jO|MpKmNkukXDI!Esbk~He z8}U5v?YnmE`g#1Zc_lNxDI))_s{0!zKt4a-Z#_^23|MMWibL?0ulyD1_6`!b|NUz! z&eJ>_M9jomAt;r3@|N34HG|0-tTG7!ED)-U^b8F(XF57gik-(=`w&$sCGm?`gsY!@ z_StLWEU4@a?gZY_xK$vV>+{PagjzkL3qk@>5aBjM_xnFY0{gc9n4J$iM$-&HT(rhB zCv(^mJ?dgn!U(M645gdWU22SDt*xy6PXpA5a9!L3-rd#J_1f<4?l;GRoD3Yp_9>4p?q)-$AAP6CC44vJl zkbq<}l!E#>9dKBHLkA8F9~||Eyw)}x$KZM1EMOn?!T0?ehlhthT{$qtVyp&!@QOA< zyH!h}O5V3hs1VhddN8zagoD3(f&`Xc{2|1FQZcH&7YIYkL;^n~0wS$%#RyC$H#S-> z?~S4m*L5p);!(~adyB>5GeHnwj5)g@zZYq+n{MOGOD<>5vK0WF^Q9YbGFcwH{woaiTZ+K+{-N4vCDGPNQ7Wr4 zYT@-~y0VS=HX&-Yp`FRCOmW zP7y#v+8ZK(73o)jz`odtP;gseY_P;vSDeY3Pko#>U-lPFUw9&^Y%`~xvzA(h_U$D< zG>p0sDHFkxtO7t7g-P1*?a|TEuUCG+5wG>111{mkndiE0C2MR$dceW`2L{xGh$EN^ zUaR2b;Qqh8kuNM+%$Juf;I=<`H{acKS!|c`osWKi8&hJHr4xn&Bs(1#RG`Jq9V+a+{$x#X{gaYDZhe(LK`^Me7cD=j%q?3r(`Ugd1 zxvK7_3UQA(Z`!nJOI4LH41e1Y0hYeuO}$Uvbq{3}MK~&QSO}*D9CWfsfK99(0u&;M zjLSRLuOB2qRrk5B`=M+uciRak#AyV(;zQ82Q55}49Pzxh_Pn;Xwp%KDfXY+jc>a!t z2+-U$y{`b2?aL`5;pI>a!1r|cnrp5pQKb^q+tcav2_o{jc+bz^;NaE1?_Vt~f;*&m>)l~ZA*JPJV& zoD0wp0ZM`PhCs3U4X&w0pa`hr^dDi%d#i|S$>nmNGRCX~7N}}}6h%KQl}dl3s$&fk z;Qm{0J%9td0&qj+SWpzm7yQwqYQNklDyIxm3Mxzwg`KGu=HiJ2QKo-DP(Ty9)t_*uf%pE|Ndk;R6^F2|LCL4woqQ z3J63B>)0E>YeR4lfrP{uiHnKl7(Rg3v65Iqkw4%MyN=AokYz9IZD#uVUaIPOo^!%> z)wg7V!Mk`R)6!8t-BoXQo&Wit|M{!xDKRttDu20WJ%R57@O=Qj55NcCcxw7@?>h6+ zkG%cNYySP)u6pOke)-&g_|(1EeCl`Jcl~|;`QKc)@8kDg|EZ^c_mO{b`klY^&NHw1 zcW>Kz=?C8^)9(cU;aN=j#%f)Da${%x@7(-DSKm5WA6MhqTC7K|@;(ITgW$XuAVeu@ z*>YLsylA`Ce36b0PIbTcfos3C`{eS!HjC~vZ+P#)*Paakp7AO0!MjfV)b`og>&{+( z>IXKqwa}z{BL;x@|%ob=-)G{T{Nhy(l1{qhIqlr8bUc_qR}X*ct`8qxde+C_`+n}!jko{sHGg!+55MSTr_bLuoorl3 zJw8JnE2_x}s_{Cg2P$wiI7QqVp-btkQMkb;!hFW z2C=HBs~NM64bI+h?exx<-Si{3{APIiT*>2&e%y zCIT|TOTovADn>?YC)hfBKHTz>n=jn>;xm8v{x@#C2OIvZC2A=ZK;pZeT(I2F93zn*e|&U>{H* z0|7Jx6)?exVBsV|k8qVowzqlSi|j1ge)iXYe(T5X`q1S+ea0B@uAiOl-1_{}pTFVu zTfde3dB&sDjHff4tMPGz+*PDJMmwXlikk0xR|QQD7ssfK5oUPVpyUx~1sFgdG6OdP z5@-j`gH&K6aE6fp`f%$gH6mlY5BNByt|IFvHn{2bvuB=n$NJ}=zUF5PfNO8L>US^P zdD}G`J6BWHXQ|hAa6aOgQnE+e28shw%+*--XllSZd|lz(7*mj#@wMVZ1ZQ9oP{2S! z-wyb`J){PkfM~A?RDgmk!15rZ38-++<71?%Cd{_4LtvEFf;uC*>-Df!+Wz zga=^I1xyMs=z>WPmIbgSSPN1R7x7_(x*jn*vBM3wo_^_Xy!q6-{z3q}_n(}4;jOoy zd(+OjYl5#gsYg@laYCd**g%WN)IbtA5UUYUM8=2|gn$)6ZH4m@m;w zZoYmxTH9i6c9u|WlUs+7KpaM<&wTLqZiO&Ha6r|cV+~M)M4;D(0efJC=?E*Hk_|{; z-OvgJoDG1)K2*V0zyd7vqY@dSKw06O$2mu+YR+H1HQl+Y{?K;?!2AE%>DONW{Oew{ ze&Q^X$vUHv02O8WYVI9b*UyC9V5jvbqK&Bu7Lp8-?CZujfNsiQp0T2P1 z4WJfG4=`JTtbhb~z)))kZRo&SpcxpW678?)#H1xeHn=@4-k9w-QI7-;}=uwka-!M1<^D2Ratw6th$5!VoE zhqy?H4sjhNwRFpUv^&I7hgreOnB0t6%^lbnyn%T@z*d+oFcc>N>l&O}QuzfU3kE)md@%4z6A&_z1y3YE0J1si0O6SM^Cl9~OZO0OE1M zgY#hB08WFY1!kGSFo7s|01p7A0aHLQOCU`TM(0?~m68=?1eU-Scu{hrH1m#jsdNj& ztbiuGbA;eIu``yflku)U7XbIZe)GcVYc}s3jc0g?$0+)EgxCQk38i(ET!B@HjBs%s z@hu_>B0w{IpQ0Ho?;~C@4X75xWkd?4IEpGjPiHlp1HlG`&wc;fA;uBN5hXQPazFtR zrZb9;$a%@(?wqcvNM%gQBZLav8p4=*Jmu7>$(_IQ>dgz^7JzzEz4Fw#(_w8|FVak{uqUi`L1#}P7BaAWNu?(dc08o+I2@nB* zBd`PjCYWVny)g)6ho_;KXSs-&j)?V?lmycTD=kJr6r?1)i)@`*4|U*`-xh$)t?4T^ zPn|$ClUqk>S7^%QT+p;YONVKPl@&$?2biFG5iRo}aljm~0u?MTFddHBf`KI<5lj9U zB%Bf|k3<12P}aaIOhGjf>p(qKLd@i)VaF6d06j!a5Ld`)MSIlHH9*Q(ZooUR$YfG6 z-Sn^c{{rx9ua(Kxso4w1YZ0Tuh-jC{O@oL43CbL-MHu6P0GX2JShoulj1CBWqP7A% z!mI_|2VG&>P*zV+nkUeF2%;1f0Gu=8c#NyStUfzo2yAWnhUix=95b%5`a$1pQYmx!wnQ?%3w9$W{$fC*u|-j7A! zPXcF=u8CM#(5*TseZRZf@E*MDC>U`Rz=TW&6>`c5ATHo7GMk1tU7y_n{LlX<11gv9 zoNjJl0!0(B#E%SI1}nH=_)2iD;M@xD0Sd6h)G+NWDS8>``n3sI!3@kim_vd`{0z+% zUAv&2AJ8r@L0$j_EaIwwIEV8!ZR;tkIk|(pP};phd+2DEBd`&n^5939MqE&WTi|2` zWd&Mrc<^J!(;DaH&MPv&hx(R!t)i3~%Bpu<{v^l|rT`IKh4&C+NACPk)q-K53m}34 z*bp8Jj1gu!utCt2a8eU%MU&93dR+MC?(^A;bX#5qFwES^oB~x9=VI;ZjaH% z7F_}m1Vb%j<`C1NB{wi4NIGUBn#oyN?IrT6FUELQ;~bbYU_C(N;I^*_K=5&58VEj9 zQY5ZTFl)(+eZ1es#e@&8Pn~=ItN;ffqhnT>)r26Z%&_5tiYcCqj}h!L5;8&! z8bA|G0!s#xL0iZj7G`K^5e;Y=gM-rUA}-@%g&#YHUxGzUTg<>T4Q9!MMEnRu3>S=? zIuM7c4q6~`VcOAfa!alCgS(^A2=DpLL7np4yZS!;>2imT`4O z94VFtPeO-jii2?W)~H4bc`S6*vKl#HhsB0tRYO5@uwdioBIQcb~DK*XE}$yjO7u0y*7=70!z48e+kxgj!^jneg6 z>~ef6~&Mr#C# zU`D7E?+nQbQh-AL&jiDft&p1h&=p&tY4cZ`d7^C$$`RE#5`4zW2%G_9D09T^V6?s1 z*#b;KYE)aqts}ldb&lyAkqR@w5@rS@lt^h?(A7}+0tHMAj2?{K;75Tto1&T__r}KX zy>@5;05jAaCJtW}sFhwsdXQ5yvfN4lNC-EXgTRtVYE!3|J9ssMZu849yJoIrhn`fi~b2 z)fMEXXP-q-#c&w(BB;ap)<9k%UXb7*yWRzAMoU7i&@4K-k{`Gt11#_U@zMS%vL)(j zo75UH8g#wi7BR#}kbMxqHbFDc0wbKu5WyM5&PZKDP66@~@dw1UDLw=!;Jkv?)Zqw= zLhc+&#_JKC36A7gj_()=r3TGA|fk))Xk{Z##9qW6%)SlXvwH#94#)*F&)^UrC+PVY=Qx1Eo6hD z^vEVKgFym}9)PZG+1u^D@{a$)l||6Z>|l5Kxy8W|X|azsEtU*3qiCY2r{3xR4DW!u_sOk>Y zwl6>`XbxB@SXOMHHrn=14?!(J@t~zA2o7U`(J(*E>>lRNnVDU&1pxN;%g1-0n*YM| z!ZvNQi;wF_6BvgKu(16KcrXpqx2FVXrUNCRivY}nIJautJyXrpi zZJ!SN#}4j){Gr){XRmFqHv)N;iS>%Ka)hb{0!W8S1SdGR>MKFS`3^+DC7d)&HXKVg zLaZSzmuLasDy1|GR0eGr_6Cs~hm{p;vl^n{eZh20vK46V+e`rlA?z|xfC?=uzzz2& z46Hyla_g8M6fR#{KKR%-miPZ(`QCl^-2g+t%YWu>z3&tEgsqMEcgNKTX$w--xTsXY z1Aq-q5C`HA974t{Avy<30QiuJ)fiBmGn|XWiAQLAs=5NXMJPxNl(zI5QYk(-M&lY6 zgxoe*P6JTdM?3VogkBp4;iDL4o`RA06U$}C6Ho5*@FVkk-gDpT3*VLj0PWH4haY`t z{LAap=@@UYR}sXcvF-i8cNl;O67oA*Bq z@NF0{u;7(Q!pcpYN|?bt_Bmt*>&^K^sg^6)*wK13L^erI{z1 zw&U`}eZKMV{=a(1Cz?O_jvkF&x_I&Zk3D?x(ZU=H3MODRRtzgG+AXlu)7{D;mRqbC znlnYg6jTM%28uyxG3I!0#JIvpl)OZ29~T-z9jU9DQQa{bwTxniS)f=%v&YJcQLO}7 z^&?b4iGz!5dr?)OdA9(id0Q9C$%|98Aa<~^UWqhI?+>uZ#A3zplb8 zkZnRJ4kQm76Z%X=3KlBR8t9-n5W`#rvchBz43Ez3BA|c_G%g4uus$g$V4!qZ381~J z#5z>x_)u6W$nc2VS_PM}VxUUtGFg>oS$OKnJ@)qU8{YP^0NPNbW#rGPc{IqrN`swvI z|Jj$G{GrLzUF+CDs)DZtZ`RY$M}Xc2mm|bgAYe4$B9I_dC;$Q&VslI;z!)@wtw4J~ zj1`yz0#+I*8AE_-m;!R#3M)0zVWyq8_(?^|&>XEuvCym*Jot^>hmP9(=BIN2=;O*F zc*S_xE8f2P!Y6*^f234?Zg!$_K8_F*#5oW})PWX2`YKrf5|9xS&;=-%DrVKtuiA^F zDrgI8gUto3gW(w3VI?C&dr%Z|As5AxqFqDN3SAa*n@E~zn>mj@xR)QlH2<-;ee~$T zXJnh)#dG@)bdSnUgy=qZ!)>0)+6ao_!x-Wc#N$cy zGrn2+pZ>ViKXB95-`qJp`P_x)ovNm@5h2#Zs=_-%93T-94+72u5|F2Z!XSV^i?a;4 z;f9F-0+hk%tN@Rh$BKd#mJ3I_OnC1gE8U`Zc^w^1)9~;km%IIg?#I9K@Z~T3#^}({>2hs^f$Ken5_Fx-F(Z*3!B?J#Ja}2Obij{#^4HqfRjFPSK*u?(t(Tz!E15e zg8>+5f9D1Ra3F@HLe8){YG`sq)KN-HX%#H7SS1eUbH4e|<*y$ewy*w^`w#B_@E0vT z>)YjD^(yf{dVcGS&vx&1H=cOS>GLO98;=OVXJLqt3~O`IC}JOKfm>$%fJ8j-#Wbfm-EKRpbNL%vb8Opyzb=5 z>KCp$JK0=6vB_vG_~7xO@AKe2A`a&O=W*fz9mZwCihvnrhN`1owJ46ZO_XIzJ8w8# zbzHo>+P}Qpye}61(>K4id+DA3-J0jbJ43(vlQO&J#*>@#M*iV=J-%*dYjop@lQrY% zm}*qvT>uYWJmLc)k>RmBUJccRne>q}SqrHv9PX{SbZN=%<<-{~OZ|`antlA@*LL^c z+S}Xb-dkh8^eUNNeR_M{oZYI*-=9vy-=59tTc)!}JqnC!j~~^?fH)~&8SrE+SXXG; z!gAHoEHXz&-Iw?F(jWN1?}@Iy^vILT!*4me`E%^8u`5rDTVKFreY(BoCwf8~|9pfS zw3M4;2-n0>m;`4hppcEd+_FfyJnTJR)#Cp5`l$S`gN55Woag12{$zh~1$BQe0dVCI z5xM*2)H}Bk+KcPecuRvibEE0l0W|ZKIu%_dm+ShlySOCZ{ZU%`9$egC`Pb+F4-+3- UeDRgELjV8(07*qoM6N<$g7Mi4%m4rY literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/full_moon_with_face.png b/app/assets/images/emoji/full_moon_with_face.png new file mode 100755 index 0000000000000000000000000000000000000000..94395a4080b3a9d2a9aacef294256d8ff332c557 GIT binary patch literal 7224 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 Dy(xrH literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/gb.png b/app/assets/images/emoji/gb.png new file mode 100755 index 0000000000000000000000000000000000000000..2a62c7a0810a8b4f3d06279330e0308bf2a78b68 GIT binary patch literal 5894 zcmV+h7y0OkP)#lN}s2Cz4Py#eeEU~d5bzU&QPZvYPef>MEi0Bpc%T|=z!ytG0CrcL$3 zD!cSA8$f8-0U|&&Px+BmM0@omTD~8V(%wYNdg4U8DLd9Z5{q|=MoAP2au!%$%xrBs+Q2Jj`&|AOIY zNPOz)ryO+L&9@zO`%CMFzV~YFU`k4Qq8zXz1tQS^2gk9A#chfb5uynJW5D$cqHS_okrszT2le3c^9FL!K@>E54&3=?I()fwp9Ast0X>F; z4}bfCua=AjTG|Fs)c?&-uNXT2)z0T#G-1_-Rck)pR?Ph_kB7dK`K{Mb*BCJ@?y_4oiIS{?P3BD@tOqQi3}fTXiO0(FFjjxFl~7 zw;6N>yeudIM}Z}1Afqf?JA$VH7y1tF!3|doW#aH+0C@HpnD#h)y&A}pLJ=Ky3_UI% zPv0V|ALouq>?wdq%i@LGil2VFbLWdk59l$X`v689J8}4#<0(Gnj=Jjawr#9*GIen) z*O<*@lR4MRc&?YtW<9SdYs}6@UuV-T2 zJhufumBlv(&m@Uy7Y9%ZPhR@z&#+I=VLi{N-_Y@EO>&6|1(c`mZ04wGuJ0eepYD0|8z4@%v8``^hncV$vZoPCFpR zlS`XfRi7mmw~$f?^Mb9YQdSn@Itgv|W)17Q?_KDhxlxIjK z!`^S!kP1k9kTqZgM1gNW>CmHv%J*_m5mfjCAR^!!$OY&C0UC1@4e!mYCq{F6FALtE z15@sS>TdxB6%{aHG+cct?Ax2RQUKa;|C5V&|0Lcl_^7@Zas|r6@2m!zy_=(T%ag%DMLC?|E-&6J#{_fGeO4p!PgZ zpim0JVGf1hd4?E}^}{hBXu!4$ZPhvn6&3{sJPekni2*swE{q>1_M&>unGD*t zftCU1kXyYJ3yAeN2>YR_@bjOsCkZh1i51-c+;VoT+5(P&?xi4rNrC>M0E`PUAAfBF zea0?k)r&{d|D%C0`61Y_8UFMv3^^DsJPj&4(psku>OjqXhw%L8^;|P^Jv)LRz=onI z*aE)67}{E930n|KqJms@yvEjT6P`D(BQF7zW#HZfEp46Q5 z`NNanF!S}*G}JahT%c<)Xg44Wz5>qz%nz*web70GY0QQu_8YsD_ZvIGjN9S-Qwv5G zEP?B$!Si##2yHd~s7kg!GmK{+98CFu1Z>YheL%`1ozr2^V1$Bs0T%~P*%;u4iwgDa4e}BOiMopf_toPSbQ5vB~zYdg?M!_@Cl7(b|tM_=l zh)5owH{Hjs!q+ty3jyNXW+PZj+RVn1K2xpOsC&oFYxL-x2rg zmGYk{ozuxyhXh=A)=E+CO87T`d>y16X5bsI>{{eT+!Idy+3jF#`xZ^%}_$hei6`1orEL;W~z6Z|(z^W)`KMi*8 z(Sb+C4aGMxYIYdDtnpc~#b;;Akn$m&6K2j{$9oHkxpBfi9C72X;O8g8A7)}L{3q7p zDO76P}t5**~VL}ujC=3=t1aTbjEhI49^5t^UZ+%F1{v!0cO|X4CBvUwI zh=@fr;t-ETv7!-Tu>?3)fDMrVD}eBU%l9Cc1*0GlC)KNpmXSx$IAjoRX=(cbY@4@~ zO$QC7OaJZ+tcq~>K~Y-EH<0s$hLk3g%HoyAi3}J3PuvZwHV}R5(OS}a z)J;Uu*bsFJ0Tfrz^wJwNJo6F=sF;IeJ6O?x&K1}wY$I4ofo*}~KrB{hM6w2az33aVqfW&-dKmWLfh4+AQcxIpOi>(j zT4x7N1P-nXmT4?vf8!dvql?mdqXefR}Tk19BD01OJ~ z*$sl;peO;cFmXjeN+GU~$>lIDNpwRqeqB9Y?dHJvdNM25;O+W7lR*TeqzJln#vo_} zLud#P5o`bfg@A2tC~Ux2vUe8G`b57#s(FdHen425B}$Gg~Pxw#z25r3ZfB+#~=|9 zbqWD!4W0rCgK#twwILn>NkGsR-!B9uIy78BYcOhe&r28r2qIvK;3$O(?{F=Go%g2^ z1EO5Sv%&KV*XBDA)rHP+1PD7QOcPWahd&sA*_~}6)zE|~RHFfQx3vz>6_8z^5izI$ zgO4vJk2V2F0B8vVP_6n=!T{VHCg)%F})T0%4Ejs|bMXHYpbPp=t4V-vK5JOBKQrZ7>oL zhNnY(OVAPqfI(|Pw8of#WEw=1=-z{}k%K8aWH99e2U0YkFOkYl*d59tFplG}M`<5i zU6}q_lCWbZY^;TqYltpfiuLJy%#KZ%A6gD;-@_zRNQnbZZ1-p@twKP7(E)^^gy@2C z6(E@W4}dR%Q3kyWZSXTWT&)pHp*Ab=h_8{Xi=RrOo11Wh-f$b5Fvj2v=tt~;{qWo@p6{da@E|zW zpYp?p5DCm{$U}&?Zav#4-^|Xjmy#ZT88YTVc=$0w@xnj0GVa#Txb9EOc=)ANyz|-j zRIhHJF{uefr#@A58httyS6tlw9Z>Y6eiUDFA+b~ryJj=8X$!JpGb%8E=LdKN(*k(9 zaLms^CX2W^B$q||E}{e}PT+LvN;K$+is3_v4IPX#Z~#uPUerGQ9Cg2#fB>41rewaB z?4jo){rVC+b_7jV-$Z(2H64MXm!5;?UVs_*FmB`svL$6qy7q1S)%B1NuwAT}pUW52tQA?aUgVqA zBFk5ZEc>UJrC*7+tXlkF_2$=X64TTqZIuaV4*2Tc>GD^QS&*;KgM50Ml^`zDG?brLBurY&tLV_cfx^>3;m}{eqq=BW})I*q4ZLr*8~|j zbkvIWSA)@GSN1;o7P)@voASw$Z>6QBMgAw`=Umybe7U6Dl(g&$;Qj~l=3fVy4e~0; z;`1-e8~D)~w+fxkmOCDvBc8M`^UjAN`wtUQc0fd=YhRHW4~iHgpEVfibm}ajYO2uh zPNDa2gdSH4-Ny<=L%wNuHAq>MjjQXp_kmA2_JY^xeeP?Fyz&FCol(u>Z`U&C^Lpkk z-p;!Vwy|tgBR?c}!BV!IKamytAHkB69+*W7X^a%%0aj@V1zFfAVn9hE4nReRV%V{X zTd%mAXzvN!``CMEBeaz|CYe=B82;`HRFAogqb58EK*V;i0foVaJjwwPp)?TzRR)Q2Wb@1 zI2(K|BvT%}Die%3qc2m&51_K#W{>*&r!-%D6{(u#0CXQTl&b3ayuL|uR`2n!PbWG6 z4dUUTh$@ARjVC@@gCIDzK-`8z1fn+hCFmUu+;rVT{OX=kUa+=MsPJq_?+LI!tPVb)ng9e zwu=W-7H7}eun{x)R&ujn!;mCSllreCJdazhei)RP_P+u-Ur2jUpTtT;m^5)Ho8K72eZOkQd}9;bdJhcy zDb^cr5=B!!`~)h#UrG9=n>c>*i`;$o?V%xviH{M%aV!Ldwk-Srt%7R67>&{zEC4A~ zTY+N-Sg4XXR>u-{)HQPXH7|1H*-tQM-a1+f$A)V!hnJp!!3X27Sk2Dk&*6%F3}Y`l z9X=~p z*WYv2q*Y*fKm;(L!owC66-DyQ{$M31|Kb&< zKK2F8NuN;ArIOeSj}e=A5xKQ%N&kKtV^2DOcE^BA#~f~Yb}OZ>F-u9QLurYfzd&nK zExh_Sc-rqw?)iI9vY49vCc7TS^hmAoSjjsh!7Gf0w@B^~0PeWrPxlA*d z6nHKeEhv*kbTh^@38aluS(NR1mSc?VC|^Y^%Zl2{jz!~6B))9XilUz{`J}`7XB}EH z;Xe+Gm6jG0NfaU1PQqHZj;4?P-fjSBrEG11p1%w|XD+hjpD3+S#R;gafMB7-_%ks* z`ta7$1|EI(Bj$gx5y7LVB8Hpu&^f?_gBO5UV3`20MDUHq)ta1ui;xi^1vJ#xN$p4T zw%4w&-hjKY7Ef|c5KkO5U) zyL8*9d+*-;OGf>)Z+iK%B6e;ydkVnYSp7|1$9F!WYWcTx^@MnF30{wGL`Izq=a0hc z*@t(RH1Oh#1$_S1W{mbIFO86M4Vj$6vJ^%sBme+KfB*)RL3>%Y)Nbaxx^1izO@rrd z+p5jlI+Iy4e?u54=^D@Yk>-}^5{$iGR`;EJEGrIFNy#$AaTU- z;RDP2_by}cR&P%MWM{oR>#nuQ-1>pV<--P)b?m>-$f3pE#+*qcm`>(@*}&V={zmnh zCIE^Z!Bal2=N3B0&je&aX9Ch-GT^5Q=S&v7v`#f->R)~NmGvt>{&?LA$$eXs&8*2l z6Og5TTQ*-I6Poq_KSYN}2w_!iLkO`$TJJrKFJ8E?7Dxh_J?#^W1KojcKzX0i4pse+ zKC(}FMdzxe-)6gQPsO_y#Y;QHGwDZ={gm|q?XluN!q)iYytfsZ$e--xr-yr|C+8e;$0QLs3H-NnX c>n+a literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/gem.png b/app/assets/images/emoji/gem.png new file mode 100755 index 0000000000000000000000000000000000000000..8a5d8dad5c3ab032d0d986be788d309fe55cf3ad GIT binary patch literal 4855 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/gemini.png b/app/assets/images/emoji/gemini.png new file mode 100755 index 0000000000000000000000000000000000000000..d926f6e88e908cfbb7f7d116fdd50421826131d2 GIT binary patch literal 4296 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/girl.png b/app/assets/images/emoji/girl.png new file mode 100755 index 0000000000000000000000000000000000000000..ea4126941f726eeeee2eabe1d429d6a87619cfe3 GIT binary patch literal 6314 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/globe_with_meridians.png b/app/assets/images/emoji/globe_with_meridians.png new file mode 100755 index 0000000000000000000000000000000000000000..b198646670cf4cf4d4d307ad92949cae4af0f100 GIT binary patch literal 5837 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 p{Udx5+bHu3XT;{#r5fG literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/goat.png b/app/assets/images/emoji/goat.png new file mode 100755 index 0000000000000000000000000000000000000000..4be9cf30404771e0d7ec6d6e0d8a63dc4096f11a GIT binary patch literal 4889 zcmV+!6XxuRP)pzY1S^NHX9e_FU@rpM?LOg!AXwm%VUU_BS&%(Ud95IADP^#MbqB&hb zDbe<$q28;ULS(BJ;u%-h#XrJ%sOQReRbIdM3){bP?spmhg<|)DoLudfd3i~b@$m=7 zVngk(@htx_@1Tq{L7PUEay!Q*OXmI^?)~0r0BApd{`|k$xpTuii3$E!ip@s)%u+(R zhy3Y~UPgL@f({-GrsznI?3F8*{S>b9y#rw0ym@~cqw$s1RGTO-TSxUZN9pvZW~x7( z&&NV)X|AQ(x}&6xlh-X<_Ueznt4#P>;}V5+s;V;4(2$h|2HL2yDvN@HUEJ|3-tny&BSkM}?_cm({`^74@_&qvjP(4t z?QG@Ll`CD;)KEYsfk(9+*C@#L!C4-(#d@mDmiYP^7eLk z_k|Z;_{(n*fH_*N{5_3M;jYmrx4rbzOaFxN+>4pFjeq|6=l?1;R&L+iTsC!WvX8EQ z!L!@fNTV0qXt1}5hAy?zty_b1If*XvDp2KVlHRvqxkp_ zXoyRc!9U{N zk0NG^7eDtS7>aj&{PFw0^6=QS#>dyeJ2=!iGd$e&)1<@$gIb-JRj2c*4hwS++^}KA zFYpZ9aP{iff6n2}= z!~{QzPw=LrM`Nk&>gqZ`OtgSIoc({w{?YCe1$(=$Z z88`=ngprsTd>^w0L*II9$+MoGpSz61v8=+V#p%c!x}Ka3>aW04D+#{ zqeT}pr-@FKAEvl?c_+`<9tVftzx3*>zy9&!#q<7|2llj|-;TH3JnfbT1UY*J1vx7s zBKBu$v~r7H?>~~0ttPWMk*ZH-aLZ&rE@F|bpzf|yG{71(c&U}y*}yK@KtqGga8U-n zovD73ES3Vw&53~COnQ3TIhv2ffdTM&(4J?%kM&>(g2*5YaRj*l?cl*S@_>ryMA>12Dx($f3>I)= zRZ?Q0lP9z36whKqLm_5JFw5F~8sNb&@%~F}EDRnRZs&J)lZZUyy)--mZR+4_O$<2e z)p!?ANIT!(1h5#u1O~y|vV8e#ztm`as#?#MGmDkw(2Dy40P3jKp0ygyeqtIbftrma zD^@K1SxQRKXxI4~34l%ppqC>;KU{&21MCXD2#q|jPQIs=2Dl+gT)y1F$8&7l?LG{e zjp@J<_jBv!`~v+QJi|@g07eIY$I9>QHW~f`zhF=!i*f{CD91Q_4#7x(B6QCSaIaR;|MVwmHGgJV1o@L%pq7NXU;rn0~PfQE+fkR|IDHIMy2p|~!SgOK^2r`-7Rz{YU`xJ+$8dl#*W1!LC;9|1qHluT1;$PQH2k)) zWdMM){&Zm?FfJaCg^nCile6>2WnY(`Khn|@$wo-Xo;prQ7=SwXnv@^3K$zg?5-kM- z(AWscXf_P(8rsBHXwLVbPXL5e`^IIsj`aL6o`sPRSBN5J8x48_U4ZX{^32F;WUo9a zCprFmOuzBQEB}HqKh}K#_>+sv#^s08!!Y}T1ud;*&;!J7Faeri6Ey(Azq`0~Lmx1! zm|YtHd_*4r=*J=q*8l*(fZ-C8L?l6;fvi&;$Asv0;+y>K7S^Q(Lb3*z#9F{#x#Rkx zMKAvJv2Tn3QG}JKDEE@e%EMSJaWYfJ%6kIm$N`WQN}?#zWrQ@uYltI20SFQc0FsR< z+|NuwawP$PYj7)sS~M6gx0F+Y?7j#S}4d*hBUm^>gk)0v< z6>0!Rqw-d3YZ-sEj*BJ5pdS1W5kgS(n(%cYZX{wpk{Gd;U~m{1Faqab0w{k&0ssx? zU=kXPN9>2f;~hA{-v?Rnz(9ZxK?V!jIQ!El`E&SlnZ_DpMgXv7jsXF?6N-uqYA82fvaqp$RdBMgSOT)_cGlo6&e4;KJVlI*bMY z_$HVk0I1@!~YOOUe#=Y}p@t9oL~7@OMd5a1Z<)zTSv12hCv@uz(=|2<`zu1pSi@ zfxL?Kp?&-8{vF|aMgXuapuD`c$&-_nA{rnvoH~_@oE$X;BqT_ik)6SK;h){sI_Lyn z=L)kVU_;`bPOJyO90sNn{V)>1*;amF4~%D{&w&|Ig-T?YV&P=@tdJ7p6_l5kKp4~h z{agQIMghRf5f**qTdUFz1##6lovLdxc%_#wB}w(%PB9S8!kDJ!Vrp(IML&a44^W`m zOkoR(DmVfh7!R=U8?;8AfdmI`03hK1IF}YfeIoVl<9C&nrcg|@CskHvaIG?exM2HV zUss%Y>{VIp6#4pYGi!C8OhGj>ArB4W1YZRJVjW+@>-;mP^F?{hV#$YYActT-t`;%8 zQ}}eP4HQw8>fv){7aHCHKyV$dB&{er02;rmk`AYZav?`0s#m!=YT^Z)D2B`^0BE*) zoR81;pfHuwG>RG+1l*zP{7J0yIX0WfXz-_kV~KQ}XR505FoR%b%_!vvQX&MD_a(%6 z2QRody6`)SaAYt|bkr0}C56ek^S+Uo;7e(Tg2}|j z6`11$g==fG2mn@99Yz6#uf=eICXgakdv7TY*q_PFjGkhU*ysjC0M?Oah$G)?Bvq&@ zm(TQqVa3IIE{E+2zgtms#y~)6EiX?u#W{f_T&-No%ORy=2gzhxyRq#KwxCSr==k9q zuC5#1oSfGla&`SMGeGIk78>egjfimNIPNqR9I~fPCficDXV;pYt5?7I3v7D0xNKd@ zCA&Pe+dR)jz{*g)zi8P^Dn!d+^rGf^GNN4S1s0H7iH$j(-ydW7bGx;P(F z9N2yiS>#uXq_%Q5*kdb@!ca5_EDEP6)&N{vAvZMCRb5+~gD8M#0BvByA%FnDfRvb7 zP(&FSQQ~_~9DqZIf~^by!WH}eQ3_YN@z#0>@$8BLJ!%%};{NgC!lFbJLO_440J#{O zP9ee090FrlJBpDJV(V_&!D0Qc0rZn{fgfPzcqux9(1qGvVUeDb5~c8Gt~U-m1^}Mg z^3n2N=CW>J=L*SES67{Q|324^hu?732(>%J zc@!o8n0hdjQ`8JfO!OTGLok>}0btv<_g^exk;5ViB8b@rAnVq=y(lWmV>YVunjbiU%-@c8@;^I7~s;V+rf9eQFe=g`^Y%>l31S%mxVYXNb;s4mV zVd2}AmX#HawSrJ+rE*uOG?<63O)3L+tJ_)VK!0S6_zM<4KL zsKY z(SK*C^zyP_nVlUivP&Ny`^`@T02pgDhM0NxmXXgSd;5=mg~6;__tvxKV~NuZ4Q7gs zm1SXu9_Ia^d3?Owf`t;czqu@ToBDUU3jT^MB{gUgERf5$J3bK?fPZEmiEYEKEaw8} z@!JMWdS+B3L@_Br@lXr^{ZWPkkX$=Jk~4wd0Qhc`p-=X2;0zH0=|AHl2-KIq{`xaq zBD;kpts(l~f{%`VbJG+&0Igc1; z`XjoGyz|cMKL_>i4M1=OzG*N9m;m660)W}zJ$VfZ6DU^X<;C~GKW*Zr(RfE8KS1F_ zZwN?5--Bj;Yu7G+hM%cJya&7ViApmle!p;e&?x_}5fSfOPEPjxh!DJjl#5Oo0v7p|#P9=|I(mN3=9Nz2hZ?eyl&|NXDH z_8`E5MJm57b(Ll{6`7*Q#rZ?`?b}7Ud(Pd)vUk^}xv6^J@%ENt%E^u%#|8jZ!Fc1_Z}+LUTkPflMQJMIe(O7@#mF(0W9oU^1Uy zF~@X5msTxVJr;ycBzHw1wQD++6cjTj3IDBm{+wyh+te0-T18OcRO?sRl2 z9tF)#PNHBkvT8YuQYeQ20HPiqY5)N30095AdH(bLS1ow}08B6) zq+l}t85#e;oBIF&+FM)JR#wYyNVG68o?bCDCkdT0CNwAr!~g)4A{nZLVXqZcUWoP+N zGAw2@EHfNt<{-oSzd`yh?MWr2wPauDyRfQera$$}bhTxbSz2ll*REZ^{?)(SxPh^y zC2JmnASAR_|3Pbv1wpOAaaye^L969BHG(jdvIu7^x`Z((iWvwh!hf$9{0hZPfs|S^ z!Vo!;rkv+F6hahR34&$?LGUG<6KMfSjDc1N2=?}72=?~o6c957IHuzG()9N2B!TGi zAPGfC*`xpprGzLHoXGQHLkcKdq(d|(0N4T+D#dwGKzO18QOXEzQs59lAY~z71O(7P z5XWJN@FoRt2f-gi5Fk(pB(4Y~k1;6&qDes*e*AcL20<7iJc=N|2F}hp9Z02YQh+ch zIvvhY){bKgO3QJy?hrztu$mPp;>i=+=7d8C!5B7TOpoAPh$xyN*w}b6zu?8jMoF;D zClj<2t!=y4OOm&5JK7G>q3c=mQ1b0gUBp-%IaWWYWx3=OK8yb((6iLT1#wHWSAjYba;K5>o2PFZ* zQNB_Rhd3rIm(m#5l@dxE@z$1 z4voRpp`?@&giRHdNZt`oG|RyA2>+vp2IJbelU!n@u5{n6;;1Ols$qiVrX ztw1T;Mnf|OCHyUclJ57Dq`1^tLA!mgLVy#f<<0Xf!)JDv_@0%USGH7N2$+jhu{RB?DOb1YZ2P* sZw}tQd-?Jw;?=A7?+*@c-LjhDAN#LO_fWPUuK)l507*qoM6N<$g0}6KYat@t)=Knu!>zc;w08V;n?L!~HhD}jNt|D0l|M-^7X6^~k8~wraFfyC< z6I9KKJn#OH=NPFT3&vyD^$Xn0SQv6%6P%~1)?L>$h3~rK@qNJ?O}i~1_1pOV^P8?? zOzSXIs;;HvT%TY>M-)Xh8;|cj|FNKYyC>+nD6$I9qbN-old?O55Z;KRGnBw_{@FDR zCPKi@R25^ifE8YJGjN>i3g@`%BLKGrRaF!a6ou9~!C0PG6<&}Zj|gG68%|IWcCnzq zR<;rl5mr=HLkfxliwK33_OsngQd$iZ!wQhVH04|p{4ebHG(~8`3c60~x>f`v=^4l{ zR@YiL&Ho`t5@YH*3~lP948yuMCP^UZx}gP}8}s?O-x~voAn0adzyJI+hV$VB)2Ww3 zkQ3NOS;jeZ_C3q6v2YE7+?!4>1w8LB$oX}_;lNl*XdOlW9V94G>a@l+#tw&J1OZKa zdP2l)`~3X=zFM{IVj+mdqHR~J_xI=LwnaEkPb3b$Uf@ytj3Ukv1a4^C^_np(A!F;c z9YFvn_tg5luNO=r2wq=>2*WgmMkyi6ab5U{2}%vqKsS*BE3 zZnwrjV9a(~mP*+xb&W=IZ50ByzrYPhaDhu9NQp=h`^!s~39;FHd&(DOGChEVF_`MrL_r2xway9?&3cvI+R9(Xv{=XcJT8O|I= zL`btZ9%7w7HTmYduRQ+y$?5EYR05cunVJ|oIC`MV?}}0hfD5lLjMSuvh> z+4FPzORp^}`N@g-$}hB~wi*F0#9kF?0slIYjYv{9tyB|;GS~&e zBffXMz`ToR3%h38t^+*b6>Y51NgPaTSSg#;R|?SEN5BBaf*S+cvQio~sgqTuepplX zQeCNU=htfUZ3lpRJT$RF)@1=D8*WxtHQU`ZE6t37(HfCdSc#M0Dv9}GL+Q(>{$9O< zmR@bQXFz#&%Ab01ve(86zRmpC_N}>RM#CwMI8j)OlZADuzN)C?LiMl8t=EYX+(&Hz zpg7r`Be2j#8ad|xDZ!L#BrT;xbu(VCM9Ft+iN0iX?VFbuHY(Vrwg=D!(GA#6Y-)5m z0~1@U)*`i9kA7T^)TMeHe|_rS(p_xRjsgJALUOJnswP<4#GPfBFIVdF^6cGvzixk> z?N|WJ%k+UDDzbj&&h0#};|2AR|WD3>42aYj8! zJy}fUud#hHriWbDYs$CG}D&uf(#kW8_#as^9-JxGi^rZ`?Np@;}X5ZK$PH6@J$K zc+WX=?z#7llQY^lQaOWx6AEcxl29a=6w(lbVgx3UKQu_BvHTH6OcvIkG71XGpunU* zmE@nq2>p>@BEy(7lOHo`&dmLqJNMrAyl3yd@~*Wuhe3#lzBatCeW`sa+4k(#Xs9-P|;li`;!lC6uh!*t|4aUovoAI9)vAawu}P#BnWK-)4ViC4!h{*>DCn+eLVAGmwv=>L>} z+rBZk2ShhCeYdY^=*lKi><7mKuQ3^2*^rCH)gbBUOTgtpIBMSKRx;S*+(CLn9u%KJYfI5)Xe+&>%61S4TkY! z&STi?6TAa9`=&>5U^qu0hFp#a!2@8Hc_@G-JUAH9Pab<{_2hqqfLp$_b>7X=&FA&Ee!kapmxl;6 zeX?j8Knp1mB>F^p%lUe*N)Jd~0W**%EDCTN9&MT+Fr!^(u+3#6@FwU4xxcznu(*)1 zvRJUT${4qd{?PAf1~}Ls(jA{YF#o-l+z%eUZ*k?{k^(n>Wqxa~k6VLxx5XY^5*reE z69FM8IPVED0A-@l+nj^Mh>d!HCny<(!K_N?THQP6&4?!SPwmF(6YHSeucEib!`n+- zAQ4~N1b>FHbgE!=wIC;mj|@f*Gjk5jfDn3wl0_ZQcbN}9c<<8B{$&O1zmo=onb}(g zLw8pb-8-FEiIW3d1i&iYk~PvP=~y0Rpd^L^L?MuSEWnH8@n+--+6~6qa>4Q&3A^VU zUVp8{i$_{)-w`p|=HLfP!p0h7?JT2h)igsx7;SZ!nJ0|qJ(?{9A2ldl2c(F1`;H#E z_1>-fH#XAUKfiDF&_7K85z&oz&E7N^&VRYTg)Vm%!C5_%#3XL9s)^J zz1PEnSiOK4xnoSm1>+6Isbd9;N5{KOWq!9r*v5+)L84D*JE`HBG+;HQK_`ucIVCmGW z`0@RZ!^K%#df9t%&Bs3}&cEZ*XMx{7ilZ++hHX10nA=7e3<=I_In9}nvw3S#plUHn z031Mt;2SyPM+^85H{CV5;}`d@K2iz54Y$u++aHa-8zSu$!wNNL0VYOD(|mW{@;fVN zE_wl)^8`|mw~xN|tM9LV z-9LN!{)4fhABM*5@ImvJp!FG~CCbX0=6p8iP6|AC&_)_@Yi5iVeMi#6BExWSE~6_) zadP3$IR5G(9Dn5)mX{ZBdUYMXm#}>12wwi%AF;6Z1j5WA%*Y$~>M*c|%EBftCRMYQjWGvnB!#s_mzHn6a$b1icQ(juQzRe(N=QQvbk z?Y%plE*Q5HwCf2eJ9J|&r7<>)&=lFX>3hVu3EaU&0(qbmlJqDw5LAf; z$Qy8rK1d_aS^J#zd6K|#8yK|4jHVO@Ws|dkX4VJ_cBgVqlM386G^veSF-oiTkTfb# z;F*9JDlwuW0TMv)g9g1`)QDxSht|nZLxrhNj$BB<6^RUV3~g*_TMdw_awh`b<`^Mj z5ZDMsj6~!itW-cA+Hz%%2&J$|$Vwt9DQt_w$gxco00F`4`ecNZqy#ZYiSP=}TM89Z zVI?9PAeh6;kV(9xJ|k!OUkNb+;G_~sPbP0x6-WzNa+Tn`vCjsO2n?3Rb2gJnn%6b@ zK^9X|e6WKS)~L&#hFA#Eg@d_wNv4)6Qz8RS5?RL7*(V9w45acTc`xZum`x=-b$<&a z)%1{@AduJZBH3i)_gvK+AYh;eu*uLKFtB#WWKrc>+GMPA$k|S|aj`T4Rls`R)~=Of zx+jypSEJ7Mxk_3tIe1DsuFvW@vyDMAR<-K>Hr5m>HkTP~;LOMXT-J@rvF4EjyhSf1 z)@U<}^a9o2=&X{r$Pi6`1WD&fBumVw{KykF)k!FgC|O&9xKf>*WqvMf&TsBsbPYD5 zWJw4x83Sf=3^->*W|5SpfvzJhNIj=&XgrNLrjzU!TOCi!98~HaDk*1#S?#wHr6jQ< za4n58SKqgEF-25=;i(dZ1c|(To~owEom!fWq@*cPl~FqAp0X|hUiYn7{3Vyi13uEg z2deU{Zf%n+??uvd&dV^oz!U(P6I0NGam~Z2{NK{l)hpo|^_mJPDN9^cQHddoswmU? zVx~f-25VgX)S0&tRYkOc+*EG0k=I4ZfEh@eVm z+6CB-Gt=GDI!%q;-a$|X0mo)Unh*#W;3VX7a?XFwf8Tqr%dA?pt4>u?sk9SFW$f8+ zz4=!Cd;dw^cYSN^Z+$rt&N=uO3<>`%{C@*Zx@76{*M8)Tk6-oi3qF3sXD|NLji0^b z^H<;arnT_@HX``vp;E4XcI8O*%BA%($1NYB6qots6T9~SxBbo=aLSujzGdZ#kt@fm z2~t?BG7OKDs8rNhztc-#{NnL}<1bn9q2aOW*H`#ikEO&qi!lbI!${Nkon8XfvHB-e z65p5%RY`>SVoCyE}iUGr&2wH#3&0UXRI6hduosJz;Q>WY1LlfiK?p zormH74&y=$tgSCUY1QDWb5{>7KWq8W^5c#<16qi`)W$qE*XXh1xf!*8&j7XkdTU;GjwtAG~$Hx#&dH3x%fB$W8 zcnBe?pIm$Wr!O6U!-uN1Y9+55#E>E$j8N4G89`Z;s8V9b{^z%S=E1Mr{LRPz$KM@A z0}hYn7cD+N)ApO?iSoiFYerZ$I84-2U;dj<-}_-WGzP`s*jLuv`nRXV>n`Zj`o!Z2 zrG*LcnCFl}Rw7g)kwSsCB$=X~mH5+p|HGEg{_IP)9W#~S2+@-D}@|^Lc-9#TA>9L(F{XbK{@>tK()?UohQk;S!0gDMT$oR3(%nWLY7r396nD zjg_%u5wrC^pM1mhw|?-I?|%O=RSNIEXL@VY-}gG#%0IL3>4te>{|qy-cQqR(zJKLS zuUp3f*9YqF`PjOtb-&k~?IBQ5@=O#Ca8?9@LP~{56snw{1`_0OiFPIB6X$*8^P9$w z-*8Nw1tx#)dOPpgbCc?s%V&SnZ137P%YN6nAR37N=he4t{x?Dh39v{kTJzTS<{Rc{ z5d=#CLgF--z6-P(Z~}_}r4Xtxq7tDif}xSo!RyZbgPV@Y!_eftd+(05y{!3cvo$$6 z%^uwzi-y&gxBREef3WeqRj;^+i{2em9?@72a8BTIFnxpVIBd_eZ?QRGfbbAt1y+b) zL`(L#X!UE}cEW;H>yOFP;0r(A`@>ke_cfnu+2@~~Vpn^XXn>10p1kbAlURR4k3JTM z@wD1Av*;%1w!_SMwk*1@v8nYm=*%-Wgl8=n9A#CloV)O>i;mgj@Z^v7-kp@?pUyqs z;)Um@d2Zh{=?hfq3=E}c4~GS88*~e7%lfhPV}qWv;YyC48%FosC24I4Gi6z2#v1(AGZ4AzM3MhaDlNnT5 zK@8wX6~bT6U&o{YZinj+Y^;4zFRFg^g{S&VObbes$w&c<_Vfs8FN{U! zfYD$JFH(mYl!%%@Boe8>Xp3v+*rvqvTqTG<)-pf{F|ujFiEHaorGCcXCcV$hwRY{> zJ+Qws8w4vN47sNXCdj4*ZBTWKvkGe*Dhrz-vLjJd1!aqfB+gmvoJP$ETq?4a11mS4 zH-7f{1EtD36-8B{m}}_9ukYFQ(0wm9UVQ$j8nC*)?9|Om&-=g+UVrBs*N(1S7RN~m z>&#R>n?7B8&OTatQnr89pu_+`VSph*BDw;X3zP=uY4aSLN<>#7N*Y-KSr}lNIr&V^ z3b%aY9VdSN7t2N$RpY^!xF(1y5i$~VZKrYj=G*?^bB}!WmZ$db*!HrO!o`e7A6|FW zjn}Mx=a$i-k-@ZPv1OnnaS9|6Dp%O9VQS9|zj<&EGt*tlR6NRo5i!C;ArU2kOB`;{ z5l={xL4~YHtaIf1bF#fTu4U+t^%$HOq&8Y59+JcZ5z&AOCd4YDF3a?qt(kxS;8*|X ziw}MMj+Y?=g81@hPQKv_S1o<>HQA7(J))6=5waQ)QZ`Z`CB`~zUou!9VZ%U~XMeGa zUE8OT;3)w?9$t(keY#qM8D(X$!DkwQcQp%lat z;l-=L7*&o*r6Z}=M{n7D)9qVc^9O^sKJeAgz2pX5cfxzOTs5}&nodO{hZEFLf~Y85 zB0xpRSR#Bxf-DO}NnxC1#Ys!UyMFg%1BLVy^hv2KiCB65FvBZr;aL$yh*&@*i7Sd^ zq|DHo0T!J(#^htWX>L!6)0ikz*xZ2u=R`0?RT9L2pwr6v<2Qcv*55n+{HK4o{r%eIQ6r&Eiv}~q zi#2QCI7V%}LaxC$Knk2vkVFtmh!h4zWw^?T=dWeitH$ZJJM^0wp^oTSOy6QNhcgZ$ z5hkTSg!=P0ec}s4VrcXw$p9gQy5qz@`mk|~I!3TssKE#v|lfhajpfCVK*h!zo+ zhNwo!BxY>s7{A%IgHZ-q{hEb119@&yu|OJuaRL=Q6cDLEDFx1fHI|9>6X?vc@8SJK zkwPXC9ZT{^B9vz&AdYZl!*<03Ck2s7C?{oBoVgg2I!G*$wxAWlfN%f`WI^Q_32*`-EGE+| zTDO4KWQ+E$E;3dKseKd(6?{Wg9a2Cq%DHUA=BtDdUvbW*M`XZ;__$YB=BfjIX;7Ji zK1k=Vo>&2q!<7^=71#_!Vj&pdLP@JT2B)E)Wqv7)lemPuud!k8u;Kf%101~7? zMk)xyfwLkgbWSp{VFAzXc%E#!6tYc6ARr*NHta>($Kys{EP<-#-E!#U8#P^y(l7Q}R4>=MTcA;i1`#v#iRp)K`Ntu$U+u<3{m7|iQq zDVltr!__S=F^CGF2`1nKS~_H8A@NiKgu@z#&TTmU_8MJGYH%IMA|J~VWKN<4CUKZD zgo-c*n|NwKI)oD7TrgaF>MWcnsg6~d+CD?IRf9<5Bm_8%(u!c80qN9&Bi;jYr(K32 z$Krk?aV3e&1kS?rCgCBNIiAM_Z#3fl(TvAQ-P5l8`OntU6)?rp@eLjV8rnkl0-c zIU!I=VT{A|i){4-aE1F;7=jV0rPJ;Jkf#RQ0hGpC0n#91gNiL8(jlEg)@wyL6bXTG z2AhVy0j8IecQVKYMr%LLiE9z`!uLT%V8IH9b_Q$d9I*l0%(L553@I5JuuXx=AsTi# zBXB8D%(P1j1Bzd*r}pU4r9_0rVy3|=L9u^;k|7gZ@yavSVbW0bfdFS5Iy0D_#%5vG zLk*x)i?IgRci1TGLl9Z84k@5-d#}PSg!+93jK!IBhVw#b^`8w&UouyP2&tKBxix2Mi1WkX1)3Ck|@^X9w8STP7G?|CNVrRqCxIBm_>6x%0MzI6|IMB|9`_34GAw6g}+T<9}A~aVW z25AH?F{ntOfzCqipbOJ`rzuko*`RX+HBgB_ zl%QU(^Np#$zWvGRXMX;Y_5*|v3;u*p{_UBZ^|}u2U_kBx4hf#Z!x0rG2v6w=nl^j* zFQxBsMtT7kdNi1&Lo0kgG_G^QsF|Jc0>*EE+IKKmid1@d<*IF3&K@ zFNgk#o%syccRw1o!zOdIJ#sV@4U!-u#KKbWlu(#!fp{Wi@u`ChL?fj8Ev;=C{iY5Z z?9*dU-S?@^zx`K@UgPh*!z*9Ekdb8-;+jFnnv7{?*v%Az6024m z&*DW(NWB4%PCmlj`FA+Ib2{(iN-_*>nshue(qN?nEQAOmL>HoF;^c%?C$FMfuOecJ zDvrWY5`m=i-yi$I?brSNr?z-q`ODrF-jVHi7I(;w(%ABB<-1O0<0mYZ3N@Cp zjJ1`ujF%S>=?Gb_v3}$f`ukFTT)USqcV@Ygx3h>Pbg6oF>3isq4+a|uS@G5xIqEDgrRvWzyC z$bxeUAr(Y2^b%15w8dhW>NePN*0q1KdSvlG>}c$M?x_8!Y=lUw)Pi{Hkz>#vrs*(q z2Gi2$rbT5j)#?z-7Om#Bi_YhY`nz~@^cId6>yee1(Xk0e7W#!Tv6`hrtEnfWpcOjT z*bJN#7zEA}sc=eykT_3cL2FH&+Sq$Gz3Xa#qh>&k-K~%w#mol_3>J;)8uWgPnbYVw z106_IiTdy`OO`BW8re z9w!M|Kc{4>xTYZUAnfoUOOn`0w6e%JbdZp#MMMUKz!-}JbY`&qJhb6V&oUv$*Pg!c zvkUEx( zo@WX;Aog$`3IVyp&I)LQ(4ak<%!d0Kf&t)=IYbRW3QvnbhqWHr9IG99Pa>7T7Hu<| zYD{jxGe;wg7(QxC0N^3>i|^jg{oj297j70&f96s4~!K68LZ7SFo+Ky@ZG-*!I8f;Es=V;?CUd`CmMola-snv>pzS9x)LrP*MPJ09X%K zj1`iE68ndypZ?I?htKvJ8%N)O`IBSioXQ!OT-y8ncbv{E&Z#pnkz>fnnWHuPI8XlX z`}oX)#BGrbq4p z0#OJo_K*Myggc&zhd?wwntbfs{ptQ~FN*=fUmUyvx`Ur7K0o+70uG62OXd2nU*5a) zN}mPHGDDjdDLK}IdGYf`AOj-LQO3Bl@|Rn_*Zsk52mBolXTae_9xNb4S40jG=LxEa z@}M|BR&g9J{EwwuzIIOg>{A=e((()@(8FNS2UPPC6*$Z&KT`Mo%^l{>4+9;*0tN!? z0cHdP4kuUu96}Tn0uCW6D#oga(L9NZm=xo3@mz)Cekm?3xoPwxAG~7kTi3Vg(V|I* zHW|I5scJpId6Y;zE8LZQ=eys`{_a*_AJ7K+KnCRVX3QHA9bWvw!VeUE2u6jVcs>@w zp;Ry_1eXd{fO5f7ny2MY?Y-@uyNAEq*iyRYlvi{&)w0%LQCRiK$$|yi^P%|BsXNuT z?wRcGybl;Dghqu49SFz)2Lbl*b-;XTAGl8JyaBj^_JA~Yh1?R?JK?9}6=e z4&!-)l3&d}vFp9jM;}>LS$@K67N5CxnI0dOTByEAv+eG=sfT*M+PbGd^|;OLBrpdw z3ei0v1rGRe>;v|I-+tX6dPy8&-Af2i^9B{;gJX2SI6PZW&KraPY#}r)Ow|XZyeImQ z`#@p9OS1b5e}#CcrF3{B9Uu?BKVR(}A{*VoW6S~BdziPtQ9xmkI|{$=Z}n&Wi~sNQ Z{|6KiECfD=G8zB?002ovPDHLkV1hXMSrz~Q literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/green_apple.png b/app/assets/images/emoji/green_apple.png new file mode 100755 index 0000000000000000000000000000000000000000..337205cd125385e16d1b67fe21e2568f207e3de8 GIT binary patch literal 6205 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 be}4WKG-wU&Tu{-L00000NkvXXu0mjfh5Q~c literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/green_book.png b/app/assets/images/emoji/green_book.png new file mode 100755 index 0000000000000000000000000000000000000000..e86651e5c5c372afaad34b4ba16f84be46acc9fc GIT binary patch literal 5090 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 Ef*Ns+Z~y=R literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/green_heart.png b/app/assets/images/emoji/green_heart.png new file mode 100755 index 0000000000000000000000000000000000000000..7289cb8147c75c638ef01ce52fd777b166e2f661 GIT binary patch literal 4432 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 LNkvXXu0mjfgVFxK literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/guardsman.png b/app/assets/images/emoji/guardsman.png new file mode 100755 index 0000000000000000000000000000000000000000..b67b335d68744d99bc23bb6b69b74f455e40987c GIT binary patch literal 3587 zcmV+e4*cS8u+pYTO|>bPW~-&4fCf=O ziHL}pugq|6m?Pc2@|@?4GZkJPUE8sreXj3^-;V<}swj=D)eR(1Ny1TrEMZFUlJy(N*BJg1^()Mom0LhQ`D5S$_>{!D-L8=} z8Q~RTbBTER@#KkWu~>LmpUvNcJi*u#O#d3~uTX!zO9hbpDTurP1|-(&_3nxG`+dUt zOj0TLZ4_EUQUO-tY0qY}YCfM6)pRC$Wm+1Qw?dx1l%>&4P2=TpLi7O@&aY9owVr^-&d2qd>d@`94pN7T{gLz&4c>PCA}= ztP@;=#Qa)*J*#`mGTFDi)+mqZ0?$F@&~MBKJih^&F(vvHahVEP{4>KI2)Ygxc8K}U zG4$I~1#rRhwdCSSVt|V5o?I#hs5!~8-a0H^*q*2al=B<~G#TW-S<94ZrcNu8jd`8z z6j}AR)LJA(b5e{WCzOFcOWDb)E|Q@C>CmuLR{5Q3MCJRs?={Q$e0O9+R%8xEeg_A>x z0zMC#4G)(Aj9DP|`^_ph$PJ8aD-IXi2En5TzP-hETi{dv&$^5azP@3vMB&YS9;v?694}SMRqpk)@=6i8k-p96W8JsKK6n3BI9_dK02G(0oH+833=k#P z*9s_7g1!aP|6>r$cL7bd)&GH2i3@PDzP;&FOSRQJqOHHx_km&;Ft)Wm`7{atal-2P zK~Tp8qU~Tjhav@(W`>vo0oHS0g(XDUi2_Ja`aEQO1@@OBm8&x{LmJxb%VU5}i8_Gs zM~-YCCooT0L~aUPmRP_tHv>cq@c!=G22n~ZU?&Qg0|TZmO0nUrJ3vcGU8Lli zE-(*^sV_7!MG144X0Kdjo9pnr!~$j+(VygV(wz!|#MS|jGIA(Uz*P7>CE@*?^_U9v z{|(5$636i>El+o80TLu0;|FBUokHCjmDxw@DzbnZu|Y*T-VaiyuhVOJCSc!9i30w} zjo2*eTVUH4X7np1tAHpulqldAMcn87c;cR@_1!JkF#`VqpG1G#D41fXC~hEF3tesEi~*W<Ow}F-malkR)FwpdOQf&ti0EDBJ+_P#G z3+B$^?Z>~1Q#6qssHlQ|g8o2MqM(UT`%olF^HUOQww(;TmwMZU6H~si|YG=*|;7DgT{d@mFQ(X`( z5Jr*|0N@{Y0*8X0rnM(e-Qqi#RbLChskVJ=d+rgi4VM349aEdH1K^Xb8;R|HpN;Re z@$rG9=jBP#c?aC@jxS&6k=Q0+l@Q{KvLrEglHmH8aOD+c+;q)C;_*YgyYc5#HQmCj zB{#6f1%L&d>>Z@H;}B-we&$sB@o7OMB-GIi5D3SC^DjFI#{x|YF}Jcv`;Ol-)V+YZ z8I9C7Hgn%A9|JG~>}hEsx&O~J1TxIKW)Yg%%i;>yc3g0%Pr?xbpv16gOe#fP1*0-N zb;IR6P+jhok_A6=qG{$Yxt-;UuSCx#7|aw%d#h2Rwa6Y1MmCAh%24GOR99Bv@r6KE zMxXz*p2Md|cvJ-d%d#iyKR z^1+_H9NhgDpC%$ieFcWnMczHi2FKwiLWtCuoC=o&xlULMe8Y`YRP}~&M4A(Q{Wy|_ z7ObE?WP@#EN--o`MTz+Ey4Mwt4+j}XSOk13``X&+=#J4eYbv3D20&IXu>WX`nNz0H zJZC0)-a++h)J>{pl2ydebJ&F>LUQm_2#~4}k~DhnSl?+J0g5M#EE@OHVJ87P~09CP3JRUSf1&s&gcW4*cWIF*5 z%r5KYL`tHiN8SofV$3T=g%Gw+l74xxzwFMur3YtEut*PQ*t`4pAgL^!KOfsPkOhF` zjsl^8kDbJ@EdacVhq==yvv^L!=zjzbI5xs|;f@G*v@9IU zL^u|TWx<;gWWY%orz?O&VYIK|nJXURyhi$FETyEZ|7s_k*fcQZsoa zv+C=Su&Ejs=GKST^QV@7|A;=h`bHjK{S}5%I-qbgc9Q;{H?ays=sGAsDyL!T1wQJD zqUY6?{-L4e9SM;ExFi_>P`Y6lm$`991B=GjFeg;byl|AOC)V-R#@Rf7|7|>Y$1;w^5-v{{t^ptCdHBDNOt9U<1b+boX6!8{ZoT}{~rVXz`TI3$ckBU z_9p774ClCd${9v1nW}OJ3ooIHZ*o~(1Ez6`yrB}*YLR5n^*-E8LMXMaqdG7~UdJO9 ziKk?Os>9A$6@!@&i>gktwY`#@p`q)!L%Do@#gWtb*jO}8T@V^-q{^B|)dsKTzoSfx zbKMjjpC2?0d|uepGKuRO2bfk3w(wCA$>UKWo@+(`<3sx}EJ%%LD8l6Apy0iO)qHDl zKZXJM0vIknj0H&NE8Thit-kco1IPMA{E~K!{ilkutENRBLGeDJ`Rp>yqZ0HRth!>D zmZ2J^R;0OVMwVO=*1a=@%c`@iS)M=wUfy0oXJ44dR&*26VE6GLU5O}*C-kzVHNuFl zQ8Z2RMKyz6d~#=3x>Nw|Fa|W{jgt!}hZ{A&_E<$Ec&8+L6wN!xHIqk>REgFBAGgmd zkTt^iHH(T+9%LBK`pM-zl=(8ec|fCiVi9b?$K7EH#qkKovXklD8-;w~sg_eCZHysZ zw9e6`)6156J=%RjQf?Iz;{uuopC^c_q_})S63q*(Jy8VET$jSKplzT6(~eR!bo7FO zBuGfYeA_UMjXOFsJGcmR(OYMi%m~z~a$uR)BQ5iLee)cY`dq;ZD~c>dLp}h8vqdc1 z5kXBEk#SBI4D*m>+S`kczI|7R-pfU#&wcN(%;%i`?*KmM^f#6R)5C1_Z?*sc002ov JPDHLkV1haN$m#$9 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/guitar.png b/app/assets/images/emoji/guitar.png new file mode 100755 index 0000000000000000000000000000000000000000..2b7fa43c941d33a524665cbff0cd178be13b8680 GIT binary patch literal 4382 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 Y3q9#Isf+;NNdN!<07*qoM6N<$f<;kV)&Kwi literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/gun.png b/app/assets/images/emoji/gun.png new file mode 100755 index 0000000000000000000000000000000000000000..c49dc52c6cbfea3614046401144b5e7cf5601aeb GIT binary patch literal 3161 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/hammer.png b/app/assets/images/emoji/hammer.png new file mode 100755 index 0000000000000000000000000000000000000000..482b1c747d1a515e09863a24f34d7451b7ebf852 GIT binary patch literal 3670 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/hamster.png b/app/assets/images/emoji/hamster.png new file mode 100755 index 0000000000000000000000000000000000000000..addfd2e6b03d1742832fecc47990ec2da4374c34 GIT binary patch literal 7221 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 Dgj9># literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/hand.png b/app/assets/images/emoji/hand.png new file mode 100755 index 0000000000000000000000000000000000000000..5e45c25a56c6148a8122fb762179efbbf3cd2c62 GIT binary patch literal 4161 zcmV-H5Weq;P)45Ab;tkb+JVKEX4nJmV3`3Ng{%uW@B6}dk4Tf0Nw%cp?6X6oA2BHwZH!S2jy$O z_bc+ppSZhu|KZKQ_EQ63usnMA_MJO^Y5$Qsu>1Cdc=wUpgVB+pFMjOS;lBTO06uqk z)85}Wyz#D2?pxD~)UuiI_KjnkP+nU?zTAWU4TIRYX{0~Lv=ga)e9u_v3wK_Bvwz>U z2!LAlz|Y+HM>p=h>8V=}9s1_*#x0NCf7|G004SDvw�`P=)~lOrWv&y)kAB0DR`w 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 LNkvXXu0mjf!pO0h literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/handbag.png b/app/assets/images/emoji/handbag.png new file mode 100755 index 0000000000000000000000000000000000000000..d7adf04ddf2238ae16955df83d1d42819477e6eb GIT binary patch literal 5449 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/hankey.png b/app/assets/images/emoji/hankey.png new file mode 100755 index 0000000000000000000000000000000000000000..73a4dc840085c7f42c7464d827751348b58acfba GIT binary patch literal 4754 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 KMNUMnLSTZLWm7Ex literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/headphones.png b/app/assets/images/emoji/headphones.png new file mode 100755 index 0000000000000000000000000000000000000000..ad83000e687632a3da46502187b0b72a675a56d5 GIT binary patch literal 1910 zcmV-+2Z{KJP)kFsA%E`O;fB9#9F9JO>L7>3&O%u1X;Ggwq2H;e|P8JbG$jZnaO0`VV2!) zzw~+XPEPiIc%Jt??|o0sUeSECu&4?j8+fp5!z1_pbj7~auYSI7<*TcHxVD}tg6L~W z-<8^u{Bl#>jl?)XfQ`>ply+DC=Fo?3;DPlm+uW`imXgAuj-y;6K|q!?Nlta_J^dkW z!TlXyf4%$pTe?2Ua^}*?OlC2kIvQxAg}N|W{zTP~$E=HTMCMd&;7i|_ck0$MZ5HDh+J>$->>;bTFTJTxKD+i886MJn^{Pdsbl1HA_(aKps=u07|7q;l>zbvz5lumti8W0 z)&~4uZl% zB4Y&{22tm#m$xbzusUl=Mq&kglWT!2c>+>c(Q)LGLj%efaCr}XY$6q~#~(!Y>>6we zSYYHw$uh_V`a`~p!Y9jU$P7BN=VNmj)l z$2kO_9QiQBSn!O=0ldRR&`6adS8C-b$+57?GqfI=CG3&D=x0{p&b%>#uOe004AaPI(myU27#|W)gdI3QAv5MI5EG`u@wj@C2>bW0d4{b)wEtNIk1HfOarIw& zC_=D9mO~n7r;$NU)G46|1)x=ApnS?JFu!?nqfoT)?3z~fEzKa9mo<&Y00SGT09nSa z0`p)NfQ4XZEdL+5)alV4f5FQKo44}}J zDo}pfDb(1K(f1AyQvs0x5|964HuE{k`;2gvVRE?S(FE3b28?WJr3@zuO@ws`^1MbP zmyChX0$D)8(6|N^AjSMmOjuqMU{DJM_Ok#OVK|H|%8YmpR@j2*4Jb0W4g(Qh&ST^A zCJs6})P(|t-FoPnZvjSH8%`7o1N1rB#t&i$UbLMWjo+gmg^E2;{wqufIZX-rY3cQz zi?tQECe3#JY!w$1Dcgi=LFV!x%c$dn_>p)Elv&ur9$7#aEu=ZAk77`<0)mAUFJ2Z7 zl_7iTH+ORb!}O8fYQLBw zOE2dQ`@)DOho&mX{~tsas;cJWZiftirkx?Km`OK84p7iHJ^v{k^idq)WqLUma)2vn z0#sTbX2NioIR2RRthmD^w4sW~MwpfgXszxT@iO=!gD8B|*Q&l57i5wZK))qP?@2b$ zWjCn2KE(mH>p`vwX~NT4+Y|KU41iW_4_P(jt2`mgTnUJ0lEZ?JE*h8y$f5S-_c4bY zz5FBfehTz-elL*T?&UvXHO(~A&06ZCu{}){kgdtCmH516rsgmOnz#&zHBA+8zmw!F zXBglD=jrDRgMdQkrpbU^=kQMs(QkO3vkU_Y4o#B*?~KPNZ}2)NImaMrlp)WJ=>d%f z6QG$YsBdQel0XH&7a@XcJRqK_8HHg13IGaCaEXWYzA>kvHqKP^ ztC>3J7ipHe`7CpAIK$!S$SOBLy&@>m)S;d!gzllI@?ms96HqWTM+!}pxUWc?S6=9!N(u3KXL>A1JI2MhQVTCu>b%707*qoM6N<$g0TK_=l}o! literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/hear_no_evil.png b/app/assets/images/emoji/hear_no_evil.png new file mode 100755 index 0000000000000000000000000000000000000000..f97a1f9a0901f16e373e349e32bcbaf7c6c659de GIT binary patch literal 6550 zcmV;H8ENK;P)gf)u=D!4?AB!&W_C|2PSj|fG|Dl3r$ zQ))^PNhy)2RVfow-XSVwA#x+Ez;f(0vpX|8=kY(jtH1pEb$|1pnPn=AMoUY3_tkty z_v?P|{oc|2{Y9Fl^!wZ_`aN%dP{1D)@cZ5Vpa6${Lrn-_U2t~)W{c!DOITYi%kHr( zQ6e-c(*-G$ahb}eWMKW`2agOti|i!nH_(3VY4E~x22OP?Yme)Q3q9A~;W(ntu`IGJ zLBjNrX{wY!5h#w6kswST4ddkdGN5mN|KTG~|4u4k_gQ_rJkPy0?^}EFzEksEi(JPd zB|QF<$fP&ZCmIQqBq@clq##VF*@|bHVe;)(oP74K`$q2holwB;9laafl7B-f@4l^+ zcU<4IA-I6xf^4=tyMu8Hql2`Kg2eodK~W^B6-uf%;%L4VeWlR||Mtg^jvn}JjRAmr z|Jy5_`A<}fUSB>3!EIx8dx`K2{pAQq3B-acMGz&71W7LXdKjPcEH~G*|6<*cfq)#7MG6gh7uPvkKljZ$ zJo9kxGYQIpd>-SF@1igIRZ1?cspa}QD*l(D=$qA?zcB^evUgYKYVUUJ=q+xj4&K>S z_TS%8@~FVVX+eF@VuFzRuZw#h!ojMZdS~uE5G%;nO7dJqKo5wO#w@?d!JtVZr6aw_YV$yrK{{+0;?Nq zvd=U0ZCeQe_zU8wZz)pP7aICmlPS9ZKax^XVyQ8bgJqHk!Vo6HGhsQnW;ePN4;-xF zE%zKro3x^>|I6K%-G1F0KJO&*(^q`V~*1qigS{q1YHe&7J6&HW`&%mopQ>GD%2g}Z-?VqT z_ks{`=ZE&b$@9HJW2QmDLPMpgj_1aQ@7T1i;!W2hD?i&frBZOP5F@+`0a#d@9GA2} zmKMZf6cFIAuC*oG&A@*#{Ru`&LXu)qN=eZ@)hNNWb{RunN~MBJaUyS~&ceGl6?_8KDk?h9}M_mU)x$u2^J`8+j_jtaL>*xu1s zqNg7}g2>Df-dNZOZ(CY;OI<@~TUUGzNGK9E2|N?2XbZ34E|q`@L!bRzJ3L8VA>Jjb zqeUqt=*P&=3d40CN@)3xGu}$JY&x}%?D^JEeqrjBNfeRY*-44*Qrc_~+0F-80Vm@E zpL)mnHCW)y`D%rF)^$*|Bd=V5ynK#ErvqxV0@i#6S;uL^)VA7r-?cQnEx3^7xF845 zag8yC_+F^@mdpKYMot?+mN3E7)`~?Jj4{f!wc<<24h!{wj!n0yRI8HXAq`hc)Ug)p zU*AQ3xrn~vMYmshN%^D{aR0N1Z}WXG=NEmlVHF!D@FBbt<>}y&NhAajAnM;EB% zR48cHX=?a5O&l3zAsxq~AdarP>HPDZRTZ#TRacJp(Y2i&WJ3YX*#)9vk>fzC71L~E zp3|GFp=tytwvf&6r!38xMcTw2gp~;i5==x)=H4hLOZeQ6`DtF7AHT9dBBRVb7zMhp zdS+r6)^{kVN0j&lN^&J?OwEy3%poB9LzBZlvR73=fB(SQK`PEDmkT^m3IQs$638dV z_b8PCH0^5GTWx_ep^1gj?}UB;CiBR1q6 zmLmxxWV0N#!g%MZ3c#RKBS{>DWD0daivTW2wG_-_V_iYKPPTR%j#*AmWCFB+5eWa$ zxWf`bX_;_>mRa1)mYV8NQDXjb$;k6AcLTE)o4DwbNx;#3)3NG%;aiA(T<7DUryDa5wb_nT)-T$ z;=;;l9|%d+8UKMWD6vrKB(G40F!{Dyup%XeL6fE@#_8y>V>CV6WL`3D2gjV_(ENN0 zbA`$%Y&ed^jt4iGC8hpV6%fR7vbVQNv8n()ml?`fQWD3|J_wfdNn{4(1$D3OqQOl= z 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/heart_decoration.png b/app/assets/images/emoji/heart_decoration.png new file mode 100755 index 0000000000000000000000000000000000000000..b8be44db343839258d488353c30890df963d169b GIT binary patch literal 3507 zcmV;k4NUThP)nMOt2kZAqlU9M9QOt08JW7LO_(3DyftzBn=fv z0R;u6X_H1mszV8gKpIMbs1|G)Voe?&2J)E$|d*ZMlR%J+h`p$gB?nuNyZRAPy- zmQqoQow12F$2QvV?cpD82IPbV@b^u(d@AkL-O=bZTv+SZ`6->kS3aJ2C={m>K`_b? zOHAJ8$;Bh_pc#5;%#3{dTm26`J*xojthsf*p9=qVVPe52n-cS=^Xf^NB#GE3&;edL zKnEJ-DNY4q1RGh*SVUwaN`6eXv(LyGwC)3hE z)0Y-ebA1yk(2y6TFGg|(i3AMqEFP#pp=v$UJRedDi7cZ}_S66U4u*S&7!D58Tk2(B ze$U?SxbKR88u($yOgca{dkyOrCzmd73tPz)Gh|n{(6Vj?y3xlxH-_1qNBS&80@W;kNGQ~iLMt4aQ-j5U6{I9EUX7aIFX~at0(x)Q zMgO*54*3J@%kO2+=$;$y8GPW!6$7}9+k$iE&)c*zefIfniG^enjV$=d+0bh#K01V# z)G%Jc+(ZEdi#bx^=Nh0z)AO0_43q}xE_JbEZ2K$Q4)$HLj&;#dk3d`2zc3qQ&#(70 zqzfULTUwx?C_OTWuJsWgFv6TBq0riMdro|*naqtX6do9(K9M0CG@aj;9lVeMUN~w1 zp-Nm??`5dbDU#VVsrO|lJuw8KMwA6}8jW|Mc6(2KJVWx|)6|TOQSa50P~iumLI6oG zwI=PQNtl4}U1@A*ggqFcYBdO_7Xiq@2-^`6u1u47Ibhr^2;yO9F-2Rdg;IpFjo9v0?ze@{^wO&|0CD#ts@p2^daK6xacSMms0Zdd{(8 z03r&715>p4zC}bpm@!ICod?9u(qZyv3CEAM&ILeCI93cm2?{^}J7$oiAR;qLTKNhU z_-F#OXdDPuTda++B?DGKW;*40c%BFNXaNhL%AaLt{#jy#*0D* zp4rQR-se%5X&S${oP`%%gsu%K_6#xb!khFw^FIWS1uR{BIrUeaLF^ZilAYE;8efIv zHx97twHFv^=pp@)W@^^XC)GBOxKQHomM%Jf{u1G%8J3*&0qQPmEq_+k4sb3qUe2*f z0LVmHthH4;KqocydhCAYR}6oki&f8GP4ihRnZg=46|d*Q7uzvmCP{5RQ$mb3KQ zOOb35J8?F3sL{g-_CL{1cgtp$J^6mtTz3;50Y{@_V>{b!{V(SK+qo?Mvx_kGC2WNd zlu|esY}v1J0ALVT;1aX0n2riG9MbH1=9j3i`dohhS2z}}YtEzf)$@4y%a5?@yBk<> z^%baQ0YLTp?0kAX(amFg=%If=6HtvsmtM@G9T(Gn+k@=>!LM0%-DOB!1d(Mr*a;VK zZcwEI1VO|lh1l{juuMUNANh1Y{W{4zvz+_QKjnD1;Gb{ewfZO7bI&H0fA$j4u=nY9 z^w&c!x$pBF4;Qbyl`ZL?(*3>Pv*5;6#1ey@-T@ltGT|oGI=}$797JppYo~VrDxt|e z-%s&9Mc(tx>v%h?{>JsZy7Nf}pY22t?5AQbxbM$-JFNNcb-ePMC&;}pK=S={Zr@X| z7UzOs0Rz=Lz+w?)F_FQ_v;Z{doMLeATb%jE`5(IR&0g_7TqBfPYR%&G;<1`nU`{yH~1_#~JO znR8l6T~SYd#|VjY(o-&OB@-^{=pCS$gkW&zLIIJm14>Okjp1 z;vulP7?g4j&IPbIDhCiF*l9~?1%MriTSr=^S_Q=A~C`d@=0<(htBAU;TB5erH)r;u2Xf<;2-Fgbv!PSqZR zrW^ydT*#y%0mYs?g|`J5+G{Qo~M*lp9JIaB^E1!5kVoSX>nO&7Jo!M*ojG zQ4QYoJtNbcK&lTy6O%y2MG~Ts5^vtVg}K76zub(84J4?zZ(#<13kbGq2bA%$9{tbu zkhps*OYT|4sbuHPuQ1ZyPogbVmaEzUf~^ujS%2alC_e_Lg9dLwg0AoF#*A5(|Kq!P zr!gaj9bb5npV2Uu{yxIML7mnild`E@LB_U*6kv?UI=wlZ?bwe5^M@GG!eX3cRKO zFS2wzyqkm1c5&9d=ds|1WxO4_9@@jMJ2zuX)}3`cuvm_RDK7R{lb~3GyZy!D3gy;u z<3re*A|8u*{nkzN{ckt#{=p@vgl48}y}g~TNA{4I7ZNmtP8{L55hnSFILBE`f-^^y zpldW?GD*)<`xx0ez?%QKlA2|;R3qvy^71vmaz`m#m_~WZ$sZThC&6k*KmeK2IZ2jr0j!pgQ}yjs&EO;9>Kk-iHA$H zU%P=zH-4Pd;#vUAsG%8ihVD%#q5l2=g{~J+rf^i`f59MjUZUa}m zbPWLQ*RN-E|6!5~(ufErlCrv6Vkr@oDh5!LLT@Y)h8SBO98sKTf~F+HTL;+lFK^)0 z`t&{5>AJy+ZLuR{I<50L5uTdHjuu88c(_M~B#%-?{P0k@epJ`hmE@C`@6zHs!Y5Rp-_IC{X?x z&`e4v@pXX0t+_7mDz*`MTVOEiXMb^D=eSeZ51>*20t{@A_l5Pj+S?WSff%!>(a(}5 zjk^<+p0gp8Z~Ryy_nRM#2iRZO-|@TLmfMdw^#B9Y&T>VQg+R@@$rWvvq*mX(BwTuB zqu)r{t0AF6eC^|6P>Q*LOpNWZjVVcyF*C|wJUITFe{NI$wR_$u?Cu6efi8fV1mFXU zfB@hVwU>TmSz^hp^AgRgYrQ%`mB3RTY7TURAQO)|L($##BlMLHz4m5l|AWuwHvR$! z5zqm|GYr5H0&V3G0R7>bi`F)I%@@{tHD{-Fa=xcLA5L8ef&flF9>;&bjB@zOTOB&|HM((efO5N{Avv0+~3V5iu&DNpzC&F&W3qXp9-D zRLwBfm~k8@&J;649s)6nL=>F?MN1+gLPH1$jSbyA`*pkT`@HvF>zlLctg2I7x|=2= zN>#GE|Fv%2y&m81zrMBhx$B%Gs>(m)%kU5S`bPu)(SYRT2KXZpbLEw6Oq5eFoFu}r z0_%;HF_bC*Ld!c{RM@S`6L=megokgqf$dkTdS1rsW!VHpM4r5gvsJh>wOnLUInk!3 zYDxxE62u5t0T{|D>J{G$^0?f$e6Ek?j&F(b^`o!nURBjsv;p^DD%Hs`-fk?vRVtfb zv=w7a)nc*$u88r7)xHE|l>w@#3lh{Dd{6LQk8e3#+xuR}|G+!`bZ(I^pYe5Vy`uJj z?_D6tQ}34FShrSwR2{W{HnKi@eYPPp+2IM%q+&*69BUZ@l5hBl!sp^wm4=ri;k#t37DF<%iGu=NT#yPR@Oxn|#(tVu{lEs{A* zIUyOF!K^*^|2q>TqiWb_LM;lMz_uP-){kIg0&*D1;+O-tR zj$)~x({SJEpBmW$>^-J&b*1`V8qK~K!ktbQVyG#;Ku5j84k`FXB5{p;*{ zDJCQ@6@F@hTgsE^S=rhQTZd$PoaBUeV%EJLG)Iah5IGpwOP5CPiY{1-J@yKuek8Kx zi-=jkm@*{Y^9}he{TSaOB8O~3a;WgPUCekN{)+)VTOZ(sbbONJr1v7@Cm?PKkkxDZ zr*jQa5Cv#qrq3o#>&PS5ft@3>8NgXnHhBc8~DtNnINiqQ24tq=ZvGq<-6q#<&o0bjARs&nb%=9TnH2(g77nhk3yplsz8F@ zaRjdgTHDW3B*~GuZLGW^^Qzj|O;K@2f1B+7wb<53YfTg6?PL6-We1md0$8 zb}MIMs*0_bpk2U=`5-_g!L9U|-`Ap2O{qW z6#l@OAW4W3)0zu06JpOsi%su5wz#Zsz+VvaX*KNX*_YQ&kk!lb-elBbMiOk;CW#?!0z0Q~R16-N|9g9&Y&PxB1eizYiwX-=9n` z)CqM%o6t7&5&8;!hQ2|=Sh2qCg&1NiF2pv7G0Q^CA$9^oUkFlCD=86>SB)r^HbbN$)*JO1)hcXRunKgf}pC)QH#`d<%n&(|M=QV}4YuTl~2g*u^bXcO9oK0;ri&(L=mV=z`J4`YWI zLM$Ps5L<{b#2R7_u@e{qOJD*lAO~9l2C(aD=F+rg!(j%tWRXNL^(xyRp5?#)!H-ye za)q*iLgD|6XT1KhWB6z9J08;&9{I`>oH|xzrkYSj$(^HBI5KPK=7t~L@;GN-v<{;l zbZEQp4DKCKGHfUt>LOGVOKL40go;T*-<);PG~O%U_-|YJ{>|IS7rG<@9S`5W;ZZ(t z&1>2Csw&!D39;j9snPGaZIu zpw|-e{=HDAZiO{z!bmBhoFu3SwMvO+`+eW`` z_vRo=g=%K0mQpH-C9#$oLcLOA-&0*`>e+Z$om4&Q9PK=(QFtojhR6CbK6Lj!&iSPj z)AoUZz!I3QK0`OY=MJ_+*8Lh_XX>1iWTs*=gGmIeKw@}qON+IsFj0b0D~y&BYJFu% zg0&WF42coa01r6l=sNJC^i;9VQ@Da7PBmD&1Dg48H7eNAG~8qNPYP^eNK+;2tDHh+ zC5*u+FkP_}UUA+J#wdh_RctRuoQ4=ftZ>mdSP2XSmcTSq_oo0`BP;vOfU$}>(Po0A zf>=X5!9^5CLQn~P30Wz~Fp?U|iJ=q*6F~q~r7(&YNK`QnoDkL{Ctf%Tg$I%6k6ie0 zj~(Bf#|an1__7>V#7%zC>}`^llZa#BhQLPT96}E_z#y9n)5O#l zF<=DRo|AuhjFC+vG&==O6cvv*iuM&th|<1Xkn!Z=St%UNdcv9SnMT^Z{U4Z!gnOY* zs2kdZwm1{?g8rXBcBm&BVhb^bSVPQUB7+^67uWzBk!5uT2$0%@v3PC|76i~-sbx8D z_~ff-Pn1|}7PQq-5P}TlKtBG<)dkVT(ewqoS8_JKV;zSbWuTFBpex)9bwb_HCbaG1 zVt>Q_3!XoAh$X}nVhb^bSVPPJ5tqOe*nsq)dw>zjVj{Q>Bmz3${9{AKV z?ELWxOvKdmf)}vHp@36Qx38wpnQiniCy#LY+t$EbBUSUn1vBqj%giQ4ceTL^!oe@Kz)I0?Q)SoX6YTlRy(Fp9Q^AO#aLUq(qfrt@ zFImHD-!aMLBT%WVJhBG28~qUIs13XQHujw^BMTN9XH0;>lnU+v6%-fx@no%>2G?dahu zhHkT(TIV&XpNu(+GoueTm0i1(YRcQ@@XU zuI^InIL6QF8~WZlhi$U3yNQ3S00jx)8naqu*oW7?Tx9VCwrI6J&j3|b5mA7po;-bc zuBg+2gIa(W)PMkJgpVeO0Y9H3OKlEYZ<+cJWgfrN;suU5t$=w4=^>mF`&Cn6fMq!5 zHI~jND;S02-jI?uJNT^*91y^j2>m<*;_n9xS}2+;fen<1tozG=;^}3-ZBx(Uo#MU6 zs6kMW7!-bJpjA`=6YuXWNSA~YUuOY@*#azxl@~X_#41BG1_mz|ocxOkAh5F?K)}S= z@Pa7dBsP@6z1ZF>fnmVXgTMy3)fqsP2Z|r;V*4A9^Bro)W=LNJg)0Ifepw3e;@<$ zFFe9?A32L{<*uHjMNA(`^K!$9T z6jH!N`(;%YL`8ywyC4d>3RHkJ(sdPj0J5JIcubc3v+MeKZgUtkF)ohv=gn>P~VRk{;utAtut56b103TuekR1`wgJgh2 z*+>>Zny_c5FuNBv&Iq-tfFCZCP>KlZ0SCTNwCizg&-{}9I4}V%z#r^T)C2A1oc4n| z^%iaT;9y)epdJv3e`yX%ERex}xmNk-|HAVxKcsx@_uzkg7QS&4+;=xTwG9^Lq1}PP zgA(CNQ5L+1Jcniz_RYfMkHHVV3pZa6pScG9^@rg@zpMP#`#rbbp-`7W3^v9h0MQf| zQ@^X|iYKrHCJ4eG@K7`^gEp}IiMzP-wKM*yi8cNxQxQxBq-4N8f94UOES!8gZ26&5 z?Fe&Ql^u^l*Mms~n?X{7N)1NpkfxB91|>kZ3q=mSE;N^+(}JQ0t^+tICy*sDiZC+? z$Nv)p3fST9AEb`H1nqfz+v8R|OAG#~z!I2%_MyBnQUEL4mRR}Wv-*W!8S|gCBL-gq zlL4uK1x%CxJ>|`BH$41(kJ$_3H9>$vq30m?(DRTtArF8aybc6l1gsfo)WT#irwr)? zl+1wBDeRhq(=IZcagKp`9o+DO5Xylxk8e{n6u0OJ41ooLC;$#>K+J*$u=xJ(aOXXT z`3DZGyVIpQ$O4lNA`&}Xrzq4%;cXvCxapdLO2sfzic1}hu;5|1CFrUpFT-uc1ZarA z7rcjshEm@Em;ZJGxq>wVXo=uK1;lkvvE%e>gB7(;opRsDe819Z%lWKD?(h?>Zs&KErZgiA)@l0Wk}ffw|9aX50BQ za@~0q_d%NpJ~c?f;M*P8 z-SoWf-6`i>U|^pIW5C6A??H3Wj>k6@zvOXqjvqZK*L`-gZVL>+@=N-BKvXY!U46?} z{nzfR%W=o1#YLon+F*=ek~niFW?a=Zd}wxBZpj(Qg%u7ce$z$SjB% z8i7V=qI3Y?DPS(7aVlK+!4l`ZUSMxLTi2NOJ)kFOOYzH|e4(#d$LtROV2Bl1i12ak zzeEF~2~I>7f%LI?viIGl|LM9nxqmkeCm;}{UNFu;2BeB423kt$JeOQ)!=JO<{neZu z&v@#YP^&UH=QCgc02kz-n=8u=XnSS-=?QPREaC8Jg*^_uiL(ymf_A~TeVF+H{GI^s zwuBh_vF-+DfyKb^|NTKp5vc>~fDNyk;qYrOmVbNrk><2?eS%$MNa})&7$gHJDUuS8 zuz_(QPc2&>QnuVvF#ohtG(Cw9_XOubEtJ*>>o-|WIyd2%qk$C%%No-@uJuCDHfYOJ ztSD~DlkYCr`Kfy_^#)84%i9oQPq{7+9yRtWE_|V)*rWqsV}}oetYAQ=Av}1 z#g3b3f?&!5nIH*>Rj@J7#stcSrDb7mud=jH>9jxus-rMIB}}drs%3?yheZ!wz=66r z^S!}woHmpqKIikjjwhb+-+tGv`oEtT%zV&ZRb2r1X&NBFIIuQm!|2U#HNSf9G5VX8 zNn1`PEp}9}HG`Bvf(a!CMi@Y%5oPHMNDWv3;wvVFb|?WieCZuGI<%{38(h=lmX%`O z(VlaiySK@oUG~@h{{oA^o&Xa4NUB&f4+lp@~uHnOaXK|l@@_SF}Uw`m6?ru9);%+||wW6x}v--Y3EoQ?wFb0fn zs8Rd(=X2&S%*e%)<8n$;GZIX&RTGy4F&hZN7y$4Q9F3_SQ{J_FfTw79otxK(fB2l< z{)gXV^Nt1$h_CQqA55y@gUj7AgcKn+Mfd?rV~={R%d(c^k%tN3A7@76m3=YuZVAriAWNS7>TMzW6D4&%0~HN34j3{v5e|Pb%1t+Zw5v1 z;uZP5!DvJVl%py@X_W~kmJEdh{3`ffgzrRkSAoCc3|RfNNLML|Wi(*83k(e)2Z}*C wlnw*sm2AMl_li|#N&9;x5ar_9e%Y`82dojB*nDz1x&QzG07*qoM6N<$f?OHt3IG5A literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/heart_eyes_cat.png b/app/assets/images/emoji/heart_eyes_cat.png new file mode 100755 index 0000000000000000000000000000000000000000..eeba240e533783c92e0d221489e78c7f54586027 GIT binary patch literal 6176 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/heartbeat.png b/app/assets/images/emoji/heartbeat.png new file mode 100755 index 0000000000000000000000000000000000000000..b6628f6fa70ab24c6e83172221781e4a5077c481 GIT binary patch literal 4052 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/hearts.png b/app/assets/images/emoji/hearts.png new file mode 100755 index 0000000000000000000000000000000000000000..e894715385710c5382bd052ad9a501c1fe6be376 GIT binary patch literal 2925 zcmV-z3zGDSP)GMGn<3XI z5#>c9B1OOle~G1t2x*CeRzv~9B0vj-#lV8FlO?tp+cV=CkLT50d#cne^-ho7!)$LG zX|HtD)jic!_ue{n>(Mogb58%y;-LzKG3LU>4R|z&dnVzWa1AO@(4cV6RVq^+m;nr; z8C(qn1hll*-~^|{X#6BF0i=KokmnFP9iSWU)r^kp+_`gYcX#*G&CShAYieq0JswY$ zq9~5_DYx6r3WY*;VqzjWFfj1X-rnBh2M!!KPef5*9LRBqoemI`4+2eR&z}8rS6A25 z^pMH5Yu8S-x3~WZ$zOp4?91Ef073P+2M-?X?&;~-tJ4r7uiA~sM?#GE`qe^A`N}MZ z85l~ZPoM7Hx^?RwB<~@A+D-@5;nEU~M*k8Hhv#w#U}=n#;&Qo|cHM-_4d@V`Ha|U> zc!3Z^7*7J_ik`RlJ)}+fN<1?`lj-j30H58%pce?5l(#gz{Io^c(>e}fWL!{pfSnBR z0W~FC)NGUy(>8HRaLNLB%!%ZZn#9S#}ZccC1; z3~p#G75P+@F;g2Nrr@Qg$>k!C&qujLg2v9BW3dYtC_6k%Lc9$P6nNwjYFM|92U}ak zOQd8nW=i6H7s{C&8lw26ODu8qDrJ%8g#vkMYbn^)M&T`6cwpf|QWb^NeBSXGAfc-2 ze>y}n{`c>{XLmmOh>|yN3dcx;AW~6|cRYar3vJ#^3txPZLK`-4w4^jd=B=)#%-|pm z967>vD$2u=#!<=nE&%0xF!avRqwM;g zJ>>EGsbSSB60PJzs|hJgPEuxMgi-?obpMARD0=D?Eqdh@wq(~X&QOjUhTQ+@C;9%w zojc^8Kc7M!9ps-kkGz3^>{bOBItiyFZr!3=AAU%QzCO18tFO2ljzjsv3C=OV7;LJb zeDul{`sK|xsVWkod0kx;YHz2i`g+li^^F2a`ON4j#rpba6!~v{@Bt~wBx~Edmk+@q zmwS37)gzsq6ovz9-~>2RvP&ALs?rI;MT={+_^?YC6Z(!y5b{eq}RQJirA=&yTQ z(o>M{`o4WkP`Po<8ft{{UMSA9SyHqB#`|fBJAGRUy}lg z&)K+<=Ah-P5Hm;%n5rIY01+SRTUulgoE#gY+h2S^i@Lk13QQ?XOgPH`A#PAVe)ldL z{_#huN6XYfITvF>89k%0+%&UmSiG3>sTBQw{ybfO?>$*g7y&M_awU0Z%_0Two8Og? zj0k`obxW2|{Pt}c_~sk7V)t%dFa&7FVt^ahD2&KKVgH;tulp<1i>;yq7JB z7*POAQiFq%6_Mr3Wgvy|hI-8J!$6t#H#U;HriO;koT0YeyNQeEjs`*PK5^rQY$*>~ zjzD7t{g{e}NL-C$zX}MZG%j6Aq2^{8f-n?-vt(CFB53Bc`3GW%gF#Rm z3ey;;$>WjKRMDbR3{Emlh>Xx2K`2WV%qgA6_*|w@mwbmI24xTn5MTwX^m?3QfU0{Q z&r~R(rqe`a4oA#voSDW`&>9Yq4pT(r*G38198NBV^vY@$ECBQKgfA3wm~xeNfVp*z zG-u3;`ldjdOQmG&sTP43LvcYk-|5w$f@>{?J{1aOppa0)16sIMvhaG@QG3(%i&sgfH=1!lt(|T#h4rh3!>-F(I^yB`}>K3 zk}g0lZVYJzEg3UN>$fD*28V(=!~qhvqF^X3#&~0^OQQk2U}T1wT^gh#1PpnRlC7LZJ!y1-d01FA zU_z7uBQ)ckUkqiyf@RM>%ddX^IZI-}Q;XKFGZ<+Cj4DS(=`5glJRzLY9pG+oAIytf_ zs)?j(8Va>N|2&T%ASK|CxKI{(?3NS|Qxq9w|M2$Pk|Br>7RKA^fYN(=awZ1qLn$tl zi-VHMsrq9PgDgLqBCS(D1_)=jzVHIg?d;@}@pvhnW@cA7i$H{+B)h`p{rhPo5Fj^W z6wrn_i!NZ=W;2feIb26@jU({Q-n5C@vHC;TGsP39V}Pk;g;H%jJv?^f1{?V9JF$-^ zoiNK_j25jWbYauX0P~vhV+gkXrY73>{`*{PloW736WiibeW%y={^U5n0ZPsV8)67h z_mOV`kU5H|O~$eqGdUxV^r!&(xf{;x{P<(4$Fez}PFqmlp)W(Ks+t&qcp&!zyFUAj zH)4lpOgKRVFvg@4nEt+TeP7HdJj)8&BRL}C3)cOcKK+!>!;UaEQbb;(4vxnFE80nV zR?nVIo4@>$|LwKc*dX@<4g^-L-&A?+!)FX8oBU_b3oUOZy@b>cmcS(_@cOE}5K8 zj~R^trJWE8(dL5(`NenNWp{gfNkL2I#cmK0c}uJfRHTK8V?Y8eU5gEq&QCt!jceD+ z`M-rY9s?|?SI~yXjr;d=?AuXRQRqJ6L{zLEi)MHQAcp6|C?}4Vp0i~OZ9Q^?hgPo^ zEpJt)@wp>w0b_dFc{mm{@>AEUH{RfN%a*af@7qT>X-0WO@{o3xB?rWT81m-fq-FSU zvg-BMIkwrv2CD@N9UBHKuUxL|U`X?h9Xz;rF}w86J2Zk%XE}6FfRH#rqms8 zy+tk0Jj1c_6AUU#ALkulU7`74Bj>Uo*SEHEP@DdN#nbJhM=1?MRkZr-t}a@GwL}Q} z3x!n5`s7FH=QcXP+7T5o1!K7U4!8zibi(V_v1=IHn;w6hmhajnCph_JQlB(g)iv{7 zpi;qvNuueAC-`j46+Gw)^3zv3ZLH|wJ|JOzQpZ>ij?X$21kEj8d3>-oz=r(J2SHPRuKZZ7^~qA)J2nie0%cBu>>5QXJx9m| z>~??x;G1MBQ^tWuQ@Y$|5R2c+`bS9~Q0#U<4wyK0?AR5<|8pdYjJGrJmD`n=rVpJt zbLKWKX&`U+{{|zttOm9nK79C(k3RZnQyC}8%bp7$U8<~72Q#OvudlB!wtf5dLrDG= zxQyS2?F@oBAO;NL50fW4Iy%~R?AX!V+S(cj27_3-&vId8sPM>pR5}{r%~a zCr=KZIC0_^p`WH_*6vXt3ycB%K=9(liz@Ihq^k^NF>+QoplG_KfB_9LAZND&3P3`0 zfE$>z2jy+JvQ00000NkvXXu0mjf@Q`g4 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/heavy_check_mark.png b/app/assets/images/emoji/heavy_check_mark.png new file mode 100755 index 0000000000000000000000000000000000000000..336d2626d0c9aab25d10df8570d1342cb65c1f6c GIT binary patch literal 1103 zcmV-V1hD&wP)D6Ol)aRLf?Rnc{v%V8-UYNi6|fWmrW-Y#Y3+C4jLV>lO81 znC{Zj5s8E9`a91Bv~)x(OR!l{|HW{JmX=HsR_-Ab+Rys51jzG5Hp6U4+BJ2>vKtEQ zI5VWBE6(*eR1HXAs#8;2F7<>NyZ#xl9YC(Rv5=dvR#Fk-sZjUOcr5jchcFqPeh07> zATKLYo?C`Oxf15-)vpeaTge8wA*zBqjVIuRE!iH2NA>OA9}1C{QNQi^z@*n%gB+-( zC)S|`maZ>m5lnbK)P*?-aYg2{(hMu1NRh7xN|KoQBR0Z>m4n`xCL})Zie0iAYEHa@ z2cWd#K`NFhOIQ7eeXY1tRYpmOXlHo=lSl(ucwj}J&H%nl8ojB8Nof7|_- z+zcx%?(aqd0FZt=ABPD?Z~!q7!pyb9I09=O{#}5G>x689S-t;_xM#(Iqx=%qDqW?3 zYo~Jg-$&kEkXdo$1!D_RVWrjmFB@P&;(1OWCPJvC)=CR3aZ;AS?1MnXf{p9P+Hf3} zl*|7e-iMe8Vdc6t@-tFl8}A!C7DoVOgbH|J6I(CUEcl7ZSSJp`o?piIEXs+=rJ9rt zvJP`#fA~>eUX(K;qO&$Yai1kYlggqX{Kqnd^O{YWtuaeM~cKB7P-Kr@b}yQh0HhD zZn822Z07KikGrjuF`fOF$D`~k3=!GuW3Nkk*6`j|02)|eeijCvNfz z{CcPku?R>WNNad{zSHc<8@3m}_ik}oSfOZFi?RfCu ZBlDBPS>Y*<>{fvUJYD@<);T3K0RW=helGw3 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/heavy_dollar_sign.png b/app/assets/images/emoji/heavy_dollar_sign.png new file mode 100755 index 0000000000000000000000000000000000000000..361e26aef8be5ea9673c9e6822469b0bb4ce957a GIT binary patch literal 1416 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 Z{{|GZ{4J_TySe}X002ovPDHLkV1lD?X|VtR literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/heavy_minus_sign.png b/app/assets/images/emoji/heavy_minus_sign.png new file mode 100755 index 0000000000000000000000000000000000000000..b8d3d82f2cd5141182c304ad90a6992eb2c5d4c1 GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e^#Gp`*Z=?jo0^((adGMC>1kLE8-wm$Ob0SH4d!W0gYTC22*a|zW3kDUr0zuPfw4Rm)F?X zn46p1z`#ILQ-m6g@d&`?!X z<>TX1S67#ml+@PN1{%V}#RW73s6b9m&d|_MOG^uAK2Qx04-Zf;Pz%sNphZSTMnGLa zErNoAA|fKv($WwsgoTBHW{Qc4>FVn8^Ya6pp{%S7v=Qh+2?+_HEsBbYQc_Y13JO5S zEZG@+4d@r?k|4iehN65B1S1dy<^mZ&W=u**2Ll76vZsq z5f?dd_y6NXP2an?yWGA{d@0qvWyb@hASFSuC5HDND{U2jZpitA`JVSpLv!U>oxyGa zW#@d=9!;3&SjDt7Wy(F~tbX3OEo>>NA66aw=J7FdwLzp&jrgzGFq08ZZQ7#)?4nSckUMdK7;AU*e#-ev;<6qD&o^RnudYyPU@l-#^nEc?o%mYEe1uQQao-ufR z;9$75t=7%MC9iLLJ@=jMd=6eO9%IGfx@fxo0at}6bsQ>@_v>`~dpaPRc1K$ss z1H0C(=UDmb$%c0#Tk}mDD(A@y8g0J#@u`K|+ta-Q=1wsk4?w0*;CR5`$LKYIZvoJD ySqByiw$20V8KwmNN{zfEHZ`b92I}@3^?MmD{DVCB11|7^ggjmST-G@yGywokA$R}) literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/helicopter.png b/app/assets/images/emoji/helicopter.png new file mode 100755 index 0000000000000000000000000000000000000000..8e82a0d587692e6210f28ac1e3f0015e27b2639b GIT binary patch literal 4100 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 M07*qoM6N<$f@Id582|tP literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/high_brightness.png b/app/assets/images/emoji/high_brightness.png new file mode 100755 index 0000000000000000000000000000000000000000..ba9de7d409c008610ea2228074f7a8b03f732bd5 GIT binary patch literal 4060 zcmYjUXH*m2)}8=T6F?CRMG)yoD87Jnq=OKuG!;Z?F%$tsKnO*Of=HJVdI#yfNoYz7 z&6hyv1dKG1-lWJ4-u12T{+OAyX00=O&vVXxO1PoE7KE0K761T3R3!qNXI> zKRt7w0|16x9d(ua-cvsw`WTwxSskZ%M_s zaQj}a`2iot-)H{wUc;@+Gn*OL?yBFJ70y|jIT%#lME!V)JIic0)SN9F@ff9{qowsn z4!x5c<3skynKQhA<_Un}lfia)pakSm>j^|xOVP9?O;SMcr;WX_;$ujo|sw^dJ z%*upZ)aF?qQC5MDKgmeIVP!N71$+@f<AiHUGeS8E& zbysrG&q@+rpz9)q+c-&^QqWpC!Ok0}p4=E)4vRh7-fP5AOAC~oBj&RN%>O_=o<|4v z+2gXy#4HG5VbXXI;*B&Sp-#0%O2Ff5Ai2#DweM&mv*uhxVXukOTm1SY&ii=t6q8RNVvpyiz8&-|LCFGVh$Pg&*NZzHBRAHA?y(O87e|u(2 zXlO4kefIQI1c%S-o%IxTPK=|X*3IH=+-=4exDxFzdc8kUjH0FBKYa7FTso}H6*hvo zrj=NpHM0-2W$#foWMF%o)pL%@4v?tZ8+Nv=OXw^J zTlRjKbIAH+n9Sk9&<&1^j=Y+qj8ydxJ(<}{CR}li)&`zVn!_#Q6X?3!ghcNj*l|01 zj1=EWWTjG(=>YXjXn&C!`*GH0op|6N$G|>FrUL>Qx#>jOfzR3UD!x(NlNTCt z@^iq6**3)PtEGg2#$3Eujfwn3MDbT-9t(FkECm+&K&055Z4HKStSPXKR2c7pwv+K! zo+(@$N^nX;M|1SXb$hGAQ_X(!?ReIq0Acx)G9Tt?HYA2|(B#x*2lboHCmN$Z_i4G$ zWS>mTR<~&3Co}FPe?-M8a-#)}cCux>%G!1K^$O{$9TL2c-_rTBZ<%mgTHQq7CzhuT zkIE&Xk&_E_=ZjWT9y=TXXs(x|+QMKy_uRG5QdY6BQj=452e`TYbhXrS{$f?ywX`1k zHg)*&+)~x1vB~V)Nc%XG z%w&C$&cJ;Rg8%zLiHMd8&S*JqAvcNR30hSdMw8+o{O|6XirrH0O!SbJM14>@sGOS_ zcvoRylA8Y%CX4MlT5DB-j19-0jM!Cgg1M)A*08D(YlCx-WcO4ar|Ni4R$<#gkM2SW z6Sth-J^id57okf1h`@0hL>RuRAZz z&M2OJ?Y6KHXR#$q{UF;;q6>xxz`C#X*?#E9+^0hooUQfzN(i`>N1=O@1AGL%E5T#_ zK3_MZq`VySy??dh^_aurY8%z4a;+_80=rxVM%W>XEC?iGL&nZQAS>iE+eZ##Mkqgw z&<=Vko(39hL6kc2SeY!STdy?`E8cF0&c z-L2=0pEg(N18?@!YfLMiJ@JL`E;)%kur)QIVgqadx@3Ppx1iB0TnXPdso)n?j@A6z zwT@^r7kt|%i+qzF7(;N#$?@1-C$Emi^6; z4r`>+b$m)iw0aIGtoqTi=mKuP$8VE$%udYzsVN?;egEpcOS8H+2C9-yP^Hff+CGE7 z1cF3*OosutH`DVBXy<20M94VT9=TGd`4M>jhY)`r(nH>OESuNS@0G!g%>e$6Muk|a zZBCS~;N+dP@W&d5zlCi#Hm*QRyx(71?3;mA`j%NMjQ{|-g(5kaq!|}qy^xHHo~NT} zw%`YsF`bS_b7!7>rZpoO`Hz21*q;g3I+xgbKH> zwh||N#+0(II(haw3M5g^%spO~VEIdIe^u#ZZTXVqJ@&fo5%4d6Wdf65aP*evh_q^* z(WgvH6Vv&L2CF)=q-__&UR~4b9kGj$R3kO?%t?QID>?i!lTdMN17;riQ> z@N?K7uyyuf%e0LKS(rP&X}>g-y(bM7DWJMD)o_@6sgkz7n!4JBHgSL^LhJSWx0rf3 zvd@xb2s-QCPDzpk+1ectO+<3}ozCDtw;TvoP-R1d0RbU{c~`4DugmN`4SN}$WI<4Q zgOq>1Gyt|2^VUB>0Pr!o?{J#4o=KJZrY^Te`mtFpw`*@vLkh3Cp?|vQ2Z#|@OT6fc zbKjThsQtY$>RYnerL?WilH>HQ&raev~2ts1cKBk*eTv2Hvc~mFF58tfM z^(d6pmI# zVMuG+0Tyvzk3f>*x#^PKU=i~xbbx1Jox!h!Jp6^A(>9bPD=E!&!v7J{3bQ1C*ycqO>!OIE0elb0Z?|(sA3BKq{an!oK-cEm- z{{P&M>pj3tCR@oDTsNhZf3U=KicW!FYxOP8=Z_cB`Gl3CIj+J_!5%yfW}yxLRC+8q zwt74eBR$Ozsh0bj1F{*8t(}sn{!36{l!zdHL`yaZ2tv^2nrR8u`Mlb>mZ2QO-eWAx z#k1K_*oVYj-W*=Gdfrr9$|*Ja`89D@HElzjdUo(2j3|)3SH<@)iz`_u`6a1d*0pFyns<2Wuj(@m7t)_5ry1=gCfrF;F?Tl$4Hu3@qSY|M`VyuDi~b3v^Z~}N@yZo& z`m#!Bm&Fm)Up)6&dbr;}J0?G)w^ue1%3Ofq9x?BX2Tw`E(Q#rm(q zmd16bM9~Eb2WCD02-4|CDVH;W{zei(r%(s?-I*Y+1m{wi1a)!0*@-53lg|`)8SnIx zxQE+P{&2<6w#s%?&ZM6ifqaMa;g|YkELW`U&qqUes=vV`>uUuaTehjTQN7d{q|?YU zS<313y|k@1&yLFw2f6H>HPPM6AN^b7Xf>_k5{6GuN(ADfFEp&WmM>@i92&%O5ko@E z5S%#sN>OXp{uEqWxaJ@&x0QVU`8o94uCk^#P02eVpR=@{sC<*_jez7pe#FH#9-l*H zC7E=gk=Pn)Pv!D}$ooSp$B3YS$SnGEDC-|kyRv3|G|#5LNMX(7Dd~;Y(`JW8s;m<( z9+`#JF8vKgWx9UOn>cqje~N~?_j(_+&}3G0d!p)8SUne;2@B^vIxpgm%|AO|4yfby za+lE)B>_iDu0}>6<%J)@_#yi5JbV{6)@6bUFuTm`mYU2`{lx+2N2|u_*`SI&2g-gh Vi(81x50g?mprfI$Uao5M=08;I$?yOG literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/high_heel.png b/app/assets/images/emoji/high_heel.png new file mode 100755 index 0000000000000000000000000000000000000000..525b6a0dd6947b98e1950c822b8448c2ecdc0c2c GIT binary patch literal 4557 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/hocho.png b/app/assets/images/emoji/hocho.png new file mode 100755 index 0000000000000000000000000000000000000000..18eade0acfa91bf5a3531e0d80fea78e4d360ead GIT binary patch literal 2506 zcmV;*2{rbKP)YUFp=RlZUAR;A7+M?VacA>nkoUu3}?jBlYUlQxGyUGbK5BL`hs+ zoV#fOczSwfHfYd5jXXezy}doD2+qr}VZ$V2&Kwy$c<_06f~zS3!04Rd;9zOlvZaFH zR??(N6NG@TI5{~f2zA`* zNWXslWb)+6(zkEllK|yl#w7Sd{rdISHE!HkTDNX3O`A3qKR-X@1Q!K?$6md9$(S)? zq-W2>g7)p(+nKTtfYF=i0XhVKe}8dvb5jtUon0h8K3-D(nj&4hcKtmhB*fNq02mJN zgw2Ey5fLFRTC|XWfB^CE@DN*DTR?D@n3z~3#UX;qZ~)iXmCvMH zVf>2ge>B}>h$9OKyLAZ63n2{~vPq&BsBmbB5W$>5A|oR=n+<>t!8R~3@V92onn~Np zwh|s5&R#*U5DG*n$|vU!VPRowO$R`SfJC@YL1?QW2+JkTsS4o)PhgH<(uB9HG#daN zLTz}$@6DSxr@O0=U})eRDugG!fnK4`p{x9d=>SlOeS3^_K1*Y}cI_k*-asHsj&@9)ofL^gAXsQ^$g&;bw%0D;+`-oP@6QEy1&nHW`-@bdEdH-LGV4giIw$O#Y% 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 QY5)KL07*qoM6N<$f~%6iw*UYD literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/honeybee.png b/app/assets/images/emoji/honeybee.png new file mode 100755 index 0000000000000000000000000000000000000000..f53733953afad79cb582a1e7edc8d847b8767f1a GIT binary patch literal 5851 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 lnFB$aS=DgvJ>i@I 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

    DttxZVT7RuI@AZ2zhz1JF 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 JPDHLkV1iV8h?)QZ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/bow.png b/app/assets/images/emoji/bow.png new file mode 100755 index 0000000000000000000000000000000000000000..024cb610492b005e11d41c368fdf0519c0ecba1c GIT binary patch literal 5143 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/boy.png b/app/assets/images/emoji/boy.png new file mode 100755 index 0000000000000000000000000000000000000000..f79f1f29807f76432586afa2304b475ee3abdb6e GIT binary patch literal 5946 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/bread.png b/app/assets/images/emoji/bread.png new file mode 100755 index 0000000000000000000000000000000000000000..7e7c63753d3b1f8b94a4a96569339ec15c487e88 GIT binary patch literal 6214 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/bridge_at_night.png b/app/assets/images/emoji/bridge_at_night.png new file mode 100755 index 0000000000000000000000000000000000000000..495b06c3dfe7cb55791cf54a934d1453acf54da1 GIT binary patch literal 5137 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/briefcase.png b/app/assets/images/emoji/briefcase.png new file mode 100755 index 0000000000000000000000000000000000000000..46e82b0010c7d7056986d6651f6f26871e38117a GIT binary patch literal 2698 zcmV;53U&2~P)6xIrrYG>T;Ctc6WW=^YPO6)m3*-$*sQQZh?#Vk&dn{ zRh>G&=RWUyPSsV5s`5pa;|s2*20S(33$CXIJT>5pt)~VQoTEg<0UjvYA)JpCi0w$K znmH$ls-7o&_3ZlkiyL~vZ2`5J@PsA6 z1EZgR`AgsW>Z`BZcwzGzf&=Aj5>PU?wtx7-KfM1>-+Jr44_*OwfhW#@>Oxgry*wJ- z*tj^NP$lKSd8lxXX3l2r<}=21Jq5xOV}Kk8C>N@0-ODyy#F5`|KYrj-vjnB43=Xc?RrK#d%NF$^=H2HyPMB#P&jYN zh%wR34e0-h0dko{%RbC7`R z{az0dA;w5EcZBdbYdoo87E8dcHKn?-v2kHSXUYEl{%}xLoAddMz5NMQK8%zbGz+MLz(?r1dXcTK|(;~N7t z5P@ulEG57J{a^ltpZk@om#@5W@#6Y$xVDBXJY6JUcRi)_s5HGOPQDpqqKk^cTlp;C zv{$h$@o!^{DBYA}Vltib@ZsL%^9T2T>zxn2`**+`NXrHk!1}d~t8f1FPrW3YFTTL& z;zh(c1f{dYaik15Oq%(zByM?*AA24}(45(S_>k?bTSNDsKX?<^1mdF%sDO)$dMR?R9cB%n6Ci}*= z2y>iMMBIueAhQSyW6B*$p#2t?$RQJ421%^6RLH@YjO}y-Vxn#m5Ch@`2Pms40Wvf! z#+14>!9-}vAOu7NVYQ{uuozQJ9ZMj_Y}2@iX9T5Y71V38r2FX2@qsC!gMQ-qHv7&r_ARI ze&V_3@WshTYedK~^V!|I_MVHQp+&b#%$E&N0F&2 z?9L_x%?!&5?;OrM5ZZ|qX^mJe4LSaAOr)H+fBylW+}dLI!7hSwk_CbQ!o%qlah`rv zSq&e70(uNrf7Ak1ZPy^6kdrk&CZT3BpBdY!1~~7jQ>LCw*p;clR?blsp0X^cyvI3@ zw8^kI%OU>JRUCz2zX@vLdF2!YDC+d`}>(?<+=Zvb_XxUCTpkI~r`+bVSldT~|79lcT)Wqo=1PT!|q;dsC>8V7( zd&J0WLCj`T?tH$(?eT;!zx=a&T+r5}42DryC%MJ=g13 zJ)DQs?w>J6LTVh2=I|m$CUrn(ifHqbRoXkqIp zio(j*7ml1@E(;d(#pwos;s7sL)P0FLp38!qvyIe@mi!0AQixWrbJcE8oSrleU zDS|J&0lRiMQ8NeeNKVEC9d-c&Op&A|niM&f3@3t_A`bNheUw<1WVJ49#spRB`JC;y zS=>PoXn|=zN3lU9s~S`8auUqij-*Sc*L3(l6=`ED7O?_3d=i8z{p;8Ht3ZXw5(5osyIR}1YX}P)>aC|7|p+dxV0tJMQI!hBinW?J*dN|HQsRjDK zQp?iO02^wxstBtuS{6m=WPmJ1X61FngPd*vlFTtsG9WANf{H+!Xe4!eGL(x%Oa-2V zMH{CmT&K*1mt7!*za)nS1|>l9ZIV&{GZSN53MD`AOv*>(f|Me07*qoM6N<$ Ef(IKLPXGV_ literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/broken_heart.png b/app/assets/images/emoji/broken_heart.png new file mode 100755 index 0000000000000000000000000000000000000000..a1bc850ecb4cfcdf75f8668bd0c668537a764223 GIT binary patch literal 4118 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/bullettrain_front.png b/app/assets/images/emoji/bullettrain_front.png new file mode 100755 index 0000000000000000000000000000000000000000..16651acff8ebb8c7359f15db2e1eb9654ceb37be GIT binary patch literal 4992 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 Ef^`{Nt^fc4 literal 0 HcmV?d00001 diff --git a/app/assets/images/emoji/bus.png b/app/assets/images/emoji/bus.png new file mode 100755 index 0000000000000000000000000000000000000000..823aa39e49d233729f3f3f1572f982c5c53fe36c GIT binary patch literal 4065 zcmV<74<7J|P)b9L#5i!`B3y?n(3mz35u+2)*N