Imported Upstream version 8.1.0
This commit is contained in:
parent
83f0547d84
commit
65b4273963
746 changed files with 10584 additions and 6847 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -25,7 +25,6 @@ config/initializers/rack_attack.rb
|
||||||
config/initializers/smtp_settings.rb
|
config/initializers/smtp_settings.rb
|
||||||
config/resque.yml
|
config/resque.yml
|
||||||
config/unicorn.rb
|
config/unicorn.rb
|
||||||
config/mail_room.yml
|
|
||||||
config/secrets.yml
|
config/secrets.yml
|
||||||
coverage/*
|
coverage/*
|
||||||
db/*.sqlite3
|
db/*.sqlite3
|
||||||
|
|
|
@ -24,6 +24,14 @@ spec:api:
|
||||||
- ruby
|
- ruby
|
||||||
- mysql
|
- mysql
|
||||||
|
|
||||||
|
spec:benchmark:
|
||||||
|
script:
|
||||||
|
- RAILS_ENV=test bundle exec rake spec:benchmark
|
||||||
|
tags:
|
||||||
|
- ruby
|
||||||
|
- mysql
|
||||||
|
allow_failure: true
|
||||||
|
|
||||||
spec:other:
|
spec:other:
|
||||||
script:
|
script:
|
||||||
- RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:other
|
- RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:other
|
||||||
|
|
|
@ -932,7 +932,7 @@ Lint/UselessAccessModifier:
|
||||||
Lint/UselessAssignment:
|
Lint/UselessAssignment:
|
||||||
Description: 'Checks for useless assignment to a local variable.'
|
Description: 'Checks for useless assignment to a local variable.'
|
||||||
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#underscore-unused-vars'
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#underscore-unused-vars'
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
|
||||||
Lint/UselessComparison:
|
Lint/UselessComparison:
|
||||||
Description: 'Checks for comparison of something with itself.'
|
Description: 'Checks for comparison of something with itself.'
|
||||||
|
|
103
CHANGELOG
103
CHANGELOG
|
@ -1,5 +1,104 @@
|
||||||
Please view this file on the master branch, on stable branches it's out of date.
|
Please view this file on the master branch, on stable branches it's out of date.
|
||||||
|
|
||||||
|
v 8.1.0
|
||||||
|
- Ensure MySQL CI limits DB migrations occur after the fields have been created (Stan Hu)
|
||||||
|
- Redirect to a default path if HTTP_REFERER is not set (Stan Hu)
|
||||||
|
- Send an email to admin email when a user is reported for spam (Jonathan Rochkind)
|
||||||
|
- Show notifications button when user is member of group rather than project (Grzegorz Bizon)
|
||||||
|
- Fix bug preventing mentioned issued from being closed when MR is merged using fast-forward merge.
|
||||||
|
- Fix duplicate repositories in GitHub import page (Stan Hu)
|
||||||
|
- Fix nonatomic database update potentially causing project star counts to go negative (Stan Hu)
|
||||||
|
- Don't show "Add README" link in an empty repository if user doesn't have access to push (Stan Hu)
|
||||||
|
- Fix error preventing displaying of commit data for a directory with a leading dot (Stan Hu)
|
||||||
|
- Speed up load times of issue detail pages by roughly 1.5x
|
||||||
|
- If a merge request is to close an issue, show this on the issue page (Zeger-Jan van de Weg)
|
||||||
|
- Add a system note and update relevant merge requests when a branch is deleted or re-added (Stan Hu)
|
||||||
|
- Make diff file view easier to use on mobile screens (Stan Hu)
|
||||||
|
- Improved performance of finding users by username or Email address
|
||||||
|
- Fix bug where merge request comments created by API would not trigger notifications (Stan Hu)
|
||||||
|
- Add support for creating directories from Files page (Stan Hu)
|
||||||
|
- Allow removing of project without confirmation when JavaScript is disabled (Stan Hu)
|
||||||
|
- Support filtering by "Any" milestone or issue and fix "No Milestone" and "No Label" filters (Stan Hu)
|
||||||
|
- Improved performance of the trending projects page
|
||||||
|
- Remove CI migration task
|
||||||
|
- Improved performance of finding projects by their namespace
|
||||||
|
- Fix bug where transferring a project would result in stale commit links (Stan Hu)
|
||||||
|
- Fix build trace updating
|
||||||
|
- Include full path of source and target branch names in New Merge Request page (Stan Hu)
|
||||||
|
- Add user preference to view activities as default dashboard (Stan Hu)
|
||||||
|
- Add option to admin area to sign in as a specific user (Pavel Forkert)
|
||||||
|
- Show CI status on all pages where commits list is rendered
|
||||||
|
- Automatically enable CI when push .gitlab-ci.yml file to repository
|
||||||
|
- Move CI charts to project graphs area
|
||||||
|
- Fix cases where Markdown did not render links in activity feed (Stan Hu)
|
||||||
|
- Add first and last to pagination (Zeger-Jan van de Weg)
|
||||||
|
- Added Commit Status API
|
||||||
|
- Added Builds View
|
||||||
|
- Added when to .gitlab-ci.yml
|
||||||
|
- Show CI status on commit page
|
||||||
|
- Added CI_BUILD_TAG, _STAGE, _NAME and _TRIGGERED to CI builds
|
||||||
|
- Show CI status on Your projects page and Starred projects page
|
||||||
|
- Remove "Continuous Integration" page from dashboard
|
||||||
|
- Add notes and SSL verification entries to hook APIs (Ben Boeckel)
|
||||||
|
- Fix grammar in admin area "labels" .nothing-here-block when no labels exist.
|
||||||
|
- Move CI runners page to project settings area
|
||||||
|
- Move CI variables page to project settings area
|
||||||
|
- Move CI triggers page to project settings area
|
||||||
|
- Move CI project settings page to CE project settings area
|
||||||
|
- Fix bug when removed file was not appearing in merge request diff
|
||||||
|
- Show warning when build cannot be served by any of the available CI runners
|
||||||
|
- Note the original location of a moved project when notifying users of the move
|
||||||
|
- Improve error message when merging fails
|
||||||
|
- Add support of multibyte characters in LDAP UID (Roman Petrov)
|
||||||
|
- Show additions/deletions stats on merge request diff
|
||||||
|
- Remove footer text in emails (Zeger-Jan van de Weg)
|
||||||
|
- Ensure code blocks are properly highlighted after a note is updated
|
||||||
|
- Fix wrong access level badge on MR comments
|
||||||
|
- Hide password in the service settings form
|
||||||
|
- Move CI web hooks page to project settings area
|
||||||
|
- Fix User Identities API. It now allows you to properly create or update user's identities.
|
||||||
|
- Add user preference to change layout width (Peter Göbel)
|
||||||
|
- Use commit status in merge request widget as preferred source of CI status
|
||||||
|
- Integrate CI commit and build pages into project pages
|
||||||
|
- Move CI services page to project settings area
|
||||||
|
- Add "Quick Submit" behavior to input fields throughout the application. Use
|
||||||
|
Cmd+Enter on Mac and Ctrl+Enter on Windows/Linux.
|
||||||
|
- Fix position of hamburger in header for smaller screens (Han Loong Liauw)
|
||||||
|
- Fix bug where Emojis in Markdown would truncate remaining text (Sakata Sinji)
|
||||||
|
- Persist filters when sorting on admin user page (Jerry Lukins)
|
||||||
|
- Allow dashboard and group issues/MRs to be filtered by label
|
||||||
|
- Add spellcheck=false to certain input fields
|
||||||
|
- Invalidate stored service password if the endpoint URL is changed
|
||||||
|
- Project names are not fully shown if group name is too big, even on group page view
|
||||||
|
- Apply new design for Files page
|
||||||
|
- Add "New Page" button to Wiki Pages tab (Stan Hu)
|
||||||
|
- Only render 404 page from /public
|
||||||
|
- Hide passwords from services API (Alex Lossent)
|
||||||
|
- Fix: Images cannot show when projects' path was changed
|
||||||
|
- Let gitlab-git-http-server generate and serve 'git archive' downloads
|
||||||
|
- Optimize query when filtering on issuables (Zeger-Jan van de Weg)
|
||||||
|
- Fix padding of outdated discussion item.
|
||||||
|
- Animate the logo on hover
|
||||||
|
|
||||||
|
v 8.0.5
|
||||||
|
- Correct lookup-by-email for LDAP logins
|
||||||
|
- Fix loading spinner sometimes not being hidden on Merge Request tab switches
|
||||||
|
|
||||||
|
v 8.0.4
|
||||||
|
- Fix Message-ID header to be RFC 2111-compliant to prevent e-mails being dropped (Stan Hu)
|
||||||
|
- Fix referrals for :back and relative URL installs
|
||||||
|
- Fix anchors to comments in diffs
|
||||||
|
- Remove CI token from build traces
|
||||||
|
- Fix "Assign All" button on Runner admin page
|
||||||
|
- Fix search in Files
|
||||||
|
- Add full project namespace to payload of system webhooks (Ricardo Band)
|
||||||
|
|
||||||
|
v 8.0.3
|
||||||
|
- Fix URL shown in Slack notifications
|
||||||
|
- Fix bug where projects would appear to be stuck in the forked import state (Stan Hu)
|
||||||
|
- Fix Error 500 in creating merge requests with > 1000 diffs (Stan Hu)
|
||||||
|
- Add work_in_progress key to MR web hooks (Ben Boeckel)
|
||||||
|
|
||||||
v 8.0.2
|
v 8.0.2
|
||||||
- Fix default avatar not rendering in network graph (Stan Hu)
|
- Fix default avatar not rendering in network graph (Stan Hu)
|
||||||
- Skip check_initd_configured_correctly on omnibus installs
|
- Skip check_initd_configured_correctly on omnibus installs
|
||||||
|
@ -12,8 +111,10 @@ v 8.0.2
|
||||||
- Use standard Markdown font in Markdown preview instead of fixed-width font (Stan Hu)
|
- Use standard Markdown font in Markdown preview instead of fixed-width font (Stan Hu)
|
||||||
- Fix Reply by email for non-UTF-8 messages.
|
- Fix Reply by email for non-UTF-8 messages.
|
||||||
- Add option to use StartTLS with Reply by email IMAP server.
|
- Add option to use StartTLS with Reply by email IMAP server.
|
||||||
|
- Allow AWS S3 Server-Side Encryption with Amazon S3-Managed Keys for backups (Paul Beattie)
|
||||||
|
|
||||||
v 8.0.1
|
v 8.0.1
|
||||||
|
- Remove git refs used internally by GitLab from network graph (Stan Hu)
|
||||||
- Improve CI migration procedure and documentation
|
- Improve CI migration procedure and documentation
|
||||||
|
|
||||||
v 8.0.0
|
v 8.0.0
|
||||||
|
@ -77,6 +178,8 @@ v 8.0.0
|
||||||
- Webhook for issue now contains repository field (Jungkook Park)
|
- Webhook for issue now contains repository field (Jungkook Park)
|
||||||
- Add ability to add custom text to the help page (Jeroen van Baarsen)
|
- Add ability to add custom text to the help page (Jeroen van Baarsen)
|
||||||
- Add pg_schema to backup config
|
- Add pg_schema to backup config
|
||||||
|
- Fix references to target project issues in Merge Requests markdown preview and textareas (Francesco Levorato)
|
||||||
|
- Redirect from incorrectly cased group or project path to correct one (Francesco Levorato)
|
||||||
- Removed API calls from CE to CI
|
- Removed API calls from CE to CI
|
||||||
|
|
||||||
v 7.14.3
|
v 7.14.3
|
||||||
|
|
298
CHANGELOG-CI
298
CHANGELOG-CI
|
@ -1,298 +0,0 @@
|
||||||
v7.14.0 (unreleased)
|
|
||||||
- Truncate commit messages after subject line in table
|
|
||||||
- Adjust CI config to support Docker executors
|
|
||||||
- Added Application Settings
|
|
||||||
- Randomize test database for CI tests
|
|
||||||
- Make YAML validation stricter
|
|
||||||
- Use avatars received from GitLab
|
|
||||||
- Refactor GitLab API usage to use either access_token or private_token depending on what was specified during login
|
|
||||||
- Allow to use access_token for API requests
|
|
||||||
- Fix project API listing returning empty list when first projects are not added to CI
|
|
||||||
- Allow to define variables from YAML
|
|
||||||
- Added support for CI skipped status
|
|
||||||
- Fix broken yaml error saving
|
|
||||||
- Add committed_at to commits to properly order last commit (the force push issue)
|
|
||||||
- Rename type(s) to stage(s)
|
|
||||||
- Fix navigation icons
|
|
||||||
- Add missing stage when doing retry
|
|
||||||
- Require variable keys to be not-empty and unique
|
|
||||||
- Fix variable saving issue
|
|
||||||
- Display variable saving errors in variables page not the project's
|
|
||||||
- Added Build Triggers API
|
|
||||||
|
|
||||||
v7.13.1
|
|
||||||
- Fix: user could steal specific runner
|
|
||||||
- Fix: don't send notifications for jobs with allow_failure set
|
|
||||||
- Fix invalid link to doc.gitlab.com
|
|
||||||
|
|
||||||
v7.13.0
|
|
||||||
- Fix inline edit runner-description
|
|
||||||
- Allow to specify image and services in yml that can be used with docker
|
|
||||||
- Fix: No runner notification can see managers only
|
|
||||||
- Fix service testing for slack
|
|
||||||
- Ability to cancel all builds in commit at once
|
|
||||||
- Disable colors in rake tasks automatically (if IO is not a TTY)
|
|
||||||
- Implemented "rake env:info". Rake task to receive system information
|
|
||||||
- Fix coverage calculation on commit page
|
|
||||||
- Enhance YAML validation
|
|
||||||
- Redirect back after authorization
|
|
||||||
- Change favicon
|
|
||||||
- Refactoring: Get rid of private_token usage in the frontend.
|
|
||||||
- Allow to specify allow_failure for job
|
|
||||||
- Build traces is stored in the file instead of database
|
|
||||||
- Make the builds path configurable
|
|
||||||
- Disable link to runner if it's not assigned to specific project
|
|
||||||
- Store all secrets in config/secrets.yml
|
|
||||||
- Encrypt variables
|
|
||||||
- Allow to specify flexible list of types in yaml
|
|
||||||
|
|
||||||
v7.12.2
|
|
||||||
- Revert: Runner without tag should pick builds without tag only
|
|
||||||
|
|
||||||
v7.12.1
|
|
||||||
- Runner without tag should pick builds without tag only
|
|
||||||
- Explicit error in the GitLab when commit not found.
|
|
||||||
- Fix: lint with relative subpath
|
|
||||||
- Update webhook example
|
|
||||||
- Improved Lint stability
|
|
||||||
- Add warning when .gitlab-ci.yml not found
|
|
||||||
- Improved validation for .gitlab-ci.yml
|
|
||||||
- Fix list of branches in only section
|
|
||||||
- Fix "Status Badge" button
|
|
||||||
|
|
||||||
v7.12.0
|
|
||||||
- Endless scroll on the dashboard
|
|
||||||
- Add notification if there are no runners
|
|
||||||
- Fix pagination on dashboard
|
|
||||||
- Remove ID column from runners list in the admin area
|
|
||||||
- Increase default timeout for builds to 60 minutes
|
|
||||||
- Using .gitlab-ci.yml file instead of jobs
|
|
||||||
- Link to the runner from the build page for admin user
|
|
||||||
- Ability to set secret variables for runner
|
|
||||||
- Dont retry build when push same commit in same ref twice
|
|
||||||
- Admin area: show amount of runners with last contact less than a minute ago
|
|
||||||
- Fix re-adding project with the same name but different gitlab_id
|
|
||||||
- Implementation of Lint (.gitlab-ci.yml validation tool)
|
|
||||||
- Updated rails to 4.1.11
|
|
||||||
- API fix: project create call
|
|
||||||
- Link to web-editor with .gitlab-ci.yml
|
|
||||||
- Updated examples in the documentation
|
|
||||||
|
|
||||||
v7.11.0
|
|
||||||
- Deploy Jobs API calls
|
|
||||||
- Projects search on dashboard page
|
|
||||||
- Improved runners page
|
|
||||||
- Running and Pending tabs on admin builds page
|
|
||||||
- Fix [ci skip] tag, so you can skip CI triggering now
|
|
||||||
- Add HipChat notifications
|
|
||||||
- Clean up project advanced settings.
|
|
||||||
- Add a GitLab project path parameter to the project API
|
|
||||||
- Remove projects IDs from dashboard
|
|
||||||
- UI fix: Remove page headers from the admin area
|
|
||||||
- Improve Email templates
|
|
||||||
- Add backup/restore utility
|
|
||||||
- Coordinator stores information(version, platform, revision, etc.) about runners.
|
|
||||||
- Fixed pagination on dashboard
|
|
||||||
- Public accessible build and commit pages of public projects
|
|
||||||
- Fix vulnerability in the API when MySQL is used
|
|
||||||
|
|
||||||
v7.10.1
|
|
||||||
- Fix failing migration when update to 7.10 from 7.8 and older versions
|
|
||||||
|
|
||||||
sidekiq_wirker_fix
|
|
||||||
- added sidekiq.yml
|
|
||||||
- integrated in script/background_jobs
|
|
||||||
v7.10.0
|
|
||||||
- Projects sorting by last commit date
|
|
||||||
- Add project search at runner page
|
|
||||||
- Fix GitLab and CI projects collision
|
|
||||||
- Events for admin
|
|
||||||
- Events per projects
|
|
||||||
- Search for runners in admin area
|
|
||||||
- UI improvements: created separated admin section, removed useless project show page
|
|
||||||
- Runners sorting in admin area (by id)
|
|
||||||
- Remove protected_attributes gem
|
|
||||||
- Skip commit creation if there is no appropriate job
|
|
||||||
|
|
||||||
v7.9.3
|
|
||||||
- Contains no changes
|
|
||||||
- Developers can cancel and retry jobs
|
|
||||||
|
|
||||||
v7.9.2
|
|
||||||
- [Security] Already existing projects should not be served by shared runners
|
|
||||||
- Ability to run deploy job without test jobs (every push will trigger deploy job)
|
|
||||||
|
|
||||||
v7.9.1
|
|
||||||
- [Security] Adding explicit is_shared parameter to runner
|
|
||||||
- [Security] By default new projects are not served by shared runners
|
|
||||||
|
|
||||||
v7.9.0
|
|
||||||
- Reset user session if token is invalid
|
|
||||||
- Runner delete api endpoint
|
|
||||||
- Fix bug about showing edit button on commit page if user does not have permissions
|
|
||||||
- Allow to pass description and tag list during Runner's registration
|
|
||||||
- Added api for project jobs
|
|
||||||
- Implementation of deploy jobs after all parallel jobs(tests).
|
|
||||||
- Add scroll up/down buttons for better mobile experience with large build traces
|
|
||||||
- Add runner last contact (Kamil Trzciński)
|
|
||||||
- Allow to pause runners - when paused runner will not receive any new build (Kamil Trzciński)
|
|
||||||
- Add brakeman (security scanner for Ruby on Rails)
|
|
||||||
- Changed a color of the canceled builds
|
|
||||||
- Fix of show the same commits in different branches
|
|
||||||
|
|
||||||
v7.8.2
|
|
||||||
- Fix the broken build failed email
|
|
||||||
- Notify only pusher instead of commiter
|
|
||||||
|
|
||||||
v7.8.0
|
|
||||||
- Fix OAuth login with GitLab installed in relative URL
|
|
||||||
- GitLab CI has same version as GitLab since now
|
|
||||||
- Allow to pass description and tag list during Runner's registration (Kamil Trzciński)
|
|
||||||
- Update documentation (API, Install, Update)
|
|
||||||
- Skip refs field supports for wildcard branch name (ex. feature/*)
|
|
||||||
- Migrate E-mail notification to Services menu (Kamil Trzciński)
|
|
||||||
- Added Slack notifications (Kamil Trzciński)
|
|
||||||
- Disable turbolink on links pointing out to GitLab server
|
|
||||||
- Add test coverage parsing example for pytest-cov
|
|
||||||
- Upgrade raindrops gem
|
|
||||||
|
|
||||||
v5.4.2
|
|
||||||
- Fix exposure of project token via build data
|
|
||||||
|
|
||||||
v5.4.1
|
|
||||||
- Fix 500 if on builds page if build has no job
|
|
||||||
- Truncate project token from build trace
|
|
||||||
- Allow users with access to project see build trace
|
|
||||||
|
|
||||||
v5.4.0 (Requires GitLab 7.7)
|
|
||||||
- Fixed 500 error for badge if build is pending
|
|
||||||
- Non-admin users can now register specific runners for their projects
|
|
||||||
- Project specific runners page which users can access
|
|
||||||
- Remove progress output from schedule_builds cron job
|
|
||||||
- Fix schedule_builds rake task
|
|
||||||
- Fix test webhook button
|
|
||||||
- Job can be branch specific or tag specific or both
|
|
||||||
- Shared runners builds projects which are not assigned to specific ones
|
|
||||||
- Job can be runner specific through tags
|
|
||||||
- Runner have tags
|
|
||||||
- Move job settings to separate page
|
|
||||||
- Add authorization level managing projects
|
|
||||||
- OAuth authentication via GitLab.
|
|
||||||
|
|
||||||
v5.3
|
|
||||||
- Remove annoying 'Done' message from schedule_builds cron job
|
|
||||||
- Fix a style issue with the navbar
|
|
||||||
- Skip CSRF check on the project's build page
|
|
||||||
- Fix showing wrong build script on admin projects page
|
|
||||||
- Add branch and commit message to build result emails
|
|
||||||
|
|
||||||
v5.2
|
|
||||||
- Improve performance by adding new indicies
|
|
||||||
- Separate Commit logic from Build logic in prep for Parallel Builds
|
|
||||||
- Parallel builds
|
|
||||||
- You can have multiple build scripts per project
|
|
||||||
|
|
||||||
v5.1
|
|
||||||
- Registration token and runner token are named differently
|
|
||||||
- Redirect to previous page after sign-in
|
|
||||||
- Dont show archived projects
|
|
||||||
- Add support for skip branches from build
|
|
||||||
- Add coverage parsing feature
|
|
||||||
- Update rails to 4.0.10
|
|
||||||
- Look for a REVISION file before running `git log`
|
|
||||||
- All builds page for admin
|
|
||||||
|
|
||||||
v5.0.1
|
|
||||||
- Update rails to 4.0.5
|
|
||||||
|
|
||||||
v5.0.0
|
|
||||||
- Set build timeout in minutes
|
|
||||||
- Web Hooks for builds
|
|
||||||
- Nprogress bar
|
|
||||||
- Remove extra spaces in build script
|
|
||||||
- Requires runner v5
|
|
||||||
* All script commands executed as one file
|
|
||||||
* Cancel button works correctly now
|
|
||||||
* Runner stability increased
|
|
||||||
* Timeout applies to build now instead of line of script
|
|
||||||
|
|
||||||
v4.3.0
|
|
||||||
- Refactor build js
|
|
||||||
- Redirect to build page with sha + bid if build id is not provided
|
|
||||||
- Update rails to 4.0.3
|
|
||||||
- Restyle project settings page
|
|
||||||
- Improve help page
|
|
||||||
- Replaced puma with unicorn
|
|
||||||
- Improved init.d script
|
|
||||||
- Add submodule init to default build script for new projects
|
|
||||||
|
|
||||||
v4.2.0
|
|
||||||
- Build duration chart
|
|
||||||
- Bootstrap 3 with responsive UI
|
|
||||||
- Improved init.d script
|
|
||||||
- Refactoring
|
|
||||||
- Changed http codes for POST /projects/:id/build action
|
|
||||||
- Turbolinks
|
|
||||||
|
|
||||||
v4.1.0
|
|
||||||
- Rails 4
|
|
||||||
- Click on build branch to see other builds for this branch
|
|
||||||
- Email notifications (Jeroen Knoops)
|
|
||||||
|
|
||||||
v4.0.0
|
|
||||||
- Shared runners (no need to add runner to every project)
|
|
||||||
- Admin area (only available for GitLab admins)
|
|
||||||
- Hide all runners management into admin area
|
|
||||||
- Use http cloning for builds instead of deploy keys
|
|
||||||
- Allow choose between git clone and git fetch when get code for build
|
|
||||||
- Make build timeout actually works
|
|
||||||
- Requires GitLab 6.3 or higher
|
|
||||||
- GitLab CI settings go to GitLab project via api on creation
|
|
||||||
|
|
||||||
v3.2.0
|
|
||||||
- Limit visibility of projects by gitlab authorized projects
|
|
||||||
- Use one page for both gitlab and gitlab-ci projects
|
|
||||||
|
|
||||||
v3.1.0
|
|
||||||
- Login with both username, email or LDAP credentials (if GitLab 6.0+)
|
|
||||||
- Retry build button functionality
|
|
||||||
- UI fixes for resolution 1366px and lower
|
|
||||||
- Fix gravatar ssl warning
|
|
||||||
|
|
||||||
v3.0.0
|
|
||||||
- Build running functionality extracted in gitlab-ci-runner
|
|
||||||
- Added API for runners and builds
|
|
||||||
- Redesigned application
|
|
||||||
- Added charts
|
|
||||||
- Use GitLab auth
|
|
||||||
- Add projects via UI with few clicks
|
|
||||||
|
|
||||||
v2.2.0
|
|
||||||
- replaced unicorn with puma
|
|
||||||
- replaced grit with rugged
|
|
||||||
- Runner.rb more transactional safe now
|
|
||||||
- updated rails to 3.2.13
|
|
||||||
- updated devise to 2.2
|
|
||||||
- fixed issue when build left in running status if exception triggered
|
|
||||||
- rescue build timeout correctly
|
|
||||||
- badge helper with markdown & html
|
|
||||||
- increased test coverage to 85%
|
|
||||||
|
|
||||||
v2.1.0
|
|
||||||
- Removed horizontal scroll for build trace
|
|
||||||
- new status badges
|
|
||||||
- better encode
|
|
||||||
- added several CI_* env variables
|
|
||||||
|
|
||||||
v2.0.0
|
|
||||||
- Replace resque with sidekiq
|
|
||||||
- Run only one build at time per project
|
|
||||||
- Added whenever for schedule jobs
|
|
||||||
|
|
||||||
v1.2.0
|
|
||||||
- Added Github web hook support
|
|
||||||
- Added build schedule
|
|
||||||
|
|
||||||
v1.1.0
|
|
||||||
- Added JSON response for builds status
|
|
||||||
- Compatible with GitLab v4.0.0
|
|
1
GITLAB_GIT_HTTP_SERVER_VERSION
Normal file
1
GITLAB_GIT_HTTP_SERVER_VERSION
Normal file
|
@ -0,0 +1 @@
|
||||||
|
0.3.0
|
73
Gemfile
73
Gemfile
|
@ -1,13 +1,5 @@
|
||||||
source "https://rubygems.org"
|
source "https://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', '4.1.12'
|
gem 'rails', '4.1.12'
|
||||||
|
|
||||||
# Specify a sprockets version due to security issue
|
# Specify a sprockets version due to security issue
|
||||||
|
@ -22,20 +14,20 @@ gem "mysql2", '~> 0.3.16', group: :mysql
|
||||||
gem "pg", '~> 0.18.2', group: :postgres
|
gem "pg", '~> 0.18.2', group: :postgres
|
||||||
|
|
||||||
# Authentication libraries
|
# Authentication libraries
|
||||||
gem "devise", '~> 3.5.2'
|
gem 'devise', '~> 3.5.2'
|
||||||
gem "devise-async", '~> 0.9.0'
|
gem 'devise-async', '~> 0.9.0'
|
||||||
gem 'omniauth', "~> 1.2.2"
|
|
||||||
gem 'omniauth-google-oauth2', '~> 0.2.5'
|
|
||||||
gem 'omniauth-twitter', '~> 1.0.1'
|
|
||||||
gem 'omniauth-github', '~> 1.1.1'
|
|
||||||
gem 'omniauth-shibboleth', '~> 1.1.1'
|
|
||||||
gem 'omniauth-kerberos', '~> 0.2.0', group: :kerberos
|
|
||||||
gem 'omniauth-gitlab', '~> 1.0.0'
|
|
||||||
gem 'omniauth-bitbucket', '~> 0.0.2'
|
|
||||||
gem 'omniauth-saml', '~> 1.4.0'
|
|
||||||
gem 'doorkeeper', '~> 2.1.3'
|
gem 'doorkeeper', '~> 2.1.3'
|
||||||
|
gem 'omniauth', '~> 1.2.2'
|
||||||
|
gem 'omniauth-bitbucket', '~> 0.0.2'
|
||||||
|
gem 'omniauth-github', '~> 1.1.1'
|
||||||
|
gem 'omniauth-gitlab', '~> 1.0.0'
|
||||||
|
gem 'omniauth-google-oauth2', '~> 0.2.0'
|
||||||
|
gem 'omniauth-kerberos', '~> 0.3.0', group: :kerberos
|
||||||
|
gem 'omniauth-saml', '~> 1.4.0'
|
||||||
|
gem 'omniauth-shibboleth', '~> 1.2.0'
|
||||||
|
gem 'omniauth-twitter', '~> 1.2.0'
|
||||||
gem 'omniauth_crowd'
|
gem 'omniauth_crowd'
|
||||||
gem "rack-oauth2", "~> 1.0.5"
|
gem 'rack-oauth2', '~> 1.0.5'
|
||||||
|
|
||||||
# Two-factor authentication
|
# Two-factor authentication
|
||||||
gem 'devise-two-factor', '~> 2.0.0'
|
gem 'devise-two-factor', '~> 2.0.0'
|
||||||
|
@ -47,7 +39,7 @@ gem "browser", '~> 1.0.0'
|
||||||
|
|
||||||
# Extracting information from a git repository
|
# Extracting information from a git repository
|
||||||
# Provide access to Gitlab::Git library
|
# Provide access to Gitlab::Git library
|
||||||
gem "gitlab_git", '~> 7.2.15'
|
gem "gitlab_git", '~> 7.2.19'
|
||||||
|
|
||||||
# LDAP Auth
|
# LDAP Auth
|
||||||
# GitLab fork with several improvements to original library. For full list of changes
|
# GitLab fork with several improvements to original library. For full list of changes
|
||||||
|
@ -65,9 +57,9 @@ gem 'gollum-lib', '~> 4.0.2'
|
||||||
gem "gitlab-linguist", "~> 3.0.1", require: "linguist"
|
gem "gitlab-linguist", "~> 3.0.1", require: "linguist"
|
||||||
|
|
||||||
# API
|
# API
|
||||||
gem "grape", "~> 0.6.1"
|
gem 'grape', '~> 0.6.1'
|
||||||
gem "grape-entity", "~> 0.4.2"
|
gem 'grape-entity', '~> 0.4.2'
|
||||||
gem 'rack-cors', '~> 0.2.9', require: 'rack/cors'
|
gem 'rack-cors', '~> 0.4.0', require: 'rack/cors'
|
||||||
|
|
||||||
# Format dates and times
|
# Format dates and times
|
||||||
# based on human-friendly examples
|
# based on human-friendly examples
|
||||||
|
@ -77,10 +69,10 @@ gem "stamp", '~> 0.5.0'
|
||||||
gem 'enumerize', '~> 0.7.0'
|
gem 'enumerize', '~> 0.7.0'
|
||||||
|
|
||||||
# Pagination
|
# Pagination
|
||||||
gem "kaminari", "~> 0.15.1"
|
gem "kaminari", "~> 0.16.3"
|
||||||
|
|
||||||
# HAML
|
# HAML
|
||||||
gem "haml-rails", '~> 0.5.3'
|
gem "haml-rails", '~> 0.9.0'
|
||||||
|
|
||||||
# Files attachments
|
# Files attachments
|
||||||
gem "carrierwave", '~> 0.9.0'
|
gem "carrierwave", '~> 0.9.0'
|
||||||
|
@ -102,7 +94,7 @@ gem "seed-fu", '~> 2.3.5'
|
||||||
gem 'html-pipeline', '~> 1.11.0'
|
gem 'html-pipeline', '~> 1.11.0'
|
||||||
gem 'task_list', '~> 1.0.2', require: 'task_list/railtie'
|
gem 'task_list', '~> 1.0.2', require: 'task_list/railtie'
|
||||||
gem 'github-markup', '~> 1.3.1'
|
gem 'github-markup', '~> 1.3.1'
|
||||||
gem 'redcarpet', '~> 3.3.2'
|
gem 'redcarpet', '~> 3.3.3'
|
||||||
gem 'RedCloth', '~> 4.2.9'
|
gem 'RedCloth', '~> 4.2.9'
|
||||||
gem 'rdoc', '~>3.6'
|
gem 'rdoc', '~>3.6'
|
||||||
gem 'org-ruby', '~> 0.9.12'
|
gem 'org-ruby', '~> 0.9.12'
|
||||||
|
@ -121,12 +113,13 @@ end
|
||||||
|
|
||||||
# State machine
|
# State machine
|
||||||
gem "state_machine", '~> 1.2.0'
|
gem "state_machine", '~> 1.2.0'
|
||||||
|
# Run events after state machine commits
|
||||||
|
gem 'after_commit_queue'
|
||||||
|
|
||||||
# Issue tags
|
# Issue tags
|
||||||
gem 'acts-as-taggable-on', '~> 3.4'
|
gem 'acts-as-taggable-on', '~> 3.4'
|
||||||
|
|
||||||
# Background jobs
|
# Background jobs
|
||||||
gem 'slim', '~> 2.0.2'
|
|
||||||
gem 'sinatra', '~> 1.4.4', require: nil
|
gem 'sinatra', '~> 1.4.4', require: nil
|
||||||
gem 'sidekiq', '3.3.0'
|
gem 'sidekiq', '3.3.0'
|
||||||
gem 'sidetiq', '~> 0.6.3'
|
gem 'sidetiq', '~> 0.6.3'
|
||||||
|
@ -149,7 +142,7 @@ gem 'version_sorter', '~> 2.0.0'
|
||||||
gem "redis-rails", '~> 4.0.0'
|
gem "redis-rails", '~> 4.0.0'
|
||||||
|
|
||||||
# Campfire integration
|
# Campfire integration
|
||||||
gem 'tinder', '~> 1.9.2'
|
gem 'tinder', '~> 1.10.0'
|
||||||
|
|
||||||
# HipChat integration
|
# HipChat integration
|
||||||
gem 'hipchat', '~> 1.5.0'
|
gem 'hipchat', '~> 1.5.0'
|
||||||
|
@ -161,7 +154,7 @@ gem "gitlab-flowdock-git-hook", "~> 1.0.1"
|
||||||
gem "gemnasium-gitlab-service", "~> 0.2"
|
gem "gemnasium-gitlab-service", "~> 0.2"
|
||||||
|
|
||||||
# Slack integration
|
# Slack integration
|
||||||
gem "slack-notifier", "~> 1.0.0"
|
gem "slack-notifier", "~> 1.2.0"
|
||||||
|
|
||||||
# Asana integration
|
# Asana integration
|
||||||
gem 'asana', '~> 0.0.6'
|
gem 'asana', '~> 0.0.6'
|
||||||
|
@ -195,7 +188,7 @@ gem 'charlock_holmes', '~> 0.6.9.4'
|
||||||
|
|
||||||
gem "sass-rails", '~> 4.0.5'
|
gem "sass-rails", '~> 4.0.5'
|
||||||
gem "coffee-rails", '~> 4.1.0'
|
gem "coffee-rails", '~> 4.1.0'
|
||||||
gem "uglifier", '~> 2.3.2'
|
gem "uglifier", '~> 2.7.2'
|
||||||
gem 'turbolinks', '~> 2.5.0'
|
gem 'turbolinks', '~> 2.5.0'
|
||||||
gem 'jquery-turbolinks', '~> 2.0.1'
|
gem 'jquery-turbolinks', '~> 2.0.1'
|
||||||
|
|
||||||
|
@ -223,6 +216,9 @@ group :development do
|
||||||
gem 'quiet_assets', '~> 1.0.2'
|
gem 'quiet_assets', '~> 1.0.2'
|
||||||
gem 'rack-mini-profiler', '~> 0.9.0', require: false
|
gem 'rack-mini-profiler', '~> 0.9.0', require: false
|
||||||
gem 'rerun', '~> 0.10.0'
|
gem 'rerun', '~> 0.10.0'
|
||||||
|
gem 'bullet', require: false
|
||||||
|
gem 'active_record_query_trace', require: false
|
||||||
|
gem 'rack-lineprof', platform: :mri
|
||||||
|
|
||||||
# Better errors handler
|
# Better errors handler
|
||||||
gem 'better_errors', '~> 1.0.1'
|
gem 'better_errors', '~> 1.0.1'
|
||||||
|
@ -268,6 +264,8 @@ group :development, :test do
|
||||||
gem 'rubocop', '~> 0.28.0', require: false
|
gem 'rubocop', '~> 0.28.0', require: false
|
||||||
gem 'coveralls', '~> 0.8.2', require: false
|
gem 'coveralls', '~> 0.8.2', require: false
|
||||||
gem 'simplecov', '~> 0.10.0', require: false
|
gem 'simplecov', '~> 0.10.0', require: false
|
||||||
|
|
||||||
|
gem 'benchmark-ips', require: false
|
||||||
end
|
end
|
||||||
|
|
||||||
group :test do
|
group :test do
|
||||||
|
@ -287,7 +285,7 @@ gem 'newrelic-grape'
|
||||||
|
|
||||||
gem 'octokit', '~> 3.7.0'
|
gem 'octokit', '~> 3.7.0'
|
||||||
|
|
||||||
gem "mail_room", "~> 0.5.2"
|
gem "mail_room", "~> 0.6.1"
|
||||||
|
|
||||||
gem 'email_reply_parser', '~> 0.5.8'
|
gem 'email_reply_parser', '~> 0.5.8'
|
||||||
|
|
||||||
|
@ -296,19 +294,8 @@ gem 'activerecord-deprecated_finders', '~> 1.0.3'
|
||||||
gem 'activerecord-session_store', '~> 0.1.0'
|
gem 'activerecord-session_store', '~> 0.1.0'
|
||||||
gem "nested_form", '~> 0.3.2'
|
gem "nested_form", '~> 0.3.2'
|
||||||
|
|
||||||
# Scheduled
|
|
||||||
gem 'whenever', '~> 0.8.4', require: false
|
|
||||||
|
|
||||||
# OAuth
|
# OAuth
|
||||||
gem 'oauth2', '~> 1.0.0'
|
gem 'oauth2', '~> 1.0.0'
|
||||||
|
|
||||||
# Soft deletion
|
# Soft deletion
|
||||||
gem "paranoia", "~> 2.0"
|
gem "paranoia", "~> 2.0"
|
||||||
|
|
||||||
group :development, :test do
|
|
||||||
gem 'guard-rspec', '~> 4.2.0'
|
|
||||||
|
|
||||||
gem 'rb-fsevent', require: darwin_only('rb-fsevent')
|
|
||||||
gem 'growl', require: darwin_only('growl')
|
|
||||||
gem 'rb-inotify', require: linux_only('rb-inotify')
|
|
||||||
end
|
|
||||||
|
|
132
Gemfile.lock
132
Gemfile.lock
|
@ -17,6 +17,7 @@ GEM
|
||||||
activesupport (= 4.1.12)
|
activesupport (= 4.1.12)
|
||||||
builder (~> 3.1)
|
builder (~> 3.1)
|
||||||
erubis (~> 2.7.0)
|
erubis (~> 2.7.0)
|
||||||
|
active_record_query_trace (1.5)
|
||||||
activemodel (4.1.12)
|
activemodel (4.1.12)
|
||||||
activesupport (= 4.1.12)
|
activesupport (= 4.1.12)
|
||||||
builder (~> 3.1)
|
builder (~> 3.1)
|
||||||
|
@ -42,6 +43,8 @@ GEM
|
||||||
acts-as-taggable-on (3.5.0)
|
acts-as-taggable-on (3.5.0)
|
||||||
activerecord (>= 3.2, < 5)
|
activerecord (>= 3.2, < 5)
|
||||||
addressable (2.3.8)
|
addressable (2.3.8)
|
||||||
|
after_commit_queue (1.1.0)
|
||||||
|
rails (>= 3.0)
|
||||||
annotate (2.6.10)
|
annotate (2.6.10)
|
||||||
activerecord (>= 3.2, <= 4.3)
|
activerecord (>= 3.2, <= 4.3)
|
||||||
rake (~> 10.4)
|
rake (~> 10.4)
|
||||||
|
@ -64,6 +67,7 @@ GEM
|
||||||
ice_nine (~> 0.11.0)
|
ice_nine (~> 0.11.0)
|
||||||
thread_safe (~> 0.3, >= 0.3.1)
|
thread_safe (~> 0.3, >= 0.3.1)
|
||||||
bcrypt (3.1.10)
|
bcrypt (3.1.10)
|
||||||
|
benchmark-ips (2.3.0)
|
||||||
better_errors (1.0.1)
|
better_errors (1.0.1)
|
||||||
coderay (>= 1.0.0)
|
coderay (>= 1.0.0)
|
||||||
erubis (>= 2.6.6)
|
erubis (>= 2.6.6)
|
||||||
|
@ -84,6 +88,9 @@ GEM
|
||||||
terminal-table (~> 1.4)
|
terminal-table (~> 1.4)
|
||||||
browser (1.0.0)
|
browser (1.0.0)
|
||||||
builder (3.2.2)
|
builder (3.2.2)
|
||||||
|
bullet (4.14.9)
|
||||||
|
activesupport (>= 3.0.0)
|
||||||
|
uniform_notifier (~> 1.9.0)
|
||||||
byebug (6.0.2)
|
byebug (6.0.2)
|
||||||
cal-heatmap-rails (0.0.1)
|
cal-heatmap-rails (0.0.1)
|
||||||
capybara (2.4.4)
|
capybara (2.4.4)
|
||||||
|
@ -102,7 +109,6 @@ GEM
|
||||||
celluloid (0.16.0)
|
celluloid (0.16.0)
|
||||||
timers (~> 4.0.0)
|
timers (~> 4.0.0)
|
||||||
charlock_holmes (0.6.9.4)
|
charlock_holmes (0.6.9.4)
|
||||||
chronic (0.10.2)
|
|
||||||
chunky_png (1.3.4)
|
chunky_png (1.3.4)
|
||||||
cliver (0.3.2)
|
cliver (0.3.2)
|
||||||
coderay (1.1.0)
|
coderay (1.1.0)
|
||||||
|
@ -132,6 +138,7 @@ GEM
|
||||||
daemons (1.2.3)
|
daemons (1.2.3)
|
||||||
database_cleaner (1.4.1)
|
database_cleaner (1.4.1)
|
||||||
debug_inspector (0.0.2)
|
debug_inspector (0.0.2)
|
||||||
|
debugger-ruby_core_source (1.3.8)
|
||||||
default_value_for (3.0.1)
|
default_value_for (3.0.1)
|
||||||
activerecord (>= 3.2.0, < 5.0)
|
activerecord (>= 3.2.0, < 5.0)
|
||||||
descendants_tracker (0.0.4)
|
descendants_tracker (0.0.4)
|
||||||
|
@ -179,8 +186,8 @@ GEM
|
||||||
factory_girl_rails (4.3.0)
|
factory_girl_rails (4.3.0)
|
||||||
factory_girl (~> 4.3.0)
|
factory_girl (~> 4.3.0)
|
||||||
railties (>= 3.0.0)
|
railties (>= 3.0.0)
|
||||||
faraday (0.8.10)
|
faraday (0.9.2)
|
||||||
multipart-post (~> 1.2.0)
|
multipart-post (>= 1.2, < 3)
|
||||||
faraday_middleware (0.10.0)
|
faraday_middleware (0.10.0)
|
||||||
faraday (>= 0.7.4, < 0.10)
|
faraday (>= 0.7.4, < 0.10)
|
||||||
fastercsv (1.5.5)
|
fastercsv (1.5.5)
|
||||||
|
@ -276,7 +283,7 @@ GEM
|
||||||
mime-types (~> 1.19)
|
mime-types (~> 1.19)
|
||||||
gitlab_emoji (0.1.1)
|
gitlab_emoji (0.1.1)
|
||||||
gemojione (~> 2.0)
|
gemojione (~> 2.0)
|
||||||
gitlab_git (7.2.15)
|
gitlab_git (7.2.19)
|
||||||
activesupport (~> 4.0)
|
activesupport (~> 4.0)
|
||||||
charlock_holmes (~> 0.6)
|
charlock_holmes (~> 0.6)
|
||||||
gitlab-linguist (~> 3.0)
|
gitlab-linguist (~> 3.0)
|
||||||
|
@ -312,27 +319,15 @@ GEM
|
||||||
grape-entity (0.4.8)
|
grape-entity (0.4.8)
|
||||||
activesupport
|
activesupport
|
||||||
multi_json (>= 1.3.2)
|
multi_json (>= 1.3.2)
|
||||||
growl (1.0.3)
|
|
||||||
guard (2.13.0)
|
|
||||||
formatador (>= 0.2.4)
|
|
||||||
listen (>= 2.7, <= 4.0)
|
|
||||||
lumberjack (~> 1.0)
|
|
||||||
nenv (~> 0.1)
|
|
||||||
notiffany (~> 0.0)
|
|
||||||
pry (>= 0.9.12)
|
|
||||||
shellany (~> 0.0)
|
|
||||||
thor (>= 0.18.1)
|
|
||||||
guard-rspec (4.2.10)
|
|
||||||
guard (~> 2.1)
|
|
||||||
rspec (>= 2.14, < 4.0)
|
|
||||||
haml (4.0.7)
|
haml (4.0.7)
|
||||||
tilt
|
tilt
|
||||||
haml-rails (0.5.3)
|
haml-rails (0.9.0)
|
||||||
actionpack (>= 4.0.1)
|
actionpack (>= 4.0.1)
|
||||||
activesupport (>= 4.0.1)
|
activesupport (>= 4.0.1)
|
||||||
haml (>= 3.1, < 5.0)
|
haml (>= 4.0.6, < 5.0)
|
||||||
|
html2haml (>= 1.0.1)
|
||||||
railties (>= 4.0.1)
|
railties (>= 4.0.1)
|
||||||
hashie (2.1.2)
|
hashie (3.4.2)
|
||||||
highline (1.6.21)
|
highline (1.6.21)
|
||||||
hike (1.2.3)
|
hike (1.2.3)
|
||||||
hipchat (1.5.2)
|
hipchat (1.5.2)
|
||||||
|
@ -342,6 +337,11 @@ GEM
|
||||||
html-pipeline (1.11.0)
|
html-pipeline (1.11.0)
|
||||||
activesupport (>= 2)
|
activesupport (>= 2)
|
||||||
nokogiri (~> 1.4)
|
nokogiri (~> 1.4)
|
||||||
|
html2haml (2.0.0)
|
||||||
|
erubis (~> 2.7.0)
|
||||||
|
haml (~> 4.0.0)
|
||||||
|
nokogiri (~> 1.6.0)
|
||||||
|
ruby_parser (~> 3.5)
|
||||||
http-cookie (1.0.2)
|
http-cookie (1.0.2)
|
||||||
domain_name (~> 0.5)
|
domain_name (~> 0.5)
|
||||||
http_parser.rb (0.5.3)
|
http_parser.rb (0.5.3)
|
||||||
|
@ -367,7 +367,7 @@ GEM
|
||||||
railties (>= 3.2.16)
|
railties (>= 3.2.16)
|
||||||
json (1.8.3)
|
json (1.8.3)
|
||||||
jwt (1.5.1)
|
jwt (1.5.1)
|
||||||
kaminari (0.15.1)
|
kaminari (0.16.3)
|
||||||
actionpack (>= 3.0.0)
|
actionpack (>= 3.0.0)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
kgio (2.9.3)
|
kgio (2.9.3)
|
||||||
|
@ -379,12 +379,11 @@ GEM
|
||||||
celluloid (~> 0.16.0)
|
celluloid (~> 0.16.0)
|
||||||
rb-fsevent (>= 0.9.3)
|
rb-fsevent (>= 0.9.3)
|
||||||
rb-inotify (>= 0.9)
|
rb-inotify (>= 0.9)
|
||||||
lumberjack (1.0.9)
|
|
||||||
macaddr (1.7.1)
|
macaddr (1.7.1)
|
||||||
systemu (~> 2.6.2)
|
systemu (~> 2.6.2)
|
||||||
mail (2.6.3)
|
mail (2.6.3)
|
||||||
mime-types (>= 1.16, < 3)
|
mime-types (>= 1.16, < 3)
|
||||||
mail_room (0.5.2)
|
mail_room (0.6.1)
|
||||||
method_source (0.8.2)
|
method_source (0.8.2)
|
||||||
mime-types (1.25.1)
|
mime-types (1.25.1)
|
||||||
mimemagic (0.3.0)
|
mimemagic (0.3.0)
|
||||||
|
@ -393,9 +392,8 @@ GEM
|
||||||
mousetrap-rails (1.4.6)
|
mousetrap-rails (1.4.6)
|
||||||
multi_json (1.11.2)
|
multi_json (1.11.2)
|
||||||
multi_xml (0.5.5)
|
multi_xml (0.5.5)
|
||||||
multipart-post (1.2.0)
|
multipart-post (2.0.0)
|
||||||
mysql2 (0.3.20)
|
mysql2 (0.3.20)
|
||||||
nenv (0.2.0)
|
|
||||||
nested_form (0.3.2)
|
nested_form (0.3.2)
|
||||||
net-ldap (0.11)
|
net-ldap (0.11)
|
||||||
net-scp (1.2.1)
|
net-scp (1.2.1)
|
||||||
|
@ -408,9 +406,6 @@ GEM
|
||||||
newrelic_rpm (3.9.4.245)
|
newrelic_rpm (3.9.4.245)
|
||||||
nokogiri (1.6.6.2)
|
nokogiri (1.6.6.2)
|
||||||
mini_portile (~> 0.6.0)
|
mini_portile (~> 0.6.0)
|
||||||
notiffany (0.0.7)
|
|
||||||
nenv (~> 0.1)
|
|
||||||
shellany (~> 0.0)
|
|
||||||
nprogress-rails (0.1.2.3)
|
nprogress-rails (0.1.2.3)
|
||||||
oauth (0.4.7)
|
oauth (0.4.7)
|
||||||
oauth2 (1.0.0)
|
oauth2 (1.0.0)
|
||||||
|
@ -437,7 +432,7 @@ GEM
|
||||||
omniauth-google-oauth2 (0.2.6)
|
omniauth-google-oauth2 (0.2.6)
|
||||||
omniauth (> 1.0)
|
omniauth (> 1.0)
|
||||||
omniauth-oauth2 (~> 1.1)
|
omniauth-oauth2 (~> 1.1)
|
||||||
omniauth-kerberos (0.2.0)
|
omniauth-kerberos (0.3.0)
|
||||||
omniauth-multipassword
|
omniauth-multipassword
|
||||||
timfel-krb5-auth (~> 0.8)
|
timfel-krb5-auth (~> 0.8)
|
||||||
omniauth-multipassword (0.4.2)
|
omniauth-multipassword (0.4.2)
|
||||||
|
@ -451,11 +446,11 @@ GEM
|
||||||
omniauth-saml (1.4.1)
|
omniauth-saml (1.4.1)
|
||||||
omniauth (~> 1.1)
|
omniauth (~> 1.1)
|
||||||
ruby-saml (~> 1.0.0)
|
ruby-saml (~> 1.0.0)
|
||||||
omniauth-shibboleth (1.1.2)
|
omniauth-shibboleth (1.2.1)
|
||||||
omniauth (>= 1.0.0)
|
omniauth (>= 1.0.0)
|
||||||
omniauth-twitter (1.0.1)
|
omniauth-twitter (1.2.1)
|
||||||
multi_json (~> 1.3)
|
json (~> 1.3)
|
||||||
omniauth-oauth (~> 1.0)
|
omniauth-oauth (~> 1.1)
|
||||||
omniauth_crowd (2.2.3)
|
omniauth_crowd (2.2.3)
|
||||||
activesupport
|
activesupport
|
||||||
nokogiri (>= 1.4.4)
|
nokogiri (>= 1.4.4)
|
||||||
|
@ -493,7 +488,11 @@ GEM
|
||||||
rack (>= 0.4)
|
rack (>= 0.4)
|
||||||
rack-attack (4.3.0)
|
rack-attack (4.3.0)
|
||||||
rack
|
rack
|
||||||
rack-cors (0.2.9)
|
rack-cors (0.4.0)
|
||||||
|
rack-lineprof (0.0.3)
|
||||||
|
rack (~> 1.5)
|
||||||
|
rblineprof (~> 0.3.6)
|
||||||
|
term-ansicolor (~> 1.3)
|
||||||
rack-mini-profiler (0.9.7)
|
rack-mini-profiler (0.9.7)
|
||||||
rack (>= 1.1.3)
|
rack (>= 1.1.3)
|
||||||
rack-mount (0.8.3)
|
rack-mount (0.8.3)
|
||||||
|
@ -532,13 +531,15 @@ GEM
|
||||||
rb-fsevent (0.9.5)
|
rb-fsevent (0.9.5)
|
||||||
rb-inotify (0.9.5)
|
rb-inotify (0.9.5)
|
||||||
ffi (>= 0.5.0)
|
ffi (>= 0.5.0)
|
||||||
|
rblineprof (0.3.6)
|
||||||
|
debugger-ruby_core_source (~> 1.3)
|
||||||
rbvmomi (1.8.2)
|
rbvmomi (1.8.2)
|
||||||
builder
|
builder
|
||||||
nokogiri (>= 1.4.1)
|
nokogiri (>= 1.4.1)
|
||||||
trollop
|
trollop
|
||||||
rdoc (3.12.2)
|
rdoc (3.12.2)
|
||||||
json (~> 1.4)
|
json (~> 1.4)
|
||||||
redcarpet (3.3.2)
|
redcarpet (3.3.3)
|
||||||
redis (3.2.1)
|
redis (3.2.1)
|
||||||
redis-actionpack (4.0.0)
|
redis-actionpack (4.0.0)
|
||||||
actionpack (~> 4)
|
actionpack (~> 4)
|
||||||
|
@ -639,7 +640,6 @@ GEM
|
||||||
sexp_processor (4.6.0)
|
sexp_processor (4.6.0)
|
||||||
sham_rack (1.3.6)
|
sham_rack (1.3.6)
|
||||||
rack
|
rack
|
||||||
shellany (0.0.1)
|
|
||||||
shoulda-matchers (2.8.0)
|
shoulda-matchers (2.8.0)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
sidekiq (3.3.0)
|
sidekiq (3.3.0)
|
||||||
|
@ -663,10 +663,7 @@ GEM
|
||||||
rack-protection (~> 1.4)
|
rack-protection (~> 1.4)
|
||||||
tilt (>= 1.3, < 3)
|
tilt (>= 1.3, < 3)
|
||||||
six (0.2.0)
|
six (0.2.0)
|
||||||
slack-notifier (1.0.0)
|
slack-notifier (1.2.1)
|
||||||
slim (2.0.3)
|
|
||||||
temple (~> 0.6.6)
|
|
||||||
tilt (>= 1.3.3, < 2.1)
|
|
||||||
slop (3.6.0)
|
slop (3.6.0)
|
||||||
spinach (0.8.10)
|
spinach (0.8.10)
|
||||||
colorize
|
colorize
|
||||||
|
@ -702,7 +699,6 @@ GEM
|
||||||
railties (>= 3.2.5, < 5)
|
railties (>= 3.2.5, < 5)
|
||||||
teaspoon-jasmine (2.2.0)
|
teaspoon-jasmine (2.2.0)
|
||||||
teaspoon (>= 1.0.0)
|
teaspoon (>= 1.0.0)
|
||||||
temple (0.6.10)
|
|
||||||
term-ansicolor (1.3.2)
|
term-ansicolor (1.3.2)
|
||||||
tins (~> 1.0)
|
tins (~> 1.0)
|
||||||
terminal-table (1.5.2)
|
terminal-table (1.5.2)
|
||||||
|
@ -718,13 +714,13 @@ GEM
|
||||||
timers (4.0.4)
|
timers (4.0.4)
|
||||||
hitimes
|
hitimes
|
||||||
timfel-krb5-auth (0.8.3)
|
timfel-krb5-auth (0.8.3)
|
||||||
tinder (1.9.4)
|
tinder (1.10.1)
|
||||||
eventmachine (~> 1.0)
|
eventmachine (~> 1.0)
|
||||||
faraday (~> 0.8.9)
|
faraday (~> 0.9.0)
|
||||||
faraday_middleware (~> 0.9)
|
faraday_middleware (~> 0.9)
|
||||||
hashie (>= 1.0, < 3)
|
hashie (>= 1.0)
|
||||||
json (~> 1.8.0)
|
json (~> 1.8.0)
|
||||||
mime-types (~> 1.19)
|
mime-types
|
||||||
multi_json (~> 1.7)
|
multi_json (~> 1.7)
|
||||||
twitter-stream (~> 0.1)
|
twitter-stream (~> 0.1)
|
||||||
tins (1.6.0)
|
tins (1.6.0)
|
||||||
|
@ -737,7 +733,7 @@ GEM
|
||||||
simple_oauth (~> 0.1.4)
|
simple_oauth (~> 0.1.4)
|
||||||
tzinfo (1.2.2)
|
tzinfo (1.2.2)
|
||||||
thread_safe (~> 0.1)
|
thread_safe (~> 0.1)
|
||||||
uglifier (2.3.3)
|
uglifier (2.7.2)
|
||||||
execjs (>= 0.3.0)
|
execjs (>= 0.3.0)
|
||||||
json (>= 1.8.0)
|
json (>= 1.8.0)
|
||||||
underscore-rails (1.4.4)
|
underscore-rails (1.4.4)
|
||||||
|
@ -751,6 +747,7 @@ GEM
|
||||||
unicorn-worker-killer (0.4.3)
|
unicorn-worker-killer (0.4.3)
|
||||||
get_process_mem (~> 0)
|
get_process_mem (~> 0)
|
||||||
unicorn (~> 4)
|
unicorn (~> 4)
|
||||||
|
uniform_notifier (1.9.0)
|
||||||
uuid (2.3.8)
|
uuid (2.3.8)
|
||||||
macaddr (~> 1.0)
|
macaddr (~> 1.0)
|
||||||
version_sorter (2.0.0)
|
version_sorter (2.0.0)
|
||||||
|
@ -767,9 +764,6 @@ GEM
|
||||||
websocket-driver (0.6.2)
|
websocket-driver (0.6.2)
|
||||||
websocket-extensions (>= 0.1.0)
|
websocket-extensions (>= 0.1.0)
|
||||||
websocket-extensions (0.1.2)
|
websocket-extensions (0.1.2)
|
||||||
whenever (0.8.4)
|
|
||||||
activesupport (>= 2.3.4)
|
|
||||||
chronic (>= 0.6.3)
|
|
||||||
wikicloth (0.8.1)
|
wikicloth (0.8.1)
|
||||||
builder
|
builder
|
||||||
expression_parser
|
expression_parser
|
||||||
|
@ -783,20 +777,24 @@ PLATFORMS
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
RedCloth (~> 4.2.9)
|
RedCloth (~> 4.2.9)
|
||||||
ace-rails-ap (~> 2.0.1)
|
ace-rails-ap (~> 2.0.1)
|
||||||
|
active_record_query_trace
|
||||||
activerecord-deprecated_finders (~> 1.0.3)
|
activerecord-deprecated_finders (~> 1.0.3)
|
||||||
activerecord-session_store (~> 0.1.0)
|
activerecord-session_store (~> 0.1.0)
|
||||||
acts-as-taggable-on (~> 3.4)
|
acts-as-taggable-on (~> 3.4)
|
||||||
addressable (~> 2.3.8)
|
addressable (~> 2.3.8)
|
||||||
|
after_commit_queue
|
||||||
annotate (~> 2.6.0)
|
annotate (~> 2.6.0)
|
||||||
asana (~> 0.0.6)
|
asana (~> 0.0.6)
|
||||||
asciidoctor (~> 1.5.2)
|
asciidoctor (~> 1.5.2)
|
||||||
attr_encrypted (~> 1.3.4)
|
attr_encrypted (~> 1.3.4)
|
||||||
awesome_print (~> 1.2.0)
|
awesome_print (~> 1.2.0)
|
||||||
|
benchmark-ips
|
||||||
better_errors (~> 1.0.1)
|
better_errors (~> 1.0.1)
|
||||||
binding_of_caller (~> 0.7.2)
|
binding_of_caller (~> 0.7.2)
|
||||||
bootstrap-sass (~> 3.0)
|
bootstrap-sass (~> 3.0)
|
||||||
brakeman (= 3.0.1)
|
brakeman (= 3.0.1)
|
||||||
browser (~> 1.0.0)
|
browser (~> 1.0.0)
|
||||||
|
bullet
|
||||||
byebug
|
byebug
|
||||||
cal-heatmap-rails (~> 0.0.1)
|
cal-heatmap-rails (~> 0.0.1)
|
||||||
capybara (~> 2.4.0)
|
capybara (~> 2.4.0)
|
||||||
|
@ -831,16 +829,14 @@ DEPENDENCIES
|
||||||
gitlab-flowdock-git-hook (~> 1.0.1)
|
gitlab-flowdock-git-hook (~> 1.0.1)
|
||||||
gitlab-linguist (~> 3.0.1)
|
gitlab-linguist (~> 3.0.1)
|
||||||
gitlab_emoji (~> 0.1)
|
gitlab_emoji (~> 0.1)
|
||||||
gitlab_git (~> 7.2.15)
|
gitlab_git (~> 7.2.19)
|
||||||
gitlab_meta (= 7.0)
|
gitlab_meta (= 7.0)
|
||||||
gitlab_omniauth-ldap (~> 1.2.1)
|
gitlab_omniauth-ldap (~> 1.2.1)
|
||||||
gollum-lib (~> 4.0.2)
|
gollum-lib (~> 4.0.2)
|
||||||
gon (~> 5.0.0)
|
gon (~> 5.0.0)
|
||||||
grape (~> 0.6.1)
|
grape (~> 0.6.1)
|
||||||
grape-entity (~> 0.4.2)
|
grape-entity (~> 0.4.2)
|
||||||
growl
|
haml-rails (~> 0.9.0)
|
||||||
guard-rspec (~> 4.2.0)
|
|
||||||
haml-rails (~> 0.5.3)
|
|
||||||
hipchat (~> 1.5.0)
|
hipchat (~> 1.5.0)
|
||||||
html-pipeline (~> 1.11.0)
|
html-pipeline (~> 1.11.0)
|
||||||
httparty (~> 0.13.3)
|
httparty (~> 0.13.3)
|
||||||
|
@ -849,9 +845,9 @@ DEPENDENCIES
|
||||||
jquery-scrollto-rails (~> 1.4.3)
|
jquery-scrollto-rails (~> 1.4.3)
|
||||||
jquery-turbolinks (~> 2.0.1)
|
jquery-turbolinks (~> 2.0.1)
|
||||||
jquery-ui-rails (~> 4.2.1)
|
jquery-ui-rails (~> 4.2.1)
|
||||||
kaminari (~> 0.15.1)
|
kaminari (~> 0.16.3)
|
||||||
letter_opener (~> 1.1.2)
|
letter_opener (~> 1.1.2)
|
||||||
mail_room (~> 0.5.2)
|
mail_room (~> 0.6.1)
|
||||||
minitest (~> 5.7.0)
|
minitest (~> 5.7.0)
|
||||||
mousetrap-rails (~> 1.4.6)
|
mousetrap-rails (~> 1.4.6)
|
||||||
mysql2 (~> 0.3.16)
|
mysql2 (~> 0.3.16)
|
||||||
|
@ -865,11 +861,11 @@ DEPENDENCIES
|
||||||
omniauth-bitbucket (~> 0.0.2)
|
omniauth-bitbucket (~> 0.0.2)
|
||||||
omniauth-github (~> 1.1.1)
|
omniauth-github (~> 1.1.1)
|
||||||
omniauth-gitlab (~> 1.0.0)
|
omniauth-gitlab (~> 1.0.0)
|
||||||
omniauth-google-oauth2 (~> 0.2.5)
|
omniauth-google-oauth2 (~> 0.2.0)
|
||||||
omniauth-kerberos (~> 0.2.0)
|
omniauth-kerberos (~> 0.3.0)
|
||||||
omniauth-saml (~> 1.4.0)
|
omniauth-saml (~> 1.4.0)
|
||||||
omniauth-shibboleth (~> 1.1.1)
|
omniauth-shibboleth (~> 1.2.0)
|
||||||
omniauth-twitter (~> 1.0.1)
|
omniauth-twitter (~> 1.2.0)
|
||||||
omniauth_crowd
|
omniauth_crowd
|
||||||
org-ruby (~> 0.9.12)
|
org-ruby (~> 0.9.12)
|
||||||
paranoia (~> 2.0)
|
paranoia (~> 2.0)
|
||||||
|
@ -878,15 +874,14 @@ DEPENDENCIES
|
||||||
pry-rails
|
pry-rails
|
||||||
quiet_assets (~> 1.0.2)
|
quiet_assets (~> 1.0.2)
|
||||||
rack-attack (~> 4.3.0)
|
rack-attack (~> 4.3.0)
|
||||||
rack-cors (~> 0.2.9)
|
rack-cors (~> 0.4.0)
|
||||||
|
rack-lineprof
|
||||||
rack-mini-profiler (~> 0.9.0)
|
rack-mini-profiler (~> 0.9.0)
|
||||||
rack-oauth2 (~> 1.0.5)
|
rack-oauth2 (~> 1.0.5)
|
||||||
rails (= 4.1.12)
|
rails (= 4.1.12)
|
||||||
raphael-rails (~> 2.1.2)
|
raphael-rails (~> 2.1.2)
|
||||||
rb-fsevent
|
|
||||||
rb-inotify
|
|
||||||
rdoc (~> 3.6)
|
rdoc (~> 3.6)
|
||||||
redcarpet (~> 3.3.2)
|
redcarpet (~> 3.3.3)
|
||||||
redis-rails (~> 4.0.0)
|
redis-rails (~> 4.0.0)
|
||||||
request_store (~> 1.2.0)
|
request_store (~> 1.2.0)
|
||||||
rerun (~> 0.10.0)
|
rerun (~> 0.10.0)
|
||||||
|
@ -907,8 +902,7 @@ DEPENDENCIES
|
||||||
simplecov (~> 0.10.0)
|
simplecov (~> 0.10.0)
|
||||||
sinatra (~> 1.4.4)
|
sinatra (~> 1.4.4)
|
||||||
six (~> 0.2.0)
|
six (~> 0.2.0)
|
||||||
slack-notifier (~> 1.0.0)
|
slack-notifier (~> 1.2.0)
|
||||||
slim (~> 2.0.2)
|
|
||||||
spinach-rails (~> 0.2.1)
|
spinach-rails (~> 0.2.1)
|
||||||
spring (~> 1.3.6)
|
spring (~> 1.3.6)
|
||||||
spring-commands-rspec (~> 1.0.4)
|
spring-commands-rspec (~> 1.0.4)
|
||||||
|
@ -922,9 +916,9 @@ DEPENDENCIES
|
||||||
teaspoon-jasmine (~> 2.2.0)
|
teaspoon-jasmine (~> 2.2.0)
|
||||||
test_after_commit (~> 0.2.2)
|
test_after_commit (~> 0.2.2)
|
||||||
thin (~> 1.6.1)
|
thin (~> 1.6.1)
|
||||||
tinder (~> 1.9.2)
|
tinder (~> 1.10.0)
|
||||||
turbolinks (~> 2.5.0)
|
turbolinks (~> 2.5.0)
|
||||||
uglifier (~> 2.3.2)
|
uglifier (~> 2.7.2)
|
||||||
underscore-rails (~> 1.4.4)
|
underscore-rails (~> 1.4.4)
|
||||||
unf (~> 0.1.4)
|
unf (~> 0.1.4)
|
||||||
unicorn (~> 4.8.2)
|
unicorn (~> 4.8.2)
|
||||||
|
@ -932,5 +926,7 @@ DEPENDENCIES
|
||||||
version_sorter (~> 2.0.0)
|
version_sorter (~> 2.0.0)
|
||||||
virtus (~> 1.0.1)
|
virtus (~> 1.0.1)
|
||||||
webmock (~> 1.21.0)
|
webmock (~> 1.21.0)
|
||||||
whenever (~> 0.8.4)
|
|
||||||
wikicloth (= 0.8.1)
|
wikicloth (= 0.8.1)
|
||||||
|
|
||||||
|
BUNDLED WITH
|
||||||
|
1.10.6
|
||||||
|
|
|
@ -79,7 +79,11 @@ Thanks for the issue report but we only support issues for the latest stable ver
|
||||||
|
|
||||||
### Support requests and configuration questions
|
### Support requests and configuration questions
|
||||||
|
|
||||||
Thanks for your interest in GitLab. We don't use the issue tracker for support requests and configuration questions. Please use the \[support forum\]\(https://groups.google.com/forum/#!forum/gitlabhq), \[Stack Overflow\]\(http://stackoverflow.com/questions/tagged/gitlab), the #gitlab IRC channel on Freenode or the http://about.gitlab.com paid services for this purpose. Have a look at the \[contribution guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md) for more information.
|
Thanks for your interest in GitLab. We don't use the issue tracker for support
|
||||||
|
requests and configuration questions. Please check our
|
||||||
|
\[getting help\]\(https://about.gitlab.com/getting-help/) page to see all of the available
|
||||||
|
support options. Also, have a look at the \[contribution guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md)
|
||||||
|
for more information.
|
||||||
|
|
||||||
### Code format
|
### Code format
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# GitLab
|
# GitLab
|
||||||
|
|
||||||
[![build status](https://ci.gitlab.com/projects/1/status.png?ref=master)](https://ci.gitlab.com/projects/1?ref=master)
|
[![build status](https://ci.gitlab.com/projects/1/status.svg?ref=master)](https://ci.gitlab.com/projects/1?ref=master)
|
||||||
[![Build Status](https://semaphoreci.com/api/v1/projects/2f1a5809-418b-4cc2-a1f4-819607579fe7/400484/shields_badge.svg)](https://semaphoreci.com/gitlabhq/gitlabhq)
|
[![Build Status](https://semaphoreci.com/api/v1/projects/2f1a5809-418b-4cc2-a1f4-819607579fe7/400484/shields_badge.svg)](https://semaphoreci.com/gitlabhq/gitlabhq)
|
||||||
[![Code Climate](https://codeclimate.com/github/gitlabhq/gitlabhq.svg)](https://codeclimate.com/github/gitlabhq/gitlabhq)
|
[![Code Climate](https://codeclimate.com/github/gitlabhq/gitlabhq.svg)](https://codeclimate.com/github/gitlabhq/gitlabhq)
|
||||||
[![Coverage Status](https://coveralls.io/repos/gitlabhq/gitlabhq/badge.svg?branch=master)](https://coveralls.io/r/gitlabhq/gitlabhq?branch=master)
|
[![Coverage Status](https://coveralls.io/repos/gitlabhq/gitlabhq/badge.svg?branch=master)](https://coveralls.io/r/gitlabhq/gitlabhq?branch=master)
|
||||||
|
@ -71,7 +71,7 @@ GitLab is a Ruby on Rails application that runs on the following software:
|
||||||
- Ubuntu/Debian/CentOS/RHEL
|
- Ubuntu/Debian/CentOS/RHEL
|
||||||
- Ruby (MRI) 2.1
|
- Ruby (MRI) 2.1
|
||||||
- Git 1.7.10+
|
- Git 1.7.10+
|
||||||
- Redis 2.0+
|
- Redis 2.4+
|
||||||
- MySQL or PostgreSQL
|
- MySQL or PostgreSQL
|
||||||
|
|
||||||
For more information please see the [architecture documentation](http://doc.gitlab.com/ce/development/architecture.html).
|
For more information please see the [architecture documentation](http://doc.gitlab.com/ce/development/architecture.html).
|
||||||
|
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
||||||
8.0.2
|
8.1.0
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -10,13 +10,13 @@
|
||||||
<g id="Fill-1-+-Group-24">
|
<g id="Fill-1-+-Group-24">
|
||||||
<g id="Group-24">
|
<g id="Group-24">
|
||||||
<g id="Group">
|
<g id="Group">
|
||||||
<path d="M105.0614,193.655 L105.0614,193.655 L143.7014,74.734 L66.4214,74.734 L105.0614,193.655 L105.0614,193.655 Z" id="Fill-4" fill="#E24329"></path>
|
<path d="M105.0614,193.655 L105.0614,193.655 L143.7014,74.734 L66.4214,74.734 L105.0614,193.655 L105.0614,193.655 Z" id="Fill-4" fill="#E24329" class="tanuki-shape"></path>
|
||||||
<path d="M105.0614,193.6548 L66.4214,74.7338 L12.2684,74.7338 L105.0614,193.6548 L105.0614,193.6548 Z" id="Fill-8" fill="#FC6D26"></path>
|
<path d="M105.0614,193.6548 L66.4214,74.7338 L12.2684,74.7338 L105.0614,193.6548 L105.0614,193.6548 Z" id="Fill-8" fill="#FC6D26" class="tanuki-shape"></path>
|
||||||
<path d="M12.2685,74.7341 L12.2685,74.7341 L0.5265,110.8731 C-0.5445,114.1691 0.6285,117.7801 3.4325,119.8171 L105.0615,193.6551 L12.2685,74.7341 L12.2685,74.7341 Z" id="Fill-12" fill="#FCA326"></path>
|
<path d="M12.2685,74.7341 L12.2685,74.7341 L0.5265,110.8731 C-0.5445,114.1691 0.6285,117.7801 3.4325,119.8171 L105.0615,193.6551 L12.2685,74.7341 L12.2685,74.7341 Z" id="Fill-12" fill="#FCA326" class="tanuki-shape"></path>
|
||||||
<path d="M12.2685,74.7342 L66.4215,74.7342 L43.1485,3.1092 C41.9515,-0.5768 36.7375,-0.5758 35.5405,3.1092 L12.2685,74.7342 L12.2685,74.7342 Z" id="Fill-16" fill="#E24329"></path>
|
<path d="M12.2685,74.7342 L66.4215,74.7342 L43.1485,3.1092 C41.9515,-0.5768 36.7375,-0.5758 35.5405,3.1092 L12.2685,74.7342 L12.2685,74.7342 Z" id="Fill-16" fill="#E24329" class="tanuki-shape"></path>
|
||||||
<path d="M105.0614,193.6548 L143.7014,74.7338 L197.8544,74.7338 L105.0614,193.6548 L105.0614,193.6548 Z" id="Fill-18" fill="#FC6D26"></path>
|
<path d="M105.0614,193.6548 L143.7014,74.7338 L197.8544,74.7338 L105.0614,193.6548 L105.0614,193.6548 Z" id="Fill-18" fill="#FC6D26" class="tanuki-shape"></path>
|
||||||
<path d="M197.8544,74.7341 L197.8544,74.7341 L209.5964,110.8731 C210.6674,114.1691 209.4944,117.7801 206.6904,119.8171 L105.0614,193.6551 L197.8544,74.7341 L197.8544,74.7341 Z" id="Fill-20" fill="#FCA326"></path>
|
<path d="M197.8544,74.7341 L197.8544,74.7341 L209.5964,110.8731 C210.6674,114.1691 209.4944,117.7801 206.6904,119.8171 L105.0614,193.6551 L197.8544,74.7341 L197.8544,74.7341 Z" id="Fill-20" fill="#FCA326" class="tanuki-shape"></path>
|
||||||
<path d="M197.8544,74.7342 L143.7014,74.7342 L166.9744,3.1092 C168.1714,-0.5768 173.3854,-0.5758 174.5824,3.1092 L197.8544,74.7342 L197.8544,74.7342 Z" id="Fill-22" fill="#E24329"></path>
|
<path d="M197.8544,74.7342 L143.7014,74.7342 L166.9744,3.1092 C168.1714,-0.5768 173.3854,-0.5758 174.5824,3.1092 L197.8544,74.7342 L197.8544,74.7342 Z" id="Fill-22" fill="#E24329" class="tanuki-shape"></path>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
|
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.4 KiB |
|
@ -180,6 +180,7 @@ $ ->
|
||||||
$('.navbar-toggle').on 'click', ->
|
$('.navbar-toggle').on 'click', ->
|
||||||
$('.header-content .title').toggle()
|
$('.header-content .title').toggle()
|
||||||
$('.header-content .navbar-collapse').toggle()
|
$('.header-content .navbar-collapse').toggle()
|
||||||
|
$('.navbar-toggle').toggleClass('active')
|
||||||
|
|
||||||
# Show/hide comments on diff
|
# Show/hide comments on diff
|
||||||
$("body").on "click", ".js-toggle-diff-comments", (e) ->
|
$("body").on "click", ".js-toggle-diff-comments", (e) ->
|
||||||
|
|
29
app/assets/javascripts/behaviors/quick_submit.js.coffee
Normal file
29
app/assets/javascripts/behaviors/quick_submit.js.coffee
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
# Quick Submit behavior
|
||||||
|
#
|
||||||
|
# When an input field with the `js-quick-submit` class receives a "Meta+Enter"
|
||||||
|
# (Mac) or "Ctrl+Enter" (Linux/Windows) key combination, its parent form is
|
||||||
|
# submitted.
|
||||||
|
#
|
||||||
|
#= require extensions/jquery
|
||||||
|
#
|
||||||
|
# ### Example Markup
|
||||||
|
#
|
||||||
|
# <form action="/foo">
|
||||||
|
# <input type="text" class="js-quick-submit" />
|
||||||
|
# <textarea class="js-quick-submit"></textarea>
|
||||||
|
# </form>
|
||||||
|
#
|
||||||
|
$(document).on 'keydown.quick_submit', '.js-quick-submit', (e) ->
|
||||||
|
return if (e.originalEvent && e.originalEvent.repeat) || e.repeat
|
||||||
|
return unless e.keyCode == 13 # Enter
|
||||||
|
|
||||||
|
if navigator.userAgent.match(/Macintosh/)
|
||||||
|
return unless (e.metaKey && !e.altKey && !e.ctrlKey && !e.shiftKey)
|
||||||
|
else
|
||||||
|
return unless (e.ctrlKey && !e.altKey && !e.metaKey && !e.shiftKey)
|
||||||
|
|
||||||
|
e.preventDefault()
|
||||||
|
|
||||||
|
$form = $(e.target).closest('form')
|
||||||
|
$form.find('input[type=submit], button[type=submit]').disable()
|
||||||
|
$form.submit()
|
|
@ -34,6 +34,5 @@ $.fn.requiresInput = ->
|
||||||
|
|
||||||
$form.on 'change input', fieldSelector, requireInput
|
$form.on 'change input', fieldSelector, requireInput
|
||||||
|
|
||||||
# Triggered on standard document `ready` and on Turbolinks `page:load` events
|
$ ->
|
||||||
$(document).on 'ready page:load', ->
|
|
||||||
$('form.js-requires-input').requiresInput()
|
$('form.js-requires-input').requiresInput()
|
||||||
|
|
|
@ -47,6 +47,7 @@ class @BlobFileDropzone
|
||||||
return
|
return
|
||||||
|
|
||||||
this.on 'sending', (file, xhr, formData) ->
|
this.on 'sending', (file, xhr, formData) ->
|
||||||
|
formData.append('new_branch', form.find('#new_branch').val())
|
||||||
formData.append('commit_message', form.find('#commit_message').val())
|
formData.append('commit_message', form.find('#commit_message').val())
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
39
app/assets/javascripts/ci/Chart.min.js
vendored
39
app/assets/javascripts/ci/Chart.min.js
vendored
|
@ -1,39 +0,0 @@
|
||||||
var Chart=function(s){function v(a,c,b){a=A((a-c.graphMin)/(c.steps*c.stepValue),1,0);return b*c.steps*a}function x(a,c,b,e){function h(){g+=f;var k=a.animation?A(d(g),null,0):1;e.clearRect(0,0,q,u);a.scaleOverlay?(b(k),c()):(c(),b(k));if(1>=g)D(h);else if("function"==typeof a.onAnimationComplete)a.onAnimationComplete()}var f=a.animation?1/A(a.animationSteps,Number.MAX_VALUE,1):1,d=B[a.animationEasing],g=a.animation?0:1;"function"!==typeof c&&(c=function(){});D(h)}function C(a,c,b,e,h,f){var d;a=
|
|
||||||
Math.floor(Math.log(e-h)/Math.LN10);h=Math.floor(h/(1*Math.pow(10,a)))*Math.pow(10,a);e=Math.ceil(e/(1*Math.pow(10,a)))*Math.pow(10,a)-h;a=Math.pow(10,a);for(d=Math.round(e/a);d<b||d>c;)a=d<b?a/2:2*a,d=Math.round(e/a);c=[];z(f,c,d,h,a);return{steps:d,stepValue:a,graphMin:h,labels:c}}function z(a,c,b,e,h){if(a)for(var f=1;f<b+1;f++)c.push(E(a,{value:(e+h*f).toFixed(0!=h%1?h.toString().split(".")[1].length:0)}))}function A(a,c,b){return!isNaN(parseFloat(c))&&isFinite(c)&&a>c?c:!isNaN(parseFloat(b))&&
|
|
||||||
isFinite(b)&&a<b?b:a}function y(a,c){var b={},e;for(e in a)b[e]=a[e];for(e in c)b[e]=c[e];return b}function E(a,c){var b=!/\W/.test(a)?F[a]=F[a]||E(document.getElementById(a).innerHTML):new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+a.replace(/[\r\t\n]/g," ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g,"$1\r").replace(/\t=(.*?)%>/g,"',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join("\\'")+"');}return p.join('');");return c?
|
|
||||||
b(c):b}var r=this,B={linear:function(a){return a},easeInQuad:function(a){return a*a},easeOutQuad:function(a){return-1*a*(a-2)},easeInOutQuad:function(a){return 1>(a/=0.5)?0.5*a*a:-0.5*(--a*(a-2)-1)},easeInCubic:function(a){return a*a*a},easeOutCubic:function(a){return 1*((a=a/1-1)*a*a+1)},easeInOutCubic:function(a){return 1>(a/=0.5)?0.5*a*a*a:0.5*((a-=2)*a*a+2)},easeInQuart:function(a){return a*a*a*a},easeOutQuart:function(a){return-1*((a=a/1-1)*a*a*a-1)},easeInOutQuart:function(a){return 1>(a/=0.5)?
|
|
||||||
0.5*a*a*a*a:-0.5*((a-=2)*a*a*a-2)},easeInQuint:function(a){return 1*(a/=1)*a*a*a*a},easeOutQuint:function(a){return 1*((a=a/1-1)*a*a*a*a+1)},easeInOutQuint:function(a){return 1>(a/=0.5)?0.5*a*a*a*a*a:0.5*((a-=2)*a*a*a*a+2)},easeInSine:function(a){return-1*Math.cos(a/1*(Math.PI/2))+1},easeOutSine:function(a){return 1*Math.sin(a/1*(Math.PI/2))},easeInOutSine:function(a){return-0.5*(Math.cos(Math.PI*a/1)-1)},easeInExpo:function(a){return 0==a?1:1*Math.pow(2,10*(a/1-1))},easeOutExpo:function(a){return 1==
|
|
||||||
a?1:1*(-Math.pow(2,-10*a/1)+1)},easeInOutExpo:function(a){return 0==a?0:1==a?1:1>(a/=0.5)?0.5*Math.pow(2,10*(a-1)):0.5*(-Math.pow(2,-10*--a)+2)},easeInCirc:function(a){return 1<=a?a:-1*(Math.sqrt(1-(a/=1)*a)-1)},easeOutCirc:function(a){return 1*Math.sqrt(1-(a=a/1-1)*a)},easeInOutCirc:function(a){return 1>(a/=0.5)?-0.5*(Math.sqrt(1-a*a)-1):0.5*(Math.sqrt(1-(a-=2)*a)+1)},easeInElastic:function(a){var c=1.70158,b=0,e=1;if(0==a)return 0;if(1==(a/=1))return 1;b||(b=0.3);e<Math.abs(1)?(e=1,c=b/4):c=b/(2*
|
|
||||||
Math.PI)*Math.asin(1/e);return-(e*Math.pow(2,10*(a-=1))*Math.sin((1*a-c)*2*Math.PI/b))},easeOutElastic:function(a){var c=1.70158,b=0,e=1;if(0==a)return 0;if(1==(a/=1))return 1;b||(b=0.3);e<Math.abs(1)?(e=1,c=b/4):c=b/(2*Math.PI)*Math.asin(1/e);return e*Math.pow(2,-10*a)*Math.sin((1*a-c)*2*Math.PI/b)+1},easeInOutElastic:function(a){var c=1.70158,b=0,e=1;if(0==a)return 0;if(2==(a/=0.5))return 1;b||(b=1*0.3*1.5);e<Math.abs(1)?(e=1,c=b/4):c=b/(2*Math.PI)*Math.asin(1/e);return 1>a?-0.5*e*Math.pow(2,10*
|
|
||||||
(a-=1))*Math.sin((1*a-c)*2*Math.PI/b):0.5*e*Math.pow(2,-10*(a-=1))*Math.sin((1*a-c)*2*Math.PI/b)+1},easeInBack:function(a){return 1*(a/=1)*a*(2.70158*a-1.70158)},easeOutBack:function(a){return 1*((a=a/1-1)*a*(2.70158*a+1.70158)+1)},easeInOutBack:function(a){var c=1.70158;return 1>(a/=0.5)?0.5*a*a*(((c*=1.525)+1)*a-c):0.5*((a-=2)*a*(((c*=1.525)+1)*a+c)+2)},easeInBounce:function(a){return 1-B.easeOutBounce(1-a)},easeOutBounce:function(a){return(a/=1)<1/2.75?1*7.5625*a*a:a<2/2.75?1*(7.5625*(a-=1.5/2.75)*
|
|
||||||
a+0.75):a<2.5/2.75?1*(7.5625*(a-=2.25/2.75)*a+0.9375):1*(7.5625*(a-=2.625/2.75)*a+0.984375)},easeInOutBounce:function(a){return 0.5>a?0.5*B.easeInBounce(2*a):0.5*B.easeOutBounce(2*a-1)+0.5}},q=s.canvas.width,u=s.canvas.height;window.devicePixelRatio&&(s.canvas.style.width=q+"px",s.canvas.style.height=u+"px",s.canvas.height=u*window.devicePixelRatio,s.canvas.width=q*window.devicePixelRatio,s.scale(window.devicePixelRatio,window.devicePixelRatio));this.PolarArea=function(a,c){r.PolarArea.defaults={scaleOverlay:!0,
|
|
||||||
scaleOverride:!1,scaleSteps:null,scaleStepWidth:null,scaleStartValue:null,scaleShowLine:!0,scaleLineColor:"rgba(0,0,0,.1)",scaleLineWidth:1,scaleShowLabels:!0,scaleLabel:"<%=value%>",scaleFontFamily:"'Arial'",scaleFontSize:12,scaleFontStyle:"normal",scaleFontColor:"#666",scaleShowLabelBackdrop:!0,scaleBackdropColor:"rgba(255,255,255,0.75)",scaleBackdropPaddingY:2,scaleBackdropPaddingX:2,segmentShowStroke:!0,segmentStrokeColor:"#fff",segmentStrokeWidth:2,animation:!0,animationSteps:100,animationEasing:"easeOutBounce",
|
|
||||||
animateRotate:!0,animateScale:!1,onAnimationComplete:null};var b=c?y(r.PolarArea.defaults,c):r.PolarArea.defaults;return new G(a,b,s)};this.Radar=function(a,c){r.Radar.defaults={scaleOverlay:!1,scaleOverride:!1,scaleSteps:null,scaleStepWidth:null,scaleStartValue:null,scaleShowLine:!0,scaleLineColor:"rgba(0,0,0,.1)",scaleLineWidth:1,scaleShowLabels:!1,scaleLabel:"<%=value%>",scaleFontFamily:"'Arial'",scaleFontSize:12,scaleFontStyle:"normal",scaleFontColor:"#666",scaleShowLabelBackdrop:!0,scaleBackdropColor:"rgba(255,255,255,0.75)",
|
|
||||||
scaleBackdropPaddingY:2,scaleBackdropPaddingX:2,angleShowLineOut:!0,angleLineColor:"rgba(0,0,0,.1)",angleLineWidth:1,pointLabelFontFamily:"'Arial'",pointLabelFontStyle:"normal",pointLabelFontSize:12,pointLabelFontColor:"#666",pointDot:!0,pointDotRadius:3,pointDotStrokeWidth:1,datasetStroke:!0,datasetStrokeWidth:2,datasetFill:!0,animation:!0,animationSteps:60,animationEasing:"easeOutQuart",onAnimationComplete:null};var b=c?y(r.Radar.defaults,c):r.Radar.defaults;return new H(a,b,s)};this.Pie=function(a,
|
|
||||||
c){r.Pie.defaults={segmentShowStroke:!0,segmentStrokeColor:"#fff",segmentStrokeWidth:2,animation:!0,animationSteps:100,animationEasing:"easeOutBounce",animateRotate:!0,animateScale:!1,onAnimationComplete:null};var b=c?y(r.Pie.defaults,c):r.Pie.defaults;return new I(a,b,s)};this.Doughnut=function(a,c){r.Doughnut.defaults={segmentShowStroke:!0,segmentStrokeColor:"#fff",segmentStrokeWidth:2,percentageInnerCutout:50,animation:!0,animationSteps:100,animationEasing:"easeOutBounce",animateRotate:!0,animateScale:!1,
|
|
||||||
onAnimationComplete:null};var b=c?y(r.Doughnut.defaults,c):r.Doughnut.defaults;return new J(a,b,s)};this.Line=function(a,c){r.Line.defaults={scaleOverlay:!1,scaleOverride:!1,scaleSteps:null,scaleStepWidth:null,scaleStartValue:null,scaleLineColor:"rgba(0,0,0,.1)",scaleLineWidth:1,scaleShowLabels:!0,scaleLabel:"<%=value%>",scaleFontFamily:"'Arial'",scaleFontSize:12,scaleFontStyle:"normal",scaleFontColor:"#666",scaleShowGridLines:!0,scaleGridLineColor:"rgba(0,0,0,.05)",scaleGridLineWidth:1,bezierCurve:!0,
|
|
||||||
pointDot:!0,pointDotRadius:4,pointDotStrokeWidth:2,datasetStroke:!0,datasetStrokeWidth:2,datasetFill:!0,animation:!0,animationSteps:60,animationEasing:"easeOutQuart",onAnimationComplete:null};var b=c?y(r.Line.defaults,c):r.Line.defaults;return new K(a,b,s)};this.Bar=function(a,c){r.Bar.defaults={scaleOverlay:!1,scaleOverride:!1,scaleSteps:null,scaleStepWidth:null,scaleStartValue:null,scaleLineColor:"rgba(0,0,0,.1)",scaleLineWidth:1,scaleShowLabels:!0,scaleLabel:"<%=value%>",scaleFontFamily:"'Arial'",
|
|
||||||
scaleFontSize:12,scaleFontStyle:"normal",scaleFontColor:"#666",scaleShowGridLines:!0,scaleGridLineColor:"rgba(0,0,0,.05)",scaleGridLineWidth:1,barShowStroke:!0,barStrokeWidth:2,barValueSpacing:5,barDatasetSpacing:1,animation:!0,animationSteps:60,animationEasing:"easeOutQuart",onAnimationComplete:null};var b=c?y(r.Bar.defaults,c):r.Bar.defaults;return new L(a,b,s)};var G=function(a,c,b){var e,h,f,d,g,k,j,l,m;g=Math.min.apply(Math,[q,u])/2;g-=Math.max.apply(Math,[0.5*c.scaleFontSize,0.5*c.scaleLineWidth]);
|
|
||||||
d=2*c.scaleFontSize;c.scaleShowLabelBackdrop&&(d+=2*c.scaleBackdropPaddingY,g-=1.5*c.scaleBackdropPaddingY);l=g;d=d?d:5;e=Number.MIN_VALUE;h=Number.MAX_VALUE;for(f=0;f<a.length;f++)a[f].value>e&&(e=a[f].value),a[f].value<h&&(h=a[f].value);f=Math.floor(l/(0.66*d));d=Math.floor(0.5*(l/d));m=c.scaleShowLabels?c.scaleLabel:null;c.scaleOverride?(j={steps:c.scaleSteps,stepValue:c.scaleStepWidth,graphMin:c.scaleStartValue,labels:[]},z(m,j.labels,j.steps,c.scaleStartValue,c.scaleStepWidth)):j=C(l,f,d,e,h,
|
|
||||||
m);k=g/j.steps;x(c,function(){for(var a=0;a<j.steps;a++)if(c.scaleShowLine&&(b.beginPath(),b.arc(q/2,u/2,k*(a+1),0,2*Math.PI,!0),b.strokeStyle=c.scaleLineColor,b.lineWidth=c.scaleLineWidth,b.stroke()),c.scaleShowLabels){b.textAlign="center";b.font=c.scaleFontStyle+" "+c.scaleFontSize+"px "+c.scaleFontFamily;var e=j.labels[a];if(c.scaleShowLabelBackdrop){var d=b.measureText(e).width;b.fillStyle=c.scaleBackdropColor;b.beginPath();b.rect(Math.round(q/2-d/2-c.scaleBackdropPaddingX),Math.round(u/2-k*(a+
|
|
||||||
1)-0.5*c.scaleFontSize-c.scaleBackdropPaddingY),Math.round(d+2*c.scaleBackdropPaddingX),Math.round(c.scaleFontSize+2*c.scaleBackdropPaddingY));b.fill()}b.textBaseline="middle";b.fillStyle=c.scaleFontColor;b.fillText(e,q/2,u/2-k*(a+1))}},function(e){var d=-Math.PI/2,g=2*Math.PI/a.length,f=1,h=1;c.animation&&(c.animateScale&&(f=e),c.animateRotate&&(h=e));for(e=0;e<a.length;e++)b.beginPath(),b.arc(q/2,u/2,f*v(a[e].value,j,k),d,d+h*g,!1),b.lineTo(q/2,u/2),b.closePath(),b.fillStyle=a[e].color,b.fill(),
|
|
||||||
c.segmentShowStroke&&(b.strokeStyle=c.segmentStrokeColor,b.lineWidth=c.segmentStrokeWidth,b.stroke()),d+=h*g},b)},H=function(a,c,b){var e,h,f,d,g,k,j,l,m;a.labels||(a.labels=[]);g=Math.min.apply(Math,[q,u])/2;d=2*c.scaleFontSize;for(e=l=0;e<a.labels.length;e++)b.font=c.pointLabelFontStyle+" "+c.pointLabelFontSize+"px "+c.pointLabelFontFamily,h=b.measureText(a.labels[e]).width,h>l&&(l=h);g-=Math.max.apply(Math,[l,1.5*(c.pointLabelFontSize/2)]);g-=c.pointLabelFontSize;l=g=A(g,null,0);d=d?d:5;e=Number.MIN_VALUE;
|
|
||||||
h=Number.MAX_VALUE;for(f=0;f<a.datasets.length;f++)for(m=0;m<a.datasets[f].data.length;m++)a.datasets[f].data[m]>e&&(e=a.datasets[f].data[m]),a.datasets[f].data[m]<h&&(h=a.datasets[f].data[m]);f=Math.floor(l/(0.66*d));d=Math.floor(0.5*(l/d));m=c.scaleShowLabels?c.scaleLabel:null;c.scaleOverride?(j={steps:c.scaleSteps,stepValue:c.scaleStepWidth,graphMin:c.scaleStartValue,labels:[]},z(m,j.labels,j.steps,c.scaleStartValue,c.scaleStepWidth)):j=C(l,f,d,e,h,m);k=g/j.steps;x(c,function(){var e=2*Math.PI/
|
|
||||||
a.datasets[0].data.length;b.save();b.translate(q/2,u/2);if(c.angleShowLineOut){b.strokeStyle=c.angleLineColor;b.lineWidth=c.angleLineWidth;for(var d=0;d<a.datasets[0].data.length;d++)b.rotate(e),b.beginPath(),b.moveTo(0,0),b.lineTo(0,-g),b.stroke()}for(d=0;d<j.steps;d++){b.beginPath();if(c.scaleShowLine){b.strokeStyle=c.scaleLineColor;b.lineWidth=c.scaleLineWidth;b.moveTo(0,-k*(d+1));for(var f=0;f<a.datasets[0].data.length;f++)b.rotate(e),b.lineTo(0,-k*(d+1));b.closePath();b.stroke()}c.scaleShowLabels&&
|
|
||||||
(b.textAlign="center",b.font=c.scaleFontStyle+" "+c.scaleFontSize+"px "+c.scaleFontFamily,b.textBaseline="middle",c.scaleShowLabelBackdrop&&(f=b.measureText(j.labels[d]).width,b.fillStyle=c.scaleBackdropColor,b.beginPath(),b.rect(Math.round(-f/2-c.scaleBackdropPaddingX),Math.round(-k*(d+1)-0.5*c.scaleFontSize-c.scaleBackdropPaddingY),Math.round(f+2*c.scaleBackdropPaddingX),Math.round(c.scaleFontSize+2*c.scaleBackdropPaddingY)),b.fill()),b.fillStyle=c.scaleFontColor,b.fillText(j.labels[d],0,-k*(d+
|
|
||||||
1)))}for(d=0;d<a.labels.length;d++){b.font=c.pointLabelFontStyle+" "+c.pointLabelFontSize+"px "+c.pointLabelFontFamily;b.fillStyle=c.pointLabelFontColor;var f=Math.sin(e*d)*(g+c.pointLabelFontSize),h=Math.cos(e*d)*(g+c.pointLabelFontSize);b.textAlign=e*d==Math.PI||0==e*d?"center":e*d>Math.PI?"right":"left";b.textBaseline="middle";b.fillText(a.labels[d],f,-h)}b.restore()},function(d){var e=2*Math.PI/a.datasets[0].data.length;b.save();b.translate(q/2,u/2);for(var g=0;g<a.datasets.length;g++){b.beginPath();
|
|
||||||
b.moveTo(0,d*-1*v(a.datasets[g].data[0],j,k));for(var f=1;f<a.datasets[g].data.length;f++)b.rotate(e),b.lineTo(0,d*-1*v(a.datasets[g].data[f],j,k));b.closePath();b.fillStyle=a.datasets[g].fillColor;b.strokeStyle=a.datasets[g].strokeColor;b.lineWidth=c.datasetStrokeWidth;b.fill();b.stroke();if(c.pointDot){b.fillStyle=a.datasets[g].pointColor;b.strokeStyle=a.datasets[g].pointStrokeColor;b.lineWidth=c.pointDotStrokeWidth;for(f=0;f<a.datasets[g].data.length;f++)b.rotate(e),b.beginPath(),b.arc(0,d*-1*
|
|
||||||
v(a.datasets[g].data[f],j,k),c.pointDotRadius,2*Math.PI,!1),b.fill(),b.stroke()}b.rotate(e)}b.restore()},b)},I=function(a,c,b){for(var e=0,h=Math.min.apply(Math,[u/2,q/2])-5,f=0;f<a.length;f++)e+=a[f].value;x(c,null,function(d){var g=-Math.PI/2,f=1,j=1;c.animation&&(c.animateScale&&(f=d),c.animateRotate&&(j=d));for(d=0;d<a.length;d++){var l=j*a[d].value/e*2*Math.PI;b.beginPath();b.arc(q/2,u/2,f*h,g,g+l);b.lineTo(q/2,u/2);b.closePath();b.fillStyle=a[d].color;b.fill();c.segmentShowStroke&&(b.lineWidth=
|
|
||||||
c.segmentStrokeWidth,b.strokeStyle=c.segmentStrokeColor,b.stroke());g+=l}},b)},J=function(a,c,b){for(var e=0,h=Math.min.apply(Math,[u/2,q/2])-5,f=h*(c.percentageInnerCutout/100),d=0;d<a.length;d++)e+=a[d].value;x(c,null,function(d){var k=-Math.PI/2,j=1,l=1;c.animation&&(c.animateScale&&(j=d),c.animateRotate&&(l=d));for(d=0;d<a.length;d++){var m=l*a[d].value/e*2*Math.PI;b.beginPath();b.arc(q/2,u/2,j*h,k,k+m,!1);b.arc(q/2,u/2,j*f,k+m,k,!0);b.closePath();b.fillStyle=a[d].color;b.fill();c.segmentShowStroke&&
|
|
||||||
(b.lineWidth=c.segmentStrokeWidth,b.strokeStyle=c.segmentStrokeColor,b.stroke());k+=m}},b)},K=function(a,c,b){var e,h,f,d,g,k,j,l,m,t,r,n,p,s=0;g=u;b.font=c.scaleFontStyle+" "+c.scaleFontSize+"px "+c.scaleFontFamily;t=1;for(d=0;d<a.labels.length;d++)e=b.measureText(a.labels[d]).width,t=e>t?e:t;q/a.labels.length<t?(s=45,q/a.labels.length<Math.cos(s)*t?(s=90,g-=t):g-=Math.sin(s)*t):g-=c.scaleFontSize;d=c.scaleFontSize;g=g-5-d;e=Number.MIN_VALUE;h=Number.MAX_VALUE;for(f=0;f<a.datasets.length;f++)for(l=
|
|
||||||
0;l<a.datasets[f].data.length;l++)a.datasets[f].data[l]>e&&(e=a.datasets[f].data[l]),a.datasets[f].data[l]<h&&(h=a.datasets[f].data[l]);f=Math.floor(g/(0.66*d));d=Math.floor(0.5*(g/d));l=c.scaleShowLabels?c.scaleLabel:"";c.scaleOverride?(j={steps:c.scaleSteps,stepValue:c.scaleStepWidth,graphMin:c.scaleStartValue,labels:[]},z(l,j.labels,j.steps,c.scaleStartValue,c.scaleStepWidth)):j=C(g,f,d,e,h,l);k=Math.floor(g/j.steps);d=1;if(c.scaleShowLabels){b.font=c.scaleFontStyle+" "+c.scaleFontSize+"px "+c.scaleFontFamily;
|
|
||||||
for(e=0;e<j.labels.length;e++)h=b.measureText(j.labels[e]).width,d=h>d?h:d;d+=10}r=q-d-t;m=Math.floor(r/(a.labels.length-1));n=q-t/2-r;p=g+c.scaleFontSize/2;x(c,function(){b.lineWidth=c.scaleLineWidth;b.strokeStyle=c.scaleLineColor;b.beginPath();b.moveTo(q-t/2+5,p);b.lineTo(q-t/2-r-5,p);b.stroke();0<s?(b.save(),b.textAlign="right"):b.textAlign="center";b.fillStyle=c.scaleFontColor;for(var d=0;d<a.labels.length;d++)b.save(),0<s?(b.translate(n+d*m,p+c.scaleFontSize),b.rotate(-(s*(Math.PI/180))),b.fillText(a.labels[d],
|
|
||||||
0,0),b.restore()):b.fillText(a.labels[d],n+d*m,p+c.scaleFontSize+3),b.beginPath(),b.moveTo(n+d*m,p+3),c.scaleShowGridLines&&0<d?(b.lineWidth=c.scaleGridLineWidth,b.strokeStyle=c.scaleGridLineColor,b.lineTo(n+d*m,5)):b.lineTo(n+d*m,p+3),b.stroke();b.lineWidth=c.scaleLineWidth;b.strokeStyle=c.scaleLineColor;b.beginPath();b.moveTo(n,p+5);b.lineTo(n,5);b.stroke();b.textAlign="right";b.textBaseline="middle";for(d=0;d<j.steps;d++)b.beginPath(),b.moveTo(n-3,p-(d+1)*k),c.scaleShowGridLines?(b.lineWidth=c.scaleGridLineWidth,
|
|
||||||
b.strokeStyle=c.scaleGridLineColor,b.lineTo(n+r+5,p-(d+1)*k)):b.lineTo(n-0.5,p-(d+1)*k),b.stroke(),c.scaleShowLabels&&b.fillText(j.labels[d],n-8,p-(d+1)*k)},function(d){function e(b,c){return p-d*v(a.datasets[b].data[c],j,k)}for(var f=0;f<a.datasets.length;f++){b.strokeStyle=a.datasets[f].strokeColor;b.lineWidth=c.datasetStrokeWidth;b.beginPath();b.moveTo(n,p-d*v(a.datasets[f].data[0],j,k));for(var g=1;g<a.datasets[f].data.length;g++)c.bezierCurve?b.bezierCurveTo(n+m*(g-0.5),e(f,g-1),n+m*(g-0.5),
|
|
||||||
e(f,g),n+m*g,e(f,g)):b.lineTo(n+m*g,e(f,g));b.stroke();c.datasetFill?(b.lineTo(n+m*(a.datasets[f].data.length-1),p),b.lineTo(n,p),b.closePath(),b.fillStyle=a.datasets[f].fillColor,b.fill()):b.closePath();if(c.pointDot){b.fillStyle=a.datasets[f].pointColor;b.strokeStyle=a.datasets[f].pointStrokeColor;b.lineWidth=c.pointDotStrokeWidth;for(g=0;g<a.datasets[f].data.length;g++)b.beginPath(),b.arc(n+m*g,p-d*v(a.datasets[f].data[g],j,k),c.pointDotRadius,0,2*Math.PI,!0),b.fill(),b.stroke()}}},b)},L=function(a,
|
|
||||||
c,b){var e,h,f,d,g,k,j,l,m,t,r,n,p,s,w=0;g=u;b.font=c.scaleFontStyle+" "+c.scaleFontSize+"px "+c.scaleFontFamily;t=1;for(d=0;d<a.labels.length;d++)e=b.measureText(a.labels[d]).width,t=e>t?e:t;q/a.labels.length<t?(w=45,q/a.labels.length<Math.cos(w)*t?(w=90,g-=t):g-=Math.sin(w)*t):g-=c.scaleFontSize;d=c.scaleFontSize;g=g-5-d;e=Number.MIN_VALUE;h=Number.MAX_VALUE;for(f=0;f<a.datasets.length;f++)for(l=0;l<a.datasets[f].data.length;l++)a.datasets[f].data[l]>e&&(e=a.datasets[f].data[l]),a.datasets[f].data[l]<
|
|
||||||
h&&(h=a.datasets[f].data[l]);f=Math.floor(g/(0.66*d));d=Math.floor(0.5*(g/d));l=c.scaleShowLabels?c.scaleLabel:"";c.scaleOverride?(j={steps:c.scaleSteps,stepValue:c.scaleStepWidth,graphMin:c.scaleStartValue,labels:[]},z(l,j.labels,j.steps,c.scaleStartValue,c.scaleStepWidth)):j=C(g,f,d,e,h,l);k=Math.floor(g/j.steps);d=1;if(c.scaleShowLabels){b.font=c.scaleFontStyle+" "+c.scaleFontSize+"px "+c.scaleFontFamily;for(e=0;e<j.labels.length;e++)h=b.measureText(j.labels[e]).width,d=h>d?h:d;d+=10}r=q-d-t;m=
|
|
||||||
Math.floor(r/a.labels.length);s=(m-2*c.scaleGridLineWidth-2*c.barValueSpacing-(c.barDatasetSpacing*a.datasets.length-1)-(c.barStrokeWidth/2*a.datasets.length-1))/a.datasets.length;n=q-t/2-r;p=g+c.scaleFontSize/2;x(c,function(){b.lineWidth=c.scaleLineWidth;b.strokeStyle=c.scaleLineColor;b.beginPath();b.moveTo(q-t/2+5,p);b.lineTo(q-t/2-r-5,p);b.stroke();0<w?(b.save(),b.textAlign="right"):b.textAlign="center";b.fillStyle=c.scaleFontColor;for(var d=0;d<a.labels.length;d++)b.save(),0<w?(b.translate(n+
|
|
||||||
d*m,p+c.scaleFontSize),b.rotate(-(w*(Math.PI/180))),b.fillText(a.labels[d],0,0),b.restore()):b.fillText(a.labels[d],n+d*m+m/2,p+c.scaleFontSize+3),b.beginPath(),b.moveTo(n+(d+1)*m,p+3),b.lineWidth=c.scaleGridLineWidth,b.strokeStyle=c.scaleGridLineColor,b.lineTo(n+(d+1)*m,5),b.stroke();b.lineWidth=c.scaleLineWidth;b.strokeStyle=c.scaleLineColor;b.beginPath();b.moveTo(n,p+5);b.lineTo(n,5);b.stroke();b.textAlign="right";b.textBaseline="middle";for(d=0;d<j.steps;d++)b.beginPath(),b.moveTo(n-3,p-(d+1)*
|
|
||||||
k),c.scaleShowGridLines?(b.lineWidth=c.scaleGridLineWidth,b.strokeStyle=c.scaleGridLineColor,b.lineTo(n+r+5,p-(d+1)*k)):b.lineTo(n-0.5,p-(d+1)*k),b.stroke(),c.scaleShowLabels&&b.fillText(j.labels[d],n-8,p-(d+1)*k)},function(d){b.lineWidth=c.barStrokeWidth;for(var e=0;e<a.datasets.length;e++){b.fillStyle=a.datasets[e].fillColor;b.strokeStyle=a.datasets[e].strokeColor;for(var f=0;f<a.datasets[e].data.length;f++){var g=n+c.barValueSpacing+m*f+s*e+c.barDatasetSpacing*e+c.barStrokeWidth*e;b.beginPath();
|
|
||||||
b.moveTo(g,p);b.lineTo(g,p-d*v(a.datasets[e].data[f],j,k)+c.barStrokeWidth/2);b.lineTo(g+s,p-d*v(a.datasets[e].data[f],j,k)+c.barStrokeWidth/2);b.lineTo(g+s,p);c.barShowStroke&&b.stroke();b.closePath();b.fill()}}},b)},D=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){window.setTimeout(a,1E3/60)},F={}};
|
|
|
@ -22,7 +22,7 @@ class CiBuild
|
||||||
# Only valid for runnig build when output changes during time
|
# Only valid for runnig build when output changes during time
|
||||||
#
|
#
|
||||||
CiBuild.interval = setInterval =>
|
CiBuild.interval = setInterval =>
|
||||||
if window.location.href is build_url
|
if window.location.href.split("#").first() is build_url
|
||||||
$.ajax
|
$.ajax
|
||||||
url: build_url
|
url: build_url
|
||||||
dataType: "json"
|
dataType: "json"
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
@CiPager =
|
|
||||||
init: (@url, @limit = 0, preload, @disable = false) ->
|
|
||||||
if preload
|
|
||||||
@offset = 0
|
|
||||||
@getItems()
|
|
||||||
else
|
|
||||||
@offset = @limit
|
|
||||||
@initLoadMore()
|
|
||||||
|
|
||||||
getItems: ->
|
|
||||||
$(".loading").show()
|
|
||||||
$.ajax
|
|
||||||
type: "GET"
|
|
||||||
url: @url
|
|
||||||
data: "limit=" + @limit + "&offset=" + @offset
|
|
||||||
complete: =>
|
|
||||||
$(".loading").hide()
|
|
||||||
success: (data) =>
|
|
||||||
CiPager.append(data.count, data.html)
|
|
||||||
dataType: "json"
|
|
||||||
|
|
||||||
append: (count, html) ->
|
|
||||||
if count > 1
|
|
||||||
$(".content-list").append html
|
|
||||||
if count == @limit
|
|
||||||
@offset += count
|
|
||||||
else
|
|
||||||
@disable = true
|
|
||||||
|
|
||||||
initLoadMore: ->
|
|
||||||
$(document).unbind('scroll')
|
|
||||||
$(document).endlessScroll
|
|
||||||
bottomPixels: 400
|
|
||||||
fireDelay: 1000
|
|
||||||
fireOnce: true
|
|
||||||
ceaseFire: ->
|
|
||||||
CiPager.disable
|
|
||||||
|
|
||||||
callback: (i) =>
|
|
||||||
unless $(".loading").is(':visible')
|
|
||||||
$(".loading").show()
|
|
||||||
CiPager.getItems()
|
|
|
@ -1,6 +1,3 @@
|
||||||
$(document).on 'click', '.badge-codes-toggle', ->
|
$(document).on 'click', '.badge-codes-toggle', ->
|
||||||
$('.badge-codes-block').toggleClass("hide")
|
$('.badge-codes-block').toggleClass("hide")
|
||||||
return false
|
return false
|
||||||
|
|
||||||
$(document).on 'click', '.sync-now', ->
|
|
||||||
$(this).find('i').addClass('fa-spin')
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
#
|
#
|
||||||
# ### Example Markup
|
# ### Example Markup
|
||||||
#
|
#
|
||||||
# <div id="tree-content-holder">
|
# <div id="blob-content-holder">
|
||||||
# <div class="file-content">
|
# <div class="file-content">
|
||||||
# <div class="line-numbers">
|
# <div class="line-numbers">
|
||||||
# <a href="#L1" id="L1" data-line-number="1">1</a>
|
# <a href="#L1" id="L1" data-line-number="1">1</a>
|
||||||
|
@ -53,7 +53,7 @@ class @LineHighlighter
|
||||||
$.scrollTo("#L#{range[0]}", offset: -150)
|
$.scrollTo("#L#{range[0]}", offset: -150)
|
||||||
|
|
||||||
bindEvents: ->
|
bindEvents: ->
|
||||||
$('#tree-content-holder').on 'mousedown', 'a[data-line-number]', @clickHandler
|
$('#blob-content-holder').on 'mousedown', 'a[data-line-number]', @clickHandler
|
||||||
|
|
||||||
# While it may seem odd to bind to the mousedown event and then throw away
|
# While it may seem odd to bind to the mousedown event and then throw away
|
||||||
# the click event, there is a method to our madness.
|
# the click event, there is a method to our madness.
|
||||||
|
@ -62,7 +62,7 @@ class @LineHighlighter
|
||||||
# active state even when the event is cancelled, resulting in an ugly border
|
# active state even when the event is cancelled, resulting in an ugly border
|
||||||
# around the link and/or a persisted underline text decoration.
|
# around the link and/or a persisted underline text decoration.
|
||||||
|
|
||||||
$('#tree-content-holder').on 'click', 'a[data-line-number]', (event) ->
|
$('#blob-content-holder').on 'click', 'a[data-line-number]', (event) ->
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
|
|
||||||
clickHandler: (event) =>
|
clickHandler: (event) =>
|
||||||
|
|
|
@ -66,6 +66,11 @@ class @MergeRequestTabs
|
||||||
|
|
||||||
@setCurrentAction(action)
|
@setCurrentAction(action)
|
||||||
|
|
||||||
|
scrollToElement: (container) ->
|
||||||
|
if window.location.hash
|
||||||
|
$el = $("#{container} #{window.location.hash}")
|
||||||
|
$('body').scrollTo($el.offset().top) if $el.length
|
||||||
|
|
||||||
# Activate a tab based on the current action
|
# Activate a tab based on the current action
|
||||||
activateTab: (action) ->
|
activateTab: (action) ->
|
||||||
action = 'notes' if action == 'show'
|
action = 'notes' if action == 'show'
|
||||||
|
@ -122,6 +127,7 @@ class @MergeRequestTabs
|
||||||
document.getElementById('commits').innerHTML = data.html
|
document.getElementById('commits').innerHTML = data.html
|
||||||
$('.js-timeago').timeago()
|
$('.js-timeago').timeago()
|
||||||
@commitsLoaded = true
|
@commitsLoaded = true
|
||||||
|
@scrollToElement("#commits")
|
||||||
|
|
||||||
loadDiff: (source) ->
|
loadDiff: (source) ->
|
||||||
return if @diffsLoaded
|
return if @diffsLoaded
|
||||||
|
@ -131,14 +137,18 @@ class @MergeRequestTabs
|
||||||
success: (data) =>
|
success: (data) =>
|
||||||
document.getElementById('diffs').innerHTML = data.html
|
document.getElementById('diffs').innerHTML = data.html
|
||||||
@diffsLoaded = true
|
@diffsLoaded = true
|
||||||
|
@scrollToElement("#diffs")
|
||||||
|
|
||||||
toggleLoading: ->
|
# Show or hide the loading spinner
|
||||||
$('.mr-loading-status .loading').toggle()
|
#
|
||||||
|
# status - Boolean, true to show, false to hide
|
||||||
|
toggleLoading: (status) ->
|
||||||
|
$('.mr-loading-status .loading').toggle(status)
|
||||||
|
|
||||||
_get: (options) ->
|
_get: (options) ->
|
||||||
defaults = {
|
defaults = {
|
||||||
beforeSend: @toggleLoading
|
beforeSend: => @toggleLoading(true)
|
||||||
complete: @toggleLoading
|
complete: => @toggleLoading(false)
|
||||||
dataType: 'json'
|
dataType: 'json'
|
||||||
type: 'GET'
|
type: 'GET'
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,9 +15,10 @@ class @MergeRequestWidget
|
||||||
type: 'GET'
|
type: 'GET'
|
||||||
url: $('.merge-request').data('url')
|
url: $('.merge-request').data('url')
|
||||||
success: (data) =>
|
success: (data) =>
|
||||||
switch data.state
|
if data.state == "merged"
|
||||||
when 'merged'
|
|
||||||
location.reload()
|
location.reload()
|
||||||
|
else if data.merge_error
|
||||||
|
$('.mr-widget-body').html("<h4>" + data.merge_error + "</h4>")
|
||||||
else
|
else
|
||||||
setTimeout(merge_request_widget.mergeInProgress, 2000)
|
setTimeout(merge_request_widget.mergeInProgress, 2000)
|
||||||
dataType: 'json'
|
dataType: 'json'
|
||||||
|
|
|
@ -63,12 +63,6 @@ class @Notes
|
||||||
# fetch notes when tab becomes visible
|
# fetch notes when tab becomes visible
|
||||||
$(document).on "visibilitychange", @visibilityChange
|
$(document).on "visibilitychange", @visibilityChange
|
||||||
|
|
||||||
# Chrome doesn't fire keypress or keyup for Command+Enter, so we need keydown.
|
|
||||||
$(document).on 'keydown', '.js-note-text', (e) ->
|
|
||||||
return if e.originalEvent.repeat
|
|
||||||
if e.keyCode == 10 || ((e.metaKey || e.ctrlKey) && e.keyCode == 13)
|
|
||||||
$(@).closest('form').submit()
|
|
||||||
|
|
||||||
cleanBinding: ->
|
cleanBinding: ->
|
||||||
$(document).off "ajax:success", ".js-main-target-form"
|
$(document).off "ajax:success", ".js-main-target-form"
|
||||||
$(document).off "ajax:success", ".js-discussion-note-form"
|
$(document).off "ajax:success", ".js-discussion-note-form"
|
||||||
|
@ -82,7 +76,6 @@ class @Notes
|
||||||
$(document).off "click", ".js-discussion-reply-button"
|
$(document).off "click", ".js-discussion-reply-button"
|
||||||
$(document).off "click", ".js-add-diff-note-button"
|
$(document).off "click", ".js-add-diff-note-button"
|
||||||
$(document).off "visibilitychange"
|
$(document).off "visibilitychange"
|
||||||
$(document).off "keydown", ".js-note-text"
|
|
||||||
$(document).off "keyup", ".js-note-text"
|
$(document).off "keyup", ".js-note-text"
|
||||||
$(document).off "click", ".js-note-target-reopen"
|
$(document).off "click", ".js-note-target-reopen"
|
||||||
$(document).off "click", ".js-note-target-close"
|
$(document).off "click", ".js-note-target-close"
|
||||||
|
@ -277,13 +270,15 @@ class @Notes
|
||||||
|
|
||||||
Updates the current note field.
|
Updates the current note field.
|
||||||
###
|
###
|
||||||
updateNote: (xhr, note, status) =>
|
updateNote: (_xhr, note, _status) =>
|
||||||
note_li = $(".note-row-" + note.id)
|
# Convert returned HTML to a jQuery object so we can modify it further
|
||||||
note_li.replaceWith(note.html)
|
$html = $(note.html)
|
||||||
note_li.find('.note-edit-form').hide()
|
$html.syntaxHighlight()
|
||||||
note_li.find('.note-body > .note-text').show()
|
$html.find('.js-task-list-container').taskList('enable')
|
||||||
note_li.find('js-task-list-container').taskList('enable')
|
|
||||||
@enableTaskList()
|
# Find the note's `li` element by ID and replace it with the updated HTML
|
||||||
|
$note_li = $("#note_#{note.id}")
|
||||||
|
$note_li.replaceWith($html)
|
||||||
|
|
||||||
###
|
###
|
||||||
Called in response to clicking the edit note link
|
Called in response to clicking the edit note link
|
||||||
|
|
|
@ -7,6 +7,7 @@ class @ShortcutsNavigation extends Shortcuts
|
||||||
Mousetrap.bind('g e', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-project-activity'))
|
Mousetrap.bind('g e', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-project-activity'))
|
||||||
Mousetrap.bind('g f', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-tree'))
|
Mousetrap.bind('g f', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-tree'))
|
||||||
Mousetrap.bind('g c', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-commits'))
|
Mousetrap.bind('g c', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-commits'))
|
||||||
|
Mousetrap.bind('g b', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-builds'))
|
||||||
Mousetrap.bind('g n', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-network'))
|
Mousetrap.bind('g n', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-network'))
|
||||||
Mousetrap.bind('g g', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-graphs'))
|
Mousetrap.bind('g g', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-graphs'))
|
||||||
Mousetrap.bind('g i', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-issues'))
|
Mousetrap.bind('g i', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-issues'))
|
||||||
|
|
|
@ -16,6 +16,9 @@ class @TreeView
|
||||||
li = $("tr.tree-item")
|
li = $("tr.tree-item")
|
||||||
liSelected = null
|
liSelected = null
|
||||||
$('body').keydown (e) ->
|
$('body').keydown (e) ->
|
||||||
|
if $("input:focus").length > 0 && (e.which == 38 || e.which == 40)
|
||||||
|
return false
|
||||||
|
|
||||||
if e.which is 40
|
if e.which is 40
|
||||||
if liSelected
|
if liSelected
|
||||||
next = liSelected.next()
|
next = liSelected.next()
|
||||||
|
@ -38,4 +41,4 @@ class @TreeView
|
||||||
$(liSelected).focus()
|
$(liSelected).focus()
|
||||||
else if e.which is 13
|
else if e.which is 13
|
||||||
path = $('.tree-item.selected .tree-item-file-name a').attr('href')
|
path = $('.tree-item.selected .tree-item-file-name a').attr('href')
|
||||||
Turbolinks.visit(path)
|
if path then Turbolinks.visit(path)
|
||||||
|
|
|
@ -11,59 +11,41 @@
|
||||||
*= require cal-heatmap
|
*= require cal-heatmap
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
@import "base/fonts";
|
* Welcome to GitLab css!
|
||||||
@import "base/variables";
|
* If you need to add or modify UI component that is common for many pages
|
||||||
@import "base/mixins";
|
* like a table or typography then make changes in the framework/ directory.
|
||||||
@import "base/layout";
|
* If you need to add unique style that should affect only one page - use pages/
|
||||||
|
* directory.
|
||||||
|
|
||||||
/**
|
|
||||||
* Customized Twitter bootstrap
|
|
||||||
*/
|
*/
|
||||||
@import 'base/gl_variables';
|
|
||||||
@import 'base/gl_bootstrap';
|
|
||||||
|
|
||||||
/**
|
/*
|
||||||
|
* GitLab UI framework
|
||||||
|
*/
|
||||||
|
@import "framework";
|
||||||
|
|
||||||
|
/*
|
||||||
* NProgress load bar css
|
* NProgress load bar css
|
||||||
*/
|
*/
|
||||||
@import 'nprogress';
|
@import 'nprogress';
|
||||||
@import 'nprogress-bootstrap';
|
@import 'nprogress-bootstrap';
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Font icons
|
* Font icons
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
@import "font-awesome";
|
@import "font-awesome";
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* UI themes:
|
|
||||||
*/
|
|
||||||
@import "themes/**/*";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generic css (forms, nav etc):
|
|
||||||
*/
|
|
||||||
@import "generic/**/*";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Page specific styles (issues, projects etc):
|
* Page specific styles (issues, projects etc):
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@import "pages/**/*";
|
@import "pages/**/*";
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Code highlight
|
* Code highlight
|
||||||
*/
|
*/
|
||||||
@import "highlight/**/*";
|
@import "highlight/**/*";
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Styles for JS behaviors.
|
* Styles for JS behaviors.
|
||||||
*/
|
*/
|
||||||
@import "behaviors.scss";
|
@import "behaviors.scss";
|
||||||
|
|
||||||
/**
|
|
||||||
* CI specific styles:
|
|
||||||
*/
|
|
||||||
@import "ci/**/*";
|
|
||||||
|
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
$hover: #FFFAF1;
|
|
||||||
$gl-text-color: #54565b;
|
|
||||||
$gl-header-color: #4c4e54;
|
|
||||||
$gl-link-color: #333c48;
|
|
||||||
$md-text-color: #444;
|
|
||||||
$md-link-color: #3084bb;
|
|
||||||
$nprogress-color: #c0392b;
|
|
||||||
$gl-font-size: 15px;
|
|
||||||
$list-font-size: 15px;
|
|
||||||
$sidebar_collapsed_width: 62px;
|
|
||||||
$sidebar_width: 230px;
|
|
||||||
$avatar_radius: 50%;
|
|
||||||
$code_font_size: 13px;
|
|
||||||
$code_line_height: 1.5;
|
|
||||||
$border-color: #E7E9ED;
|
|
||||||
$background-color: #F8FAFC;
|
|
||||||
$header-height: 58px;
|
|
||||||
$fixed-layout-width: 1200px;
|
|
||||||
$gl-gray: #7f8fa4;
|
|
||||||
$gl-padding: 16px;
|
|
||||||
$gl-avatar-size: 46px;
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* State colors:
|
|
||||||
*/
|
|
||||||
$gl-primary: #446e9b;
|
|
||||||
$gl-success: #44c679;
|
|
||||||
$gl-info: #00aaff;
|
|
||||||
$gl-warning: #EB9532;
|
|
||||||
$gl-danger: #d9534f;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Commit Diff Colors
|
|
||||||
*/
|
|
||||||
$added: #63c363;
|
|
||||||
$deleted: #f77;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Fonts
|
|
||||||
*/
|
|
||||||
$monospace_font: 'Menlo', 'Liberation Mono', 'Consolas', 'DejaVu Sans Mono', 'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida console', monospace;
|
|
||||||
$regular_font: 'Source Sans Pro', "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
33
app/assets/stylesheets/framework.scss
Normal file
33
app/assets/stylesheets/framework.scss
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
@import "framework/fonts";
|
||||||
|
@import "framework/variables";
|
||||||
|
@import "framework/mixins";
|
||||||
|
@import "framework/layout";
|
||||||
|
@import 'framework/tw_bootstrap_variables';
|
||||||
|
@import 'framework/tw_bootstrap';
|
||||||
|
|
||||||
|
@import "framework/avatar.scss";
|
||||||
|
@import "framework/blocks.scss";
|
||||||
|
@import "framework/buttons.scss";
|
||||||
|
@import "framework/calendar.scss";
|
||||||
|
@import "framework/callout.scss";
|
||||||
|
@import "framework/common.scss";
|
||||||
|
@import "framework/files.scss";
|
||||||
|
@import "framework/filters.scss";
|
||||||
|
@import "framework/flash.scss";
|
||||||
|
@import "framework/forms.scss";
|
||||||
|
@import "framework/gfm.scss";
|
||||||
|
@import "framework/gitlab-theme.scss";
|
||||||
|
@import "framework/header.scss";
|
||||||
|
@import "framework/highlight.scss";
|
||||||
|
@import "framework/issue_box.scss";
|
||||||
|
@import "framework/jquery.scss";
|
||||||
|
@import "framework/lists.scss";
|
||||||
|
@import "framework/markdown_area.scss";
|
||||||
|
@import "framework/mobile.scss";
|
||||||
|
@import "framework/pagination.scss";
|
||||||
|
@import "framework/selects.scss";
|
||||||
|
@import "framework/sidebar.scss";
|
||||||
|
@import "framework/tables.scss";
|
||||||
|
@import "framework/timeline.scss";
|
||||||
|
@import "framework/typography.scss";
|
||||||
|
@import "framework/zen.scss";
|
|
@ -28,6 +28,7 @@
|
||||||
&.s48 { width: 48px; height: 48px; margin-right: 10px; }
|
&.s48 { width: 48px; height: 48px; margin-right: 10px; }
|
||||||
&.s60 { width: 60px; height: 60px; margin-right: 12px; }
|
&.s60 { width: 60px; height: 60px; margin-right: 12px; }
|
||||||
&.s90 { width: 90px; height: 90px; margin-right: 15px; }
|
&.s90 { width: 90px; height: 90px; margin-right: 15px; }
|
||||||
|
&.s110 { width: 110px; height: 110px; margin-right: 15px; }
|
||||||
&.s140 { width: 140px; height: 140px; margin-right: 20px; }
|
&.s140 { width: 140px; height: 140px; margin-right: 20px; }
|
||||||
&.s160 { width: 160px; height: 160px; margin-right: 20px; }
|
&.s160 { width: 160px; height: 160px; margin-right: 20px; }
|
||||||
}
|
}
|
||||||
|
@ -42,6 +43,7 @@
|
||||||
&.s32 { font-size: 22px; line-height: 32px; }
|
&.s32 { font-size: 22px; line-height: 32px; }
|
||||||
&.s60 { font-size: 32px; line-height: 60px; }
|
&.s60 { font-size: 32px; line-height: 60px; }
|
||||||
&.s90 { font-size: 36px; line-height: 90px; }
|
&.s90 { font-size: 36px; line-height: 90px; }
|
||||||
|
&.s110 { font-size: 40px; line-height: 112px; font-weight: 300; }
|
||||||
&.s140 { font-size: 72px; line-height: 140px; }
|
&.s140 { font-size: 72px; line-height: 140px; }
|
||||||
&.s160 { font-size: 96px; line-height: 160px; }
|
&.s160 { font-size: 96px; line-height: 160px; }
|
||||||
}
|
}
|
171
app/assets/stylesheets/framework/buttons.scss
Normal file
171
app/assets/stylesheets/framework/buttons.scss
Normal file
|
@ -0,0 +1,171 @@
|
||||||
|
@mixin btn-default {
|
||||||
|
@include border-radius(2px);
|
||||||
|
border-width: 1px;
|
||||||
|
border-style: solid;
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 18px;
|
||||||
|
padding: 11px $gl-padding;
|
||||||
|
letter-spacing: .4px;
|
||||||
|
|
||||||
|
&:focus,
|
||||||
|
&:active {
|
||||||
|
outline: none;
|
||||||
|
@include box-shadow(inset 0 0 4px rgba(0, 0, 0, 0.12));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin btn-middle {
|
||||||
|
@include btn-default;
|
||||||
|
@include border-radius(2px);
|
||||||
|
padding: 11px 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin btn-color($light, $border-light, $normal, $border-normal, $dark, $border-dark, $color) {
|
||||||
|
background-color: $light;
|
||||||
|
border-color: $border-light;
|
||||||
|
color: $color;
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:focus {
|
||||||
|
background-color: $normal;
|
||||||
|
border-color: $border-normal;
|
||||||
|
color: $color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
@include box-shadow (inset 0 0 4px rgba(0, 0, 0, 0.12));
|
||||||
|
|
||||||
|
background-color: $dark;
|
||||||
|
border-color: $border-dark;
|
||||||
|
color: $color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin btn-green {
|
||||||
|
@include btn-color($green-light, $border-green-light, $green-normal, $border-green-normal, $green-dark, $border-green-dark, #FFFFFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin btn-blue {
|
||||||
|
@include btn-color($blue-light, $border-blue-light, $blue-normal, $border-blue-normal, $blue-dark, $border-blue-dark, #FFFFFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin btn-orange {
|
||||||
|
@include btn-color($orange-light, $border-orange-light, $orange-normal, $border-orange-normal, $orange-dark, $border-orange-dark, #FFFFFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin btn-red {
|
||||||
|
@include btn-color($red-light, $border-red-light, $red-normal, $border-red-normal, $red-dark, $border-red-dark, #FFFFFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin btn-gray {
|
||||||
|
@include btn-color($gray-light, $border-gray-light, $gray-normal, $border-gray-normal, $gray-dark, $border-gray-dark, #313236);
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin btn-white {
|
||||||
|
@include btn-color($white-light, $border-white-light, $white-normal, $border-white-normal, $white-dark, $border-white-dark, #313236);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
@include btn-default;
|
||||||
|
@include btn-white;
|
||||||
|
|
||||||
|
&.btn-sm {
|
||||||
|
padding: 5px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.btn-xs {
|
||||||
|
padding: 1px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.btn-success,
|
||||||
|
&.btn-new,
|
||||||
|
&.btn-create,
|
||||||
|
&.btn-save,
|
||||||
|
&.btn-green {
|
||||||
|
@include btn-green;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.btn-gray {
|
||||||
|
@include btn-gray;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.btn-primary,
|
||||||
|
&.btn-info {
|
||||||
|
@include btn-blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.btn-warning {
|
||||||
|
@include btn-orange;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.btn-danger,
|
||||||
|
&.btn-remove,
|
||||||
|
&.btn-red {
|
||||||
|
@include btn-red;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.btn-cancel {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.btn-close {
|
||||||
|
color: $gl-danger;
|
||||||
|
border-color: $gl-danger;
|
||||||
|
&:hover {
|
||||||
|
color: #B94A48;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.btn-reopen {
|
||||||
|
color: $gl-success;
|
||||||
|
border-color: $gl-success;
|
||||||
|
&:hover {
|
||||||
|
color: #468847;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.btn-grouped {
|
||||||
|
margin-right: 7px;
|
||||||
|
float: left;
|
||||||
|
&:last-child {
|
||||||
|
margin-right: 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-block {
|
||||||
|
width: 100%;
|
||||||
|
margin: 0;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
&.btn {
|
||||||
|
padding: 6px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-group {
|
||||||
|
&.btn-grouped {
|
||||||
|
margin-right: 7px;
|
||||||
|
float: left;
|
||||||
|
&:last-child {
|
||||||
|
margin-right: 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-group-next {
|
||||||
|
.btn {
|
||||||
|
padding: 9px 0px;
|
||||||
|
font-size: 15px;
|
||||||
|
color: #7f8fa4;
|
||||||
|
border-color: #e7e9ed;
|
||||||
|
width: 140px;
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
border-color: $gl-info;
|
||||||
|
background: $gl-info;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,8 +1,8 @@
|
||||||
/** COLORS **/
|
/** COLORS **/
|
||||||
.cgray { color: $gl-gray; }
|
.cgray { color: $gl-gray; }
|
||||||
.clgray { color: #BBB }
|
.clgray { color: #BBB }
|
||||||
.cred { color: #D12F19 }
|
.cred { color: $gl-text-red; }
|
||||||
.cgreen { color: #4a2 }
|
.cgreen { color: $gl-text-green; }
|
||||||
.cdark { color: #444 }
|
.cdark { color: #444 }
|
||||||
|
|
||||||
/** COMMON CLASSES **/
|
/** COMMON CLASSES **/
|
||||||
|
@ -313,7 +313,7 @@ table {
|
||||||
}
|
}
|
||||||
|
|
||||||
.wiki .highlight, .note-body .highlight {
|
.wiki .highlight, .note-body .highlight {
|
||||||
margin-bottom: 9px;
|
margin: 12px 0 12px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.wiki .code {
|
.wiki .code {
|
||||||
|
@ -381,6 +381,10 @@ table {
|
||||||
&.no-bottom {
|
&.no-bottom {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.no-top {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropzone .dz-preview .dz-progress {
|
.dropzone .dz-preview .dz-progress {
|
||||||
|
@ -390,3 +394,7 @@ table {
|
||||||
.dropzone .dz-preview .dz-progress .dz-upload {
|
.dropzone .dz-preview .dz-progress .dz-upload {
|
||||||
background: $gl-success !important;
|
background: $gl-success !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.space-right {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
|
@ -29,12 +29,6 @@ input[type='text'].danger {
|
||||||
border-top: 1px solid $border-color;
|
border-top: 1px solid $border-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (min-width: $screen-sm-min) {
|
|
||||||
.form-actions {
|
|
||||||
padding-left: 17%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
label {
|
label {
|
||||||
&.control-label {
|
&.control-label {
|
||||||
@extend .col-sm-2;
|
@extend .col-sm-2;
|
||||||
|
@ -84,3 +78,17 @@ label {
|
||||||
.wiki-content {
|
.wiki-content {
|
||||||
margin-top: 35px;
|
margin-top: 35px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.form-group .control-label {
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-control::-webkit-input-placeholder {
|
||||||
|
color: #7f8fa4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group {
|
||||||
|
.input-group-addon {
|
||||||
|
background-color: #f7f8fa;
|
||||||
|
}
|
||||||
|
}
|
|
@ -22,4 +22,5 @@
|
||||||
|
|
||||||
.gfm-commit, .gfm-commit_range {
|
.gfm-commit, .gfm-commit_range {
|
||||||
font-family: $monospace_font;
|
font-family: $monospace_font;
|
||||||
|
font-size: 90%;
|
||||||
}
|
}
|
|
@ -26,7 +26,6 @@ header {
|
||||||
min-height: $header-height;
|
min-height: $header-height;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
border: none;
|
border: none;
|
||||||
border-bottom: 1px solid #EEE;
|
|
||||||
|
|
||||||
.container-fluid {
|
.container-fluid {
|
||||||
width: 100% !important;
|
width: 100% !important;
|
||||||
|
@ -51,15 +50,17 @@ header {
|
||||||
|
|
||||||
.navbar-toggle {
|
.navbar-toggle {
|
||||||
color: #666;
|
color: #666;
|
||||||
margin: 0;
|
margin: 6px 0;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 2px;
|
right: 2px;
|
||||||
top: 15px;
|
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: #EEE;
|
background-color: #EEE;
|
||||||
}
|
}
|
||||||
|
&.active {
|
||||||
|
color: #7f8fa4;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -88,6 +89,7 @@ header {
|
||||||
|
|
||||||
.navbar-collapse {
|
.navbar-collapse {
|
||||||
float: right;
|
float: right;
|
||||||
|
border-top: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.issue-box {
|
.issue-box {
|
||||||
@include border-radius(3px);
|
@include border-radius(2px);
|
||||||
|
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 10px $gl-padding;
|
padding: 10px $gl-padding;
|
|
@ -5,6 +5,7 @@ html {
|
||||||
|
|
||||||
body {
|
body {
|
||||||
padding-top: $header-height;
|
padding-top: $header-height;
|
||||||
|
text-rendering: geometricPrecision;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -117,8 +117,12 @@ ul.content-list {
|
||||||
}
|
}
|
||||||
|
|
||||||
.controls {
|
.controls {
|
||||||
padding-top: 10px;
|
padding-top: 4px;
|
||||||
float: right;
|
float: right;
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
padding: 10px 14px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -54,104 +54,6 @@
|
||||||
@include box-shadow(0 0 0 3px #f1f1f1);
|
@include box-shadow(0 0 0 3px #f1f1f1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@mixin md-typography {
|
|
||||||
color: $md-text-color;
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: $md-link-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
max-width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
*:first-child {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
font-family: $monospace_font;
|
|
||||||
white-space: pre;
|
|
||||||
word-wrap: normal;
|
|
||||||
padding: 1px 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
kbd {
|
|
||||||
display: inline-block;
|
|
||||||
padding: 3px 5px;
|
|
||||||
font-size: 11px;
|
|
||||||
line-height: 10px;
|
|
||||||
color: #555;
|
|
||||||
vertical-align: middle;
|
|
||||||
background-color: #FCFCFC;
|
|
||||||
border-width: 1px;
|
|
||||||
border-style: solid;
|
|
||||||
border-color: #CCC #CCC #BBB;
|
|
||||||
border-image: none;
|
|
||||||
border-radius: 3px;
|
|
||||||
box-shadow: 0px -1px 0px #BBB inset;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
margin-top: 45px;
|
|
||||||
font-size: 2.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
margin-top: 40px;
|
|
||||||
font-size: 2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
h3 {
|
|
||||||
margin-top: 35px;
|
|
||||||
font-size: 1.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
h4 {
|
|
||||||
margin-top: 30px;
|
|
||||||
font-size: 1.2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote {
|
|
||||||
color: #888;
|
|
||||||
font-size: 15px;
|
|
||||||
line-height: 1.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
table {
|
|
||||||
@extend .table;
|
|
||||||
@extend .table-bordered;
|
|
||||||
th {
|
|
||||||
background: #EEE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
p > code {
|
|
||||||
font-size: inherit;
|
|
||||||
font-weight: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
li {
|
|
||||||
line-height: 1.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
a[href*="/uploads/"], a[href*="storage.googleapis.com/google-code-attachments/"] {
|
|
||||||
&:before {
|
|
||||||
margin-right: 4px;
|
|
||||||
|
|
||||||
font: normal normal normal 14px/1 FontAwesome;
|
|
||||||
font-size: inherit;
|
|
||||||
text-rendering: auto;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
content: "\f0c6";
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover:before {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@mixin str-truncated($max_width: 82%) {
|
@mixin str-truncated($max_width: 82%) {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
@ -183,7 +85,7 @@
|
||||||
&.active {
|
&.active {
|
||||||
background: #f9f9f9;
|
background: #f9f9f9;
|
||||||
a {
|
a {
|
||||||
font-weight: bold;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,3 +153,8 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.fa-align {
|
||||||
|
top: 20px;
|
||||||
|
position: relative;
|
||||||
|
}
|
|
@ -23,7 +23,7 @@
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.issues-filters,
|
.issues-details-filters,
|
||||||
.dash-projects-filters,
|
.dash-projects-filters,
|
||||||
.check-all-holder {
|
.check-all-holder {
|
||||||
display: none;
|
display: none;
|
||||||
|
@ -83,6 +83,7 @@
|
||||||
|
|
||||||
.center-top-menu {
|
.center-top-menu {
|
||||||
height: 45px;
|
height: 45px;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
|
||||||
li a {
|
li a {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
@ -90,9 +91,11 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.projects-search-form {
|
.activity-filter-block {
|
||||||
margin: 0 -5px !important;
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.projects-search-form {
|
||||||
.btn {
|
.btn {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
@ -100,6 +103,11 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: $screen-sm-max) {
|
@media (max-width: $screen-sm-max) {
|
||||||
|
.page-with-sidebar .content-wrapper {
|
||||||
|
padding: 0;
|
||||||
|
padding-top: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
.issues-filters {
|
.issues-filters {
|
||||||
.milestone-filter, .labels-filter {
|
.milestone-filter, .labels-filter {
|
||||||
display: none;
|
display: none;
|
|
@ -9,6 +9,8 @@
|
||||||
margin: 0;
|
margin: 0;
|
||||||
display: block;
|
display: block;
|
||||||
|
|
||||||
|
li.first,
|
||||||
|
li.last,
|
||||||
li.next,
|
li.next,
|
||||||
li.prev {
|
li.prev {
|
||||||
> a {
|
> a {
|
|
@ -8,7 +8,7 @@
|
||||||
font-size: $gl-font-size;
|
font-size: $gl-font-size;
|
||||||
line-height: 1.42857143;
|
line-height: 1.42857143;
|
||||||
|
|
||||||
@include border-radius(4px);
|
@include border-radius(2px);
|
||||||
|
|
||||||
.select2-arrow {
|
.select2-arrow {
|
||||||
background: #FFF;
|
background: #FFF;
|
||||||
|
@ -18,8 +18,39 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.select2-container .select2-choice, .select2-container.select2-drop-above .select2-choice{
|
||||||
|
color: #7f8fa4;
|
||||||
|
border: 1px solid #e7e9ed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-drop {
|
||||||
|
@include box-shadow(rgba(76, 86, 103, 0.247059) 0px 0px 1px 0px, rgba(31, 37, 50, 0.317647) 0px 2px 18px 0px);
|
||||||
|
@include border-radius (0px);
|
||||||
|
|
||||||
|
padding: 16px;
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-results .select2-result-label {
|
||||||
|
padding: 9px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-drop{
|
||||||
|
color: #7f8fa4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-highlighted {
|
||||||
|
background: #3084bb !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-results li.select2-result-with-children > .select2-result-label {
|
||||||
|
font-weight: 600;
|
||||||
|
color: #313236;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.select2-container-multi .select2-choices {
|
.select2-container-multi .select2-choices {
|
||||||
@include border-radius(4px);
|
@include border-radius(2px);
|
||||||
border-color: #CCC;
|
border-color: #CCC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,7 +94,7 @@
|
||||||
|
|
||||||
.ajax-users-dropdown, .ajax-project-users-dropdown {
|
.ajax-users-dropdown, .ajax-project-users-dropdown {
|
||||||
.select2-search {
|
.select2-search {
|
||||||
padding-top: 4px;
|
padding-top: 2px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,9 +128,6 @@
|
||||||
}
|
}
|
||||||
.user-name {
|
.user-name {
|
||||||
}
|
}
|
||||||
.user-username {
|
|
||||||
color: #999;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.namespace-result {
|
.namespace-result {
|
||||||
|
@ -114,5 +142,5 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.ajax-users-dropdown {
|
.ajax-users-dropdown {
|
||||||
min-width: 225px !important;
|
min-width: 250px !important;
|
||||||
}
|
}
|
|
@ -21,12 +21,11 @@
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
background: #f1f4f8;
|
background: #EAEBEC;
|
||||||
|
|
||||||
.container-fluid {
|
.container-fluid {
|
||||||
background: #FFF;
|
background: #FFF;
|
||||||
padding: $gl-padding;
|
padding: $gl-padding;
|
||||||
border: 1px solid #e7e9ed;
|
|
||||||
min-height: 90vh;
|
min-height: 90vh;
|
||||||
|
|
||||||
&.container-blank {
|
&.container-blank {
|
||||||
|
@ -243,6 +242,9 @@
|
||||||
img {
|
img {
|
||||||
width: 36px;
|
width: 36px;
|
||||||
height: 36px;
|
height: 36px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tanuki-logo, img {
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -266,3 +268,13 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.tanuki-shape {
|
||||||
|
transition: all 0.8s;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
fill: rgb(255, 255, 255);
|
||||||
|
transition: all 0.1s;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,21 @@
|
||||||
table {
|
table {
|
||||||
&.table {
|
&.table {
|
||||||
|
.dropdown-menu a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.success,
|
||||||
|
.warning,
|
||||||
|
.danger,
|
||||||
|
.info {
|
||||||
|
color: #fff;
|
||||||
|
|
||||||
|
a:not(.btn) {
|
||||||
|
text-decoration: underline;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
tr {
|
tr {
|
||||||
td, th {
|
td, th {
|
||||||
padding: 8px 10px;
|
padding: 8px 10px;
|
||||||
|
@ -12,7 +28,7 @@ table {
|
||||||
border-bottom: 1px solid $border-color !important;
|
border-bottom: 1px solid $border-color !important;
|
||||||
}
|
}
|
||||||
td {
|
td {
|
||||||
border-color: #F1F1F1 !important;
|
border-color: $table-border-color !important;
|
||||||
border-bottom: 1px solid;
|
border-bottom: 1px solid;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -10,8 +10,12 @@
|
||||||
margin-left: -$gl-padding;
|
margin-left: -$gl-padding;
|
||||||
margin-right: -$gl-padding;
|
margin-right: -$gl-padding;
|
||||||
color: $gl-gray;
|
color: $gl-gray;
|
||||||
border-bottom: 1px solid #f1f2f4;
|
border-bottom: 1px solid #ECEEF1;
|
||||||
border-right: 1px solid #f1f2f4;
|
border-right: 1px solid #ECEEF1;
|
||||||
|
|
||||||
|
&:target {
|
||||||
|
background: $hover;
|
||||||
|
}
|
||||||
|
|
||||||
&:last-child {
|
&:last-child {
|
||||||
border-bottom: none;
|
border-bottom: none;
|
|
@ -32,8 +32,6 @@
|
||||||
@import "bootstrap/pager";
|
@import "bootstrap/pager";
|
||||||
@import "bootstrap/labels";
|
@import "bootstrap/labels";
|
||||||
@import "bootstrap/badges";
|
@import "bootstrap/badges";
|
||||||
@import "bootstrap/jumbotron";
|
|
||||||
@import "bootstrap/thumbnails";
|
|
||||||
@import "bootstrap/alerts";
|
@import "bootstrap/alerts";
|
||||||
@import "bootstrap/progress-bars";
|
@import "bootstrap/progress-bars";
|
||||||
@import "bootstrap/list-group";
|
@import "bootstrap/list-group";
|
||||||
|
@ -251,23 +249,3 @@
|
||||||
.text-info:hover {
|
.text-info:hover {
|
||||||
color: $brand-info;
|
color: $brand-info;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tables =====================================================================
|
|
||||||
|
|
||||||
table.table {
|
|
||||||
.dropdown-menu a {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.success,
|
|
||||||
.warning,
|
|
||||||
.danger,
|
|
||||||
.info {
|
|
||||||
color: #fff;
|
|
||||||
|
|
||||||
a:not(.btn) {
|
|
||||||
text-decoration: underline;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -22,8 +22,8 @@ $brand-info: $gl-info;
|
||||||
$brand-warning: $gl-warning;
|
$brand-warning: $gl-warning;
|
||||||
$brand-danger: $gl-danger;
|
$brand-danger: $gl-danger;
|
||||||
|
|
||||||
$border-radius-base: 3px !default;
|
$border-radius-base: 2px !default;
|
||||||
$border-radius-large: 5px !default;
|
$border-radius-large: 2px !default;
|
||||||
$border-radius-small: 2px !default;
|
$border-radius-small: 2px !default;
|
||||||
|
|
||||||
|
|
||||||
|
@ -156,3 +156,5 @@ $nav-link-padding: 13px $gl-padding;
|
||||||
$pre-bg: #f8fafc !default;
|
$pre-bg: #f8fafc !default;
|
||||||
$pre-color: $gl-gray !default;
|
$pre-color: $gl-gray !default;
|
||||||
$pre-border-color: #e7e9ed;
|
$pre-border-color: #e7e9ed;
|
||||||
|
|
||||||
|
$table-bg-accent: $background-color;
|
259
app/assets/stylesheets/framework/typography.scss
Normal file
259
app/assets/stylesheets/framework/typography.scss
Normal file
|
@ -0,0 +1,259 @@
|
||||||
|
@mixin md-typography {
|
||||||
|
color: $md-text-color;
|
||||||
|
word-wrap: break-word;
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: $md-link-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
*:first-child {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
font-family: $monospace_font;
|
||||||
|
white-space: pre;
|
||||||
|
word-wrap: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
kbd {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 3px 5px;
|
||||||
|
font-size: 11px;
|
||||||
|
line-height: 10px;
|
||||||
|
color: #555;
|
||||||
|
vertical-align: middle;
|
||||||
|
background-color: #FCFCFC;
|
||||||
|
border-width: 1px;
|
||||||
|
border-style: solid;
|
||||||
|
border-color: #CCC #CCC #BBB;
|
||||||
|
border-image: none;
|
||||||
|
border-radius: 3px;
|
||||||
|
box-shadow: 0px -1px 0px #BBB inset;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 1.3em;
|
||||||
|
font-weight: 600;
|
||||||
|
margin: 24px 0 12px 0;
|
||||||
|
padding: 0 0 10px 0;
|
||||||
|
border-bottom: 1px solid #e7e9ed;
|
||||||
|
color: #313236;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 1.2em;
|
||||||
|
font-weight: 600;
|
||||||
|
margin: 24px 0 12px 0;
|
||||||
|
color: #313236;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
margin: 24px 0 12px 0;
|
||||||
|
font-size: 1.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
margin: 24px 0 12px 0;
|
||||||
|
font-size: 1.1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
margin: 24px 0 12px 0;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h6 {
|
||||||
|
margin: 24px 0 12px 0;
|
||||||
|
font-size: 0.90em;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
color: #7f8fa4;
|
||||||
|
font-size: inherit;
|
||||||
|
padding: 8px 21px;
|
||||||
|
margin: 12px 0 12px;
|
||||||
|
border-left: 3px solid #e7e9ed;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote p {
|
||||||
|
color: #7f8fa4 !important;
|
||||||
|
font-size: inherit;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
color:#5c5d5e;
|
||||||
|
margin:6px 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
@extend .table;
|
||||||
|
@extend .table-bordered;
|
||||||
|
margin: 12px 0 12px 0;
|
||||||
|
color: #5c5d5e;
|
||||||
|
th {
|
||||||
|
background: #f8fafc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
margin: 12px 0 12px 0 !important;
|
||||||
|
background-color: #f8fafc;
|
||||||
|
font-size: 13px !important;
|
||||||
|
color: #5b6169;
|
||||||
|
line-height: 1.6em !important;
|
||||||
|
@include border-radius(2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
p > code {
|
||||||
|
font-weight: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul, ol {
|
||||||
|
padding: 0;
|
||||||
|
margin: 6px 0 6px 18px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
line-height: 1.6em;
|
||||||
|
}
|
||||||
|
|
||||||
|
a[href*="/uploads/"], a[href*="storage.googleapis.com/google-code-attachments/"] {
|
||||||
|
&:before {
|
||||||
|
margin-right: 4px;
|
||||||
|
|
||||||
|
font: normal normal normal 14px/1 FontAwesome;
|
||||||
|
font-size: inherit;
|
||||||
|
text-rendering: auto;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
content: "\f0c6";
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover:before {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Link to current header. */
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
a.anchor {
|
||||||
|
// Setting `display: none` would prevent the anchor being scrolled to, so
|
||||||
|
// instead we set the height to 0 and it gets updated on hover.
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover > a.anchor {
|
||||||
|
$size: 16px;
|
||||||
|
position: absolute;
|
||||||
|
right: 100%;
|
||||||
|
top: 50%;
|
||||||
|
margin-top: -$size/2;
|
||||||
|
margin-right: 0px;
|
||||||
|
padding-right: 20px;
|
||||||
|
display: inline-block;
|
||||||
|
width: $size;
|
||||||
|
height: $size;
|
||||||
|
background-image: image-url("icon-link.png");
|
||||||
|
background-size: contain;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Headers
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
body {
|
||||||
|
text-rendering:optimizeLegibility;
|
||||||
|
-webkit-text-shadow: rgba(255,255,255,0.01) 0 0 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-title {
|
||||||
|
margin-top: 0px;
|
||||||
|
line-height: 1.3;
|
||||||
|
font-size: 1.25em;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-title-empty {
|
||||||
|
margin-top: 0px;
|
||||||
|
line-height: 1.3;
|
||||||
|
font-size: 1.25em;
|
||||||
|
font-weight: 600;
|
||||||
|
margin: 12px 7px 12px 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
color: $gl-header-color;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** CODE **/
|
||||||
|
pre {
|
||||||
|
font-family: $monospace_font;
|
||||||
|
|
||||||
|
&.dark {
|
||||||
|
background: #333;
|
||||||
|
color: $background-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.plain-readme {
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.monospace {
|
||||||
|
font-family: $monospace_font;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
&.key-fingerprint {
|
||||||
|
background: $body-bg;
|
||||||
|
color: $text-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
a > code {
|
||||||
|
color: $link-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Apply Markdown typography
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
.wiki {
|
||||||
|
@include md-typography;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md {
|
||||||
|
@include md-typography;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Textareas intended for GFM
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
textarea.js-gfm-input {
|
||||||
|
font-family: $monospace_font;
|
||||||
|
color: $gl-text-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.md-preview {
|
||||||
|
}
|
||||||
|
|
||||||
|
.strikethrough {
|
||||||
|
text-decoration: line-through;
|
||||||
|
}
|
99
app/assets/stylesheets/framework/variables.scss
Normal file
99
app/assets/stylesheets/framework/variables.scss
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
$hover: #FFFAF1;
|
||||||
|
$gl-text-color: #54565B;
|
||||||
|
$gl-text-green: #4A2;
|
||||||
|
$gl-text-red: #D12F19;
|
||||||
|
$gl-text-orange: #D90;
|
||||||
|
$gl-header-color: #4c4e54;
|
||||||
|
$gl-link-color: #333c48;
|
||||||
|
$md-text-color: #444;
|
||||||
|
$md-link-color: #3084bb;
|
||||||
|
$nprogress-color: #c0392b;
|
||||||
|
$gl-font-size: 15px;
|
||||||
|
$list-font-size: 15px;
|
||||||
|
$sidebar_collapsed_width: 62px;
|
||||||
|
$sidebar_width: 230px;
|
||||||
|
$avatar_radius: 50%;
|
||||||
|
$code_font_size: 13px;
|
||||||
|
$code_line_height: 1.5;
|
||||||
|
$border-color: #dce0e6;
|
||||||
|
$table-border-color: #eef0f2;
|
||||||
|
$background-color: #F7F8FA;
|
||||||
|
$header-height: 58px;
|
||||||
|
$fixed-layout-width: 1200px;
|
||||||
|
$gl-gray: #7f8fa4;
|
||||||
|
$gl-padding: 16px;
|
||||||
|
$gl-avatar-size: 46px;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Color schema
|
||||||
|
*/
|
||||||
|
|
||||||
|
$white-light: #FFFFFF;
|
||||||
|
$white-normal: #DCE0E5;
|
||||||
|
$white-dark: #E4E7ED;
|
||||||
|
|
||||||
|
$gray-light: #F0F2F5;
|
||||||
|
$gray-normal: #DCE0E5;
|
||||||
|
$gray-dark: #E4E7ED;
|
||||||
|
|
||||||
|
$green-light: #31AF64;
|
||||||
|
$green-normal: #2FAA60;
|
||||||
|
$green-dark: #2CA05B;
|
||||||
|
|
||||||
|
$blue-light: #2EA8E5;
|
||||||
|
$blue-normal: #2D9FD8;
|
||||||
|
$blue-dark: #2897CE;
|
||||||
|
|
||||||
|
$orange-light: #FC6443;
|
||||||
|
$orange-normal: #E75E40;
|
||||||
|
$orange-dark: #CE5237;
|
||||||
|
|
||||||
|
$red-light: #F43263;
|
||||||
|
$red-normal: #E52C5A;
|
||||||
|
$red-dark: #D22852;
|
||||||
|
|
||||||
|
$border-white-light: #E3E7EC;
|
||||||
|
$border-white-normal: #D6DAE2;
|
||||||
|
$border-white-dark: #C6CACF;
|
||||||
|
|
||||||
|
$border-gray-light: #DCE0E5;
|
||||||
|
$border-gray-normal: #D6DAE2;
|
||||||
|
$border-gray-dark: #C6CACF;
|
||||||
|
|
||||||
|
$border-green-light: #2FAA60;
|
||||||
|
$border-green-normal: #2CA05B;
|
||||||
|
$border-green-dark: #279654;
|
||||||
|
|
||||||
|
$border-blue-light: #2D9FD8;
|
||||||
|
$border-blue-normal: #2897CE;
|
||||||
|
$border-blue-dark: #258DC1;
|
||||||
|
|
||||||
|
$border-orange-light: #ED5C3D;
|
||||||
|
$border-orange-normal: #CE5237;
|
||||||
|
$border-orange-dark: #C14E35;
|
||||||
|
|
||||||
|
$border-red-light: #E52C5A;
|
||||||
|
$border-red-normal: #D22852;
|
||||||
|
$border-red-dark: #CA264F;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* State colors:
|
||||||
|
*/
|
||||||
|
$gl-primary: $blue-normal;
|
||||||
|
$gl-success: $green-normal;
|
||||||
|
$gl-info: $blue-normal;
|
||||||
|
$gl-warning: $orange-normal;
|
||||||
|
$gl-danger: $red-normal;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Commit Diff Colors
|
||||||
|
*/
|
||||||
|
$added: #63c363;
|
||||||
|
$deleted: #f77;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Fonts
|
||||||
|
*/
|
||||||
|
$monospace_font: 'Menlo', 'Liberation Mono', 'Consolas', 'DejaVu Sans Mono', 'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida console', monospace;
|
||||||
|
$regular_font: 'Source Sans Pro', "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
@ -1,90 +0,0 @@
|
||||||
.btn {
|
|
||||||
@extend .btn-default;
|
|
||||||
|
|
||||||
&.btn-new {
|
|
||||||
@extend .btn-success;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.btn-create {
|
|
||||||
@extend .btn-success;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.btn-save {
|
|
||||||
@extend .btn-success;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.btn-remove {
|
|
||||||
@extend .btn-danger;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.btn-cancel {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.btn-close {
|
|
||||||
color: $gl-danger;
|
|
||||||
border-color: $gl-danger;
|
|
||||||
&:hover {
|
|
||||||
color: #B94A48;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.btn-reopen {
|
|
||||||
color: $gl-success;
|
|
||||||
border-color: $gl-success;
|
|
||||||
&:hover {
|
|
||||||
color: #468847;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.btn-grouped {
|
|
||||||
margin-right: 7px;
|
|
||||||
float: left;
|
|
||||||
&:last-child {
|
|
||||||
margin-right: 0px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.btn-save {
|
|
||||||
@extend .btn-primary;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.btn-new, &.btn-create {
|
|
||||||
@extend .btn-success;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-block {
|
|
||||||
width: 100%;
|
|
||||||
margin: 0;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
&.btn {
|
|
||||||
padding: 6px 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-group {
|
|
||||||
&.btn-grouped {
|
|
||||||
margin-right: 7px;
|
|
||||||
float: left;
|
|
||||||
&:last-child {
|
|
||||||
margin-right: 0px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-group-next {
|
|
||||||
.btn {
|
|
||||||
padding: 9px 0px;
|
|
||||||
font-size: 15px;
|
|
||||||
color: #7f8fa4;
|
|
||||||
border-color: #e7e9ed;
|
|
||||||
width: 140px;
|
|
||||||
|
|
||||||
&.active {
|
|
||||||
border-color: $gl-info;
|
|
||||||
background: $gl-info;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,113 +0,0 @@
|
||||||
/**
|
|
||||||
* Headers
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
.page-title {
|
|
||||||
margin-top: 0px;
|
|
||||||
line-height: 1.5;
|
|
||||||
font-weight: normal;
|
|
||||||
margin-bottom: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1, h2, h3, h4, h5, h6 {
|
|
||||||
color: $gl-header-color;
|
|
||||||
font-weight: 500;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** CODE **/
|
|
||||||
pre {
|
|
||||||
font-family: $monospace_font;
|
|
||||||
|
|
||||||
&.dark {
|
|
||||||
background: #333;
|
|
||||||
color: $background-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.plain-readme {
|
|
||||||
background: none;
|
|
||||||
border: none;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.monospace {
|
|
||||||
font-family: $monospace_font;
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
&.key-fingerprint {
|
|
||||||
background: $body-bg;
|
|
||||||
color: $text-color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
a > code {
|
|
||||||
color: $link-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wiki typography
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
.wiki {
|
|
||||||
@include md-typography;
|
|
||||||
|
|
||||||
word-wrap: break-word;
|
|
||||||
|
|
||||||
/* Link to current header. */
|
|
||||||
h1, h2, h3, h4, h5, h6 {
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
a.anchor {
|
|
||||||
// Setting `display: none` would prevent the anchor being scrolled to, so
|
|
||||||
// instead we set the height to 0 and it gets updated on hover.
|
|
||||||
height: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover > a.anchor {
|
|
||||||
$size: 16px;
|
|
||||||
position: absolute;
|
|
||||||
right: 100%;
|
|
||||||
top: 50%;
|
|
||||||
margin-top: -$size/2;
|
|
||||||
margin-right: 0px;
|
|
||||||
padding-right: 20px;
|
|
||||||
display: inline-block;
|
|
||||||
width: $size;
|
|
||||||
height: $size;
|
|
||||||
background-image: image-url("icon-link.png");
|
|
||||||
background-size: contain;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ul {
|
|
||||||
padding: 0;
|
|
||||||
margin: 0 0 9px 25px !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.md-area {
|
|
||||||
@include md-typography;
|
|
||||||
}
|
|
||||||
|
|
||||||
.md {
|
|
||||||
@include md-typography;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Textareas intended for GFM
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
textarea.js-gfm-input {
|
|
||||||
font-family: $monospace_font;
|
|
||||||
}
|
|
||||||
|
|
||||||
.md-preview {
|
|
||||||
}
|
|
||||||
|
|
||||||
.strikethrough {
|
|
||||||
text-decoration: line-through;
|
|
||||||
}
|
|
|
@ -1,11 +1,10 @@
|
||||||
/* https://github.com/MozMorris/tomorrow-pygments */
|
/* https://github.com/MozMorris/tomorrow-pygments */
|
||||||
pre.code.highlight.dark,
|
|
||||||
.code.dark {
|
.code.dark {
|
||||||
|
|
||||||
background-color: #1d1f21;
|
background-color: #1d1f21 !important;
|
||||||
color: #c5c8c6;
|
color: #c5c8c6 !important;
|
||||||
|
|
||||||
pre.code,
|
pre.highlight,
|
||||||
.line-numbers,
|
.line-numbers,
|
||||||
.line-numbers a {
|
.line-numbers a {
|
||||||
background-color: #1d1f21 !important;
|
background-color: #1d1f21 !important;
|
||||||
|
@ -23,8 +22,8 @@ pre.code.highlight.dark,
|
||||||
|
|
||||||
// Search result highlight
|
// Search result highlight
|
||||||
span.highlight_word {
|
span.highlight_word {
|
||||||
background: #ffe792;
|
background-color: #ffe792 !important;
|
||||||
color: #000000;
|
color: #000000 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hll { background-color: #373b41 }
|
.hll { background-color: #373b41 }
|
||||||
|
|
|
@ -1,15 +1,14 @@
|
||||||
/* https://github.com/richleland/pygments-css/blob/master/monokai.css */
|
/* https://github.com/richleland/pygments-css/blob/master/monokai.css */
|
||||||
pre.code.monokai,
|
|
||||||
.code.monokai {
|
.code.monokai {
|
||||||
|
|
||||||
background: #272822;
|
background-color: #272822 !important;
|
||||||
color: #f8f8f2;
|
color: #f8f8f2 !important;
|
||||||
|
|
||||||
pre.highlight,
|
pre.highlight,
|
||||||
.line-numbers,
|
.line-numbers,
|
||||||
.line-numbers a {
|
.line-numbers a {
|
||||||
background:#272822 !important;
|
background-color :#272822 !important;
|
||||||
color:#f8f8f2 !important;
|
color: #f8f8f2 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
pre.code {
|
pre.code {
|
||||||
|
@ -23,8 +22,8 @@ pre.code.monokai,
|
||||||
|
|
||||||
// Search result highlight
|
// Search result highlight
|
||||||
span.highlight_word {
|
span.highlight_word {
|
||||||
background: #ffe792;
|
background-color: #ffe792 !important;
|
||||||
color: #000000;
|
color: #000000 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hll { background-color: #49483e }
|
.hll { background-color: #49483e }
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
/* https://gist.github.com/qguv/7936275 */
|
/* https://gist.github.com/qguv/7936275 */
|
||||||
pre.code.highlight.solarized-dark,
|
|
||||||
.code.solarized-dark {
|
.code.solarized-dark {
|
||||||
|
|
||||||
background-color: #002b36;
|
background-color: #002b36 !important;
|
||||||
color: #93a1a1;
|
color: #93a1a1 !important;
|
||||||
|
|
||||||
pre.code,
|
pre.highlight,
|
||||||
.line-numbers,
|
.line-numbers,
|
||||||
.line-numbers a {
|
.line-numbers a {
|
||||||
background-color: #002b36 !important;
|
background-color: #002b36 !important;
|
||||||
|
@ -23,7 +22,7 @@ pre.code.highlight.solarized-dark,
|
||||||
|
|
||||||
// Search result highlight
|
// Search result highlight
|
||||||
span.highlight_word {
|
span.highlight_word {
|
||||||
background: #094554;
|
background-color: #094554 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Solarized Dark
|
/* Solarized Dark
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
/* https://gist.github.com/qguv/7936275 */
|
/* https://gist.github.com/qguv/7936275 */
|
||||||
pre.code.highlight.solarized-light,
|
|
||||||
.code.solarized-light {
|
.code.solarized-light {
|
||||||
|
|
||||||
background-color: #fdf6e3;
|
background-color: #fdf6e3 !important;
|
||||||
color: #586e75;
|
color: #586e75 !important;
|
||||||
|
|
||||||
pre.code,
|
pre.highlight,
|
||||||
.line-numbers,
|
.line-numbers,
|
||||||
.line-numbers a {
|
.line-numbers a {
|
||||||
background-color: #fdf6e3 !important;
|
background-color: #fdf6e3 !important;
|
||||||
|
@ -23,7 +22,7 @@ pre.code.highlight.solarized-light,
|
||||||
|
|
||||||
// Search result highlight
|
// Search result highlight
|
||||||
span.highlight_word {
|
span.highlight_word {
|
||||||
background: #eee8d5;
|
background-color: #eee8d5 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Solarized Light
|
/* Solarized Light
|
||||||
|
|
|
@ -1,23 +1,20 @@
|
||||||
/* https://github.com/aahan/pygments-github-style */
|
/* https://github.com/aahan/pygments-github-style */
|
||||||
pre.code.highlight.white,
|
|
||||||
.code.white {
|
.code.white {
|
||||||
|
|
||||||
background-color: #fff;
|
background-color: #f8fafc !important;
|
||||||
color: #333;
|
color: #5b6169 !important;
|
||||||
|
|
||||||
|
pre.highlight,
|
||||||
.line-numbers,
|
.line-numbers,
|
||||||
.line-numbers a {
|
.line-numbers a {
|
||||||
background-color: $background-color !important;
|
background-color: $background-color !important;
|
||||||
color: $gl-gray !important;
|
color: $gl-gray !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
pre.highlight {
|
|
||||||
background-color: #fff !important;
|
|
||||||
color: #333 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre.code {
|
pre.code {
|
||||||
border-left: 1px solid $border-color;
|
border-left: 1px solid $border-color;
|
||||||
|
background-color: #fff !important;
|
||||||
|
color: #333 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
// highlight line via anchor
|
// highlight line via anchor
|
||||||
|
@ -27,7 +24,7 @@ pre.code.highlight.white,
|
||||||
|
|
||||||
// Search result highlight
|
// Search result highlight
|
||||||
span.highlight_word {
|
span.highlight_word {
|
||||||
background: #fafe3d;
|
background-color: #fafe3d !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hll { background-color: #f8f8f8 }
|
.hll { background-color: #f8f8f8 }
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
.ci-body {
|
.build-page {
|
||||||
pre.trace {
|
pre.trace {
|
||||||
background: #111111;
|
background: #111111;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
@ -67,4 +67,9 @@
|
||||||
color: #3084bb !important;
|
color: #3084bb !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.build-top-menu {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -56,38 +56,4 @@
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.ci-status {
|
|
||||||
padding: 2px 7px;
|
|
||||||
margin-right: 5px;
|
|
||||||
border: 1px solid #EEE;
|
|
||||||
white-space: nowrap;
|
|
||||||
@include border-radius(4px);
|
|
||||||
|
|
||||||
&.ci-failed {
|
|
||||||
color: $gl-danger;
|
|
||||||
border-color: $gl-danger;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.ci-success {
|
|
||||||
color: $gl-success;
|
|
||||||
border-color: $gl-success;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.ci-info {
|
|
||||||
color: $gl-info;
|
|
||||||
border-color: $gl-info;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.ci-disabled {
|
|
||||||
color: $gl-gray;
|
|
||||||
border-color: $gl-gray;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.ci-pending,
|
|
||||||
&.ci-running {
|
|
||||||
color: $gl-warning;
|
|
||||||
border-color: $gl-warning;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -49,30 +49,33 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.file-stats {
|
.file-stats {
|
||||||
|
ul {
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 10px 0;
|
||||||
|
|
||||||
|
li {
|
||||||
|
padding: 3px 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
.new-file {
|
.new-file {
|
||||||
a {
|
a {
|
||||||
color: #090;
|
color: $gl-text-green;
|
||||||
}
|
|
||||||
i {
|
|
||||||
color: #1BCF00;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.renamed-file {
|
.renamed-file {
|
||||||
i {
|
a {
|
||||||
color: #FE9300;
|
color: $gl-text-orange;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.deleted-file {
|
.deleted-file {
|
||||||
a {
|
a {
|
||||||
color: #B00;
|
color: $gl-text-red;
|
||||||
}
|
|
||||||
i {
|
|
||||||
color: #EE0000;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.edit-file{
|
.edit-file{
|
||||||
i{
|
a {
|
||||||
color: #555;
|
color: $gl-text-color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -104,3 +107,16 @@
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.commit-ci-menu {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
list-style: none;
|
||||||
|
margin-top: 5px;
|
||||||
|
height: 56px;
|
||||||
|
margin: -16px;
|
||||||
|
padding: 16px;
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 0px;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
.commits-compare-switch{
|
.commits-compare-switch{
|
||||||
@extend .btn;
|
@include btn-default;
|
||||||
|
@include btn-white;
|
||||||
background: image-url("switch_icon.png") no-repeat center center;
|
background: image-url("switch_icon.png") no-repeat center center;
|
||||||
text-indent: -9999px;
|
text-indent: -9999px;
|
||||||
float: left;
|
float: left;
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// Common
|
||||||
.diff-file {
|
.diff-file {
|
||||||
margin-left: -$gl-padding;
|
margin-left: -$gl-padding;
|
||||||
margin-right: -$gl-padding;
|
margin-right: -$gl-padding;
|
||||||
|
@ -12,24 +13,17 @@
|
||||||
color: #555;
|
color: #555;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
|
|
||||||
> span {
|
.diff-title {
|
||||||
font-family: $monospace_font;
|
font-family: $monospace_font;
|
||||||
word-break: break-all;
|
word-break: break-all;
|
||||||
margin-right: 200px;
|
|
||||||
display: block;
|
display: block;
|
||||||
|
|
||||||
.file-mode {
|
.file-mode {
|
||||||
margin-left: 10px;
|
|
||||||
color: #777;
|
color: #777;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.diff-btn-group {
|
.diff-controls {
|
||||||
float: right;
|
|
||||||
position: absolute;
|
|
||||||
top: 5px;
|
|
||||||
right: 15px;
|
|
||||||
|
|
||||||
.btn {
|
.btn {
|
||||||
padding: 0px 10px;
|
padding: 0px 10px;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
|
@ -90,12 +84,12 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tr.line_holder.parallel{
|
tr.line_holder.parallel {
|
||||||
.old_line, .new_line, .diff_line {
|
.old_line, .new_line, .diff_line {
|
||||||
min-width: 50px;
|
min-width: 50px;
|
||||||
}
|
}
|
||||||
|
|
||||||
td.line_content.parallel{
|
td.line_content.parallel {
|
||||||
width: 50%;
|
width: 50%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -105,7 +99,7 @@
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
border: none;
|
border: none;
|
||||||
background: $background-color;
|
background: $background-color;
|
||||||
color: rgba(0,0,0,0.3);
|
color: rgba(0, 0, 0, 0.3);
|
||||||
padding: 0px 5px;
|
padding: 0px 5px;
|
||||||
border-right: 1px solid $border-color;
|
border-right: 1px solid $border-color;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
|
@ -117,7 +111,7 @@
|
||||||
float: left;
|
float: left;
|
||||||
width: 35px;
|
width: 35px;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
color: rgba(0,0,0,0.3);
|
color: rgba(0, 0, 0, 0.3);
|
||||||
&:hover {
|
&:hover {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
@ -168,7 +162,7 @@
|
||||||
background: #ddd;
|
background: #ddd;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 30px;
|
padding: 30px;
|
||||||
.wrap{
|
.wrap {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,7 +170,7 @@
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
line-height: 0;
|
line-height: 0;
|
||||||
img{
|
img {
|
||||||
border: 1px solid #FFF;
|
border: 1px solid #FFF;
|
||||||
background: image-url('trans_bg.gif');
|
background: image-url('trans_bg.gif');
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
|
@ -189,21 +183,21 @@
|
||||||
border: 1px solid $added;
|
border: 1px solid $added;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.image-info{
|
.image-info {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
margin: 5px 0 0 0;
|
margin: 5px 0 0 0;
|
||||||
color: grey;
|
color: grey;
|
||||||
}
|
}
|
||||||
|
|
||||||
.view.swipe{
|
.view.swipe {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
.swipe-frame{
|
.swipe-frame {
|
||||||
display: block;
|
display: block;
|
||||||
margin: auto;
|
margin: auto;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
.swipe-wrap{
|
.swipe-wrap {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
border-left: 1px solid #999;
|
border-left: 1px solid #999;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
@ -211,33 +205,33 @@
|
||||||
top: 13px;
|
top: 13px;
|
||||||
right: 7px;
|
right: 7px;
|
||||||
}
|
}
|
||||||
.frame{
|
.frame {
|
||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
&.deleted{
|
&.deleted {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
display: block;
|
display: block;
|
||||||
top: 13px;
|
top: 13px;
|
||||||
right: 7px;
|
right: 7px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.swipe-bar{
|
.swipe-bar {
|
||||||
display: block;
|
display: block;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 15px;
|
width: 15px;
|
||||||
z-index: 100;
|
z-index: 100;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
&:hover{
|
&:hover {
|
||||||
.top-handle{
|
.top-handle {
|
||||||
background-position: -15px 3px;
|
background-position: -15px 3px;
|
||||||
}
|
}
|
||||||
.bottom-handle{
|
.bottom-handle {
|
||||||
background-position: -15px -11px;
|
background-position: -15px -11px;
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
.top-handle{
|
.top-handle {
|
||||||
display: block;
|
display: block;
|
||||||
height: 14px;
|
height: 14px;
|
||||||
width: 15px;
|
width: 15px;
|
||||||
|
@ -245,7 +239,7 @@
|
||||||
top: 0px;
|
top: 0px;
|
||||||
background: image-url('swipemode_sprites.gif') 0 3px no-repeat;
|
background: image-url('swipemode_sprites.gif') 0 3px no-repeat;
|
||||||
}
|
}
|
||||||
.bottom-handle{
|
.bottom-handle {
|
||||||
display: block;
|
display: block;
|
||||||
height: 14px;
|
height: 14px;
|
||||||
width: 15px;
|
width: 15px;
|
||||||
|
@ -254,9 +248,10 @@
|
||||||
background: image-url('swipemode_sprites.gif') 0 -11px no-repeat;
|
background: image-url('swipemode_sprites.gif') 0 -11px no-repeat;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} //.view.swipe
|
}
|
||||||
.view.onion-skin{
|
//.view.swipe
|
||||||
.onion-skin-frame{
|
.view.onion-skin {
|
||||||
|
.onion-skin-frame {
|
||||||
display: block;
|
display: block;
|
||||||
margin: auto;
|
margin: auto;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -267,7 +262,7 @@
|
||||||
top: 0px;
|
top: 0px;
|
||||||
left: 0px;
|
left: 0px;
|
||||||
}
|
}
|
||||||
.controls{
|
.controls {
|
||||||
display: block;
|
display: block;
|
||||||
height: 14px;
|
height: 14px;
|
||||||
width: 300px;
|
width: 300px;
|
||||||
|
@ -277,7 +272,7 @@
|
||||||
left: 50%;
|
left: 50%;
|
||||||
margin-left: -150px;
|
margin-left: -150px;
|
||||||
|
|
||||||
.drag-track{
|
.drag-track {
|
||||||
display: block;
|
display: block;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 12px;
|
left: 12px;
|
||||||
|
@ -317,39 +312,40 @@
|
||||||
background: image-url('onion_skin_sprites.gif') -2px -10px no-repeat;
|
background: image-url('onion_skin_sprites.gif') -2px -10px no-repeat;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} //.view.onion-skin
|
|
||||||
}
|
}
|
||||||
.view-modes{
|
//.view.onion-skin
|
||||||
|
}
|
||||||
|
.view-modes {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
background: #EEE;
|
background: #EEE;
|
||||||
|
|
||||||
ul, li{
|
ul, li {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
li{
|
li {
|
||||||
color: grey;
|
color: grey;
|
||||||
border-left: 1px solid #c1c1c1;
|
border-left: 1px solid #c1c1c1;
|
||||||
padding: 0 12px 0 16px;
|
padding: 0 12px 0 16px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
&:first-child{
|
&:first-child {
|
||||||
border-left: none;
|
border-left: none;
|
||||||
}
|
}
|
||||||
&:hover{
|
&:hover {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
&.active{
|
&.active {
|
||||||
&:hover{
|
&:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
cursor: default;
|
cursor: default;
|
||||||
color: #333;
|
color: #333;
|
||||||
}
|
}
|
||||||
&.disabled{
|
&.disabled {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -373,3 +369,37 @@
|
||||||
float: right;
|
float: right;
|
||||||
margin-top: -5px;
|
margin-top: -5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Mobile
|
||||||
|
@media (max-width: 480px) {
|
||||||
|
.diff-title {
|
||||||
|
margin: 0;
|
||||||
|
|
||||||
|
.file-mode {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.diff-controls {
|
||||||
|
position: static;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bigger screens
|
||||||
|
@media (min-width: 481px) {
|
||||||
|
.diff-title {
|
||||||
|
margin-right: 200px;
|
||||||
|
|
||||||
|
.file-mode {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.diff-controls {
|
||||||
|
float: right;
|
||||||
|
position: absolute;
|
||||||
|
top: 5px;
|
||||||
|
right: 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -10,3 +10,9 @@
|
||||||
.milestone-row {
|
.milestone-row {
|
||||||
@include str-truncated(90%);
|
@include str-truncated(90%);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dashboard .side .panel .panel-heading .input-group {
|
||||||
|
.form-control {
|
||||||
|
height: 42px;
|
||||||
|
}
|
||||||
|
}
|
|
@ -68,3 +68,7 @@ body.modal-open {
|
||||||
.modal .modal-dialog {
|
.modal .modal-dialog {
|
||||||
width: 860px;
|
width: 860px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.documentation {
|
||||||
|
padding: 7px;
|
||||||
|
}
|
||||||
|
|
|
@ -54,21 +54,22 @@
|
||||||
margin-top: -15px;
|
margin-top: -15px;
|
||||||
padding: 10px 0;
|
padding: 10px 0;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
color: $gl-gray;
|
color: #5c5d5e;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
|
|
||||||
.author {
|
.author {
|
||||||
color: $gl-gray;
|
color: #5c5d5e;
|
||||||
}
|
}
|
||||||
|
|
||||||
.issue-id {
|
.issue-id {
|
||||||
font-size: 19px;
|
color: #5c5d5e;
|
||||||
color: $gl-text-color;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.issue-title {
|
.issue-title {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
font-size: 23px;
|
||||||
|
color: #313236;
|
||||||
}
|
}
|
||||||
|
|
||||||
.description {
|
.description {
|
||||||
|
|
|
@ -132,6 +132,11 @@ form.edit-issue {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.issue-closed-by-widget {
|
||||||
|
padding: 16px 0;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
.issue-form .select2-container {
|
.issue-form .select2-container {
|
||||||
width: 250px !important;
|
width: 250px !important;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,12 +3,11 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
.mr-state-widget {
|
.mr-state-widget {
|
||||||
background: #f8fafc;
|
background: #F7F8FA;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
color: $gl-gray;
|
color: $gl-gray;
|
||||||
border: 1px solid #eef0f2;
|
border: 1px solid #dce0e6;
|
||||||
@include box-shadow(0 1px 1px rgba(0, 0, 0, 0.05));
|
@include border-radius(2px);
|
||||||
@include border-radius(3px);
|
|
||||||
|
|
||||||
form {
|
form {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
|
@ -77,10 +76,16 @@
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.normal {
|
||||||
|
color: #5c5d5e;
|
||||||
|
}
|
||||||
|
|
||||||
.mr-widget-body {
|
.mr-widget-body {
|
||||||
h4 {
|
h4 {
|
||||||
font-weight: bold;
|
font-weight: 600;
|
||||||
|
font-size: 17px;
|
||||||
margin: 5px 0;
|
margin: 5px 0;
|
||||||
|
color: #313236;
|
||||||
}
|
}
|
||||||
|
|
||||||
p:last-child {
|
p:last-child {
|
||||||
|
@ -97,14 +102,26 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.merge-request .merge-request-tabs{
|
.merge-request .merge-request-tabs {
|
||||||
@include nav-menu;
|
@include nav-menu;
|
||||||
margin: -$gl-padding;
|
margin: -$gl-padding;
|
||||||
padding: $gl-padding;
|
padding: $gl-padding;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
border-top: 1px solid #e7e9ed;
|
margin-bottom: 1px;
|
||||||
margin-top: 18px;
|
}
|
||||||
margin-bottom: 3px;
|
|
||||||
|
// Mobile
|
||||||
|
@media (max-width: 480px) {
|
||||||
|
.merge-request .merge-request-tabs {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
li {
|
||||||
|
a {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.mr_source_commit,
|
.mr_source_commit,
|
||||||
|
@ -120,10 +137,12 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.label-branch {
|
.label-branch {
|
||||||
color: #222;
|
color: #313236;
|
||||||
font-family: $monospace_font;
|
font-family: $monospace_font;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
font-size: 14px;
|
||||||
|
margin: 0 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mr-list {
|
.mr-list {
|
||||||
|
|
|
@ -65,19 +65,18 @@
|
||||||
|
|
||||||
.note-image-attach {
|
.note-image-attach {
|
||||||
@extend .col-md-4;
|
@extend .col-md-4;
|
||||||
@extend .thumbnail;
|
|
||||||
margin-left: 45px;
|
margin-left: 45px;
|
||||||
float: none;
|
float: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.common-note-form {
|
.common-note-form {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
background: #f8fafc;
|
background: #F7F8FA;
|
||||||
padding: $gl-padding;
|
padding: $gl-padding;
|
||||||
margin-left: -$gl-padding;
|
margin-left: -$gl-padding;
|
||||||
margin-right: -$gl-padding;
|
margin-right: -$gl-padding;
|
||||||
border-right: 1px solid #f1f2f4;
|
border-right: 1px solid #ECEEF1;
|
||||||
border-top: 1px solid #f1f2f4;
|
border-top: 1px solid #ECEEF1;
|
||||||
margin-bottom: -$gl-padding;
|
margin-bottom: -$gl-padding;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,7 +167,7 @@
|
||||||
.comment-hints {
|
.comment-hints {
|
||||||
color: #999;
|
color: #999;
|
||||||
background: #FFF;
|
background: #FFF;
|
||||||
padding: 5px;
|
padding: 7px;
|
||||||
margin-top: -11px;
|
margin-top: -11px;
|
||||||
border: 1px solid $border-color;
|
border: 1px solid $border-color;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
|
|
|
@ -18,7 +18,7 @@ ul.notes {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
background: #f8fafc;
|
background: #FDFDFD;
|
||||||
|
|
||||||
.timeline-icon {
|
.timeline-icon {
|
||||||
.avatar {
|
.avatar {
|
||||||
|
@ -30,7 +30,6 @@ ul.notes {
|
||||||
.discussion-header,
|
.discussion-header,
|
||||||
.note-header {
|
.note-header {
|
||||||
@extend .cgray;
|
@extend .cgray;
|
||||||
padding-bottom: 15px;
|
|
||||||
|
|
||||||
a:hover {
|
a:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
@ -75,6 +74,10 @@ ul.notes {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.discussion-body {
|
||||||
|
padding-top: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
.discussion {
|
.discussion {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
display: block;
|
display: block;
|
||||||
|
|
|
@ -1,12 +1,27 @@
|
||||||
|
.alert_holder {
|
||||||
|
margin: -16px;
|
||||||
|
|
||||||
|
.alert-link {
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.no-ssh-key-message {
|
||||||
|
background-color: #f28d35;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
.new_project,
|
.new_project,
|
||||||
.edit_project {
|
.edit_project {
|
||||||
fieldset.features {
|
fieldset.features {
|
||||||
.control-label {
|
.control-label {
|
||||||
font-weight: bold;
|
font-weight: normal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.project-edit-content {
|
||||||
|
padding: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
.project-name-holder {
|
.project-name-holder {
|
||||||
.help-inline {
|
.help-inline {
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
|
@ -19,10 +34,10 @@
|
||||||
background: #f7f8fa;
|
background: #f7f8fa;
|
||||||
margin: -$gl-padding;
|
margin: -$gl-padding;
|
||||||
padding: $gl-padding;
|
padding: $gl-padding;
|
||||||
padding-top: 40px;
|
padding: 44px 0 17px 0;
|
||||||
|
|
||||||
.project-identicon-holder {
|
.project-identicon-holder {
|
||||||
margin-bottom: 15px;
|
margin-bottom: 16px;
|
||||||
|
|
||||||
.avatar, .identicon {
|
.avatar, .identicon {
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
|
@ -40,23 +55,27 @@
|
||||||
|
|
||||||
.project-home-desc {
|
.project-home-desc {
|
||||||
h1 {
|
h1 {
|
||||||
|
color: #313236;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 6px;
|
||||||
font-size: 23px;
|
font-size: 23px;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
color: #7f8fa4;
|
padding: 0 $gl-padding;
|
||||||
|
color: #5c5d5e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.git-clone-holder {
|
.git-clone-holder {
|
||||||
max-width: 600px;
|
max-width: 498px;
|
||||||
margin: 20px auto;
|
|
||||||
|
|
||||||
.form-control {
|
.form-control {
|
||||||
background: #FFF;
|
background: #FFF;
|
||||||
|
font-size: 14px;
|
||||||
|
height: 42px;
|
||||||
|
margin-left: -1px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,30 +85,36 @@
|
||||||
color: inherit;
|
color: inherit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.input-group {
|
||||||
|
display: inline-table;
|
||||||
|
position: relative;
|
||||||
|
top: 17px;
|
||||||
|
margin-bottom: 44px;
|
||||||
|
}
|
||||||
|
|
||||||
.project-repo-buttons {
|
.project-repo-buttons {
|
||||||
margin-top: $gl-padding;
|
margin-top: 12px;
|
||||||
margin-bottom: 25px;
|
margin-bottom: 0px;
|
||||||
|
|
||||||
.btn {
|
.btn {
|
||||||
@extend .btn-info;
|
@include btn-gray;
|
||||||
|
|
||||||
text-transform: uppercase;
|
|
||||||
font-size: 15px;
|
|
||||||
line-height: 20px;
|
|
||||||
padding: 8px 14px;
|
|
||||||
border-radius: 3px;
|
|
||||||
margin-left: 10px;
|
|
||||||
|
|
||||||
.count {
|
.count {
|
||||||
padding-left: 7px;
|
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin-left: 7px;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.split-one {
|
||||||
|
display: inline-table;
|
||||||
|
margin-right: 12px;
|
||||||
|
|
||||||
|
a {
|
||||||
|
margin: -1px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.git-clone-holder {
|
.git-clone-holder {
|
||||||
.project-home-dropdown + & {
|
.project-home-dropdown + & {
|
||||||
margin-right: 45px;
|
margin-right: 45px;
|
||||||
|
@ -99,11 +124,11 @@
|
||||||
cursor: auto;
|
cursor: auto;
|
||||||
@extend .monospace;
|
@extend .monospace;
|
||||||
background: #FAFAFA;
|
background: #FAFAFA;
|
||||||
width: 100%;
|
width: 101%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.input-group-addon {
|
.input-group-addon {
|
||||||
background: #FAFAFA;
|
background: #f7f8fa;
|
||||||
|
|
||||||
&.git-protocols {
|
&.git-protocols {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
@ -111,28 +136,138 @@
|
||||||
|
|
||||||
.input-group-btn:last-child > .btn {
|
.input-group-btn:last-child > .btn {
|
||||||
@include border-radius-right(0);
|
@include border-radius-right(0);
|
||||||
|
|
||||||
|
border-left: 1px solid #c6cacf;
|
||||||
|
margin-left: -2px !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.projects-search-form {
|
||||||
|
|
||||||
|
.input-group .form-control {
|
||||||
|
height: 42px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group-btn {
|
||||||
|
.btn {
|
||||||
|
@include btn-gray;
|
||||||
|
@include btn-middle;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.active {
|
||||||
|
@include box-shadow(inset 0 0 4px rgba(0, 0, 0, 0.12));
|
||||||
|
|
||||||
|
border: 1px solid #c6cacf !important;
|
||||||
|
background-color: #e4e7ed !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-green {
|
||||||
|
@include btn-green
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.split-repo-buttons {
|
||||||
|
display: inline-table;
|
||||||
|
margin: 0 12px 0 12px;
|
||||||
|
|
||||||
|
.btn{
|
||||||
|
@include btn-gray;
|
||||||
|
@include btn-default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-toggle {
|
||||||
|
margin: -5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#notification-form {
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-new {
|
||||||
|
margin-left: -5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.open > .dropdown-new.btn {
|
||||||
|
@include box-shadow(inset 0 0 4px rgba(0, 0, 0, 0.12));
|
||||||
|
|
||||||
|
border: 1px solid #c6cacf !important;
|
||||||
|
background-color: #e4e7ed !important;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: #313236 !important;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu {
|
||||||
|
@include box-shadow(rgba(76, 86, 103, 0.247059) 0px 0px 1px 0px, rgba(31, 37, 50, 0.317647) 0px 2px 18px 0px);
|
||||||
|
@include border-radius (0px);
|
||||||
|
|
||||||
|
border: none;
|
||||||
|
padding: 16px 0;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 100;
|
||||||
|
|
||||||
|
li a {
|
||||||
|
color: #5f697a;
|
||||||
|
line-height: 30px;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: #3084bb !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-fw {
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-bell {
|
||||||
|
margin-right: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-angle-down {
|
||||||
|
margin-left: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-home-panel .project-home-dropdown {
|
||||||
|
margin: 13px 0px 0;
|
||||||
|
}
|
||||||
|
|
||||||
.project-visibility-level-holder {
|
.project-visibility-level-holder {
|
||||||
.radio {
|
.radio {
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
|
|
||||||
i {
|
i {
|
||||||
margin: 0 3px;
|
margin: 2px 0;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.option-title {
|
.option-title {
|
||||||
font-weight: bold;
|
font-weight: normal;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
color: #313236;
|
||||||
}
|
}
|
||||||
|
|
||||||
.option-descr {
|
.option-descr {
|
||||||
margin-left: 36px;
|
margin-left: 29px;
|
||||||
color: $gray;
|
color: #54565b;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -232,15 +367,28 @@ table.table.protected-branches-list tr.no-border {
|
||||||
|
|
||||||
.project-stats {
|
.project-stats {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-top: 0;
|
margin-top: 15px;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
padding-top: 5px;
|
padding-top: 10px;
|
||||||
padding-bottom: 0;
|
padding-bottom: 4px;
|
||||||
|
|
||||||
ul.nav-pills {
|
ul.nav-pills {
|
||||||
display:inline-block;
|
display:inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.nav-pills li {
|
||||||
|
display:inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav > li > a {
|
||||||
|
@include btn-default;
|
||||||
|
@include btn-gray;
|
||||||
|
|
||||||
|
background-color: transparent;
|
||||||
|
border: 1px solid #f7f8fa;
|
||||||
|
margin-left: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
li {
|
li {
|
||||||
display:inline;
|
display:inline;
|
||||||
}
|
}
|
||||||
|
@ -251,11 +399,11 @@ table.table.protected-branches-list tr.no-border {
|
||||||
}
|
}
|
||||||
|
|
||||||
li.missing a {
|
li.missing a {
|
||||||
color: #bbb;
|
color: #5a6069;
|
||||||
border: 1px dashed #ccc;
|
border: 1px dashed #dce0e5;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: #FAFAFA;
|
background-color: #f0f2f5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -273,9 +421,37 @@ pre.light-well {
|
||||||
border-bottom: 1px solid #e7e9ed;
|
border-bottom: 1px solid #e7e9ed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.git-empty {
|
||||||
|
margin: 0 7px 0 7px;
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
color: #5c5d5e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.light-well {
|
||||||
|
@include border-radius (2px);
|
||||||
|
|
||||||
|
color: #5b6169;
|
||||||
|
font-size: 13px;
|
||||||
|
line-height: 1.6em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-footer {
|
||||||
|
margin-top: 20px;
|
||||||
|
|
||||||
|
.btn-remove {
|
||||||
|
@include btn-middle;
|
||||||
|
@include btn-red;
|
||||||
|
|
||||||
|
float: left !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Projects list rendered on dashboard and user page
|
* Projects list rendered on dashboard and user page
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.projects-list {
|
.projects-list {
|
||||||
@include basic-list;
|
@include basic-list;
|
||||||
|
|
||||||
|
@ -297,9 +473,15 @@ pre.light-well {
|
||||||
color: #4c4e54;
|
color: #4c4e54;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pull-right.light {
|
.project-controls {
|
||||||
|
float: right;
|
||||||
|
color: $gl-gray;
|
||||||
line-height: 45px;
|
line-height: 45px;
|
||||||
color: #7f8fa4;
|
color: #7f8fa4;
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.project-description {
|
.project-description {
|
||||||
|
@ -330,6 +512,6 @@ pre.light-well {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.inline-form {
|
.project-show-readme .readme-holder {
|
||||||
display: inline-block;
|
padding: 7px;
|
||||||
}
|
}
|
||||||
|
|
37
app/assets/stylesheets/pages/status.scss
Normal file
37
app/assets/stylesheets/pages/status.scss
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
.ci-status {
|
||||||
|
padding: 2px 7px;
|
||||||
|
margin-right: 5px;
|
||||||
|
border: 1px solid #EEE;
|
||||||
|
white-space: nowrap;
|
||||||
|
@include border-radius(4px);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.ci-failed {
|
||||||
|
color: $gl-danger;
|
||||||
|
border-color: $gl-danger;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.ci-success {
|
||||||
|
color: $gl-success;
|
||||||
|
border-color: $gl-success;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.ci-info {
|
||||||
|
color: $gl-info;
|
||||||
|
border-color: $gl-info;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.ci-disabled {
|
||||||
|
color: $gl-gray;
|
||||||
|
border-color: $gl-gray;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.ci-pending,
|
||||||
|
&.ci-running {
|
||||||
|
color: $gl-warning;
|
||||||
|
border-color: $gl-warning;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
.tree-holder {
|
.tree-holder {
|
||||||
.tree-content-holder {
|
.tree-table-holder {
|
||||||
float: left;
|
margin-left: -$gl-padding;
|
||||||
width: 100%;
|
margin-right: -$gl-padding;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tree_progress {
|
.tree_progress {
|
||||||
|
@ -13,10 +13,15 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.tree-table {
|
.tree-table {
|
||||||
@extend .table;
|
margin-bottom: 0;
|
||||||
@include border-radius(0);
|
|
||||||
|
|
||||||
tr {
|
tr {
|
||||||
|
> td, > th {
|
||||||
|
padding: 10px $gl-padding;
|
||||||
|
line-height: 32px;
|
||||||
|
border-color: $table-border-color !important;
|
||||||
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
td {
|
td {
|
||||||
background: $hover;
|
background: $hover;
|
||||||
|
@ -27,9 +32,9 @@
|
||||||
}
|
}
|
||||||
&.selected {
|
&.selected {
|
||||||
td {
|
td {
|
||||||
background: $background-color;
|
background: $gray-dark;
|
||||||
border-top: 1px solid #EEE;
|
border-top: 1px solid $border-gray-dark;
|
||||||
border-bottom: 1px solid #EEE;
|
border-bottom: 1px solid $border-gray-dark;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -85,19 +90,6 @@
|
||||||
margin-right: 15px;
|
margin-right: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.readme-holder {
|
|
||||||
margin: 0 auto;
|
|
||||||
|
|
||||||
.readme-file-title {
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: bold;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
color: #777;
|
|
||||||
border-bottom: 1px solid #DDD;
|
|
||||||
padding: 10px 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.blob-commit-info {
|
.blob-commit-info {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
.ci-body {
|
.build-page {
|
||||||
// color codes are based on http://en.wikipedia.org/wiki/File:Xterm_256color_chart.svg
|
// color codes are based on http://en.wikipedia.org/wiki/File:Xterm_256color_chart.svg
|
||||||
// see also: https://gist.github.com/jasonm23/2868981
|
// see also: https://gist.github.com/jasonm23/2868981
|
||||||
|
|
|
@ -9,6 +9,10 @@ class AbuseReportsController < ApplicationController
|
||||||
@abuse_report.reporter = current_user
|
@abuse_report.reporter = current_user
|
||||||
|
|
||||||
if @abuse_report.save
|
if @abuse_report.save
|
||||||
|
if current_application_settings.admin_notification_email.present?
|
||||||
|
AbuseReportMailer.delay.notify(@abuse_report.id)
|
||||||
|
end
|
||||||
|
|
||||||
message = "Thank you for your report. A GitLab administrator will look into it shortly."
|
message = "Thank you for your report. A GitLab administrator will look into it shortly."
|
||||||
redirect_to root_path, notice: message
|
redirect_to root_path, notice: message
|
||||||
else
|
else
|
||||||
|
|
|
@ -55,8 +55,8 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController
|
||||||
:default_snippet_visibility,
|
:default_snippet_visibility,
|
||||||
:restricted_signup_domains_raw,
|
:restricted_signup_domains_raw,
|
||||||
:version_check_enabled,
|
:version_check_enabled,
|
||||||
|
:admin_notification_email,
|
||||||
:user_oauth_applications,
|
:user_oauth_applications,
|
||||||
:ci_enabled,
|
|
||||||
restricted_visibility_levels: [],
|
restricted_visibility_levels: [],
|
||||||
import_sources: []
|
import_sources: []
|
||||||
)
|
)
|
||||||
|
|
|
@ -19,7 +19,7 @@ class Admin::BroadcastMessagesController < Admin::ApplicationController
|
||||||
BroadcastMessage.find(params[:id]).destroy
|
BroadcastMessage.find(params[:id]).destroy
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html { redirect_to :back }
|
format.html { redirect_back_or_default(default: { action: 'index' }) }
|
||||||
format.js { render nothing: true }
|
format.js { render nothing: true }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -35,7 +35,7 @@ class Admin::HooksController < Admin::ApplicationController
|
||||||
}
|
}
|
||||||
@hook.execute(data, 'system_hooks')
|
@hook.execute(data, 'system_hooks')
|
||||||
|
|
||||||
redirect_to :back
|
redirect_back_or_default
|
||||||
end
|
end
|
||||||
|
|
||||||
def hook_params
|
def hook_params
|
||||||
|
|
|
@ -39,7 +39,13 @@ class Admin::ServicesController < Admin::ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def application_services_params
|
def application_services_params
|
||||||
params.permit(:id,
|
application_services_params = params.permit(:id,
|
||||||
service: Projects::ServicesController::ALLOWED_PARAMS)
|
service: Projects::ServicesController::ALLOWED_PARAMS)
|
||||||
|
if application_services_params[:service].is_a?(Hash)
|
||||||
|
Projects::ServicesController::FILTER_BLANK_PARAMS.each do |param|
|
||||||
|
application_services_params[:service].delete(param) if application_services_params[:service][param].blank?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
application_services_params
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -33,36 +33,42 @@ class Admin::UsersController < Admin::ApplicationController
|
||||||
|
|
||||||
def block
|
def block
|
||||||
if user.block
|
if user.block
|
||||||
redirect_to :back, notice: "Successfully blocked"
|
redirect_back_or_admin_user(notice: "Successfully blocked")
|
||||||
else
|
else
|
||||||
redirect_to :back, alert: "Error occurred. User was not blocked"
|
redirect_back_or_admin_user(alert: "Error occurred. User was not blocked")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def unblock
|
def unblock
|
||||||
if user.activate
|
if user.activate
|
||||||
redirect_to :back, notice: "Successfully unblocked"
|
redirect_back_or_admin_user(notice: "Successfully unblocked")
|
||||||
else
|
else
|
||||||
redirect_to :back, alert: "Error occurred. User was not unblocked"
|
redirect_back_or_admin_user(alert: "Error occurred. User was not unblocked")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def unlock
|
def unlock
|
||||||
if user.unlock_access!
|
if user.unlock_access!
|
||||||
redirect_to :back, alert: "Successfully unlocked"
|
redirect_back_or_admin_user(alert: "Successfully unlocked")
|
||||||
else
|
else
|
||||||
redirect_to :back, alert: "Error occurred. User was not unlocked"
|
redirect_back_or_admin_user(alert: "Error occurred. User was not unlocked")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def confirm
|
def confirm
|
||||||
if user.confirm
|
if user.confirm
|
||||||
redirect_to :back, notice: "Successfully confirmed"
|
redirect_back_or_admin_user(notice: "Successfully confirmed")
|
||||||
else
|
else
|
||||||
redirect_to :back, alert: "Error occurred. User was not confirmed"
|
redirect_back_or_admin_user(alert: "Error occurred. User was not confirmed")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def login_as
|
||||||
|
sign_in(user)
|
||||||
|
flash[:alert] = "Logged in as #{user.username}"
|
||||||
|
redirect_to root_path
|
||||||
|
end
|
||||||
|
|
||||||
def disable_two_factor
|
def disable_two_factor
|
||||||
user.disable_two_factor!
|
user.disable_two_factor!
|
||||||
redirect_to admin_user_path(user),
|
redirect_to admin_user_path(user),
|
||||||
|
@ -132,7 +138,7 @@ class Admin::UsersController < Admin::ApplicationController
|
||||||
user.update_secondary_emails!
|
user.update_secondary_emails!
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html { redirect_to :back, notice: "Successfully removed email." }
|
format.html { redirect_back_or_admin_user(notice: "Successfully removed email.") }
|
||||||
format.js { render nothing: true }
|
format.js { render nothing: true }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -151,4 +157,12 @@ class Admin::UsersController < Admin::ApplicationController
|
||||||
:projects_limit, :can_create_group, :admin, :key_id
|
:projects_limit, :can_create_group, :admin, :key_id
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def redirect_back_or_admin_user(options = {})
|
||||||
|
redirect_back_or_default(default: default_route, options: options)
|
||||||
|
end
|
||||||
|
|
||||||
|
def default_route
|
||||||
|
[:admin, @user]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -30,7 +30,11 @@ class ApplicationController < ActionController::Base
|
||||||
|
|
||||||
rescue_from ActiveRecord::RecordNotFound do |exception|
|
rescue_from ActiveRecord::RecordNotFound do |exception|
|
||||||
log_exception(exception)
|
log_exception(exception)
|
||||||
render "errors/not_found", layout: "errors", status: 404
|
render_404
|
||||||
|
end
|
||||||
|
|
||||||
|
def redirect_back_or_default(default: root_path, options: {})
|
||||||
|
redirect_to request.referer.present? ? :back : default, options
|
||||||
end
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
@ -117,9 +121,14 @@ class ApplicationController < ActionController::Base
|
||||||
redirect_to request.original_url.gsub(/\.git\Z/, '') and return
|
redirect_to request.original_url.gsub(/\.git\Z/, '') and return
|
||||||
end
|
end
|
||||||
|
|
||||||
@project = Project.find_with_namespace("#{namespace}/#{id}")
|
project_path = "#{namespace}/#{id}"
|
||||||
|
@project = Project.find_with_namespace(project_path)
|
||||||
|
|
||||||
|
|
||||||
if @project and can?(current_user, :read_project, @project)
|
if @project and can?(current_user, :read_project, @project)
|
||||||
|
if @project.path_with_namespace != project_path
|
||||||
|
redirect_to request.original_url.gsub(project_path, @project.path_with_namespace) and return
|
||||||
|
end
|
||||||
@project
|
@project
|
||||||
elsif current_user.nil?
|
elsif current_user.nil?
|
||||||
@project = nil
|
@project = nil
|
||||||
|
@ -144,12 +153,8 @@ class ApplicationController < ActionController::Base
|
||||||
render "errors/access_denied", layout: "errors", status: 404
|
render "errors/access_denied", layout: "errors", status: 404
|
||||||
end
|
end
|
||||||
|
|
||||||
def not_found!
|
|
||||||
render "errors/not_found", layout: "errors", status: 404
|
|
||||||
end
|
|
||||||
|
|
||||||
def git_not_found!
|
def git_not_found!
|
||||||
render "errors/git_not_found", layout: "errors", status: 404
|
render html: "errors/git_not_found", layout: "errors", status: 404
|
||||||
end
|
end
|
||||||
|
|
||||||
def method_missing(method_sym, *arguments, &block)
|
def method_missing(method_sym, *arguments, &block)
|
||||||
|
|
|
@ -6,13 +6,16 @@ module Ci
|
||||||
@runners = Ci::Runner.order('id DESC')
|
@runners = Ci::Runner.order('id DESC')
|
||||||
@runners = @runners.search(params[:search]) if params[:search].present?
|
@runners = @runners.search(params[:search]) if params[:search].present?
|
||||||
@runners = @runners.page(params[:page]).per(30)
|
@runners = @runners.page(params[:page]).per(30)
|
||||||
@active_runners_cnt = Ci::Runner.where("contacted_at > ?", 1.minutes.ago).count
|
@active_runners_cnt = Ci::Runner.online.count
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@builds = @runner.builds.order('id DESC').first(30)
|
@builds = @runner.builds.order('id DESC').first(30)
|
||||||
@projects = Ci::Project.all
|
@projects = Ci::Project.all
|
||||||
@projects = @projects.search(params[:search]) if params[:search].present?
|
if params[:search].present?
|
||||||
|
@gl_projects = ::Project.search(params[:search])
|
||||||
|
@projects = @projects.where(gitlab_id: @gl_projects.select(:id))
|
||||||
|
end
|
||||||
@projects = @projects.where("ci_projects.id NOT IN (?)", @runner.projects.pluck(:id)) if @runner.projects.any?
|
@projects = @projects.where("ci_projects.id NOT IN (?)", @runner.projects.pluck(:id)) if @runner.projects.any?
|
||||||
@projects = @projects.page(params[:page]).per(30)
|
@projects = @projects.page(params[:page]).per(30)
|
||||||
end
|
end
|
||||||
|
@ -63,7 +66,7 @@ module Ci
|
||||||
end
|
end
|
||||||
|
|
||||||
def runner_params
|
def runner_params
|
||||||
params.require(:runner).permit(:token, :description, :tag_list, :contacted_at, :active)
|
params.require(:runner).permit(:token, :description, :tag_list, :active)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
module Ci
|
module Ci
|
||||||
class ApplicationController < ::ApplicationController
|
class ApplicationController < ::ApplicationController
|
||||||
before_action :check_enable_flag!
|
|
||||||
|
|
||||||
def self.railtie_helpers_paths
|
def self.railtie_helpers_paths
|
||||||
"app/helpers/ci"
|
"app/helpers/ci"
|
||||||
end
|
end
|
||||||
|
@ -10,13 +8,6 @@ module Ci
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def check_enable_flag!
|
|
||||||
unless current_application_settings.ci_enabled
|
|
||||||
redirect_to(disabled_ci_projects_path)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def authenticate_public_page!
|
def authenticate_public_page!
|
||||||
unless project.public
|
unless project.public
|
||||||
authenticate_user!
|
authenticate_user!
|
||||||
|
|
|
@ -1,78 +0,0 @@
|
||||||
module Ci
|
|
||||||
class BuildsController < Ci::ApplicationController
|
|
||||||
before_action :authenticate_user!, except: [:status, :show]
|
|
||||||
before_action :authenticate_public_page!, only: :show
|
|
||||||
before_action :project
|
|
||||||
before_action :authorize_access_project!, except: [:status, :show]
|
|
||||||
before_action :authorize_manage_project!, except: [:status, :show, :retry, :cancel]
|
|
||||||
before_action :authorize_manage_builds!, only: [:retry, :cancel]
|
|
||||||
before_action :build, except: [:show]
|
|
||||||
layout 'ci/build'
|
|
||||||
|
|
||||||
def show
|
|
||||||
if params[:id] =~ /\A\d+\Z/
|
|
||||||
@build = build
|
|
||||||
else
|
|
||||||
# try to find commit by sha
|
|
||||||
commit = commit_by_sha
|
|
||||||
|
|
||||||
if commit
|
|
||||||
# Redirect to commit page
|
|
||||||
redirect_to ci_project_ref_commit_path(@project, @build.commit.ref, @build.commit.sha)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
raise ActiveRecord::RecordNotFound unless @build
|
|
||||||
|
|
||||||
@builds = @project.commits.find_by_sha(@build.sha).builds.order('id DESC')
|
|
||||||
@builds = @builds.where("id not in (?)", @build.id).page(params[:page]).per(20)
|
|
||||||
@commit = @build.commit
|
|
||||||
|
|
||||||
respond_to do |format|
|
|
||||||
format.html
|
|
||||||
format.json do
|
|
||||||
render json: @build.to_json(methods: :trace_html)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def retry
|
|
||||||
if @build.commands.blank?
|
|
||||||
return page_404
|
|
||||||
end
|
|
||||||
|
|
||||||
build = Ci::Build.retry(@build)
|
|
||||||
|
|
||||||
if params[:return_to]
|
|
||||||
redirect_to URI.parse(params[:return_to]).path
|
|
||||||
else
|
|
||||||
redirect_to ci_project_build_path(project, build)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def status
|
|
||||||
render json: @build.to_json(only: [:status, :id, :sha, :coverage], methods: :sha)
|
|
||||||
end
|
|
||||||
|
|
||||||
def cancel
|
|
||||||
@build.cancel
|
|
||||||
|
|
||||||
redirect_to ci_project_build_path(@project, @build)
|
|
||||||
end
|
|
||||||
|
|
||||||
protected
|
|
||||||
|
|
||||||
def project
|
|
||||||
@project = Ci::Project.find(params[:project_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def build
|
|
||||||
@build ||= project.builds.unscoped.find_by(id: params[:id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def commit_by_sha
|
|
||||||
@project.commits.find_by(sha: params[:id])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue