From 818397dbaf05ad122db0ae5fa0cbadf1c0961800 Mon Sep 17 00:00:00 2001 From: Jay Guo Date: Wed, 19 Nov 2025 16:43:50 -0500 Subject: [PATCH] feat: add file icon for markdown resources --- .../assets/css/markdown_resource_styles.css | 14 ++++++++++++++ .../assets/{ => css}/markdown_view.css | 0 ckanext/markdown_view/assets/webassets.yml | 7 ++++++- ckanext/markdown_view/plugin.py | 1 + .../markdown_view/public/img/markdown_icon.png | Bin 0 -> 9086 bytes ckanext/markdown_view/templates/base.html | 6 ++++++ 6 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 ckanext/markdown_view/assets/css/markdown_resource_styles.css rename ckanext/markdown_view/assets/{ => css}/markdown_view.css (100%) create mode 100644 ckanext/markdown_view/public/img/markdown_icon.png create mode 100644 ckanext/markdown_view/templates/base.html diff --git a/ckanext/markdown_view/assets/css/markdown_resource_styles.css b/ckanext/markdown_view/assets/css/markdown_resource_styles.css new file mode 100644 index 0000000..65caf4f --- /dev/null +++ b/ckanext/markdown_view/assets/css/markdown_resource_styles.css @@ -0,0 +1,14 @@ +.label[data-format=md], +.label[data-format*=markdown] { + background-color: #1A7EA3; +} +.format-label[data-format=md], +.format-label[data-format*=markdown] { + width: 32px; + height: 35px; + background: url(/img/markdown_icon.png); + background-size: cover; + transform: unset; + top: 25px !important; + left: 25px !important; +} \ No newline at end of file diff --git a/ckanext/markdown_view/assets/markdown_view.css b/ckanext/markdown_view/assets/css/markdown_view.css similarity index 100% rename from ckanext/markdown_view/assets/markdown_view.css rename to ckanext/markdown_view/assets/css/markdown_view.css diff --git a/ckanext/markdown_view/assets/webassets.yml b/ckanext/markdown_view/assets/webassets.yml index 09a9edb..2eb0966 100644 --- a/ckanext/markdown_view/assets/webassets.yml +++ b/ckanext/markdown_view/assets/webassets.yml @@ -1,8 +1,13 @@ markdown_view_css: contents: - - markdown_view.css + - css/markdown_view.css output: md_view_assets/%(version)s_markdown_view.css +markdown_resource_styles_css: + contents: + - css/markdown_resource_styles.css + output: md_view_assets/%(version)s_markdown_resource_styles.css + markdown_it: contents: - vendor/markdown-it.min.js diff --git a/ckanext/markdown_view/plugin.py b/ckanext/markdown_view/plugin.py index 167900c..cb589cc 100644 --- a/ckanext/markdown_view/plugin.py +++ b/ckanext/markdown_view/plugin.py @@ -16,6 +16,7 @@ class MarkdownViewPlugin(plugins.SingletonPlugin): # IConfigurer def update_config(self, config): tk.add_template_directory(config, 'templates') + tk.add_public_directory(config, 'public') tk.add_resource('assets', 'md_view_assets') def info(self): diff --git a/ckanext/markdown_view/public/img/markdown_icon.png b/ckanext/markdown_view/public/img/markdown_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1f15d157af2d17c0c772308bf946627c87f44296 GIT binary patch literal 9086 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 literal 0 HcmV?d00001 diff --git a/ckanext/markdown_view/templates/base.html b/ckanext/markdown_view/templates/base.html new file mode 100644 index 0000000..16cce04 --- /dev/null +++ b/ckanext/markdown_view/templates/base.html @@ -0,0 +1,6 @@ +{% ckan_extends %} + +{% block styles %} + {{ super() }} + {% asset 'md_view_assets/markdown_resource_styles_css' %} +{% endblock %} \ No newline at end of file