brick 1.0.153 → 1.0.154

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fc98614593bc4e4931a445801f4f7764c15e6032daf2765f8d78a47f61b7b3a7
4
- data.tar.gz: 5b3ae1d718df14101c153b335a66578a5b02771714dedd7ebda1022cadebe482
3
+ metadata.gz: 647f34b463dc92515c7eb04331726a808b5ea69dd2bbd6ef99c9d6c769868565
4
+ data.tar.gz: 22ae7fa65845e65a7848f5cfff0fbb52a864b0161783c3f7d28cfb82ba1f88e5
5
5
  SHA512:
6
- metadata.gz: 15852e3d59a95d5ac8614d98a44a70796c5494610447505abe61dcd02010c3701dc9ba48da951e4639e4fa14694cfee4c7455c2a0bd63fc613738886ca908b26
7
- data.tar.gz: bd5cc34b7c004461af1737dbcb4b746889bd7f4da7d5242c3f341793ed4675c33a50bc61108a6f1e24037585298361f8f4f6ac699a25a72c4ec860f1c272e0ba
6
+ metadata.gz: 84034f48010bd159804a19cb865a9cad04ba5efe89bb1e807a7031393d9a64a33d9ca9802f991565f4d73753df087d200099052dde59e4127c6b94370456ec09
7
+ data.tar.gz: 57b3cca20e566ef0d4ac72a45f24b025feea45421417b23cbe7cb683877ac228463f5f348f931a6024b9cdf750dde6aa6c49293e1ae1a596a70a0d8f3c128d6c
data/lib/brick/config.rb CHANGED
@@ -230,6 +230,14 @@ module Brick
230
230
  @mutex.synchronize { @json_columns = cols }
231
231
  end
232
232
 
233
+ def sidescroll
234
+ @mutex.synchronize { @sidescroll ||= {} }
235
+ end
236
+
237
+ def sidescroll=(scroll)
238
+ @mutex.synchronize { @sidescroll = scroll }
239
+ end
240
+
233
241
  def model_descrips
234
242
  @mutex.synchronize { @model_descrips ||= {} }
235
243
  end
@@ -864,6 +864,10 @@ tr th {
864
864
  color: #fff;
865
865
  text-align: left;
866
866
  }
867
+ .col-sticky {
868
+ position: sticky;
869
+ left: 0;
870
+ }
867
871
  #headerTop tr th {
868
872
  position: relative;
869
873
  }
@@ -902,6 +906,10 @@ tr td.highlight {
902
906
  background-color: #B0B0FF;
903
907
  }
904
908
 
909
+ table tr .col-sticky {
910
+ background-color: #28B898;
911
+ }
912
+
905
913
  .show-field {
906
914
  background-color: #004998;
907
915
  }
@@ -916,6 +924,12 @@ table.shadow > tbody > tr {
916
924
  table tbody tr:nth-of-type(even) {
917
925
  background-color: #f3f3f3;
918
926
  }
927
+ table tbody tr:nth-of-type(even) .col-sticky {
928
+ background-color: #fff;
929
+ }
930
+ table tbody tr:nth-of-type(odd) .col-sticky {
931
+ background-color: #f3f3f3;
932
+ }
919
933
 
920
934
  table.shadow > tbody > tr:last-of-type {
921
935
  border-bottom: 2px solid #009879;
@@ -1080,18 +1094,30 @@ function setHeaderSizes() {
1080
1094
  // %%% Grab the TRs from headerTop, clear it out, do this stuff, add them back
1081
1095
  headerTop.innerHTML = \"\"; // %%% Would love to not have to clear it out like this every time! (Currently doing this to support resize events.)
1082
1096
  var isEmpty = headerTop.childElementCount === 0;
1097
+ var numFixed = parseInt(grid.getAttribute(\"x-num-frozen\")) || 0;
1098
+ var fixedColLefts = [0];
1099
+
1083
1100
  // Set up proper sizings of sticky column header
1084
1101
  var node;
1085
1102
  for (var j = 0; j < #{table_name}HtColumns.length; ++j) {
1086
1103
  var row = #{table_name}HtColumns[j];
1087
1104
  var tr = isEmpty ? document.createElement(\"TR\") : headerTop.childNodes[j];
1088
1105
  tr.innerHTML = row.innerHTML.trim();
1106
+ var curLeft = 0.0;
1089
1107
  // Match up widths from the original column headers
1090
1108
  for (var i = 0; i < row.childNodes.length; ++i) {
1091
1109
  node = row.childNodes[i];
1092
1110
  if (node.nodeType === 1) {
1093
1111
  var th = tr.childNodes[i];
1094
1112
  th.style.minWidth = th.style.maxWidth = getComputedStyle(node).width;
1113
+ // Add \"left: __px\" style to the fixed-width column THs
1114
+ if (i <= numFixed) {
1115
+ th.style.position = \"sticky\";
1116
+ th.style.backgroundColor = \"#008061\";
1117
+ th.style.zIndex = \"1\";
1118
+ th.style.left = curLeft + \"px\";
1119
+ fixedColLefts.push(curLeft += node.clientWidth);
1120
+ }
1095
1121
  if (#{pk&.present? ? 'i > 0' : 'true'}) {
1096
1122
  // Add <span> at the end
1097
1123
  var span = document.createElement(\"SPAN\");
@@ -1108,6 +1134,12 @@ function setHeaderSizes() {
1108
1134
  headerCols = tr.childNodes;
1109
1135
  if (isEmpty) headerTop.appendChild(tr);
1110
1136
  }
1137
+ // Add \"left: __px\" style to all fixed-width column TDs
1138
+ [...grid.children[1].children].forEach(function (row) {
1139
+ for (var j = 1; j <= numFixed; ++j) {
1140
+ row.children[j].style.left = fixedColLefts[j] + 'px';
1141
+ }
1142
+ });
1111
1143
  grid.style.marginTop = \"-\" + getComputedStyle(headerTop).height;
1112
1144
  // console.log(\"end\");
1113
1145
  }
@@ -24,8 +24,11 @@ module Brick::Rails::FormTags
24
24
  end
25
25
  end
26
26
 
27
+ nfc = Brick.config.sidescroll.fetch(relation.table_name, nil)&.fetch(:num_frozen_columns, nil) ||
28
+ Brick.config.sidescroll.fetch(:num_frozen_columns, nil) ||
29
+ 0
27
30
  out = "<table id=\"headerTop\"></table>
28
- <table id=\"#{relation.table_name.split('.').last}\" class=\"shadow\">
31
+ <table id=\"#{relation.table_name.split('.').last}\" class=\"shadow\"#{ " x-num-frozen=\"#{nfc}\"" if nfc.positive? }>
29
32
  <thead><tr>"
30
33
  pk = (klass = relation.klass).primary_key || []
31
34
  pk = [pk] unless pk.is_a?(Array)
@@ -95,12 +98,13 @@ module Brick::Rails::FormTags
95
98
  # (After restarting the server it worked fine again.)
96
99
  relation.each do |obj|
97
100
  out << "<tr>\n"
98
- out << "<td>#{link_to('⇛', send("#{klass._brick_index(:singular)}_path".to_sym,
101
+ out << "<td class=\"col-sticky\">#{link_to('⇛', send("#{klass._brick_index(:singular)}_path".to_sym,
99
102
  pk.map { |pk_part| obj.send(pk_part.to_sym) }), { class: 'big-arrow' })}</td>\n" if pk.present?
100
- sequence.each do |col_name|
103
+ sequence.each_with_index do |col_name, idx|
101
104
  val = obj.attributes[col_name]
102
105
  bt = bts[col_name]
103
106
  out << '<td'
107
+ (classes ||= []) << 'col-sticky' if idx < nfc
104
108
  (classes ||= []) << 'dimmed' unless cols.key?(col_name) || (cust_col = cust_cols[col_name]) ||
105
109
  (col_name.is_a?(Symbol) && bts.key?(col_name)) # HOT
106
110
  (classes ||= []) << 'right' if val.is_a?(Numeric) && !bt
@@ -5,7 +5,7 @@ module Brick
5
5
  module VERSION
6
6
  MAJOR = 1
7
7
  MINOR = 0
8
- TINY = 153
8
+ TINY = 154
9
9
 
10
10
  # PRE is nil unless it's a pre-release (beta, RC, etc.)
11
11
  PRE = nil
data/lib/brick.rb CHANGED
@@ -501,6 +501,11 @@ module Brick
501
501
  Brick.config.json_columns = cols
502
502
  end
503
503
 
504
+ # @api public
505
+ def sidescroll=(scroll)
506
+ Brick.config.sidescroll = scroll
507
+ end
508
+
504
509
  # DSL templates for individual models to provide prettier descriptions of objects
505
510
  # @api public
506
511
  def model_descrips=(descrips)
@@ -35,7 +35,7 @@ module Brick
35
35
  end
36
36
  end
37
37
  possible_additional_references = relations.each_with_object(Hash.new { |h, k| h[k] = [] }) do |relation, s|
38
- this_tnp = tnps&.keys.find { |tnp| relation.first.start_with?(tnp) }
38
+ this_tnp = tnps&.keys&.find { |tnp| relation.first.start_with?(tnp) }
39
39
  model_filename = "app/models/#{ActiveSupport::Inflector.singularize(relation.first)}.rb"
40
40
  relation.last[:cols].each do |col, type|
41
41
  col_down = col.downcase
@@ -244,6 +244,14 @@ if ActiveRecord::Base.respond_to?(:brick_select) && !::Brick.initializer_loaded
244
244
  # Brick.column_sequence = { 'users' => { include: ['email', 'profile.firstname', 'profile.lastname'] },
245
245
  # 'profile' => { exclude: ['birthdate'] } }
246
246
 
247
+ # # When rendering the grid on index pages, a default number of columns to keep as \"sticky\" so that they remain
248
+ # # at the left of the grid while scrolling. By default this is 0 extra columns -- only the link to that
249
+ # # object's show / edit page is sticky. And this would add one extra column in the mix:
250
+ # Brick.sidescroll = { num_frozen_columns: 1 }
251
+ # # As well if you would like to customise this for specific resources, that is possible:
252
+ # Brick.sidescroll = { num_frozen_columns: 0,
253
+ # 'products' => { num_frozen_columns: 2 } }
254
+
247
255
  # # EXTRA FOREIGN KEYS AND OTHER HAS_MANY SETTINGS
248
256
 
249
257
  # # Additional table references which are used to create has_many / belongs_to associations inside auto-created
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brick
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.153
4
+ version: 1.0.154
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lorin Thwaits
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-24 00:00:00.000000000 Z
11
+ date: 2023-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord