├── .coveralls.yml ├── .devcontainer ├── Dockerfile ├── create-db-user.sql ├── devcontainer.json ├── docker-compose.yml └── post-create.sh ├── .flow ├── .github └── workflows │ ├── build.yml │ └── release.yml ├── .gitignore ├── .hgeol ├── .hgflow ├── .hgignore ├── .redmine.code-workspace ├── .travis.yml ├── GPL.txt ├── Gemfile_for_test ├── README.md ├── app ├── controllers │ ├── code_review_controller.rb │ └── code_review_settings_controller.rb ├── helpers │ └── code_review_helper.rb ├── models │ ├── code_review.rb │ ├── code_review_assignment.rb │ ├── code_review_project_setting.rb │ ├── code_review_user_setting.rb │ └── review_mailer.rb └── views │ ├── code_review │ ├── _add_success.html.erb │ ├── _body_bottom.html.erb │ ├── _change_attachement_view.html.erb │ ├── _change_entry_norevision_view.html.erb │ ├── _change_repository_view.html.erb │ ├── _change_revision_view.html.erb │ ├── _history.html.erb │ ├── _html_header.html.erb │ ├── _issues_show_details_bottom.html.erb │ ├── _new_form.html.erb │ ├── _reply.html.erb │ ├── _show.html.erb │ ├── _show_error.html.erb │ ├── _update_diff_view.html.erb │ ├── _update_revisions.html.erb │ └── index.html.erb │ └── code_review_settings │ ├── _filters.html.erb │ └── _show.html.erb ├── assets ├── images │ ├── 1downarrow.png │ ├── 1uparrow.png │ ├── 2downarrow.png │ ├── 2uparrow.png │ ├── closed_review.png │ └── review.png ├── javascripts │ └── code_review.js └── stylesheets │ ├── activity.css │ ├── code_review.css │ └── window_js │ ├── MIT-LICENSE │ ├── alert.css │ ├── alert │ ├── bottom.gif │ ├── bottom_left.gif │ ├── bottom_right.gif │ ├── left.gif │ ├── overlay.png │ ├── progress.gif │ ├── right.gif │ ├── top.gif │ ├── top_left.gif │ └── top_right.gif │ ├── alert_lite.css │ ├── alphacube.css │ ├── alphacube │ ├── bottom-left-c.gif │ ├── bottom-middle.gif │ ├── bottom-right-c.gif │ ├── button-close-focus.gif │ ├── button-max-focus.gif │ ├── button-min-focus.gif │ ├── frame-left.gif │ ├── frame-right.gif │ ├── left-top.gif │ ├── right-top.gif │ └── top-middle.gif │ ├── behavior.htc │ ├── darkX.css │ ├── darkX │ ├── button-close-focused.png │ ├── button-maximize-focused.png │ ├── button-minimize-focused.png │ ├── frame-bottom-left-focused.png │ ├── frame-bottom-mid-focused.png │ ├── frame-bottom-right-focused.png │ ├── frame-left-focused.png │ ├── frame-right-focused.png │ ├── titlebar-left-focused.png │ ├── titlebar-mid-focused.png │ └── titlebar-right-focused.png │ ├── debug.css │ ├── default.css │ ├── default │ ├── bottom_left.gif │ ├── bottom_mid.gif │ ├── bottom_right.gif │ ├── bottom_right_resize.gif │ ├── center_left.gif │ ├── center_right.gif │ ├── clear.gif │ ├── close.gif │ ├── inspect.gif │ ├── maximize.gif │ ├── minimize.gif │ ├── overlay.png │ ├── resize.gif │ ├── sizer.gif │ ├── top_left.gif │ ├── top_mid.gif │ └── top_right.gif │ ├── iefix │ ├── blank.gif │ ├── iepngfix.css │ └── iepngfix.htc │ ├── lighting.css │ ├── lighting │ ├── background_buttons.gif │ ├── bottom-left-blue.png │ ├── bottom-left-darkblue.png │ ├── bottom-left-green.png │ ├── bottom-left-grey.png │ ├── bottom-middle-blue.png │ ├── bottom-middle-darkblue.png │ ├── bottom-middle-green.png │ ├── bottom-middle-grey.png │ ├── bottom-right-blue.png │ ├── bottom-right-darkblue.png │ ├── bottom-right-green.png │ ├── bottom-right-grey.png │ ├── button-close-blue.png │ ├── button-close-darkblue.png │ ├── button-close-green.png │ ├── button-close-grey.png │ ├── button-maximize-blue.png │ ├── button-maximize-darkblue.png │ ├── button-maximize-green.png │ ├── button-maximize-grey.png │ ├── button-minimize-blue.png │ ├── button-minimize-darkblue.png │ ├── button-minimize-green.png │ ├── button-minimize-grey.png │ ├── left-blue.png │ ├── left-darkblue.png │ ├── left-green.png │ ├── left-grey.png │ ├── pngbehavior.htc │ ├── right-blue.png │ ├── right-darkblue.png │ ├── right-green.png │ ├── right-grey.png │ ├── spinner.gif │ ├── top-left-blue.png │ ├── top-left-darkblue.png │ ├── top-left-green.png │ ├── top-left-grey.png │ ├── top-middle-blue.png │ ├── top-middle-darkblue.png │ ├── top-middle-green.png │ ├── top-middle-grey.png │ ├── top-right-blue.png │ ├── top-right-darkblue.png │ ├── top-right-green.png │ └── top-right-grey.png │ ├── mac_os_x.css │ ├── mac_os_x │ ├── B.png │ ├── BL.png │ ├── BL_Main.png │ ├── BR.png │ ├── BR_Main.png │ ├── B_Main.png │ ├── L.png │ ├── L_Main.png │ ├── R.png │ ├── R_Main.png │ ├── T.png │ ├── TL.png │ ├── TL_Main.png │ ├── TR.png │ ├── TR_Main.png │ ├── T_Main.png │ ├── close.gif │ ├── maximize.gif │ └── minimize.gif │ ├── mac_os_x_dialog.css │ ├── mac_os_x_dialog │ ├── B.png │ ├── BL.png │ ├── BR.png │ ├── L.png │ ├── R.png │ ├── T.png │ ├── TL.png │ ├── TR.png │ ├── bg.gif │ ├── close.gif │ ├── maximize.gif │ └── minimize.gif │ ├── nuncio.css │ ├── nuncio │ ├── bottom_left.png │ ├── bottom_mid.png │ ├── bottom_right.png │ ├── center_left.png │ ├── center_right.png │ ├── close.png │ ├── minimize.png │ ├── overlay.png │ ├── top_left.png │ ├── top_mid.png │ └── top_right.png │ ├── spread.css │ └── spread │ ├── bottom-left-c.gif │ ├── bottom-middle.gif │ ├── bottom-right-c.gif │ ├── button-close-focus.gif │ ├── button-max-focus.gif │ ├── button-min-focus.gif │ ├── frame-left.gif │ ├── frame-right.gif │ ├── left-top.gif │ ├── right-top.gif │ └── top-middle.gif ├── build-scripts ├── build.sh ├── cleanup.sh ├── database.yml ├── env.sh └── install.sh ├── config ├── locales │ ├── bg.yml │ ├── de.yml │ ├── en.yml │ ├── es.yml │ ├── fr.yml │ ├── hu.yml │ ├── ja.yml │ ├── ko.yml │ ├── nl.yml │ ├── pl.yml │ ├── pt-BR.yml │ ├── ru.yml │ ├── sk.yml │ ├── sv.yml │ ├── zh-TW.yml │ └── zh.yml └── routes.rb ├── db └── migrate │ ├── 0001_create_code_reviews.rb │ ├── 0002_add_updated_by.rb │ ├── 0003_add_lock_version.rb │ ├── 0004_add_status_changed.rb │ ├── 0005_create_code_review_user_settings.rb │ ├── 0006_link_to_issue.rb │ ├── 0007_rename_user.rb │ ├── 0008_create_code_review_project_settings.rb │ ├── 0009_add_hide_tab.rb │ ├── 0010_add_action_type.rb │ ├── 0011_add_auto_relation.rb │ ├── 0012_add_attachment_id.rb │ ├── 0013_add_file_count.rb │ ├── 0014_create_code_review_assignments.rb │ ├── 0015_add_assignment_tracker.rb │ ├── 0016_add_changeset_id.rb │ ├── 0017_add_auto_assign.rb │ ├── 0018_add_lock_version_to_project_settings.rb │ ├── 0019_delete_old_fields.rb │ ├── 0020_add_tracker_to_review_dialog.rb │ ├── 0021_add_diff_all.rb │ └── 20220312104356_add_repository_id_to_code_reviews.rb ├── init.rb ├── lib ├── code_review_application_hooks.rb ├── code_review_attachment_patch.rb ├── code_review_auto_assign_settings.rb ├── code_review_change_patch.rb ├── code_review_changeset_patch.rb ├── code_review_issue_hooks.rb ├── code_review_issue_patch.rb └── code_review_projects_helper_patch.rb ├── test ├── code_review_object_daddy_helpers.rb ├── exemplars │ └── code_review_exemplar.rb ├── fixtures │ ├── code_review_assignments.yml │ ├── code_review_project_settings.yml │ ├── code_review_user_settings.yml │ └── code_reviews.yml ├── functional │ ├── attachments_controller_test.rb │ ├── code_review_controller_test.rb │ ├── code_review_settings_controller_test.rb │ ├── issues_controller_test.rb │ ├── projects_controller_test.rb │ └── repositories_controller_test.rb ├── test_helper.rb ├── test_runner.rb └── unit │ ├── code_review_assignment_test.rb │ ├── code_review_attachment_patch_test.rb │ ├── code_review_auto_assign_settings_test.rb │ ├── code_review_change_patch_test.rb │ ├── code_review_changeset_patch_test.rb │ ├── code_review_project_settings_test.rb │ ├── code_review_test.rb │ └── code_review_user_setting_test.rb └── travis ├── env.sh ├── travis.sh └── travis_install.sh /.coveralls.yml: -------------------------------------------------------------------------------- 1 | service_name: travis-ci -------------------------------------------------------------------------------- /.devcontainer/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG RUBY_VERSION=3.2 2 | ARG REDMINE_VERSION=master 3 | FROM haru/redmine_devcontainer:${REDMINE_VERSION}-ruby${RUBY_VERSION} 4 | COPY .devcontainer/post-create.sh /post-create.sh 5 | 6 | 7 | -------------------------------------------------------------------------------- /.devcontainer/create-db-user.sql: -------------------------------------------------------------------------------- 1 | CREATE USER vscode CREATEDB; 2 | CREATE DATABASE vscode WITH OWNER vscode; 3 | -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | // For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: 2 | // https://github.com/microsoft/vscode-dev-containers/tree/v0.202.5/containers/ruby-rails-postgres 3 | // Update the VARIANT arg in docker-compose.yml to pick a Ruby version 4 | { 5 | "name": "Ruby on Rails & Postgres", 6 | "dockerComposeFile": "docker-compose.yml", 7 | "service": "app", 8 | 9 | "mounts": [ 10 | "source=${localWorkspaceFolder},target=/workspaces/${localWorkspaceFolderBasename},type=bind" 11 | ], 12 | "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", 13 | // "workspaceFolder": "/workspaces/dev.code-workspace", 14 | 15 | // Set *default* container specific settings.json values on container create. 16 | "settings": { 17 | "sqltools.connections": [ 18 | { 19 | "name": "Rails Development Database", 20 | "driver": "PostgreSQL", 21 | "previewLimit": 50, 22 | "server": "localhost", 23 | "port": 5432, 24 | 25 | // update this to match config/database.yml 26 | "database": "app_development", 27 | "username": "vscode" 28 | }, 29 | { 30 | "name": "Rails Test Database", 31 | "driver": "PostgreSQL", 32 | "previewLimit": 50, 33 | "server": "localhost", 34 | "port": 5432, 35 | 36 | // update this to match config/database.yml 37 | "database": "app_test", 38 | "username": "vscode" 39 | } 40 | ] 41 | }, 42 | 43 | // Add the IDs of extensions you want installed when the container is created. 44 | "extensions": [ 45 | "rebornix.Ruby", 46 | "mtxr.sqltools", 47 | "mtxr.sqltools-driver-pg", 48 | "craigmaslowski.erb", 49 | "hridoy.rails-snippets", 50 | "misogi.ruby-rubocop", 51 | "jnbt.vscode-rufo", 52 | "donjayamanne.git-extension-pack", 53 | "ms-azuretools.vscode-docker", 54 | "KoichiSasada.vscode-rdbg", 55 | "Serhioromano.vscode-gitflow", 56 | "github.vscode-github-actions" 57 | ], 58 | 59 | // Use 'forwardPorts' to make a list of ports inside the container available locally. 60 | // "forwardPorts": [3000, 5432], 61 | 62 | // Use 'postCreateCommand' to run commands after the container is created. 63 | "postCreateCommand": "sh -x /post-create.sh", 64 | 65 | // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. 66 | "remoteUser": "vscode", 67 | "features": { 68 | // "git": "latest" 69 | }, 70 | 71 | "containerEnv": { 72 | "PLUGIN_NAME": "${localWorkspaceFolderBasename}" 73 | }, 74 | 75 | "forwardPorts": [3000] 76 | } -------------------------------------------------------------------------------- /.devcontainer/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | app: 5 | build: 6 | context: .. 7 | dockerfile: .devcontainer/Dockerfile 8 | args: 9 | # Update 'VARIANT' to pick a version of Ruby: 3, 3.0, 2, 2.7, 2.6 10 | # Append -bullseye or -buster to pin to an OS version. 11 | # Use -bullseye variants on local arm64/Apple Silicon. 12 | RUBY_VERSION: "3.2" 13 | # Optional Node.js version to install 14 | NODE_VERSION: "lts/*" 15 | REDMINE_VERSION: "6.0-stable" 16 | 17 | # Overrides default command so things don't shut down after the process ends. 18 | command: sleep infinity 19 | 20 | # Runs app on the same network as the database container, allows "forwardPorts" in devcontainer.json function. 21 | # network_mode: service:postgres 22 | # Uncomment the next line to use a non-root user for all processes. 23 | # user: vscode 24 | 25 | # Use "forwardPorts" in **devcontainer.json** to forward an app port locally. 26 | # (Adding the "ports" property to this file will not forward from a Codespace.) 27 | 28 | postgres: 29 | image: postgres:latest 30 | restart: unless-stopped 31 | volumes: 32 | - postgres-data:/var/lib/postgresql/data 33 | - ./create-db-user.sql:/docker-entrypoint-initdb.d/create-db-user.sql 34 | environment: 35 | POSTGRES_USER: postgres 36 | POSTGRES_DB: redmine 37 | POSTGRES_PASSWORD: postgres 38 | # Add "forwardPorts": ["5432"] to **devcontainer.json** to forward PostgreSQL locally. 39 | # (Adding the "ports" property to this file will not forward from a Codespace.) 40 | 41 | mysql: 42 | image: mysql:latest 43 | restart: unless-stopped 44 | volumes: 45 | - mysql-data:/var/lib/mysql 46 | # network_mode: service:postgres 47 | command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci 48 | environment: 49 | MYSQL_ROOT_PASSWORD: root 50 | MYSQL_USER: redmine 51 | MYSQL_DB: redmine 52 | MYSQL_PASSWORD: remine 53 | volumes: 54 | postgres-data: null 55 | mysql-data: null 56 | -------------------------------------------------------------------------------- /.devcontainer/post-create.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | cd /usr/local/redmine 3 | 4 | ln -s /workspaces/${PLUGIN_NAME} plugins/${PLUGIN_NAME} 5 | if [ -f plugins/${PLUGIN_NAME}/Gemfile_for_test ] 6 | then 7 | cp plugins/${PLUGIN_NAME}/Gemfile_for_test plugins/${PLUGIN_NAME}/Gemfile 8 | fi 9 | cp plugins/${PLUGIN_NAME}/test/fixtures/*.yml test/fixtures 10 | ln -s /workspaces/${PLUGIN_NAME}/.devcontainer/launch.json .vscode/launch.json 11 | 12 | bundle install 13 | bundle exec rake redmine:plugins:migrate 14 | bundle exec rake redmine:plugins:migrate RAILS_ENV=test 15 | 16 | initdb() { 17 | bundle exec rake db:create 18 | bundle exec rake db:migrate 19 | bundle exec rake redmine:plugins:migrate 20 | 21 | bundle exec rake db:drop RAILS_ENV=test 22 | bundle exec rake db:create RAILS_ENV=test 23 | bundle exec rake db:migrate RAILS_ENV=test 24 | bundle exec rake redmine:plugins:migrate RAILS_ENV=test 25 | } 26 | 27 | initdb 28 | 29 | export DB=mysql2 30 | export DB_NAME=redmine 31 | export DB_USERNAME=root 32 | export DB_PASSWORD=root 33 | export DB_HOST=mysql 34 | export DB_PORT=3306 35 | 36 | initdb 37 | 38 | export DB=postgresql 39 | export DB_NAME=redmine 40 | export DB_USERNAME=postgres 41 | export DB_PASSWORD=postgres 42 | export DB_HOST=postgres 43 | export DB_PORT=5432 44 | 45 | initdb -------------------------------------------------------------------------------- /.flow: -------------------------------------------------------------------------------- 1 | [branchname] 2 | hotfix=hotfix/ 3 | develop=develop 4 | master=default 5 | release=release/ 6 | support=support/ 7 | feature=feature/ 8 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: build 2 | on: [push, pull_request] 3 | env: 4 | SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }} 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | # Supported Matrix: 9 | # Redmine 5.0-stable: Ruby 2.7, 3.0, 3.1 10 | # Redmine 5.1-stable: Ruby 2.7, 3.0, 3.1, 3.2 11 | # Redmine 6.0-stable: Ruby 3.1, 3.2, 3.3 12 | # Redmine master: Ruby 3.1, 3.2, 3.3 13 | strategy: 14 | matrix: 15 | db: [sqlite3, mysql, postgres] 16 | ruby_version: ["3.0", "3.1", "3.2", "3.3"] 17 | redmine_version: [5.0-stable, 5.1-stable, 6.0-stable, master] 18 | exclude: 19 | - ruby_version: "3.2" 20 | redmine_version: 5.0-stable 21 | - ruby_version: "3.3" 22 | redmine_version: 5.0-stable 23 | - ruby_version: "3.3" 24 | redmine_version: 5.1-stable 25 | - ruby_version: "3.0" 26 | redmine_version: 6.0-stable 27 | - ruby_version: "3.0" 28 | redmine_version: master 29 | services: 30 | mysql: 31 | image: mysql:5.7 32 | options: --health-cmd "mysqladmin ping -h localhost" --health-interval 20s --health-timeout 10s --health-retries 10 33 | env: 34 | MYSQL_ROOT_PASSWORD: dbpassword 35 | postgres: 36 | image: postgres 37 | env: 38 | POSTGRES_USER: root 39 | POSTGRES_PASSWORD: dbpassword 40 | options: >- 41 | --health-cmd pg_isready 42 | --health-interval 10s 43 | --health-timeout 5s 44 | --health-retries 5 45 | container: 46 | image: ruby:${{ matrix.ruby_version }} 47 | env: 48 | DB: ${{ matrix.db }} 49 | DB_USERNAME: root 50 | DB_PASSWORD: dbpassword 51 | DB_HOST: ${{ matrix.db }} 52 | REDMINE_VER: ${{ matrix.redmine_version }} 53 | steps: 54 | - uses: actions/checkout@v4 55 | - name: Install 56 | run: bash -x ./build-scripts/install.sh 57 | - name: Build 58 | run: bash -x ./build-scripts/build.sh 59 | - name: Clean 60 | run: bash -x ./build-scripts/cleanup.sh 61 | - uses: codecov/codecov-action@v5 62 | with: 63 | token: ${{ secrets.CODECOV_TOKEN }} 64 | fail_ci_if_error: true 65 | - name: Slack Notification on Failure 66 | uses: rtCamp/action-slack-notify@v2.0.2 67 | if: failure() 68 | env: 69 | SLACK_CHANNEL: plugin-code_review 70 | SLACK_TITLE: Test Failure 71 | SLACK_COLOR: danger 72 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: build_archive 2 | on: 3 | push: 4 | branches-ignore: 5 | - '**' 6 | tags: 7 | - '**' 8 | env: 9 | SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }} 10 | jobs: 11 | archive: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Set version 15 | id: version 16 | run: | 17 | REPOSITORY=$(echo ${{ github.repository }} | sed -e "s#.*/##") 18 | VERSION=$(echo ${{ github.ref }} | sed -e "s#refs/tags/##g") 19 | echo ::set-output name=version::$VERSION 20 | echo ::set-output name=filename::$REPOSITORY-$VERSION 21 | echo ::set-output name=plugin::$REPOSITORY 22 | - uses: actions/checkout@v4 23 | - name: Archive 24 | run: | 25 | cd ..; zip -r ${{ steps.version.outputs.filename }}.zip ${{ steps.version.outputs.plugin }}/ -x "*.git*"; mv ${{ steps.version.outputs.filename }}.zip ${{ steps.version.outputs.plugin }}/ 26 | - name: Create Release 27 | id: create_release 28 | uses: actions/create-release@v1 29 | env: 30 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 31 | with: 32 | tag_name: ${{ steps.version.outputs.version }} 33 | release_name: ${{ steps.version.outputs.version }} 34 | body: '' 35 | draft: false 36 | prerelease: true 37 | - name: Upload Release Asset 38 | id: upload-release-asset 39 | uses: actions/upload-release-asset@v1 40 | env: 41 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 42 | with: 43 | upload_url: ${{ steps.create_release.outputs.upload_url }} 44 | asset_path: ${{ steps.version.outputs.filename }}.zip 45 | asset_name: ${{ steps.version.outputs.filename }}.zip 46 | asset_content_type: application/zip -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | coverage 2 | Gemfile 3 | Gemfile.lock 4 | test/tmp/* -------------------------------------------------------------------------------- /.hgeol: -------------------------------------------------------------------------------- 1 | [patterns] 2 | **.* = NATIVE 3 | -------------------------------------------------------------------------------- /.hgflow: -------------------------------------------------------------------------------- 1 | [branchname] 2 | master = default 3 | develop = develop 4 | feature = feature/ 5 | release = release/ 6 | hotfix = hotfix/ 7 | support = support/ 8 | -------------------------------------------------------------------------------- /.hgignore: -------------------------------------------------------------------------------- 1 | ^coverage/ 2 | ^rails/ 3 | ^VERSION$ 4 | ^code_review.gemspec 5 | ^pkg/ 6 | ^Gemfile.lock$ 7 | ^Gemfile$ 8 | syntax: glob 9 | test/coverage 10 | .flow -------------------------------------------------------------------------------- /.redmine.code-workspace: -------------------------------------------------------------------------------- 1 | { 2 | "folders": [ 3 | { 4 | "path": "." 5 | }, 6 | { 7 | "path": "../../usr/local/redmine" 8 | } 9 | ], 10 | "settings": {} 11 | } -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | rvm: 3 | - 2.4 4 | - 2.5 5 | - 2.6 6 | - 2.7 7 | - 3.0 8 | env: 9 | - REDMINE_VER=4.1-stable 10 | - REDMINE_VER=4.2-stable 11 | - REDMINE_VER=master 12 | matrix: 13 | exclude: 14 | - rvm: 2.4 15 | env: REDMINE_VER=master 16 | - rvm: 2.7 17 | env: REDMINE_VER=4.1-stable 18 | - rvm: 3.0 19 | env: REDMINE_VER=4.1-stable 20 | - rvm: 3.0 21 | env: REDMINE_VER=4.2-stable 22 | install: 23 | - bash -x ./travis/travis_install.sh 24 | script: 25 | - bash -x ./travis/travis.sh 26 | notifications: 27 | slack: 28 | secure: XhtN5XeJKyYhGYRFGfxGpGaVcUnUsZoxX3ZL3RgHikcBhD0hY6Ogn09BSiygP381lbIlV7+2nlRvNoSUKYmx2uX5w8AUYCE4yo9yJGlY+70rD2kjWsuG9OK4L/QPCXIUf8NFX24PdY9CRITK5CfR1/hEZCx9ygT6GLAqpjqNDtfMpSRx7S3olVjX58ucB9azDcvaT75vPY1nEnnn/IuOwGF27KBk9lLZtMaG1ohI6+9jW9xCxz8cLfUUPIu+PH4/AvJ8GMNJtlc3Yvgbg57lCtulvHyrXqXHMvMDL2aTdIj2XsjVSvXV4jRrNuhJga6gDAtl/3Lzm+UZZAeHpR4qHDZN06za25HypX/GbX5pZtpr30t+HHs3cd+ecHb4uP/Tnxko0KzNywg6Ayn/8TC548eu0JRITzPS5C9/NKzA+XnAjVgKMzqy0zU1VVk83hBXshgpfqplfZzdIrn75kcV/3qsiaD4qEFM2MqNYD15Epq8a7W/9IKdhd95LsQjp1Fb0g7XiQcM3ahIgMLIjP5tZfQ8b7tVlmDx1GCP4uRFOBeDeoz9i++UaT/FdPHOFGirWfDZMJoVq3MXixaTudEPFomO2HktErAMIEjQQyVe4FylglGnE52RCqEJ0qiD/kh1HV1VnVqyTJ9o3DXgLTIMdFiw+jHtTuorYPG0Qn1Dqbg= 29 | -------------------------------------------------------------------------------- /Gemfile_for_test: -------------------------------------------------------------------------------- 1 | group :test do 2 | gem "simplecov-cobertura" 3 | gem "factory_bot_rails" 4 | gem "shoulda" 5 | gem "rails-controller-testing" 6 | end 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![build](https://github.com/haru/redmine_code_review/actions/workflows/build.yml/badge.svg)](https://github.com/haru/redmine_code_review/actions/workflows/build.yml) 2 | [![Maintainability](https://api.codeclimate.com/v1/badges/adc7bcbf7bfd8e80a97b/maintainability)](https://codeclimate.com/github/haru/redmine_code_review/maintainability) 3 | [![codecov](https://codecov.io/gh/haru/redmine_code_review/branch/develop/graph/badge.svg?token=37CJ55KBUU)](https://codecov.io/gh/haru/redmine_code_review) 4 | 5 | # Redmine Code Review Plugin 6 | 7 | This is a plugin for Redmine which lets you annotate source code within the repository browser. 8 | 9 | http://www.r-labs.org/wiki/r-labs/Code_Review 10 | 11 | ## Plugin installation 12 | 13 | 1. Copy the plugin directory into the plugins directory 14 | 15 | 2. Migrate plugin: 16 | rake redmine:plugins:migrate RAILS_ENV=production 17 | 18 | 3. Start Redmine 19 | 20 | 4. Add code review module into your project. 21 | 22 | 5. Go to code review setting tab in the project setting page and select tracker. 23 | 24 | 6. Go to "Roles and permissions" and add "Code Review" permissions to the roles you want to see/edit/manage code reviews. 25 | 26 | ## Language contributors 27 | 28 | * de.yml - Michael Diederich, Sebastian Bernhard 29 | * fr.yml - Thomas M, fcrespel 30 | * hu.yml - Péter Major, József Kószó 31 | * ko.yml - Ki-yong Kim, Ki Won Kim 32 | * nl.yml - Stefan Verstege 33 | * pt-br.yml - Alessandro Hecht 34 | * zh.yml - Marshall Wu 35 | * zh-tw.yml - Andrew Liu 36 | * ru.yml - Mykhaylo Sorochan 37 | * sk.yml - Milan Freml 38 | * es.yml - Ignacio Carrera 39 | * pl.yml - Rafal Grzymkowski 40 | * sv.yml - André Jonsson 41 | * bg.yml - Ivan Cenov, jwalkerbg 42 | -------------------------------------------------------------------------------- /app/helpers/code_review_helper.rb: -------------------------------------------------------------------------------- 1 | # Code Review plugin for Redmine 2 | # Copyright (C) 2009-2023 Haruyuki Iida 3 | # 4 | # This program is free software; you can redistribute it and/or 5 | # modify it under the terms of the GNU General Public License 6 | # as published by the Free Software Foundation; either version 2 7 | # of the License, or (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this program; if not, write to the Free Software 16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 17 | module CodeReviewHelper 18 | 19 | def show_assignments(assignments, project, options = {}) 20 | html = "#{l(:review_assignments)}:" 21 | assignments.each do |assignment| 22 | issue = assignment.issue 23 | html << link_to("##{issue.id} ", {:controller => 'issues', :action => 'show', :id => issue.id}, 24 | :class => issue.css_classes, :title => "#{issue}(#{issue.status})") 25 | end if assignments 26 | 27 | link = link_to(l(:button_add), {:controller => 'code_review', 28 | :action => 'assign', :id => project, :action_type => options[:action_type], 29 | :rev => options[:rev], :rev_to => options[:rev_to], :path => options[:path], 30 | :change_id => options[:change_id], :attachment_id => options[:attachment_id], 31 | :changeset_id => options[:changeset_id]}, :class => 'icon icon-add') 32 | 33 | html << link if link 34 | 35 | html 36 | end 37 | end 38 | -------------------------------------------------------------------------------- /app/models/code_review_assignment.rb: -------------------------------------------------------------------------------- 1 | # Code Review plugin for Redmine 2 | # Copyright (C) 2010-2023 Haruyuki Iida 3 | # 4 | # This program is free software; you can redistribute it and/or 5 | # modify it under the terms of the GNU General Public License 6 | # as published by the Free Software Foundation; either version 2 7 | # of the License, or (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this program; if not, write to the Free Software 16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 17 | 18 | class CodeReviewAssignment < ActiveRecord::Base 19 | belongs_to :issue 20 | belongs_to :change 21 | belongs_to :changeset 22 | belongs_to :attachment 23 | validates_presence_of :issue_id 24 | 25 | def is_closed? 26 | issue.closed? 27 | end 28 | 29 | def path 30 | file_path 31 | end 32 | 33 | def revision 34 | return rev if rev 35 | changeset.revision if changeset 36 | end 37 | 38 | def repository 39 | @repository ||= change.changeset.repository if change 40 | @repository ||= changeset.repository if changeset 41 | @repository 42 | end 43 | 44 | def repository_identifier 45 | return nil unless repository 46 | @repository_identifier ||= repository.identifier_param if repository.respond_to?("identifier_param") 47 | end 48 | 49 | def self.create_with_changeset(changeset) 50 | project = changeset.project 51 | setting = CodeReviewProjectSetting.find_or_create(project) 52 | auto_assign = setting.auto_assign_settings 53 | assignment = CodeReviewAssignment.new 54 | issue = Issue.new 55 | issue.subject = auto_assign.subject 56 | issue.subject = I18n.t(:code_review_requrest) if issue.subject.blank? 57 | issue.subject = issue.subject.sub("$REV", changeset.revision) 58 | issue.subject = issue.subject.sub("$COMMENTS", changeset.comments.split(//u)[0..60].join) unless changeset.comments.blank? 59 | issue.tracker_id = setting.assignment_tracker_id 60 | issue.project = project 61 | issue.author = User.find(auto_assign.author_id) 62 | issue.assigned_to_id = auto_assign.select_assign_to(project, changeset.user) 63 | issue.description = auto_assign.description 64 | issue.description = issue.description.sub("$REV", changeset.revision) unless issue.description.blank? 65 | issue.description = issue.description.sub("$COMMENTS", changeset.comments) unless changeset.comments.blank? 66 | 67 | issue.save! 68 | 69 | assignment.issue_id = issue.id 70 | assignment.changeset_id = changeset.id 71 | assignment.save! 72 | assignment 73 | end 74 | 75 | def diff_all 76 | path.blank? 77 | end 78 | end 79 | -------------------------------------------------------------------------------- /app/models/code_review_project_setting.rb: -------------------------------------------------------------------------------- 1 | # Code Review plugin for Redmine 2 | # Copyright (C) 2009-2023 Haruyuki Iida 3 | # 4 | # This program is free software; you can redistribute it and/or 5 | # modify it under the terms of the GNU General Public License 6 | # as published by the Free Software Foundation; either version 2 7 | # of the License, or (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this program; if not, write to the Free Software 16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 17 | class CodeReviewProjectSetting < ActiveRecord::Base 18 | include Redmine::SafeAttributes 19 | include CodeReviewAutoAssignSettings 20 | 21 | belongs_to :project 22 | belongs_to :tracker 23 | belongs_to :assignment_tracker, :class_name => 'Tracker' 24 | 25 | validates_presence_of :project_id 26 | validates_presence_of :tracker_id 27 | validates_presence_of :assignment_tracker_id 28 | 29 | before_save :set_assignment_settings 30 | 31 | #attr_accessible :tracker_id, :assignment_tracker_id, :hide_code_review_tab, :auto_relation, :tracker_in_review_dialog, :auto_assign 32 | 33 | AUTORELATION_TYPE_NONE = 0 34 | AUTORELATION_TYPE_RELATES = 1 35 | AUTORELATION_TYPE_BLOCKS = 2 36 | 37 | def self.find_or_create(project) 38 | setting = CodeReviewProjectSetting.find_by_project_id(project.id) 39 | unless setting 40 | setting = CodeReviewProjectSetting.new 41 | setting.project_id = project.id 42 | return setting if project.trackers.length == 0 43 | setting.tracker = project.trackers[0] 44 | setting.assignment_tracker = project.trackers[0] 45 | setting.save! 46 | end 47 | setting 48 | end 49 | 50 | def auto_assign_settings 51 | @auto_assign_settings ||= AutoAssignSettings.load(auto_assign) 52 | end 53 | 54 | def auto_assign_settings=(settings) 55 | @auto_assign_settings = settings 56 | end 57 | 58 | def issue_relation_type 59 | return IssueRelation::TYPE_RELATES if auto_relation == CodeReviewProjectSetting::AUTORELATION_TYPE_RELATES 60 | return IssueRelation::TYPE_BLOCKS if auto_relation == CodeReviewProjectSetting::AUTORELATION_TYPE_BLOCKS 61 | return nil 62 | end 63 | 64 | def auto_relation? 65 | issue_relation_type != nil 66 | end 67 | 68 | private 69 | 70 | def set_assignment_settings 71 | if auto_assign_settings 72 | self.auto_assign = auto_assign_settings.to_s 73 | else 74 | self.auto_assign = nil 75 | end 76 | end 77 | end 78 | -------------------------------------------------------------------------------- /app/models/code_review_user_setting.rb: -------------------------------------------------------------------------------- 1 | # Code Review plugin for Redmine 2 | # Copyright (C) 2023 Haruyuki Iida 3 | # 4 | # This program is free software; you can redistribute it and/or 5 | # modify it under the terms of the GNU General Public License 6 | # as published by the Free Software Foundation; either version 2 7 | # of the License, or (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this program; if not, write to the Free Software 16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 17 | class CodeReviewUserSetting < ActiveRecord::Base 18 | belongs_to :user 19 | 20 | validates_presence_of :user_id 21 | validates_presence_of :mail_notification 22 | validates_uniqueness_of :user_id 23 | 24 | NOTIFCIATION_NONE = 0 25 | NOTIFICATION_INVOLVED_IN = 1 26 | NOTIFICATION_ALL = 2 27 | 28 | def CodeReviewUserSetting.find_or_create(uid) 29 | setting = CodeReviewUserSetting.find_by(user_id: uid) 30 | return setting if setting 31 | setting = CodeReviewUserSetting.new 32 | setting.user_id = uid 33 | setting.mail_notification = NOTIFICATION_INVOLVED_IN 34 | setting.save 35 | return setting 36 | end 37 | 38 | def mail_notification_none? 39 | mail_notification == NOTIFCIATION_NONE 40 | end 41 | 42 | def mail_notification_involved_in? 43 | mail_notification == NOTIFICATION_INVOLVED_IN 44 | end 45 | 46 | def mail_notification_all? 47 | mail_notification == NOTIFICATION_ALL 48 | end 49 | end 50 | -------------------------------------------------------------------------------- /app/views/code_review/_add_success.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | # Code Review plugin for Redmine 3 | # Copyright (C) 2009 Haruyuki Iida 4 | # 5 | # This program is free software; you can redistribute it and/or 6 | # modify it under the terms of the GNU General Public License 7 | # as published by the Free Software Foundation; either version 2 8 | # of the License, or (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program; if not, write to the Free Software 17 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 | -%> 19 | <%= javascript_tag do %> 20 | 21 | var line = <%= @review.line %>; 22 | var review_id = <%= @review.id %>; 23 | var file_count = <%= @review.file_count %>; 24 | hideForm(); 25 | setShowReviewButton(line, review_id, false, file_count); 26 | 27 | <% end %> -------------------------------------------------------------------------------- /app/views/code_review/_change_attachement_view.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | # Code Review plugin for Redmine 3 | # Copyright (C) 2010-2012 Haruyuki Iida 4 | # 5 | # This program is free software; you can redistribute it and/or 6 | # modify it under the terms of the GNU General Public License 7 | # as published by the Free Software Foundation; either version 2 8 | # of the License, or (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program; if not, write to the Free Software 17 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 | -%> 19 | <% 20 | parameters = request.parameters 21 | id = parameters[:id].to_i 22 | attachment = Attachment.find(id) 23 | return '' unless attachment.is_text? or attachment.is_diff? 24 | review_id = parameters[:review_id] unless parameters[:review_id].blank? 25 | url = url_for :controller => 'code_review', :action => 'update_attachment_view', :id => project 26 | -%> 27 |
28 |
29 |
30 | 31 | -------------------------------------------------------------------------------- /app/views/code_review/_change_entry_norevision_view.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | # Code Review plugin for Redmine 3 | # Copyright (C) 2010-2011 Haruyuki Iida 4 | # 5 | # This program is free software; you can redistribute it and/or 6 | # modify it under the terms of the GNU General Public License 7 | # as published by the Free Software Foundation; either version 2 8 | # of the License, or (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program; if not, write to the Free Software 17 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 | -%> 19 | <% 20 | parameters = request.parameters 21 | path = parameters['path'] 22 | rev = parameters['rev'] 23 | repository_id = @repository.identifier_param if @repository.respond_to?("identifier_param") 24 | unless path.blank? or path.empty? 25 | changesets = @repository.latest_changesets(path, rev, Setting.repository_log_display_limit.to_i) 26 | change = changesets[0] 27 | 28 | if change 29 | link = link_to(l(:label_add_review), {:controller => 'code_review', 30 | :action => 'forward_to_revision', :id => project, :path => path, :rev => rev, :repository_id => repository_id}, 31 | :class => 'icon icon-edit') 32 | %> 33 | 34 | 37 | <% end %> 38 | 39 | <% end %> -------------------------------------------------------------------------------- /app/views/code_review/_change_repository_view.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | # Code Review plugin for Redmine 3 | # Copyright (C) 2010-2012 Haruyuki Iida 4 | # 5 | # This program is free software; you can redistribute it and/or 6 | # modify it under the terms of the GNU General Public License 7 | # as published by the Free Software Foundation; either version 2 8 | # of the License, or (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program; if not, write to the Free Software 17 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 | -%> 19 | <% 20 | 21 | if @changesets 22 | changeset_ids = '' 23 | @changesets.each { |changeset| 24 | changeset_ids << changeset.revision 25 | changeset_ids << ',' 26 | } 27 | 28 | repository_id = @repository.identifier_param if @repository.respond_to?("identifier_param") 29 | url = url_for :controller => 'code_review', :action => 'update_revisions_view', :id => project, :repository_id => repository_id 30 | %> 31 | 32 |
33 | 34 | 35 | 40 | 41 | <% end %> -------------------------------------------------------------------------------- /app/views/code_review/_change_revision_view.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | # Code Review plugin for Redmine 3 | # Copyright (C) 2010-2011 Haruyuki Iida 4 | # 5 | # This program is free software; you can redistribute it and/or 6 | # modify it under the terms of the GNU General Public License 7 | # as published by the Free Software Foundation; either version 2 8 | # of the License, or (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program; if not, write to the Free Software 17 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 | -%> 19 | <% 20 | repository_id = @repository.identifier_param if @repository.respond_to?("identifier_param") 21 | if @changeset 22 | urlprefix = url_for(:controller => 'repositories', :action => 'revisions', :id => project, :repository_id => repository_id) + 23 | '/' + @changeset.identifier + '/entry' 24 | %> 25 | <%- if User.current.allowed_to?(:assign_code_review, @project) -%> 26 |
27 | <%=h l(:review_assignments)%> 28 | <% @changeset.code_review_assignments.each do |assignment| 29 | issue = assignment.issue %> 30 | <%= link_to("##{issue.id} ", {:controller => 'issues', :action => 'show', :id => issue.id}, 31 | :class => issue.css_classes, :title => "#{issue}(#{issue.status})") %> 32 | <% end if @changeset.code_review_assignments %> 33 | 34 | <%= link_to(l(:button_add), {:controller => 'code_review', 35 | :action => 'assign', :id=>project, 36 | :rev => @changeset.revision, 37 | :changeset_id => @changeset.id, :repository_id => repository_id}, :class => 'icon icon-add') %> 38 |
39 | <%- end -%> 40 | 41 | 75 | <% end %> 76 | -------------------------------------------------------------------------------- /app/views/code_review/_history.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | # Code Review plugin for Redmine 3 | # Copyright (C) 2009 Haruyuki Iida 4 | # 5 | # This program is free software; you can redistribute it and/or 6 | # modify it under the terms of the GNU General Public License 7 | # as published by the Free Software Foundation; either version 2 8 | # of the License, or (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program; if not, write to the Free Software 17 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 | -%> 19 | <% for journal in journals %> 20 | 21 | 22 | <% if not journal.initial? %> 23 | 24 | 25 | <% 26 | header = <<-HTML 27 |

