pages_core 3.8.0 → 3.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -23,7 +23,7 @@ module Admin
23
23
  def update
24
24
  @image.update(image_params)
25
25
  respond_to do |format|
26
- format.json { render action: :show }
26
+ format.json { render_image_json(@image) }
27
27
  end
28
28
  end
29
29
 
@@ -2,8 +2,8 @@ import React from "react";
2
2
  import PropTypes from "prop-types";
3
3
  import copyToClipboard from "../../lib/copyToClipboard";
4
4
  import AttachmentEditor from "./AttachmentEditor";
5
- import ModalStore from "../ModalStore";
6
- import ToastStore from "../ToastStore";
5
+ import ModalStore from "../../stores/ModalStore";
6
+ import ToastStore from "../../stores/ToastStore";
7
7
 
8
8
  import { useDraggable } from "../drag";
9
9
 
@@ -1,8 +1,8 @@
1
1
  import React, { useState } from "react";
2
2
  import PropTypes from "prop-types";
3
3
  import copyToClipboard, { copySupported } from "../../lib/copyToClipboard";
4
- import ModalStore from "../ModalStore";
5
- import ToastStore from "../ToastStore";
4
+ import ModalStore from "../../stores/ModalStore";
5
+ import ToastStore from "../../stores/ToastStore";
6
6
  import { putJson } from "../../lib/request";
7
7
 
