﻿=== Copy as Markdown Button ===
Contributors: josevarghese
Donate link: https://superwebshare.com/donate
Tags: markdown, copy, button, content, export
Requires at least: 6.0
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.0.2
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Adds a button to copy markdown, download, and view post as Markdown format. Supports shortcode, Gutenberg block and .md.txt endpoint.

== Description ==

Copy as Markdown Button lets your visitors copy any post or page content as clean, well-structured Markdown with a single click. It handles everything from headings and tables to code blocks and nested lists - no extra tools or dependencies required.

**Placement & Auto-injection**

* Automatically injects the button before or after the content on any combination of post types (posts, pages, and custom post types)
* Shortcode `[copy_as_markdown]` for manual placement in any post, page, or widget
* Gutenberg block available in the Widgets category - place it anywhere in the block editor with per-block overrides for button text, size, and content selector
* Exclude specific posts or pages from auto-injection by entering their IDs - shortcode and block placements are unaffected

**Button Customisation**

* Choose button size: Small, Medium, or Large
* Set custom background, text, and hover colours via colour pickers
* Adjust corner radius from 0 px (square) to 50 px (pill)
* Show or hide the copy icon alongside the button label
* Customise the button label (default: "Copy as Markdown") and the success confirmation text (default: "Copied!")
* Live preview in the settings panel updates instantly as you change style options

**Content Control**

* Optionally prepend the post title as a Markdown H1 heading
* Custom CSS selector to target a specific page element instead of the auto-detected content area
* Exclude any elements from the Markdown output using CSS selectors (one per line) - useful for stripping ads, share buttons, comment sections, and related posts
* Per-shortcode overrides for button text, size, content selector, and download button visibility

**Download Button**

* Optional dropdown "Download as .md" button that saves the converted Markdown as a `.md` file directly from the browser, named after the post slug
* Appears alongside the copy button in a split-button dropdown
* Can be force-enabled or force-disabled per shortcode instance using the `download` attribute

**Markdown URL Endpoint**

* Enable a `.md.txt` URL endpoint so any post or page can be viewed as plain-text Markdown by appending `.md.txt` to its URL (e.g. `yoursite.com/your-post-slug.md.txt`)
* The server converts the post HTML to Markdown and serves it as `text/plain` - useful for programmatic access, LLM ingestion, and content pipelines
* Works with Elementor pages by using Elementor's own renderer when available
* Optional "View as Markdown" link in the button dropdown opens the plain-text endpoint in a new tab
* Customisable link label for the "View as Markdown" item

**HTML-to-Markdown Conversion**

The converter handles a wide range of HTML elements cleanly:

* Headings (H1–H6), paragraphs, line breaks, and horizontal rules
* Bold (`**`), italic (`*`), and strikethrough (`~~`) inline formatting
* Hyperlinks with optional title attributes; images with alt text and titles
* Fenced code blocks with language detection from the `language-*` CSS class
* Inline code with backtick escaping
* Blockquotes with proper `>` prefixing on every line
* Ordered and unordered lists with full nested list support
* Tables converted to GitHub-Flavored Markdown pipe tables
* Figures with italicised captions
* YouTube iframe embeds converted to `[Video](url)` Markdown links
* Scripts, styles, navigation, and form elements are automatically stripped

**Accessibility & Performance**

* ARIA labels, `role="status"` live region for screen-reader announcements after copy
* Keyboard-navigable dropdown with `aria-expanded` and `role="menu"` semantics
* Frontend CSS and JavaScript are only loaded on pages where the button will actually appear

== Installation ==

1. Upload the plugin folder to the `/wp-content/plugins/` directory, or install the plugin through the WordPress Plugins screen directly.
2. Activate the plugin through the **Plugins** screen in WordPress.
3. Go to **Settings > Copy as Markdown** to configure where and how the button appears.

== Frequently Asked Questions ==

= How do I place the button manually? =

Use the shortcode `[copy_as_markdown]` in any post, page, or widget, or add the **Copy as Markdown** block in the Gutenberg block editor.

= Can I copy only part of the page? =

Yes. Use the **Content Element Selector** setting (or the `selector` shortcode attribute) to target a specific CSS element. Leave it blank to let the plugin auto-detect the content area.

= Can I override shortcode settings per instance? =

Yes. The shortcode accepts `text`, `size`, `selector`, and `download` attributes. For example: `[copy_as_markdown text="Export" size="large" selector=".post-body" download="true"]`.

= Does it work with custom post types? =

Yes. Any public post type is listed in the Display settings so you can enable auto-injection for it.

= How do I hide the button on a specific post without disabling the whole post type? =

Enter the post or page ID in the **Exclude Specific Pages / Posts** field under the Display tab. You can find the ID in the URL when editing the post: `?post=123`.

= What is the .md.txt endpoint? =

When enabled, appending `.md.txt` to any post or page URL (e.g. `yoursite.com/my-post.md.txt`) serves the full post content as plain-text Markdown. After enabling it, visit **Settings > Permalinks** once to flush rewrite rules.

= Does it work with Elementor? =

Yes. The Markdown URL endpoint detects Elementor and uses its own renderer to capture the full built page content rather than the raw `post_content`.

== Screenshots ==

1. The Copy as Markdown button rendered on the frontend with copy, download, and view options.
2. Display settings - configure which post types show the button and exclusion rules.
3. Style settings - customise button size, colours, corner radius, and live preview.
4. Content settings - control the content selector, title prepending, and element exclusions.
5. Usage settings - shortcode reference, Gutenberg block, and .md.txt endpoint options.

== Changelog ==

= 1.0.2 =
* Added optional Download button that saves post content as a `.md` file directly from the browser.
* Added `.md.txt` URL endpoint - append `.md.txt` to any post/page URL to view it as plain-text Markdown.
* Added "View as Markdown" dropdown link that opens the `.md.txt` endpoint in a new tab.
* Added YouTube iframe support - embeds are converted to `[Video](url)` Markdown links.
* Added Exclude by Post ID setting to suppress auto-injection on specific posts or pages.
* Improved split-button dropdown UI for copy, download, and view actions.

= 1.0.1 =
* Fixed plugin review issues.

= 1.0.0 =
* Initial release.

== Upgrade Notice ==

= 1.0.2 =
Adds a download button, a plain-text Markdown URL endpoint, YouTube embed support, and per-post exclusion by ID. After upgrading and enabling the endpoint, visit Settings > Permalinks once to flush rewrite rules.

= 1.0.1 =
Bug fixes and plugin review improvements.

= 1.0.0 =
Initial release.
