decidim-decidim_awesome 0.12.0 → 0.12.3
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/CHANGELOG.md +33 -0
- data/README.md +24 -14
- data/Rakefile +12 -0
- data/app/cells/concerns/decidim/decidim_awesome/global_menu_cell_override.rb +14 -2
- data/app/cells/concerns/decidim/decidim_awesome/proposal_l_cell_override.rb +5 -4
- data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/show.erb +3 -3
- data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/vote_block_for.erb +1 -1
- data/app/controllers/concerns/decidim/decidim_awesome/admin/maintenance_context.rb +0 -28
- data/app/controllers/concerns/decidim/decidim_awesome/needs_hashcash.rb +41 -0
- data/app/controllers/concerns/decidim/decidim_awesome/not_found_redirect.rb +2 -2
- data/app/controllers/decidim/decidim_awesome/admin/admin_authorizations_controller.rb +2 -2
- data/app/controllers/decidim/decidim_awesome/admin/checks_controller.rb +0 -4
- data/app/controllers/decidim/decidim_awesome/admin/config_controller.rb +2 -1
- data/app/controllers/decidim/decidim_awesome/admin/custom_redirects_controller.rb +1 -2
- data/app/controllers/decidim/decidim_awesome/admin/hashcash_controller.rb +39 -0
- data/app/controllers/decidim/decidim_awesome/admin/menu_hacks_controller.rb +1 -1
- data/app/controllers/decidim/decidim_awesome/admin/{maintenance_controller.rb → private_data_controller.rb} +9 -9
- data/app/controllers/decidim/decidim_awesome/utils_controller.rb +17 -0
- data/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_override.rb +7 -1
- data/app/forms/decidim/decidim_awesome/admin/config_form.rb +13 -0
- data/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb +1 -1
- data/app/helpers/decidim/decidim_awesome/map_helper.rb +4 -2
- data/app/models/decidim/decidim_awesome/paper_trail_version.rb +1 -1
- data/app/overrides/decidim/devise/registrations/new/add_hashcash.html.erb.deface +3 -0
- data/app/overrides/decidim/devise/sessions/new/add_hashcash.html.erb.deface +3 -0
- data/app/overrides/layouts/decidim/_head/add_awesome_custom_styles.html.erb.deface +3 -0
- data/app/overrides/layouts/decidim/_head/add_awesome_tags.html.erb.deface +0 -2
- data/app/packs/entrypoints/decidim_decidim_awesome_hashcash.js +4 -0
- data/app/packs/src/decidim/decidim_awesome/admin/auto_edit.js +10 -6
- data/app/packs/src/decidim/decidim_awesome/admin/custom_fields_builder.js +4 -2
- data/app/packs/src/decidim/decidim_awesome/admin/verifications.js +6 -3
- data/app/packs/src/decidim/decidim_awesome/awesome_map/api/proposals_fetcher.js +1 -1
- data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/controller.js +1 -1
- data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/proposals_controller.js +1 -1
- data/app/packs/src/decidim/decidim_awesome/awesome_map/controls_ui.js +6 -6
- data/app/packs/src/decidim/decidim_awesome/awesome_map/load_map.js +1 -1
- data/app/packs/src/decidim/decidim_awesome/forms/autosave.js +3 -3
- data/app/packs/src/decidim/decidim_awesome/forms/custom_fields_renderer.js +1 -113
- data/app/packs/src/decidim/decidim_awesome/proposals/images.js +1 -1
- data/app/packs/src/vendor/form_builder_langs/ar-SA.lang +111 -0
- data/app/packs/src/vendor/form_builder_langs/ar-TN.lang +94 -0
- data/app/packs/src/vendor/form_builder_langs/ca-ES.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/cs-CZ.lang +105 -0
- data/app/packs/src/vendor/form_builder_langs/da-DK.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/de-DE.lang +109 -0
- data/app/packs/src/vendor/form_builder_langs/el-GR.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/en-US.lang +117 -0
- data/app/packs/src/vendor/form_builder_langs/es-ES.lang +103 -0
- data/app/packs/src/vendor/form_builder_langs/fa-IR.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/fi-FI.lang +107 -0
- data/app/packs/src/vendor/form_builder_langs/fr-FR.lang +117 -0
- data/app/packs/src/vendor/form_builder_langs/he-IL.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/hi-IN.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/hu-HU.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/id-ID.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/it-IT.lang +107 -0
- data/app/packs/src/vendor/form_builder_langs/ja-JP.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/my-MM.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/nb-NO.lang +94 -0
- data/app/packs/src/vendor/form_builder_langs/nl-NL.lang +94 -0
- data/app/packs/src/vendor/form_builder_langs/pl-PL.lang +122 -0
- data/app/packs/src/vendor/form_builder_langs/pt-BR.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/pu-IN.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/qz-MM.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/ro-RO.lang +94 -0
- data/app/packs/src/vendor/form_builder_langs/ru-RU.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/sl-SI.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/th-TH.lang +111 -0
- data/app/packs/src/vendor/form_builder_langs/tr-TR.lang +115 -0
- data/app/packs/src/vendor/form_builder_langs/uk-UA.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/vi-VN.lang +94 -0
- data/app/packs/src/vendor/form_builder_langs/zh-CN.lang +100 -0
- data/app/packs/src/vendor/form_builder_langs/zh-TW.lang +94 -0
- data/app/packs/src/vendor/hashcash.js +83 -0
- data/app/packs/src/vendor/sha1.js +143 -0
- data/app/packs/src/vendor/stamp.js +50 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/forms/autosave.scss +2 -12
- data/app/presenters/decidim/decidim_awesome/private_data_presenter.rb +2 -2
- data/app/views/decidim/decidim_awesome/admin/admin_accountability/index.html.erb +4 -4
- data/app/views/decidim/decidim_awesome/admin/admin_authorizations/callout.html.erb +2 -2
- data/app/views/decidim/decidim_awesome/admin/admin_authorizations/conflict.html.erb +4 -4
- data/app/views/decidim/decidim_awesome/admin/admin_authorizations/edit.html.erb +6 -5
- data/app/views/decidim/decidim_awesome/admin/checks/index.html.erb +6 -6
- data/app/views/decidim/decidim_awesome/admin/config/_autoedit_box_label.html.erb +2 -2
- data/app/views/decidim/decidim_awesome/admin/config/_constraints.html.erb +3 -3
- data/app/views/decidim/decidim_awesome/admin/config/_form_admins.html.erb +4 -3
- data/app/views/decidim/decidim_awesome/admin/config/_form_editors.html.erb +1 -1
- data/app/views/decidim/decidim_awesome/admin/config/_form_proposal_custom_fields.html.erb +4 -4
- data/app/views/decidim/decidim_awesome/admin/config/_form_scoped_styles.html.erb +3 -3
- data/app/views/decidim/decidim_awesome/admin/config/_form_surveys.html.erb +40 -2
- data/app/views/decidim/decidim_awesome/admin/config/_form_verifications.html.erb +1 -1
- data/app/views/decidim/decidim_awesome/admin/hashcash/_filters.html.erb +55 -0
- data/app/views/decidim/decidim_awesome/admin/hashcash/index.html.erb +33 -0
- data/app/views/decidim/decidim_awesome/admin/hashcash/ip_addresses.html.erb +29 -0
- data/app/views/decidim/decidim_awesome/admin/hashcash/show.html.erb +42 -0
- data/app/views/decidim/decidim_awesome/admin/menu_hacks/index.html.erb +2 -2
- data/app/views/decidim/decidim_awesome/admin/{maintenance → private_data}/_private_data.html.erb +2 -2
- data/app/views/decidim/decidim_awesome/admin/{maintenance/show.html.erb → private_data/index.html.erb} +2 -3
- data/app/views/decidim/decidim_awesome/admin/proposals/_private_body.html.erb +1 -1
- data/app/views/decidim/decidim_awesome/amendments/_modal.html.erb +2 -2
- data/app/views/decidim/decidim_awesome/hashcash/_hidden_field.html.erb +5 -0
- data/app/views/layouts/decidim/decidim_awesome/_awesome_config.html.erb +2 -2
- data/app/views/layouts/decidim/decidim_awesome/admin/maintenance.html.erb +2 -11
- data/config/assets.rb +1 -0
- data/config/i18n-tasks.yml +1 -0
- data/config/locales/ca.yml +69 -30
- data/config/locales/cs.yml +68 -29
- data/config/locales/de.yml +67 -28
- data/config/locales/en.yml +81 -32
- data/config/locales/es.yml +68 -29
- data/config/locales/eu.yml +31 -31
- data/config/locales/fr.yml +82 -31
- data/config/locales/ja.yml +31 -31
- data/lib/decidim/decidim_awesome/admin_engine.rb +8 -5
- data/lib/decidim/decidim_awesome/awesome.rb +29 -7
- data/lib/decidim/decidim_awesome/checksums.yml +15 -40
- data/lib/decidim/decidim_awesome/engine.rb +11 -2
- data/lib/decidim/decidim_awesome/menu.rb +151 -138
- data/lib/decidim/decidim_awesome/test/initializer.rb +4 -1
- data/lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb +1 -3
- data/lib/decidim/decidim_awesome/test/shared_examples/editor_examples.rb +2 -1
- data/lib/decidim/decidim_awesome/test/shared_examples/summary_examples.rb +8 -1
- data/lib/decidim/decidim_awesome/version.rb +1 -1
- data/lib/tasks/decidim_awesome_upgrade_tasks.rake +4 -1
- data/package.json +3 -4
- metadata +68 -10
- data/config/rubocop/disabled.yml +0 -11
- data/config/rubocop/faker.yml +0 -480
- data/config/rubocop/rails.yml +0 -88
- data/config/rubocop/rspec.yml +0 -65
- data/config/rubocop/ruby.yml +0 -1210
@@ -0,0 +1,94 @@
|
|
1
|
+
NATIVE_NAME = 繁體中文(台灣)
|
2
|
+
ENGLISH_NAME = Chinese (Taiwan)
|
3
|
+
|
4
|
+
addOption = 新增選項
|
5
|
+
allFieldsRemoved = 所有欄位已移除
|
6
|
+
allowSelect = 允許選擇
|
7
|
+
autocomplete = 自動完成
|
8
|
+
button = 按鈕
|
9
|
+
cannotBeEmpty = 此欄位不能是空白
|
10
|
+
checkboxGroup = 核取方塊群組
|
11
|
+
checkbox = 核取方塊
|
12
|
+
checkboxes = 核取方塊組
|
13
|
+
class = CSS 類別
|
14
|
+
clearAllMessage = 你確定要移除所有的項目嗎?
|
15
|
+
clear = 清除
|
16
|
+
close = 關閉
|
17
|
+
content = 內容
|
18
|
+
copy = 複製到剪貼簿
|
19
|
+
dateField = 日期欄位
|
20
|
+
description = 描述
|
21
|
+
descriptionField = 描述欄位
|
22
|
+
devMode = 開發者模式
|
23
|
+
editNames = 編輯名稱
|
24
|
+
editorTitle = 表單元件
|
25
|
+
editXML = 編輯 XML
|
26
|
+
fieldDeleteWarning: false
|
27
|
+
fieldVars = 欄位變數
|
28
|
+
fieldNonEditable = 此欄位無法修改。
|
29
|
+
fieldRemoveWarning = 你確定要移除此欄位嗎?
|
30
|
+
fileUpload = 檔案上傳
|
31
|
+
formUpdated = 已更新表單
|
32
|
+
getStarted = 請拖拉表單元件到此區域。
|
33
|
+
header = 標頭
|
34
|
+
hide = 隱藏
|
35
|
+
hidden = 隱藏輸入欄位
|
36
|
+
label = 標籤
|
37
|
+
labelEmpty = 標籤欄位名稱不能是空白的
|
38
|
+
limitRole = 限制可讀取的角色 :
|
39
|
+
mandatory = 強制性的
|
40
|
+
maxlength = 最大長度
|
41
|
+
minOptionMessage = 此欄位至少要兩個選項
|
42
|
+
name = 名稱
|
43
|
+
no = 否
|
44
|
+
off = 關
|
45
|
+
on = 開
|
46
|
+
option = 選項
|
47
|
+
optional = 可選的
|
48
|
+
optionEmpty = 請填入選項值
|
49
|
+
paragraph = 段落
|
50
|
+
placeholder = 占位符
|
51
|
+
placeholder.value = 值
|
52
|
+
placeholder.label = 標籤
|
53
|
+
placeholder.text = 請輸入一些文字
|
54
|
+
placeholder.textarea = 請輸入文字
|
55
|
+
placeholder.email = 請輸入你的電子郵件
|
56
|
+
placeholder.placeholder = 占位符
|
57
|
+
placeholder.className = 多個類別時,請用空白隔開即可。
|
58
|
+
placeholder.password = 請輸入密碼
|
59
|
+
preview = 預覽
|
60
|
+
radioGroup = 單選群組
|
61
|
+
radio = 單選
|
62
|
+
removeMessage = 移除元件
|
63
|
+
remove = ×
|
64
|
+
required = 必要的
|
65
|
+
richText = 文字編輯框
|
66
|
+
roles = 存取
|
67
|
+
save = 儲存
|
68
|
+
selectOptions = 選項
|
69
|
+
select = 選擇
|
70
|
+
selectColor = 選擇顏色
|
71
|
+
selectionsMessage = 允許多重選擇
|
72
|
+
size = 大小
|
73
|
+
sizes = 大小
|
74
|
+
sizes.xs = 最小
|
75
|
+
sizes.sm = 小
|
76
|
+
sizes.m = 中
|
77
|
+
sizes.lg = 大
|
78
|
+
style = 樣式
|
79
|
+
styles = 樣式
|
80
|
+
styles.btn = 按鈕樣式
|
81
|
+
styles.btn.default = Default
|
82
|
+
styles.btn.danger = Danger
|
83
|
+
styles.btn.info = Info
|
84
|
+
styles.btn.primary = Primary
|
85
|
+
styles.btn.success = Success
|
86
|
+
styles.btn.warning = Warning
|
87
|
+
subtype = 格式
|
88
|
+
text = 文字欄位
|
89
|
+
textArea = 文字區塊
|
90
|
+
toggle = 彈出提示
|
91
|
+
warning = 警告!
|
92
|
+
viewXML = 顯示 XML
|
93
|
+
viewJSON = { }
|
94
|
+
yes = 是
|
@@ -0,0 +1,83 @@
|
|
1
|
+
// http://www.hashcash.org/docs/hashcash.html
|
2
|
+
// <input type="hidden" name="hashcash" data-hashcash="{resource: 'site.example', bits: 16}"/>
|
3
|
+
|
4
|
+
import Stamp from "src/vendor/stamp"
|
5
|
+
|
6
|
+
export default class Hashcash {
|
7
|
+
static default = {
|
8
|
+
version: 1,
|
9
|
+
bits: 20,
|
10
|
+
extension: null,
|
11
|
+
}
|
12
|
+
|
13
|
+
constructor(input) {
|
14
|
+
this.options = JSON.parse(input.getAttribute("data-hashcash"))
|
15
|
+
this.input = input
|
16
|
+
this.disableParentForm()
|
17
|
+
this.input.dispatchEvent(new CustomEvent("hashcash:mint", {bubbles: true}))
|
18
|
+
|
19
|
+
this.mint((stamp) => {
|
20
|
+
this.input.value = stamp.toString()
|
21
|
+
console.log("Hashcash stamp: ", stamp)
|
22
|
+
console.log("Hashcash input: ", this.input.value)
|
23
|
+
this.enableParentForm()
|
24
|
+
this.input.dispatchEvent(new CustomEvent("hashcash:minted", {bubbles: true, detail: {stamp: stamp}}))
|
25
|
+
})
|
26
|
+
}
|
27
|
+
|
28
|
+
static setup() {
|
29
|
+
if (document.readyState != "loading") {
|
30
|
+
var input = document.querySelector("input#hashcash")
|
31
|
+
input && new Hashcash(input)
|
32
|
+
} else
|
33
|
+
document.addEventListener("DOMContentLoaded", Hashcash.setup )
|
34
|
+
}
|
35
|
+
|
36
|
+
setSubmitText(submit, text) {
|
37
|
+
if (!text) {
|
38
|
+
return
|
39
|
+
}
|
40
|
+
if (submit.tagName == "BUTTON") {
|
41
|
+
!submit.originalValue && (submit.originalValue = submit.innerHTML)
|
42
|
+
submit.innerHTML = text
|
43
|
+
} else {
|
44
|
+
!submit.originalValue && (submit.originalValue = submit.value)
|
45
|
+
submit.value = text
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
49
|
+
disableParentForm() {
|
50
|
+
this.input.form.querySelectorAll("[type=submit]").forEach((submit) => {
|
51
|
+
this.setSubmitText(submit, this.options["waiting_message"])
|
52
|
+
submit.disabled = true
|
53
|
+
})
|
54
|
+
}
|
55
|
+
|
56
|
+
enableParentForm() {
|
57
|
+
this.input.form.querySelectorAll("[type=submit]").forEach((submit) => {
|
58
|
+
this.setSubmitText(submit, submit.originalValue)
|
59
|
+
submit.disabled = null
|
60
|
+
})
|
61
|
+
}
|
62
|
+
|
63
|
+
mint(callback) {
|
64
|
+
var options = this.options
|
65
|
+
var resource = this.options.resource
|
66
|
+
// Format date to YYMMDD
|
67
|
+
var date = new Date
|
68
|
+
var year = date.getFullYear().toString()
|
69
|
+
year = year.slice(year.length - 2, year.length)
|
70
|
+
var month = (date.getMonth() + 1).toString().padStart(2, "0")
|
71
|
+
var day = date.getDate().toString().padStart(2, "0")
|
72
|
+
|
73
|
+
var stamp = new Stamp(
|
74
|
+
options.version || Hashcash.default.version,
|
75
|
+
options.bits || Hashcash.default.bits,
|
76
|
+
options.date || year + month + day,
|
77
|
+
resource,
|
78
|
+
options.extension || Hashcash.default.extension,
|
79
|
+
options.rand || Math.random().toString(36).substr(2, 10),
|
80
|
+
)
|
81
|
+
return stamp.work(callback)
|
82
|
+
}
|
83
|
+
}
|
@@ -0,0 +1,143 @@
|
|
1
|
+
/**
|
2
|
+
* Secure Hash Algorithm (SHA1)
|
3
|
+
* http://www.webtoolkit.info/
|
4
|
+
**/
|
5
|
+
export default function SHA1(msg) {
|
6
|
+
var blockstart;
|
7
|
+
var i, j;
|
8
|
+
var W = new Array(80);
|
9
|
+
var H0 = 0x67452301;
|
10
|
+
var H1 = 0xEFCDAB89;
|
11
|
+
var H2 = 0x98BADCFE;
|
12
|
+
var H3 = 0x10325476;
|
13
|
+
var H4 = 0xC3D2E1F0;
|
14
|
+
var A, B, C, D, E;
|
15
|
+
var temp;
|
16
|
+
msg = Utf8Encode(msg);
|
17
|
+
var msg_len = msg.length;
|
18
|
+
var word_array = new Array();
|
19
|
+
for (i = 0; i < msg_len - 3; i += 4) {
|
20
|
+
j = msg.charCodeAt(i) << 24 | msg.charCodeAt(i + 1) << 16 |
|
21
|
+
msg.charCodeAt(i + 2) << 8 | msg.charCodeAt(i + 3);
|
22
|
+
word_array.push(j);
|
23
|
+
}
|
24
|
+
switch (msg_len % 4) {
|
25
|
+
case 0:
|
26
|
+
i = 0x080000000;
|
27
|
+
break;
|
28
|
+
case 1:
|
29
|
+
i = msg.charCodeAt(msg_len - 1) << 24 | 0x0800000;
|
30
|
+
break;
|
31
|
+
case 2:
|
32
|
+
i = msg.charCodeAt(msg_len - 2) << 24 | msg.charCodeAt(msg_len - 1) << 16 | 0x08000;
|
33
|
+
break;
|
34
|
+
case 3:
|
35
|
+
i = msg.charCodeAt(msg_len - 3) << 24 | msg.charCodeAt(msg_len - 2) << 16 | msg.charCodeAt(msg_len - 1) << 8 | 0x80;
|
36
|
+
break;
|
37
|
+
}
|
38
|
+
word_array.push(i);
|
39
|
+
while ((word_array.length % 16) != 14) word_array.push(0);
|
40
|
+
word_array.push(msg_len >>> 29);
|
41
|
+
word_array.push((msg_len << 3) & 0x0ffffffff);
|
42
|
+
for (blockstart = 0; blockstart < word_array.length; blockstart += 16) {
|
43
|
+
for (i = 0; i < 16; i++) W[i] = word_array[blockstart + i];
|
44
|
+
for (i = 16; i <= 79; i++) W[i] = rotate_left(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
|
45
|
+
A = H0;
|
46
|
+
B = H1;
|
47
|
+
C = H2;
|
48
|
+
D = H3;
|
49
|
+
E = H4;
|
50
|
+
for (i = 0; i <= 19; i++) {
|
51
|
+
temp = (rotate_left(A, 5) + ((B & C) | (~B & D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;
|
52
|
+
E = D;
|
53
|
+
D = C;
|
54
|
+
C = rotate_left(B, 30);
|
55
|
+
B = A;
|
56
|
+
A = temp;
|
57
|
+
}
|
58
|
+
for (i = 20; i <= 39; i++) {
|
59
|
+
temp = (rotate_left(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;
|
60
|
+
E = D;
|
61
|
+
D = C;
|
62
|
+
C = rotate_left(B, 30);
|
63
|
+
B = A;
|
64
|
+
A = temp;
|
65
|
+
}
|
66
|
+
for (i = 40; i <= 59; i++) {
|
67
|
+
temp = (rotate_left(A, 5) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;
|
68
|
+
E = D;
|
69
|
+
D = C;
|
70
|
+
C = rotate_left(B, 30);
|
71
|
+
B = A;
|
72
|
+
A = temp;
|
73
|
+
}
|
74
|
+
for (i = 60; i <= 79; i++) {
|
75
|
+
temp = (rotate_left(A, 5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;
|
76
|
+
E = D;
|
77
|
+
D = C;
|
78
|
+
C = rotate_left(B, 30);
|
79
|
+
B = A;
|
80
|
+
A = temp;
|
81
|
+
}
|
82
|
+
H0 = (H0 + A) & 0x0ffffffff;
|
83
|
+
H1 = (H1 + B) & 0x0ffffffff;
|
84
|
+
H2 = (H2 + C) & 0x0ffffffff;
|
85
|
+
H3 = (H3 + D) & 0x0ffffffff;
|
86
|
+
H4 = (H4 + E) & 0x0ffffffff;
|
87
|
+
}
|
88
|
+
return [H0, H1, H2, H3, H4]
|
89
|
+
}
|
90
|
+
|
91
|
+
export function hexSha1(msg) {
|
92
|
+
var array = SHA1(msg)
|
93
|
+
return cvt_hex(array[0]) + cvt_hex(array[1]) + cvt_hex(array[2]) + cvt_hex(array3) + cvt_hex(array[4])
|
94
|
+
}
|
95
|
+
|
96
|
+
function rotate_left(n, s) {
|
97
|
+
var t4 = (n << s) | (n >>> (32 - s));
|
98
|
+
return t4;
|
99
|
+
};
|
100
|
+
|
101
|
+
function lsb_hex(val) {
|
102
|
+
var str = '';
|
103
|
+
var i;
|
104
|
+
var vh;
|
105
|
+
var vl;
|
106
|
+
for (i = 0; i <= 6; i += 2) {
|
107
|
+
vh = (val >>> (i * 4 + 4)) & 0x0f;
|
108
|
+
vl = (val >>> (i * 4)) & 0x0f;
|
109
|
+
str += vh.toString(16) + vl.toString(16);
|
110
|
+
}
|
111
|
+
return str;
|
112
|
+
};
|
113
|
+
|
114
|
+
function cvt_hex(val) {
|
115
|
+
var str = '';
|
116
|
+
var i;
|
117
|
+
var v;
|
118
|
+
for (i = 7; i >= 0; i--) {
|
119
|
+
v = (val >>> (i * 4)) & 0x0f;
|
120
|
+
str += v.toString(16);
|
121
|
+
}
|
122
|
+
return str;
|
123
|
+
};
|
124
|
+
|
125
|
+
function Utf8Encode(string) {
|
126
|
+
string = string.replace(/\r\n/g, '\n');
|
127
|
+
var utftext = '';
|
128
|
+
for (var n = 0; n < string.length; n++) {
|
129
|
+
var c = string.charCodeAt(n);
|
130
|
+
if (c < 128) {
|
131
|
+
utftext += String.fromCharCode(c);
|
132
|
+
} else if ((c > 127) && (c < 2048)) {
|
133
|
+
utftext += String.fromCharCode((c >> 6) | 192);
|
134
|
+
utftext += String.fromCharCode((c & 63) | 128);
|
135
|
+
} else {
|
136
|
+
utftext += String.fromCharCode((c >> 12) | 224);
|
137
|
+
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
|
138
|
+
utftext += String.fromCharCode((c & 63) | 128);
|
139
|
+
}
|
140
|
+
}
|
141
|
+
return utftext;
|
142
|
+
};
|
143
|
+
|
@@ -0,0 +1,50 @@
|
|
1
|
+
import SHA1 from "src/vendor/sha1"
|
2
|
+
|
3
|
+
export default class Stamp {
|
4
|
+
constructor(version, bits, date, resource, extension, rand, counter = 0) {
|
5
|
+
this.version = version
|
6
|
+
this.bits = bits
|
7
|
+
this.date = date
|
8
|
+
this.resource = resource
|
9
|
+
this.extension = extension
|
10
|
+
this.rand = rand
|
11
|
+
this.counter = counter
|
12
|
+
}
|
13
|
+
|
14
|
+
static parse(string) {
|
15
|
+
const args = string.split(":")
|
16
|
+
return new Stamp(args[0], args[1], args[2], args[3], args[4], args[5], args[6])
|
17
|
+
}
|
18
|
+
|
19
|
+
toString() {
|
20
|
+
return [this.version, this.bits, this.date, this.resource, this.extension, this.rand, this.counter].join(":")
|
21
|
+
}
|
22
|
+
|
23
|
+
// Trigger the given callback when the problem is solved.
|
24
|
+
// In order to not freeze the page, setTimeout is called every 100ms to let some CPU to other tasks.
|
25
|
+
work(callback) {
|
26
|
+
this.startClock()
|
27
|
+
const timer = performance.now()
|
28
|
+
while (!this.check())
|
29
|
+
if (this.counter++ && performance.now() - timer > 100)
|
30
|
+
return setTimeout(this.work.bind(this), 0, callback)
|
31
|
+
this.stopClock()
|
32
|
+
callback(this)
|
33
|
+
}
|
34
|
+
|
35
|
+
check() {
|
36
|
+
const array = SHA1(this.toString())
|
37
|
+
return array[0] >> (160-this.bits) == 0
|
38
|
+
}
|
39
|
+
|
40
|
+
startClock() {
|
41
|
+
this.startedAt || (this.startedAt = performance.now())
|
42
|
+
}
|
43
|
+
|
44
|
+
stopClock() {
|
45
|
+
this.endedAt || (this.endedAt = performance.now())
|
46
|
+
const duration = this.endedAt - this.startedAt
|
47
|
+
const speed = Math.round(this.counter * 1000 / duration)
|
48
|
+
console.debug("Hashcash " + this.toString() + " minted in " + duration + "ms (" + speed + " per seconds)")
|
49
|
+
}
|
50
|
+
}
|
@@ -1,17 +1,7 @@
|
|
1
1
|
.awesome_autosave-notice {
|
2
|
-
|
3
|
-
position: fixed;
|
4
|
-
top: 90%;
|
5
|
-
left: 50%;
|
6
|
-
transform: translate(-50%, -50%);
|
7
|
-
padding: 1em 2em;
|
8
|
-
border-radius: 4px;
|
9
|
-
border: 1px solid var(--success);
|
10
|
-
font-weight: 600;
|
11
|
-
color: white;
|
12
|
-
z-index: 1000;
|
2
|
+
@apply bg-success/90 fixed top-[2%] right-[2%] p-4 rounded border border-success font-semibold text-white z-[1000];
|
13
3
|
|
14
4
|
&.error {
|
15
|
-
|
5
|
+
@apply bg-alert/90;
|
16
6
|
}
|
17
7
|
}
|
@@ -31,7 +31,7 @@ module Decidim
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def time_ago
|
34
|
-
I18n.t("decidim.decidim_awesome.admin.
|
34
|
+
I18n.t("decidim.decidim_awesome.admin.private_data.private_data.time_ago", time: time_ago_in_words(last_date)) if last_date
|
35
35
|
end
|
36
36
|
|
37
37
|
def destroyable?
|
@@ -63,7 +63,7 @@ module Decidim
|
|
63
63
|
return if destroyable?
|
64
64
|
return if last_date
|
65
65
|
|
66
|
-
I18n.t("decidim.decidim_awesome.admin.
|
66
|
+
I18n.t("decidim.decidim_awesome.admin.private_data.private_data.done")
|
67
67
|
end
|
68
68
|
end
|
69
69
|
end
|
@@ -10,12 +10,12 @@
|
|
10
10
|
</span>
|
11
11
|
<div class="dropdown-pane" id="export-dropdown" data-dropdown data-auto-focus="true" data-close-on-click="true">
|
12
12
|
<ul class="vertical menu add-components">
|
13
|
-
<% %w
|
13
|
+
<% %w(CSV JSON Excel).each do |format| %>
|
14
14
|
<li class="exports--format--<%= format.downcase %> exports--registrations">
|
15
15
|
<%= link_to t("decidim.decidim_awesome.admin.admin_accountability.exports.export_as", export_format:
|
16
|
-
format.upcase), export_admin_accountability_path(export_params.merge(format:
|
17
|
-
|
18
|
-
|
16
|
+
format.upcase), export_admin_accountability_path(export_params.merge(format:)),
|
17
|
+
method: :post,
|
18
|
+
class: "focus-visible:outline-none" %>
|
19
19
|
</li>
|
20
20
|
<% end %>
|
21
21
|
</ul>
|
@@ -1,3 +1,3 @@
|
|
1
1
|
<%= cell("decidim/announcement",
|
2
|
-
|
3
|
-
|
2
|
+
local_assigns[:message].presence || t("decidim.decidim_awesome.admin.admin_authorizations.#{i18n_key}", name: workflow&.fullname, user: user.name),
|
3
|
+
callout_class: klass) %>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<%= cell("decidim/announcement", {
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
title: t("decidim.decidim_awesome.admin.admin_authorizations.conflict"),
|
3
|
+
body: t("decidim.decidim_awesome.admin.admin_authorizations.conflict_help_html", user: link_to(conflict.user.name, decidim_admin.officializations_path(q: { name_or_nickname_or_email_cont: conflict.user.email })))
|
4
|
+
},
|
5
|
+
callout_class: "alert") %>
|
@@ -1,10 +1,11 @@
|
|
1
1
|
<div class="form-defaults">
|
2
|
+
<%= callout if defined?(callout) %>
|
2
3
|
<%= decidim_form_for(handler,
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
builder: Decidim::AuthorizationFormBuilder,
|
5
|
+
as: "authorization_handler",
|
6
|
+
url: decidim_admin_decidim_awesome.admin_authorization_path(id: user.id, handler: params[:handler]),
|
7
|
+
method: :patch,
|
8
|
+
remote: true) do |form| %>
|
8
9
|
<% if lookup_context.exists?(handler.to_partial_path, [], true) %>
|
9
10
|
<%= render partial: handler.to_partial_path, locals: { handler:, form: } %>
|
10
11
|
<% else %>
|
@@ -46,9 +46,9 @@
|
|
46
46
|
<strong><%= t ".head_tags" %></strong>
|
47
47
|
<ul class="vertical menu">
|
48
48
|
<% {
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
CSS: "//head/link[@rel='stylesheet'][contains(@href,'decidim_decidim_awesome')]",
|
50
|
+
JavaScript: "//script[contains(@src,'decidim_decidim_awesome')]"
|
51
|
+
}.each do |part, xpath| %>
|
52
52
|
<li>
|
53
53
|
<%= part %>
|
54
54
|
<% if head.xpath(xpath).count.positive? %>
|
@@ -66,9 +66,9 @@
|
|
66
66
|
<strong><%= t ".admin_head_tags" %></strong>
|
67
67
|
<ul class="vertical menu">
|
68
68
|
<% {
|
69
|
-
|
70
|
-
|
71
|
-
|
69
|
+
CSS: "//head/link[@rel='stylesheet'][contains(@href,'decidim_admin_decidim_awesome')]",
|
70
|
+
JavaScript: "//script[contains(@src,'decidim_admin_decidim_awesome')]"
|
71
|
+
}.each do |part, xpath| %>
|
72
72
|
<li>
|
73
73
|
<%= part %>
|
74
74
|
<% if admin_head.xpath(xpath).count.positive? %>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<%= label_tag var do %>
|
2
2
|
<%= t("config.#{var}",
|
3
|
-
|
4
|
-
|
3
|
+
scope: "activemodel.attributes",
|
4
|
+
id: "<span class='awesome-auto-edit' data-var='#{var}' data-scope='#{scope}' data-key='#{key}'>#{key}</span>").html_safe %>
|
5
5
|
|
6
6
|
<%= icon_link_to "pencil-line", "#", t("edit_label", scope: "decidim.decidim_awesome.admin.config.form"), class: "awesome-auto-edit", data: { "scope" => "#{scope}" } %>
|
7
7
|
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<span class="label warning"><%= t ".always" %></span>
|
6
6
|
<% end %>
|
7
7
|
|
8
|
-
<ul class="constraints-list<%= " inactive" if constraints&.
|
8
|
+
<ul class="constraints-list<%= " inactive" if constraints&.find { |c| c.settings["participatory_space_manifest"] == "none" } %>">
|
9
9
|
<% constraints&.each do |constraint| %>
|
10
10
|
<li>
|
11
11
|
<% constraint.settings.reverse_each do |k, val| %>
|
@@ -13,7 +13,7 @@
|
|
13
13
|
<% end %>
|
14
14
|
|
15
15
|
<div class="inline-flex items-center gap-1 ml-10">
|
16
|
-
<button id="<%= "edit-#{key}-#{constraint.id}" %>" type="button" name="button" class="edit-condition button button__xs button__transparent-secondary" data-dialog-open="<%= "edit-modal-#{key}" %>" data-constraints-url="<%= constraint_path(id: constraint.id, key:
|
16
|
+
<button id="<%= "edit-#{key}-#{constraint.id}" %>" type="button" name="button" class="edit-condition button button__xs button__transparent-secondary" data-dialog-open="<%= "edit-modal-#{key}" %>" data-constraints-url="<%= constraint_path(id: constraint.id, key:) %>">
|
17
17
|
<%= t ".edit" %>
|
18
18
|
</button>
|
19
19
|
|
@@ -23,7 +23,7 @@
|
|
23
23
|
<% end %>
|
24
24
|
</ul>
|
25
25
|
|
26
|
-
<button id="<%= "new-#{key}" %>" type="button" name="button" class="add-condition button button__xs button__secondary" data-dialog-open="<%= "new-modal-#{key}" %>" data-constraints-url="<%= new_constraint_path(key:
|
26
|
+
<button id="<%= "new-#{key}" %>" type="button" name="button" class="add-condition button button__xs button__secondary" data-dialog-open="<%= "new-modal-#{key}" %>" data-constraints-url="<%= new_constraint_path(key:) %>">
|
27
27
|
<%= icon "add-box-line" %>
|
28
28
|
<%= t ".add_condition" %>
|
29
29
|
</button>
|
@@ -4,10 +4,11 @@
|
|
4
4
|
|
5
5
|
<% form.object.scoped_admins&.each do |key, value| %>
|
6
6
|
<div class="card p-4 scoped_admins_container js-box-container" data-key="<%= key %>">
|
7
|
-
<%= render(partial: "decidim/decidim_awesome/admin/config/autoedit_box_label", locals: { var: "scoped_admins", key
|
8
|
-
<p class="form-error is-visible" id="scoped-admin-error-<%=
|
7
|
+
<%= render(partial: "decidim/decidim_awesome/admin/config/autoedit_box_label", locals: { var: "scoped_admins", key:, scope: "scoped_admin_#{key}", delete_path: decidim_admin_decidim_awesome.scoped_admin_path(key:) }) %>
|
8
|
+
<p class="form-error is-visible" id="scoped-admin-error-<%= key %>"><%= errors[key.to_sym].join("<br>") if errors %></p>
|
9
9
|
|
10
|
-
<%=
|
10
|
+
<%= hidden_field_tag("config[scoped_admins][#{key}][]") %>
|
11
|
+
<%= select_tag "config[scoped_admins][#{key}]", options_for_select(users_for(value), value), { include_blank: false, class: "multiusers-select", multiple: true, data: { url: decidim_admin_decidim_awesome.users_path } } %>
|
11
12
|
|
12
13
|
<%= render(partial: "decidim/decidim_awesome/admin/config/constraints", locals: { key: "scoped_admin_#{key}", constraints: constraints_for("scoped_admin_#{key}") }) %>
|
13
14
|
</div>
|
@@ -8,7 +8,7 @@
|
|
8
8
|
<div class="row column card p-4">
|
9
9
|
<%= form.check_box key, help_text: t("help.#{key}", scope: "decidim.decidim_awesome.admin.config.form") %>
|
10
10
|
|
11
|
-
<%= render(partial: "decidim/decidim_awesome/admin/config/constraints", locals: { key
|
11
|
+
<%= render(partial: "decidim/decidim_awesome/admin/config/constraints", locals: { key:, constraints: constraints_for(key) }) %>
|
12
12
|
</div>
|
13
13
|
<% end %>
|
14
14
|
</div>
|
@@ -8,9 +8,9 @@
|
|
8
8
|
<div>
|
9
9
|
<p class="help-text text-alert"><%= t("help.proposal_private_custom_fields", scope: "decidim.decidim_awesome.admin.config.form") %></p>
|
10
10
|
<p class="help-text"><%= t("help.proposal_private_custom_fields_translations",
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
scope: "decidim.decidim_awesome.admin.config.form",
|
12
|
+
warning: content_tag(:i, t("decidim.decidim_awesome.proposal_private_custom_fields_disclosure")),
|
13
|
+
key: content_tag("code", "decidim.decidim_awesome.proposal_private_custom_fields_disclosure")
|
14
14
|
).html_safe %></p>
|
15
15
|
</div>
|
16
16
|
<% else %>
|
@@ -22,7 +22,7 @@
|
|
22
22
|
<% end %>
|
23
23
|
<% form.object.send(config_var)&.each do |key, value| %>
|
24
24
|
<div class="card p-4 proposal_custom_fields_container<%= " private" if priv %> js-box-container" data-key="<%= key %>" data-var="<%= config_var %>">
|
25
|
-
<%= render("decidim/decidim_awesome/admin/config/autoedit_box_label", var: config_var, key
|
25
|
+
<%= render("decidim/decidim_awesome/admin/config/autoedit_box_label", var: config_var, key:, scope: "#{field}_#{key}", delete_path: decidim_admin_decidim_awesome.proposal_custom_field_path(key:, private: priv)) %>
|
26
26
|
<p class="form-error is-visible"><%= errors[key.to_sym].join("<br>") if errors %></p>
|
27
27
|
|
28
28
|
<%= hidden_field_tag key, value, name: "config[#{config_var}][#{key}]" %>
|
@@ -11,7 +11,7 @@
|
|
11
11
|
<%= t("help.scoped_admin_styles_variables", scope: "decidim.decidim_awesome.admin.config.form") %>
|
12
12
|
</p>
|
13
13
|
<p class="colors">
|
14
|
-
<%
|
14
|
+
<% %w(primary secondary tertiary success warning alert).each do |color| %>
|
15
15
|
<span class="color-box <%= color %>" style="background-color: <%= current_organization.colors[color] %>"></span>
|
16
16
|
<code>var(--<%= color %>)</code>
|
17
17
|
<% end %>
|
@@ -23,7 +23,7 @@
|
|
23
23
|
<%= t("help.scoped_styles_variables", scope: "decidim.decidim_awesome.admin.config.form") %>
|
24
24
|
</p>
|
25
25
|
<p class="colors">
|
26
|
-
<%
|
26
|
+
<% %w(primary secondary tertiary success warning alert).each do |color| %>
|
27
27
|
<span class="color-box <%= color %>" style="background-color: <%= current_organization.colors[color] %>"></span>
|
28
28
|
<code>var(--<%= color %>)</code>
|
29
29
|
<% end %>
|
@@ -32,7 +32,7 @@
|
|
32
32
|
<% end %>
|
33
33
|
<% form.object.send(config_var)&.each do |key, value| %>
|
34
34
|
<div class="card p-4 scoped_styles_container<%= " private" if admin_styles %> js-box-container" data-key="<%= key %>" data-var="<%= config_var %>">
|
35
|
-
<%= render("decidim/decidim_awesome/admin/config/autoedit_box_label", var: config_var, key
|
35
|
+
<%= render("decidim/decidim_awesome/admin/config/autoedit_box_label", var: config_var, key:, scope: "#{style}_#{key}", delete_path: decidim_admin_decidim_awesome.scoped_style_path(key:, admin_panel: admin_styles)) %>
|
36
36
|
<p class="form-error is-visible" id="custom-style-error-<%= key %>"><%= errors[key.to_sym].join("<br>") if errors %></p>
|
37
37
|
<%= text_area_tag key, value, name: "config[#{config_var}][#{key}]", rows: 5 %>
|
38
38
|
<%= render("decidim/decidim_awesome/admin/config/constraints", key: "#{style}_#{key}", constraints: constraints_for("#{style}_#{key}")) %>
|