?>
/**
* GeneratePress.
*
* Please do not make any edits to this file. All edits should be done in a child theme.
*
* @package GeneratePress
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
// Set our theme version.
define( 'GENERATE_VERSION', '3.4.0' );
if ( ! function_exists( 'generate_setup' ) ) {
add_action( 'after_setup_theme', 'generate_setup' );
/**
* Sets up theme defaults and registers support for various WordPress features.
*
* @since 0.1
*/
function generate_setup() {
// Make theme available for translation.
load_theme_textdomain( 'generatepress' );
// Add theme support for various features.
add_theme_support( 'automatic-feed-links' );
add_theme_support( 'post-thumbnails' );
add_theme_support( 'post-formats', array( 'aside', 'image', 'video', 'quote', 'link', 'status' ) );
add_theme_support( 'woocommerce' );
add_theme_support( 'title-tag' );
add_theme_support( 'html5', array( 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption', 'script', 'style' ) );
add_theme_support( 'customize-selective-refresh-widgets' );
add_theme_support( 'align-wide' );
add_theme_support( 'responsive-embeds' );
$color_palette = generate_get_editor_color_palette();
if ( ! empty( $color_palette ) ) {
add_theme_support( 'editor-color-palette', $color_palette );
}
add_theme_support(
'custom-logo',
array(
'height' => 70,
'width' => 350,
'flex-height' => true,
'flex-width' => true,
)
);
// Register primary menu.
register_nav_menus(
array(
'primary' => __( 'Primary Menu', 'generatepress' ),
)
);
/**
* Set the content width to something large
* We set a more accurate width in generate_smart_content_width()
*/
global $content_width;
if ( ! isset( $content_width ) ) {
$content_width = 1200; /* pixels */
}
// Add editor styles to the block editor.
add_theme_support( 'editor-styles' );
$editor_styles = apply_filters(
'generate_editor_styles',
array(
'assets/css/admin/block-editor.css',
)
);
add_editor_style( $editor_styles );
}
}
/**
* Get all necessary theme files
*/
$theme_dir = get_template_directory();
require $theme_dir . '/inc/theme-functions.php';
require $theme_dir . '/inc/defaults.php';
require $theme_dir . '/inc/class-css.php';
require $theme_dir . '/inc/css-output.php';
require $theme_dir . '/inc/general.php';
require $theme_dir . '/inc/customizer.php';
require $theme_dir . '/inc/markup.php';
require $theme_dir . '/inc/typography.php';
require $theme_dir . '/inc/plugin-compat.php';
require $theme_dir . '/inc/block-editor.php';
require $theme_dir . '/inc/class-typography.php';
require $theme_dir . '/inc/class-typography-migration.php';
require $theme_dir . '/inc/class-html-attributes.php';
require $theme_dir . '/inc/class-theme-update.php';
require $theme_dir . '/inc/class-rest.php';
require $theme_dir . '/inc/deprecated.php';
if ( is_admin() ) {
require $theme_dir . '/inc/meta-box.php';
require $theme_dir . '/inc/class-dashboard.php';
}
/**
* Load our theme structure
*/
require $theme_dir . '/inc/structure/archives.php';
require $theme_dir . '/inc/structure/comments.php';
require $theme_dir . '/inc/structure/featured-images.php';
require $theme_dir . '/inc/structure/footer.php';
require $theme_dir . '/inc/structure/header.php';
require $theme_dir . '/inc/structure/navigation.php';
require $theme_dir . '/inc/structure/post-meta.php';
require $theme_dir . '/inc/structure/sidebars.php';
require $theme_dir . '/inc/structure/search-modal.php';
/** @jsx jsx */
/**
* WordPress dependencies
*/
const { __ } = wp.i18n;
const {
TextControl,
BaseControl,
Icon,
Notice,
Button,
Flex,
FlexItem,
SelectControl,
FlexBlock,
Modal,
} = wp.components;
const { useState, useEffect } = wp.element;
const { useSelect, dispatch } = wp.data;
import { snackbarNotice } from "@/admin/blocks/util";
import Menu from "@/admin/ui/Menu";
import { css, jsx } from "@emotion/core";
import Preview from "./Preview";
import Behavior from "./Behavior";
import Controls from "./Controls";
import Style from "./Style";
import ActionBar from "../presets/ActionBar";
import CTA from "../presets/CTA";
import Email from "../presets/Email";
function EditPlayerPreset({
type = "new",
closeModal,
addPreset,
onSave,
updatePreset,
name = "",
attributes,
preset = {
"play-large": true,
rewind: true,
play: true,
"fast-forward": true,
progress: true,
"current-time": true,
mute: true,
volume: true,
speed: false,
pip: false,
// behavior
save_player_position: false,
reset_on_end: false,
sticky_scroll: false,
// style
hide_logo: false,
border_radius: 0,
skin: "default",
background_color: "",
control_color: "",
// features
cta: {},
email_collection: {},
action_bar: {},
},
}) {
const [loading, setLoading] = useState(false);
const [error, setError] = useState("");
const [menu, setMenu] = useState("");
const [thisName, setThisName] = useState(name);
const [state, setState] = useState(preset);
const branding = useSelect((select) => {
return select("presto-player/player").branding();
});
const [value, setValue] = useState("");
const genericError = {
message: __(
"The preset could not be saved. Please reload the page and try again.",
"presto-player"
),
};
//you tube feature
const youtube = useSelect((select) => {
return select("presto-player/player").youtube();
});
useEffect(() => {
setValue(youtube.channel_id);
}, [youtube?.channel_id]);
// update state
const updateState = (updated = {}) => {
setState({ ...state, ...updated });
};
const putPreset = async () => {
setLoading(true);
try {
const data = {
...state,
...{ name: thisName },
};
let saved = await wp.apiFetch({
method: "POST",
url: wp.url.addQueryArgs(
`${prestoPlayer.root}${prestoPlayer.prestoVersionString}audio-preset/${preset.id}`,
{ _method: "PUT" }
),
data,
});
if (!saved) {
throw genericError;
}
// update or create here
updatePreset(saved);
closeModal();
!!onSave && onSave(saved);
snackbarNotice({ message: __("Preset updated!", "presto-player") });
} catch (e) {
setError(e?.message ? e.message : genericError);
} finally {
setLoading(false);
}
// youtube id save
dispatch("presto-player/player").updateYoutube({ channel_id: value });
const data = {
...youtube,
...{ channel_id: value },
};
try {
let response = await wp.apiFetch({
path: "wp/v2/settings",
method: "POST",
data: {
presto_player_youtube: data,
},
});
if (response?.presto_player_youtube) {
dispatch("presto-player/player").setYoutube(
response?.presto_player_youtube
);
onClose();
}
} catch (e) {
console.log(e);
}
};
const createPreset = async () => {
setLoading(true);
try {
let saved = await wp.apiFetch({
method: "POST",
url:
prestoPlayer.root + prestoPlayer.prestoVersionString + "audio-preset",
data: {
...{ name: thisName },
...state,
},
});
if (!saved) {
throw genericError;
}
// update or create here
addPreset(saved);
closeModal();
!!onSave && onSave(saved);
snackbarNotice({ message: __("Preset created!", "presto-player") });
} catch (e) {
setError(e?.message ? e.message : genericError);
} finally {
setLoading(false);
}
};
// validate and save
const save = () => {
if (!thisName) {
setError(__("You must enter a name for the preset.", "presto-player"));
return;
}
return type === "edit" ? putPreset() : createPreset();
};
const tabs = [
{
name: "controls",
title: __("Controls", "presto-player"),
icon: ,
component: ,
},
{
name: "behavior",
title: __("Behavior", "presto-player"),
icon: ,
component: ,
},
{
name: "style",
title: __("Style", "presto-player"),
icon: ,
component: ,
},
{
name: "email",
title: __("Email Capture", "presto-player"),
icon: ,
component: ,
},
{
name: "cta",
title: __("Call To Action", "presto-player"),
icon: ,
component: ,
},
{
name: "action_bar",
title: __("Action Bar", "presto-player"),
icon: ,
component: (
),
},
];
return (
setThisName(name)}
placeholder={__("Enter a preset name...", "presto-player")}
className="presto-player__modal--style-name"
autoFocus
/>
{
updateState({ skin });
}}
/>
{/*
Disable the audio tag so the user clicking on it won't play the
audio when the controls are enabled.
*/}
{error && (
{error.replace(/(<([^>]+)>)/gi, "")}
)}