zuora_connect_ui 0.2.0 → 0.2.2
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/README.md +2 -0
- data/app/assets/javascripts/zuora_connect_ui.js +6 -0
- data/app/assets/javascripts/zuora_connect_ui/datatable.js +327 -2
- data/app/assets/javascripts/zuora_connect_ui/iframe.js +41 -0
- data/app/assets/javascripts/zuora_connect_ui/input.js +3 -2
- data/app/assets/stylesheets/_zuora_connect_ui.scss +3 -0
- data/app/assets/stylesheets/zuora_connect_ui/base.scss +5 -1
- data/app/assets/stylesheets/zuora_connect_ui/breadcrumb_bar.scss +15 -17
- data/app/assets/stylesheets/zuora_connect_ui/buttons.scss +94 -61
- data/app/assets/stylesheets/zuora_connect_ui/datatables.scss +71 -7
- data/app/assets/stylesheets/zuora_connect_ui/datepicker.scss +1 -0
- data/app/assets/stylesheets/zuora_connect_ui/input.scss +42 -28
- data/app/assets/stylesheets/zuora_connect_ui/modal.scss +41 -2
- data/app/assets/stylesheets/zuora_connect_ui/tabs.scss +4 -3
- data/app/helpers/datatable_helper.rb +0 -15
- data/app/views/partials/_filters.html.erb +33 -34
- data/app/views/partials/_table.html.erb +206 -364
- data/lib/zuora_connect_ui/version.rb +1 -1
- data/vendor/assets/contextMenu/css/jquery.contextMenu.min.css.map +1 -0
- data/vendor/assets/contextMenu/css/jquery.contextMenu.min.scss +16 -0
- data/vendor/assets/contextMenu/fonts/context-menu-icons.eot +0 -0
- data/vendor/assets/contextMenu/fonts/context-menu-icons.ttf +0 -0
- data/vendor/assets/contextMenu/fonts/context-menu-icons.woff +0 -0
- data/vendor/assets/contextMenu/fonts/context-menu-icons.woff2 +0 -0
- data/vendor/assets/contextMenu/js/jquery.contextMenu.min.js +18 -0
- data/vendor/assets/contextMenu/js/jquery.contextMenu.min.js.map.js +1 -0
- data/vendor/assets/contextMenu/js/jquery.ui.position.min.js +6 -0
- data/vendor/assets/idb-keyval/js/idb-keyval-iife.js +100 -0
- metadata +13 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7072ec4a018f4ee41485af010f04f3de1b2736fc
         | 
| 4 | 
            +
              data.tar.gz: 9ef0c90e574c2691fd639b90d0e454cfc0b970c6
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: efb0d89fc811ca6d8fff8c4a4ae61d1c706da049b4d1eac1029fa399a49a16b8a95d5c679fca9443b9b12c322f06657e41bcc68522782694464fe2c156b8396c
         | 
| 7 | 
            +
              data.tar.gz: bc881df4198be5042ef5444e7064fc7ba16239952759c60d0166fd4fb30d013012cbcdcec4d75abf1af3ad95bd5e6c331d88568f4c67507ed5513692395fc4bd
         | 
    
        data/README.md
    CHANGED
    
    | @@ -193,6 +193,8 @@ Single Select | |
| 193 193 |  | 
| 194 194 | 
             
            Multiple Select
         | 
| 195 195 |  | 
| 196 | 
            +
            **Multiple Select will not work with `include_blank: true`**
         | 
| 197 | 
            +
             | 
| 196 198 | 
             
            ```erb
         | 
| 197 199 | 
             
            <%= f.collection_select(:page_ids, Page.all, :id, :name, { prompt: false }, { multiple: true }) %>
         | 
| 198 200 | 
             
            <%= f.label :page_ids, class: zuo_floating_label_class(@chapter.page_ids)%>
         | 
| @@ -28,8 +28,14 @@ | |
| 28 28 | 
             
            //= require dataTables/extras/dataTables.colReorder
         | 
| 29 29 | 
             
            //= require dataTables/extras/dataTables.select
         | 
| 30 30 | 
             
            //
         | 
| 31 | 
            +
            // contextMenu
         | 
| 32 | 
            +
            //= require js/jquery.contextMenu.min.js
         | 
| 33 | 
            +
            //
         | 
| 34 | 
            +
            // IndexedDB Promise Wrapper
         | 
| 35 | 
            +
            //= require js/idb-keyval-iife
         | 
| 31 36 | 
             
            //
         | 
| 32 37 | 
             
            //= require zuora_connect_ui/app
         | 
| 33 38 | 
             
            //= require zuora_connect_ui/datatable
         | 
| 34 39 | 
             
            //= require zuora_connect_ui/input
         | 
| 40 | 
            +
            //= require zuora_connect_ui/iframe
         | 
| 35 41 | 
             
            //
         | 
| @@ -1,4 +1,329 @@ | |
| 1 1 | 
             
            // Datatables in tabs that aren't initially shown need columns resized on show
         | 
| 2 | 
            -
            $('a[data-toggle="tab"]').on( | 
| 3 | 
            -
             | 
| 2 | 
            +
            $('a[data-toggle="tab"]').on("shown.bs.tab", function(e) {
         | 
| 3 | 
            +
              $(this.getAttribute("href"))
         | 
| 4 | 
            +
                .find("table.dataTable")
         | 
| 5 | 
            +
                .each(function() {
         | 
| 6 | 
            +
                  $(this)
         | 
| 7 | 
            +
                    .dataTable()
         | 
| 8 | 
            +
                    .fnAdjustColumnSizing();
         | 
| 9 | 
            +
                });
         | 
| 4 10 | 
             
            });
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            const zStorage = (function() {
         | 
| 13 | 
            +
              const stores = {};
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              return {
         | 
| 16 | 
            +
                set(key, value, table) {
         | 
| 17 | 
            +
                  if (!stores.hasOwnProperty(table)) {
         | 
| 18 | 
            +
                    stores[table] = new idbKeyval.Store(APP_NAME, table + "_table");
         | 
| 19 | 
            +
                  }
         | 
| 20 | 
            +
                  return idbKeyval.set(key, value, stores[table]);
         | 
| 21 | 
            +
                },
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                get(key, table) {
         | 
| 24 | 
            +
                  if (!stores.hasOwnProperty(table)) {
         | 
| 25 | 
            +
                    stores[table] = new idbKeyval.Store(APP_NAME, table + "_table");
         | 
| 26 | 
            +
                  }
         | 
| 27 | 
            +
                  return idbKeyval.get(key, stores[table]);
         | 
| 28 | 
            +
                }
         | 
| 29 | 
            +
              };
         | 
| 30 | 
            +
            })();
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            const DEBUG = true;
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            function getTableParams(tableName, settings, callback) {
         | 
| 35 | 
            +
              const [cacheFilters, paramFilters] = settings.filters.reduce(
         | 
| 36 | 
            +
                ([c, p], cur) => (cur.cache ? [[cur, ...c], p] : [c, [cur, ...p]]),
         | 
| 37 | 
            +
                [[], []]
         | 
| 38 | 
            +
              );
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              Promise.all(
         | 
| 41 | 
            +
                [
         | 
| 42 | 
            +
                  zStorage.get("view", tableName),
         | 
| 43 | 
            +
                  zStorage.get("size", tableName),
         | 
| 44 | 
            +
                  zStorage.get("sort", tableName),
         | 
| 45 | 
            +
                  zStorage.get("fields", tableName)
         | 
| 46 | 
            +
                ].concat(cacheFilters.map(f => zStorage.get(f.name + "_filter", tableName)))
         | 
| 47 | 
            +
              ).then(v => {
         | 
| 48 | 
            +
                const [view, size, sort, fields, ...savedFilters] = v;
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                cacheFilters.forEach((f, i) => setupFilter(tableName, f, savedFilters[i]));
         | 
| 51 | 
            +
                paramFilters.forEach(f => setupFilter(tableName, f, undefined));
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                const visibleColumns = (fields || []).reduce(
         | 
| 54 | 
            +
                  (acc, cur) => (cur.vis ? acc.concat(cur.col) : acc),
         | 
| 55 | 
            +
                  []
         | 
| 56 | 
            +
                );
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                const columns =
         | 
| 59 | 
            +
                  fields === undefined
         | 
| 60 | 
            +
                    ? settings.columns
         | 
| 61 | 
            +
                    : settings.columns
         | 
| 62 | 
            +
                        .map(c => {
         | 
| 63 | 
            +
                          const index = fields.findIndex(f => f.col === c.data);
         | 
| 64 | 
            +
                          return {
         | 
| 65 | 
            +
                            ...c,
         | 
| 66 | 
            +
                            visible: visibleColumns.includes(c.data),
         | 
| 67 | 
            +
                            sortIndex: index === -1 ? 9999 : index
         | 
| 68 | 
            +
                          };
         | 
| 69 | 
            +
                        })
         | 
| 70 | 
            +
                        .sort((a, b) => a.sortIndex - b.sortIndex);
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                callback(
         | 
| 73 | 
            +
                  columns,
         | 
| 74 | 
            +
                  view || settings.view,
         | 
| 75 | 
            +
                  size || settings.size,
         | 
| 76 | 
            +
                  (sort || settings.sort).map(([col, dir]) => {
         | 
| 77 | 
            +
                    const newCol = settings.columns.findIndex(c => c.data === col);
         | 
| 78 | 
            +
                    return [newCol > -1 ? newCol : 1, dir];
         | 
| 79 | 
            +
                  })
         | 
| 80 | 
            +
                );
         | 
| 81 | 
            +
              });
         | 
| 82 | 
            +
            }
         | 
| 83 | 
            +
             | 
| 84 | 
            +
            function setupFilter(tableName, filter, cached) {
         | 
| 85 | 
            +
              switch (filter.type) {
         | 
| 86 | 
            +
                case "checkbox":
         | 
| 87 | 
            +
                  return (cached === undefined ? filter.defaults : cached).forEach(v =>
         | 
| 88 | 
            +
                    $(`#${tableName}_content input[value="${v}"]`).prop("checked", true)
         | 
