card-mod-script 0.14.2 → 0.15.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/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
|