card-mod-script 0.14.2 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data/real.yml +50 -0
- data/lib/ansi2html.rb +69 -0
- data/lib/card/mod/script.rb +1 -0
- data/set/abstract/00_script.rb +4 -4
- data/set/abstract/02_coffee_script.rb +9 -1
- data/set/all/head_javascript.rb +13 -22
- data/set/right/script.rb +1 -1
- data/set/type/coffee_script.rb +6 -0
- data/set/type/java_script.rb +6 -0
- data/set/type/local_script_folder_group.rb +2 -0
- data/set/type/local_script_manifest_group.rb +2 -0
- data/set/type_plus_right/mod/script.rb +1 -5
- data/set/type_plus_right/set/script.rb +3 -1
- metadata +13 -119
- data/assets/script/decko/autosave.js.coffee +0 -30
- data/assets/script/decko/bridge.js.coffee +0 -31
- data/assets/script/decko/card_menu.js.coffee +0 -26
- data/assets/script/decko/components.js.coffee +0 -49
- data/assets/script/decko/decko.js.coffee +0 -82
- data/assets/script/decko/doubleclick.js.coffee +0 -30
- data/assets/script/decko/editor.js.coffee +0 -57
- data/assets/script/decko/filter.js.coffee +0 -183
- data/assets/script/decko/filter_items.js.coffee +0 -128
- data/assets/script/decko/filter_links.js.coffee +0 -81
- data/assets/script/decko/follow.js.coffee +0 -22
- data/assets/script/decko/layout.js.coffee +0 -76
- data/assets/script/decko/link_editor.js.coffee +0 -61
- data/assets/script/decko/mod.js.coffee +0 -79
- data/assets/script/decko/modal.js.coffee +0 -113
- data/assets/script/decko/name_editor.js.coffee +0 -40
- data/assets/script/decko/navbox.js.coffee +0 -74
- data/assets/script/decko/nest_editor.js.coffee +0 -166
- data/assets/script/decko/nest_editor_name.js.coffee +0 -102
- data/assets/script/decko/nest_editor_options.js.coffee +0 -93
- data/assets/script/decko/nest_editor_rules.js.coffee +0 -3
- data/assets/script/decko/overlay.js.coffee +0 -54
- data/assets/script/decko/pointer_config.js.coffee +0 -79
- data/assets/script/decko/pointer_list_editor.js.coffee +0 -67
- data/assets/script/decko/recaptcha.js.coffee +0 -19
- data/assets/script/decko/selectable_filtered_content.js.coffee +0 -12
- data/assets/script/decko/slot.js.coffee +0 -182
- data/assets/script/decko/slot_ready.js.coffee +0 -12
- data/assets/script/decko/slotter.js.coffee +0 -268
- data/assets/script/decko/type_editor.js.coffee +0 -21
- data/assets/script/decko/upload.js.coffee +0 -64
- data/assets/script/jquery-ui.min.js +0 -13
- data/assets/script/jquery.autosize.js +0 -274
- data/assets/script/manifest.yml +0 -57
- data/db/migrate_core_cards/20200804112348_add_mod_script_assets_type.rb +0 -30
- data/vendor/jquery_file_upload/LICENSE.txt +0 -20
- data/vendor/jquery_file_upload/README.md +0 -224
- data/vendor/jquery_file_upload/SECURITY.md +0 -227
- data/vendor/jquery_file_upload/VULNERABILITIES.md +0 -118
- data/vendor/jquery_file_upload/cors/postmessage.html +0 -85
- data/vendor/jquery_file_upload/cors/result.html +0 -26
- data/vendor/jquery_file_upload/css/jquery.fileupload-noscript.css +0 -22
- data/vendor/jquery_file_upload/css/jquery.fileupload-ui-noscript.css +0 -17
- data/vendor/jquery_file_upload/css/jquery.fileupload-ui.css +0 -68
- data/vendor/jquery_file_upload/css/jquery.fileupload.css +0 -36
- data/vendor/jquery_file_upload/docker-compose.yml +0 -55
- data/vendor/jquery_file_upload/img/loading.gif +0 -0
- data/vendor/jquery_file_upload/img/progressbar.gif +0 -0
- data/vendor/jquery_file_upload/index.html +0 -357
- data/vendor/jquery_file_upload/js/cors/jquery.postmessage-transport.js +0 -126
- data/vendor/jquery_file_upload/js/cors/jquery.xdr-transport.js +0 -97
- data/vendor/jquery_file_upload/js/demo.js +0 -75
- data/vendor/jquery_file_upload/js/jquery.fileupload-audio.js +0 -101
- data/vendor/jquery_file_upload/js/jquery.fileupload-image.js +0 -347
- data/vendor/jquery_file_upload/js/jquery.fileupload-process.js +0 -170
- data/vendor/jquery_file_upload/js/jquery.fileupload-ui.js +0 -759
- data/vendor/jquery_file_upload/js/jquery.fileupload-validate.js +0 -119
- data/vendor/jquery_file_upload/js/jquery.fileupload-video.js +0 -101
- data/vendor/jquery_file_upload/js/jquery.fileupload.js +0 -1604
- data/vendor/jquery_file_upload/js/jquery.iframe-transport.js +0 -227
- data/vendor/jquery_file_upload/js/vendor/jquery.ui.widget.js +0 -805
- data/vendor/jquery_file_upload/package-lock.json +0 -6853
- data/vendor/jquery_file_upload/package.json +0 -116
- data/vendor/jquery_file_upload/server/gae-python/app.yaml +0 -18
- data/vendor/jquery_file_upload/server/gae-python/main.py +0 -204
- data/vendor/jquery_file_upload/server/gae-python/static/favicon.ico +0 -0
- data/vendor/jquery_file_upload/server/gae-python/static/robots.txt +0 -2
- data/vendor/jquery_file_upload/server/php/Dockerfile +0 -44
- data/vendor/jquery_file_upload/server/php/UploadHandler.php +0 -1480
- data/vendor/jquery_file_upload/server/php/index.php +0 -15
- data/vendor/jquery_file_upload/server/php/php.ini +0 -5
- data/vendor/jquery_file_upload/test/index.html +0 -49
- data/vendor/jquery_file_upload/test/unit.js +0 -989
- data/vendor/jquery_file_upload/test/vendor/chai.js +0 -10854
- data/vendor/jquery_file_upload/test/vendor/mocha.css +0 -325
- data/vendor/jquery_file_upload/test/vendor/mocha.js +0 -18178
- data/vendor/jquery_file_upload/wdio/LICENSE.txt +0 -20
- data/vendor/jquery_file_upload/wdio/assets/black+white-3x2.jpg +0 -0
- data/vendor/jquery_file_upload/wdio/assets/black+white-60x40.gif +0 -0
- data/vendor/jquery_file_upload/wdio/conf/chrome.js +0 -40
- data/vendor/jquery_file_upload/wdio/conf/firefox.js +0 -25
- data/vendor/jquery_file_upload/wdio/hooks/index.js +0 -36
- data/vendor/jquery_file_upload/wdio/test/pages/file-upload.js +0 -79
- data/vendor/jquery_file_upload/wdio/test/specs/01-file-upload.js +0 -25
- data/vendor/jquery_file_upload/wdio/wdio.conf.js +0 -4
- data/vendor/jquery_rails/CHANGELOG.md +0 -359
- data/vendor/jquery_rails/CONTRIBUTING.md +0 -132
- data/vendor/jquery_rails/Gemfile +0 -22
- data/vendor/jquery_rails/MIT-LICENSE +0 -21
- data/vendor/jquery_rails/README.md +0 -75
- data/vendor/jquery_rails/Rakefile +0 -59
- data/vendor/jquery_rails/VERSIONS.md +0 -62
- data/vendor/jquery_rails/jquery-rails.gemspec +0 -26
- data/vendor/jquery_rails/lib/jquery/assert_select.rb +0 -149
- data/vendor/jquery_rails/lib/jquery/rails/engine.rb +0 -6
- data/vendor/jquery_rails/lib/jquery/rails/version.rb +0 -9
- data/vendor/jquery_rails/lib/jquery/rails.rb +0 -8
- data/vendor/jquery_rails/lib/jquery-rails.rb +0 -1
- data/vendor/jquery_rails/test/assert_select_jquery_test.rb +0 -85
- data/vendor/jquery_rails/test/test_helper.rb +0 -6
- data/vendor/jquery_rails/vendor/assets/javascripts/jquery.js +0 -11008
- data/vendor/jquery_rails/vendor/assets/javascripts/jquery.min.js +0 -5
- data/vendor/jquery_rails/vendor/assets/javascripts/jquery.min.map +0 -1
- data/vendor/jquery_rails/vendor/assets/javascripts/jquery2.js +0 -9814
- data/vendor/jquery_rails/vendor/assets/javascripts/jquery2.min.js +0 -4
- data/vendor/jquery_rails/vendor/assets/javascripts/jquery2.min.map +0 -1
- data/vendor/jquery_rails/vendor/assets/javascripts/jquery3.js +0 -10364
- data/vendor/jquery_rails/vendor/assets/javascripts/jquery3.min.js +0 -2
- data/vendor/jquery_rails/vendor/assets/javascripts/jquery3.min.map +0 -1
- data/vendor/jquery_rails/vendor/assets/javascripts/jquery_ujs.js +0 -555
@@ -1,49 +0,0 @@
|
|
1
|
-
submitAfterTyping = null
|
2
|
-
|
3
|
-
$(window).ready ->
|
4
|
-
$('body').on 'show.bs.tab', 'a.load[data-toggle="tab"][data-url]', (e) ->
|
5
|
-
tab_id = $(e.target).attr('href')
|
6
|
-
url = $(e.target).data('url')
|
7
|
-
$(e.target).removeClass('load')
|
8
|
-
$.ajax
|
9
|
-
url: url
|
10
|
-
type: 'GET'
|
11
|
-
success: (html) ->
|
12
|
-
$(tab_id).append(html)
|
13
|
-
decko.contentLoaded($(tab_id), $(this))
|
14
|
-
|
15
|
-
$('body').on "input", "._submit-after-typing", (event) ->
|
16
|
-
form = $(event.target).closest('form')
|
17
|
-
form.slot().find(".autosubmit-success-notification").remove()
|
18
|
-
clearTimeout(submitAfterTyping) if submitAfterTyping
|
19
|
-
submitAfterTyping = setTimeout ->
|
20
|
-
$(event.target).closest('form').submit()
|
21
|
-
submitAfterTyping = null
|
22
|
-
, 1000
|
23
|
-
|
24
|
-
$('body').on "keydown", "._submit-after-typing", (event) ->
|
25
|
-
if event.which == 13
|
26
|
-
clearTimeout(submitAfterTyping) if submitAfterTyping
|
27
|
-
submitAfterTyping = null
|
28
|
-
$(event.target).closest('form').submit()
|
29
|
-
false
|
30
|
-
|
31
|
-
$('body').on "change", "._submit-on-change", (event) ->
|
32
|
-
$(event.target).closest('form').submit()
|
33
|
-
false
|
34
|
-
|
35
|
-
$('body').on "change", "._edit-item", (event) ->
|
36
|
-
cb = $(event.target)
|
37
|
-
if cb.is(":checked")
|
38
|
-
cb.attr("name", "add_item")
|
39
|
-
else
|
40
|
-
cb.attr("name", "drop_item")
|
41
|
-
|
42
|
-
$(event.target).closest('form').submit()
|
43
|
-
false
|
44
|
-
|
45
|
-
$("body").on "click", "._popover_link", (event) ->
|
46
|
-
event.preventDefault();
|
47
|
-
|
48
|
-
|
49
|
-
|
@@ -1,82 +0,0 @@
|
|
1
|
-
$.extend decko,
|
2
|
-
# returns absolute path (starting with a slash)
|
3
|
-
# if rawPath is complete url, this returns the complete url
|
4
|
-
# if rawPath is relative (no slash), this adds relative root
|
5
|
-
path: (rawPath) ->
|
6
|
-
if rawPath.match /^\/|:\/\//
|
7
|
-
rawPath
|
8
|
-
else
|
9
|
-
decko.rootUrl + rawPath
|
10
|
-
|
11
|
-
pingName: (name, success)->
|
12
|
-
$.getJSON decko.path(''), format: 'json', view: 'status', 'card[name]': name, success
|
13
|
-
|
14
|
-
jQuery.fn.extend {
|
15
|
-
notify: (message, status) ->
|
16
|
-
slot = @slot(status)
|
17
|
-
notice = slot.find '.card-notice'
|
18
|
-
unless notice[0]
|
19
|
-
notice = $('<div class="card-notice"></div>')
|
20
|
-
form = slot.find('.card-form')
|
21
|
-
if form[0]
|
22
|
-
$(form[0]).append notice
|
23
|
-
else
|
24
|
-
slot.append notice
|
25
|
-
notice.html message
|
26
|
-
notice.show 'blind'
|
27
|
-
|
28
|
-
report: (message) ->
|
29
|
-
report = @slot().find '.card-report'
|
30
|
-
return false unless report[0]
|
31
|
-
report.hide()
|
32
|
-
report.html message
|
33
|
-
report.show 'drop', 750
|
34
|
-
setTimeout (->report.hide 'drop', 750), 3000
|
35
|
-
}
|
36
|
-
|
37
|
-
#~~~~~ ( EVENTS )
|
38
|
-
|
39
|
-
$(window).ready ->
|
40
|
-
$.ajaxSetup cache: false
|
41
|
-
|
42
|
-
$('body').on 'click', '.submitter', ->
|
43
|
-
$(this).closest('form').submit()
|
44
|
-
|
45
|
-
$('body').on 'click', 'button.redirecter', ->
|
46
|
-
window.location = $(this).attr('href')
|
47
|
-
|
48
|
-
$('body').on 'mouseenter', '[hover_content]', ->
|
49
|
-
$(this).attr 'hover_restore', $(this).html()
|
50
|
-
$(this).html $(this).attr( 'hover_content' )
|
51
|
-
$('body').on 'mouseleave', '[hover_content]', ->
|
52
|
-
$(this).html $(this).attr( 'hover_restore' )
|
53
|
-
|
54
|
-
$('body').on 'click', '.render-error-link', (event) ->
|
55
|
-
msg = $(this).closest('.render-error').find '.render-error-message'
|
56
|
-
msg.show()
|
57
|
-
# msg.dialog()
|
58
|
-
event.preventDefault()
|
59
|
-
|
60
|
-
decko.slotReady (slot) ->
|
61
|
-
slot.find('card-view-placeholder').each ->
|
62
|
-
$place = $(this)
|
63
|
-
return if $place.data("loading")
|
64
|
-
|
65
|
-
$place.data "loading", true
|
66
|
-
$.get $place.data("url"), (data, _status) ->
|
67
|
-
$place.replaceWith data
|
68
|
-
|
69
|
-
# important: this prevents jquery-mobile from taking over everything
|
70
|
-
# $( document ).on "mobileinit", ->
|
71
|
-
# $.extend $.mobile , {
|
72
|
-
# #autoInitializePage: false
|
73
|
-
# #ajaxEnabled: false
|
74
|
-
# }
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
warn = (stuff) -> console.log stuff if console?
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
@@ -1,30 +0,0 @@
|
|
1
|
-
doubleClickActiveMap = { off: false, on: true, signed_in: decko.currentUserId }
|
2
|
-
|
3
|
-
doubleClickActive = () ->
|
4
|
-
doubleClickActiveMap[decko.doubleClick]
|
5
|
-
# else alert "illegal configuration: " + decko.doubleClick
|
6
|
-
|
7
|
-
doubleClickApplies = (el) ->
|
8
|
-
return false if ['.nodblclick', '.d0-card-header', '.card-editor'].some (klass) ->
|
9
|
-
el.closest(klass)[0]
|
10
|
-
# double click inactive inside header, editor, or tag with "nodblclick" class
|
11
|
-
!el.slot().find('.card-editor')[0]?
|
12
|
-
|
13
|
-
|
14
|
-
triggerDoubleClickEditingOn = (el)->
|
15
|
-
slot = el.slot()
|
16
|
-
edit_link = decko.slotEditLink(slot)
|
17
|
-
|
18
|
-
if edit_link
|
19
|
-
edit_link.click()
|
20
|
-
else
|
21
|
-
edit_view = decko.slotEditView(slot)
|
22
|
-
url = decko.path("~#{slot.data('cardId')}?view=#{edit_view}")
|
23
|
-
slot.reloadSlot url
|
24
|
-
|
25
|
-
$(window).ready ->
|
26
|
-
if doubleClickActive()
|
27
|
-
$('body').on 'dblclick', 'div', (_event) ->
|
28
|
-
if doubleClickApplies $(this)
|
29
|
-
triggerDoubleClickEditingOn $(this)
|
30
|
-
false # don't propagate up to next slot
|
@@ -1,57 +0,0 @@
|
|
1
|
-
$.extend decko,
|
2
|
-
initializeEditors: (range, map) ->
|
3
|
-
map = decko.editorInitFunctionMap unless map?
|
4
|
-
$.each map, (selector, fn) ->
|
5
|
-
$.each range.find(selector), ->
|
6
|
-
fn.call $(this)
|
7
|
-
|
8
|
-
editorContentFunctionMap: {}
|
9
|
-
|
10
|
-
editorInitFunctionMap:
|
11
|
-
'textarea': -> $(this).autosize()
|
12
|
-
'.file-upload': -> decko.upload_file(this)
|
13
|
-
'.etherpad-textarea': ->
|
14
|
-
$(this).closest('form')
|
15
|
-
.find('.edit-submit-button')
|
16
|
-
.attr('class', 'etherpad-submit-button')
|
17
|
-
|
18
|
-
addEditor: (selector, init, get_content) ->
|
19
|
-
decko.editorContentFunctionMap[selector] = get_content
|
20
|
-
decko.editorInitFunctionMap[selector] = init
|
21
|
-
|
22
|
-
jQuery.fn.extend
|
23
|
-
setContentFieldsFromMap: (map) ->
|
24
|
-
map = decko.editorContentFunctionMap unless map?
|
25
|
-
this_form = $(this)
|
26
|
-
$.each map, (selector, fn) ->
|
27
|
-
this_form.setContentFields(selector, fn)
|
28
|
-
setContentFields: (selector, fn) ->
|
29
|
-
$.each @find(selector), ->
|
30
|
-
$(this).setContentField(fn)
|
31
|
-
contentField: ->
|
32
|
-
@closest('.card-editor').find '.d0-card-content'
|
33
|
-
setContentField: (fn) ->
|
34
|
-
field = @contentField()
|
35
|
-
init_val = field.val() # tinymce-jquery overrides val();
|
36
|
-
# that's why we're not using it.
|
37
|
-
new_val = fn.call this
|
38
|
-
field.val new_val
|
39
|
-
field.change() if init_val != new_val
|
40
|
-
|
41
|
-
$(window).ready ->
|
42
|
-
# decko.initializeEditors $('body > :not(.modal)')
|
43
|
-
setTimeout (-> decko.initializeEditors $('body > :not(.modal)')), 10
|
44
|
-
# dislike the timeout, but without this forms with multiple TinyMCE editors
|
45
|
-
# were failing to load properly
|
46
|
-
# I couldn't reproduce that problem described above -pk
|
47
|
-
|
48
|
-
$('body').on 'submit', '.card-form', ->
|
49
|
-
$(this).setContentFieldsFromMap()
|
50
|
-
$(this).find('.d0-card-content').attr('no-autosave','true')
|
51
|
-
true
|
52
|
-
|
53
|
-
setInterval (-> $('.card-form').setContentFieldsFromMap()), 20000
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
@@ -1,183 +0,0 @@
|
|
1
|
-
# filter object that manages dynamic sorting and filtering
|
2
|
-
|
3
|
-
# el can be any element inside widget
|
4
|
-
decko.filter = (el) ->
|
5
|
-
closest_widget = $(el).closest "._filter-widget"
|
6
|
-
@widget =
|
7
|
-
if closest_widget.length
|
8
|
-
closest_widget
|
9
|
-
else
|
10
|
-
$(el).closest("._filtered-content").find "._filter-widget"
|
11
|
-
|
12
|
-
|
13
|
-
# the filter form includes the below
|
14
|
-
@form = @widget.find "._filter-form"
|
15
|
-
|
16
|
-
# one-click filter links
|
17
|
-
@quickFilter = @widget.find "._quick-filter"
|
18
|
-
|
19
|
-
# include filters field, more-fields dropdown, and reset button
|
20
|
-
@activeContainer = @widget.find "._filter-container"
|
21
|
-
|
22
|
-
# the "More Filters" Dropdown
|
23
|
-
@dropdown = @widget.find "._add-filter-dropdown"
|
24
|
-
@dropdownItems = @widget.find "._filter-category-select"
|
25
|
-
|
26
|
-
@showWithStatus = (status) ->
|
27
|
-
f = this
|
28
|
-
$.each (@dropdownItems), ->
|
29
|
-
item = $(this)
|
30
|
-
if item.data status
|
31
|
-
f.activate item.data("category")
|
32
|
-
|
33
|
-
@reset = () ->
|
34
|
-
@restrict @form.find("._reset-filter").data("reset")
|
35
|
-
|
36
|
-
@clear = () ->
|
37
|
-
@dropdownItems.show()
|
38
|
-
@activeContainer.find(".input-group").remove()
|
39
|
-
|
40
|
-
@activate = (category, value) ->
|
41
|
-
@activateField category, value
|
42
|
-
@hideOption category
|
43
|
-
|
44
|
-
@showOption = (category) ->
|
45
|
-
@dropdown.show()
|
46
|
-
@option(category).show()
|
47
|
-
|
48
|
-
@hideOption = (category) ->
|
49
|
-
@option(category).hide()
|
50
|
-
@dropdown.hide() if @dropdownItems.length <= @activeFields().length
|
51
|
-
|
52
|
-
@activeFields = () ->
|
53
|
-
@activeContainer.find "._filter-input"
|
54
|
-
|
55
|
-
@option = (category) ->
|
56
|
-
@dropdownItems.filter("[data-category='#{category}']")
|
57
|
-
|
58
|
-
@findPrototype = (category) ->
|
59
|
-
@widget.find "._filter-input-field-prototypes ._filter-input-#{category}"
|
60
|
-
|
61
|
-
@activateField = (category, value) ->
|
62
|
-
field = @findPrototype(category).clone()
|
63
|
-
@fieldValue field, value
|
64
|
-
@dropdown.before field
|
65
|
-
@initField field
|
66
|
-
field.find("input, select").first().focus()
|
67
|
-
|
68
|
-
@fieldValue = (field, value) ->
|
69
|
-
if typeof(value) == "object" && !Array.isArray(value)
|
70
|
-
@compoundFieldValue field, value
|
71
|
-
else
|
72
|
-
@simpleFieldValue field, value
|
73
|
-
|
74
|
-
@simpleFieldValue = (field, value) ->
|
75
|
-
input = field.find("input, select")
|
76
|
-
input.val value if (typeof value != 'undefined')
|
77
|
-
|
78
|
-
@compoundFieldValue = (field, vals) ->
|
79
|
-
for key of vals
|
80
|
-
input = field.find "#filter_value_" + key
|
81
|
-
input.val vals[key]
|
82
|
-
|
83
|
-
@removeField = (category)->
|
84
|
-
@activeField(category).remove()
|
85
|
-
@showOption category
|
86
|
-
|
87
|
-
@initField = (field) ->
|
88
|
-
@initSelectField field
|
89
|
-
decko.initAutoCardPlete field.find("input")
|
90
|
-
# only has effect if there is a data-options-card value
|
91
|
-
|
92
|
-
@initSelectField = (field) ->
|
93
|
-
field.find("select").select2
|
94
|
-
containerCssClass: ":all:"
|
95
|
-
width: "auto"
|
96
|
-
dropdownAutoWidth: "true"
|
97
|
-
|
98
|
-
@activeField = (category) ->
|
99
|
-
@activeContainer.find("._filter-input-#{category}")
|
100
|
-
|
101
|
-
@isActive = (category) ->
|
102
|
-
@activeField(category).length
|
103
|
-
|
104
|
-
# clear filter and use restrictions in data
|
105
|
-
@restrict = (data) ->
|
106
|
-
@clear()
|
107
|
-
for key of data
|
108
|
-
@activateField key, data[key]
|
109
|
-
@update()
|
110
|
-
|
111
|
-
@addRestrictions = (hash) ->
|
112
|
-
for category of hash
|
113
|
-
@removeField category
|
114
|
-
@activate category, hash[category]
|
115
|
-
@update()
|
116
|
-
|
117
|
-
@removeRestrictions = (hash) ->
|
118
|
-
for category of hash
|
119
|
-
@removeField category
|
120
|
-
@update()
|
121
|
-
|
122
|
-
# triggers update
|
123
|
-
@setInputVal = (field, value) ->
|
124
|
-
select = field.find "select"
|
125
|
-
if select.length
|
126
|
-
@setSelect2Val select, value
|
127
|
-
else
|
128
|
-
@setTextInputVal field.find("input"), value
|
129
|
-
|
130
|
-
# this triggers change, which updates form
|
131
|
-
# if we just use simple "val", the display doesn't update correctly
|
132
|
-
@setSelect2Val = (select, value) ->
|
133
|
-
value = [value] if select.attr("multiple") && !Array.isArray(value)
|
134
|
-
select.select2 "val", value
|
135
|
-
|
136
|
-
@setTextInputVal = (input, value) ->
|
137
|
-
input.val value
|
138
|
-
@update()
|
139
|
-
|
140
|
-
@updateLastVals = ()->
|
141
|
-
@activeFields().find("input, select").each ()->
|
142
|
-
$(this).data "lastVal", $(this).val()
|
143
|
-
|
144
|
-
@updateUrlBar = () ->
|
145
|
-
return if @widget.closest('._noFilterUrlUpdates')[0]
|
146
|
-
window.history.pushState "filter", "filter", '?' + @form.serialize()
|
147
|
-
|
148
|
-
@update = ()->
|
149
|
-
@updateLastVals()
|
150
|
-
@updateQuickLinks()
|
151
|
-
@form.submit()
|
152
|
-
@updateUrlBar()
|
153
|
-
|
154
|
-
@updateQuickLinks = ()->
|
155
|
-
widget = this
|
156
|
-
links = @quickFilter.find "._filter-link"
|
157
|
-
links.addClass "active"
|
158
|
-
links.each ->
|
159
|
-
link = $(this)
|
160
|
-
opts = link.data "filter"
|
161
|
-
for key of opts
|
162
|
-
widget.deactivateQuickLink link, key, opts[key]
|
163
|
-
|
164
|
-
@deactivateQuickLink = (link, key, value) ->
|
165
|
-
sel = "._filter-input-#{key}"
|
166
|
-
$.map [@form.find("#{sel} input, #{sel} select").val()], (arr) ->
|
167
|
-
arr = [arr].flat()
|
168
|
-
link.removeClass "active" if $.inArray(value, arr) > -1
|
169
|
-
|
170
|
-
@updateIfChanged = ()->
|
171
|
-
@update() if @changedSinceLastVal()
|
172
|
-
|
173
|
-
@updateIfPresent = (category)->
|
174
|
-
val = @activeField(category).find("input, select").val()
|
175
|
-
@update() if val && val.length > 0
|
176
|
-
|
177
|
-
@changedSinceLastVal = () ->
|
178
|
-
changed = false
|
179
|
-
@activeFields().find("input, select").each ()->
|
180
|
-
changed = true if $(this).val() != $(this).data("lastVal")
|
181
|
-
changed
|
182
|
-
|
183
|
-
this
|
@@ -1,128 +0,0 @@
|
|
1
|
-
# FILTERED LIST / ITEMS INTERFACE
|
2
|
-
# (fancy pointer ui)
|
3
|
-
|
4
|
-
$(window).ready ->
|
5
|
-
# add all selected items
|
6
|
-
$("body").on "click", "._filter-items ._add-selected", ->
|
7
|
-
btn = $(this)
|
8
|
-
content = newFilteredListContent btn
|
9
|
-
btn.attr "href", addSelectedButtonUrl(btn, content)
|
10
|
-
|
11
|
-
# select all visible filtered items
|
12
|
-
$("body").on "click", "._select-all", ->
|
13
|
-
filterBox($(this)).find("._unselected input._checkbox-list-checkbox").each ->
|
14
|
-
selectFilteredItem $(this)
|
15
|
-
$(this).prop "checked", false
|
16
|
-
updateAfterSelection $(this)
|
17
|
-
|
18
|
-
# deselect all selected items
|
19
|
-
$("body").on "click", "._deselect-all", ->
|
20
|
-
filterBox($(this)).find("._selected input._checkbox-list-checkbox").each ->
|
21
|
-
$(this).slot().remove()
|
22
|
-
$(this).prop "checked", true
|
23
|
-
updateAfterSelection $(this)
|
24
|
-
|
25
|
-
$("body").on "click", "._filter-items ._unselected input._checkbox-list-checkbox", ->
|
26
|
-
selectFilteredItem $(this)
|
27
|
-
updateAfterSelection $(this)
|
28
|
-
|
29
|
-
$("body").on "click", "._filter-items ._selected input._checkbox-list-checkbox", ->
|
30
|
-
bin = selectedBin $(this)
|
31
|
-
$(this).slot().remove()
|
32
|
-
updateAfterSelection bin
|
33
|
-
|
34
|
-
$('body').on 'click', '._filtered-list-item-delete', ->
|
35
|
-
$(this).closest('li').remove()
|
36
|
-
|
37
|
-
# TODO: make this object oriented!
|
38
|
-
|
39
|
-
newFilteredListContent = (el) ->
|
40
|
-
$.map(prefilteredIds(el).concat(selectedIds el), (id) -> "~" + id).join "\n"
|
41
|
-
|
42
|
-
addSelectedButtonUrl = (btn, content) ->
|
43
|
-
view = btn.slot().data("slot")["view"]
|
44
|
-
card_args = { content: content, type: "Pointer" }
|
45
|
-
query = { assign: true, view: view, card: card_args }
|
46
|
-
path_base = btn.attr("href") + "&" + $.param(query)
|
47
|
-
decko.slotPath path_base, btn.slot()
|
48
|
-
|
49
|
-
updateAfterSelection = (el) ->
|
50
|
-
trackSelectedIds el
|
51
|
-
f = new decko.filter(filterBox(el).find('._filter-widget'))
|
52
|
-
f.update()
|
53
|
-
updateSelectedCount el
|
54
|
-
updateUnselectedCount el
|
55
|
-
|
56
|
-
updateSelectedCount = (el) ->
|
57
|
-
count = selectedBin(el).children().length
|
58
|
-
filterBox(el).find("._selected-items").html count
|
59
|
-
deselectAllLink(el).attr "disabled", count == 0
|
60
|
-
if count > 0
|
61
|
-
addSelectedButton(el).removeClass("disabled")
|
62
|
-
else
|
63
|
-
addSelectedButton(el).addClass("disabled")
|
64
|
-
|
65
|
-
updateSelectedSectionVisibility el, count > 0
|
66
|
-
|
67
|
-
updateSelectedSectionVisibility = (el, items_present) ->
|
68
|
-
box = filterBox el
|
69
|
-
selected_items = box.find "._selected-item-list"
|
70
|
-
help_text = box.find "._filter-help"
|
71
|
-
if items_present
|
72
|
-
selected_items.show()
|
73
|
-
help_text.hide()
|
74
|
-
else
|
75
|
-
selected_items.hide()
|
76
|
-
help_text.show()
|
77
|
-
|
78
|
-
updateUnselectedCount = (el) ->
|
79
|
-
box = filterBox(el)
|
80
|
-
count = box.find("._search-checkbox-list").children().length
|
81
|
-
box.find("._unselected-items").html count
|
82
|
-
box.find("._select-all").attr "disabled", count > 0
|
83
|
-
|
84
|
-
selectFilteredItem = (checkbox) ->
|
85
|
-
checkbox.prop "checked", true
|
86
|
-
selectedBin(checkbox).append checkbox.slot()
|
87
|
-
|
88
|
-
selectedBin = (el) ->
|
89
|
-
filterBox(el).find "._selected-bin"
|
90
|
-
|
91
|
-
filterBox = (el) ->
|
92
|
-
el.closest "._filter-items"
|
93
|
-
|
94
|
-
# this button contains the data about the form that opened the filter-items interface.
|
95
|
-
# the itemSelector
|
96
|
-
addSelectedButton = (el) ->
|
97
|
-
filterBox(el).find("._add-selected")
|
98
|
-
|
99
|
-
deselectAllLink = (el) ->
|
100
|
-
filterBox(el).find("._deselect-all")
|
101
|
-
|
102
|
-
selectedIds = (el) ->
|
103
|
-
selectedData el, "cardId"
|
104
|
-
|
105
|
-
prefilteredIds = (el) ->
|
106
|
-
prefilteredData el, "cardId"
|
107
|
-
|
108
|
-
prefilteredNames = (el) ->
|
109
|
-
prefilteredData el, "cardName"
|
110
|
-
|
111
|
-
prefilteredData = (el, field) ->
|
112
|
-
btn = addSelectedButton el
|
113
|
-
selector = btn.data "itemSelector"
|
114
|
-
arrayFromField btn.slot().find(selector), field
|
115
|
-
|
116
|
-
selectedNames = (el) ->
|
117
|
-
selectedData el, "cardName"
|
118
|
-
|
119
|
-
selectedData = (el, field) ->
|
120
|
-
arrayFromField selectedBin(el).children(), field
|
121
|
-
|
122
|
-
arrayFromField = (rows, field) ->
|
123
|
-
rows.map( -> $(this).data field ).toArray()
|
124
|
-
|
125
|
-
trackSelectedIds = (el) ->
|
126
|
-
ids = prefilteredIds(el).concat selectedIds(el)
|
127
|
-
box = filterBox el
|
128
|
-
box.find("._not-ids").val ids.toString()
|
@@ -1,81 +0,0 @@
|
|
1
|
-
decko.slotReady (slot) ->
|
2
|
-
slot.find("._filter-widget").each ->
|
3
|
-
if slot[0] == $(this).slot()[0]
|
4
|
-
filter = new decko.filter this
|
5
|
-
filter.showWithStatus "active"
|
6
|
-
filter.updateLastVals()
|
7
|
-
filter.updateQuickLinks()
|
8
|
-
|
9
|
-
$(window).ready ->
|
10
|
-
filterFor = (el) ->
|
11
|
-
new decko.filter el
|
12
|
-
|
13
|
-
# sometimes this element shows up as changed and breaks the filter.
|
14
|
-
weirdoSelect2FilterBreaker = (el) ->
|
15
|
-
$(el).hasClass "select2-search__field"
|
16
|
-
|
17
|
-
filterableData = (filterable) ->
|
18
|
-
f = $(filterable)
|
19
|
-
f.data("filter") || f.find("._filterable").data("filter")
|
20
|
-
|
21
|
-
targetFilter = (filterable) ->
|
22
|
-
selector = $(filterable).closest("._filtering").data("filter-selector")
|
23
|
-
filterFor (selector || this)
|
24
|
-
|
25
|
-
# Add Filter
|
26
|
-
$("body").on "click", "._filter-category-select", (e) ->
|
27
|
-
e.preventDefault()
|
28
|
-
# e.stopPropagation()
|
29
|
-
f = filterFor(this)
|
30
|
-
category = $(this).data("category")
|
31
|
-
f.activate category
|
32
|
-
f.updateIfPresent category
|
33
|
-
|
34
|
-
# Update filter results based on filter value changes
|
35
|
-
onchangers =
|
36
|
-
"._filter-input input:not(.simple-text), ._filter-input select, ._filter-sort"
|
37
|
-
$("body").on "change", onchangers, ->
|
38
|
-
return if weirdoSelect2FilterBreaker this
|
39
|
-
filterFor(this).update()
|
40
|
-
|
41
|
-
# update filter result after typing in text box
|
42
|
-
keyupTimeout = null
|
43
|
-
$("body").on "keyup", "._filter-input input.simple-text", ->
|
44
|
-
clearTimeout keyupTimeout
|
45
|
-
filter = filterFor this
|
46
|
-
keyupTimeout = setTimeout ( -> filter.updateIfChanged() ), 333
|
47
|
-
|
48
|
-
# remove filter
|
49
|
-
$("body").on "click", "._delete-filter-input", ->
|
50
|
-
filter = filterFor this
|
51
|
-
filter.removeField $(this).closest("._filter-input").data("category")
|
52
|
-
filter.update()
|
53
|
-
|
54
|
-
# reset all filters
|
55
|
-
$('body').on 'click', '._reset-filter', () ->
|
56
|
-
f = filterFor(this)
|
57
|
-
f.reset()
|
58
|
-
f.update()
|
59
|
-
|
60
|
-
$('body').on 'click', '._filtering ._filterable', (e) ->
|
61
|
-
f = targetFilter this
|
62
|
-
if f.widget.length
|
63
|
-
f.restrict filterableData(this)
|
64
|
-
e.preventDefault()
|
65
|
-
e.stopPropagation()
|
66
|
-
|
67
|
-
$('body').on 'click', '._filter-link', (e) ->
|
68
|
-
f = filterFor this
|
69
|
-
link = $(this)
|
70
|
-
filter_data = link.data "filter"
|
71
|
-
if inactiveQuickfilter link
|
72
|
-
f.removeRestrictions filter_data
|
73
|
-
else
|
74
|
-
f.addRestrictions filter_data
|
75
|
-
|
76
|
-
e.preventDefault()
|
77
|
-
e.stopPropagation()
|
78
|
-
|
79
|
-
inactiveQuickfilter = (link) ->
|
80
|
-
!link.hasClass("active") && link.closest(".quick-filter").length > 0
|
81
|
-
|
@@ -1,22 +0,0 @@
|
|
1
|
-
$(window).ready ->
|
2
|
-
$('body').on 'click', '.btn-item', ->
|
3
|
-
$(this).find('i').html('hourglass_full')
|
4
|
-
|
5
|
-
$('body').on 'mouseenter', '.btn-item-delete', ->
|
6
|
-
$(this).find('i').html('remove')
|
7
|
-
$(this).addClass("btn-danger").removeClass("btn-primary")
|
8
|
-
|
9
|
-
$('body').on 'mouseleave', '.btn-item-delete', ->
|
10
|
-
$(this).find('i').html('check')
|
11
|
-
$(this).addClass("btn-primary").removeClass("btn-danger")
|
12
|
-
|
13
|
-
$('body').on 'click', '.follow-updater', ->
|
14
|
-
$(this).closest('form').find('#card_update_all_users').val 'true'
|
15
|
-
|
16
|
-
$('body').on 'submit', '.edit-view.SELF-Xfollow_default .card-form', ->
|
17
|
-
confirmer = $(this).find '.confirm_update_all-view'
|
18
|
-
if confirmer.is ':hidden'
|
19
|
-
$(this).find('.follow-updater').show()
|
20
|
-
|
21
|
-
confirmer.show 'blind'
|
22
|
-
false
|