| 89 | 
            +
                  );
         | 
| 90 | 
            +
                case "select":
         | 
| 91 | 
            +
                case "group-select":
         | 
| 92 | 
            +
                  return $(`#${tableName}_content select[name="${filter.name}"]`)
         | 
| 93 | 
            +
                    .val(cached === undefined ? filter.defaults : cached)
         | 
| 94 | 
            +
                    .trigger("change");
         | 
| 95 | 
            +
                // Is boolean used by any apps?
         | 
| 96 | 
            +
                case "boolean":
         | 
| 97 | 
            +
                  return $(`#${tableName}_content input[name="${filter.name}"]`).prop(
         | 
| 98 | 
            +
                    "checked",
         | 
| 99 | 
            +
                    cached === undefined ? filter.defaults : cached
         | 
| 100 | 
            +
                  );
         | 
| 101 | 
            +
              }
         | 
| 102 | 
            +
            }
         | 
| 103 | 
            +
             | 
| 104 | 
            +
            function initTable(api, tableName, settings, columns, tableFilters) {
         | 
| 105 | 
            +
              initViewMode(api, tableName, settings.view);
         | 
| 106 | 
            +
              initTableSize(api, tableName, settings.size);
         | 
| 107 | 
            +
              initSortEvent(api, tableName);
         | 
| 108 | 
            +
              initSearch(api, tableName);
         | 
| 109 | 
            +
              initTableSelection(api, tableName);
         | 
| 110 | 
            +
              initColumnEvents(api, tableName, columns);
         | 
| 111 | 
            +
              initTableFilters(api, tableName, tableFilters);
         | 
| 112 | 
            +
             | 
| 113 | 
            +
              $(`#${tableName}_content .table_refresh`).on("click", function(e) {
         | 
| 114 | 
            +
                if (
         | 
| 115 | 
            +
                  $(`#${tableName}_content`).is(":visible") &&
         | 
| 116 | 
            +
                  !$(this).hasClass("zc-spin")
         | 
| 117 | 
            +
                ) {
         | 
| 118 | 
            +
                  api.draw(false);
         | 
| 119 | 
            +
                }
         | 
| 120 | 
            +
              });
         | 
| 121 | 
            +
            }
         | 
