added additional plugins
This commit is contained in:
parent
c85895d306
commit
00e60ec1b7
132 changed files with 27514 additions and 0 deletions
566
native/wordpress/learndash-start-button/assets/js/block.js
Normal file
566
native/wordpress/learndash-start-button/assets/js/block.js
Normal file
|
|
@ -0,0 +1,566 @@
|
|||
/**
|
||||
* LearnDash Start Course Button - Gutenberg Blocks
|
||||
*
|
||||
* Registers custom Gutenberg blocks for Start Course and Start Group buttons
|
||||
*/
|
||||
|
||||
(function (wp) {
|
||||
"use strict";
|
||||
|
||||
// Destructure required WordPress packages
|
||||
const { __ } = wp.i18n;
|
||||
const { createElement: el } = wp.element;
|
||||
const { registerBlockType } = wp.blocks;
|
||||
const {
|
||||
TextControl,
|
||||
ToggleControl,
|
||||
PanelBody,
|
||||
PanelRow,
|
||||
SelectControl,
|
||||
Notice,
|
||||
} = wp.components;
|
||||
const { InspectorControls, BlockControls, AlignmentToolbar, useBlockProps } =
|
||||
wp.blockEditor;
|
||||
const { Fragment } = wp.element;
|
||||
|
||||
// SVG Arrow Icon
|
||||
const arrowIcon = el(
|
||||
"svg",
|
||||
{
|
||||
className: "ldsb-button-arrow",
|
||||
width: "24",
|
||||
height: "24",
|
||||
viewBox: "0 0 24 24",
|
||||
fill: "none",
|
||||
xmlns: "http://www.w3.org/2000/svg",
|
||||
},
|
||||
el("path", {
|
||||
d: "M5 12H19M19 12L12 5M19 12L12 19",
|
||||
stroke: "currentColor",
|
||||
strokeWidth: "2",
|
||||
strokeLinecap: "round",
|
||||
strokeLinejoin: "round",
|
||||
}),
|
||||
);
|
||||
|
||||
// Course block icon
|
||||
const courseBlockIcon = el(
|
||||
"svg",
|
||||
{
|
||||
width: "24",
|
||||
height: "24",
|
||||
viewBox: "0 0 24 24",
|
||||
fill: "none",
|
||||
},
|
||||
el("path", {
|
||||
d: "M13 7L18 12M18 12L13 17M18 12H6",
|
||||
stroke: "currentColor",
|
||||
strokeWidth: "2",
|
||||
strokeLinecap: "round",
|
||||
strokeLinejoin: "round",
|
||||
}),
|
||||
el("rect", {
|
||||
x: "3",
|
||||
y: "3",
|
||||
width: "18",
|
||||
height: "18",
|
||||
rx: "2",
|
||||
stroke: "currentColor",
|
||||
strokeWidth: "2",
|
||||
}),
|
||||
);
|
||||
|
||||
// Group block icon
|
||||
const groupBlockIcon = el(
|
||||
"svg",
|
||||
{
|
||||
width: "24",
|
||||
height: "24",
|
||||
viewBox: "0 0 24 24",
|
||||
fill: "none",
|
||||
},
|
||||
el("path", {
|
||||
d: "M17 21V19C17 17.9391 16.5786 16.9217 15.8284 16.1716C15.0783 15.4214 14.0609 15 13 15H5C3.93913 15 2.92172 15.4214 2.17157 16.1716C1.42143 16.9217 1 17.9391 1 19V21",
|
||||
stroke: "currentColor",
|
||||
strokeWidth: "2",
|
||||
strokeLinecap: "round",
|
||||
strokeLinejoin: "round",
|
||||
}),
|
||||
el("circle", {
|
||||
cx: "9",
|
||||
cy: "7",
|
||||
r: "4",
|
||||
stroke: "currentColor",
|
||||
strokeWidth: "2",
|
||||
}),
|
||||
el("path", {
|
||||
d: "M23 21V19C22.9993 18.1137 22.7044 17.2528 22.1614 16.5523C21.6184 15.8519 20.8581 15.3516 20 15.13",
|
||||
stroke: "currentColor",
|
||||
strokeWidth: "2",
|
||||
strokeLinecap: "round",
|
||||
strokeLinejoin: "round",
|
||||
}),
|
||||
el("path", {
|
||||
d: "M16 3.13C16.8604 3.35031 17.623 3.85071 18.1676 4.55232C18.7122 5.25392 19.0078 6.11683 19.0078 7.005C19.0078 7.89318 18.7122 8.75608 18.1676 9.45769C17.623 10.1593 16.8604 10.6597 16 10.88",
|
||||
stroke: "currentColor",
|
||||
strokeWidth: "2",
|
||||
strokeLinecap: "round",
|
||||
strokeLinejoin: "round",
|
||||
}),
|
||||
);
|
||||
|
||||
// Register the Course Start button block
|
||||
registerBlockType("ldsb/start-button", {
|
||||
title: __("LearnDash Start Course Button", "learndash-start-button"),
|
||||
description: __(
|
||||
"A prominent button to start LearnDash courses",
|
||||
"learndash-start-button",
|
||||
),
|
||||
icon: courseBlockIcon,
|
||||
category: "common",
|
||||
keywords: [
|
||||
__("learndash", "learndash-start-button"),
|
||||
__("start", "learndash-start-button"),
|
||||
__("course", "learndash-start-button"),
|
||||
__("button", "learndash-start-button"),
|
||||
],
|
||||
attributes: {
|
||||
courseId: {
|
||||
type: "number",
|
||||
default: 0,
|
||||
},
|
||||
buttonText: {
|
||||
type: "string",
|
||||
default: "Start Course",
|
||||
},
|
||||
newTab: {
|
||||
type: "boolean",
|
||||
default: false,
|
||||
},
|
||||
alignment: {
|
||||
type: "string",
|
||||
default: "left",
|
||||
enum: ["left", "center", "right"],
|
||||
},
|
||||
},
|
||||
supports: {
|
||||
align: false, // We handle alignment internally
|
||||
className: true,
|
||||
html: false,
|
||||
},
|
||||
|
||||
// Edit function - what you see in the editor
|
||||
edit: function (props) {
|
||||
const {
|
||||
attributes: { courseId, buttonText, newTab, alignment },
|
||||
setAttributes,
|
||||
className,
|
||||
} = props;
|
||||
|
||||
const blockProps = useBlockProps({
|
||||
className: `align-${alignment} ${courseId === 0 ? "no-course" : ""}`,
|
||||
});
|
||||
|
||||
// Update alignment
|
||||
function onChangeAlignment(newAlignment) {
|
||||
setAttributes({ alignment: newAlignment || "left" });
|
||||
}
|
||||
|
||||
return el(
|
||||
Fragment,
|
||||
{},
|
||||
// Block Controls (toolbar)
|
||||
el(
|
||||
BlockControls,
|
||||
{},
|
||||
el(AlignmentToolbar, {
|
||||
value: alignment,
|
||||
onChange: onChangeAlignment,
|
||||
alignmentControls: [
|
||||
{
|
||||
icon: "editor-alignleft",
|
||||
title: __("Align left", "learndash-start-button"),
|
||||
align: "left",
|
||||
},
|
||||
{
|
||||
icon: "editor-aligncenter",
|
||||
title: __("Align center", "learndash-start-button"),
|
||||
align: "center",
|
||||
},
|
||||
{
|
||||
icon: "editor-alignright",
|
||||
title: __("Align right", "learndash-start-button"),
|
||||
align: "right",
|
||||
},
|
||||
],
|
||||
}),
|
||||
),
|
||||
|
||||
// Inspector Controls (sidebar)
|
||||
el(
|
||||
InspectorControls,
|
||||
{},
|
||||
el(
|
||||
PanelBody,
|
||||
{
|
||||
title: __("Button Settings", "learndash-start-button"),
|
||||
initialOpen: true,
|
||||
},
|
||||
el(
|
||||
PanelRow,
|
||||
{},
|
||||
el(TextControl, {
|
||||
label: __("Course ID", "learndash-start-button"),
|
||||
help: __(
|
||||
"Enter the LearnDash course ID. Leave empty to use current course.",
|
||||
"learndash-start-button",
|
||||
),
|
||||
value: courseId || "",
|
||||
onChange: function (value) {
|
||||
var parsed = parseInt(value, 10);
|
||||
setAttributes({ courseId: isNaN(parsed) || parsed < 0 ? 0 : parsed });
|
||||
},
|
||||
type: "number",
|
||||
min: 0,
|
||||
}),
|
||||
),
|
||||
el(
|
||||
PanelRow,
|
||||
{},
|
||||
el(TextControl, {
|
||||
label: __("Button Text", "learndash-start-button"),
|
||||
help: __(
|
||||
"The text to display on the button",
|
||||
"learndash-start-button",
|
||||
),
|
||||
value: buttonText,
|
||||
onChange: function (value) {
|
||||
setAttributes({ buttonText: value || "Start Course" });
|
||||
},
|
||||
}),
|
||||
),
|
||||
el(
|
||||
PanelRow,
|
||||
{},
|
||||
el(ToggleControl, {
|
||||
label: __("Open in New Tab", "learndash-start-button"),
|
||||
help: __(
|
||||
"Open the course in a new browser tab",
|
||||
"learndash-start-button",
|
||||
),
|
||||
checked: newTab,
|
||||
onChange: function (value) {
|
||||
setAttributes({ newTab: value });
|
||||
},
|
||||
}),
|
||||
),
|
||||
),
|
||||
|
||||
// Usage instructions panel
|
||||
el(
|
||||
PanelBody,
|
||||
{
|
||||
title: __("Usage Instructions", "learndash-start-button"),
|
||||
initialOpen: false,
|
||||
},
|
||||
el(
|
||||
"div",
|
||||
{ className: "ldsb-help-text" },
|
||||
el(
|
||||
"p",
|
||||
{},
|
||||
__("This button will automatically:", "learndash-start-button"),
|
||||
),
|
||||
el(
|
||||
"ul",
|
||||
{},
|
||||
el(
|
||||
"li",
|
||||
{},
|
||||
__(
|
||||
"• Link to the first lesson if available",
|
||||
"learndash-start-button",
|
||||
),
|
||||
),
|
||||
el(
|
||||
"li",
|
||||
{},
|
||||
__(
|
||||
'• Show "Login to Start" for logged-out users',
|
||||
"learndash-start-button",
|
||||
),
|
||||
),
|
||||
el(
|
||||
"li",
|
||||
{},
|
||||
__(
|
||||
'• Show "Enroll to Start" for non-enrolled users',
|
||||
"learndash-start-button",
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
// Block Preview
|
||||
el(
|
||||
"div",
|
||||
blockProps,
|
||||
el(
|
||||
"div",
|
||||
{
|
||||
className: `ldsb-button-wrapper align-${alignment}`,
|
||||
style: { textAlign: alignment },
|
||||
},
|
||||
el(
|
||||
"a",
|
||||
{
|
||||
className: "ldsb-start-button",
|
||||
href: "#",
|
||||
onClick: function (e) {
|
||||
e.preventDefault();
|
||||
},
|
||||
},
|
||||
el("span", { className: "ldsb-button-text" }, buttonText),
|
||||
arrowIcon,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
|
||||
// Save function - null because this is a dynamic block
|
||||
save: function () {
|
||||
return null; // Dynamic block rendered by PHP
|
||||
},
|
||||
});
|
||||
|
||||
// Register the Group Start button block
|
||||
registerBlockType("ldsb/start-group", {
|
||||
title: __("LearnDash Start Group Work", "learndash-start-button"),
|
||||
description: __(
|
||||
"A button to start the first course in a LearnDash group",
|
||||
"learndash-start-button",
|
||||
),
|
||||
icon: groupBlockIcon,
|
||||
category: "common",
|
||||
keywords: [
|
||||
__("learndash", "learndash-start-button"),
|
||||
__("group", "learndash-start-button"),
|
||||
__("start", "learndash-start-button"),
|
||||
__("button", "learndash-start-button"),
|
||||
],
|
||||
attributes: {
|
||||
groupId: {
|
||||
type: "number",
|
||||
default: 0,
|
||||
},
|
||||
buttonText: {
|
||||
type: "string",
|
||||
default: "Start First Course",
|
||||
},
|
||||
newTab: {
|
||||
type: "boolean",
|
||||
default: false,
|
||||
},
|
||||
alignment: {
|
||||
type: "string",
|
||||
default: "left",
|
||||
enum: ["left", "center", "right"],
|
||||
},
|
||||
},
|
||||
supports: {
|
||||
align: false,
|
||||
className: true,
|
||||
html: false,
|
||||
},
|
||||
|
||||
// Edit function
|
||||
edit: function (props) {
|
||||
const {
|
||||
attributes: { groupId, buttonText, newTab, alignment },
|
||||
setAttributes,
|
||||
className,
|
||||
} = props;
|
||||
|
||||
const blockProps = useBlockProps({
|
||||
className: `align-${alignment} ${groupId === 0 ? "no-group" : ""}`,
|
||||
});
|
||||
|
||||
function onChangeAlignment(newAlignment) {
|
||||
setAttributes({ alignment: newAlignment || "left" });
|
||||
}
|
||||
|
||||
return el(
|
||||
Fragment,
|
||||
{},
|
||||
// Block Controls
|
||||
el(
|
||||
BlockControls,
|
||||
{},
|
||||
el(AlignmentToolbar, {
|
||||
value: alignment,
|
||||
onChange: onChangeAlignment,
|
||||
alignmentControls: [
|
||||
{
|
||||
icon: "editor-alignleft",
|
||||
title: __("Align left", "learndash-start-button"),
|
||||
align: "left",
|
||||
},
|
||||
{
|
||||
icon: "editor-aligncenter",
|
||||
title: __("Align center", "learndash-start-button"),
|
||||
align: "center",
|
||||
},
|
||||
{
|
||||
icon: "editor-alignright",
|
||||
title: __("Align right", "learndash-start-button"),
|
||||
align: "right",
|
||||
},
|
||||
],
|
||||
}),
|
||||
),
|
||||
|
||||
// Inspector Controls
|
||||
el(
|
||||
InspectorControls,
|
||||
{},
|
||||
el(
|
||||
PanelBody,
|
||||
{
|
||||
title: __("Group Button Settings", "learndash-start-button"),
|
||||
initialOpen: true,
|
||||
},
|
||||
el(
|
||||
PanelRow,
|
||||
{},
|
||||
el(TextControl, {
|
||||
label: __("Group ID", "learndash-start-button"),
|
||||
help: __(
|
||||
"Enter the LearnDash group ID. Leave empty to use current group.",
|
||||
"learndash-start-button",
|
||||
),
|
||||
value: groupId || "",
|
||||
onChange: function (value) {
|
||||
var parsed = parseInt(value, 10);
|
||||
setAttributes({ groupId: isNaN(parsed) || parsed < 0 ? 0 : parsed });
|
||||
},
|
||||
type: "number",
|
||||
min: 0,
|
||||
}),
|
||||
),
|
||||
el(
|
||||
PanelRow,
|
||||
{},
|
||||
el(TextControl, {
|
||||
label: __("Button Text", "learndash-start-button"),
|
||||
help: __(
|
||||
"The text to display on the button",
|
||||
"learndash-start-button",
|
||||
),
|
||||
value: buttonText,
|
||||
onChange: function (value) {
|
||||
setAttributes({ buttonText: value || "Start First Course" });
|
||||
},
|
||||
}),
|
||||
),
|
||||
el(
|
||||
PanelRow,
|
||||
{},
|
||||
el(ToggleControl, {
|
||||
label: __("Open in New Tab", "learndash-start-button"),
|
||||
help: __(
|
||||
"Open the course in a new browser tab",
|
||||
"learndash-start-button",
|
||||
),
|
||||
checked: newTab,
|
||||
onChange: function (value) {
|
||||
setAttributes({ newTab: value });
|
||||
},
|
||||
}),
|
||||
),
|
||||
),
|
||||
|
||||
el(
|
||||
PanelBody,
|
||||
{
|
||||
title: __("How It Works", "learndash-start-button"),
|
||||
initialOpen: false,
|
||||
},
|
||||
el(
|
||||
"div",
|
||||
{ className: "ldsb-help-text" },
|
||||
el("p", {}, __("This button will:", "learndash-start-button")),
|
||||
el(
|
||||
"ul",
|
||||
{},
|
||||
el(
|
||||
"li",
|
||||
{},
|
||||
__(
|
||||
"• Link to the first course in the group",
|
||||
"learndash-start-button",
|
||||
),
|
||||
),
|
||||
el(
|
||||
"li",
|
||||
{},
|
||||
__(
|
||||
"• Go to the first lesson if available",
|
||||
"learndash-start-button",
|
||||
),
|
||||
),
|
||||
el(
|
||||
"li",
|
||||
{},
|
||||
__(
|
||||
'• Show "Login to Start" for logged-out users',
|
||||
"learndash-start-button",
|
||||
),
|
||||
),
|
||||
el(
|
||||
"li",
|
||||
{},
|
||||
__(
|
||||
'• Show "Join Group to Start" for non-members',
|
||||
"learndash-start-button",
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
// Block Preview
|
||||
el(
|
||||
"div",
|
||||
blockProps,
|
||||
el(
|
||||
"div",
|
||||
{
|
||||
className: `ldsb-button-wrapper align-${alignment}`,
|
||||
style: { textAlign: alignment },
|
||||
},
|
||||
el(
|
||||
"a",
|
||||
{
|
||||
className: "ldsb-start-button ldsb-group-button",
|
||||
href: "#",
|
||||
onClick: function (e) {
|
||||
e.preventDefault();
|
||||
},
|
||||
},
|
||||
el("span", { className: "ldsb-button-text" }, buttonText),
|
||||
arrowIcon,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
|
||||
save: function () {
|
||||
return null; // Dynamic block
|
||||
},
|
||||
});
|
||||
})(window.wp);
|
||||
Loading…
Add table
Add a link
Reference in a new issue