28 | #{authoring journal.created_at, journal.user, :label => :label_updated_time_by} 29 | #{content_tag('a', '', :name => "note-#{journal.anchor}")} 30 |

31 | 32 |
33 | #{avatar(journal.user, :size => "40")} 34 |
35 | HTML 36 | 37 | if not journal.notes.blank? 38 | if User.current.logged? 39 | editable = User.current.allowed_to?(:edit_issue_notes, journal.project) 40 | if journal.user == User.current 41 | editable ||= User.current.allowed_to?(:edit_own_issue_notes, journal.project) 42 | end 43 | end 44 | 45 | links = [].tap do |l| 46 | if editable 47 | l << link_to_in_place_notes_editor(image_tag('edit.png'), "journal-#{journal.id}-notes", 48 | { :controller => 'journals', :action => 'edit', :id => journal }, 49 | :title => l(:button_edit)) 50 | end 51 | end 52 | 53 | css_classes = "wiki" 54 | css_classes << " editable" if editable 55 | 56 | content = '' 57 | content << content_tag('div', links.join(' '), :class => 'contextual') unless links.empty? 58 | content << textilizable(journal, :notes) 59 | 60 | header << content_tag("div", content, :id => "journal-#{journal.id}-notes", :class => css_classes) 61 | end 62 | %> 63 | 64 | 65 | <% 66 | details = '' 67 | if journal.details.any? 68 | content = journal.details.collect do |detail| 69 | if d = journal.render_detail(detail) 70 | content_tag("li", d) 71 | end 72 | end.compact.join(' ') 73 | 74 | details = content_tag("ul", content, :class => "details journal-attributes") unless content.empty? 75 | end 76 | %> 77 | 78 | 79 | <%= content_tag "div", "#{header}#{details}", 80 | { :id => "change-#{journal.id}", :class => journal.css_classes } %> 81 | 82 | <% end %> 83 | 84 | <% end %> 85 | -------------------------------------------------------------------------------- /app/views/code_review/_html_header.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | # Code Review plugin for Redmine 3 | # Copyright (C) 2010-2012 Haruyuki Iida 4 | # 5 | # This program is free software; you can redistribute it and/or 6 | # modify it under the terms of the GNU General Public License 7 | # as published by the Free Software Foundation; either version 2 8 | # of the License, or (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program; if not, write to the Free Software 17 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 | -%> 19 | <% if @project and @project.module_enabled?('code_review') %> 20 | <% 21 | baseurl = Redmine::Utils.relative_url_root 22 | 23 | -%> 24 | <%= javascript_include_tag("code_review.js", plugin: "redmine_code_review") %> 25 | <%= javascript_include_tag('jstoolbar/jstoolbar') %> 26 | <%= javascript_include_tag("jstoolbar/lang/jstoolbar-#{@project.current_language.to_s.downcase}.js") %> 27 | 28 | <%= include_calendar_headers_tags %> 29 | <%= stylesheet_link_tag("code_review.css", plugin: "redmine_code_review") %> 30 | <%= stylesheet_link_tag("jstoolbar.css") %> 31 | 32 | <% end %> -------------------------------------------------------------------------------- /app/views/code_review/_issues_show_details_bottom.html.erb: -------------------------------------------------------------------------------- 1 | <%# 2 | # To change this template, choose Tools | Templates 3 | # and open the template in the editor. 4 | %> 5 | 6 | <% 7 | unless User.current.allowed_to?({:controller => 'code_review', :action => 'show'}, project) 8 | return 9 | end 10 | 11 | %> 12 | 13 | <% if issue.code_review %> 14 | <% 15 | review = issue.code_review 16 | %> 17 | 18 | <%= l(:code_review) %>: 19 | 20 | <% 21 | if review.attachment 22 | label = URI.decode_www_form_component("#{review.attachment.filename}#{'@' + review.revision if review.revision}:line #{review.line}") 23 | else 24 | label = URI.decode_www_form_component("#{review.repository_identifier + ':' if review.repository_identifier}#{review.path}#{'@' + review.revision if review.revision}:line #{review.line}") 25 | end 26 | -%> 27 | <%= link_to(label, 28 | :controller => 'code_review', :action => 'show', :id => project, :review_id => review.id, :repository_id => review.repository_identifier) %> 29 | 30 | 31 | <% end %> 32 | <% if issue.code_review_assignment %> 33 | <% 34 | assignment = issue.code_review_assignment 35 | repository_id = assignment.repository_identifier 36 | %> 37 | 38 | <%= l(:review_assigned_for) %>: 39 | 40 | <% if assignment.path %> 41 | <% 42 | label = URI.decode_www_form_component("#{repository_id + ':' if repository_id}#{assignment.path}#{'@' + assignment.revision if assignment.revision}") 43 | -%> 44 | <%= link_to(label, 45 | :controller => 'code_review', :action => 'show', :id => project, :assignment_id => assignment.id, :repository_id => repository_id) %> 46 | <% elsif assignment.revision %> 47 | <% 48 | repo = project unless repository_id 49 | repo ||= assignment.repository 50 | %> 51 | <%= l(:label_revision) + " "%> 52 | <%= link_to_revision(assignment.revision, repo) %> 53 | <% elsif assignment.attachment %> 54 | <%= link_to(assignment.attachment.filename, :controller => 'attachments', :action => 'show', :id => assignment.attachment.id) %> 55 | <% end %> 56 | 57 | 58 | 59 | <% end %> 60 | 61 | -------------------------------------------------------------------------------- /app/views/code_review/_reply.html.erb: -------------------------------------------------------------------------------- 1 | <% 2 | # Code Review plugin for Redmine 3 | # Copyright (C) 2009 Haruyuki Iida 4 | # 5 | # This program is free software; you can redistribute it and/or 6 | # modify it under the terms of the GNU General Public License 7 | # as published by the Free Software Foundation; either version 2 8 | # of the License, or (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program; if not, write to the Free Software 17 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 | -%> 19 | <% if reply.notes.present? %> 20 |

