diff options
Diffstat (limited to '_extensions/dragonstyle/unsplash')
-rw-r--r-- | _extensions/dragonstyle/unsplash/_extension.yml | 8 | ||||
-rw-r--r-- | _extensions/dragonstyle/unsplash/style.css | 25 | ||||
-rw-r--r-- | _extensions/dragonstyle/unsplash/unsplash.lua | 193 |
3 files changed, 0 insertions, 226 deletions
diff --git a/_extensions/dragonstyle/unsplash/_extension.yml b/_extensions/dragonstyle/unsplash/_extension.yml deleted file mode 100644 index f22a6d2..0000000 --- a/_extensions/dragonstyle/unsplash/_extension.yml +++ /dev/null @@ -1,8 +0,0 @@ -title: Unsplash -author: Charles Teague -version: 1.0.3 -quarto-required: ">=1.3.0" -contributes: - shortcodes: - - unsplash.lua - diff --git a/_extensions/dragonstyle/unsplash/style.css b/_extensions/dragonstyle/unsplash/style.css deleted file mode 100644 index 42f9620..0000000 --- a/_extensions/dragonstyle/unsplash/style.css +++ /dev/null @@ -1,25 +0,0 @@ -.unsplash-container { - overflow: hidden; - margin-bottom: 1em; -} - -.unsplash-container img { - object-fit: cover; - width: 100%; -} - -.unsplash-container.float-right { - float: right; - padding-left: 0.75em; -} - -.unsplash-container.float-left { - float: left; - padding-right: 0.75em; -} - -.unsplash-container.float-center { - float: center; - padding-left: 0.75em; - padding-right: 0.75em; -}
\ No newline at end of file diff --git a/_extensions/dragonstyle/unsplash/unsplash.lua b/_extensions/dragonstyle/unsplash/unsplash.lua deleted file mode 100644 index fd87ab2..0000000 --- a/_extensions/dragonstyle/unsplash/unsplash.lua +++ /dev/null @@ -1,193 +0,0 @@ - -local mimeImgExts = { - ["image/jpeg"]="jpg", - ["image/gif"]="gif", - ["image/vnd.microsoft.icon"]="ico", - ["image/avif"]="avif", - ["image/bmp"]="bmp", - ["image/png"]="png", - ["image/svg+xml"]="svg", - ["image/tiff"]="tif", - ["image/webp"]="webp", -} - -local function file_exists(name) - local f = io.open(name, 'r') - if f ~= nil then - io.close(f) - return true - else - return false - end -end - -local function write_file(path, contents, mode) - pandoc.system.make_directory(pandoc.path.directory(path), true) - mode = mode or "a" - local file = io.open(path, mode) - if file then - file:write(contents) - file:close() - return true - else - return false - end -end - - - - -return { - ['unsplash'] = function(args, kwargs, meta) - - - -- positional == keywords - -- {{< unsplash cat >}} - -- {{< unsplash keywords="cats" height="300" width="300"}} - - -- TODO: use the real api to download a copy of the image using rest - -- TODO: ping the download url - -- TODO: Generate a stable name for the image - -- TODO: Make this a format resource instead of media bag, so images become stable - -- TODO: generate more complete information from REST endpoint to credit author - - local height = nil - local width = nil - local keywords = nil - local classes = nil - local float = nil - - -- the filename - local filename - if args[1] ~= nil then - filename = pandoc.utils.stringify(args[1]) - local stem = pandoc.path.split_extension(pandoc.path.filename(filename)) - keywords = stem - end - - -- height - if kwargs['height'] ~= nil and #kwargs['height'] > 0 then - height = pandoc.utils.stringify(kwargs['height']) - end - - -- width - if kwargs['width'] ~= nil and #kwargs['width'] > 0 then - width = pandoc.utils.stringify(kwargs['width']) - end - - -- keywords - if kwargs['keywords'] ~= nil and #kwargs['keywords'] > 0 then - keywords = pandoc.utils.stringify(kwargs['keywords']) - end - - -- classes - if kwargs['class'] ~= nil and #kwargs['class'] > 0 then - classes = pandoc.utils.stringify(kwargs['class']) - end - - -- classes - if kwargs['float'] ~= nil and #kwargs['float'] > 0 then - float = pandoc.utils.stringify(kwargs['float']) - end - - - -- form the unsplash URL that will be used - local url = "https://source.unsplash.com/random" - if width and height then - url = url .. "/" .. tostring(width) .. '×' .. tostring(height) - end - if keywords ~= nil then - url = url .. '/?' .. keywords - end - - -- deal with the height and width - - local imgContainer = function (imgEl) - - -- HTML formats use a container to implement sizing, so - -- apply classes and so on to that container - if quarto.doc.is_format("html") then - - - quarto.doc.add_html_dependency({ - name = "unsplash-styles", - version = "1.0.0", - stylesheets = {"style.css"} - }) - - local style = "" - if height then - style = style .. 'height: ' .. height .. '; ' - end - if width then - style = style .. 'width: ' .. width .. '; ' - end - - local divAttrRaw = {} - if style ~= "" then - divAttrRaw['style'] = style - end - - local clz = pandoc.List({'unsplash-container'}) - if float then - clz:insert('float-' .. float) - end - - if classes ~= nil then - for token in string.gmatch(classes, "[^%s]+") do - clz:insert(token) - end - end - - local divAttr = pandoc.Attr("", clz, divAttrRaw) - local div = pandoc.Div(imgEl, divAttr) - - return div - - else - - -- Non-HTML formats just return the raw image with - -- any options set on that - - if height then - imgEl.attr.attributes['height'] = height - end - if width then - imgEl.attr.attributes['width'] = width - end - - if classes ~= nil then - for clz in string.gmatch(classes, "[^%s]+") do - imgEl.attr.classes:insert(clz) - end - end - - return imgEl - - end - end - - if filename ~= nil and file_exists(filename) then - return imgContainer(pandoc.Image("", filename)) - elseif filename ~= nil then - -- read the image - local _imgMt, imgContents = pandoc.mediabag.fetch(url) - write_file(filename, imgContents, "wb") - return imgContainer(pandoc.Image("", filename)) - else - -- read the image - local imgMt, imgContents = pandoc.mediabag.fetch(url) - - -- place it in media bag and link to it - if imgContents ~= nil then - local tmpFileName = pandoc.path.filename(os.tmpname()) ..'.' .. mimeImgExts[imgMt] - pandoc.mediabag.insert(tmpFileName, imgMt, imgContents) - return imgContainer(pandoc.Image("", tmpFileName)) - end - end - - - end -} - - |