Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • autolab-project/m3/Autolab
  • autolab-project/m4/Autolab
2 results
Show changes
Commits on Source (301)
Showing
with 2255 additions and 898 deletions
......@@ -31,3 +31,4 @@ doc/
out.txt
.vscode/
.byebug_history
.env
stages:
- test
- deploy
variables:
DOCKER_HOST: "tcp://0.0.0.0:4243"
test-suite:
stage: test
tags:
- test-suite
# This file is a template, and might need editing before it works on your project.
# Official language image. Look for the different tagged releases at:
# https://hub.docker.com/r/library/ruby/tags/
image: "ruby:2.6.3"
# Pick zero or more services to be used on all builds.
# Only needed when using a docker container to run your tests in.
# Check out: http://docs.gitlab.com/ce/ci/docker/using_docker_images.html#what-is-a-service
services:
- mysql:5.7
- redis:latest
variables:
MYSQL_DATABASE: autolab_test
MYSQL_ROOT_PASSWORD: SuperStrongPassword?
RAILS_ENV: test
RESTFUL_HOST: tango-dev.encs.vancouver.wsu.edu
RESTFUL_PORT: 8610
RESTFUL_KEY: test
# Cache gems in between builds
cache:
key: one-key-to-rule-them-all
paths:
- vendor/ruby
# This is a basic example for a gem or script which doesn't use
# services such as redis or postgres
before_script:
- date
- ruby -v # Print out ruby version for debugging
# Uncomment next line if your rails app needs a JS runtime:
# - apt-get update -q && apt-get install nodejs -yqq
- gem install bundler -v 1.17.3 --no-document # Bundler is not installed with the image
- bundle install -j $(nproc) --path vendor # Install dependencies into ./vendor/ruby
- AUTOLAB=`pwd`; echo $AUTOLAB;
- cd $AUTOLAB
- cp config/initializers/devise.rb.template config/initializers/devise.rb
- cp config/database.gitlab.yml config/database.yml
- cp config/school.yml.template config/school.yml
- cp config/autogradeConfig.rb.template config/autogradeConfig.rb
- mkdir attachments/ tmp/
- bundle install -j $(nproc) --path vendor
# rspec:
# script:
# - rspec spec
script:
- curl $RESTFUL_HOST:$RESTFUL_PORT
- bundle exec rails generate devise:install --skip --quiet
- bundle exec rake db:create --trace
- bundle exec rake db:setup --trace || bundle exec rake db:migrate --trace
- bundle exec rake db:migrate --trace
- bundle exec rake autolab:populate
- bundle exec rspec ./spec/features/ ./spec/api/v1/
auto-deploy:
stage: deploy
tags:
- auto-deploy
variables:
AUTOLAB_PATH: /home/autolab/Autolab
BACKUP_PATH: /home/autolab/gitlab-runner_scripts/backups
SETUP_SCRIPT: /home/autolab/Autolab/wsuv/setup.sh
AUTOLAB_EXISTS: "true"
# Grab essential files currently in Autolab
before_script:
- if [ ! -d $AUTOLAB_PATH ]; then AUTOLAB_EXISTS="false"; fi
- if [ $AUTOLAB_EXISTS = "true" ]; then
- echo "Extracting data from current Autolab directory"
- cd $AUTOLAB_PATH
# Dump the current Autolab database
- mysqldump -u root -p autolab_development --password="$SQL_PASSWORD" > backup.sql
- cp "backup.sql" $BACKUP_PATH
- cp -r "assessmentConfig" $BACKUP_PATH
- cp -r "courses" $BACKUP_PATH
- cp -r "courseConfig" $BACKUP_PATH
- cp -r "gradebooks" $BACKUP_PATH
- cp "config/autogradeConfig.rb" $BACKUP_PATH
- cp "config/database.yml" $BACKUP_PATH
- cp "config/school.yml" $BACKUP_PATH
- cp "config/secrets.yml" $BACKUP_PATH
- cp "config/environments/production.rb" $BACKUP_PATH
- cp "config/initializers/devise.rb" $BACKUP_PATH
- cd $CI_PROJECT_DIR
# Replace Autolab-Old with current Autolab
- rm -rf /home/autolab/Autolab-Old
- mv $AUTOLAB_PATH /home/autolab/Autolab-Old
- fi
# Start the setup script
script:
# Replace current Autolab with new Autolab
- cp -r ../Autolab "/home/autolab"
- cd $AUTOLAB_PATH
- chmod +x $SETUP_SCRIPT
- $SETUP_SCRIPT
# Put essential files into new Autolab
after_script:
- if [ $AUTOLAB_EXISTS = "true" ]; then
- echo "Inserting data from previous Autolab directory"
- cd $BACKUP_PATH
- cp backup.sql $AUTOLAB_PATH
- cp -r assessmentConfig $AUTOLAB_PATH
- cp -r courses $AUTOLAB_PATH
- cp -r courseConfig $AUTOLAB_PATH
- cp -r gradebooks $AUTOLAB_PATH
- cp autogradeConfig.rb "${AUTOLAB_PATH}/config"
- cp database.yml "${AUTOLAB_PATH}/config"
- cp school.yml "${AUTOLAB_PATH}/config"
- cp secrets.yml "${AUTOLAB_PATH}/config"
- cp production.rb "${AUTOLAB_PATH}/config/environments"
- cp devise.rb "${AUTOLAB_PATH}/config/initializers"
- cd $AUTOLAB_PATH
# Insert database back into autolab
- mysql -u root -p autolab_development --password="$SQL_PASSWORD" < backup.sql
- bundle exec rake db:migrate --trace
- rm backup.sql
- fi
only:
refs:
- dev
--color
--require rails_helper
--require factory_girl_rails
--require factory_girl
--require factory_bot_rails
--require factory_bot
......@@ -2,6 +2,7 @@ AllCops:
Include:
- '**/Rakefile'
- '**/config.ru'
- 'spec/factories/*.rb'
Exclude:
- 'assessmentConfig/**/*'
- 'attachments/**/*'
......@@ -11,7 +12,9 @@ AllCops:
- 'db/**/*'
- 'script/**/*'
- 'tmp/**/*'
RunRailsCops: true
Rails:
Enabled: true
Metrics/LineLength:
Max: 100
......@@ -27,7 +30,7 @@ Metrics/MethodLength:
Max: 20
# Indent private/protected/public as deep as method definitions
Style/AccessModifierIndentation:
Layout/AccessModifierIndentation:
EnforcedStyle: outdent
SupportedStyles:
- outdent
......
2.2.2
2.6.3
os: linux
dist: xenial
language: ruby
cache: bundler
rvm:
- 2.2.0
- 2.6.3
services:
- mysql
env:
global:
- secure: HMIuu9EFHDQEfQRX/0sDzu6QhINF3qe/LAjqhEivEGLykbNF7WVwcg/OUAElVi9kM2FIoOvibzduP0T6oBG3dlnXj/X8XkiR/ROfg0Njyfb548MK9c88D8uMEGfjxnKvyyN34TPsT9oSVA8FziE+wyWo5smQ/4FjdVFSj4A2zfc=
- secure: Z6YE6NuDeuraasd5gFG+x7PU3rKxhLjL6VZ7HJfZJEVyxFucRz8Hv4xlxkQV3P61w6S0uyp/reXwKy8meYAQLzVZ4pBpK7sEeSZ5w00WRH8NCGeMJmwdQi2JLCYRZ/KdOc0o5l5bbND+JG1o/U9HtG2cHO2G8M6hVGbARn+ywLg=
global:
- secure: HMIuu9EFHDQEfQRX/0sDzu6QhINF3qe/LAjqhEivEGLykbNF7WVwcg/OUAElVi9kM2FIoOvibzduP0T6oBG3dlnXj/X8XkiR/ROfg0Njyfb548MK9c88D8uMEGfjxnKvyyN34TPsT9oSVA8FziE+wyWo5smQ/4FjdVFSj4A2zfc=
- secure: Z6YE6NuDeuraasd5gFG+x7PU3rKxhLjL6VZ7HJfZJEVyxFucRz8Hv4xlxkQV3P61w6S0uyp/reXwKy8meYAQLzVZ4pBpK7sEeSZ5w00WRH8NCGeMJmwdQi2JLCYRZ/KdOc0o5l5bbND+JG1o/U9HtG2cHO2G8M6hVGbARn+ywLg=
before_script:
- AUTOLAB=`pwd`; echo $AUTOLAB;
- cd $AUTOLAB
- cp config/initializers/devise.rb.template config/initializers/devise.rb
- cp config/database.travis.yml config/database.yml
- cp config/school.yml.template config/school.yml
- cp config/autogradeConfig.rb.template config/autogradeConfig.rb
- mkdir attachments/ tmp/
- bundle install --quiet
- RAILS_ENV=test bundle exec rails generate devise:install --skip --quiet
- RAILS_ENV=test bundle exec rake db:create --trace
- RAILS_ENV=test bundle exec rake db:setup --trace
- RAILS_ENV=test bundle exec rake db:migrate --trace
- RAILS_ENV=test bundle exec rake autolab:populate
- AUTOLAB=`pwd`; echo $AUTOLAB;
- cd $AUTOLAB
- cp config/initializers/devise.rb.template config/initializers/devise.rb
- mv config/database.travis.yml config/database.yml
- cp config/school.yml.template config/school.yml
- cp config/autogradeConfig.rb.template config/autogradeConfig.rb
- mkdir attachments/ tmp/
- bundle install --quiet
# - mysql -e "SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));"
- RAILS_ENV=test bundle exec rails generate devise:install --skip --quiet
- RAILS_ENV=test bundle exec rake db:create --trace
- RAILS_ENV=test bundle exec rake db:migrate --trace
- RAILS_ENV=test bundle exec rake db:setup --trace
- RAILS_ENV=test bundle exec rake autolab:populate
script:
- RAILS_ENV=test CODECLIMATE_REPO_TOKEN=d37a8b9e09642cb73cfcf4ecfb4115fc3d6a55a7714110187ac59856ae4ab5ad
bundle exec rspec ./spec/features/ ./spec/api/v1/
- RAILS_ENV=test CODECLIMATE_REPO_TOKEN=d37a8b9e09642cb73cfcf4ecfb4115fc3d6a55a7714110187ac59856ae4ab5ad
bundle exec rspec ./spec/features/ ./spec/api/v1/
notifications:
slack:
secure: GXcycaSBFaOYI6Ge0vhqCYK1xxixwjASOMkV2bkfE6PNIGkDEEQdTpOkohPGoKuz2W9KCGrXC38sbu4npMtonz0/sISydG+g7V33XkLqPaW8oUcdYhwJyBUEB/Ds17U/FJ4IhT9oOrhl17Sm0rm92Mhu6O2eeZYAclGqJgZNLvg=
slack:
secure: GXcycaSBFaOYI6Ge0vhqCYK1xxixwjASOMkV2bkfE6PNIGkDEEQdTpOkohPGoKuz2W9KCGrXC38sbu4npMtonz0/sISydG+g7V33XkLqPaW8oUcdYhwJyBUEB/Ds17U/FJ4IhT9oOrhl17Sm0rm92Mhu6O2eeZYAclGqJgZNLvg=
source 'https://rubygems.org'
ruby '2.6.3'
gem 'rails', '=4.2.1'
gem 'rails', '=5.2.0'
# Use SCSS for stylesheets
gem 'sass-rails', '>= 4.0.3'
......@@ -9,7 +10,7 @@ gem 'sass-rails', '>= 4.0.3'
gem 'materialize-sass'
# Use for some of the glypicons on the site
gem 'bootstrap-sass', '~> 3.3.6'
gem 'bootstrap-sass', '>= 3.4.1'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
......@@ -18,14 +19,11 @@ gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '>= 4.0.0'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
gem 'therubyracer', platforms: :ruby
gem 'mini_racer', platforms: :ruby
# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '>= 2.0'
......@@ -45,18 +43,18 @@ gem 'rake', '>=10.3.2'
gem 'populator', '>=1.0.0'
# To communicate with MySQL database
gem 'mysql2', '=0.3.18'
gem 'sqlite3'
gem 'mysql2', '~>0.4.10'
# Development server
gem 'thin'
# External authentication
gem 'devise', '=3.4.0'
gem 'devise', '>=4.5.0'
gem 'omniauth', '>=1.2.2'
gem 'omniauth-facebook', '>=2.0.0'
gem 'omniauth-google-oauth2', '>=0.2.5'
gem 'omniauth-shibboleth', '>=1.1.2'
gem 'omniauth-oktaoauth'
# Autolab API OAuth Service
gem 'doorkeeper'
......@@ -73,11 +71,11 @@ gem 'rubyzip'
# Helper gem for Ruby JSON API client
gem 'httparty'
# Enables RSpec testing framework with Capybara and Factory Girl.
gem 'rspec-rails'
# Enables RSpec testing framework with Capybara and FactoryBot.
gem 'rspec-rails', '>=3.5.0'
gem 'rack-test'
gem 'capybara', group: [:development, :test]
gem 'factory_girl_rails', group: [:development, :test]
gem 'factory_bot_rails', group: [:development, :test]
gem 'database_cleaner', group: [:development, :test]
gem 'webmock', group: [:development, :test]
gem 'codeclimate-test-reporter', group: :test, require: nil
......@@ -98,7 +96,7 @@ gem 'js_cookie_rails'
# Dates and times
gem 'momentjs-rails', '>= 2.9.0'
gem 'bootstrap3-datetimepicker-rails', '~> 4.0.0'
gem 'bootstrap3-datetimepicker-rails', '>= 4.17.47'
# Force SSL on certain routes
gem 'rack-ssl-enforcer'
......@@ -108,17 +106,20 @@ group :development do
gem 'better_errors'
gem 'binding_of_caller' # enhances better_errors
# Useful debugger
gem 'byebug', '>=3.5.1'
# static code analyzer
gem 'rubocop', require: false
# documentation generator
gem 'yard'
# sqlite3 adapter
gem 'sqlite3', '~> 1.3.6'
end
# Useful debugger
gem 'byebug', '>=3.5.1'
# for PDF annotations
# This is an outdate version however support for
# templating has been dropped in the future versions
......@@ -128,4 +129,9 @@ gem 'prawn', '0.13.0'
# LDAP Lookup
gem 'net-ldap'
gem 'sprockets-rails', '2.3.3'
gem 'sprockets-rails', '>=3.2.1'
gem "jstz-rails3-plus", ">= 1.0"
# For getting file types
gem 'mimemagic', '>= 0.3.5'
GEM
remote: https://rubygems.org/
specs:
Ascii85 (1.0.2)
actionmailer (4.2.1)
actionpack (= 4.2.1)
actionview (= 4.2.1)
activejob (= 4.2.1)
Ascii85 (1.0.3)
actioncable (5.2.0)
actionpack (= 5.2.0)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
actionmailer (5.2.0)
actionpack (= 5.2.0)
actionview (= 5.2.0)
activejob (= 5.2.0)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 1.0, >= 1.0.5)
actionpack (4.2.1)
actionview (= 4.2.1)
activesupport (= 4.2.1)
rack (~> 1.6)
rack-test (~> 0.6.2)
rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.1)
actionview (4.2.1)
activesupport (= 4.2.1)
rails-dom-testing (~> 2.0)
actionpack (5.2.0)
actionview (= 5.2.0)
activesupport (= 5.2.0)
rack (~> 2.0)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionview (5.2.0)
activesupport (= 5.2.0)
builder (~> 3.1)
erubis (~> 2.7.0)
rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.1)
activejob (4.2.1)
activesupport (= 4.2.1)
globalid (>= 0.3.0)
activemodel (4.2.1)
activesupport (= 4.2.1)
builder (~> 3.1)
activerecord (4.2.1)
activemodel (= 4.2.1)
activesupport (= 4.2.1)
arel (~> 6.0)
activesupport (4.2.1)
i18n (~> 0.7)
json (~> 1.7, >= 1.7.7)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.3)
activejob (5.2.0)
activesupport (= 5.2.0)
globalid (>= 0.3.6)
activemodel (5.2.0)
activesupport (= 5.2.0)
activerecord (5.2.0)
activemodel (= 5.2.0)
activesupport (= 5.2.0)
arel (>= 9.0)
activestorage (5.2.0)
actionpack (= 5.2.0)
activerecord (= 5.2.0)
marcel (~> 0.3.1)
activesupport (5.2.0)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
addressable (2.5.0)
public_suffix (~> 2.0, >= 2.0.2)
addressable (2.7.0)
public_suffix (>= 2.0.2, < 5.0)
afm (0.2.2)
arel (6.0.4)
ast (2.3.0)
autoprefixer-rails (6.6.1)
arel (9.0.0)
ast (2.4.0)
autoprefixer-rails (9.7.5)
execjs
bcrypt (3.1.11)
better_errors (2.1.1)
bcrypt (3.1.13)
better_errors (2.6.0)
coderay (>= 1.0.0)
erubis (>= 2.6.6)
erubi (>= 1.0.0)
rack (>= 0.9.0)
binding_of_caller (0.7.2)
binding_of_caller (0.8.0)
debug_inspector (>= 0.0.1)
bootstrap-sass (3.3.7)
bootstrap-sass (3.4.1)
autoprefixer-rails (>= 5.2.1)
sass (>= 3.3.4)
bootstrap3-datetimepicker-rails (4.0.0)
sassc (>= 2.0.0)
bootstrap3-datetimepicker-rails (4.17.47)
momentjs-rails (>= 2.8.1)
browser-timezone-rails (1.0.1)
browser-timezone-rails (1.1.0)
js_cookie_rails
jstz-rails3-plus
rails (>= 3.1)
builder (3.2.2)
byebug (9.0.6)
capybara (2.11.0)
builder (3.2.4)
byebug (11.1.1)
capybara (3.32.0)
addressable
mime-types (>= 1.16)
nokogiri (>= 1.3.3)
rack (>= 1.0.0)
rack-test (>= 0.5.4)
xpath (~> 2.0)
codeclimate-test-reporter (1.0.4)
simplecov
coderay (1.1.1)
coffee-rails (4.2.1)
mini_mime (>= 0.1.3)
nokogiri (~> 1.8)
rack (>= 1.6.0)
rack-test (>= 0.6.3)
regexp_parser (~> 1.5)
xpath (~> 3.2)
codeclimate-test-reporter (1.0.9)
simplecov (<= 0.13)
coderay (1.1.2)
coffee-rails (5.0.0)
coffee-script (>= 2.2.0)
railties (>= 4.0.0, < 5.2.x)
railties (>= 5.2.0)
coffee-script (2.4.1)
coffee-script-source
execjs
coffee-script-source (1.12.2)
concurrent-ruby (1.0.4)
concurrent-ruby (1.1.6)
crack (0.4.3)
safe_yaml (~> 1.0.0)
daemons (1.2.4)
database_cleaner (1.5.3)
debug_inspector (0.0.2)
devise (3.4.0)
crass (1.0.6)
daemons (1.3.1)
database_cleaner (1.8.4)
debug_inspector (0.0.3)
devise (4.7.1)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 3.2.6, < 5)
railties (>= 4.1.0)
responders
thread_safe (~> 0.1)
warden (~> 1.2.3)
diff-lcs (1.2.5)
diff-lcs (1.3)
docile (1.1.5)
doorkeeper (4.2.0)
railties (>= 4.2)
doorkeeper (5.3.1)
railties (>= 5)
dynamic_form (1.1.4)
erubis (2.7.0)
eventmachine (1.2.1)
exception_notification (4.2.1)
actionmailer (>= 4.0, < 6)
activesupport (>= 4.0, < 6)
erubi (1.9.0)
eventmachine (1.2.7)
exception_notification (4.4.0)
actionmailer (>= 4.0, < 7)
activesupport (>= 4.0, < 7)
execjs (2.7.0)
factory_girl (4.8.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.8.0)
factory_girl (~> 4.8.0)
railties (>= 3.0.0)
faraday (0.10.1)
factory_bot (5.1.2)
activesupport (>= 4.2.0)
factory_bot_rails (5.1.1)
factory_bot (~> 5.1.0)
railties (>= 4.2.0)
faraday (1.0.1)
multipart-post (>= 1.2, < 3)
globalid (0.3.7)
activesupport (>= 4.1.0)
hashdiff (0.3.4)
ffi (1.12.2)
globalid (0.4.2)
activesupport (>= 4.2.0)
hashdiff (1.0.1)
hashery (2.1.2)
hashie (3.4.6)
httparty (0.14.0)
hashie (4.1.0)
httparty (0.18.0)
mime-types (~> 3.0)
multi_xml (>= 0.5.2)
i18n (0.7.0)
jbuilder (2.6.1)
activesupport (>= 3.0.0, < 5.1)
multi_json (~> 1.2)
jquery-rails (4.2.2)
i18n (1.8.2)
concurrent-ruby (~> 1.0)
jaro_winkler (1.5.4)
jbuilder (2.10.0)
activesupport (>= 5.0.0)
jquery-rails (4.3.5)
rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
js_cookie_rails (2.1.4)
js_cookie_rails (2.2.0)
railties (>= 3.1)
json (1.8.3)
json (2.3.0)
jstz-rails3-plus (1.0.5)
railties (>= 3.1)
jwt (1.5.6)
libv8 (3.16.14.17)
loofah (2.0.3)
jwt (2.2.1)
libv8 (7.3.492.27.1)
loofah (2.4.0)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
mail (2.6.4)
mime-types (>= 1.16, < 4)
materialize-sass (0.97.8)
sass (~> 3.3)
mime-types (3.1)
mail (2.7.1)
mini_mime (>= 0.1.1)
marcel (0.3.3)
mimemagic (~> 0.3.2)
materialize-sass (1.0.0)
autoprefixer-rails (>= 6.0.3)
method_source (1.0.0)
mime-types (3.3.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2016.0521)
mini_portile2 (2.1.0)
minitest (5.10.1)
momentjs-rails (2.15.1)
mime-types-data (3.2019.1009)
mimemagic (0.3.5)
mini_mime (1.0.2)
mini_portile2 (2.4.0)
mini_racer (0.2.9)
libv8 (>= 6.9.411)
minitest (5.14.0)
momentjs-rails (2.20.1)
railties (>= 3.1)
multi_json (1.12.1)
multi_json (1.14.1)
multi_xml (0.6.0)
multipart-post (2.0.0)
mysql2 (0.3.18)
net-ldap (0.15.0)
newrelic_rpm (3.17.2.327)
nokogiri (1.7.0.1)
mini_portile2 (~> 2.1.0)
oauth2 (1.3.0)
faraday (>= 0.8, < 0.11)
jwt (~> 1.0)
multipart-post (2.1.1)
mysql2 (0.4.10)
net-ldap (0.16.2)
newrelic_rpm (6.9.0.363)
nio4r (2.5.2)
nokogiri (1.10.9)
mini_portile2 (~> 2.4.0)
oauth2 (1.4.4)
faraday (>= 0.8, < 2.0)
jwt (>= 1.0, < 3.0)
multi_json (~> 1.3)
multi_xml (~> 0.5)
rack (>= 1.2, < 3)
omniauth (1.3.1)
hashie (>= 1.2, < 4)
rack (>= 1.0, < 3)
omniauth-facebook (4.0.0)
omniauth (1.9.1)
hashie (>= 3.4.6)
rack (>= 1.6.2, < 3)
omniauth-facebook (6.0.0)
omniauth-oauth2 (~> 1.2)
omniauth-google-oauth2 (0.4.1)
jwt (~> 1.5.2)
multi_json (~> 1.3)
omniauth-google-oauth2 (0.8.0)
jwt (>= 2.0)
omniauth (>= 1.1.1)
omniauth-oauth2 (>= 1.3.1)
omniauth-oauth2 (1.4.0)
oauth2 (~> 1.0)
omniauth (~> 1.2)
omniauth-shibboleth (1.2.1)
omniauth-oauth2 (>= 1.6)
omniauth-oauth2 (1.6.0)
oauth2 (~> 1.1)
omniauth (~> 1.9)
omniauth-oktaoauth (0.1.6)
omniauth (~> 1.5)
omniauth-oauth2 (>= 1.4.0, < 2.0)
omniauth-shibboleth (1.3.0)
omniauth (>= 1.0.0)
orm_adapter (0.5.0)
parser (2.3.3.1)
ast (~> 2.2)
parallel (1.19.1)
parser (2.7.1.0)
ast (~> 2.4.0)
pdf-reader (1.4.1)
Ascii85 (~> 1.0.0)
afm (~> 0.2.1)
......@@ -184,130 +205,131 @@ GEM
ruby-rc4
ttfunk
populator (1.0.0)
powerpack (0.1.1)
prawn (0.13.0)
afm
pdf-reader (~> 1.2)
ruby-rc4
ttfunk (~> 1.0.3)
public_suffix (2.0.5)
rack (1.6.5)
rack-attack (5.0.1)
rack
public_suffix (4.0.3)
rack (2.2.2)
rack-attack (6.2.2)
rack (>= 1.0, < 3)
rack-ssl-enforcer (0.2.9)
rack-test (0.6.3)
rack (>= 1.0)
rails (4.2.1)
actionmailer (= 4.2.1)
actionpack (= 4.2.1)
actionview (= 4.2.1)
activejob (= 4.2.1)
activemodel (= 4.2.1)
activerecord (= 4.2.1)
activesupport (= 4.2.1)
bundler (>= 1.3.0, < 2.0)
railties (= 4.2.1)
sprockets-rails
rails-deprecated_sanitizer (1.0.3)
activesupport (>= 4.2.0.alpha)
rails-dom-testing (1.0.8)
activesupport (>= 4.2.0.beta, < 5.0)
nokogiri (~> 1.6)
rails-deprecated_sanitizer (>= 1.0.1)
rails-html-sanitizer (1.0.3)
loofah (~> 2.0)
railties (4.2.1)
actionpack (= 4.2.1)
activesupport (= 4.2.1)
rack-test (1.1.0)
rack (>= 1.0, < 3)
rails (5.2.0)
actioncable (= 5.2.0)
actionmailer (= 5.2.0)
actionpack (= 5.2.0)
actionview (= 5.2.0)
activejob (= 5.2.0)
activemodel (= 5.2.0)
activerecord (= 5.2.0)
activestorage (= 5.2.0)
activesupport (= 5.2.0)
bundler (>= 1.3.0)
railties (= 5.2.0)
sprockets-rails (>= 2.0.0)
rails-dom-testing (2.0.3)
activesupport (>= 4.2.0)
nokogiri (>= 1.6)
rails-html-sanitizer (1.3.0)
loofah (~> 2.3)
railties (5.2.0)
actionpack (= 5.2.0)
activesupport (= 5.2.0)
method_source
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
rainbow (2.2.1)
rake (12.0.0)
rdoc (4.3.0)
ref (2.0.0)
responders (2.3.0)
railties (>= 4.2.0, < 5.1)
rspec-core (3.5.4)
rspec-support (~> 3.5.0)
rspec-expectations (3.5.0)
rainbow (3.0.0)
rake (13.0.1)
rdoc (6.2.1)
regexp_parser (1.7.0)
responders (3.0.0)
actionpack (>= 5.0)
railties (>= 5.0)
rexml (3.2.4)
rspec-core (3.9.1)
rspec-support (~> 3.9.1)
rspec-expectations (3.9.1)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.5.0)
rspec-mocks (3.5.0)
rspec-support (~> 3.9.0)
rspec-mocks (3.9.1)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.5.0)
rspec-rails (3.5.2)
actionpack (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
rspec-core (~> 3.5.0)
rspec-expectations (~> 3.5.0)
rspec-mocks (~> 3.5.0)
rspec-support (~> 3.5.0)
rspec-support (3.5.0)
rubocop (0.46.0)
parser (>= 2.3.1.1, < 3.0)
powerpack (~> 0.1)
rainbow (>= 1.99.1, < 3.0)
rspec-support (~> 3.9.0)
rspec-rails (4.0.0)
actionpack (>= 4.2)
activesupport (>= 4.2)
railties (>= 4.2)
rspec-core (~> 3.9)
rspec-expectations (~> 3.9)
rspec-mocks (~> 3.9)
rspec-support (~> 3.9)
rspec-support (3.9.2)
rubocop (0.81.0)
jaro_winkler (~> 1.5.1)
parallel (~> 1.10)
parser (>= 2.7.0.1)
rainbow (>= 2.2.2, < 4.0)
rexml
ruby-progressbar (~> 1.7)
unicode-display_width (~> 1.0, >= 1.0.1)
ruby-progressbar (1.8.1)
unicode-display_width (>= 1.4.0, < 2.0)
ruby-progressbar (1.10.1)
ruby-rc4 (0.1.5)
rubyzip (1.2.0)
safe_yaml (1.0.4)
sass (3.4.23)
sass-rails (5.0.6)
railties (>= 4.0.0, < 6)
sass (~> 3.1)
sprockets (>= 2.8, < 4.0)
sprockets-rails (>= 2.0, < 4.0)
tilt (>= 1.1, < 3)
sdoc (0.4.2)
json (~> 1.7, >= 1.7.7)
rdoc (~> 4.0)
simplecov (0.12.0)
rubyzip (2.3.0)
safe_yaml (1.0.5)
sass-rails (6.0.0)
sassc-rails (~> 2.1, >= 2.1.1)
sassc (2.2.1)
ffi (~> 1.9)
sassc-rails (2.1.2)
railties (>= 4.0.0)
sassc (>= 2.0)
sprockets (> 3.0)
sprockets-rails
tilt
sdoc (1.1.0)
rdoc (>= 5.0)
simplecov (0.13.0)
docile (~> 1.1.0)
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
simplecov-html (0.10.0)
slack-notifier (2.0.0)
spring (2.0.0)
activesupport (>= 4.2)
sprockets (3.7.1)
simplecov-html (0.10.2)
slack-notifier (2.3.2)
spring (2.1.0)
sprockets (4.0.0)
concurrent-ruby (~> 1.0)
rack (> 1, < 3)
sprockets-rails (2.3.3)
actionpack (>= 3.0)
activesupport (>= 3.0)
sprockets (>= 2.8, < 4.0)
sprockets-rails (3.2.1)
actionpack (>= 4.0)
activesupport (>= 4.0)
sprockets (>= 3.0.0)
sqlite3 (1.3.13)
therubyracer (0.12.3)
libv8 (~> 3.16.14.15)
ref
thin (1.7.0)
thin (1.7.2)
daemons (~> 1.0, >= 1.0.9)
eventmachine (~> 1.0, >= 1.0.4)
rack (>= 1, < 3)
thor (0.19.4)
thread_safe (0.3.5)
tilt (2.0.5)
thor (1.0.1)
thread_safe (0.3.6)
tilt (2.0.10)
ttfunk (1.0.3)
turbolinks (5.0.1)
turbolinks-source (~> 5)
turbolinks-source (5.0.0)
tzinfo (1.2.2)
tzinfo (1.2.7)
thread_safe (~> 0.1)
uglifier (3.0.4)
uglifier (4.2.0)
execjs (>= 0.3.0, < 3)
unicode-display_width (1.1.2)
warden (1.2.6)
rack (>= 1.0)
webmock (3.0.1)
unicode-display_width (1.7.0)
warden (1.2.8)
rack (>= 2.0.6)
webmock (3.8.3)
addressable (>= 2.3.6)
crack (>= 0.3.2)
hashdiff
xpath (2.0.0)
nokogiri (~> 1.3)
yard (0.9.8)
hashdiff (>= 0.4.0, < 2.0.0)
websocket-driver (0.7.1)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.4)
xpath (3.2.0)
nokogiri (~> 1.8)
yard (0.9.24)
PLATFORMS
ruby
......@@ -315,54 +337,59 @@ PLATFORMS
DEPENDENCIES
better_errors
binding_of_caller
bootstrap-sass (~> 3.3.6)
bootstrap3-datetimepicker-rails (~> 4.0.0)
bootstrap-sass (>= 3.4.1)
bootstrap3-datetimepicker-rails (>= 4.17.47)
browser-timezone-rails
byebug (>= 3.5.1)
capybara
codeclimate-test-reporter
coffee-rails (>= 4.0.0)
database_cleaner
devise (= 3.4.0)
devise (>= 4.5.0)
doorkeeper
dynamic_form
exception_notification (>= 4.1.0)
factory_girl_rails
factory_bot_rails
httparty
jbuilder (>= 2.0)
jquery-rails
js_cookie_rails
jstz-rails3-plus (>= 1.0)
materialize-sass
mimemagic (>= 0.3.5)
mini_racer
momentjs-rails (>= 2.9.0)
mysql2 (= 0.3.18)
mysql2 (~> 0.4.10)
net-ldap
newrelic_rpm
omniauth (>= 1.2.2)
omniauth-facebook (>= 2.0.0)
omniauth-google-oauth2 (>= 0.2.5)
omniauth-oktaoauth
omniauth-shibboleth (>= 1.1.2)
populator (>= 1.0.0)
prawn (= 0.13.0)
rack-attack
rack-ssl-enforcer
rack-test
rails (= 4.2.1)
rails (= 5.2.0)
rake (>= 10.3.2)
rspec-rails
rspec-rails (>= 3.5.0)
rubocop
rubyzip
sass-rails (>= 4.0.3)
sdoc (>= 0.4.0)
slack-notifier
spring
sprockets-rails (= 2.3.3)
sqlite3
therubyracer
sprockets-rails (>= 3.2.1)
sqlite3 (~> 1.3.6)
thin
turbolinks
uglifier (>= 1.3.0)
webmock
yard
RUBY VERSION
ruby 2.6.3p62
BUNDLED WITH
1.15.4
1.17.3
......@@ -26,6 +26,7 @@ Since 2010, Autolab has had a transformative impact on education at CMU. Each se
We released new documentation! Check it out [here](https://autolab.github.io/docs).
We are currently in the process of updating our documentation to work with our newest release of Autolab, v2.5.0, which has been upgraded to Rails 5 from Rails 4
## Testing
......@@ -54,6 +55,14 @@ After setting up the test environment, simply run spec by:
bundle exec rake spec
```
## Rails 4 Support
Autolab is now running on Rails 5. However, we may still work on important bug fixes on the Rails 4 branch,
partially because the deployment on CMU is currently still on Rails 4. Please file an issue
if you believe that you have found a severe bug. The Rails 4 branch
can be found on `master-rails-4`.
We will not be backporting new features from `master` to `master-rails-4`.
## Contributing
We encourage you to contribute to Autolab! Please check out the
......@@ -68,3 +77,38 @@ Autolab is released under the [Apache License 2.0](http://opensource.org/license
## Using Autolab
Please feel free to use Autolab at your school/organization. If you run into any problems, you can reach the core developers at `autolab-dev@andrew.cmu.edu` and we would be happy to help. On a case by case basis, we also provide servers for free. (Especially if you are an NGO or small high-school classroom)
## Changelog
### v2.5.0 (2020/02/22) Upgrade from Rails 4 Rails 5
- Autolab has been upgraded from Rails 4 to Rails 5 after almost a year of effort! There are still some small
bugs to be fixed, but it should not affect the core functionality of Autolab. Please file an issue if you believe
you have found a bug.
### [v2.4.0](https://github.com/autolab/Autolab/releases/tag/v2.4.0) (2020/02/08) Speedgrader - The new code viewer
- The File Tree shows file hierarchy of student’s submission
- Click on a file to open
- Click on a folder to expand
- The Symbol Tree allows you to jump quickly to functions in the student’s code
- Click on a function to jump
- You can easily switch between submissions and files
- Up/down arrow keys change file
- Right/left arrow keys change submission
- How to use new annotation system:
- Make annotations with grade adjustments
- Important: annotations can only be made for non-autograded problems (to preserve the original autograded score of the autograded problem)
- Annotations grade changes summarized by the Annotations table on the right
- New: Score for problem automatically updates after annotation score changes based on the following formula (this no longer has to be done manually on the Gradebook):
`score = max_score + ∑(annotation score changes) `
- For example, a way to grade style in a deductive manner would be to set the max score for the Style problem, and make annotations with negative score for style violations and zero score for good style
UI Enhancements
- Tables are more standardized
- Fixed text overflowing issues on Gradebook modals
- Improved standardization and UI for annotations on PDF submissions
Others
- Course assistants are now able to submit assignments early
//= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css
//= link highlightjs-styles/vs.css
//= link assessments/create_edit.css
//= link SlickGrid/2.02/slick.grid.css
//= link SlickGrid/2.02/controls/slick.columnpicker.css
//= link SlickGrid/2.02/slick.core.js
//= link SlickGrid/2.02/slick.grid.js
//= link SlickGrid/2.02/slick.dataview.js
//= link SlickGrid/2.02/controls/slick.columnpicker.js
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
<path fill="#444444" d="M10 0c0 0-2.1 0-2.7 3l-0.4 2h-1.9l-0.5 1h2.2l-1.4 7c-0.4 2-1.9 2-1.9 2h-1l-0.4 1h3c0 0 2.1 0 2.7-3l1.4-7h2.4l0.5-1h-2.7l0.4-2c0.4-2 1.8-2 1.8-2h1l0.5-1h-3z"></path>
</svg>
......@@ -27,10 +27,11 @@
var $li, $input;
for (var i = 0; i < columns.length; i++) {
$li = $("<li />").appendTo($menu);
$input = $("<input type='checkbox' />").data("column-id", columns[i].id);
columnCheckboxes.push($input);
if (grid.getColumnIndex(columns[i].id) != null) {
$input.attr("checked", "checked");
}
......
This diff is collapsed.
......@@ -22,7 +22,7 @@ $(document).ready(function() {
$('.tooltipped').tooltip({delay: 50});
/* Materialize Initializations */
$('select').material_select();
$('select').formSelect();
});
......@@ -15,8 +15,7 @@
//= require moment
//= require bootstrap-datetimepicker
//= require app-level
//= require materialize
//= require materialize-sprockets
//= require js.cookie
//= require jstz
//= require browser_timezone_rails/set_time_zone
\ No newline at end of file
//= require browser_timezone_rails/set_time_zone
......@@ -7,5 +7,4 @@
# # On file pick, we submit the form automatically
# $("input[type='file']").change (e)->
# $('#handin_show_assessment #new_submission').submit()
# $("#handin_show_assessment input[type='file']").val("") # clear for re-selecting the same file
# $("#handin_show_assessment input[type='file']").val("") # clear for re-selecting the same file
\ No newline at end of file
/*!
* $.fn.scrollIntoView - similar to the default browser scrollIntoView
* The default browser behavior always places the element at the top or bottom of its container.
* This override is smart enough to not scroll if the element is already visible.
*
* Copyright 2011 Arwid Bancewicz
* Licensed under the MIT license
* http://www.opensource.org/licenses/mit-license.php
*
* @date 8 Jan 2013
* @author Arwid Bancewicz http://arwid.ca
* @version 0.3
*/
(function(a){a.fn.scrollIntoView=function(f,j,c){var b=a.extend({},a.fn.scrollIntoView.defaults);if(a.type(f)=="object"){a.extend(b,f)}else{if(a.type(f)=="number"){a.extend(b,{duration:f,easing:j,complete:c})}else{if(f==false){b.smooth=false}}}var h=Infinity,e=0;if(this.size()==1){((h=this.get(0).offsetTop)==null||(e=h+this.get(0).offsetHeight))}else{this.each(function(m,n){(n.offsetTop<h?h=n.offsetTop:n.offsetTop+n.offsetHeight>e?e=n.offsetTop+n.offsetHeight:null)})}e-=h;var k=this.commonAncestor().get(0);var g=a(window).height();while(k){var d=k.scrollTop,l=k.clientHeight;if(l>g){l=g}if(l==0&&k.tagName=="BODY"){l=g}if((k.scrollTop!=((k.scrollTop+=1)==null||k.scrollTop)&&(k.scrollTop-=1)!=null)||(k.scrollTop!=((k.scrollTop-=1)==null||k.scrollTop)&&(k.scrollTop+=1)!=null)){if(h<=d){i(k,h)}else{if((h+e)>(d+l)){i(k,h+e-l)}else{i(k,undefined)}}return}k=k.parentNode}function i(n,m){if(m===undefined){if(a.isFunction(b.complete)){b.complete.call(n)}}else{if(b.smooth){a(n).stop().animate({scrollTop:m},b)}else{n.scrollTop=m;if(a.isFunction(b.complete)){b.complete.call(n)}}}}return this};a.fn.scrollIntoView.defaults={smooth:true,duration:null,easing:a.easing&&a.easing.easeOutExpo?"easeOutExpo":null,complete:a.noop(),step:null,specialEasing:{}};a.fn.isOutOfView=function(b){var c=true;this.each(function(){var h=this.parentNode,d=h.scrollTop,g=h.clientHeight,f=this.offsetTop,e=this.offsetHeight;if(b?(f)>(d+g):(f+e)>(d+g)){}else{if(b?(f+e)<d:f<d){}else{c=false}}});return c};a.fn.commonAncestor=function(){var c=[];var f=Infinity;a(this).each(function(){var g=a(this).parents();c.push(g);f=Math.min(f,g.length)});for(var d=0;d<c.length;d++){c[d]=c[d].slice(c[d].length-f)}for(var d=0;d<c[0].length;d++){var e=true;for(var b in c){if(c[b][d]!=c[0][d]){e=false;break}}if(e){return a(c[0][d])}}return a([])}})(jQuery);
\ No newline at end of file
......@@ -35,8 +35,8 @@ jQuery(function($) {
'sPaginationType': 'full_numbers',
'iDisplayLength': 100,
'oLanguage': {
'sLengthMenu':'<input type="checkbox" id="only-latest">' +
'<label for="only-latest">Show only latest</label>'
'sLengthMenu':'<label><input type="checkbox" id="only-latest">' +
'<span>Show only latest</span></label>'
},
"columnDefs": [{
"targets": [7],
......
function setFile(header_position) {
}
@charset "utf-8";
pre code {
font-size: 12px;
/* Overarching Rules */
.page-wrapper {
height: 100vh;
overflow: hidden;
}
.row {
max-height: calc(100vh - 190px);
}
#code-loader {
height: 50vh;
display: flex;
background: blue;
position: fixed;
margin: auto;
z-index: 100;
}
.code-table {
background: #fcfcfc;
border: 1px solid #ccc;
max-height: calc(100vh - 230px);
overflow: auto;
}
#code-box.loading .code-table {
filter: blur(1px);
pointer-events: none;
}
.code-table .code-line:hover {
background: #d5d5d5;
}
.code-table .code-line pre {
padding: 0;
margin: 0;
}
.code-table .code-line {
display: flex;
align-items: center;
height: 28px;
min-width: 100%;
background: inherit;
}
.code-table .line-sticky {
position: sticky;
left: 0;
background: inherit;
height: 100%;
display: flex;
}
.code-table .line-number {
text-align: left;
margin: 0 5px 0 5px;
font-family: 'Courier New', Courier, monospace;
user-select: none;
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
min-width: 36px;
background: inherit;
}
.code-table .code-separator {
height: 100%;
background: #ccc;
width: 2px;
margin: 0;
padding: 0;
}
#code-box .file-header {
border: 1px #ccc solid;
top: 0;
left: 0;
z-index: 999;
background: inherit;
display: flex;
}
#code-box .file-header .file-name {
border-right: 1px #ccc solid;
padding: 5px;
display: flex;
align-items: center;
margin-right: auto;
}
#code-box .file-button {
border-left: 1px #ccc solid;
padding: 5px;
display: flex;
align-items: center;
}
#code-box .file-button:hover{
background: #eee;
}
#code-box .file-button span {
background: #cbcbcb;
padding: 2px;
border-radius: 1px;
user-select: none;
-ms-user-select: none;
-moz-user-select: none;
cursor: pointer;
}
.code-table .code-line:hover .add-button {
visibility: visible;
}
.code-table .add-button-container {
display: flex;
align-items: center;
justify-items: center;
width: 30px;
}
.code-table .add-button {
background: #090;
outline: none;
border: none;
margin: 1px;
padding: 0;
color: #fff;
border-radius: 5px;
text-align: center;
width: 24px;
height: 24px;
visibility: hidden;
}
.code-table .annotation-container {
position: sticky;
left: 0;
}
.code-table .annotation-line {
width: 100%;
display: flex;
height: 100%;
align-items: stretch;
}
.code-table .annotation-line .point_badge {
padding: 0 8px;
border-radius: 100vw;
margin-right: 5px;
color: white;
font-weight: bold;
}
.code-table .annotation-line .point_badge.positive {
background: #57d66a;
}
.code-table .annotation-line .point_badge.negative {
background: #ec612a;
}
.code-table .annotation-line .point_badge.neutral {
background: #818181;
}
.code-table .annotation-line .problem {
background: #818181;
margin-left: -8px;
border-top-left-radius: 100vw;
padding-left: 8px;
padding-right: 3px;
border-bottom-left-radius: 100vw;
}
.code-table .annotation-line .annotation-tools .material-icons {
position: relative;
top: 5px;
}
.code-table .annotation-line .annotation-box {
border: 1px solid #ccc;
background: white;
margin: 0 10px;
margin-bottom: 5px;
}
.code-table .annotation-line .annotation-box .annotation-separator {
height: 1px;
background: #ccc;
}
.code-table .annotation-line .annotation-box .annotation-header {
display: flex;
background: #ccc;
padding: 5px;
font-weight: bold;
justify-content: center;
align-items: center;
}
.code-table .annotation-line .annotation-box .annotation-header .annotation-tools {
margin-left: auto;
}
.code-table .annotation-line .annotation-box .annotation-body {
padding: 5px;
}
.code-table .annotation-line .annotation-box .annotation-body p {
margin: 5px 0;
}
.code-table .annotation-line .annotation-form {
border: 1px solid #ccc;
padding: 5px;
margin: 0 10px;
margin-bottom: 5px;
width: 100%;
}
.code-table .annotation-line .annotation-form .error {
padding: 5px;
margin: 5px;
border: 1px solid red;
}
.code-table .annotation-line .annotation-preview {
border: 1px solid #ccc;
padding: 5px;
margin: 0 10px;
width: 100%;
}
.code-table .float-left {
float: left;
}
.code-table .float-right {
float: right;
}
.code-table .float-left {
clear: both;
}
#code_error {
padding: 2% 5%;
background: #eee;
}
#code-list {
......@@ -44,25 +299,13 @@ pre code {
position: absolute;
left: 0;
}
#code-list > li > div {
}
.add-annotation-btn {
background: #090;
color: #fff;
display: none;
left: 0;
margin-left: -16px;
position: absolute;
font-size: 8px;
line-height: 18px;
text-align: center;
height: 20px;
width: 20px;
visibility: hidden;
border-radius: 4px;
box-shadow: 0 1px 4px rgba(0,0,0,0.15);
z-index: 999;
}
.add-annotation-btn:hover {
......@@ -100,7 +343,7 @@ pre code {
.ann-box > .header > .delete,
.ann-box > .header > .minimize,
.ann-box > .header > .edit {
.ann-box > .header > .edit {
border: 1px solid transparent;
display: block;
font-weight: bold;
......@@ -108,8 +351,15 @@ pre code {
width: 2em;
color: #666;
border-radius: 4px;
cursor:pointer;
}
.ann-box > .maximize{
color: #666;
cursor:pointer;
}
.ann-box .score-box {
float: right;
background-color: #ddd;
......@@ -128,6 +378,7 @@ pre code {
background-color: #ccc;
}
.ann-box > .header > .minimize:hover,
.ann-box > .header > .delete:hover,
.ann-box > .header > .edit:hover {
border: 1px solid #ccc;
......@@ -138,22 +389,16 @@ pre code {
padding: .5em;
}
.annotation-form {
width: 94%;
border: 1px solid #ccc;
border-radius: 4px;
font-family: 'Source Sans Pro', sans-serif;
padding: 6px;
background-color: #fff;
margin-top: 6px;
z-index: 5;
}
.annotation-edit-form {
border-radius: 4px;
font-family: 'Source Sans Pro', sans-serif;
padding: 6px;
padding-bottom: 5px;
background-color: #fff;
text-align:left;
font-size: 14px;
-webkit-box-shadow: rgba(0, 0, 0, 0.137255) 0px 0px 4px 0px, rgba(0, 0, 0, 0.278431) 0px 4px 8px 0px;
box-shadow: rgba(0, 0, 0, 0.137255) 0px 0px 4px 0px, rgba(0, 0, 0, 0.278431) 0px 4px 8px 0px;
z-index: 3;
}
.annotation-form hr {
......@@ -166,11 +411,32 @@ pre code {
padding-bottom: 0;
}
#pdf-doc .annotation-form {
#pdf-doc .annotation-form {
position: absolute;
width: 400px;
text-align:left;
font-family: 'Source Sans Pro', sans-serif;
font-size: 14px;
-webkit-box-shadow: rgba(0, 0, 0, 0.137255) 0px 0px 4px 0px, rgba(0, 0, 0, 0.278431) 0px 4px 8px 0px;
box-shadow: rgba(0, 0, 0, 0.137255) 0px 0px 4px 0px, rgba(0, 0, 0, 0.278431) 0px 4px 8px 0px;
z-index: 3;
}
#pdf-doc .annotation-form > label , #pdf-doc .annotation-edit-form > label {
font-size: 16px;
color: #444;
font-weight: bold;
padding-left:10px;
padding-right:10px;
}
#pdf-doc .annotation-form > div, #pdf-doc .annotation-edit-form > div{
padding-right:10px;
padding-left:10px;
}
#pdf-doc .annotation-form > .btn, #pdf-doc .annotation-edit-form > .btn {
margin-left: 10px;
}
#pdf-doc .ann-box {
......@@ -186,13 +452,14 @@ pre code {
}
#pdf-doc .ann-box .body {
color: #ff0000;
color: #e22a2a;
font-size: 15px;
}
#pdf-doc .ann-box .score-box {
float: none;
background-color: transparent;
color: red;
color: black;
border-radius: 2px;
font-size: 12px;
margin-right: 4px;
......@@ -212,20 +479,6 @@ pre code {
left: -2px;
}
pre {
display: block;
padding: 9.5px;
margin: 0 0 10px;
font-size: 13px;
line-height: 1.42857143;
word-break: break-all;
word-wrap: break-word;
color: #333333;
background-color: #f5f5f5;
border: 1px solid #ccc;
border-radius: 4px;
}
.header > .grader {
flex: 2 0 0;
}
......@@ -233,3 +486,310 @@ pre {
.collapse_expand{
margin-bottom:10px;
}
/* Annotation Pane Styling CSS */
#annotationPane{
display: flex;
flex-flow: column;
height: 100%;
}
.annotationSummary{
border: solid 2px #569ff7;
margin-bottom: 15px;
color: #4f4f4f;
}
.annotationSummary h1{
margin: 0px;
background-color: #569ff7;
padding: 8px;
border-right: none;
border-left: none;
font-weight: normal !important;
font-size: 1em !important;
color: white;
white-space: nowrap;
overflow: hidden;
padding-left: 10px;
padding-right: 15px;
text-align: left;
}
.annotationSummary ul {
box-shadow: none;
border: none;
margin: 10px 0;
max-height: 350px;
}
.annotationSummary .collapsible-header{
min-height: inherit;
line-height: inherit;
border: none;
padding: 5px;
padding-left: 10px;
}
.annotationSummary .collapsible-header h4{
margin: 3px;
font-size: 1.1em;
}
.annotationSummary .collapsible-header .dropdown-arrow{
}
.annotationSummary .collapsible-body{
padding: 0 1rem;
border: none;
}
.annotationSummary .summary_score {
float: right;
font-weight: normal;
}
.annotationSummary .point_badge {
padding: 0 8px;
border-radius: 100vw;
margin-right: 5px;
color: white;
font-weight: bold;
}
.annotationSummary .point_badge.positive {
background: #57d66a;
}
.annotationSummary .point_badge.negative {
background: #ec612a;
}
.annotationSummary .point_badge.neutral {
background: #818181;
}
.problemGrades{
border: solid 2px #ebebeb;
overflow: auto;
}
.problemGrades h1{
margin: 0px;
background-color: #ebebeb;
padding: 8px;
border-right: none;
border-left: none;
font-weight: normal !important;
font-size: 1em !important;
color: #909090;
white-space: nowrap;
overflow: hidden;
padding-left: 10px;
padding-right: 15px;
text-align: left;
}
.problemGrades ul{
margin: 5px 10px;
}
.collection{
margin: 0;
border: none;
}
.problem-grade-item{
background-color: #fff;
line-height: 1.5rem;
padding: 2px 10px;
margin: 0;
border-bottom: 1px solid #e0e0e0;
font-weight: bold;
font-size: 0.9em;
color: #7a7a7a;
}
.student_score{
color: #090;
}
/* File Tree Styling CSS */
.file-explorer{
max-height: 60%;
overflow: auto;
}
.file-list{
color: #333;
}
.folder-contents{
margin-left:10px;
}
.file{
margin-left:5px;
padding: 3px;
}
.file:not(.active):hover, .folder-name:hover{
background: #eee;
}
.file.active{
background: #009ff5;
color: white;
}
.file-list i{
margin-right: 3px
}
.folder-name{
cursor: pointer;
}
.folder-name.active .closed-icon{
display:none;
}
.folder-name:not(.active) .open-icon{
display:none;
}
.folder-name:not(.active) + .folder-contents{
display: none;
}
/* Helper class to make text unselectable */
.noselect {
-webkit-touch-callout: none; /* iOS Safari */
-webkit-user-select: none; /* Safari */
-khtml-user-select: none; /* Konqueror HTML */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* Internet Explorer/Edge */
user-select: none; /* Non-prefixed version, currently
supported by Chrome and Opera */
}
/* Symbol Tree Styling */
#symbol-tree-container {
height: 30%;
overflow: auto;
}
#symbol-tree-box {
/* overflow: auto; */
}
#symbol-tree-box ul {
font-weight: bold;
color: gray;
margin-top: 0;
}
#symbol-tree-box ul li {
cursor: pointer;
display: flex;
}
#symbol-tree-box ul li:hover {
background: #eee;
}
#symbol-tree-box li img {
height:15px;
}
/* Loader CSS */
#code-box.loading .lds-spinner{
display:inline-block;
}
.lds-spinner {
display:none;
position: fixed;
width: 64px;
height: 64px;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
z-index: 1;
}
.lds-spinner div {
transform-origin: 32px 32px;
animation: lds-spinner 1.2s linear infinite;
}
.lds-spinner div:after {
content: " ";
display: block;
position: absolute;
top: 3px;
left: 29px;
width: 5px;
height: 14px;
border-radius: 20%;
background: #000;
}
.lds-spinner div:nth-child(1) {
transform: rotate(0deg);
animation-delay: -1.1s;
}
.lds-spinner div:nth-child(2) {
transform: rotate(30deg);
animation-delay: -1s;
}
.lds-spinner div:nth-child(3) {
transform: rotate(60deg);
animation-delay: -0.9s;
}
.lds-spinner div:nth-child(4) {
transform: rotate(90deg);
animation-delay: -0.8s;
}
.lds-spinner div:nth-child(5) {
transform: rotate(120deg);
animation-delay: -0.7s;
}
.lds-spinner div:nth-child(6) {
transform: rotate(150deg);
animation-delay: -0.6s;
}
.lds-spinner div:nth-child(7) {
transform: rotate(180deg);
animation-delay: -0.5s;
}
.lds-spinner div:nth-child(8) {
transform: rotate(210deg);
animation-delay: -0.4s;
}
.lds-spinner div:nth-child(9) {
transform: rotate(240deg);
animation-delay: -0.3s;
}
.lds-spinner div:nth-child(10) {
transform: rotate(270deg);
animation-delay: -0.2s;
}
.lds-spinner div:nth-child(11) {
transform: rotate(300deg);
animation-delay: -0.1s;
}
.lds-spinner div:nth-child(12) {
transform: rotate(330deg);
animation-delay: 0s;
}
@keyframes lds-spinner {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
.collapsible {
max-height: 50vh;
overflow: auto;
}
.descript {
cursor: pointer;
}
.summary_score{
padding-left: 10px;
}
\ No newline at end of file