Skip to content

Commit

Permalink
Always check access scope for selected file. (#33)
Browse files Browse the repository at this point in the history
* Always check access scope for selected file.

* Update docs
  • Loading branch information
fummicc1 authored Dec 25, 2022
1 parent 0e4ecd0 commit 8d04372
Show file tree
Hide file tree
Showing 80 changed files with 83 additions and 82 deletions.
2 changes: 1 addition & 1 deletion Csv2ImageApp/Csv2ImageApp.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
D3C4131B289F9B7B00936C02 /* RootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3C4131A289F9B7B00936C02 /* RootView.swift */; };
D3C4131D289F9E3A00936C02 /* SelectCsvModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3C4131C289F9E3A00936C02 /* SelectCsvModel.swift */; };
D3C41320289FB11800936C02 /* GenerateOutputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3C4131F289FB11800936C02 /* GenerateOutputView.swift */; };
D3C41322289FB11F00936C02 /* GenerateOutputModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3C41321289FB11F00936C02 /* GenerateOutputModel.swift */; platformFilter = ios; };
D3C41322289FB11F00936C02 /* GenerateOutputModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3C41321289FB11F00936C02 /* GenerateOutputModel.swift */; };
D3C41324289FB12F00936C02 /* GenerateOutputView+iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3C41323289FB12F00936C02 /* GenerateOutputView+iOS.swift */; platformFilter = ios; };
D3C41326289FB13800936C02 /* GenerateOutputView+macOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3C41325289FB13800936C02 /* GenerateOutputView+macOS.swift */; platformFilters = (macos, ); };
D3C41328289FB66400936C02 /* CButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3C41327289FB66400936C02 /* CButton.swift */; };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class GenerateOutputModel: ObservableObject {
#if os(macOS)
self.csv = try Csv.loadFromDisk(url, exportType: exportMode)
#elseif os(iOS)
self.csv = try Csv.loadFromDisk(url, checkAccessSecurityScope: true, exportType: exportMode)
self.csv = try Csv.loadFromDisk(url, exportType: exportMode)
#endif
case .network:
self.csv = try Csv.loadFromNetwork(url, exportType: exportMode)
Expand Down Expand Up @@ -121,7 +121,6 @@ class GenerateOutputModel: ObservableObject {
}
}