8
8
  export default function AttachmentEditor(props) {
@@ -1,7 +1,7 @@
1
1
  import React, { useState } from "react";
2
2
  import PropTypes from "prop-types";
3
3
  import ImageEditor from "./ImageEditor";
4
- import ModalStore from "./ModalStore";
4
+ import ModalStore from "../stores/ModalStore";
5
5
 
6
6
  export default function EditableImage(props) {
7
7
  const [image, setImage] = useState(props.image);
@@ -1,49 +1,42 @@
1
- import React from "react";
1
+ import React, { useRef } from "react";
2
2
  import PropTypes from "prop-types";
3
3
 
4
- export default class FileUploadButton extends React.Component {
5
- constructor(props) {
6
- super(props);
7
- this.inputRef = React.createRef();
8
- this.handleChange = this.handleChange.bind(this);
9
- this.triggerDialog = this.triggerDialog.bind(this);
10
- }
4
+ export default function FileUploadButton(props) {
5
+ const inputRef = useRef();
11
6
 
12
- handleChange(evt) {
7
+ const handleChange = (evt) => {
13
8
  let fileList = evt.target.files;
14
9
  let files = [];
15
10
  for (var i = 0; i < fileList.length; i++) {
16
11
  files.push(fileList[i]);
17
12
  }
18
13
  if (files.length > 0) {
19
- this.props.callback(files);
14
+ props.callback(files);
20
15
  }
21
- }
16
+ };
22
17
 
23
- render() {
24
- return (
25
- <div className="upload-button">
26
- <span>
27
- Drag and drop {this.props.type || "file"}
28
- {this.props.multiple && "s"} here, or
29
- {this.props.multiline && <br />}
30
- <button onClick={this.triggerDialog}>
31
- choose a file
32
- </button>
33
- </span>
34
- <input type="file"
35
- onChange={this.handleChange}
36
- ref={this.inputRef}
37
- style={{ display: "none" }}
38
- multiple={this.props.multiple || false} />
39
- </div>
40
- );
41
- }
42
-
43
- triggerDialog(evt) {
18
+ const triggerDialog = (evt) => {
44
19
  evt.preventDefault();
45
- this.inputRef.current.click();
46
- }
20
+ inputRef.current.click();
21
+ };
22
+
23
+ return (
24
+ <div className="upload-button">
25
+ <span>
26
+ Drag and drop {props.type || "file"}
27
+ {props.multiple && "s"} here, or
28
+ {props.multiline && <br />}
29
+ <button onClick={triggerDialog}>
30
+ choose a file
31
+ </button>
32
+ </span>
33
+ <input type="file"
34
+ onChange={handleChange}
35
+ ref={inputRef}
36
+ style={{ display: "none" }}
37
+ multiple={props.multiple || false} />
38
+ </div>
39
+ );
47
40
  }
48
41
 
49
42
  FileUploadButton.propTypes = {
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  import PropTypes from "prop-types";
3
- import ModalStore from "../ModalStore";
4
- import ToastStore from "../ToastStore";
3
+ import ModalStore from "../../stores/ModalStore";
4
+ import ToastStore from "../../stores/ToastStore";
5
5
  import copyToClipboard, { copySupported } from "../../lib/copyToClipboard";
6
6
 
7
7
  export default function Form(props) {
@@ -1,6 +1,6 @@
1
1
  import React, { useState } from "react";
2
2
  import PropTypes from "prop-types";
3
- import ModalStore from "./ModalStore";
3
+ import ModalStore from "../stores/ModalStore";
4
4
  import { putJson } from "../lib/request";
5
5
 
6
6
  import ImageCropper, { useCrop, cropParams } from "./ImageCropper";
@@ -2,7 +2,7 @@ import React, { useEffect, useState } from "react";
2
2
  import PropTypes from "prop-types";
3
3
  import copyToClipboard from "../../lib/copyToClipboard";
4
4
  import EditableImage from "../EditableImage";
5
- import ToastStore from "../ToastStore";
5
+ import ToastStore from "../../stores/ToastStore";
6
6
  import Placeholder from "./Placeholder";
7
7
 
8
8
  import { useDraggable } from "../drag";
@@ -4,7 +4,7 @@ import FileUploadButton from "./FileUploadButton";
4
4
  import DragElement from "./ImageGrid/DragElement";
5
5
  import FilePlaceholder from "./ImageGrid/FilePlaceholder";
6
6
  import GridImage from "./ImageGrid/GridImage";
7
- import ToastStore from "./ToastStore";
7
+ import ToastStore from "../stores/ToastStore";
8
8
  import { post } from "../lib/request";
9
9
 
10
10
  import { createDraggable,
@@ -2,7 +2,7 @@ import React, { useState } from "react";
2
2
  import PropTypes from "prop-types";
3
3
  import EditableImage from "./EditableImage";
4
4
  import FileUploadButton from "./FileUploadButton";
5
- import ToastStore from "./ToastStore";
5
+ import ToastStore from "../stores/ToastStore";
6
6
  import { post } from "../lib/request";
7
7
 
8
8
  function getFiles(dt) {
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import ModalStore from "./ModalStore";
2
+ import ModalStore from "../stores/ModalStore";
3
3
 
4
4
  export default class Modal extends React.Component {
5
5
  constructor(props) {
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import PropTypes from "prop-types";
3
- import ToastStore from "./ToastStore";
3
+ import ToastStore from "../stores/ToastStore";
4
4
 
5
5
  export default class Toast extends React.Component {
6
6
  constructor(props) {
@@ -1,6 +1,7 @@
1
1
  export { default as Attachments } from "./components/Attachments";
2
2
  export { default as DateRangeSelect } from "./components/DateRangeSelect";
3
3
  export { default as EditableImage } from "./components/EditableImage";
4
+ export { default as FileUploadButton } from "./components/FileUploadButton";
4
5
  export { default as ImageCropper } from "./components/ImageCropper";
5
6
  export { default as ImageGrid } from "./components/ImageGrid";
6
7
  export { default as ImageUploader } from "./components/ImageUploader";
@@ -31,3 +31,8 @@ export default function startPages () {
31
31
 
32
32
  export * from "./components";
33
33
  export * from "./hooks";
34
+ export * from "./stores";
35
+
36
+ export * from "./lib/request.js";
37
+ export { default as copyToClipboard,
38
+ copySupported } from "./lib/copyToClipboard";
@@ -0,0 +1,2 @@
1
+ export { default as ModalStore } from "./stores/ModalStore";
2
+ export { default as ToastStore } from "./stores/ToastStore";
data/app/models/role.rb CHANGED
@@ -7,17 +7,15 @@ class Role < ApplicationRecord
7
7
  uniqueness: { scope: :user_id },
8
8
  inclusion: { in: proc { Role.roles.map(&:name) } }
9
9
 
10
+ RoleDefinition = Struct.new(:name, :description, :default)
11
+
10
12
  class << self
11
13
  def define(name, description, default: false)
12
14
  if roles.map(&:name).include?(name.to_s)
13
15
  raise ArgumentError, "Tried to define role :#{role}, " \
14
16
  "but a role by that name already exists"
15
17
  else
16
- roles << OpenStruct.new(
17
- name: name.to_s,
18
- description: description,
19
- default: default
20
- )
18
+ roles << RoleDefinition.new(name.to_s, description, default)
21
19
  end
22
20
  end
23
21
 
@@ -39,21 +37,13 @@ class Role < ApplicationRecord
39
37
  return [] unless File.exist?(config_file)
40
38
 
41
39
  YAML.load_file(config_file).map do |key, opts|
42
- OpenStruct.new(name: key.to_s,
43
- description: opts["description"],
44
- default: opts["default"])
40
+ RoleDefinition.new(key.to_s, opts["description"], opts["default"])
45
41
  end
46
42
  end
47
43
 
48
44
  def default_roles
49
- [
50
- OpenStruct.new(
51
- name: "users", description: "Can manage users", default: false
52
- ),
53
- OpenStruct.new(
54
- name: "pages", description: "Can manage pages", default: true
55
- )
56
- ]
45
+ [RoleDefinition.new("users", "Can manage users", false),
46
+ RoleDefinition.new("pages", "Can manage pages", true)]
57
47
  end
58
48
  end
59
49
 
@@ -16,15 +16,6 @@ module PagesCore
16
16
  disable(&block)
17
17
  PagesCore::StaticCache.handler.sweep!
18
18
  end
19
-
20
- def config
21
- ActiveSupport::Deprecation.warn(
22
- "PagesCore::CacheSweeper.config is no longer used."
23
- )
24
- configuration = OpenStruct.new(patterns: [])
25
- yield configuration if block_given?
26
- configuration
27
- end
28
19
  end
29
20
 
30
21
  self.enabled ||= true
@@ -5,12 +5,14 @@ module PagesCore
5
5
  class Base
6
6
  class InvalidConfigurationKey < StandardError; end
7
7
 
8
+ SettingStruct = Struct.new(:type, :default)
9
+
8
10
  def self.settings
9
11
  @settings ||= {}
10
12
  end
11
13
 
12
14
  def self.setting(key, type, default = nil)
13
- settings[key] = OpenStruct.new(type: type, default: default)
15
+ settings[key] = SettingStruct.new(type, default)
14
16
 
15
17
  define_method key do |*args|
16
18
  args.any? ? set(key, *args) : get(key)
@@ -4,9 +4,8 @@ module PagesCore
4
4
  module PubSub
5
5
  class << self
6
6
  def publish(name, payload = {})
7
- payload_struct = OpenStruct.new(payload)
8
7
  subscribers.select { |s| s.name == name }
9
- .each { |s| s.call(payload_struct) }
8
+ .each { |s| s.call(payload) }
10
9
  end
11
10
 
12
11
  def subscribe(name, &block)
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PagesCore
4
- VERSION = "3.8.0" unless PagesCore.const_defined?("VERSION")
4
+ unless PagesCore.const_defined?("VERSION")
5
+ VERSION = File.read(File.expand_path("../../VERSION", __dir__)).strip
6
+ end
5
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pages_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.8.0
4
+ version: 3.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Inge Jørgensen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-17 00:00:00.000000000 Z
11
+ date: 2021-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capybara
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: 3.8.1
97
+ - !ruby/object:Gem::Dependency
98
+ name: semantic
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: shoulda-matchers
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -621,7 +635,6 @@ files:
621
635
  - app/javascript/components/ImageGrid/Placeholder.jsx
622
636
  - app/javascript/components/ImageUploader.jsx
623
637
  - app/javascript/components/Modal.jsx
624
- - app/javascript/components/ModalStore.jsx
625
638
  - app/javascript/components/PageDates.jsx
626
639
  - app/javascript/components/PageFiles.jsx
627
640
  - app/javascript/components/PageImages.jsx
@@ -634,7 +647,6 @@ files:
634
647
  - app/javascript/components/TagEditor/AddTagForm.jsx
635
648
  - app/javascript/components/TagEditor/Tag.jsx
636
649
  - app/javascript/components/Toast.jsx
637
- - app/javascript/components/ToastStore.jsx
638
650
  - app/javascript/components/drag.js
639
651
  - app/javascript/components/drag/draggedOrder.js
640
652
  - app/javascript/components/drag/useDragCollection.js
@@ -651,6 +663,9 @@ files:
651
663
  - app/javascript/lib/copyToClipboard.js
652
664
  - app/javascript/lib/readyHandler.js
653
665
  - app/javascript/lib/request.js
666
+ - app/javascript/stores.js
667
+ - app/javascript/stores/ModalStore.jsx
668
+ - app/javascript/stores/ToastStore.jsx
654
669
  - app/jobs/pages_core/autopublish_job.rb
655
670
  - app/jobs/pages_core/sweep_cache_job.rb
656
671
  - app/mailers/admin_mailer.rb
@@ -833,7 +848,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
833
848
  - !ruby/object:Gem::Version
834
849
  version: '0'
835
850
  requirements: []
836
- rubygems_version: 3.2.22
851
+ rubygems_version: 3.2.32
837
852
  signing_key:
838
853
  specification_version: 4
839
854
  summary: Pages Core