|
5 | 5 | require_relative "plotly_helpers/html_renderer"
|
6 | 6 | require_relative "plotly_helpers/notebook_renderer"
|
7 | 7 | require_relative "plotly_helpers/plotly_renderer"
|
| 8 | +require_relative "backend_helpers/playwright_manager" |
8 | 9 |
|
9 | 10 | module Charty
|
10 | 11 | module Backends
|
@@ -918,60 +919,17 @@ def self.mathjax_config
|
918 | 919 | end
|
919 | 920 | end
|
920 | 921 |
|
921 |
| - @playwright_fiber = nil |
922 |
| - |
923 |
| - def self.ensure_playwright |
924 |
| - if @playwright_fiber.nil? |
925 |
| - begin |
926 |
| - require "playwright" |
927 |
| - rescue LoadError |
928 |
| - $stderr.puts "ERROR: You need to install playwright and playwright-ruby-client before using Plotly renderer" |
929 |
| - raise |
930 |
| - end |
| 922 | + def self.render_image(input, output, format, element_id, width, height) |
| 923 | + BackendHelpers::PlaywrightManager.new_page do |page| |
| 924 | + page.set_viewport_size(width: width, height: height) |
| 925 | + page.goto("file://#{input}") |
| 926 | + element = page.query_selector("\##{element_id}") |
931 | 927 |
|
932 |
| - @playwright_fiber = Fiber.new do |
933 |
| - playwright_cli_executable_path = ENV.fetch("PLAYWRIGHT_CLI_EXECUTABLE_PATH", "npx playwright") |
934 |
| - Playwright.create(playwright_cli_executable_path: playwright_cli_executable_path) do |playwright| |
935 |
| - playwright.chromium.launch(headless: true) do |browser| |
936 |
| - request = Fiber.yield |
937 |
| - loop do |
938 |
| - result = nil |
939 |
| - case request.shift |
940 |
| - when :finish |
941 |
| - break |
942 |
| - when :render |
943 |
| - input, output, format, element_id, width, height = request |
944 |
| - |
945 |
| - page = browser.new_page |
946 |
| - page.set_viewport_size(width: width, height: height) |
947 |
| - page.goto("file://#{input}") |
948 |
| - element = page.query_selector("\##{element_id}") |
949 |
| - |
950 |
| - kwargs = {type: format} |
951 |
| - kwargs[:path] = output unless output.nil? |
952 |
| - result = element.screenshot(**kwargs) |
953 |
| - end |
954 |
| - request = Fiber.yield(result) |
955 |
| - end |
956 |
| - end |
957 |
| - end |
958 |
| - end |
959 |
| - @playwright_fiber.resume |
| 928 | + kwargs = {type: format} |
| 929 | + kwargs[:path] = output unless output.nil? |
| 930 | + element.screenshot(**kwargs) |
960 | 931 | end
|
961 | 932 | end
|
962 |
| - |
963 |
| - def self.terminate_playwright |
964 |
| - return if @playwright_fiber.nil? |
965 |
| - |
966 |
| - @playwright_fiber.resume([:finish]) |
967 |
| - end |
968 |
| - |
969 |
| - at_exit { terminate_playwright } |
970 |
| - |
971 |
| - def self.render_image(input, output, format, element_id, width, height) |
972 |
| - ensure_playwright if @playwright_fiber.nil? |
973 |
| - @playwright_fiber.resume([:render, input, output, format.to_s, element_id, width, height]) |
974 |
| - end |
975 | 933 | end
|
976 | 934 | end
|
977 | 935 | end
|
0 commit comments