| 122 | 
            +
             | 
| 123 | 
            +
            function initViewMode(api, tableName, mode) {
         | 
| 124 | 
            +
              $(`#${tableName}_view_${mode}`).addClass("active");
         | 
| 125 | 
            +
             | 
| 126 | 
            +
              const viewModeSelectors = `#${tableName}_view_table, #${tableName}_view_grid`;
         | 
| 127 | 
            +
              $(viewModeSelectors).on("click", function(e) {
         | 
| 128 | 
            +
                if ($(this).hasClass("active")) return;
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                $(viewModeSelectors).toggleClass("active");
         | 
| 131 | 
            +
                zStorage.set("view", e.currentTarget.id.split("_")[2], tableName);
         | 
| 132 | 
            +
                api
         | 
| 133 | 
            +
                  .draw(false)
         | 
| 134 | 
            +
                  .rows()
         | 
| 135 | 
            +
                  .deselect();
         | 
| 136 | 
            +
              });
         | 
| 137 | 
            +
            }
         | 
| 138 | 
            +
             | 
| 139 | 
            +
            function getTableViewMode(tableName, fallback) {
         | 
| 140 | 
            +
              if ($(`#${tableName}_view_table`).hasClass("active")) return "table";
         | 
| 141 | 
            +
              else if ($(`#${tableName}_view_grid`).hasClass("active")) return "grid";
         | 
| 142 | 
            +
              else return fallback;
         | 
| 143 | 
            +
            }
         | 
| 144 | 
            +
             | 
| 145 | 
            +
            function initTableSize(api, tableName, size) {
         | 
| 146 | 
            +
              $("<select>", { id: "table_size", name: "table_size" }) // TODO: Not sure if this needs to be named
         | 
| 147 | 
            +
                .appendTo(`#${tableName}_select_container`)
         | 
| 148 | 
            +
                .append([10, 25, 50, 100].map(v => `<option value="${v}">${v}</option>`))
         | 
| 149 | 
            +
                .val(size)
         | 
| 150 | 
            +
                .select2({
         | 
| 151 | 
            +
                  minimumResultsForSearch: Infinity,
         | 
| 152 | 
            +
                  dropdownAutoWidth: true,
         | 
| 153 | 
            +
                  width: "100%"
         | 
| 154 | 
            +
                })
         | 
| 155 | 
            +
                .on("change", function(e) {
         | 
| 156 | 
            +
                  api.page.len(+$(this).val()).draw(false);
         | 
| 157 | 
            +
                  zStorage.set("size", +$(this).val(), tableName);
         | 
| 158 | 
            +
                });
         | 
| 159 | 
            +
            }
         | 
| 160 | 
            +
             | 
| 161 | 
            +
            function initSortEvent(api, tableName) {
         | 
| 162 | 
            +
              api.on("order.dt", function(e) {
         | 
| 163 | 
            +
                zStorage.set(
         | 
| 164 | 
            +
                  "sort",
         | 
| 165 | 
            +
                  api.order().map(([col, dir]) => [api.column(col).dataSrc(), dir]),
         | 
| 166 | 
            +
                  tableName
         | 
| 167 | 
            +
                );
         | 
| 168 | 
            +
              });
         | 
| 169 | 
            +
            }
         | 
| 170 | 
            +
             | 
| 171 | 
            +
            function initSearch(api, tableName) {
         | 
| 172 | 
            +
              $(`#${tableName}_search_btn`).on("click", () => {
         | 
| 173 | 
            +
                $(`#${tableName}_search_wrapper`).toggleClass("active");
         | 
| 174 | 
            +
                $(`#${tableName}_search`).focus();
         | 
| 175 | 
            +
              });
         | 
| 176 | 
            +
             | 
| 177 | 
            +
              let timer;
         | 
| 178 | 
            +
              $(`#${tableName}_content input[name="table[search]"]`).keydown(function() {
         | 
| 179 | 
            +
                clearTimeout(timer);
         | 
| 180 | 
            +
                if ($(this).val()) {
         | 
| 181 | 
            +
                  timer = setTimeout(function() {
         | 
| 182 | 
            +
                    api.draw();
         | 
| 183 | 
            +
                  }, 700);
         | 
| 184 | 
            +
                }
         | 
| 185 | 
            +
              });
         | 
| 186 | 
            +
            }
         | 
| 187 | 
            +
             | 
| 188 | 
            +
            function initTableSelection(api, tableName) {
         | 
| 189 | 
            +
              $(`#${tableName}_select_all`).on("click", function(e) {
         | 
| 190 | 
            +
                $(this)
         | 
| 191 | 
            +
                  .find("span")
         | 
| 192 | 
            +
                  .hasClass("z-icon-addition")
         | 
| 193 | 
            +
                  ? api.rows().select()
         | 
| 194 | 
            +
                  : api.rows().deselect();
         | 
| 195 | 
            +
              });
         | 
| 196 | 
            +
             | 
| 197 | 
            +
              api.on("select.dt deselect.dt", function(e, dt, type, indexes) {
         | 
| 198 | 
            +
                const count = dt.rows({ selected: true }).count();
         | 
| 199 | 
            +
                $(`#${tableName}_group_actions`).toggleClass("hidden", count == 0);
         | 
| 200 | 
            +
                $(`#${tableName}_select_all span`)
         | 
| 201 | 
            +
                  .toggleClass("z-icon-addition", count !== dt.rows().count())
         | 
| 202 | 
            +
                  .toggleClass("z-icon-subtraction", count === dt.rows().count());
         | 
| 203 | 
            +
                if (DEBUG) {
         | 
| 204 | 
            +
                  console.log(e.type === "select" ? "Selected" : "Deselected");
         | 
| 205 | 
            +
                  console.log(dt.rows(indexes).data());
         | 
| 206 | 
            +
                }
         | 
| 207 | 
            +
              });
         | 
| 208 | 
            +
            }
         | 
| 209 | 
            +
             | 
| 210 | 
            +
            function initColumnEvents(api, tableName, columns) {
         | 
| 211 | 
            +
              let dropdownReorder = false;
         | 
| 212 | 
            +
             | 
| 213 | 
            +
              $(`#${tableName}_visibility_menu`)
         | 
| 214 | 
            +
                .html(
         | 
| 215 | 
            +
                  columns.map((c, i) =>
         | 
| 216 | 
            +
                    $("<li>", { "data-key": c.data, class: "checkbox-row" }).append(
         | 
| 217 | 
            +
                      $("<div>", { class: "checkbox checkbox-primary" }).append(
         | 
| 218 | 
            +
                        $("<input>", {
         | 
| 219 | 
            +
                          type: "checkbox",
         | 
| 220 | 
            +
                          name: `${tableName}[table_column_vis][]`,
         | 
| 221 | 
            +
                          checked: !c.hasOwnProperty("visible") || c.visible,
         | 
| 222 | 
            +
                          value: i
         | 
| 223 | 
            +
                        }).on("change", function(e) {
         | 
| 224 | 
            +
                          index = api.colReorder.transpose(+$(this).val(), "toCurrent");
         | 
| 225 | 
            +
                          api.column(index).visible($(this).is(":checked"));
         | 
| 226 | 
            +
                          resize_iframe();
         | 
| 227 | 
            +
                          saveColumns();
         | 
| 228 | 
            +
                        }),
         | 
| 229 | 
            +
                        $("<label>").html(
         | 
| 230 | 
            +
                          (c.class || "").includes("actions") ? "Actions" : c.title
         | 
| 231 | 
            +
                        )
         | 
| 232 | 
            +
                      ),
         | 
| 233 | 
            +
                      $('<span class="icon z-icon-hamburger"></span>')
         | 
| 234 | 
            +
                    )
         | 
| 235 | 
            +
                  )
         | 
| 236 | 
            +
                )
         | 
| 237 | 
            +
                .sortable({ axis: "y" })
         | 
| 238 | 
            +
                .on("sortstop", function(event, ui) {
         | 
| 239 | 
            +
                  if (DEBUG) console.log(`Sort Stop Trigger ${tableName}`);
         | 
| 240 | 
            +
                  dropdownReorder = true;
         | 
| 241 | 
            +
             | 
| 242 | 
            +
                  api.colReorder.order(
         | 
| 243 | 
            +
                    $(`#${tableName}_visibility_menu li input`)
         | 
| 244 | 
            +
                      .get()
         | 
| 245 | 
            +
                      .map(v => api.colReorder.transpose(+$(v).val(), "toCurrent"))
         | 
| 246 | 
            +
                  );
         | 
| 247 | 
            +
                });
         | 
| 248 | 
            +
             | 
| 249 | 
            +
              api.on("column-reorder", function(e, settings, details) {
         | 
| 250 | 
            +
                if (DEBUG) console.log(`Ordering Trigger ${tableName}`, details);
         | 
| 251 | 
            +
                saveColumns();
         | 
| 252 | 
            +
             | 
| 253 | 
            +
                if (dropdownReorder) return (dropdownReorder = false);
         | 
| 254 | 
            +
                if (DEBUG) console.log(`Ordering Trigger Rebuild DropDown ${tableName}`);
         | 
| 255 | 
            +
             | 
| 256 | 
            +
                const orderedItems = api
         | 
| 257 | 
            +
                  .columns()
         | 
| 258 | 
            +
                  .dataSrc()
         | 
| 259 | 
            +
                  .toArray()
         | 
| 260 | 
            +
                  .map(v => $(`#${tableName}_visibility_menu li[data-key="${v}"]`));
         | 
| 261 | 
            +
                $(`#${tableName}_visibility_menu`).html(orderedItems);
         | 
| 262 | 
            +
              });
         | 
| 263 | 
            +
             | 
| 264 | 
            +
              function saveColumns() {
         | 
| 265 | 
            +
                if (DEBUG) console.log(`Save Fields ${tableName}`);
         | 
| 266 | 
            +
             | 
| 267 | 
            +
                const fields = api
         | 
| 268 | 
            +
                  .columns()
         | 
| 269 | 
            +
                  .indexes()
         | 
| 270 | 
            +
                  .toArray()
         | 
| 271 | 
            +
                  .map(i => ({
         | 
| 272 | 
            +
                    col: api.column(i).dataSrc(),
         | 
| 273 | 
            +
                    vis: api.column(i).visible()
         | 
| 274 | 
            +
                  }));
         | 
| 275 | 
            +
             | 
| 276 | 
            +
                zStorage.set("fields", fields, tableName);
         | 
| 277 | 
            +
              }
         | 
| 278 | 
            +
            }
         | 
| 279 | 
            +
             | 
| 280 | 
            +
            function initTableFilters(api, tableName, tableFilters) {
         | 
| 281 | 
            +
              tableFilters.forEach(filter => {
         | 
| 282 | 
            +
                const cache = filter.hasOwnProperty("cache") && filter.cache;
         | 
| 283 | 
            +
             | 
| 284 | 
            +
                switch (filter.type) {
         | 
| 285 | 
            +
                  case "checkbox":
         | 
| 286 | 
            +
                    return checkboxFilter(api, cache, filter);
         | 
| 287 | 
            +
                  case "select":
         | 
| 288 | 
            +
                  case "group-select":
         | 
| 289 | 
            +
                    return selectFilter(api, cache, filter);
         | 
| 290 | 
            +
                  case "boolean":
         | 
| 291 | 
            +
                    return booleanFilter(api, cache, filter);
         | 
| 292 | 
            +
                }
         | 
| 293 | 
            +
              });
         | 
| 294 | 
            +
             | 
| 295 | 
            +
              function checkboxFilter(api, cache, filter) {
         | 
| 296 | 
            +
                const checkboxDebounceDraw = debounce(() => {
         | 
| 297 | 
            +
                  const f = $(
         | 
| 298 | 
            +
                    `#${tableName}_content input[name="${filter.name}[]"]:checked`
         | 
| 299 | 
            +
                  )
         | 
| 300 | 
            +
                    .map((_, el) => $(el).val())
         | 
| 301 | 
            +
                    .get();
         | 
| 302 | 
            +
                  if (cache) zStorage.set(filter.name + "_filter", f, tableName);
         | 
| 303 | 
            +
                  api.draw();
         | 
| 304 | 
            +
                }, 750);
         | 
| 305 | 
            +
             | 
| 306 | 
            +
                $(`#${tableName}_content input[name="${filter.name}[]"]`).on(
         | 
| 307 | 
            +
                  "click",
         | 
| 308 | 
            +
                  checkboxDebounceDraw
         | 
| 309 | 
            +
                );
         | 
| 310 | 
            +
              }
         | 
| 311 | 
            +
             | 
| 312 | 
            +
              function selectFilter(api, cache, filter) {
         | 
| 313 | 
            +
                $(`#${tableName}_content select[name="${filter.name}"]`).change(function() {
         | 
| 314 | 
            +
                  const f = $(this).val();
         | 
| 315 | 
            +
                  if (cache) zStorage.set(filter.name + "_filter", f, tableName);
         | 
| 316 | 
            +
                  api.draw();
         | 
| 317 | 
            +
                });
         | 
| 318 | 
            +
              }
         | 
| 319 | 
            +
             | 
| 320 | 
            +
              function booleanFilter(api, cache, filter) {
         | 
| 321 | 
            +
                $(`#${tableName}_content input[name="${filter.name}"]`).change(function() {
         | 
| 322 | 
            +
                  const f = $(
         | 
| 323 | 
            +
                    `#${tableName}_content input[name="${filter.name}"]:checked`
         | 
| 324 | 
            +
                  ).val();
         | 
| 325 | 
            +
                  if (cache) zStorage.set(filter.name + "_filter", f, tableName);
         | 
| 326 | 
            +
                  api.draw();
         | 
| 327 | 
            +
                });
         | 
| 328 | 
            +
              }
         | 
| 329 | 
            +
            }
         | 
| @@ -0,0 +1,41 @@ | |
| 1 | 
            +
            $(document).on("hidden.bs.modal shown.bs.modal shown.bs.tab", resize_iframe);
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            let height_prev;
         | 
| 4 | 
            +
            function resize_iframe() {
         | 
| 5 | 
            +
              var height = 0;
         | 
| 6 | 
            +
              if ($(".modal-dialog").height() + 100 > $("body").height()) {
         | 
| 7 | 
            +
                height = $(".modal-dialog").height() + 100;
         | 
| 8 | 
            +
              } else if (
         | 
| 9 | 
            +
                $(".dropdown-menu.table_visiblity.ui-sortable:visible").height() + 150 >
         | 
| 10 | 
            +
                $("body").height()
         | 
| 11 | 
            +
              ) {
         | 
| 12 | 
            +
                height =
         | 
| 13 | 
            +
                  $(".dropdown-menu.table_visiblity.ui-sortable:visible").height() + 150;
         | 
| 14 | 
            +
              } else if ($("#canvas").is(":visible")) {
         | 
| 15 | 
            +
                var canvas_height =
         | 
| 16 | 
            +
                  window.innerHeight -
         | 
| 17 | 
            +
                  ($("#breadcrumbs").height() + $(".green-header").height() + 20);
         | 
| 18 | 
            +
                $("#canvas").css("height", "500px");
         | 
| 19 | 
            +
                height = $("body").height();
         | 
| 20 | 
            +
              } else if ($("#canvas-swimlane").is(":visible")) {
         | 
| 21 | 
            +
                $("#canvas-swimlane").css("height", "300px");
         | 
| 22 | 
            +
                height = $("body").height() + $("#task_data").height() - 160;
         | 
| 23 | 
            +
              } else {
         | 
| 24 | 
            +
                height = $("body").height() + 25;
         | 
| 25 | 
            +
              }
         | 
| 26 | 
            +
              if (height_prev != height) {
         | 
| 27 | 
            +
                window.parent.postMessage({ func: "resizeIframe", height: height }, "*");
         | 
| 28 | 
            +
              }
         | 
| 29 | 
            +
              height_prev = height;
         | 
| 30 | 
            +
            }
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            // Function to be called from iframe
         | 
| 33 | 
            +
            function receiveMessage(event) {
         | 
| 34 | 
            +
              if (event.origin !== window.location.origin) return;
         | 
| 35 | 
            +
              var data = event.data;
         | 
| 36 | 
            +
              if (typeof window[data.func] == "function") {
         | 
| 37 | 
            +
                window[data.func].call(null, data.type, data.url);
         | 
| 38 | 
            +
              } else {
         | 
| 39 | 
            +
                console.log("Function not found: " + data.func);
         | 
| 40 | 
            +
              }
         | 
| 41 | 
            +
            }
         | 
| @@ -1,9 +1,10 @@ | |
| 1 1 | 
             
            // 'Polyfill' for :placeholder-shown, since it's not standard yet
         | 
| 2 2 |  | 
| 3 3 | 
             
            $(document).on('focus focusout', '.zuo-textbox', function(e) {
         | 
| 4 | 
            -
             | 
| 4 | 
            +
              $("label[for='" + $(this).attr('id') + "']").toggleClass('floating', $(this).val() !== "");
         | 
| 5 5 | 
             
            });
         | 
| 6 6 |  | 
| 7 7 | 
             
            $(document).on('change.select2', 'select', function(e) {
         | 
| 8 | 
            -
             | 
| 8 | 
            +
              console.log($(this).val());
         | 
| 9 | 
            +
              $("label[for='" + $(this).attr('id') + "']").toggleClass('floating', !['', null].includes($(this).val()));
         | 
| 9 10 | 
             
            });
         | 
| @@ -95,7 +95,7 @@ select { | |
| 95 95 |  | 
| 96 96 | 
             
            .dropdown-menu {
         | 
| 97 97 | 
             
              min-width: 164px;
         | 
| 98 | 
            -
              padding:  | 
| 98 | 
            +
              padding: .5rem 0;
         | 
| 99 99 | 
             
              box-shadow: 0 1px 8px -1px $neutral-shadow;
         | 
| 100 100 | 
             
              border-radius: 0;
         | 
| 101 101 | 
             
              font-size: 0.875rem;
         | 
| @@ -115,6 +115,10 @@ select { | |
| 115 115 | 
             
              // }
         | 
| 116 116 |  | 
| 117 117 | 
             
              > li {
         | 
| 118 | 
            +
                &.checkbox-row {
         | 
| 119 | 
            +
                  padding: 0px 15px;
         | 
| 120 | 
            +
                  margin: 10px 0px;
         | 
| 121 | 
            +
                }
         | 
| 118 122 | 
             
                &.divider {
         | 
| 119 123 | 
             
                  margin: 0.5rem;
         | 
| 120 124 | 
             
                }
         |