kms 0.7.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/kms/application/controllers/assets_controller.coffee.erb +1 -1
- data/app/assets/javascripts/kms/application/controllers/pages_controller.coffee.erb +3 -3
- data/app/assets/javascripts/kms/application/module.coffee +1 -1
- data/app/assets/javascripts/templates/settings.html.slim +5 -5
- data/app/assets/stylesheets/kms/custom.css.scss +3 -3
- data/app/controllers/kms/application_controller.rb +1 -1
- data/app/controllers/kms/public/pages_controller.rb +2 -4
- data/app/models/concerns/kms/compile_templates.rb +4 -0
- data/app/models/kms/page.rb +0 -3
- data/app/models/kms/template.rb +0 -3
- data/app/views/devise/passwords/edit.html.erb +22 -0
- data/app/views/devise/passwords/new.html.erb +15 -0
- data/config/locales/en.yml +18 -16
- data/config/locales/ru.yml +19 -17
- data/db/migrate/20141027065341_create_pages.rb +1 -1
- data/db/migrate/20141027083603_create_templates.rb +1 -1
- data/db/migrate/20141027083633_add_template_id_to_pages.rb +1 -1
- data/db/migrate/20141029145253_create_assets.rb +1 -1
- data/db/migrate/20141031125758_add_ancestry_to_pages.rb +1 -1
- data/db/migrate/20141031140308_devise_create_users.rb +1 -1
- data/db/migrate/20141119084306_add_fullpath_to_pages.rb +1 -1
- data/db/migrate/20141121112652_add_role_to_users.rb +1 -1
- data/db/migrate/20141127073902_add_templatable_fields_to_pages.rb +1 -1
- data/db/migrate/20141209132901_add_hidden_to_page.rb +1 -1
- data/db/migrate/20150209120632_add_position_to_kms_pages.rb +1 -1
- data/db/migrate/20160129100437_create_kms_snippets.rb +1 -1
- data/db/migrate/20160712094512_create_kms_settings.rb +1 -1
- data/lib/kms/engine.rb +1 -0
- data/lib/kms/version.rb +1 -1
- data/spec/internal/log/test.log +420 -0
- data/vendor/assets/bower.json +3 -1
- data/vendor/assets/bower_components/angular-cookies/LICENSE.md +21 -0
- data/vendor/assets/bower_components/angular-cookies/README.md +2 -11
- data/vendor/assets/bower_components/angular-cookies/angular-cookies.js +259 -143
- data/vendor/assets/bower_components/angular-cookies/angular-cookies.min.js +5 -4
- data/vendor/assets/bower_components/angular-cookies/angular-cookies.min.js.map +3 -3
- data/vendor/assets/bower_components/angular-cookies/bower.json +3 -2
- data/vendor/assets/bower_components/angular-cookies/index.js +2 -0
- data/vendor/assets/bower_components/angular-cookies/package.json +10 -3
- data/vendor/assets/bower_components/angular-sanitize/LICENSE.md +21 -0
- data/vendor/assets/bower_components/angular-sanitize/README.md +2 -11
- data/vendor/assets/bower_components/angular-sanitize/angular-sanitize.js +69 -64
- data/vendor/assets/bower_components/angular-sanitize/angular-sanitize.min.js +12 -12
- data/vendor/assets/bower_components/angular-sanitize/angular-sanitize.min.js.map +2 -2
- data/vendor/assets/bower_components/angular-sanitize/bower.json +3 -2
- data/vendor/assets/bower_components/angular-sanitize/index.js +2 -0
- data/vendor/assets/bower_components/angular-sanitize/package.json +10 -3
- data/vendor/assets/bower_components/angular/LICENSE.md +21 -0
- data/vendor/assets/bower_components/angular/README.md +2 -5
- data/vendor/assets/bower_components/angular/angular-csp.css +8 -0
- data/vendor/assets/bower_components/angular/angular.js +11011 -6910
- data/vendor/assets/bower_components/angular/angular.min.js +297 -244
- data/vendor/assets/bower_components/angular/angular.min.js.gzip +0 -0
- data/vendor/assets/bower_components/angular/angular.min.js.map +3 -3
- data/vendor/assets/bower_components/angular/bower.json +2 -1
- data/vendor/assets/bower_components/angular/index.js +2 -0
- data/vendor/assets/bower_components/angular/package.json +2 -2
- metadata +11 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f3376e353187d1fcbd9033b374380f744467c2e3
|
4
|
+
data.tar.gz: ac386e50234dfa6e1c5830f1193412a4c8e8957b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9108885e35beeaea1ed0f8bd2b4b86da47814736ae204c194385e9b2a0aff4436406ce0c06a7f01c48e6855086959e51d2dffe207e98fb2a68bdf441ea564e5
|
7
|
+
data.tar.gz: bc3e1331a225a5bfe633dfd04d8fa2a4ebb180bc17b57ce5138a7b7aacd528c8d9530a565163d64501b5b429d916187cf9d2c9cf01c2a7c07da17faa38f9c9ff
|
@@ -43,7 +43,7 @@ AssetsController = ($scope, $state, $cookieStore, $cookies, Restangular, $stateP
|
|
43
43
|
$scope.assets[content_type] = _.without($scope.assets[content_type], asset)
|
44
44
|
|
45
45
|
$scope.setHeaders = ->
|
46
|
-
'X-XSRF-TOKEN': $cookies
|
46
|
+
'X-XSRF-TOKEN': $cookies.get("XSRF-TOKEN") # call func for getting a cookie
|
47
47
|
|
48
48
|
$scope.getMode = (asset)->
|
49
49
|
if /javascript/.test(asset.content_type)
|
@@ -35,6 +35,9 @@ PagesController = ($scope, $state, $cookieStore, Restangular, $stateParams, Aler
|
|
35
35
|
if $stateParams.id
|
36
36
|
$scope.store.get($stateParams.id).then (page)->
|
37
37
|
$scope.page = page
|
38
|
+
unless $scope.page.parent_id
|
39
|
+
index_page = _.select($scope.pages, (p) -> p.slug == 'index')[0]
|
40
|
+
$scope.page.parent_id = (if index_page then index_page.id else null)
|
38
41
|
else
|
39
42
|
$scope.page = {}
|
40
43
|
|
@@ -59,9 +62,6 @@ PagesController = ($scope, $state, $cookieStore, Restangular, $stateParams, Aler
|
|
59
62
|
$scope.pages = $scope.exceptCurrentPage($scope.pages)
|
60
63
|
$scope.parentPages = $scope.exceptCurrentPage($scope.parentPages)
|
61
64
|
$scope.page.slug = "index" if $scope.pages.length == 0
|
62
|
-
unless $scope.page.parent_id
|
63
|
-
index_page = _.select($scope.pages, (p) -> p.slug == 'index')[0]
|
64
|
-
$scope.page.parent_id = (if index_page then index_page.id else null)
|
65
65
|
|
66
66
|
|
67
67
|
$scope.create = ->
|
@@ -20,6 +20,6 @@ angular.module('KMS').config ['$httpProvider', '$locationProvider', 'Restangular
|
|
20
20
|
]
|
21
21
|
.run ['$http', '$cookies', 'editableOptions', '$rootScope', '$state', ($http, $cookies, editableOptions, $rootScope, $state) ->
|
22
22
|
$rootScope.$state = $state
|
23
|
-
$http.defaults.headers.common['X-XSRF-TOKEN'] = $cookies
|
23
|
+
$http.defaults.headers.common['X-XSRF-TOKEN'] = $cookies.get('XSRF-TOKEN')
|
24
24
|
editableOptions.theme = 'bs3'
|
25
25
|
]
|
@@ -6,15 +6,15 @@
|
|
6
6
|
a href="##{engine_class.engine_name}" = engine_class.engine_name.humanize
|
7
7
|
div class="tab-content"
|
8
8
|
- if Kms::SettingsService.templates.present?
|
9
|
-
|
10
|
-
-
|
11
|
-
|
9
|
+
- Kms::SettingsService.templates.each_with_index do |(engine_class, templates), index|
|
10
|
+
div role="tabpanel" class="tab-pane" ng-class="{active: isActiveTab(#{index})}" id=engine_class.engine_name
|
11
|
+
form role="form" ng-submit="update()"
|
12
12
|
.widget
|
13
13
|
.widget-body.no-padding
|
14
14
|
- templates.each do |template|
|
15
15
|
.message
|
16
16
|
ng-include src="'#{template}'"
|
17
|
-
|
18
|
-
|
17
|
+
.btn-group
|
18
|
+
button.btn.btn-default type="submit" = I18n.t(:update_settings)
|
19
19
|
- else
|
20
20
|
= I18n.t(:no_settings)
|
@@ -5,7 +5,7 @@ module Kms
|
|
5
5
|
# For APIs, you may want to use :null_session instead.
|
6
6
|
protect_from_forgery with: :exception
|
7
7
|
|
8
|
-
|
8
|
+
after_action :set_csrf_cookie_for_ng
|
9
9
|
|
10
10
|
def set_csrf_cookie_for_ng
|
11
11
|
cookies['XSRF-TOKEN'] = form_authenticity_token if protect_against_forgery?
|
@@ -1,16 +1,14 @@
|
|
1
1
|
module Kms
|
2
2
|
class Public::PagesController < ActionController::Base
|
3
3
|
|
4
|
-
|
4
|
+
before_action :eval_externals
|
5
5
|
|
6
6
|
def show
|
7
7
|
page_result = Kms.template_manager.render(@page.register_id, @externals)
|
8
|
-
# apply typograph to page content
|
9
|
-
#page_result = EvilFront::Russian.typograph_html(page_result)
|
10
8
|
result = Kms.template_manager.render(@template.register_id, @externals.
|
11
9
|
merge(_inner_template: page_result))
|
12
10
|
|
13
|
-
render
|
11
|
+
render html: result.html_safe
|
14
12
|
end
|
15
13
|
|
16
14
|
protected
|
data/app/models/kms/page.rb
CHANGED
data/app/models/kms/template.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
<div class="wrapper">
|
2
|
+
|
3
|
+
<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { class: 'form-signin', method: :put }) do |f| %>
|
4
|
+
<h2 class="form-signin-heading">KMS</h2>
|
5
|
+
<h4>Change your password</h4>
|
6
|
+
<%= devise_error_messages! %>
|
7
|
+
<%= f.hidden_field :reset_password_token %>
|
8
|
+
|
9
|
+
<% if @minimum_password_length %>
|
10
|
+
<em>(<%= @minimum_password_length %> characters minimum)</em><br />
|
11
|
+
<% end %>
|
12
|
+
<%= f.password_field :password, autofocus: true, autocomplete: "off", class: 'form-control', placeholder: 'Password' %>
|
13
|
+
|
14
|
+
<%= f.password_field :password_confirmation, autocomplete: "off", class: 'form-control', placeholder: 'Password confirmation' %>
|
15
|
+
|
16
|
+
<%= f.submit "Change my password", class: "btn btn-lg btn-primary btn-block" %>
|
17
|
+
|
18
|
+
<br>
|
19
|
+
<%= render "devise/shared/links" %>
|
20
|
+
<% end %>
|
21
|
+
|
22
|
+
</div>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<div class="wrapper">
|
2
|
+
<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { class: 'form-signin', method: :post }) do |f| %>
|
3
|
+
<h2 class="form-signin-heading">KMS</h2>
|
4
|
+
<%= devise_error_messages! %>
|
5
|
+
|
6
|
+
<h4>Forgot your password?</h4>
|
7
|
+
<%= f.email_field :email, autofocus: true, class: 'form-control', placeholder: 'Email' %>
|
8
|
+
<br>
|
9
|
+
<%= f.submit "Send reset password instructions", class: "btn btn-lg btn-primary btn-block" %>
|
10
|
+
<br>
|
11
|
+
<%= render "devise/shared/links" %>
|
12
|
+
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
</div>
|
data/config/locales/en.yml
CHANGED
@@ -50,29 +50,31 @@ en:
|
|
50
50
|
tags_title: "Tags"
|
51
51
|
filters_title: "Filters"
|
52
52
|
variables_title: "Variables"
|
53
|
+
endpoints_title: "Endpoints"
|
53
54
|
property: "Property of"
|
55
|
+
parameter: "Parameter for"
|
54
56
|
description: "Description"
|
55
57
|
specification: "Detailed Liquor specification"
|
56
58
|
tags:
|
57
59
|
declare:
|
58
|
-
main_description: "Tag declare could be used for variables declaration and initial value setup in this form
|
60
|
+
main_description: "Tag declare could be used for variables declaration and initial value setup in this form:"
|
59
61
|
additional_description: "Difference between declare and assign tag - with declare you can create variables with the same names but in different scopes."
|
60
62
|
assign:
|
61
|
-
main_description: "Tag assign could be used for variables declaration and its initial value setup in this form
|
63
|
+
main_description: "Tag assign could be used for variables declaration and its initial value setup in this form:"
|
62
64
|
if:
|
63
|
-
main_description: "Tag if is a standard conditional statement and has this form
|
65
|
+
main_description: "Tag if is a standard conditional statement and has this form:"
|
64
66
|
unless:
|
65
|
-
main_description: 'Tag unless executes its "body" if conditional expression results in false or null
|
67
|
+
main_description: 'Tag unless executes its "body" if conditional expression results in false or null:'
|
66
68
|
for:
|
67
69
|
main_description: "Tag for is a standard cycle statement and has this form: "
|
68
70
|
capture:
|
69
|
-
main_description: "Tag capture runs code and saves result in var. If var already contained value, capture changes it
|
71
|
+
main_description: "Tag capture runs code and saves result in var. If var already contained value, capture changes it:"
|
70
72
|
content_for:
|
71
|
-
main_description: "Tag content_for runs code and saves result in some handle
|
73
|
+
main_description: "Tag content_for runs code and saves result in some handle:"
|
72
74
|
yield:
|
73
|
-
main_description: "Tag yield has 3 forms. In the simples case (without arguments) it inserts content of internal template (Page content in terms of this CMS). If string with handle was setup with {% content_for %}, then yield returns this string. If no string with handle, yield returns result of if_none block execution, if such block was specified, or just empty string
|
75
|
+
main_description: "Tag yield has 3 forms. In the simples case (without arguments) it inserts content of internal template (Page content in terms of this CMS). If string with handle was setup with {% content_for %}, then yield returns this string. If no string with handle, yield returns result of if_none block execution, if such block was specified, or just empty string:"
|
74
76
|
include:
|
75
|
-
main_description: 'Tag include includes content of Snippet into template. The only argument of include - Snippet ID (field "Slug/ID" that you need to setup on Snippet creation in "Snippets")
|
77
|
+
main_description: 'Tag include includes content of Snippet into template. The only argument of include - Snippet ID (field "Slug/ID" that you need to setup on Snippet creation in "Snippets"):'
|
76
78
|
variables:
|
77
79
|
var_loop:
|
78
80
|
main_description: 'Variable giving access to current state of cycle/iteration. Can be used only in "for" cycle. var_loop - common name, for accessing actual cycle variable you need to concatenate cycle variable name and "_loop". Example:'
|
@@ -80,7 +82,7 @@ en:
|
|
80
82
|
length: "Iterations count (collection size)"
|
81
83
|
index: "Current iteration index - index of element"
|
82
84
|
page:
|
83
|
-
main_description: 'Variable "page" can be accessed in any template and references to current page
|
85
|
+
main_description: 'Variable "page" can be accessed in any template and references to current page:'
|
84
86
|
properties:
|
85
87
|
slug: 'Value of "Slug" field'
|
86
88
|
fullpath: 'Page fullpath'
|
@@ -93,7 +95,7 @@ en:
|
|
93
95
|
index:
|
94
96
|
main_description: 'Variable "index" accessible in templates and references to root page (with "index" slug). Object properties are the same as for "page" variable.'
|
95
97
|
request:
|
96
|
-
main_description: 'Variable "request" gives an access to some properties of current request
|
98
|
+
main_description: 'Variable "request" gives an access to some properties of current request:'
|
97
99
|
properties:
|
98
100
|
path: 'Returns request relative path'
|
99
101
|
url: 'Returns request URL'
|
@@ -114,17 +116,17 @@ en:
|
|
114
116
|
link: 'Link to page, containing query'
|
115
117
|
filters:
|
116
118
|
asset_path:
|
117
|
-
main_description: 'Filter "asset_path" allows to get a relative path to any file from "Assets" section by filename
|
119
|
+
main_description: 'Filter "asset_path" allows to get a relative path to any file from "Assets" section by filename:'
|
118
120
|
asset_tag:
|
119
|
-
main_description: 'Filter "asset_tag" allows to include javascript and css files, uploaded to "Assets" section
|
121
|
+
main_description: 'Filter "asset_tag" allows to include javascript and css files, uploaded to "Assets" section:'
|
120
122
|
resize:
|
121
|
-
main_description: 'This function/filter helps to change image size on-the-fly. For this filter you need to use absolute URL of image and "format" argument. Returns also URL. To get absolute URL (having only relative - any asset from "Assets") you should use "request.base_url"
|
123
|
+
main_description: 'This function/filter helps to change image size on-the-fly. For this filter you need to use absolute URL of image and "format" argument. Returns also URL. To get absolute URL (having only relative - any asset from "Assets") you should use "request.base_url":'
|
122
124
|
add_watermark:
|
123
|
-
main_description: 'It allows to add watermark to image. You need image URL and 3 arguments: "image" - watermark image (watermark), "dissolve" - transparency and "position" - position. Returns also URL
|
125
|
+
main_description: 'It allows to add watermark to image. You need image URL and 3 arguments: "image" - watermark image (watermark), "dissolve" - transparency and "position" - position. Returns also URL:'
|
124
126
|
ends_with:
|
125
|
-
main_description: 'Allows to check if string ends with some pattern
|
127
|
+
main_description: 'Allows to check if string ends with some pattern:'
|
126
128
|
currency:
|
127
|
-
main_description: 'Formats currency values. Possible options: precision, delimiter, separator, format, unit
|
129
|
+
main_description: 'Formats currency values. Possible options: precision, delimiter, separator, format, unit:'
|
128
130
|
activerecord:
|
129
131
|
models:
|
130
132
|
kms/template:
|
data/config/locales/ru.yml
CHANGED
@@ -50,29 +50,31 @@ ru:
|
|
50
50
|
tags_title: "Тэги"
|
51
51
|
filters_title: "Фильтры"
|
52
52
|
variables_title: "Переменные"
|
53
|
+
endpoints_title: "Запросы"
|
53
54
|
property: "Свойство"
|
55
|
+
parameter: "Параметр для"
|
54
56
|
description: "Описание"
|
55
57
|
specification: "Подробная спецификация Liquor"
|
56
58
|
tags:
|
57
59
|
declare:
|
58
|
-
main_description: "Тэг declare может быть использован для объявления и задания значений переменным в следующей
|
60
|
+
main_description: "Тэг declare может быть использован для объявления и задания значений переменным в следующей форме:"
|
59
61
|
additional_description: "Отличие от assign в том, что с declare можно создавать переменные с одинаковыми именами, но в разных областях видимости."
|
60
62
|
assign:
|
61
|
-
main_description: "Тэг assign может быть использован для объявления и задания значений переменным в следующей
|
63
|
+
main_description: "Тэг assign может быть использован для объявления и задания значений переменным в следующей форме:"
|
62
64
|
if:
|
63
|
-
main_description: "Тэг if является стандартным условным оператором и имеет следующую
|
65
|
+
main_description: "Тэг if является стандартным условным оператором и имеет следующую форму:"
|
64
66
|
unless:
|
65
|
-
main_description: 'Тэг unless выполняет "тело" условия, если результат выражения - false или null
|
67
|
+
main_description: 'Тэг unless выполняет "тело" условия, если результат выражения - false или null:'
|
66
68
|
for:
|
67
|
-
main_description: "Тэг for является стандартным циклическим оператором и имеет следующую
|
69
|
+
main_description: "Тэг for является стандартным циклическим оператором и имеет следующую форму:"
|
68
70
|
capture:
|
69
|
-
main_description: "Тэг capture выполняет code и сохраняет результат в var. Если var уже имела значение, capture изменяет
|
71
|
+
main_description: "Тэг capture выполняет code и сохраняет результат в var. Если var уже имела значение, capture изменяет его:"
|
70
72
|
content_for:
|
71
|
-
main_description: "Тэг content_for выполняет code и сохраняет результат в handle
|
73
|
+
main_description: "Тэг content_for выполняет code и сохраняет результат в handle:"
|
72
74
|
yield:
|
73
|
-
main_description: "Тэг yield имеет 3 формы написания. В самом простом случае (без аргументов) тэг вставляет содержимое внутреннего шаблона (в данной CMS это страница). Если строка с handle была задана с помощью {% content_for %}, тогда yield возвращает эту строку. Если не было задано строки с этим handle, yield либо возвращает результат выполнения блока if_none, если он задан, или пустую
|
75
|
+
main_description: "Тэг yield имеет 3 формы написания. В самом простом случае (без аргументов) тэг вставляет содержимое внутреннего шаблона (в данной CMS это страница). Если строка с handle была задана с помощью {% content_for %}, тогда yield возвращает эту строку. Если не было задано строки с этим handle, yield либо возвращает результат выполнения блока if_none, если он задан, или пустую строку:"
|
74
76
|
include:
|
75
|
-
main_description: 'Тэг include включает в шаблон содержимое Сниппета. Единственный аргумент include - это идентификатор Сниппета (поле "Идентификатор", указанное при создании сниппета в разделе "Сниппеты")
|
77
|
+
main_description: 'Тэг include включает в шаблон содержимое Сниппета. Единственный аргумент include - это идентификатор Сниппета (поле "Идентификатор", указанное при создании сниппета в разделе "Сниппеты"):'
|
76
78
|
variables:
|
77
79
|
var_loop:
|
78
80
|
main_description: 'Переменная, предоставляющая доступ к текущему состоянию цикла. Может быть использована только внутри цикла for. var_loop - обобщённое имя, для получения настоящего имени переменной нужно сконкатенировать название переменной цикла и "_loop". Например:'
|
@@ -80,7 +82,7 @@ ru:
|
|
80
82
|
length: "Количество итераций (размер коллекции)"
|
81
83
|
index: "Номер текущей итерации - индекс элемента"
|
82
84
|
page:
|
83
|
-
main_description: 'Переменная page доступна в шаблонах и является ссылкой на текущую отображаемую
|
85
|
+
main_description: 'Переменная page доступна в шаблонах и является ссылкой на текущую отображаемую страницу:'
|
84
86
|
properties:
|
85
87
|
slug: 'Значение поля "Ссылка" страницы'
|
86
88
|
fullpath: 'Полный путь страницы'
|
@@ -93,7 +95,7 @@ ru:
|
|
93
95
|
index:
|
94
96
|
main_description: 'Переменная index доступна в шаблонах и является ссылкой на корневую страницу сайта (со ссылкой index). Свойства объекта такие же, как у переменной page.'
|
95
97
|
request:
|
96
|
-
main_description: 'Переменная request предоставляет доступ к некоторым параметрам текущего
|
98
|
+
main_description: 'Переменная request предоставляет доступ к некоторым параметрам текущего запроса:'
|
97
99
|
properties:
|
98
100
|
path: 'Возвращает относительный путь запроса'
|
99
101
|
url: 'Возвращает URL запроса'
|
@@ -114,17 +116,17 @@ ru:
|
|
114
116
|
link: 'Ссылка на страницу, содержащую искомый запрос'
|
115
117
|
filters:
|
116
118
|
asset_path:
|
117
|
-
main_description: 'Фильтр asset_path позволяет получить путь к файлу из раздела "Файлы" по имени
|
119
|
+
main_description: 'Фильтр asset_path позволяет получить путь к файлу из раздела "Файлы" по имени файла:'
|
118
120
|
asset_tag:
|
119
|
-
main_description: 'Фильтр asset_tag позволяет подключать javascript и css файлы, загруженные в раздел "Файлы"
|
121
|
+
main_description: 'Фильтр asset_tag позволяет подключать javascript и css файлы, загруженные в раздел "Файлы":'
|
120
122
|
resize:
|
121
|
-
main_description: 'Функция выполняет изменение размеров изображения. Для функции необходим абсолютный URL изображения и аргумент "format", на выходе также URL. Для получения абсолютного URL следует использовать request.base_url
|
123
|
+
main_description: 'Функция выполняет изменение размеров изображения. Для функции необходим абсолютный URL изображения и аргумент "format", на выходе также URL. Для получения абсолютного URL следует использовать request.base_url:'
|
122
124
|
add_watermark:
|
123
|
-
main_description: 'Функция выполняет добавление watermark к изображению. Для функции необходим URL изображения и 3 аргумента "image" - изображение для наложения (watermark), "dissolve" - прозрачность и "position" - позиция, на выходе также URL
|
125
|
+
main_description: 'Функция выполняет добавление watermark к изображению. Для функции необходим URL изображения и 3 аргумента "image" - изображение для наложения (watermark), "dissolve" - прозрачность и "position" - позиция, на выходе также URL:'
|
124
126
|
ends_with:
|
125
|
-
main_description: 'Позволяет проверить, оканчивается строка определённым паттерном или
|
127
|
+
main_description: 'Позволяет проверить, оканчивается строка определённым паттерном или нет:'
|
126
128
|
currency:
|
127
|
-
main_description: 'Форматирование полей, хранящих денежные значения. Возможные опции - precision, delimiter, separator, format, unit
|
129
|
+
main_description: 'Форматирование полей, хранящих денежные значения. Возможные опции - precision, delimiter, separator, format, unit:'
|
128
130
|
activerecord:
|
129
131
|
models:
|
130
132
|
kms/template:
|