| jquery.table.coffee - warvox - VoIP based wardialing tool, forked from rapid7/w… | |
| git clone git://jay.scot/warvox | |
| Log | |
| Files | |
| Refs | |
| README | |
| --- | |
| jquery.table.coffee (8790B) | |
| --- | |
| 1 # table plugin | |
| 2 # | |
| 3 # Adds sorting and other dynamic functions to tables. | |
| 4 jQuery ($) -> | |
| 5 $.table = | |
| 6 defaults: | |
| 7 searchable: true | |
| 8 searchInputHint: 'Search' | |
| 9 sortableClass: 'sortable' | |
| 10 setFilteringDelay: false | |
| 11 datatableOptions: | |
| 12 "bStateSave": true | |
| 13 "oLanguage": | |
| 14 "sSearch": "" | |
| 15 "sProcessing": "Loading..." | |
| 16 "fnDrawCallback": -> | |
| 17 $.table.controlBar.buttons.enable() | |
| 18 "sDom": '<"control-bar"f><"list-table-header clearfix"l>t<"list-… | |
| 19 "sPaginationType": "full_numbers" | |
| 20 "fnInitComplete": (oSettings, json) -> | |
| 21 # if old search term saved, display it | |
| 22 searchTerm = getParameterByName 'search' | |
| 23 # FIX ME | |
| 24 $searchBox = $('#search', $(this).parents().eq(3)) | |
| 25 | |
| 26 if searchTerm | |
| 27 $searchBox.val searchTerm | |
| 28 $searchBox.focus() | |
| 29 | |
| 30 # insert the cancel button to the left of the search box | |
| 31 $searchBox.before('<a class="cancel-search" href="#"></a>') | |
| 32 $a = $('.cancel-search') | |
| 33 table = this | |
| 34 searchTerm = $searchBox.val() | |
| 35 searchBox = $searchBox.eq(0) | |
| 36 $a.hide() if (!searchTerm || searchTerm.length < 1) | |
| 37 | |
| 38 $a.click (e) -> # called when red X is clicked | |
| 39 $(this).hide() | |
| 40 table.fnFilter '' | |
| 41 $(searchBox).blur() # blur to trigger filler text | |
| 42 e.preventDefault() # Other control code can be fo… | |
| 43 # bind to fnFilter() calls | |
| 44 # do this by saving fnFilter to fnFilterOld & overriding | |
| 45 table['fnFilterOld'] = table.fnFilter | |
| 46 table.fnFilter = (str) -> | |
| 47 $a = jQuery('.cancel-search') | |
| 48 if str && str.length > 0 | |
| 49 $a.show() | |
| 50 else | |
| 51 $a.hide() | |
| 52 table.fnFilterOld(str) | |
| 53 | |
| 54 window.setTimeout ( => | |
| 55 this.fnFilter(searchTerm) | |
| 56 ), 0 | |
| 57 | |
| 58 $('.button a.search').click() if searchTerm | |
| 59 | |
| 60 analysisTabOptions: | |
| 61 "aLengthMenu": [[10, 50, 100, 250, 500, -1], [10, 50, 100, … | |
| 62 "iDisplayLength": 10 | |
| 63 "bProcessing": true | |
| 64 "bServerSide": true | |
| 65 "bSortMulti": false | |
| 66 | |
| 67 checkboxes: | |
| 68 bind: -> | |
| 69 # TODO: This and any other 'table.list' selectors that appear in… | |
| 70 # code will trigger all sortable tables visible on the page. | |
| 71 $("table.list thead tr th input[type='checkbox']").live 'click',… | |
| 72 $checkboxes = $("input[type='checkbox']", "table.list tbody tr… | |
| 73 if $(this).attr 'checked' | |
| 74 $checkboxes.attr 'checked', true | |
| 75 else | |
| 76 $checkboxes.attr 'checked', false | |
| 77 | |
| 78 controlBar: | |
| 79 buttons: | |
| 80 # Disables/enables buttons based on number of checkboxes selecte… | |
| 81 # and the class name. | |
| 82 enable: -> | |
| 83 numChecked = $("tbody tr td input[type='checkbox']", "table.li… | |
| 84 disable = ($button) -> | |
| 85 $button.addClass 'disabled' | |
| 86 $button.children('input').attr 'disabled', 'disabled' | |
| 87 enable = ($button) -> | |
| 88 $button.removeClass 'disabled' | |
| 89 $button.children('input').removeAttr 'disabled' | |
| 90 | |
| 91 switch numChecked | |
| 92 when 0 | |
| 93 disable $('.btn.single', '.control-bar') | |
| 94 disable $('.btn.multiple','.control-bar') | |
| 95 disable $('.btn.any', '.control-bar') | |
| 96 when 1 | |
| 97 enable $('.btn.single', '.control-bar') | |
| 98 disable $('.btn.multiple','.control-bar') | |
| 99 enable $('.btn.any', '.control-bar') | |
| 100 else | |
| 101 disable $('.btn.single', '.control-bar') | |
| 102 enable $('.btn.multiple','.control-bar') | |
| 103 enable $('.btn.any', '.control-bar') | |
| 104 | |
| 105 show: | |
| 106 bind: -> | |
| 107 # Show button | |
| 108 $showButton = $('span.button a.show', '.control-bar') | |
| 109 if $showButton.length | |
| 110 $showButton.click (e) -> | |
| 111 unless $showButton.parent('span').hasClass 'disabled' | |
| 112 $("table.list tbody tr td input[type='checkbox']").fil… | |
| 113 hostHref = $("table.list tbody tr td input[type='check… | |
| 114 .filter(':checked') | |
| 115 .parents('tr') | |
| 116 .children('td:nth-child(2)') | |
| 117 .children('a') | |
| 118 .attr('href') | |
| 119 window.location = hostHref | |
| 120 e.preventDefault() | |
| 121 | |
| 122 edit: | |
| 123 bind: -> | |
| 124 # Settings button | |
| 125 $editButton = $('span.button a.edit', '.control-bar') | |
| 126 if $editButton.length | |
| 127 $editButton.click (e) -> | |
| 128 unless $editButton.parent('span').hasClass 'disabled' | |
| 129 $("table.list tbody tr td input[type='checkbox']").fil… | |
| 130 hostHref = $("table.list tbody tr td input[type='check… | |
| 131 .filter(':checked') | |
| 132 .parents('tr') | |
| 133 .children('td:nth-child(2)') | |
| 134 .children('span.settings-url') | |
| 135 .html() | |
| 136 window.location = hostHref | |
| 137 e.preventDefault() | |
| 138 | |
| 139 bind: (options) -> | |
| 140 # Move the buttons into the control bar. | |
| 141 $('.control-bar').prepend($('.control-bar-items').html()) | |
| 142 $('.control-bar-items').remove() | |
| 143 | |
| 144 # Move the control bar to a new location, if specified. | |
| 145 if !!options.controlBarLocation | |
| 146 $('.control-bar').appendTo(options.controlBarLocation) | |
| 147 | |
| 148 this.enable() | |
| 149 this.show.bind() | |
| 150 this.edit.bind() | |
| 151 | |
| 152 bind: (options) -> | |
| 153 this.buttons.bind(options) | |
| 154 # Redraw the buttons with each checkbox click. | |
| 155 $("input[type='checkbox']", "table.list").live 'click', (e) => | |
| 156 this.buttons.enable() | |
| 157 | |
| 158 searchField: | |
| 159 # Add an input hint to the search field. | |
| 160 addInputHint: (options, $table) -> | |
| 161 if options.searchable | |
| 162 # if the searchbar is in a control bar, expand selector scope … | |
| 163 searchScope = $table.parents().eq(3) if !!options.controlBarLo… | |
| 164 searchScope ||= $table.parents().eq(2) # otherwise limit scop… | |
| 165 $searchInput = $('.dataTables_filter input', searchScope) | |
| 166 # We'll need this id set for the checkbox functions. | |
| 167 $searchInput.attr 'id', 'search' | |
| 168 $searchInput.attr 'placeholder', options.searchInputHint | |
| 169 # $searchInput.inputHint() | |
| 170 | |
| 171 bind: ($table, options) -> | |
| 172 $tbody = $table.children('tbody') | |
| 173 dataTable = null | |
| 174 # Turn the table into a DataTable. | |
| 175 if $table.hasClass options.sortableClass | |
| 176 # Don't mess with the search input if there's no control bar. | |
| 177 unless $('.control-bar-items').length | |
| 178 options.datatableOptions["sDom"] = '<"list-table-header clearf… | |
| 179 | |
| 180 datatableOptions = options.datatableOptions | |
| 181 # If we're loading under the Analysis tab, then load the standard | |
| 182 # Analysis tab options. | |
| 183 if options.analysisTab | |
| 184 $.extend(datatableOptions, options.analysisTabOptions) | |
| 185 options.setFilteringDelay = true | |
| 186 options.controlBarLocation = $('.analysis-control-bar') | |
| 187 | |
| 188 dataTable = $table.dataTable(datatableOptions) | |
| 189 $table.data('dataTableObject', dataTable) | |
| 190 dataTable.fnSetFilteringDelay(500) if options.setFilteringDelay | |
| 191 | |
| 192 # If we're loading under the Analysis tab, then load the standar… | |
| 193 if options.analysisTab | |
| 194 # Gray out the table during loads. | |
| 195 $("##{$table.attr('id')}_processing").watch 'visibility', -> | |
| 196 if $(this).css('visibility') == 'visible' | |
| 197 $table.css opacity: 0.6 | |
| 198 else | |
| 199 $table.css opacity: 1 | |
| 200 | |
| 201 # Checking a host_ids checkbox should also check the invisible… | |
| 202 $table.find('tbody tr td input[type=checkbox].hosts').live 'ch… | |
| 203 $(this).siblings('input[type=checkbox]').attr('checked', $(t… | |
| 204 | |
| 205 this.checkboxes.bind() | |
| 206 this.controlBar.bind(options) | |
| 207 # Add an input hint to the search field. | |
| 208 this.searchField.addInputHint(options, $table) | |
| 209 # Keep width at 100%. | |
| 210 $table.css('width', '100%') | |
| 211 | |
| 212 $.fn.table = (options) -> | |
| 213 settings = $.extend true, {}, $.table.defaults, options | |
| 214 $table = $(this) | |
| 215 return this.each -> $.table.bind($table, settings) |