21 | 22 | <%= authoring reply.created_on, reply.user %>. 23 |

24 | <%= avatar(reply.user, :size => "32") %> 25 | 26 |
27 | <%= textilizable reply, :notes %> 28 |
29 | 30 | 31 |
32 | <% end %> 33 | -------------------------------------------------------------------------------- /app/views/code_review/_show_error.html.erb: -------------------------------------------------------------------------------- 1 |
2 |

Error

3 | 4 |

change not found.

5 | 6 | @path = '<%=h @path %>'
7 | @changeset = <%=h @changeset %>
8 | @rev = <%=h @rev %>
9 | <% if @changeset %> 10 | 17 | <% end %> 18 |
19 | 20 | -------------------------------------------------------------------------------- /app/views/code_review/_update_revisions.html.erb: -------------------------------------------------------------------------------- 1 | <%# 2 | # Code Review plugin for Redmine 3 | # Copyright (C) 2009-2011 Haruyuki Iida 4 | # 5 | # This program is free software; you can redistribute it and/or 6 | # modify it under the terms of the GNU General Public License 7 | # as published by the Free Software Foundation; either version 2 8 | # of the License, or (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program; if not, write to the Free Software 17 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 | %> 19 | 20 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /assets/images/1downarrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/images/1downarrow.png -------------------------------------------------------------------------------- /assets/images/1uparrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/images/1uparrow.png -------------------------------------------------------------------------------- /assets/images/2downarrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/images/2downarrow.png -------------------------------------------------------------------------------- /assets/images/2uparrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/images/2uparrow.png -------------------------------------------------------------------------------- /assets/images/closed_review.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/images/closed_review.png -------------------------------------------------------------------------------- /assets/images/review.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/images/review.png -------------------------------------------------------------------------------- /assets/stylesheets/activity.css: -------------------------------------------------------------------------------- 1 | 2 | dt.code_review { 3 | background-image: url(../images/review.png); 4 | } -------------------------------------------------------------------------------- /assets/stylesheets/code_review.css: -------------------------------------------------------------------------------- 1 | /* 2 | # Code Review plugin for Redmine 3 | # Copyright (C) 2009 Haruyuki Iida 4 | # 5 | # This program is free software; you can redistribute it and/or 6 | # modify it under the terms of the GNU General Public License 7 | # as published by the Free Software Foundation; either version 2 8 | # of the License, or (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program; if not, write to the Free Software 17 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 | */ 19 | #review-form-frame { 20 | height: 100%; 21 | } 22 | 23 | .autoscroll table.filecontent th.line-num { 24 | white-space: nowrap; 25 | vertical-align: bottom; 26 | padding-top: 0; 27 | padding-bottom: 0; 28 | text-align:left; 29 | } 30 | 31 | table.filecontent th.line-num img{ 32 | padding: 0; 33 | margin: 0; 34 | cursor: pointer; 35 | } 36 | 37 | 38 | .code-review-form-title { 39 | background-color: #002059; 40 | color: white; 41 | padding-left: 2px; 42 | padding-right: 2px; 43 | cursor: default; 44 | } 45 | 46 | 47 | .code_review_viewer { 48 | 49 | min-width: 300px; 50 | /* 51 | max-width: 60%; 52 | */ 53 | /* max-height: 400px; */ 54 | } 55 | 56 | .code_review_viewer .issue{ 57 | 58 | } 59 | 60 | .code_review_body { 61 | background-color: white; 62 | 63 | padding:2px; 64 | 65 | } 66 | 67 | #code_review_list table.list td { 68 | text-align: center; 69 | } 70 | 71 | #code_review_list table.list td.path { 72 | text-align: left; 73 | } 74 | 75 | #code_review_list table.list td.subject { 76 | text-align: left; 77 | } 78 | 79 | .icon-review { 80 | background-image: url(../images/review.png); 81 | background-repeat: no-repeat; 82 | } 83 | 84 | .icon-closed-review { 85 | background-image: url(../images/closed_review.png); 86 | background-repeat: no-repeat; 87 | } 88 | 89 | .icon-settings { 90 | background-image: url(../../../images/changeset.png); 91 | background-repeat: no-repeat; 92 | } 93 | 94 | 95 | li.code_review_summary { 96 | list-style-type: none; 97 | } -------------------------------------------------------------------------------- /assets/stylesheets/window_js/MIT-LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2006 Sébastien Gruhier (http://xilinus.com, http://itseb.com) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 14 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 15 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 16 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 17 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 18 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 19 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alert.css: -------------------------------------------------------------------------------- 1 | .overlay_alert { 2 | background-color: #85BBEF; 3 | filter:alpha(opacity=60); 4 | -moz-opacity: 0.6; 5 | opacity: 0.6; 6 | } 7 | 8 | .alert_nw { 9 | width: 5px; 10 | height: 5px; 11 | background: transparent url(alert/top_left.gif) no-repeat bottom left; 12 | } 13 | 14 | .alert_n { 15 | height: 5px; 16 | background: transparent url(alert/top.gif) repeat-x bottom left; 17 | } 18 | 19 | .alert_ne { 20 | width: 5px; 21 | height: 5px; 22 | background: transparent url(alert/top_right.gif) no-repeat bottom left 23 | } 24 | 25 | .alert_e { 26 | width: 5px; 27 | background: transparent url(alert/right.gif) repeat-y 0 0; 28 | } 29 | 30 | .alert_w { 31 | width: 5px; 32 | background: transparent url(alert/left.gif) repeat-y 0 0; 33 | } 34 | 35 | .alert_sw { 36 | width: 5px; 37 | height: 5px; 38 | background: transparent url(alert/bottom_left.gif) no-repeat 0 0; 39 | } 40 | 41 | .alert_s { 42 | height: 5px; 43 | background: transparent url(alert/bottom.gif) repeat-x 0 0; 44 | } 45 | 46 | .alert_se, .alert_sizer { 47 | width: 5px; 48 | height: 5px; 49 | background: transparent url(alert/bottom_right.gif) no-repeat 0 0; 50 | } 51 | 52 | .alert_close { 53 | width:0px; 54 | height:0px; 55 | display:none; 56 | } 57 | 58 | .alert_minimize { 59 | width:0px; 60 | height:0px; 61 | display:none; 62 | } 63 | 64 | .alert_maximize { 65 | width:0px; 66 | height:0px; 67 | display:none; 68 | } 69 | 70 | .alert_title { 71 | float:left; 72 | height:1px; 73 | width:100%; 74 | } 75 | 76 | .alert_content { 77 | overflow:visible; 78 | color: #000; 79 | font-family: Tahoma, Arial, sans-serif; 80 | font: 12px arial; 81 | background: #FFF; 82 | } 83 | 84 | /* For alert/confirm dialog */ 85 | .alert_window { 86 | background: #FFF; 87 | padding:20px; 88 | margin-left:auto; 89 | margin-right:auto; 90 | width:400px; 91 | } 92 | 93 | .alert_message { 94 | font: 12px arial; 95 | width:100%; 96 | color:#F00; 97 | padding-bottom:10px; 98 | } 99 | 100 | .alert_buttons { 101 | text-align:center; 102 | width:100%; 103 | } 104 | 105 | .alert_buttons input { 106 | width:20%; 107 | margin:10px; 108 | } 109 | 110 | .alert_progress { 111 | float:left; 112 | margin:auto; 113 | text-align:center; 114 | width:100%; 115 | height:16px; 116 | background: #FFF url('alert/progress.gif') no-repeat center center 117 | } 118 | 119 | 120 | -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alert/bottom.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alert/bottom.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alert/bottom_left.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alert/bottom_left.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alert/bottom_right.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alert/bottom_right.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alert/left.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alert/left.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alert/overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alert/overlay.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alert/progress.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alert/progress.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alert/right.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alert/right.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alert/top.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alert/top.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alert/top_left.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alert/top_left.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alert/top_right.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alert/top_right.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alert_lite.css: -------------------------------------------------------------------------------- 1 | .overlay_alert_lite { 2 | background-color: #85BBEF; 3 | filter:alpha(opacity=60); 4 | -moz-opacity: 0.6; 5 | opacity: 0.6; 6 | } 7 | 8 | .alert_lite_sizer { 9 | width:0px; 10 | height:0px; 11 | display:none; 12 | } 13 | 14 | .alert_lite_close { 15 | width:0px; 16 | height:0px; 17 | display:none; 18 | } 19 | 20 | .alert_lite_minimize { 21 | width:0px; 22 | height:0px; 23 | display:none; 24 | } 25 | 26 | .alert_lite_maximize { 27 | width:0px; 28 | height:0px; 29 | display:none; 30 | } 31 | 32 | .alert_lite_title { 33 | width:0px; 34 | height:0px; 35 | display:none; 36 | } 37 | 38 | .alert_lite_content { 39 | overflow:auto; 40 | color: #000; 41 | font-family: Tahoma, Arial, sans-serif; 42 | font-size: 10px; 43 | background: #FFF; 44 | } 45 | 46 | 47 | /* For alert/confirm dialog */ 48 | .alert_lite_window { 49 | border:1px solid #F00; 50 | background: #FFF; 51 | padding:20px; 52 | margin-left:auto; 53 | margin-right:auto; 54 | width:400px; 55 | } 56 | 57 | .alert_lite_message { 58 | font-size:16px; 59 | text-align:center; 60 | width:100%; 61 | color:#F00; 62 | padding-bottom:10px; 63 | } 64 | 65 | .alert_lite_buttons { 66 | text-align:center; 67 | width:100%; 68 | } 69 | 70 | .alert_lite_buttons input { 71 | width:20%; 72 | margin:10px; 73 | } 74 | 75 | .alert_lite_progress { 76 | float:left; 77 | margin:auto; 78 | text-align:center; 79 | width:100%; 80 | height:16px; 81 | background: #FFF url('alert/progress.gif') no-repeat center center 82 | } 83 | 84 | table.alert_lite_header { 85 | border:1px solid #F00; 86 | background:#FFF 87 | } 88 | 89 | -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alphacube/bottom-left-c.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alphacube/bottom-left-c.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alphacube/bottom-middle.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alphacube/bottom-middle.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alphacube/bottom-right-c.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alphacube/bottom-right-c.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alphacube/button-close-focus.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alphacube/button-close-focus.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alphacube/button-max-focus.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alphacube/button-max-focus.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alphacube/button-min-focus.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alphacube/button-min-focus.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alphacube/frame-left.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alphacube/frame-left.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alphacube/frame-right.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alphacube/frame-right.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alphacube/left-top.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alphacube/left-top.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alphacube/right-top.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alphacube/right-top.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/alphacube/top-middle.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/alphacube/top-middle.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/behavior.htc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 51 | -------------------------------------------------------------------------------- /assets/stylesheets/window_js/darkX.css: -------------------------------------------------------------------------------- 1 | .overlay_darkX { 2 | background-color: #85BBEF; 3 | filter:alpha(opacity=60); 4 | -moz-opacity: 0.6; 5 | opacity: 0.6; 6 | } 7 | 8 | .darkX_nw { 9 | background: transparent url(darkX/titlebar-left-focused.png) no-repeat 0 0; 10 | width:6px; 11 | height:21px; 12 | } 13 | .darkX_n { 14 | background: transparent url(darkX/titlebar-mid-focused.png) repeat-x 0 0; 15 | height:21px; 16 | } 17 | .darkX_ne { 18 | background: transparent url(darkX/titlebar-right-focused.png) no-repeat 0 0; 19 | width:6px; 20 | height:21px; 21 | } 22 | .darkX_w { 23 | background: transparent url(darkX/frame-left-focused.png) repeat-y top left; 24 | width:3px; 25 | } 26 | 27 | .darkX_e { 28 | background: transparent url(darkX/frame-right-focused.png) repeat-y top right; 29 | width:3px; 30 | } 31 | 32 | .darkX_sw { 33 | background: transparent url(darkX/frame-bottom-left-focused.png) no-repeat 0 0; 34 | width:5px; 35 | height:3px; 36 | } 37 | .darkX_s { 38 | background: transparent url(darkX/frame-bottom-mid-focused.png) repeat-x 0 0; 39 | height:3px; 40 | } 41 | .darkX_se, .darkX_sizer { 42 | background: transparent url(darkX/frame-bottom-right-focused.png) no-repeat 0 0; 43 | width:5px; 44 | height:3px; 45 | } 46 | 47 | .darkX_sizer { 48 | cursor:se-resize; 49 | } 50 | 51 | .darkX_close { 52 | width: 21px; 53 | height: 21px; 54 | background: transparent url(darkX/button-close-focused.png) no-repeat 0 0; 55 | position:absolute; 56 | top:0px; 57 | right:5px; 58 | cursor:pointer; 59 | z-index:1000; 60 | } 61 | 62 | .darkX_minimize { 63 | width: 21px; 64 | height: 21px; 65 | background: transparent url(darkX/button-minimize-focused.png) no-repeat 0 0; 66 | position:absolute; 67 | top:0px; 68 | right:26px; 69 | cursor:pointer; 70 | z-index:1000; 71 | } 72 | 73 | .darkX_maximize { 74 | width: 21px; 75 | height: 21px; 76 | background: transparent url(darkX/button-maximize-focused.png) no-repeat 0 0; 77 | position:absolute; 78 | top:0px; 79 | right:47px; 80 | cursor:pointer; 81 | z-index:1000; 82 | } 83 | 84 | 85 | .darkX_title { 86 | float:left; 87 | height:14px; 88 | font-size:12px; 89 | text-align:center; 90 | margin-top:2px; 91 | width:100%; 92 | color:#FFF; 93 | } 94 | 95 | .darkX_content { 96 | overflow:auto; 97 | color: #E6DF2A; 98 | font-family: Tahoma, Arial, sans-serif; 99 | font-size: 14px; 100 | background:#5E5148; 101 | } 102 | 103 | 104 | /* FOR IE */ 105 | * html .darkX_minimize { 106 | background-color: transparent; 107 | background-image: none; 108 | filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/darkX/button-minimize-focused.png", sizingMethod="crop"); 109 | } 110 | 111 | * html .darkX_maximize { 112 | background-color: transparent; 113 | background-image: none; 114 | filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/darkX/button-maximize-focused.png", sizingMethod="scale"); 115 | } 116 | 117 | * html .darkX_close { 118 | background-color: transparent; 119 | background-image: none; 120 | filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/darkX/button-close-focused.png", sizingMethod="crop"); 121 | } 122 | -------------------------------------------------------------------------------- /assets/stylesheets/window_js/darkX/button-close-focused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/darkX/button-close-focused.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/darkX/button-maximize-focused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/darkX/button-maximize-focused.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/darkX/button-minimize-focused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/darkX/button-minimize-focused.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/darkX/frame-bottom-left-focused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/darkX/frame-bottom-left-focused.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/darkX/frame-bottom-mid-focused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/darkX/frame-bottom-mid-focused.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/darkX/frame-bottom-right-focused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/darkX/frame-bottom-right-focused.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/darkX/frame-left-focused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/darkX/frame-left-focused.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/darkX/frame-right-focused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/darkX/frame-right-focused.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/darkX/titlebar-left-focused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/darkX/titlebar-left-focused.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/darkX/titlebar-mid-focused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/darkX/titlebar-mid-focused.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/darkX/titlebar-right-focused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/darkX/titlebar-right-focused.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/debug.css: -------------------------------------------------------------------------------- 1 | div.inspector div.inspectable { 2 | padding: 0.25em 0 0.25em 1em; 3 | background-color: Gray; 4 | color: white; 5 | border: outset 2px white; 6 | cursor: pointer; 7 | } 8 | 9 | div.inspector div.child { 10 | margin: 0 0 0 1em; 11 | } 12 | 13 | #debug_window_content { /* DIV container for debug sizing*/ 14 | width:250px; 15 | height:100px; 16 | background-color:#000; 17 | } 18 | 19 | #debug { /* DIV container for debug contents*/ 20 | padding:3px; 21 | color:#0f0; 22 | font-family:monaco, Tahoma, Verdana, Arial, Helvetica, sans-serif; 23 | font-size:10px; 24 | } 25 | 26 | -------------------------------------------------------------------------------- /assets/stylesheets/window_js/default/bottom_left.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/default/bottom_left.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/default/bottom_mid.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/default/bottom_mid.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/default/bottom_right.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/default/bottom_right.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/default/bottom_right_resize.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/default/bottom_right_resize.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/default/center_left.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/default/center_left.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/default/center_right.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/default/center_right.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/default/clear.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/default/clear.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/default/close.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/default/close.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/default/inspect.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/default/inspect.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/default/maximize.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/default/maximize.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/default/minimize.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/default/minimize.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/default/overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/default/overlay.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/default/resize.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/default/resize.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/default/sizer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/default/sizer.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/default/top_left.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/default/top_left.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/default/top_mid.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/default/top_mid.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/default/top_right.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/default/top_right.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/iefix/blank.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/iefix/blank.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/iefix/iepngfix.css: -------------------------------------------------------------------------------- 1 | /* PNG fix for all themes that uses PNG images on IE */ 2 | td, div { behavior: url(../themes/iefix/iepngfix.htc) } 3 | 4 | -------------------------------------------------------------------------------- /assets/stylesheets/window_js/iefix/iepngfix.htc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 54 | -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/background_buttons.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/background_buttons.gif -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/bottom-left-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/bottom-left-blue.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/bottom-left-darkblue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/bottom-left-darkblue.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/bottom-left-green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/bottom-left-green.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/bottom-left-grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/bottom-left-grey.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/bottom-middle-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/bottom-middle-blue.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/bottom-middle-darkblue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/bottom-middle-darkblue.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/bottom-middle-green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/bottom-middle-green.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/bottom-middle-grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/bottom-middle-grey.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/bottom-right-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/bottom-right-blue.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/bottom-right-darkblue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/bottom-right-darkblue.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/bottom-right-green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/bottom-right-green.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/bottom-right-grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/bottom-right-grey.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/button-close-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/button-close-blue.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/button-close-darkblue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/button-close-darkblue.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/button-close-green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/button-close-green.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/button-close-grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/button-close-grey.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/button-maximize-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/button-maximize-blue.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/button-maximize-darkblue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/button-maximize-darkblue.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/button-maximize-green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/button-maximize-green.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/button-maximize-grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/button-maximize-grey.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/button-minimize-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/button-minimize-blue.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/button-minimize-darkblue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/button-minimize-darkblue.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/button-minimize-green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/button-minimize-green.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/button-minimize-grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/button-minimize-grey.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/left-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/left-blue.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/left-darkblue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/left-darkblue.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/left-green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/left-green.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/left-grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haru/redmine_code_review/4dd759306350420cd4200896ee0ee58cdfba08f4/assets/stylesheets/window_js/lighting/left-grey.png -------------------------------------------------------------------------------- /assets/stylesheets/window_js/lighting/pngbehavior.htc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |