jdvp-codetabs-commonmark 1.0.0 → 1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 30860da3f4f60c629ca9dcd82590c34f49fb731d2fc6d32322088358e22c9d3a
4
- data.tar.gz: ac41c3be00aab2a260f54f89eca0b6a4515b258b0b13bbd1fcbfaa8ca22dde76
3
+ metadata.gz: 89c9d7f0cf18e00c1227796201c0b804dbe07f2ab538d2bd658e97769ba2b7ba
4
+ data.tar.gz: dc78b436d81dadb9e5ece43accfd6f8f99676e37df1867acf24575ab2fcae573
5
5
  SHA512:
6
- metadata.gz: b7cdfe14cc645b1bb36a539f05b7d71564b1552d467826c700a8f0b5781c9e1d98bac8b9bb802bbba46f11af998eafef56264dc50e25badc664915de5587788e
7
- data.tar.gz: f036418139859a0f63bc0fa4254f1e6885155e893bedc499d233b6c28ee861048e72ab4b315ed9d9ef4b8b4d646423583fd0a7948e560701716d26c990683167
6
+ metadata.gz: dbcf2f927ef0145ce98756ed8771183e56046ef5220dd6d4028d049c4c9fbbf2b2e4fe80aae8b365c1f054400964f536054da8c8b4ca9d891a175f924eae0fd3
7
+ data.tar.gz: dac067dc28c3f29eb237c0c1f1fabc69ea20c836a2c593b8e5a7f932390a40bd2d903ec2e471626cfd4347d1ca55858df562849c825f2c566cd5e7edeba562fe
data/assets/codeblock.js CHANGED
@@ -25,8 +25,30 @@ function selectTab(codeLangClass, tabClass, tabIndex) {
25
25
  });
26
26
  };
27
27
 
28
- function copyText(codeBlockClass) {
28
+ function isNumeric(str) {
29
+ return !isNaN(str) && !isNaN(parseFloat(str))
30
+ }
31
+
32
+ function getRange(text) {
33
+ if (!text?.length) {
34
+ return [];
35
+ }
36
+ var elements = text.split("-").map(i => parseInt(i));
37
+ var a = Math.min(...elements);
38
+ var b = Math.max(...elements);
39
+ return Array.from(new Array(Math.abs(a - b) + 1), (x, i) => i + Math.min(a, b));
40
+ };
41
+
42
+ function copyText(codeBlockClass, copyRange) {
43
+ var lines = [...new Set(copyRange.replace(/\s/g, "").split(",").flatMap(item => getRange(item)))];
44
+ lines.sort();
45
+
29
46
  var copiedText = document.getElementsByClassName(codeBlockClass)[0].innerText;
47
+ if (lines !== undefined && lines.length > 0) {
48
+ copiedText = lines.map(lineNumber => copiedText.split("\n")[lineNumber])
49
+ .filter(item => item?.length)
50
+ .join("\n")
51
+ }
30
52
  navigator.clipboard.writeText(copiedText);
31
53
  var snackbar = document.getElementById("code_copied_snackbar");
32
54
  snackbar.classList.add("show")
@@ -38,7 +38,7 @@ class CodeTabsCustomerRenderer < JekyllCommonMarkCustomRenderer
38
38
  out("<div id=\"code_copied_snackbar\">Copied!</div>")
39
39
  @added_copy_snackbar = true
40
40
  end
41
- out("<button class=\"code_switcher_copy_button\" title=\"Copy\" onclick=\"copyText(\'#{individual_code_block_id}\')\"></button>")
41
+ out("<button class=\"code_switcher_copy_button\" title=\"Copy\" onclick=\"copyText(\'#{individual_code_block_id}\', \'#{get_code_copy_Lines(node)}\')\"></button>")
42
42
  end
43
43
  out("<button class=\"code_switcher_theme_button\" onclick=\"updateTheme(true)\"></button>")
44
44
  out("</div>")
@@ -62,7 +62,7 @@ class CodeTabsCustomerRenderer < JekyllCommonMarkCustomRenderer
62
62
  #Splits the code fence into the language and extra info
63
63
  #Removes the codeCopyEnabled item which is just a flag used to enable showing a copy action button
64
64
  def split_lanugage_fence_info(node)
65
- node&.fence_info&.sub(" codeCopyEnabled", "")&.split(/[\s,]/, 2)
65
+ node&.fence_info&.sub(/ codeCopyEnabled=?"?([\ \-\,0-9]*)"?/, "")&.split(/[\s,]/, 2)
66
66
  end
67
67
 
68
68
  #Gets the language used in the code fence (the part typically immediately after a triple backtick in markdown)
@@ -87,6 +87,10 @@ class CodeTabsCustomerRenderer < JekyllCommonMarkCustomRenderer
87
87
  node&.fence_info&.include?("codeCopyEnabled") || false
88
88
  end
89
89
 
90
+ def get_code_copy_Lines(node)
91
+ node&.fence_info[/ codeCopyEnabled=?"?([\ \-\,0-9]*)"?/, 1] || ""
92
+ end
93
+
90
94
  #Creates the tab header portion of the code switcher
91
95
  def create_tabbed_code_header(node)
92
96
  uuid = SecureRandom.uuid
@@ -140,7 +144,7 @@ def add_resource_links_in_html_head(site)
140
144
  site_directory = "#{site.in_dest_dir("/")}"
141
145
 
142
146
  # For every html file in the generated site
143
- Dir.glob("*.html", base: site_directory).each do |file_name|
147
+ Dir.glob("**/*.html", base: site_directory).each do |file_name|
144
148
  file_plus_path = "#{site_directory}#{file_name}"
145
149
 
146
150
  # Check if the file contains a code switcher and skip it if it does not
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jdvp-codetabs-commonmark
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - JD Porterfield