#if os(macOS)
extension GenerateOutputModel {
@MainActor
Expand Down
10 changes: 6 additions & 4 deletions Sources/Csv2Img/Csv.swift
Original file line number Diff line number Diff line change
Expand Up @@ -300,17 +300,19 @@ extension Csv {
///
/// - Parameters:
/// - file: Local disk url, commonly starts from `file://` schema. Relative-path method is not allowed, please specify by absolute-path method.
/// - separator: Default `separator` in a row is `","`. You cloud change it by giving separator to `separator` parameter.
/// - checkAccessSecurityScope: This flag is effective to only macOS. If you want to check local-file is securely accessible from this app, make this flat `true`. Default value if `false` which does not check the file access-security-scope.
/// - separator: Default `separator` in a row is `","`. You cloud change it by giving separator to `separator` parameter.
/// - exportType: Default `exportType` is `.png`. If you use too big image size, I strongly recommend use `.pdf` instead.
public static func loadFromDisk(
_ file: URL,
separator: String = ",",
checkAccessSecurityScope: Bool = false,
exportType: ExportType = .png
) throws -> Csv {
// https://www.hackingwithswift.com/forums/swift/accessing-files-from-the-files-app/8203
if !checkAccessSecurityScope || file.startAccessingSecurityScopedResource() {
let canAccess = file.startAccessingSecurityScopedResource()
defer {
file.stopAccessingSecurityScopedResource()
}
if canAccess {
let data = try Data(contentsOf: file)
let str: String
if let _str = String(data: data, encoding: .utf8) {
Expand Down
2 changes: 1 addition & 1 deletion docs/data/documentation/csv2img.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"variants":[{"paths":["\/documentation\/csv2img"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/Csv2Img\/documentation\/Csv2Img","interfaceLanguage":"swift"},"topicSections":[{"title":"Classes","identifiers":["doc:\/\/Csv2Img\/documentation\/Csv2Img\/AnyCsvExportable","doc:\/\/Csv2Img\/documentation\/Csv2Img\/Csv"]},{"title":"Protocols","identifiers":["doc:\/\/Csv2Img\/documentation\/Csv2Img\/CsvExportable","doc:\/\/Csv2Img\/documentation\/Csv2Img\/Maker"]},{"title":"Structures","identifiers":["doc:\/\/Csv2Img\/documentation\/Csv2Img\/PDFMetadata"]},{"title":"Enumerations","identifiers":["doc:\/\/Csv2Img\/documentation\/Csv2Img\/ImageMakingError","doc:\/\/Csv2Img\/documentation\/Csv2Img\/PdfMakingError"]}],"kind":"symbol","metadata":{"roleHeading":"Framework","externalID":"Csv2Img","title":"Csv2Img","symbolKind":"module","role":"collection","modules":[{"name":"Csv2Img"}]},"hierarchy":{"paths":[[]]},"references":{"doc://Csv2Img/documentation/Csv2Img/CsvExportable":{"role":"symbol","title":"CsvExportable","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"CsvExportable"}],"abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/CsvExportable","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"CsvExportable"}],"url":"\/documentation\/csv2img\/csvexportable"},"doc://Csv2Img/documentation/Csv2Img/ImageMakingError":{"role":"symbol","title":"ImageMakingError","fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"ImageMakingError"}],"abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/ImageMakingError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ImageMakingError"}],"url":"\/documentation\/csv2img\/imagemakingerror"},"doc://Csv2Img/documentation/Csv2Img/Maker":{"role":"symbol","title":"Maker","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"Maker"}],"abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/Maker","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Maker"}],"url":"\/documentation\/csv2img\/maker"},"doc://Csv2Img/documentation/Csv2Img/PDFMetadata":{"role":"symbol","title":"PDFMetadata","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"PDFMetadata"}],"abstract":[{"type":"reference","isActive":true,"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/PDFMetadata"},{"type":"text","text":" is a struct which stores Metadata about output-pdf."}],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/PDFMetadata","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"PDFMetadata"}],"url":"\/documentation\/csv2img\/pdfmetadata"},"doc://Csv2Img/documentation/Csv2Img/PdfMakingError":{"role":"symbol","title":"PdfMakingError","fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"PdfMakingError"}],"abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/PdfMakingError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"PdfMakingError"}],"url":"\/documentation\/csv2img\/pdfmakingerror"},"doc://Csv2Img/documentation/Csv2Img":{"role":"collection","title":"Csv2Img","abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img","kind":"symbol","type":"topic","url":"\/documentation\/csv2img"},"doc://Csv2Img/documentation/Csv2Img/AnyCsvExportable":{"role":"symbol","title":"AnyCsvExportable","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnyCsvExportable"}],"abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/AnyCsvExportable","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"AnyCsvExportable"}],"url":"\/documentation\/csv2img\/anycsvexportable"},"doc://Csv2Img/documentation/Csv2Img/Csv":{"role":"symbol","title":"Csv","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"Csv"}],"abstract":[{"type":"text","text":"Csv data structure"}],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/Csv","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Csv"}],"url":"\/documentation\/csv2img\/csv"}}}
{"variants":[{"paths":["\/documentation\/csv2img"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/Csv2Img\/documentation\/Csv2Img","interfaceLanguage":"swift"},"topicSections":[{"title":"Classes","identifiers":["doc:\/\/Csv2Img\/documentation\/Csv2Img\/AnyCsvExportable","doc:\/\/Csv2Img\/documentation\/Csv2Img\/Csv"]},{"title":"Protocols","identifiers":["doc:\/\/Csv2Img\/documentation\/Csv2Img\/CsvExportable","doc:\/\/Csv2Img\/documentation\/Csv2Img\/Maker"]},{"title":"Structures","identifiers":["doc:\/\/Csv2Img\/documentation\/Csv2Img\/PDFMetadata"]},{"title":"Enumerations","identifiers":["doc:\/\/Csv2Img\/documentation\/Csv2Img\/ImageMakingError","doc:\/\/Csv2Img\/documentation\/Csv2Img\/PdfMakingError"]}],"kind":"symbol","metadata":{"roleHeading":"Framework","externalID":"Csv2Img","title":"Csv2Img","symbolKind":"module","role":"collection","modules":[{"name":"Csv2Img"}]},"hierarchy":{"paths":[[]]},"references":{"doc://Csv2Img/documentation/Csv2Img/AnyCsvExportable":{"role":"symbol","title":"AnyCsvExportable","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnyCsvExportable"}],"abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/AnyCsvExportable","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"AnyCsvExportable"}],"url":"\/documentation\/csv2img\/anycsvexportable"},"doc://Csv2Img/documentation/Csv2Img/CsvExportable":{"role":"symbol","title":"CsvExportable","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"CsvExportable"}],"abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/CsvExportable","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"CsvExportable"}],"url":"\/documentation\/csv2img\/csvexportable"},"doc://Csv2Img/documentation/Csv2Img/ImageMakingError":{"role":"symbol","title":"ImageMakingError","fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"ImageMakingError"}],"abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/ImageMakingError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ImageMakingError"}],"url":"\/documentation\/csv2img\/imagemakingerror"},"doc://Csv2Img/documentation/Csv2Img/PDFMetadata":{"role":"symbol","title":"PDFMetadata","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"PDFMetadata"}],"abstract":[{"type":"reference","isActive":true,"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/PDFMetadata"},{"type":"text","text":" is a struct which stores Metadata about output-pdf."}],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/PDFMetadata","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"PDFMetadata"}],"url":"\/documentation\/csv2img\/pdfmetadata"},"doc://Csv2Img/documentation/Csv2Img/Csv":{"role":"symbol","title":"Csv","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"Csv"}],"abstract":[{"type":"text","text":"Csv data structure"}],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/Csv","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Csv"}],"url":"\/documentation\/csv2img\/csv"},"doc://Csv2Img/documentation/Csv2Img":{"role":"collection","title":"Csv2Img","abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img","kind":"symbol","type":"topic","url":"\/documentation\/csv2img"},"doc://Csv2Img/documentation/Csv2Img/Maker":{"role":"symbol","title":"Maker","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"Maker"}],"abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/Maker","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Maker"}],"url":"\/documentation\/csv2img\/maker"},"doc://Csv2Img/documentation/Csv2Img/PdfMakingError":{"role":"symbol","title":"PdfMakingError","fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"PdfMakingError"}],"abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/PdfMakingError","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"PdfMakingError"}],"url":"\/documentation\/csv2img\/pdfmakingerror"}}}
2 changes: 1 addition & 1 deletion docs/data/documentation/csv2img/anycsvexportable.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnyCsvExportable"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/csv2img\/anycsvexportable"],"traits":[{"interfaceLanguage":"swift"}]}],"relationshipsSections":[{"identifiers":["doc:\/\/Csv2Img\/documentation\/Csv2Img\/CsvExportable"],"kind":"relationships","title":"Conforms To","type":"conformsTo"}],"identifier":{"url":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/AnyCsvExportable","interfaceLanguage":"swift"},"topicSections":[{"title":"Initializers","identifiers":["doc:\/\/Csv2Img\/documentation\/Csv2Img\/AnyCsvExportable\/init(_:)"]},{"title":"Instance Properties","identifiers":["doc:\/\/Csv2Img\/documentation\/Csv2Img\/AnyCsvExportable\/base"]}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnyCsvExportable"}],"title":"AnyCsvExportable","roleHeading":"Class","role":"symbol","symbolKind":"class","externalID":"s:7Csv2Img16AnyCsvExportableC","modules":[{"name":"Csv2Img"}],"navigatorTitle":[{"kind":"identifier","text":"AnyCsvExportable"}]},"hierarchy":{"paths":[["doc:\/\/Csv2Img\/documentation\/Csv2Img"]]},"references":{"doc://Csv2Img/documentation/Csv2Img/AnyCsvExportable":{"role":"symbol","title":"AnyCsvExportable","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnyCsvExportable"}],"abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/AnyCsvExportable","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"AnyCsvExportable"}],"url":"\/documentation\/csv2img\/anycsvexportable"},"doc://Csv2Img/documentation/Csv2Img/AnyCsvExportable/init(_:)":{"role":"symbol","title":"init(_:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"CsvExportable","preciseIdentifier":"s:7Csv2Img13CsvExportableP"},{"kind":"text","text":")"}],"abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/AnyCsvExportable\/init(_:)","kind":"symbol","type":"topic","url":"\/documentation\/csv2img\/anycsvexportable\/init(_:)"},"doc://Csv2Img/documentation/Csv2Img/CsvExportable":{"role":"symbol","title":"CsvExportable","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"CsvExportable"}],"abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/CsvExportable","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"CsvExportable"}],"url":"\/documentation\/csv2img\/csvexportable"},"doc://Csv2Img/documentation/Csv2Img/AnyCsvExportable/base":{"role":"symbol","title":"base","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"base"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CsvExportable","preciseIdentifier":"s:7Csv2Img13CsvExportableP"}],"abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/AnyCsvExportable\/base","kind":"symbol","type":"topic","url":"\/documentation\/csv2img\/anycsvexportable\/base"},"doc://Csv2Img/documentation/Csv2Img":{"role":"collection","title":"Csv2Img","abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img","kind":"symbol","type":"topic","url":"\/documentation\/csv2img"}}}
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnyCsvExportable"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/csv2img\/anycsvexportable"],"traits":[{"interfaceLanguage":"swift"}]}],"relationshipsSections":[{"identifiers":["doc:\/\/Csv2Img\/documentation\/Csv2Img\/CsvExportable"],"kind":"relationships","title":"Conforms To","type":"conformsTo"}],"identifier":{"url":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/AnyCsvExportable","interfaceLanguage":"swift"},"topicSections":[{"title":"Initializers","identifiers":["doc:\/\/Csv2Img\/documentation\/Csv2Img\/AnyCsvExportable\/init(_:)"]},{"title":"Instance Properties","identifiers":["doc:\/\/Csv2Img\/documentation\/Csv2Img\/AnyCsvExportable\/base"]}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnyCsvExportable"}],"title":"AnyCsvExportable","roleHeading":"Class","role":"symbol","symbolKind":"class","externalID":"s:7Csv2Img16AnyCsvExportableC","modules":[{"name":"Csv2Img"}],"navigatorTitle":[{"kind":"identifier","text":"AnyCsvExportable"}]},"hierarchy":{"paths":[["doc:\/\/Csv2Img\/documentation\/Csv2Img"]]},"references":{"doc://Csv2Img/documentation/Csv2Img/AnyCsvExportable/init(_:)":{"role":"symbol","title":"init(_:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"CsvExportable","preciseIdentifier":"s:7Csv2Img13CsvExportableP"},{"kind":"text","text":")"}],"abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/AnyCsvExportable\/init(_:)","kind":"symbol","type":"topic","url":"\/documentation\/csv2img\/anycsvexportable\/init(_:)"},"doc://Csv2Img/documentation/Csv2Img":{"role":"collection","title":"Csv2Img","abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img","kind":"symbol","type":"topic","url":"\/documentation\/csv2img"},"doc://Csv2Img/documentation/Csv2Img/AnyCsvExportable":{"role":"symbol","title":"AnyCsvExportable","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnyCsvExportable"}],"abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/AnyCsvExportable","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"AnyCsvExportable"}],"url":"\/documentation\/csv2img\/anycsvexportable"},"doc://Csv2Img/documentation/Csv2Img/CsvExportable":{"role":"symbol","title":"CsvExportable","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"CsvExportable"}],"abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/CsvExportable","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"CsvExportable"}],"url":"\/documentation\/csv2img\/csvexportable"},"doc://Csv2Img/documentation/Csv2Img/AnyCsvExportable/base":{"role":"symbol","title":"base","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"base"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CsvExportable","preciseIdentifier":"s:7Csv2Img13CsvExportableP"}],"abstract":[],"identifier":"doc:\/\/Csv2Img\/documentation\/Csv2Img\/AnyCsvExportable\/base","kind":"symbol","type":"topic","url":"\/documentation\/csv2img\/anycsvexportable\/base"}}}
Loading

0 comments on commit 8d04372

Please sign in to comment.