Skip to content
Snippets Groups Projects
Commit 9265de3d authored by gitlabhq's avatar gitlabhq
Browse files

snippets are ready

parent 526ad466
No related branches found
No related tags found
No related merge requests found
Showing
with 200 additions and 7 deletions
$(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;
}
});
});
Loading
Loading
@@ -22,8 +22,8 @@ td.linenos{
 
.highlight{
background:none;
padding:10px 0px 0px 0;
margin-left:10px;
padding:10px 0px 0px 10px;
margin-left:0px;
}
.highlight pre{
}
Loading
Loading
@@ -43,7 +43,7 @@ td.linenos {
}
 
td.code .highlight {
overflow-x: scroll;
overflow: auto;
}
table.highlighttable pre{
padding:0;
Loading
Loading
Loading
Loading
@@ -310,6 +310,7 @@ input.ssh_project_url {
}
 
#projects-list .project,
#snippets-table .snippet,
#issues-table .issue{
cursor:pointer;
 
Loading
Loading
@@ -360,6 +361,8 @@ input.ssh_project_url {
.user_new,
.edit_user,
.new_project,
.new_snippet,
.edit_snippet,
.edit_project {
input[type='text'],
input[type='email'],
Loading
Loading
// Place all the styles related to the Snippets controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
Loading
Loading
@@ -41,6 +41,8 @@ class NotesController < ApplicationController
Notify.note_commit_email(u, @note).deliver
when "Issue" then
Notify.note_issue_email(u, @note).deliver
when "Snippet"
true
else
Notify.note_wall_email(u, @note).deliver
end
Loading
Loading
class SnippetsController < ApplicationController
before_filter :authenticate_user!
before_filter :project
# Authorize
before_filter :add_project_abilities
before_filter :authorize_read_snippet!
before_filter :authorize_write_snippet!, :only => [:new, :create, :close, :edit, :update, :sort]
respond_to :html
def index
@snippets = @project.snippets
end
def new
@snippet = @project.snippets.new
end
def create
@snippet = @project.snippets.new(params[:snippet])
@snippet.author = current_user
@snippet.save
if @snippet.valid?
redirect_to [@project, @snippet]
else
respond_with(@snippet)
end
end
def edit
@snippet = @project.snippets.find(params[:id])
end
def update
@snippet = @project.snippets.find(params[:id])
@snippet.update_attributes(params[:snippet])
if @snippet.valid?
redirect_to [@project, @snippet]
else
respond_with(@snippet)
end
end
def show
@snippet = @project.snippets.find(params[:id])
@notes = @snippet.notes
@note = @project.notes.new(:noteable => @snippet)
end
def destroy
@snippet = @project.snippets.find(params[:id])
authorize_admin_snippet! unless @snippet.author == current_user
@snippet.destroy
respond_to do |format|
format.js { render :nothing => true }
end
end
end
Loading
Loading
@@ -53,7 +53,7 @@ module ApplicationHelper
[projects, default_nav, project_nav].flatten.to_json
end
 
def handle_file_type(file_name, mime_type)
def handle_file_type(file_name, mime_type = nil)
if file_name =~ /(\.rb|\.ru|\.rake|Rakefile|\.gemspec|\.rbx|Gemfile)$/
:ruby
elsif file_name =~ /\.py$/
Loading
Loading
module SnippetsHelper
end
Loading
Loading
@@ -12,6 +12,7 @@ class Ability
rules << [
:read_project,
:read_issue,
:read_snippet,
:read_team_member,
:read_note
] if project.readers.include?(user)
Loading
Loading
@@ -19,12 +20,14 @@ class Ability
rules << [
:write_project,
:write_issue,
:write_snippet,
:write_note
] if project.writers.include?(user)
 
rules << [
:admin_project,
:admin_issue,
:admin_snippet,
:admin_team_member,
:admin_note
] if project.admins.include?(user)
Loading
Loading
Loading
Loading
@@ -7,6 +7,7 @@ class Project < ActiveRecord::Base
has_many :users_projects, :dependent => :destroy
has_many :users, :through => :users_projects
has_many :notes, :dependent => :destroy
has_many :snippets, :dependent => :destroy
 
validates :name,
:uniqueness => true,
Loading
Loading
class Snippet < ActiveRecord::Base
belongs_to :project
belongs_to :author, :class_name => "User"
has_many :notes, :as => :noteable
attr_protected :author, :author_id, :project, :project_id
validates_presence_of :project_id
validates_presence_of :author_id
validates :title,
:presence => true,
:length => { :within => 0..255 }
validates :file_name,
:presence => true,
:length => { :within => 0..255 }
validates :content,
:presence => true,
:length => { :within => 0..10000 }
def self.content_types
[
".rb", ".py", ".pl", ".scala", ".c", ".cpp", ".java",
".haml", ".html", ".sass", ".scss", ".xml", ".php", ".erb",
".js", ".sh", ".coffee", ".yml", ".md"
]
end
end
= form_for(@project, :remote => true) do |f|
%div.form_content
- if @project.new_record?
%h1 New Project
- else
- unless @project.new_record?
%h1 Edit Project
- if @project.errors.any?
#error_explanation
Loading
Loading
Loading
Loading
@@ -18,6 +18,11 @@
Wall
- if @project.common_notes.count > 0
%span{ :class => "top_menu_count" }= @project.common_notes.count
%span
= link_to project_snippets_path(@project), :class => (controller.controller_name == "snippets") ? "current" : nil do
Snippets
- if @project.snippets.count > 0
%span{ :class => "top_menu_count" }= @project.snippets.count
 
- if @commit
%span= link_to truncate(commit_name(@project,@commit), :length => 15), project_commit_path(@project, :id => @commit.id), :class => current_page?(:controller => "commits", :action => "show", :project_id => @project, :id => @commit.id) ? "current" : nil
Loading
Loading
%div
= form_for [@project, @snippet] do |f|
-if @snippet.errors.any?
%ul
- @snippet.errors.full_messages.each do |msg|
%li= msg
%table.round-borders
%tr
%td= f.label :title
%td= f.text_field :title, :placeholder => "Example Snippet"
%tr
%td= f.label :file_name
%td= f.text_field :file_name, :placeholder => "example.rb"
%tr
%td{:colspan => 2}
= f.label :content, "Code"
%br
= f.text_area :content, :style => "height:240px;width:932px;"
.actions.prepend-top
= f.submit 'Save', :class => "lbutton vm"
%tr{ :id => dom_id(snippet), :class => "snippet", :url => project_snippet_path(@project, snippet) }
%td
= image_tag gravatar_icon(snippet.author.email), :class => "left", :width => 40, :style => "padding:0 5px;"
= truncate snippet.author.name, :lenght => 20
%td= html_escape snippet.title
%td= html_escape snippet.file_name
%td
- if can?(current_user, :admin_snippet, @project) || snippet.author == current_user
= link_to 'Edit', edit_project_snippet_path(@project, snippet), :class => "lbutton positive"
- if can?(current_user, :admin_snippet, @project) || snippet.author == current_user
= link_to 'Destroy', [@project, snippet], :confirm => 'Are you sure?', :method => :delete, :remote => true, :class => "lbutton delete-snippet negative", :id => "destroy_snippet_#{snippet.id}"
= render "snippets/form"
%div
- if can? current_user, :write_snippet, @project
.left= link_to 'New Snippet', new_project_snippet_path(@project), :class => "lbutton vm"
%table.round-borders#snippets-table
%tr
%th Author
%th Title
%th File name
%th
= render @snippets
:javascript
$('.delete-snippet').live('ajax:success', function() {
$(this).closest('tr').fadeOut(); });
= render "snippets/form"
%h2
= "Snippet ##{@snippet.id} - #{@snippet.title}"
.view_file
.view_file_header
%strong
= @snippet.file_name
%br/
.view_file_content
- ft = handle_file_type(@snippet.file_name)
:erb
<%= raw Albino.colorize(@snippet.content, ft, :html, 'utf-8', "linenos=True") %>
- if can?(current_user, :admin_snippet, @project) || @snippet.author == current_user
= link_to 'Edit', edit_project_snippet_path(@project, @snippet), :class => "lbutton positive"
- if can?(current_user, :admin_snippet, @project) || @snippet.author == current_user
= link_to 'Destroy', [@project, @snippet], :confirm => 'Are you sure?', :method => :delete, :class => "lbutton delete-snippet negative", :id => "destroy_snippet_#{@snippet.id}"
%br
.snippet_notes= render "notes/notes"
.clear
Loading
Loading
@@ -38,6 +38,8 @@ Gitlab::Application.routes.draw do
}
 
end
resources :snippets
resources :commits
resources :team_members
resources :issues do
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment