Skip to content

Commit

Permalink
Add display messages
Browse files Browse the repository at this point in the history
  • Loading branch information
jcoyne committed Jul 6, 2020
1 parent c1165e4 commit 79291fb
Show file tree
Hide file tree
Showing 24 changed files with 505 additions and 15 deletions.
10 changes: 5 additions & 5 deletions .rubocop_todo.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# This configuration was generated by
# `rubocop --auto-gen-config`
# on 2020-07-06 17:37:04 UTC using RuboCop version 0.86.0.
# on 2020-07-06 18:37:58 UTC using RuboCop version 0.86.0.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
Expand Down Expand Up @@ -41,15 +41,15 @@ Lint/UnusedBlockArgument:
- 'lib/tasks/argo.rake'
- 'lib/tasks/argo_testing.rake'

# Offense count: 96
# Offense count: 97
# Configuration parameters: IgnoredMethods.
Metrics/AbcSize:
Max: 82

# Offense count: 5
# Configuration parameters: CountComments.
Metrics/ClassLength:
Max: 173
Max: 177

# Offense count: 11
# Configuration parameters: IgnoredMethods.
Expand Down Expand Up @@ -301,7 +301,7 @@ Style/CommentedKeyword:
- 'lib/tasks/argo.rake'
- 'lib/tasks/argo_testing.rake'

# Offense count: 63
# Offense count: 65
Style/Documentation:
Enabled: false

Expand All @@ -328,7 +328,7 @@ Style/NumericPredicate:
- 'spec/**/*'
- 'app/jobs/descmetadata_download_job.rb'

# Offense count: 291
# Offense count: 292
# Cop supports --auto-correct.
# Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
# URISchemes: http, https
Expand Down
4 changes: 4 additions & 0 deletions app/controllers/catalog_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,10 @@ class CatalogController < ApplicationController

def index
@presenter = HomeTextPresenter.new(current_user)
unless has_search_parameters?
@presenter.primary_messages = ContentBlock.active.primary
@presenter.secondary_messages = ContentBlock.active.secondary
end
super
end

Expand Down
42 changes: 42 additions & 0 deletions app/controllers/content_blocks_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# frozen_string_literal: true

class ContentBlocksController < ApplicationController
before_action :set_content_block, only: %i[create update destroy]
authorize_resource

# GET /content_blocks
def index
@unexpired_blocks = ContentBlock.unexpired
@expired_blocks = ContentBlock.expired
end

# POST /content_blocks
def create
@content_block.save!
redirect_to content_blocks_path
end

# PATCH/PUT /content_blocks/1
def update
@content_block.save!
redirect_to content_blocks_path
end

# DELETE /content_blocks/1
def destroy
@content_block.destroy
redirect_to content_blocks_path
end

private

# Use callbacks to share common setup or constraints between actions.
def set_content_block
@content_block = params[:id] ? ContentBlock.find(params[:id]) : ContentBlock.new
return unless params[:content_block]

start_at = params[:content_block][:start_at].in_time_zone('America/Los_Angeles')
end_at = params[:content_block][:end_at].in_time_zone('America/Los_Angeles').end_of_day
@content_block.attributes = { end_at: end_at, start_at: start_at, ordinal: params[:content_block][:ordinal], value: params[:content_block][:value] }
end
end
5 changes: 5 additions & 0 deletions app/javascript/argo.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import Form from 'modules/apo_form'
import CollectionEditor from 'controllers/collection_editor'
import ContentBlockNew from 'controllers/content_block_new'
import ContentBlockEdit from 'controllers/content_block_edit'

import BulkActions from 'controllers/bulk_actions'
import BulkUpload from 'controllers/bulk_upload'
import FacetFilter from 'controllers/facet_filter'
Expand Down Expand Up @@ -46,6 +49,8 @@ export default class Argo {
application.register("facet-filter", FacetFilter)
application.register("workflow-grid", WorkflowGrid)
application.register("collection-editor", CollectionEditor)
application.register("content-block-new", ContentBlockNew)
application.register("content-block-edit", ContentBlockEdit)
application.register("tokens", Tokens)
}

Expand Down
43 changes: 43 additions & 0 deletions app/javascript/controllers/content_block_edit.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import { Controller } from 'stimulus'

export default class extends Controller {
static targets = [ "value", "ordinal", "startAt", "endAt" ]

display(event) {
event.preventDefault()

// Save the old HTML so we can cancel.
this.existingHTML = this.element.innerHTML

// Display the editor
let template = document.getElementById('edit-row')
this.element.innerHTML = template.innerHTML

// Populate the form with the values for this row
this.valueTarget.value = this.data.get('value')
this.ordinalTarget.value = this.data.get('ordinal')
this.startAtTarget.value = this.data.get('start_at')
this.endAtTarget.value = this.data.get('end_at')
}

save(event) {
// remove the new form fields
document.querySelector('[data-target="content-block-new.form"').remove()

// Update the form so it updates the current item.
let form = document.querySelector('[data-target="content-block-form"]')
form.action = this.data.get('url')

// Set the patch method on the form
var input = document.createElement("input");
input.type = 'hidden'
input.name = '_method'
input.value = 'patch'
form.appendChild(input)
}

cancel(event) {
event.preventDefault()
this.element.innerHTML = this.existingHTML
}
}
23 changes: 23 additions & 0 deletions app/javascript/controllers/content_block_new.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { Controller } from 'stimulus'

export default class extends Controller {
static targets = [ "button", "form", "headerRow" ]

display(event) {
event.preventDefault()
this.formTarget.classList.remove('d-none')
// The header row doesn't display if there are no existing records, so display it now.
this.headerRowTarget.classList.remove('d-none')
this.buttonTarget.classList.add('d-none')
}

cancel(event) {
event.preventDefault()
this.hideForm()
}

hideForm() {
this.formTarget.classList.add('d-none')
this.buttonTarget.classList.remove('d-none')
}
}
5 changes: 5 additions & 0 deletions app/javascript/style/application.scss
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
@import 'variables';
@import 'bootstrap/scss/bootstrap';
@import 'bootstrap-overrides';

$fa-font-path: '~@fortawesome/fontawesome-free/webfonts';
@import "@fortawesome/fontawesome-free/scss/fontawesome.scss";
@import "@fortawesome/fontawesome-free/scss/solid.scss";

// Override before importing Blacklight
$logo-image: "../images/logo.png";
@import 'blacklight-frontend/app/assets/stylesheets/blacklight/blacklight';
Expand Down
11 changes: 11 additions & 0 deletions app/javascript/style/bootstrap-overrides.scss
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,14 @@
color: $body-color;
opacity: 1.0;
}

.alert-warning {
@include alert-variant(theme-color-level('warning', $alert-bg-level), $gamboge, $body-color);

.fa-exclamation-circle {
color: $gamboge;
font-size: 2em;
margin-right: .5em;
vertical-align: middle;
}
}
1 change: 1 addition & 0 deletions app/javascript/style/variables.scss
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
$barley-corn: #b3995d;
$floral-white: #f9f6ef;
$tahuna-sands: #d2c295;
$gamboge: #eaab01;
$tea: #b6b1a9;
$silver: #c5c5c5;

Expand Down
28 changes: 28 additions & 0 deletions app/models/content_block.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# frozen_string_literal: true

class ContentBlock < ApplicationRecord
ORDINAL_STRING = { 1 => 'Primary', 2 => 'Secondary' }.freeze
scope :expired, -> { where('end_at < ?', current_time) }
scope :unexpired, -> { where('end_at >= ?', current_time) }
scope :active, -> { where('start_at < ? AND end_at >= ?', current_time, current_time) }
scope :primary, -> { where(ordinal: 1) }
scope :secondary, -> { where(ordinal: 2) }

validates :ordinal, presence: true, inclusion: { in: [1, 2] }

def self.current_time
Time.now.in_time_zone('America/Los_Angeles')
end

def ordinal_string
ORDINAL_STRING.fetch(ordinal)
end

def pacific_start
start_at.in_time_zone('America/Los_Angeles')
end

def pacific_end
end_at.in_time_zone('America/Los_Angeles')
end
end
4 changes: 4 additions & 0 deletions app/presenters/home_text_presenter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,17 @@
class HomeTextPresenter
def initialize(current_user)
@current_user = current_user
@primary_messages = []
@secondary_messages = []
end

# @return [Boolean] true if this user has permissions to see anything in Argo
def view_something?
admin? || manager? || viewer? || permitted_apos.any?
end

attr_accessor :primary_messages, :secondary_messages

private

attr_reader :current_user
Expand Down
19 changes: 19 additions & 0 deletions app/views/catalog/_home_text.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,23 @@
You do not appear to have permission to view any items in Argo. Please contact an administrator.
</p>
<% end %>

<% @presenter.primary_messages.each do |block| %>
<div class="alert alert-warning" role="alert">
<span class="fas fa-exclamation-circle" aria-hidden="true"></span>
<%= block.value %>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<% end %>

<% if @presenter.secondary_messages.present? %>
<h4>Messages from the Argo team</h4>
<ul>
<% @presenter.secondary_messages.each do |block| %>
<li><%= block.value %></li>
<% end %>
</ul>
<% end %>
</div>
Loading

0 comments on commit 79291fb

Please sign in to comment.