jdvp-codetabs-commonmark 1.0.0 → 1.1.0

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: 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