kms_models 1.0.1 → 1.1.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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/kms_models/application/controllers/entries_controller.coffee.erb +1 -0
- data/app/assets/javascripts/kms_models/application/controllers/fields_controller.coffee.erb +16 -9
- data/app/assets/javascripts/templates/entries/index.html.slim +1 -1
- data/app/assets/javascripts/templates/fields/date_field.html.slim +3 -0
- data/app/assets/javascripts/templates/models/fields.html.slim +11 -4
- data/app/assets/javascripts/templates/models/form.html.slim +41 -15
- data/app/assets/stylesheets/kms_models/application.css +6 -0
- data/app/controllers/kms/models/entries_controller.rb +2 -2
- data/app/controllers/kms/models/models_controller.rb +4 -4
- data/app/models/kms/checkbox_field.rb +3 -0
- data/app/models/kms/date_field.rb +4 -0
- data/app/models/kms/field.rb +1 -0
- data/app/serializers/kms/entry_serializer.rb +4 -0
- data/app/serializers/kms/model_serializer.rb +1 -1
- data/config/locales/en.yml +4 -0
- data/config/locales/ru.yml +4 -0
- data/db/migrate/20180122135245_add_description_to_kms_models.rb +5 -0
- data/lib/kms/models/version.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7d0df8ff5a3477c6d524949f0e152cb74fbc066
|
4
|
+
data.tar.gz: bbc91ff5304078d8551b9fb2b687e13ec16b42ce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ee61d66f62c0b91ed9a69660d429b11149a7f64faa55bf8e90661fd799585d35988df9ae4332fc61fa58528ae8e322456bf1c0998914740c376435df3d6aec13
|
7
|
+
data.tar.gz: 4ebc68f98c34e1a86da3fe86caac321c128a8236958189a5ec56afc2552bb8597c8a1322cfb167c4d32fba22ad67345eb85c72ddae8cc0b06a93b11164d89151
|
data/app/assets/javascripts/kms_models/application/controllers/entries_controller.coffee.erb
CHANGED
@@ -3,6 +3,7 @@ EntriesController = ($scope, $state, Restangular, $stateParams, Alertify, Errors
|
|
3
3
|
$scope.store = Restangular.one("models", $stateParams.modelId).all("entries")
|
4
4
|
$scope.editorOptions =
|
5
5
|
filebrowserUploadUrl: '/kms/assets/ckeditor'
|
6
|
+
language: '<%= I18n.locale.to_s %>'
|
6
7
|
|
7
8
|
#Restangular.all('users').customGET('kms_user').then (current_user) ->
|
8
9
|
#$scope.currentUser = current_user
|
@@ -1,11 +1,12 @@
|
|
1
1
|
FieldsController = ($scope, $state, Restangular, $stateParams, TransliterationService) ->
|
2
2
|
$scope.types = [
|
3
|
-
{ id: 'Kms::StringField', name: "<%= I18n.t("field_types.string") %>"},
|
4
|
-
{ id: 'Kms::TextField', name: "<%= I18n.t("field_types.text") %>"},
|
5
|
-
{ id: 'Kms::CheckboxField', name: "<%= I18n.t("field_types.checkbox") %>"},
|
6
|
-
{ id: 'Kms::
|
7
|
-
{ id: 'Kms::
|
8
|
-
{ id: 'Kms::
|
3
|
+
{ id: 'Kms::StringField', name: "<%= I18n.t("field_types.string") %>", icon: 'fa-font'},
|
4
|
+
{ id: 'Kms::TextField', name: "<%= I18n.t("field_types.text") %>", icon: 'fa-file-text-o'},
|
5
|
+
{ id: 'Kms::CheckboxField', name: "<%= I18n.t("field_types.checkbox") %>", icon: 'fa-check-square-o'},
|
6
|
+
{ id: 'Kms::DateField', name: "<%= I18n.t("field_types.date") %>", icon: 'fa-calendar'},
|
7
|
+
{ id: 'Kms::FileField', name: "<%= I18n.t("field_types.file") %>", icon: 'fa-image'},
|
8
|
+
{ id: 'Kms::HasManyField', name: "<%= I18n.t("field_types.has_many") %>", icon: 'fa-sitemap'},
|
9
|
+
{ id: 'Kms::BelongsToField', name: "<%= I18n.t("field_types.belongs_to") %>", icon: 'fa-leaf'},
|
9
10
|
]
|
10
11
|
|
11
12
|
$scope.fieldsSortableOptions =
|
@@ -29,8 +30,11 @@ FieldsController = ($scope, $state, Restangular, $stateParams, TransliterationSe
|
|
29
30
|
if newValue? and !$scope.field.id
|
30
31
|
$scope.field.liquor_name = _.snakeCase TransliterationService.translit(newValue, 5).replace(/`/g, '')
|
31
32
|
|
32
|
-
$scope.
|
33
|
-
|
33
|
+
$scope.findTypeByField = (field) ->
|
34
|
+
_.find $scope.types, (type) -> type.id == field.type
|
35
|
+
|
36
|
+
$scope.formatType = (field) ->
|
37
|
+
fieldType = $scope.findTypeByField(field)
|
34
38
|
if $scope.isAssociationField(field) then "#{fieldType.name} (#{$scope.getDisplayableTemplatableType(field)})" else fieldType.name
|
35
39
|
|
36
40
|
$scope.getDisplayableTemplatableType = (field)->
|
@@ -40,8 +44,11 @@ FieldsController = ($scope, $state, Restangular, $stateParams, TransliterationSe
|
|
40
44
|
$scope.isAssociationField = (field)->
|
41
45
|
field.type == 'Kms::HasManyField' or field.type == 'Kms::BelongsToField'
|
42
46
|
|
47
|
+
$scope.isValidField = ->
|
48
|
+
$scope.field.name and $scope.field.liquor_name and $scope.field.type
|
49
|
+
|
43
50
|
$scope.addField = ->
|
44
|
-
if $scope.
|
51
|
+
if $scope.isValidField()
|
45
52
|
$scope.model.fields_attributes.push($scope.field)
|
46
53
|
$scope.field = {}
|
47
54
|
|
@@ -3,7 +3,7 @@
|
|
3
3
|
.widget
|
4
4
|
.widget-header
|
5
5
|
i.fa.fa-list
|
6
|
-
|
6
|
+
| {{ model.description || model.kms_model_name }}
|
7
7
|
a.btn.btn-sm.btn-primary.pull-right ui-sref="models.entries.new({modelId: model.id})"
|
8
8
|
= I18n.t("add_entry")
|
9
9
|
.widget-body.no-padding
|
@@ -0,0 +1,3 @@
|
|
1
|
+
label for="{{ field.liquor_name }}"
|
2
|
+
| {{ field.name }}
|
3
|
+
input.form-control datepicker-popup="" is-open="field.datepickerOpened" show-button-bar="false" ng-click="field.datepickerOpened = true" type="text" ng-model="entry.values[field.liquor_name]" ng-attr-id="{{field.liquor_name}}"
|
@@ -2,7 +2,8 @@
|
|
2
2
|
table.table
|
3
3
|
thead
|
4
4
|
tr
|
5
|
-
th colspan="4"
|
5
|
+
th colspan="4"
|
6
|
+
h4 = Kms::Model.human_attribute_name(:fields)
|
6
7
|
tbody as-sortable="fieldsSortableOptions" ng-model="model.fields_attributes"
|
7
8
|
tr ng-repeat="field in model.fields_attributes" ng-hide="field._destroy" as-sortable-item=""
|
8
9
|
td
|
@@ -11,7 +12,8 @@
|
|
11
12
|
td
|
12
13
|
| {{ field.liquor_name }}
|
13
14
|
td
|
14
|
-
|
15
|
+
i.fa ng-class="findTypeByField(field).icon"
|
16
|
+
| {{ formatType(field) }}
|
15
17
|
td
|
16
18
|
| {{ field.required }}
|
17
19
|
td
|
@@ -27,8 +29,13 @@
|
|
27
29
|
.col-lg-3
|
28
30
|
input.form-control type="text" required="" placeholder=Kms::Field.human_attribute_name(:liquor_name) ng-model="field.liquor_name"
|
29
31
|
.col-lg-2
|
30
|
-
select
|
31
|
-
|
32
|
+
ui-select ng-model="field.type" theme="bootstrap"
|
33
|
+
ui-select-match placeholder=I18n.t(:select_field_type)
|
34
|
+
i.fa ng-class="$select.selected.icon"
|
35
|
+
| {{ $select.selected.name }}
|
36
|
+
ui-select-choices repeat="type.id as type in types"
|
37
|
+
i.fa ng-class="type.icon"
|
38
|
+
| {{ type.name | highlight: $select.search }}
|
32
39
|
.col-lg-2 ng-show="isAssociationField(field)"
|
33
40
|
select#field_class_name.form-control ng-model="field.class_name" ng-options="templatable_type.type as templatable_type.title for templatable_type in templatable_types" required="" placeholder=Kms::Field.human_attribute_name(:class_name)
|
34
41
|
option value="" disabled="" selected="" = I18n.t(:select_model)
|
@@ -1,15 +1,41 @@
|
|
1
|
-
.
|
2
|
-
|
3
|
-
|
4
|
-
.
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
.form-
|
9
|
-
|
10
|
-
|
11
|
-
.
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
1
|
+
.row
|
2
|
+
.col-md-6.col-sm-12
|
3
|
+
.form-group
|
4
|
+
label for="kms_model_name" = Kms::Model.human_attribute_name(:kms_model_name)
|
5
|
+
input#kms_model_name.form-control type="text" ng-model="model.kms_model_name"
|
6
|
+
.form-group
|
7
|
+
label for="collection_name" = Kms::Model.human_attribute_name(:collection_name)
|
8
|
+
input#collection_name.form-control type="text" ng-model="model.collection_name"
|
9
|
+
small.help-block = I18n.t(:collection_name_field_hint)
|
10
|
+
.form-group
|
11
|
+
label for="description" = Kms::Model.human_attribute_name(:description)
|
12
|
+
textarea#description.form-control ng-model="model.description"
|
13
|
+
small.help-block = I18n.t(:description_field_hint)
|
14
|
+
.form-group
|
15
|
+
label for="label_field" = Kms::Model.human_attribute_name(:label_field)
|
16
|
+
select#label_field.form-control ng-model="model.label_field" ng-options="field.liquor_name as field.name for field in model.fields_attributes"
|
17
|
+
small.help-block = I18n.t(:label_field_hint)
|
18
|
+
.form-group
|
19
|
+
label for="allow_creation_using_form" style="margin-right:10px;"
|
20
|
+
= Kms::Model.human_attribute_name(:allow_creation_using_form)
|
21
|
+
toggle-switch ng-model="model.allow_creation_using_form" on-label=I18n.t(:yes_word) off-label=I18n.t(:no_word)
|
22
|
+
small.help-block = I18n.t(:allow_creation_using_form_field_hint)
|
23
|
+
.col-md-6.col-sm-12
|
24
|
+
.widget.model-iteration-code-snippet
|
25
|
+
.widget-body
|
26
|
+
.widget-content
|
27
|
+
.widget-icon.pull-left
|
28
|
+
i class="fa fa-clipboard"
|
29
|
+
.title Model iteration hint
|
30
|
+
.comment Use sample code below for iterating your model entries in Template, Page or Snippet:
|
31
|
+
br
|
32
|
+
pre
|
33
|
+
| {% for element in: models.{{ model.collection_name }} do: %}
|
34
|
+
br
|
35
|
+
code ng-non-bindable=""
|
36
|
+
| <p>{{
|
37
|
+
| element.{{ model.label_field }}
|
38
|
+
code ng-non-bindable=""
|
39
|
+
| }}</p>
|
40
|
+
br
|
41
|
+
| {% end for %}
|
@@ -19,7 +19,7 @@ module Kms
|
|
19
19
|
if @entry.save
|
20
20
|
render json: @entry, root: false
|
21
21
|
else
|
22
|
-
render json: @entry.to_json
|
22
|
+
render json: { errors: @entry.errors.full_messages }.to_json, status: :unprocessable_entity
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
@@ -29,7 +29,7 @@ module Kms
|
|
29
29
|
if @entry.update_attributes(entry_params)
|
30
30
|
render json: @entry, root: false
|
31
31
|
else
|
32
|
-
render json: @entry.to_json
|
32
|
+
render json: { errors: @entry.errors.full_messages }.to_json, status: :unprocessable_entity
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Kms
|
2
2
|
module Models
|
3
3
|
class ModelsController < ApplicationController
|
4
|
-
wrap_parameters :model, include: [:kms_model_name, :collection_name, :label_field, :fields_attributes, :allow_creation_using_form]
|
4
|
+
wrap_parameters :model, include: [:kms_model_name, :collection_name, :description, :label_field, :fields_attributes, :allow_creation_using_form]
|
5
5
|
|
6
6
|
def index
|
7
7
|
render json: Model.all, root: false
|
@@ -18,14 +18,14 @@ module Kms
|
|
18
18
|
Kms::ResourceService.register(:models, @model, "fa-tasks")
|
19
19
|
Kms::ModelsWrapperDrop.register_model @model.collection_name
|
20
20
|
else
|
21
|
-
render json: {errors: @model.errors}.to_json, status: :unprocessable_entity
|
21
|
+
render json: { errors: @model.errors.full_messages }.to_json, status: :unprocessable_entity
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
def update
|
26
26
|
@model = Model.find(params[:id])
|
27
27
|
unless @model.update_attributes(model_params)
|
28
|
-
render json: {errors: @model.errors}.to_json, status: :unprocessable_entity
|
28
|
+
render json: { errors: @model.errors.full_messages }.to_json, status: :unprocessable_entity
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -38,7 +38,7 @@ module Kms
|
|
38
38
|
protected
|
39
39
|
|
40
40
|
def model_params
|
41
|
-
params.require(:model).permit(:kms_model_name, :collection_name, :label_field, :allow_creation_using_form, fields_attributes: [:id, :name, :liquor_name, :type, :class_name, :_destroy])
|
41
|
+
params.require(:model).permit(:kms_model_name, :collection_name, :description, :label_field, :allow_creation_using_form, fields_attributes: [:id, :name, :liquor_name, :type, :class_name, :_destroy])
|
42
42
|
end
|
43
43
|
|
44
44
|
end
|
data/app/models/kms/field.rb
CHANGED
@@ -3,6 +3,7 @@ module Kms
|
|
3
3
|
belongs_to :model
|
4
4
|
scope :file_fields, -> { where(type: Kms::FileField.name) }
|
5
5
|
scope :checkbox_fields, -> { where(type: Kms::CheckboxField.name) }
|
6
|
+
scope :date_fields, -> { where(type: Kms::DateField.name) }
|
6
7
|
|
7
8
|
def get_value(entry)
|
8
9
|
# OVERRIDE in subclasses if needed
|
@@ -17,6 +17,10 @@ module Kms
|
|
17
17
|
object.model.fields.checkbox_fields.each do |checkbox_field|
|
18
18
|
values_with_urls[checkbox_field.liquor_name] = values_with_urls[checkbox_field.liquor_name] == 'true'
|
19
19
|
end
|
20
|
+
# prepare checkbox fields - cause PostgreSQL json stored as strings
|
21
|
+
object.model.fields.date_fields.each do |date_field|
|
22
|
+
values_with_urls[date_field.liquor_name] = Date.parse(values_with_urls[date_field.liquor_name])
|
23
|
+
end
|
20
24
|
values_with_urls
|
21
25
|
end
|
22
26
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Kms
|
2
2
|
class ModelSerializer < ActiveModel::Serializer
|
3
|
-
attributes :id, :kms_model_name, :collection_name, :label_field, :allow_creation_using_form, :fields_attributes
|
3
|
+
attributes :id, :kms_model_name, :collection_name, :description, :label_field, :allow_creation_using_form, :fields_attributes
|
4
4
|
|
5
5
|
has_many :fields_attributes, serializer: Kms::FieldSerializer
|
6
6
|
|
data/config/locales/en.yml
CHANGED
@@ -12,6 +12,8 @@ en:
|
|
12
12
|
select_field_type: "Select field type"
|
13
13
|
select_model: "Select Model"
|
14
14
|
collection_name_field_hint: "You can access model collection like this: models.your_collection_name (ex., models.services)"
|
15
|
+
description_field_hint: "Optional field. Just write some description so everyone would be aware what's the purpose of this Model"
|
16
|
+
label_field_hint: "Add at least one Field below. And then you could choose one that would be used for item permalink generation and entries list displaying"
|
15
17
|
allow_creation_using_form_field_hint: "On website you can place a form allowing to create model entries"
|
16
18
|
has_many_field_placeholder: "Select related objects..."
|
17
19
|
belongs_to_field_placeholder: "Select related object..."
|
@@ -23,6 +25,7 @@ en:
|
|
23
25
|
string: "String"
|
24
26
|
text: "Text"
|
25
27
|
checkbox: "Checkbox"
|
28
|
+
date: "Date"
|
26
29
|
file: "File"
|
27
30
|
has_many: "Has many"
|
28
31
|
belongs_to: "Belongs to"
|
@@ -53,6 +56,7 @@ en:
|
|
53
56
|
kms/model:
|
54
57
|
kms_model_name: "Name"
|
55
58
|
collection_name: "Collection name (for Liquor)"
|
59
|
+
description: "Description"
|
56
60
|
fields: "Fields"
|
57
61
|
label_field: "Label field (used for URL/slug generating)"
|
58
62
|
allow_creation_using_form: "Allow creation using form"
|
data/config/locales/ru.yml
CHANGED
@@ -12,6 +12,8 @@ ru:
|
|
12
12
|
select_field_type: "Выберите тип свойства"
|
13
13
|
select_model: "Выберите модель"
|
14
14
|
collection_name_field_hint: "К коллекции можно будет обратиться так: models.your_collection_name (напр., models.services)"
|
15
|
+
description_field_hint: "Необязательное поле. Напишите небольшое описание, чтобы было понятно назначение данной Модели"
|
16
|
+
label_field_hint: "Добавьте хотя бы одно Свойство ниже. И затем вы можете выбрать свойство для генерации ссылки на элемент, а так же для отображения элементов в списке"
|
15
17
|
allow_creation_using_form_field_hint: "На сайте можно будет разместить форму для создания элементов модели"
|
16
18
|
has_many_field_placeholder: "Выберите связанные объекты..."
|
17
19
|
belongs_to_field_placeholder: "Выберите связанный объект..."
|
@@ -23,6 +25,7 @@ ru:
|
|
23
25
|
string: "Строка"
|
24
26
|
text: "Текст"
|
25
27
|
checkbox: "Чекбокс"
|
28
|
+
date: "Дата"
|
26
29
|
file: "Файл"
|
27
30
|
has_many: "Имеет много"
|
28
31
|
belongs_to: "Связано с"
|
@@ -52,6 +55,7 @@ ru:
|
|
52
55
|
kms/model:
|
53
56
|
kms_model_name: "Название"
|
54
57
|
collection_name: "Название коллекции (для Liquor)"
|
58
|
+
description: "Описание"
|
55
59
|
fields: "Свойства"
|
56
60
|
label_field: "Поле, используемое для генерации ссылок на объекты"
|
57
61
|
allow_creation_using_form: "Разрешить создание элементов с помощью форм"
|
data/lib/kms/models/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kms_models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Petrov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: friendly_id
|
@@ -120,6 +120,7 @@ files:
|
|
120
120
|
- app/assets/javascripts/templates/entries/new.html.slim
|
121
121
|
- app/assets/javascripts/templates/fields/belongs_to_field.html.slim
|
122
122
|
- app/assets/javascripts/templates/fields/checkbox_field.html.slim
|
123
|
+
- app/assets/javascripts/templates/fields/date_field.html.slim
|
123
124
|
- app/assets/javascripts/templates/fields/file_field.html.slim
|
124
125
|
- app/assets/javascripts/templates/fields/has_many_field.html.slim
|
125
126
|
- app/assets/javascripts/templates/fields/string_field.html.slim
|
@@ -139,6 +140,7 @@ files:
|
|
139
140
|
- app/helpers/kms_models/application_helper.rb
|
140
141
|
- app/models/kms/belongs_to_field.rb
|
141
142
|
- app/models/kms/checkbox_field.rb
|
143
|
+
- app/models/kms/date_field.rb
|
142
144
|
- app/models/kms/entry.rb
|
143
145
|
- app/models/kms/field.rb
|
144
146
|
- app/models/kms/file_field.rb
|
@@ -172,6 +174,7 @@ files:
|
|
172
174
|
- db/migrate/20170209125819_add_allow_creation_using_form_to_models.rb
|
173
175
|
- db/migrate/20170802063046_change_values_column_to_jsonb.rb
|
174
176
|
- db/migrate/20170802085121_add_position_to_kms_fields.rb
|
177
|
+
- db/migrate/20180122135245_add_description_to_kms_models.rb
|
175
178
|
- lib/drops/kms/entry_drop.rb
|
176
179
|
- lib/drops/kms/models_wrapper_drop.rb
|
177
180
|
- lib/generators/kms_models/install/install_generator.rb
|
@@ -199,7 +202,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
199
202
|
version: '0'
|
200
203
|
requirements: []
|
201
204
|
rubyforge_project:
|
202
|
-
rubygems_version: 2.
|
205
|
+
rubygems_version: 2.4.5
|
203
206
|
signing_key:
|
204
207
|
specification_version: 4
|
205
208
|
summary: Extension for KMS
|